1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177
|
#
# i386 tests
#
proc run_list_test { name opts } {
global srcdir subdir
set testname "i386 $name"
set file $srcdir/$subdir/$name
gas_run ${name}.s $opts ">&dump.out"
if { [regexp_diff "dump.out" "${file}.l"] } then {
fail $testname
verbose "output is [file_contents "dump.out"]" 2
return
}
pass $testname
}
proc gas_64_check { } {
global NM
global NMFLAGS
global srcdir
catch "exec $srcdir/lib/run $NM $NMFLAGS --help" nm_help
return [regexp "targets:.*x86-64" $nm_help]
}
proc gas_32_check { } {
global NM
global NMFLAGS
global srcdir
catch "exec $srcdir/lib/run $NM $NMFLAGS --help" nm_help
return [regexp "targets:.*i386" $nm_help]
}
if [expr ([istarget "i*86-*-*"] || [istarget "x86_64-*-*"]) && [gas_32_check]] then {
global ASFLAGS
set old_ASFLAGS "$ASFLAGS"
set ASFLAGS "$ASFLAGS --32"
run_list_test "float" "-al"
run_list_test "general" "-al --listing-lhs-width=2"
run_list_test "inval" "-al"
run_list_test "segment" "-al"
run_list_test "inval-seg" "-al"
run_list_test "modrm" "-al --listing-lhs-width=2"
run_dump_test "naked"
run_dump_test "opcode"
run_dump_test "intel"
run_dump_test "intel16"
run_list_test "intelbad" ""
run_dump_test "intelok"
run_dump_test "prefix"
run_dump_test "amd"
run_dump_test "katmai"
run_dump_test "jump"
run_dump_test "ssemmx2"
run_dump_test "sse2"
run_dump_test "sub"
run_dump_test "prescott"
run_dump_test "sib"
run_dump_test "vmx"
run_dump_test "suffix"
run_dump_test "immed32"
run_dump_test "equ"
run_dump_test "divide"
run_dump_test "padlock"
run_dump_test "crx"
run_list_test "cr-err" ""
run_dump_test "svme"
run_dump_test "merom"
run_dump_test "rep"
run_dump_test "rep-suffix"
# These tests require support for 8 and 16 bit relocs,
# so we only run them for ELF and COFF targets.
if {[is_elf_format] || [istarget "*-*-coff*"]} then {
run_dump_test "reloc"
run_dump_test "jump16"
run_list_test "white" "-al --listing-lhs-width=3"
# These tests should in theory work for PE targets as well,
# but the relocs we currently produce are slightly different
# from those produced for ELF/COFF based toolchains.
# So for now we ignore PE targets.
run_dump_test "pcrel"
run_dump_test "absrel"
}
# ELF specific tests
if [is_elf_format] then {
# PIC is only supported on ELF targets.
run_dump_test "intelpic"
run_dump_test "relax"
run_dump_test "gotpc"
run_dump_test "tlsd"
run_dump_test "tlspic"
run_dump_test "tlsnopic"
run_dump_test "bss"
run_dump_test "reloc32"
run_list_test "reloc32" "--defsym _bad_=1"
run_dump_test "mixed-mode-reloc32"
}
# This is a PE specific test.
if { [istarget "*-*-cygwin*"] || [istarget "*-*-pe"]
|| [istarget "*-*-mingw*"]
} then {
run_dump_test "secrel"
}
set ASFLAGS "$old_ASFLAGS"
}
if [expr ([istarget "i*86-*-*"] || [istarget "x86_64-*-*"]) && [gas_64_check]] then {
global ASFLAGS
set old_ASFLAGS "$ASFLAGS"
set ASFLAGS "$ASFLAGS --64"
run_dump_test "x86_64"
run_dump_test "x86-64-addr32"
run_dump_test "x86-64-opcode"
run_dump_test "x86-64-pcrel"
run_dump_test "x86-64-rip"
run_dump_test "x86-64-stack"
run_dump_test "x86-64-stack-intel"
run_dump_test "x86-64-stack-suffix"
run_list_test "x86-64-inval" "-al"
run_list_test "x86-64-segment" "-al"
run_list_test "x86-64-inval-seg" "-al"
run_dump_test "x86-64-branch"
run_dump_test "svme64"
run_dump_test "x86-64-vmx"
run_dump_test "immed64"
run_dump_test "x86-64-prescott"
run_dump_test "x86-64-crx"
run_dump_test "x86-64-crx-suffix"
run_dump_test "x86-64-drx"
run_dump_test "x86-64-drx-suffix"
run_dump_test "x86-64-merom"
run_dump_test "x86-64-rep"
run_dump_test "x86-64-rep-suffix"
if { ![istarget "*-*-aix*"]
&& ![istarget "*-*-beos*"]
&& ![istarget "*-*-*bsd*"]
&& ![istarget "*-*-chaos*"]
&& ![istarget "*-*-kaos*"]
&& ![istarget "*-*-lynx*"]
&& ![istarget "*-*-moss*"]
&& ![istarget "*-*-nto-qnx*"]
&& ![istarget "*-*-rtems*"]
&& ![istarget "*-*-sco*"]
&& ![istarget "*-*-solaris*"]
&& ![istarget "*-*-sysv*"] } then {
run_dump_test "rex"
}
# For ELF targets verify that @unwind works.
if { ([istarget "*-*-elf*"] || [istarget "*-*-linux*"]
|| [istarget "*-*-solaris2.*"])
&& ![istarget *-*-linux*aout*]
&& ![istarget *-*-linux*oldld*] } then {
run_dump_test "x86-64-unwind"
}
# ELF specific tests
if [is_elf_format] then {
run_dump_test "reloc64"
run_list_test "reloc64" "--defsym _bad_=1"
run_dump_test "mixed-mode-reloc64"
}
set ASFLAGS "$old_ASFLAGS"
}
|