|
Message-ID: <278c595b-10fb-2180-b634-6bbcbd5a2614@loongson.cn> Date: Tue, 15 Aug 2023 17:24:30 +0800 From: Hongliang Wang <wanghongliang@...ngson.cn> To: musl@...ts.openwall.com Subject: Re: add loongarch64 port v7. 在 2023/8/13 上午9:41, Rich Felker 写道: > On Sat, Aug 05, 2023 at 11:43:08AM -0400, Rich Felker wrote: >> On Sat, Aug 05, 2023 at 02:18:35PM +0800, 翟小娟 wrote: >>> We are currently working on bringing loongarch support to the alpine >>> community. Alpine depends on musl, and Alpine and its users are >>> waiting for musl to support loongarch. This patch seems to be a long >>> time ago, we hope to know the review status of this patch. >> >> Last time I set out to look at it, I hit that the exact patch I had >> previously reviewed and tentatively okayed wasn't stored anywhere >> permanent. I realize this has taken quite a while, and now there is a >> patch on the list, so this coming week I will go back and review the >> diff of that against the previous posted version and mailing list >> comments. As long as everything matches up, I expect to commit it. >> >> Thanks for checking back in on this, and sorry it's taken so long. > > OK, I'm looking at this now as the diffs between v5 and v6 (which I > theoretically reviewed before, but the exact v6 I looked at did not > exist in permanent form) and between v6 and v7. > > v5->v6: > >> -+#define __BYTE_ORDER 1234 >> ++#define __BYTE_ORDER __LITTLE_ENDIAN > > This is gratuitous, mismatches what is done on other archs, and is > less safe. > The modification is based on the following review suggestion( WANG Xuerui <i@...0n.name> reviewed in https://www.openwall.com/lists/musl/2022/10/12/1): `#define __BYTE_ORDER __LITTLE_ENDIAN` could be more consistent with other arches. >> -+TYPEDEF unsigned nlink_t; >> ++TYPEDEF unsigned int nlink_t; > > Gratuitous and in opposite direction of coding style used elsewhere in > musl. There are a few other instances of this too. > Based on the following review question(WANG Xuerui <i@...0n.name> reviewed in https://www.openwall.com/lists/musl/2022/10/12/1): `unsigned int`? Same for other bare `unsigned` usages. I fixed it to a explicit definition. >> -+ register uintptr_t tp __asm__("tp"); >> -+ __asm__ ("" : "=r" (tp) ); >> ++ uintptr_t tp; >> ++ __asm__ __volatile__("move %0, $tp" : "=r"(tp)); >> + return tp; > > Not clear what the motivation is here. Is it working around a compiler > bug? The original form was more optimal. > The modification is based on the following review suggestion( WANG Xuerui <i@...0n.name> reviewed in https://www.openwall.com/lists/musl/2022/10/12/1): While the current approach works, it's a bit fragile [1], and the simple and plain riscv version works too: uintptr_t tp; __asm__ ("move %0, $tp" : "=r"(tp)); [1]:https://gcc.gnu.org/onlinedocs/gcc/Local-Register-Variables.html#Local-Register-Variables >> +#define CRTJMP(pc,sp) __asm__ __volatile__( \ >> -+ "move $sp,%1 ; jr %0" : : "r"(pc), "r"(sp) : "memory" ) >> -+ >> -+#define GETFUNCSYM(fp, sym, got) __asm__ ( \ >> -+ ".hidden " #sym "\n" \ >> -+ ".align 8 \n" \ >> -+ " la.local $t1, "#sym" \n" \ >> -+ " move %0, $t1 \n" \ >> -+ : "=r"(*(fp)) : : "memory" ) >> ++ "move $sp, %1 ; jr %0" : : "r"(pc), "r"(sp) : "memory" ) > > Not clear why this was changed. It was never discussed afaik. It looks > somewhat dubious removing GETFUNCSYM and using the maybe-unreliable > default definition. > Based on the following review question( WANG Xuerui <i@...0n.name> reviewed in https://www.openwall.com/lists/musl/2022/10/12/1): Does the generic version residing in ldso/dlstart.c not work? I found the code logic is consistent with the generic version, So I removed the definition here and replaced it with generic version. > It also looks like v5->v6 rewrote sigsetjmp. > Based on the following review question( WANG Xuerui <i@...0n.name> reviewed in https://www.openwall.com/lists/musl/2022/10/12/1): This is crazy complicated compared to the riscv port, why is the juggling between a0/a1 and t5/t6 necessary? I optimized the code implementations. > v6->v7: > > sigcontext/mcontext_t change mostly makes sense, but the > namespace-safe and full mcontext_t differ in their use of the aligned > attribute and it's not clear that the attribute is needed (since the > offset is naturally aligned and any instance of the object is produced > by the kernel, not by userspace). > >> -+ long __uc_pad; > > This change to ucontext_t actually makes the struct ABI-incompatible > in the namespace-safe version without the alignment attribute. IIRC I > explicitly requested the explicit padding field to avoid this kind of > footgun. Removing it does not seem like a good idea. > Initially, we add __uc_pad to ensure uc_mcontext is 16 byte alignment. Now, we added __attribute__((__aligned__(16))) to uc_mcontext.__extcontext[], this can ensure uc_mcontext is also 16 byte alignment. so __uc_pad is not used. Remove __uc_pad, from the point of struct layout, musl and kernel are consistent. otherwise, I think it may bring a sense of inconsistency between kernel and musl. Due to Loongarch is not merged into musl now, Remove it no compatibility issues. > In stat.h: > >> -+ unsigned long __pad; >> ++ unsigned long __pad1; > > This is gratuitous and makes the definition gratuitously mismatch what > will become the "generic" version of bits/stat.h. There is no contract > for applications to be able to access these padding fields by name, so > no motivation to make their names match glibc's names or the kernel's. > OK. > In fenv.S: > >> ++#ifdef __clang__ >> ++#define FCSR $fcsr0 >> ++#else >> ++#define FCSR $r0 >> ++#endif > > It's not clear to me what's going on here. Is there a clang > incompatibility in the assembler language you're working around? Or > what? If so that seems like a tooling bug that should be fixed. > The GNU assembler cannot correctly recognize $fcsr0, but the LLVM IAS does not have this issue, so make a distinction. This issue has been fixed in GNU assembler 2.41. but for compatible with GNU assembler 2.40 and below, $r0 need reserved. The linux kernel also has a similar distinction: commit 38bb46f94544c5385bc35aa2bfc776dcf53a7b5d Author: WANG Xuerui <git@...0n.name> Date: Thu Jun 29 20:58:43 2023 +0800 LoongArch: Prepare for assemblers with proper FCSR class support The GNU assembler (as of 2.40) mis-treats FCSR operands as GPRs, but the LLVM IAS does not. Probe for this and refer to FCSRs as"$fcsrNN" if support is present. Signed-off-by: WANG Xuerui <git@...0n.name> Signed-off-by: Huacai Chen <chenhuacai@...ngson.cn> > Otherwise, everything looks as expected, I think. I'm okay with making > any fixups for merging rather than throwing this back on your team for > more revisions, but can you please follow up and clarify the above? > > Rich >
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.