| 1 | # |
| 2 | # elf tests |
| 3 | # |
| 4 | |
| 5 | proc run_elf_list_test { name suffix opts readelf_opts readelf_pipe } { |
| 6 | global READELF |
| 7 | global srcdir subdir |
| 8 | set testname "elf $name list" |
| 9 | set file $srcdir/$subdir/$name |
| 10 | gas_run ${name}.s "$opts -o dump.o" ">&dump.out" |
| 11 | if { ![string match "" $opts] |
| 12 | && [regexp_diff "dump.out" "${file}.l" ""] } then { |
| 13 | fail $testname |
| 14 | verbose "output is [file_contents "dump.out"]" 2 |
| 15 | return |
| 16 | } |
| 17 | send_log "$READELF $readelf_opts dump.o $readelf_pipe > dump.out\n" |
| 18 | set status [gas_host_run "$READELF $readelf_opts dump.o" ">readelf.out"] |
| 19 | if { [lindex $status 0] != 0 || ![string match "" [lindex $status 1]] } then { |
| 20 | send_log "[lindex $status 1]\n" |
| 21 | fail $testname |
| 22 | return |
| 23 | } |
| 24 | catch "exec cat readelf.out $readelf_pipe > dump.out\n" comp_output |
| 25 | if ![string match "" $comp_output] then { |
| 26 | send_log "$comp_output\n" |
| 27 | fail $testname |
| 28 | return |
| 29 | } |
| 30 | verbose_eval {[file_contents "dump.out"]} 3 |
| 31 | if { [regexp_diff "dump.out" "${file}.e${suffix}" ""] } then { |
| 32 | fail $testname |
| 33 | verbose "output is [file_contents "dump.out"]" 2 |
| 34 | return |
| 35 | } |
| 36 | pass $testname |
| 37 | } |
| 38 | |
| 39 | # We're testing bits in obj-elf -- don't run on anything else. |
| 40 | if { ([istarget "*-*-*elf*"] |
| 41 | || [istarget "*-*-linux*"] |
| 42 | || [istarget "m6811-*"] |
| 43 | || [istarget "m6812-*"] |
| 44 | || [istarget "sparc*-*-solaris*"] |
| 45 | || [istarget "mips*-*-irix6*"] |
| 46 | || [istarget "arm*-*-eabi"]) |
| 47 | && ![istarget *-*-linux*aout*] |
| 48 | && ![istarget *-*-linux*coff*] |
| 49 | && ![istarget *-*-linux*oldld*] |
| 50 | && ![istarget sh64*-*-linux*] |
| 51 | } then { |
| 52 | set target_machine "" |
| 53 | if {[istarget "mips*-*-*"]} then { |
| 54 | set target_machine -mips |
| 55 | } |
| 56 | if {[istarget m32r*-*-*]} then { |
| 57 | set target_machine -m32r |
| 58 | } |
| 59 | if {[istarget "score-*-*"]} then { |
| 60 | set target_machine -score |
| 61 | } |
| 62 | if {[istarget "tic6x-*-*"]} then { |
| 63 | set target_machine -tic6x |
| 64 | } |
| 65 | if {[istarget "xtensa*-*-*"]} then { |
| 66 | set target_machine -xtensa |
| 67 | } |
| 68 | if {[istarget "rx-*-*"]} then { |
| 69 | set target_machine -rx |
| 70 | } |
| 71 | if { ([istarget "*arm*-*-*"] |
| 72 | || [istarget "xscale*-*-*"]) } { |
| 73 | |
| 74 | if { ([istarget "*-*-*eabi"] |
| 75 | || [istarget "*-*-linux-*"] |
| 76 | || [istarget "*-*-symbianelf"])} then { |
| 77 | set target_machine -armeabi |
| 78 | } else { |
| 79 | set target_machine -armelf |
| 80 | } |
| 81 | } |
| 82 | |
| 83 | # The MN10300 and Xtensa ports disable the assembler's call frame |
| 84 | # optimization because it interfers with link-time relaxation of |
| 85 | # function prologues. |
| 86 | if {![istarget "mn10300-*-*"] |
| 87 | && ![istarget "xtensa*-*-*"] |
| 88 | && ![istarget "am3*-*-*"]} then { |
| 89 | run_dump_test "ehopt0" |
| 90 | } |
| 91 | case $target_triplet in { |
| 92 | { m68k-*-* m68[03]??-*-* } { |
| 93 | run_dump_test "file" { { as "--defsym m68k=1" } } |
| 94 | } |
| 95 | { mmix-*-* } { |
| 96 | run_dump_test "file" { { as "--defsym mmix=1" } } |
| 97 | } |
| 98 | { xtensa*-*-* } { |
| 99 | run_dump_test "file" { { as "--rename-section file.s=file.c" } } |
| 100 | } |
| 101 | default { |
| 102 | run_dump_test "file" |
| 103 | } |
| 104 | } |
| 105 | run_dump_test "group0a" |
| 106 | run_dump_test "group0b" |
| 107 | run_dump_test "group1a" |
| 108 | run_dump_test "group1b" |
| 109 | run_dump_test "groupautoa" |
| 110 | run_dump_test "groupautob" |
| 111 | case $target_triplet in { |
| 112 | { alpha*-*-* } { } |
| 113 | { cr16*-*-* } { } |
| 114 | { crx*-*-* } { } |
| 115 | { h8300-*-* } { } |
| 116 | { hppa*-*-* } { } |
| 117 | { iq2000*-*-* } { } |
| 118 | { mips*-*-* } { } |
| 119 | { mn10200-*-* } { } |
| 120 | { mn10300-*-* } { } |
| 121 | { *c54x*-*-* } { } |
| 122 | { rx-*-* } { } |
| 123 | default { |
| 124 | # The next test can fail if the target does not convert fixups |
| 125 | # against ordinary symbols into relocations against section symbols. |
| 126 | # This is usually revealed by the error message: |
| 127 | # symbol `sym' required but not present |
| 128 | run_dump_test redef |
| 129 | run_dump_test equ-reloc |
| 130 | } |
| 131 | } |
| 132 | run_dump_test "pseudo" |
| 133 | run_dump_test "section0" |
| 134 | run_dump_test "section1" |
| 135 | if {! [istarget "h8300-*-*"]} then { |
| 136 | # The h8300 port issues a warning message for |
| 137 | # new sections created without atrributes. |
| 138 | run_elf_list_test "section2" "$target_machine" "-al" "-s" "" |
| 139 | } |
| 140 | run_dump_test "section3" |
| 141 | run_dump_test "section4" |
| 142 | if {! [istarget "h8300-*-*"]} then { |
| 143 | # The h8300 port issues a warning message for |
| 144 | # new sections created without atrributes. |
| 145 | run_elf_list_test "section5" "" "-al" "-SW" "| grep \" \\\\.test\\\[0-9\\\]\"" |
| 146 | } |
| 147 | run_dump_test "struct" |
| 148 | run_dump_test "symtab" |
| 149 | run_dump_test "symver" |
| 150 | |
| 151 | # The MSP port sets the ELF header's OSABI field to ELFOSABI_STANDALONE. |
| 152 | # The non-eabi ARM ports sets it to ELFOSABI_ARM. |
| 153 | # So for these targets we cannot include an IFUNC symbol type |
| 154 | # in the symbol type test. |
| 155 | if { [istarget "msp*-*-*"] |
| 156 | || [istarget "arm*-*-*"] |
| 157 | || [istarget "xscale*-*-*"]} then { |
| 158 | run_elf_list_test "type-noifunc" "" "" "-s" "| grep \"1 *\\\[FONTC\\\]\"" |
| 159 | } else { |
| 160 | run_dump_test ifunc-1 |
| 161 | run_elf_list_test "type" "" "" "-s" "| grep \"1 *\\\[FIONTCU\\\]\"" |
| 162 | } |
| 163 | |
| 164 | run_dump_test "section6" |
| 165 | run_dump_test "section7" |
| 166 | run_dump_test "section8" |
| 167 | run_dump_test "dwarf2-1" |
| 168 | run_dump_test "dwarf2-2" |
| 169 | run_dump_test "dwarf2-3" |
| 170 | } |