diff options
Diffstat (limited to 'binutils/testsuite/binutils-all/x86-64')
5 files changed, 209 insertions, 0 deletions
diff --git a/binutils/testsuite/binutils-all/x86-64/objdump-sframe-01.d b/binutils/testsuite/binutils-all/x86-64/objdump-sframe-01.d new file mode 100644 index 0000000..cca83cb --- /dev/null +++ b/binutils/testsuite/binutils-all/x86-64/objdump-sframe-01.d @@ -0,0 +1,18 @@ +#PROG:objcopy +#name: objdump dump SFrame section .sframe2 +#source: sframe-func.s +#as: --gsframe +#objcopy: --rename-section .sframe=.sframe2 +#objdump: --sframe=.sframe2 +#target: x86_64-*-* +#xfail: ![gas_sframe_check] + +#... + Header : + + Version: SFRAME_VERSION_2 + Flags: SFRAME_F_FDE_FUNC_START_PCREL + CFA fixed RA offset: -8 + Num FDEs: 1 + Num FREs: 4 +#pass diff --git a/binutils/testsuite/binutils-all/x86-64/pr33198.c b/binutils/testsuite/binutils-all/x86-64/pr33198.c new file mode 100644 index 0000000..cd0130c --- /dev/null +++ b/binutils/testsuite/binutils-all/x86-64/pr33198.c @@ -0,0 +1,4 @@ +void +foo (void) +{ +} diff --git a/binutils/testsuite/binutils-all/x86-64/readelf-sframe-01.d b/binutils/testsuite/binutils-all/x86-64/readelf-sframe-01.d new file mode 100644 index 0000000..a6973d8 --- /dev/null +++ b/binutils/testsuite/binutils-all/x86-64/readelf-sframe-01.d @@ -0,0 +1,18 @@ +#PROG:objcopy +#name: readelf dump SFrame section .sframe2 +#source: sframe-func.s +#as: --gsframe +#objcopy: --rename-section .sframe=.sframe2 +#readelf: --sframe=.sframe2 +#target: x86_64-*-* +#xfail: ![gas_sframe_check] + +#... + Header : + + Version: SFRAME_VERSION_2 + Flags: SFRAME_F_FDE_FUNC_START_PCREL + CFA fixed RA offset: -8 + Num FDEs: 1 + Num FREs: 4 +#pass diff --git a/binutils/testsuite/binutils-all/x86-64/sframe-func.s b/binutils/testsuite/binutils-all/x86-64/sframe-func.s new file mode 100644 index 0000000..cbd83c3 --- /dev/null +++ b/binutils/testsuite/binutils-all/x86-64/sframe-func.s @@ -0,0 +1,11 @@ + .cfi_sections .sframe + .cfi_startproc + .long 8 + .cfi_def_cfa_offset 16 + .cfi_offset 6, -16 + .long 8 + .cfi_def_cfa_register 6 + .long 8 + .cfi_def_cfa 7, 8 + .long 8 + .cfi_endproc diff --git a/binutils/testsuite/binutils-all/x86-64/x86-64.exp b/binutils/testsuite/binutils-all/x86-64/x86-64.exp index 05c7304..ab1aa50 100644 --- a/binutils/testsuite/binutils-all/x86-64/x86-64.exp +++ b/binutils/testsuite/binutils-all/x86-64/x86-64.exp @@ -96,3 +96,161 @@ if {[catch "system \"bzip2 -dc $t > $tempfile\""] != 0} { } } } + +proc run_pr33198_test { fat strip_flags } { + global srcdir + global subdir + global llvm_plug_opt + global AR + global CLANG_FOR_TARGET + global NM + global READELF + global STRIP + + set test pr33198 + set testname "${test}${fat} with $strip_flags" + + if { [istarget "x86_64-*-linux*-gnux32"] \ + || ![info exists CLANG_FOR_TARGET] + || [string match "" $llvm_plug_opt] } then { + untested $testname + return + } + + set src $srcdir/$subdir/${test}.c + set obj tmpdir/${test}${fat}.o + set archive tmpdir/${test}${fat}.a + set CLANG_CFLAGS "-c -O2 -flto" + if { "$fat" == "-fat" } { + append CLANG_CFLAGS " -ffat-lto-objects" + } + + append strip_flags " --strip-unneeded $llvm_plug_opt" + + set cmd "$CLANG_FOR_TARGET $CLANG_CFLAGS -o $obj $src" + send_log "$cmd\n" + verbose "$cmd" 1 + catch "exec $cmd" got + if ![string match "" $got] then { + send_log "$got\n" + verbose "$got" 1 + fail "$testname ($obj)" + return + } + + set cmd "$NM $llvm_plug_opt $obj\n" + send_log "$cmd\n" + verbose "$cmd" 1 + catch "exec $cmd" got + if ![regexp "0+ T foo" $got] then { + send_log "$got\n" + verbose "$got" 1 + fail "$testname ($obj)" + return + } + + pass "$testname ($obj)" + + set cmd "$STRIP $strip_flags $obj -o ${obj}.strip" + send_log "$cmd\n" + verbose "$cmd" 1 + catch "exec $cmd" got + if ![string match "" $got] then { + send_log "$got\n" + verbose "$got" 1 + fail "$testname (strip $obj)" + return + } + + set cmd "$NM $llvm_plug_opt ${obj}.strip" + send_log "$cmd\n" + verbose "$cmd" 1 + catch "exec $cmd" got + if ![regexp "0+ T foo" $got] then { + send_log "$got\n" + verbose "$got" 1 + fail "$testname (strip $obj)" + return + } + + if { "$fat" == "-fat" } { + set cmd "$READELF -SW ${obj}.strip" + send_log "$cmd\n" + verbose "$cmd" 1 + catch "exec $cmd" got + if [regexp "\.llvm\.lto *LLVM_LTO *" $got] then { + send_log "$got\n" + verbose "$got" 1 + fail "$testname (strip $obj)" + return + } + } + + pass "$testname (strip $obj)" + + set cmd "$AR $llvm_plug_opt -s -r -c $archive $obj" + send_log "$cmd\n" + verbose "$cmd" 1 + catch "exec $cmd" got + if ![string match "" $got] then { + send_log "$got\n" + verbose "$got" 1 + fail "$testname ($archive)" + return + } + + set cmd "$NM $llvm_plug_opt $archive\n" + send_log "$cmd\n" + verbose "$cmd" 1 + catch "exec $cmd" got + if ![regexp "0+ T foo" $got] then { + send_log "$got\n" + verbose "$got" 1 + fail "$testname ($archive)" + return + } + + pass "$testname ($archive)" + + set cmd "$STRIP $strip_flags $archive -o ${archive}.strip" + send_log "$cmd\n" + verbose "$cmd" 1 + catch "exec $cmd" got + if ![string match "" $got] then { + send_log "$got\n" + verbose "$got" 1 + fail "$testname (strip $archive)" + return + } + + set cmd "$NM $llvm_plug_opt ${archive}.strip" + send_log "$cmd\n" + verbose "$cmd" 1 + catch "exec $cmd" got + if ![regexp "0+ T foo" $got] then { + send_log "$got\n" + verbose "$got" 1 + fail "$testname (strip $archive)" + return + } + + if { "$fat" == "-fat" } { + set cmd "$READELF -SW ${archive}.strip" + send_log "$cmd\n" + verbose "$cmd" 1 + catch "exec $cmd" got + if [regexp "\.llvm\.lto *LLVM_LTO *" $got] then { + send_log "$got\n" + verbose "$got" 1 + fail "$testname (strip $archive)" + return + } + } + + pass "$testname (strip $archive)" +} + +run_pr33198_test "" "-R .gnu.lto_* -R .gnu.debuglto_* -R .llvm.lto -N __gnu_lto_v1" +run_pr33198_test "-fat" "-R .gnu.lto_* -R .gnu.debuglto_* -R .llvm.lto -N __gnu_lto_v1" +run_pr33198_test "" "-R .llvm.lto" +run_pr33198_test "-fat" "-R .llvm.lto" |