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>
This commit is contained in:
parent
6bf66276e3
commit
2a46e0e7e2
1 changed files with 27 additions and 7 deletions
|
@ -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"
|
||||
|
|
Loading…
Add table
Reference in a new issue