aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/doc/sourcebuild.texi8
-rw-r--r--gcc/testsuite/g++.dg/gomp/tls-5.C4
-rw-r--r--gcc/testsuite/gcc.dg/20021029-1.c2
-rw-r--r--gcc/testsuite/gcc.dg/darwin-sections.c2
-rw-r--r--gcc/testsuite/lib/scanasm.exp54
5 files changed, 47 insertions, 23 deletions
diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi
index 8617a86..4159ebb 100644
--- a/gcc/doc/sourcebuild.texi
+++ b/gcc/doc/sourcebuild.texi
@@ -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.
diff --git a/gcc/testsuite/g++.dg/gomp/tls-5.C b/gcc/testsuite/g++.dg/gomp/tls-5.C
index b18a127..eb187b6 100644
--- a/gcc/testsuite/g++.dg/gomp/tls-5.C
+++ b/gcc/testsuite/g++.dg/gomp/tls-5.C
@@ -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)
diff --git a/gcc/testsuite/gcc.dg/20021029-1.c b/gcc/testsuite/gcc.dg/20021029-1.c
index 57c2b48..d13f669 100644
--- a/gcc/testsuite/gcc.dg/20021029-1.c
+++ b/gcc/testsuite/gcc.dg/20021029-1.c
@@ -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 } */
diff --git a/gcc/testsuite/gcc.dg/darwin-sections.c b/gcc/testsuite/gcc.dg/darwin-sections.c
index 5fc2860..dbe3702 100644
--- a/gcc/testsuite/gcc.dg/darwin-sections.c
+++ b/gcc/testsuite/gcc.dg/darwin-sections.c
@@ -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 */
diff --git a/gcc/testsuite/lib/scanasm.exp b/gcc/testsuite/lib/scanasm.exp
index 43b7649..18fef38 100644
--- a/gcc/testsuite/lib/scanasm.exp
+++ b/gcc/testsuite/lib/scanasm.exp
@@ -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.