1 #!/bin/sh 2 3 # arm_farcall_thumb_thumb.sh -- a test case for Thumb->Thumb farcall veneers. 4 5 # Copyright (C) 2010-2014 Free Software Foundation, Inc. 6 # Written by Matthew Gretton-Dann <matthew.gretton-dann (at] arm.com> 7 # Based upon arm_cortex_a8.sh 8 # Written by Doug Kwan <dougkwan (at] google.com>. 9 10 # This file is part of gold. 11 12 # This program is free software; you can redistribute it and/or modify 13 # it under the terms of the GNU General Public License as published by 14 # the Free Software Foundation; either version 3 of the License, or 15 # (at your option) any later version. 16 17 # This program is distributed in the hope that it will be useful, 18 # but WITHOUT ANY WARRANTY; without even the implied warranty of 19 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 20 # GNU General Public License for more details. 21 22 # You should have received a copy of the GNU General Public License 23 # along with this program; if not, write to the Free Software 24 # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, 25 # MA 02110-1301, USA. 26 27 check() 28 { 29 if ! grep -q "$2" "$1" 30 then 31 echo "Did not find expected instruction in $1:" 32 echo " $2" 33 echo "" 34 echo "Actual instructions below:" 35 cat "$1" 36 exit 1 37 fi 38 } 39 40 # Thumb->Thumb default 41 check arm_farcall_thumb_thumb.stdout "1004: .* bx pc" 42 check arm_farcall_thumb_thumb.stdout "1006: .* nop" 43 check arm_farcall_thumb_thumb.stdout "1008: c000" 44 check arm_farcall_thumb_thumb.stdout "100a: e59f" 45 check arm_farcall_thumb_thumb.stdout "100c: ff1c e12f" 46 check arm_farcall_thumb_thumb.stdout "1010: 1015" 47 check arm_farcall_thumb_thumb.stdout "1012: 0200" 48 49 # Thumb->Thumb with v5T interworking 50 check arm_farcall_thumb_thumb_5t.stdout "1004: f004 e51f" 51 check arm_farcall_thumb_thumb_5t.stdout "1008: 1015" 52 check arm_farcall_thumb_thumb_5t.stdout "100a: 0200" 53 54 # Thumb->Thumb on v6-M 55 check arm_farcall_thumb_thumb_6m.stdout "1004: .* push {r0}" 56 check arm_farcall_thumb_thumb_6m.stdout "1006: .* ldr r0, \\[pc, #8\\]" 57 check arm_farcall_thumb_thumb_6m.stdout "1008: .* mov ip, r0" 58 check arm_farcall_thumb_thumb_6m.stdout "100a: .* pop {r0}" 59 check arm_farcall_thumb_thumb_6m.stdout "100c: .* bx ip" 60 check arm_farcall_thumb_thumb_6m.stdout "100e: .* nop" 61 check arm_farcall_thumb_thumb_6m.stdout "1010: 1015" 62 check arm_farcall_thumb_thumb_6m.stdout "1012: 0200" 63 64 # Thumb->Thumb on v7-M 65 check arm_farcall_thumb_thumb_6m.stdout "1004: .* push {r0}" 66 check arm_farcall_thumb_thumb_6m.stdout "1006: .* ldr r0, \\[pc, #8\\]" 67 check arm_farcall_thumb_thumb_6m.stdout "1008: .* mov ip, r0" 68 check arm_farcall_thumb_thumb_6m.stdout "100a: .* pop {r0}" 69 check arm_farcall_thumb_thumb_6m.stdout "100c: .* bx ip" 70 check arm_farcall_thumb_thumb_6m.stdout "100e: .* nop" 71 check arm_farcall_thumb_thumb_6m.stdout "1010: 1015" 72 check arm_farcall_thumb_thumb_6m.stdout "1012: 0200" 73 74 exit 0 75