aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIain Sandoe <iain@sandoe.co.uk>2023-10-26 09:52:04 +0100
committerIain Sandoe <iain@sandoe.co.uk>2023-11-22 14:50:04 +0000
commit2a46e0e7e20e6e9095708704ac0180859e258b7d (patch)
treef1aef0e32ef0573fbe877c15d8a06dfbc8554c63
parent6bf66276e3e41d5d92f7b7260e98b6a111653805 (diff)
downloadgcc-2a46e0e7e20e6e9095708704ac0180859e258b7d.zip
gcc-2a46e0e7e20e6e9095708704ac0180859e258b7d.tar.gz
gcc-2a46e0e7e20e6e9095708704ac0180859e258b7d.tar.bz2
testsuite, Darwin: Add support for Mach-O function body scans.
We need to process the source slightly differently from ELF, especially in that we have __USER_LABEL_PREFIX__ and there are no function start and end assembler directives. This means we cannot delineate functions when frame output is switched off. TODO: consider adding -mtest-markers or something similar to inject assembler comments that can be scanned for. gcc/testsuite/ChangeLog: * lib/scanasm.exp: Initial handling for Mach-O function body scans. Signed-off-by: Iain Sandoe <iain@sandoe.co.uk> Co-authored-by: Richard Sandiford <richard.sandiford@arm.com>
-rw-r--r--gcc/testsuite/lib/scanasm.exp34
1 files changed, 27 insertions, 7 deletions
diff --git a/gcc/testsuite/lib/scanasm.exp b/gcc/testsuite/lib/scanasm.exp
index 16b5198..85ee54f 100644
--- a/gcc/testsuite/lib/scanasm.exp
+++ b/gcc/testsuite/lib/scanasm.exp
@@ -804,23 +804,34 @@ proc configure_check-function-bodies { config } {
# Regexp for the start of a function definition (name in \1).
if { [istarget nvptx*-*-*] } {
- set up_config(start) {^// BEGIN(?: GLOBAL|) FUNCTION DEF: ([a-zA-Z_]\S+)$}
+ set up_config(start) {
+ {^// BEGIN(?: GLOBAL|) FUNCTION DEF: ([a-zA-Z_]\S+)$}
+ }
+ } elseif { [istarget *-*-darwin*] } {
+ set up_config(start) {
+ {^_([a-zA-Z_]\S+):$}
+ {^LFB[0-9]+:}
+ }
} else {
- set up_config(start) {^([a-zA-Z_]\S+):$}
+ set up_config(start) {{^([a-zA-Z_]\S+):$}}
}
# Regexp for the end of a function definition.
if { [istarget nvptx*-*-*] } {
set up_config(end) {^\}$}
+ } elseif { [istarget *-*-darwin*] } {
+ set up_config(end) {^LFE[0-9]+}
} else {
set up_config(end) {^\s*\.size}
}
-
+
# Regexp for lines that aren't interesting.
if { [istarget nvptx*-*-*] } {
# Skip lines beginning with '//' comments ('-fverbose-asm', for
# example).
set up_config(fluff) {^\s*(?://)}
+ } elseif { [istarget *-*-darwin*] } {
+ set up_config(fluff) {^\s*(?:\.|//|@)|^L[0-9ACESV]}
} else {
# Skip lines beginning with labels ('.L[...]:') or other directives
# ('.align', '.cfi_startproc', '.quad [...]', '.text', etc.), '//' or
@@ -852,9 +863,19 @@ proc parse_function_bodies { config filename result } {
set fd [open $filename r]
set in_function 0
while { [gets $fd line] >= 0 } {
- if { [regexp $up_config(start) $line dummy function_name] } {
- set in_function 1
- set function_body ""
+ if { $in_function == 0 } {
+ if { [regexp [lindex $up_config(start) 0] \
+ $line dummy function_name] } {
+ set in_function 1
+ set function_body ""
+ }
+ } elseif { $in_function < [llength $up_config(start)] } {
+ if { [regexp [lindex $up_config(start) $in_function] $line] } {
+ incr in_function
+ } else {
+ verbose "parse_function_bodies: skipped $function_name"
+ set in_function 0
+ }
} elseif { $in_function } {
if { [regexp $up_config(end) $line] } {
verbose "parse_function_bodies: $function_name:\n$function_body"
@@ -957,7 +978,6 @@ proc check-function-bodies { args } {
set start_expected {^(\S+):$}
configure_check-function-bodies config
-
set have_bodies 0
if { [is_remote host] } {
remote_upload host "$filename"