| # |
| # 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" |
| } |