On Thu, 23 Nov 2023 at 17:35, Iain Sandoe <i...@sandoe.co.uk> wrote: > > Hi > > > On 23 Nov 2023, at 16:11, Christophe Lyon <christophe.l...@linaro.org> > > wrote: > > > > Hi Iain, > > > > Thanks for dealing with this :-) > > > > On Thu, 23 Nov 2023 at 10:58, Iain Sandoe <iains....@gmail.com> wrote: > >> > >> Tested on a cross to armv8l-unknown-linux-gnueabihf where the failing > >> testcase is restored, and on aarch64-linux-gnu where no change is seen > >> on the aarch64.exp suite. Also tested on arm64 Darwin for aarch64.exp > >> and aarch64-darwin.exp. > >> > >> OK for trunk, or some alternative would be better? > >> Iain > >> > >> --- 8< --- > >> > >> The change applied in r14-5760-g2a46e0e7e20 changed the behaviour of > >> functions with assembly like: > >> > >> bar: > >> __acle_se_bar: > >> > >> Where both bar and __acle_se_bar are globals refering to the same > >> function body. The old behaviour overrides 'bar' with '__acle_se_bar' > >> and the scan tests for that label. > >> > >> The change here re-allows the override. > >> > >> Case like this are not legal Mach-O (where two global symbols cannot > >> have the same address in the assembler output). However, given the > >> constraints on the Mach-O scanning, it does not seem that it is > >> necessary to skip the change (any incorrect case should be easily > >> evident in the assembler). > >> > >> gcc/testsuite/ChangeLog: > >> > >> * lib/scanasm.exp: Allow multiple function start symbols, > >> taking the last as the function name. > >> > >> Signed-off-by: Iain Sandoe <i...@sandoe.co.uk> > >> --- > >> gcc/testsuite/lib/scanasm.exp | 10 +++++++++- > >> 1 file changed, 9 insertions(+), 1 deletion(-) > >> > >> diff --git a/gcc/testsuite/lib/scanasm.exp b/gcc/testsuite/lib/scanasm.exp > >> index 85ee54ff9a8..7ec3cfce02b 100644 > >> --- a/gcc/testsuite/lib/scanasm.exp > >> +++ b/gcc/testsuite/lib/scanasm.exp > >> @@ -877,7 +877,15 @@ proc parse_function_bodies { config filename result } > >> { > >> set in_function 0 > >> } > >> } elseif { $in_function } { > >> - if { [regexp $up_config(end) $line] } { > >> + # We allow multiple function start labels, taking the last one > >> seen > >> + # as the function name. > >> + if { [regexp [lindex $up_config(start) 0] \ > >> + $line dummy maybe_function_name] } { > >> + verbose "parse_function_bodies: overriding $function_name > >> with $maybe_function_name" > >> + set function_name $maybe_function_name > >> + set in_function 1 > > this is not necessary, since we are already inside if ($in_function) ? > > It resets the state to “first line matched” for mutli-line function start > cases. Currently, those cases are only for Darwin and as noted in the > changelog actually such code is not legal Mach-O, so in practice, at present > we could remove it - but it might be better to be consistent (I am OK either > way). >
Ha, right. Thanks > ==== > > Of course, an alternate fix would be to match the first label always and > change the testcase to scan for ‘bar’ - since that seems to be the only > instance needing this facility - but I’ll leave that to you folks to > consider. > > Iain > > > > >> + set function_body "" > >> + } elseif { [regexp $up_config(end) $line] } { > >> verbose "parse_function_bodies: > >> $function_name:\n$function_body" > >> set up_result($function_name) $function_body > >> set in_function 0 > >> -- > >> 2.39.2 (Apple Git-143) > >> > > > > Thanks, > > > > Christophe >