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'.
This commit is contained in:
Jan Kratochvil 2008-09-20 08:42:53 +00:00
parent d5026a7d6d
commit 33aa234e0c
7 changed files with 65 additions and 23 deletions

View File

@ -1,3 +1,17 @@
2008-09-20 Jan Kratochvil <jan.kratochvil@redhat.com>
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 <jan.kratochvil@redhat.com>
* ld-elf/eh-group.exp, ld-elf/eh-group1.s, ld-elf/eh-group2.s: New test.

View File

@ -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

View File

@ -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
}

View File

@ -1,4 +1,4 @@
.section sect, "axG", @progbits, sectgroup, comdat
.section sect, "axG", %progbits, sectgroup, comdat
.global _start
_start:
.cfi_startproc

View File

@ -1,4 +1,4 @@
.section sect, "axG", @progbits, sectgroup, comdat
.section sect, "axG", %progbits, sectgroup, comdat
.cfi_startproc
.skip 16
.cfi_endproc

View File

@ -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

View File

@ -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]
}