On Jun 19, 2026, at 3:45 PM, Iain Sandoe <[email protected]> wrote:
> Hi folks,
> 
>> On 1 Oct 2025, at 10:59, Iain Sandoe <[email protected]> wrote:
>> 
>> ...
>> 
>>> On 19 Sep 2025, at 23:55, Iain Sandoe <[email protected]> wrote:
>>> 
>>> 
>>> 
>>>> On 13 Sep 2025, at 13:55, Iain Sandoe <[email protected]> wrote:
>>>> 
>>>> … this is mostly darwin-local .. but not completely, so an ack would be 
>>>> great
>> 
>> ^^
> 
> ^^^^
> 
>>>> thanks
>>>> Iain
>>>> 
>>>>> On 4 Sep 2025, at 09:48, Iain Sandoe <[email protected]> wrote:
>>>>> 
>>>>> Hello Rainer,
>>>>> 
>>>>> 
>>>>> On 4 Sep 2025, at 07:43, Iain Sandoe <[email protected]> wrote:
>>>>> 
>>>>>> Tested on x86_64-darwin, powerpc64le-linux, OK for trunk?

Ok.

>>>>> 
>>>>> oops attached the wrong patch - correct one here:
>>>>> 
>>>>> --- 8< ---
>>>>> 
>>>>> This recognises the .section __GNU_LTO, segment prefix used by Darwin
>>>>> to skip LTO sections there and splits this into a separate function
>>>>> since it is used several times.
>>>>> 
>>>>> PR testsuite/112728
>>>>> 
>>>>> gcc/testsuite/ChangeLog:
>>>>> 
>>>>> * lib/scanasm.exp (remove_lto_sections): New.
>>>>> 
>>>>> Signed-off-by: Iain Sandoe <[email protected]>
>>>>> 
>>>>> ---
>>>>> gcc/testsuite/lib/scanasm.exp | 31 ++++++++++++++++++++++---------
>>>>> 1 file changed, 22 insertions(+), 9 deletions(-)
>>>>> 
>>>>> diff --git a/gcc/testsuite/lib/scanasm.exp b/gcc/testsuite/lib/scanasm.exp
>>>>> index 51952a6a7f4..c56a6f50d28 100644
>>>>> --- a/gcc/testsuite/lib/scanasm.exp
>>>>> +++ b/gcc/testsuite/lib/scanasm.exp
>>>>> @@ -37,6 +37,21 @@ proc append_encoding_arg { args enc } {
>>>>> return $args
>>>>> }
>>>>> 
>>>>> +# Remove LTO-prefixed sections from TEXT.
>>>>> +
>>>>> +proc remove_lto_sections { text } {
>>>>> +    set p1 {(^|\n)[[:space:]]*\.section[[:space:]]*"?}
>>>>> +    set lto_sect_prefix {\.gnu\.lto_}
>>>>> +    set p3 
>>>>> {(?:[^\n]*\n(?![[:space:]]*\.(section|text|data|bss)))*[^\n]*\n}
>>>>> +    if { [istarget *-*-darwin*] } {
>>>>> +        # Darwin/Mach-O LTO sections are in the __GNU_LTO segment.
>>>>> +        set lto_sect_prefix {__GNU_LTO}
>>>>> +    }
>>>>> +    set patt ${p1}${lto_sect_prefix}${p3}
>>>>> +    regsub -all ${patt} $text {\1} text
>>>>> +    return $text
>>>>> +}
>>>>> +
>>>>> # Scan the OUTPUT_FILE for a pattern.  If it is present and POSITIVE
>>>>> # is non-zero, or it is not present and POSITIVE is zero, the test
>>>>> # passes.  The ORIG_ARGS is the list of arguments provided by dg-final
>>>>> @@ -80,10 +95,8 @@ proc dg-scan { name positive testcase output_file 
>>>>> orig_args } {
>>>>> set text [read $fd]
>>>>> close $fd
>>>>> if { [string compare -length 14 $name scan-assembler] == 0 } {
>>>>> -      # Remove LTO sections.
>>>>> -      # ??? Somehow, .*? is still greedy.
>>>>> -      # regsub -all 
>>>>> {(^|\n)[[:space:]]*\.section[[:space:]]*"?\.gnu\.lto_.*?\n(?=[[:space:]]*\.text\n)}
>>>>>  $text {\1} text
>>>>> -      regsub -all 
>>>>> {(^|\n)[[:space:]]*\.section[[:space:]]*"?\.gnu\.lto_(?:[^\n]*\n(?![[:space:]]*\.(section|text|data|bss)))*[^\n]*\n}
>>>>>  $text {\1} text
>>>>> +        # Remove LTO sections.
>>>>> +        set text [remove_lto_sections $text]
>>>>> }
>>>>> 
>>>>> set match [regexp -- $pattern $text]
>>>>> @@ -503,8 +516,8 @@ proc scan-assembler-times { args } {
>>>>> set fd [open $output_file r]
>>>>> set text [read $fd]
>>>>> close $fd
>>>>> -    regsub -all 
>>>>> {(^|\n)[[:space:]]*\.section[[:space:]]*"?\.gnu\.lto_(?:[^\n]*\n(?![[:space:]]*\.(section|text|data|bss)))*[^\n]*\n}
>>>>>  $text {\1} text
>>>>> -
>>>>> +    # Remove LTO sections.
>>>>> +    set text [remove_lto_sections $text]
>>>>> set result_count [regexp -all -- $pattern $text]
>>>>> if {$result_count == $times} {
>>>>> pass "$testcase scan-assembler-times $pp_pattern $times"
>>>>> @@ -567,7 +580,7 @@ proc scan-assembler-bound { args } {
>>>>> set fd [open $output_file r]
>>>>> set text [read $fd]
>>>>> close $fd
>>>>> -    regsub -all 
>>>>> {(^|\n)[[:space:]]*\.section[[:space:]]*"?\.gnu\.lto_(?:[^\n]*\n(?![[:space:]]*\.(section|text|data|bss)))*[^\n]*\n}
>>>>>  $text {\1} text
>>>>> +    set text [remove_lto_sections $text]
>>>>> 
>>>>> set result_count [regexp -all -- $pattern $text]
>>>>> if [expr $result_count $cmp $bound] {
>>>>> @@ -629,7 +642,7 @@ proc scan-assembler-dem { args } {
>>>>> 
>>>>> set output [remote_exec host "$cxxfilt" "" "$output_file"]
>>>>> set text [lindex $output 1]
>>>>> -    regsub -all 
>>>>> {(^|\n)[[:space:]]*\.section[[:space:]]*"?\.gnu\.lto_(?:[^\n]*\n(?![[:space:]]*\.(section|text|data|bss)))*[^\n]*\n}
>>>>>  $text {\1} text
>>>>> +    set text [remove_lto_sections $text]
>>>>> 
>>>>> if [regexp -- $pattern $text] {
>>>>> pass "$testcase scan-assembler-dem $pp_pattern"
>>>>> @@ -686,7 +699,7 @@ proc scan-assembler-dem-not { args } {
>>>>> 
>>>>> set output [remote_exec host "$cxxfilt" "" "$output_file"]
>>>>> set text [lindex $output 1]
>>>>> -    regsub -all 
>>>>> {(^|\n)[[:space:]]*\.section[[:space:]]*"?\.gnu\.lto_(?:[^\n]*\n(?![[:space:]]*\.(section|text|data|bss)))*[^\n]*\n}
>>>>>  $text {\1} text
>>>>> +    set text [remove_lto_sections $text]
>>>>> 
>>>>> if ![regexp -- $pattern $text] {
>>>>> pass "$testcase scan-assembler-dem-not $pp_pattern"
>>>>> -- 
>>>>> 2.39.2 (Apple Git-143)

Reply via email to