diff options
author | Alex Rønne Petersen <alex@alexrp.com> | 2025-10-12 05:35:19 +0200 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2025-10-12 16:15:47 -0400 |
commit | 1b76ff0767d01df72f692806ee5adee13c67ef88 (patch) | |
tree | 0b6a54204c455abc789279a983c11d8a88573b42 /src/thread | |
parent | 0ccaf0572e9cccda2cced0f7ee659af4c1c6679a (diff) | |
download | musl-1b76ff0767d01df72f692806ee5adee13c67ef88.tar.gz |
This fixes an error in 6af4f25b899e89e4b91f8c197ae5a6ce04bcce7b: The
r0 register is special in addressing modes on s390x and is interpreted
as constant zero, i.e. lg %r5, 8(%r0) would effectively become lg %r5,
8. So care should be taken to never use r0 as an address register in
s390x assembly.
Diffstat (limited to 'src/thread')
-rw-r--r-- | src/thread/s390x/__tls_get_offset.s | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/src/thread/s390x/__tls_get_offset.s b/src/thread/s390x/__tls_get_offset.s index 405f118b..056c9110 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: - ear %r0, %a0 - sllg %r0, %r0, 32 - ear %r0, %a1 + ear %r3, %a0 + sllg %r3, %r3, 32 + ear %r3, %a1 la %r1, 0(%r2, %r12) - lg %r3, 0(%r1) - sllg %r4, %r3, 3 - lg %r5, 8(%r0) + lg %r0, 0(%r1) + sllg %r4, %r0, 3 + lg %r5, 8(%r3) lg %r2, 0(%r4, %r5) ag %r2, 8(%r1) - sgr %r2, %r0 + sgr %r2, %r3 br %r14 |