|
Message-ID: <a7c97ea6-b676-baf4-c982-da83cd33fea6@loongson.cn>
Date: Tue, 30 Jan 2024 15:35:33 +0800
From: Hongliang Wang <wanghongliang@...ngson.cn>
To: Rich Felker <dalias@...c.org>, musl@...ts.openwall.com
Subject: Re: loongarch64 merge
在 2024/1/30 上午12:47, Rich Felker 写道:
> On Thu, Jan 25, 2024 at 12:43:54PM -0500, Rich Felker wrote:
>> I'm going through where everything was left on this topic and
>> preparing a patch for merge. This message/thread is to document what
>> I'm actually doing vs the various submitted versions of the patch
>> since v5/v6 where the major review took place.
>>
>>
>> Subsequent changes I'm reverting:
>>
>> - De-optimization of __get_tp. No motivation for removing the
>> potentially in-place $tp was provided, and we generally use the
>> arch's tp in-place unless there's a compiler bug to be worked
>> around. See powerpc{,64} for an example where it's used, or1k where
>> we have a probably-obsolete workaround for ancient clang being
>> broken.
>>
>> - unsigned -> unsigned int, etc.
>>
>> - Gratuitous whitespace changes in headers that obscure the fact that
>> a header is a complete duplicate that could eventually be shared
>> between archs (e.g. bits/float.h, bits/posix.h) or just obscure
>> what differs from other archs when running diff.
>>
>>
>> Fixes from previous review that were overlooked:
>>
>> - Removing SA_RESTORER -- its presence defined as 0 produces wrong
>> sigaction ABI.
>>
>>
>> Additions:
>>
>> - Adding the reloc.h/configure case for single-only float.
>>
>> - The new member names for mcontext_t are all in reserved namespace,
>> so there's no reason to have a separate namespace-clean version of
>> mcontext_t, and I'm removing the latter.
>>
>> - Public member uc_flags with no __, macro for compat with any
>> existing software using the __-prefixed name.
>>
>>
>> Still TODO:
>>
>> I don't think I ever reviewed the apparent rewrite of sigsetjmp and
>> possibly some other asm that changed between v5 and v8. I'm about to
>> start looking at that and will follow up.
>
> OK, sigsetjmp appears to have been non-working in v5 (it failed to
> save the argument anywhere, so attempted it use it after it was
> clobbered in the code path after calling setjmp).
>
> v8 fixes this and seems like it should work, but I don't understand
> the offsets used.
>
> The loongarch64 __jmp_buf has 23 slots, but only appears to use 21 of
> them, with sigsetjmp storing its extra data in the last 2 unused
> slots. The contract here is supposed to be that the entirety of
> __jmp_buf belongs to setjmp/longjmp, with sigsetjmp using the extra
> space in the full jmp_buf/sigjmp_buf type with signal mask and lots of
> extra space.
>
> Were these slots added just for sigsetjmp? If so, that was an ABI
> mistake, but I don't think it warrants a late change; it's probably
> better to just leave them there as extensibility.
Yes, the purpose of the last 2 slots of __jmp_buf just used for
sigsetjmp to storing its extra data.
Now leave them there as extensibility is OK.
Hongliang Wang
>
> Either way, I think sigsetjmp should be modified not to rely on
> storage in space that setjmp is entitled to be able to modify, i.e. it
> should be using offsets 184 and 184+16, not 168 and 176.
>
> Rich
>
I understand. I attached a patch to fix this issue. please review it.
diff --git a/src/signal/loongarch64/sigsetjmp.s
b/src/signal/loongarch64/sigsetjmp.s
index 992ab1a4..9c0e3ae2 100644
--- a/src/signal/loongarch64/sigsetjmp.s
+++ b/src/signal/loongarch64/sigsetjmp.s
@@ -5,8 +5,8 @@
sigsetjmp:
__sigsetjmp:
beq $a1, $zero, 1f
- st.d $ra, $a0, 168
- st.d $s0, $a0, 176
+ st.d $ra, $a0, 184
+ st.d $s0, $a0, 200 #184+8+8
move $s0, $a0
la.global $t0, setjmp
@@ -14,8 +14,8 @@ __sigsetjmp:
move $a1, $a0 # Return from 'setjmp' or 'longjmp'
move $a0, $s0
- ld.d $ra, $a0, 168
- ld.d $s0, $a0, 176
+ ld.d $ra, $a0, 184
+ ld.d $s0, $a0, 200 #184+8+8
.hidden __sigsetjmp_tail
la.global $t0, __sigsetjmp_tail
(END)
Hongliang Wang
View attachment "0001-loongarch64-fix-the-incorrect-offset-of__jmp_buf-use.patch" of type "text/x-patch" (1118 bytes)
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.