Re: [PATCH] sparc: Improve setjmp()

Brian Inglis <[email protected]>
Newsgroups gmane.comp.lib.newlib
Organization Inglis
Message-ID <[email protected]>
On 2023-10-12 03:39, Sebastian Huber wrote:
> On 06.10.23 07:31, Sebastian Huber wrote:
>> Flush the windows in setjmp().  This helps if the stack is changed after
>> the setjmp() and we want to jump back to the original stack using
>> longjmp().
>> ---
>>   newlib/libc/machine/sparc/setjmp.S | 2 ++
>>   1 file changed, 2 insertions(+)
>>
>> diff --git a/newlib/libc/machine/sparc/setjmp.S 
>> b/newlib/libc/machine/sparc/setjmp.S
>> index 613df2ba2..d7185be4c 100644
>> --- a/newlib/libc/machine/sparc/setjmp.S
>> +++ b/newlib/libc/machine/sparc/setjmp.S
>> @@ -110,6 +110,8 @@
>>   ENTRY(setjmp)
>>   ENTRY(_setjmp)
>> +        ta      0x03            /* Flush registers, just in case another stack
>> +                                   is used after the setjmp().  */
>>           st      %sp, [%o0]      /* caller's stack pointer */
>>           st      %i7, [%o0+4]    /* caller's return pc */
>>           st      %fp, [%o0+8]    /* store caller's frame pointer */
> 
> I am not sure if there is anyone left being able to review this change.

Hopefully someone is, but as a former SunOS/Sparc guy (sysadmin/board swapper 
but not assembler there) I got interested, and found one related discussion on 
the sparclinux list:

https://lore.kernel.org/sparclinux/[email protected]/t/#u

which seems to indicate that you are DTRT; also for comparison:

	https://gcc.gnu.org/onlinedocs/gcc/Nonlocal-Gotos.html
and
	$ info gcc 'nonlocal gotos'

although:

https://stackoverflow.com/questions/72711501/special-treatment-of-setjmp-longjmp-by-compilers
	https://gcc.gnu.org/legacy-ml/gcc/2018-03/msg00032.html
	https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83368

and some threads about LLVM enhancing and dropping Sparc __builtin_set/longjmp.

But as Knuth said about some code: "I have proved it correct, but not tested 
it.", which is the proof of the pudding: issue before patch; no issues after patch?

-- 
Take care. Thanks, Brian Inglis              Calgary, Alberta, Canada

La perfection est atteinte                   Perfection is achieved
non pas lorsqu'il n'y a plus rien à ajouter  not when there is no more to add
mais lorsqu'il n'y a plus rien à retirer     but when there is no more to cut
                                 -- Antoine de Saint-Exupéry
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.