From 33aa234e0c9062e1879c399616d1b917bcd987c0 Mon Sep 17 00:00:00 2001 From: Jan Kratochvil Date: Sat, 20 Sep 2008 08:42:53 +0000 Subject: [PATCH] Provide virtual target "cfi" for targets supporting CFI. * ld-elf/eh-frame-hdr.d: Replace target and xfail statements by single `target: cfi'. * ld-elf/eh-group.exp: Call check_as_cfi instead of is_elf_format. * ld-elf/eh-group1.s, elf/eh-group2.s: Use more compatible section flags prefix '%'. * ld-elf/eh5.d: Replace target statement by `target: cfi' with an Alpha exception. Relax the `Code alignment factor' matching. * lib/ld-lib.exp: Rename istarget as istarget_ld. (istarget, check_as_cfi): New procedure. (run_dump_test): New comment for the virtual target `cfi'. --- ld/testsuite/ChangeLog | 14 +++++++++++ ld/testsuite/ld-elf/eh-frame-hdr.d | 12 +-------- ld/testsuite/ld-elf/eh-group.exp | 4 +-- ld/testsuite/ld-elf/eh-group1.s | 2 +- ld/testsuite/ld-elf/eh-group2.s | 2 +- ld/testsuite/ld-elf/eh5.d | 15 ++++++------ ld/testsuite/lib/ld-lib.exp | 39 +++++++++++++++++++++++++++++- 7 files changed, 65 insertions(+), 23 deletions(-) diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index da090bc6b32..5db8d5914be 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,17 @@ +2008-09-20 Jan Kratochvil + + Provide virtual target "cfi" for targets supporting CFI. + * ld-elf/eh-frame-hdr.d: Replace target and xfail statements by single + `target: cfi'. + * ld-elf/eh-group.exp: Call check_as_cfi instead of is_elf_format. + * ld-elf/eh-group1.s, elf/eh-group2.s: Use more compatible section + flags prefix '%'. + * ld-elf/eh5.d: Replace target statement by `target: cfi' with an Alpha + exception. Relax the `Code alignment factor' matching. + * lib/ld-lib.exp: Rename istarget as istarget_ld. + (istarget, check_as_cfi): New procedure. + (run_dump_test): New comment for the virtual target `cfi'. + 2008-09-17 Jan Kratochvil * ld-elf/eh-group.exp, ld-elf/eh-group1.s, ld-elf/eh-group2.s: New test. diff --git a/ld/testsuite/ld-elf/eh-frame-hdr.d b/ld/testsuite/ld-elf/eh-frame-hdr.d index b465e5de2d5..af8ae04bc41 100644 --- a/ld/testsuite/ld-elf/eh-frame-hdr.d +++ b/ld/testsuite/ld-elf/eh-frame-hdr.d @@ -1,17 +1,7 @@ #source: eh-frame-hdr.s #ld: -e _start --eh-frame-hdr #objdump: -hw -#target: alpha*-*-* -#target: arm*-*-* -#target: i?86-*-* -#target: m68k-*-* -#target: mips*-*-* -#target: powerpc*-*-* -#target: s390*-*-* -#target: sh*-*-* -#xfail: sh*l*-*-* -#target: sparc*-*-* -#target: x86_64-*-* +#target: cfi #... [0-9] .eh_frame_hdr 0*[12][048c] .* #pass diff --git a/ld/testsuite/ld-elf/eh-group.exp b/ld/testsuite/ld-elf/eh-group.exp index 64d2cf409fe..c55e06ebc38 100644 --- a/ld/testsuite/ld-elf/eh-group.exp +++ b/ld/testsuite/ld-elf/eh-group.exp @@ -29,9 +29,9 @@ # executable trying to create .eh_frame_hdr. It needs a separate .exp file due # to the requirement of two `ld' runs. -# Exclude non-ELF targets. +# Exclude non-CFI (such as ia64) targets. -if ![is_elf_format] { +if {![check_as_cfi]} { return } diff --git a/ld/testsuite/ld-elf/eh-group1.s b/ld/testsuite/ld-elf/eh-group1.s index ebbe31842d3..d6fdb88ef59 100644 --- a/ld/testsuite/ld-elf/eh-group1.s +++ b/ld/testsuite/ld-elf/eh-group1.s @@ -1,4 +1,4 @@ - .section sect, "axG", @progbits, sectgroup, comdat + .section sect, "axG", %progbits, sectgroup, comdat .global _start _start: .cfi_startproc diff --git a/ld/testsuite/ld-elf/eh-group2.s b/ld/testsuite/ld-elf/eh-group2.s index a589896baa6..2ec89197a64 100644 --- a/ld/testsuite/ld-elf/eh-group2.s +++ b/ld/testsuite/ld-elf/eh-group2.s @@ -1,4 +1,4 @@ - .section sect, "axG", @progbits, sectgroup, comdat + .section sect, "axG", %progbits, sectgroup, comdat .cfi_startproc .skip 16 .cfi_endproc diff --git a/ld/testsuite/ld-elf/eh5.d b/ld/testsuite/ld-elf/eh5.d index 13bff083e41..051eaca624e 100644 --- a/ld/testsuite/ld-elf/eh5.d +++ b/ld/testsuite/ld-elf/eh5.d @@ -3,14 +3,15 @@ #source: eh5b.s #ld: #readelf: -wf -#target: x86_64-*-* i?86-*-* +#target: cfi +#notarget: alpha* The section .eh_frame contains: 00000000 0000001[04] 00000000 CIE Version: 1 Augmentation: "zR" - Code alignment factor: 1 + Code alignment factor: .* Data alignment factor: .* Return address column: .* Augmentation data: 1b @@ -29,7 +30,7 @@ The section .eh_frame contains: 000000(2c|30) 00000014 00000000 CIE Version: 1 Augmentation: "zPR" - Code alignment factor: 1 + Code alignment factor: .* Data alignment factor: .* Return address column: .* Augmentation data: 03 .. .. .. .. 1b @@ -53,7 +54,7 @@ The section .eh_frame contains: 0000007[48] 0000001[8c] 00000000 CIE Version: 1 Augmentation: "zPLR" - Code alignment factor: 1 + Code alignment factor: .* Data alignment factor: .* Return address column: .* Augmentation data: 03 .. .. .. .. 0c 1b @@ -74,7 +75,7 @@ The section .eh_frame contains: 000000b[08] 0000001[04] 00000000 CIE Version: 1 Augmentation: "zR" - Code alignment factor: 1 + Code alignment factor: .* Data alignment factor: .* Return address column: .* Augmentation data: 1b @@ -89,7 +90,7 @@ The section .eh_frame contains: 000000[de]8 00000014 00000000 CIE Version: 1 Augmentation: "zPR" - Code alignment factor: 1 + Code alignment factor: .* Data alignment factor: .* Return address column: .* Augmentation data: 03 .. .. .. .. 1b @@ -111,7 +112,7 @@ The section .eh_frame contains: 000001(1c|30) 0000001[8c] 00000000 CIE Version: 1 Augmentation: "zPLR" - Code alignment factor: 1 + Code alignment factor: .* Data alignment factor: .* Return address column: .* Augmentation data: 03 .. .. .. .. 0c 1b diff --git a/ld/testsuite/lib/ld-lib.exp b/ld/testsuite/lib/ld-lib.exp index 1ebb1a22685..d4e996e331e 100644 --- a/ld/testsuite/lib/ld-lib.exp +++ b/ld/testsuite/lib/ld-lib.exp @@ -598,7 +598,8 @@ proc simple_diff { file_1 file_2 } { # # target: TARGET # Only run the test for TARGET. This may occur more than once; the -# target being tested must match at least one. +# target being tested must match at least one. You may provide target +# name "cfi" for any target supporting the CFI statements. # # notarget: TARGET # Do not run the test for TARGET. This may occur more than once; @@ -1569,3 +1570,39 @@ proc check_gc_sections_available { } { } return $gc_sections_available_saved } + +# Check if the assembler supports CFI statements. + +proc check_as_cfi { } { + global check_as_cfi_result + global as + if [info exists check_as_cfi_result] { + return $check_as_cfi_result + } + set as_file "tmpdir/check_as_cfi.s" + set as_fh [open $as_file w 0666] + puts $as_fh "# Generated file. DO NOT EDIT" + puts $as_fh "\t.cfi_startproc" + puts $as_fh "\t.cfi_endproc" + close $as_fh + remote_download host $as_file + verbose -log "Checking CFI support:" + rename "perror" "check_as_cfi_perror" + proc perror { args } { } + set success [ld_assemble $as $as_file "/dev/null"] + rename "perror" "" + rename "check_as_cfi_perror" "perror" + #remote_file host delete $as_file + set check_as_cfi_result $success + return $success +} + +# Provide virtual target "cfi" for targets supporting CFI. + +rename "istarget" "istarget_ld" +proc istarget { target } { + if {$target == "cfi"} { + return [check_as_cfi] + } + return [istarget_ld $target] +} -- 2.30.2