s390x: don't allow br r0 in CRTJMP asm

The instruction encoding that would be "br %r0" is not actually a
branch to r0, but instead a nop/memory-barrier. gcc 14 has been found
to choose r0 for the "r"(pc) constraint, breaking CRTJMP.

This patch adjusts the inline assembly constraints and marks "pc" as
address ("a"), which disallows usage of r0.
This commit is contained in:
Stefan Liebler 2024-10-10 15:02:44 +02:00 committed by Rich Felker
parent 2fc56aaa9f
commit 5be920e910
1 changed files with 1 additions and 1 deletions

View File

@ -10,4 +10,4 @@
#define REL_TPOFF R_390_TLS_TPOFF #define REL_TPOFF R_390_TLS_TPOFF
#define CRTJMP(pc,sp) __asm__ __volatile__( \ #define CRTJMP(pc,sp) __asm__ __volatile__( \
"lgr %%r15,%1; br %0" : : "r"(pc), "r"(sp) : "memory" ) "lgr %%r15,%1; br %0" : : "a"(pc), "r"(sp) : "memory" )