![]() |
|
Message-ID: <20251012024649.GK1827@brightrain.aerifal.cx> Date: Sat, 11 Oct 2025 22:46:50 -0400 From: Rich Felker <dalias@...c.org> To: Alex Rønne Petersen <alex@...xrp.com> Cc: musl@...ts.openwall.com Subject: Re: [PATCH] s390x: manually inline __tls_get_addr in __tls_get_offset On Fri, Jan 24, 2025 at 06:12:13AM +0100, Alex Rønne Petersen wrote: > Calling __tls_get_addr with brasl is not valid since it's a global symbol; doing > so results in an R_390_PC32DBL relocation error from lld. We could fix this by > marking __tls_get_addr hidden since it is not part of the s390x ABI, or by using > a different instruction. However, given its simplicity, it makes more sense to > just manually inline it into __tls_get_offset for performance. > > The patch has been tested by applying to Zig's bundled musl copy and running the > full Zig test suite under qemu-s390x. > --- > src/thread/s390x/__tls_get_offset.s | 20 ++++++++++---------- > 1 file changed, 10 insertions(+), 10 deletions(-) > > diff --git a/src/thread/s390x/__tls_get_offset.s b/src/thread/s390x/__tls_get_offset.s > index 8ee92de8..405f118b 100644 > --- a/src/thread/s390x/__tls_get_offset.s > +++ b/src/thread/s390x/__tls_get_offset.s > @@ -1,17 +1,17 @@ > .global __tls_get_offset > .type __tls_get_offset,%function > __tls_get_offset: > - stmg %r14, %r15, 112(%r15) > - aghi %r15, -160 > + ear %r0, %a0 > + sllg %r0, %r0, 32 > + ear %r0, %a1 > > - la %r2, 0(%r2, %r12) > - brasl %r14, __tls_get_addr > + la %r1, 0(%r2, %r12) > > - ear %r1, %a0 > - sllg %r1, %r1, 32 > - ear %r1, %a1 > + lg %r3, 0(%r1) > + sllg %r4, %r3, 3 > + lg %r5, 8(%r0) > + lg %r2, 0(%r4, %r5) > + ag %r2, 8(%r1) > + sgr %r2, %r0 > > - sgr %r2, %r1 > - > - lmg %r14, %r15, 272(%r15) > br %r14 > -- > 2.43.0 This must not have been covered by tests because it doesn't work. The problem is that there is apparently no such thing as 8(%r0); it looks like r0 is special in addressing and means constant zero. So it should be fixable just shuffling around which registers are used for what. I can try to prepare a fix if you don't have time for it. 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.