testsuite: Fix various scan-assembler-symbol-section issues
This patch addresses some of the issues that I found when looking into the failures of the scan-assembler-symbol-section tests on Solaris/SPARC. * The first issue was that on Solaris/SPARC, section names are double-quoted, both with as and gas: .section ".text" When using as, the section flag and type syntax is completely different from other ELF targets: .section "my_named_section",#alloc,#execinstr,#progbits This patch fixes this by stripping double quotes from section names. * However, this didn't work initially (only the leading quote was stripped), which is due to David's recent AIX patch: with the introduction of the new capturing group to handle both .section (ELF) and .csect (XCOFF), $full_section_directive would never be empty on ELF and Mach-O targets, so the extraction of the section name didn't work any longer. This had also broken the Darwin tests completely. * With working double quote stripping, all but one of the tests PASSed on Solaris/SPARC, the exception being: FAIL: gcc.dg/20021029-1.c scan-assembler-symbol-section symbol ar (found __sparc_get_pc_thunk.l7) has section ^\\\\.(const|rodata)|\\\\[RO\\\\] (found .text.__sparc_get_pc_thunk.l7%__sparc_get_pc_thunk.l7) This is due to the symbol name (ar) not being anchored in the test and unexpectedly matchting __sparc_get_pc_thunk.l7. * Next, I ran the tests on Darwin 11 and found two failing tests: FAIL: gcc.dg/darwin-sections.c scan-assembler-symbol-section symbol ^_a\$ (symbol not found) has section \\\\.data FAIL: gcc.dg/darwin-sections.c scan-assembler-symbol-section symbol ^_b\$ (symbol not found) has section \\\\.data is due to Iain's recent "Darwin : Begin rework of zero-fill sections." patch which emits .globl _a .zerofill __DATA,__common,_a,1,0 This is already scanned for, so the two scans above can just go. The other failing test is FAIL: g++.dg/gomp/tls-5.C -std=c++14 scan-assembler-symbol-section symbol ^_?_ZGR2ir_\$ (symbol not found) has section ^\\\\.tdata|\\\\[TL\\\\] FAIL: g++.dg/gomp/tls-5.C -std=c++14 scan-assembler-symbol-section symbol ^_?ir\$ (symbol not found) has section ^\\\\.tbss|\\\\[TL\\\\] Other scans are guarded by target tls_native, and indeed the assembler output has ___emutls_v._ZGR2ir_: ___emutls_t._ZGR2ir_: ___emutls_v.ir: Unfortunately scan-assembler-symbol-section doesn't support selects yet, which this test implements both for the benefit of this test and for symmetry. With those changes, test results are clean now on sparc-sun-solaris2.11, i386-pc-solaris2.11, i386-apple-darwin11.4.2, and powerpc-ibm-aix7.2.4.0. 2020-12-03 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> gcc: * doc/sourcebuild.texi (Commands for use in dg-final, Scan the assembly output, scan-assembler-symbol-section): Document. (scan-symbol-section): Document. gcc/testsuite: * lib/scanasm.exp (scan-symbol-section): Pass args to dg-scan-symbol-section. (scan-assembler-symbol-section): Likewise. (dg-scan-symbol-section): Handle selector from orig_args. Get patterns from orig_args. (parse_section_of_symbols): Fix section_pattern. Strip double quotes from section name. * g++.dg/gomp/tls-5.C: Restrict ir, _ZGR2ir_ scans to tls_native. * gcc.dg/20021029-1.c: Anchor ar symbol. * gcc.dg/darwin-sections.c: Remove obsolete scans for _a, _b in .data.
This commit is contained in:
parent
1498b1a8fb
commit
f1eeabc1fd
|
@ -2923,6 +2923,14 @@ Passes if @var{regex} matches text in the test's demangled assembler output.
|
|||
Passes if @var{regex} does not match text in the test's demangled assembler
|
||||
output.
|
||||
|
||||
@item scan-assembler-symbol-section @var{functions} @var{section} [@{ target/xfail @var{selector} @}]
|
||||
Passes if @var{functions} are all in @var{section}. The caller needs to
|
||||
allow for @code{USER_LABEL_PREFIX} and different section name conventions.
|
||||
|
||||
@item scan-symbol-section @var{filename} @var{functions} @var{section} [@{ target/xfail @var{selector} @}]
|
||||
Passes if @var{functions} are all in @var{section}in @var{filename}.
|
||||
The same caveats as for @code{scan-assembler-symbol-section} apply.
|
||||
|
||||
@item scan-hidden @var{symbol} [@{ target/xfail @var{selector} @}]
|
||||
Passes if @var{symbol} is defined as a hidden symbol in the test's
|
||||
assembly output.
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
// The reference temp should be TLS, not normal data.
|
||||
// { dg-require-effective-target c++11 }
|
||||
// { dg-final { scan-assembler-not "\\.data" { target tls_native xfail powerpc-*-aix* } } }
|
||||
// { dg-final { scan-assembler-symbol-section {^_?ir$} {^\.tbss|\[TL\]} } }
|
||||
// { dg-final { scan-assembler-symbol-section {^_?_ZGR2ir_$} {^\.tdata|\[TL\]} } }
|
||||
// { dg-final { scan-assembler-symbol-section {^_?ir$} {^\.tbss|\[TL\]} { target tls_native } } }
|
||||
// { dg-final { scan-assembler-symbol-section {^_?_ZGR2ir_$} {^\.tdata|\[TL\]} { target tls_native } } }
|
||||
|
||||
extern int&& ir;
|
||||
#pragma omp threadprivate (ir)
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
/* { dg-do compile { target fpic } } */
|
||||
/* { dg-options "-O2 -fpic" } */
|
||||
/* { dg-final { scan-assembler-not ".data.rel.ro.local" } } */
|
||||
/* { dg-final { scan-assembler-symbol-section {ar} {^\.(const|rodata)|\[RO\]} } } */
|
||||
/* { dg-final { scan-assembler-symbol-section {^_?ar} {^\.(const|rodata)|\[RO\]} } } */
|
||||
/* { dg-require-effective-target label_values } */
|
||||
/* { dg-require-effective-target indirect_jumps } */
|
||||
|
||||
|
|
|
@ -10,9 +10,7 @@ typedef struct _empty {} e_s;
|
|||
/* These should go in .comm */
|
||||
char ub;
|
||||
e_s ea;
|
||||
/* { dg-final { scan-assembler-symbol-section {^_a$} {\.data} } } */
|
||||
/* { dg-final { scan-assembler ".comm\[\t \]_ub,1" } } */
|
||||
/* { dg-final { scan-assembler-symbol-section {^_b$} {\.data} } } */
|
||||
/* { dg-final { scan-assembler ".comm\[\t \]_ea,1" } } */
|
||||
|
||||
/* These should go into __DATA,__common */
|
||||
|
|
|
@ -173,14 +173,8 @@ proc scan-assembler-symbol-section { args } {
|
|||
set testcase [testname-for-summary]
|
||||
set filename [lindex $testcase 0]
|
||||
set output_file "[file rootname [file tail $filename]].s"
|
||||
set symbol_pattern [lindex $args 0]
|
||||
set expected_section_pattern [lindex $args 1]
|
||||
dg-scan-symbol-section \
|
||||
"scan-assembler-symbol-section" \
|
||||
$testcase \
|
||||
$output_file \
|
||||
$symbol_pattern \
|
||||
$expected_section_pattern
|
||||
"scan-assembler-symbol-section" $testcase $output_file $args
|
||||
}
|
||||
|
||||
# Check that symbols are emitted in the desired section.
|
||||
|
@ -227,22 +221,44 @@ proc scan-assembler-symbol-section { args } {
|
|||
proc scan-symbol-section { args } {
|
||||
set testcase [testname-for-summary]
|
||||
set output_file [lindex $args 0]
|
||||
set symbol_pattern [lindex $args 1]
|
||||
set expected_section_pattern [lindex $args 2]
|
||||
dg-scan-symbol-section \
|
||||
"scan-symbol-section" \
|
||||
$testcase \
|
||||
$output_file \
|
||||
$symbol_pattern \
|
||||
$expected_section_pattern
|
||||
"scan-symbol-section" $testcase $output_file $args
|
||||
}
|
||||
|
||||
# Check that symbols are emitted in the desired section.
|
||||
# Check that symbols are emitted in the desired section. The ORIG_ARGS is
|
||||
# the list of arguments provided by dg-final to scan-symbol-section or
|
||||
# scan-assembler-symbol-section. The first element in ORIG_ARGS is the
|
||||
# regular expression to look for in the file. The second element, if
|
||||
# present, is a DejaGNU target selector.
|
||||
#
|
||||
# Avoid calling this function directly. In tests, use scan-symbol-section,
|
||||
# Avoid calling this function directly. In tests, use scan-symbol-section,
|
||||
# scan-assembler-symbol-section, or scan-lto-assembler-symbol-section instead.
|
||||
|
||||
proc dg-scan-symbol-section { name testcase output_file symbol_pattern expected_section_pattern } {
|
||||
proc dg-scan-symbol-section { name testcase output_file orig_args } {
|
||||
if { [llength $orig_args] < 2 } {
|
||||
error "$name: too few arguments"
|
||||
return
|
||||
}
|
||||
if { [llength $orig_args] > 4 } {
|
||||
error "$name: too many arguments"
|
||||
return
|
||||
}
|
||||
switch $name {
|
||||
"scan-symbol-section" { set arg_incr 1 }
|
||||
default { set arg_incr 0 }
|
||||
}
|
||||
if { [llength $orig_args] >= 3 } {
|
||||
switch [dg-process-target [lindex $orig_args [expr 2 + $arg_incr]]] {
|
||||
"S" { }
|
||||
"N" { return }
|
||||
"F" { setup_xfail "*-*-*" }
|
||||
"P" { }
|
||||
}
|
||||
}
|
||||
|
||||
set symbol_pattern [lindex $orig_args [expr 0 + $arg_incr]]
|
||||
set expected_section_pattern [lindex $orig_args [expr 1 + $arg_incr]]
|
||||
|
||||
set printable_symbol_pattern [make_pattern_printable $symbol_pattern]
|
||||
set printable_expected_section_pattern [make_pattern_printable $expected_section_pattern]
|
||||
|
||||
|
@ -303,7 +319,7 @@ proc dg-scan-symbol-section { name testcase output_file symbol_pattern expected_
|
|||
proc parse_section_of_symbols { filename result } {
|
||||
upvar $result up_result
|
||||
|
||||
set section_pattern {^\s*(?:(\.section|\.csect)\s+(.*)|(\.const|\.data|\.text)\s*)$}
|
||||
set section_pattern {^\s*(?:(?:\.section|\.csect)\s+(.*)|(\.const|\.data|\.text)\s*)$}
|
||||
set label_pattern {^(\S+):$}
|
||||
|
||||
set fd [open $filename r]
|
||||
|
@ -314,9 +330,11 @@ proc parse_section_of_symbols { filename result } {
|
|||
} elseif { [regexp -- $section_pattern $line dummy section_directive_arguments full_section_directive] } {
|
||||
if { $full_section_directive eq "" } {
|
||||
# Example: .section .text,"ax",progbits
|
||||
# Example: .section ".text",#alloc,#execinstr,#progbits
|
||||
# Example: .section __TEXT,__text
|
||||
set arguments [split $section_directive_arguments ","]
|
||||
set current_section [string trim [lindex $arguments 0]]
|
||||
set current_section [string trim $current_section {"}]
|
||||
set arg_1 [string trim [lindex $arguments 1]]
|
||||
if { [regexp {^_} $arg_1] } {
|
||||
# The second argument looks like a Mach-O section name.
|
||||
|
|
Loading…
Reference in New Issue