mirror of
https://sourceware.org/git/glibc.git
synced 2025-01-11 03:40:06 +00:00
S390: Fix build with gcc configured with --enable-default-pie. [BZ #21537]
Building glibc with gcc configured with --enable-default-pie failed on s390 due to assembler messages: ../sysdeps/unix/sysv/linux/s390/s390-32/__makecontext_ret.S:44: Error: junk at end of line, first unrecognized character is `@' HIDDEN_JUMPTARGET was expanded to exit@PLT@GOTOFF. If SHARED is not defined, HIDDEN_JUMPTARGET is defined to JUMPTARGET in sysdeps/s390/s390-32/sysdep.h. There it expanded to exit@PLT in non SHARED case as PIC is defined if gcc is configured with --enable-default-pie. Thus I've changed the "ifdef PIC" to "ifdef SHARED" as we do not want PLTs in the static obj files. I've also changed this in sysdeps/s390/s390-64/sysdep.h. I've also adjusted sysdeps/unix/sysv/linux/s390/s390-32/__makecontext_ret.S. If glibc is configured with --disable-hidden-plt, then NO_HIDDEN is defined. In SHARED case HIDDEN_JUMPTARGET would be expanded to exit@PLT@GOTOFF instead of __GI_exit@GOTOFF. Now we jump to: - __GI_exit if SHARED is defined - exit@PLT if SHARED and NO_HIDDEN is defined - exit if both are not defined. On s390 31bit we have to setup GOT pointer in r12 if we use a PLT stub. Therefore I use SYSCALL_PIC_SETUP from sysdep.h and added the missing semicolons. ChangeLog: [BZ #21537] * sysdeps/s390/s390-32/sysdep.h (JUMPTARGET, SYSCALL_PIC_SETUP): Check SHARED instead of PIC. (SYSCALL_PIC_SETUP): Add missing semicolons. * sysdeps/s390/s390-64/sysdep.h (JUMPTARGET, SYSCALL_PIC_SETUP): Check SHARED instead of PIC. * sysdeps/unix/sysv/linux/s390/s390-32/__makecontext_ret.S (__makecontext_ret): Adjust code to jump to exit.
This commit is contained in:
parent
35810f5ccf
commit
5e5b3b8866
11
ChangeLog
11
ChangeLog
@ -1,3 +1,14 @@
|
||||
2017-06-19 Stefan Liebler <stli@linux.vnet.ibm.com>
|
||||
|
||||
[BZ #21537]
|
||||
* sysdeps/s390/s390-32/sysdep.h (JUMPTARGET, SYSCALL_PIC_SETUP):
|
||||
Check SHARED instead of PIC.
|
||||
(SYSCALL_PIC_SETUP): Add missing semicolons.
|
||||
* sysdeps/s390/s390-64/sysdep.h (JUMPTARGET, SYSCALL_PIC_SETUP):
|
||||
Check SHARED instead of PIC.
|
||||
* sysdeps/unix/sysv/linux/s390/s390-32/__makecontext_ret.S
|
||||
(__makecontext_ret): Adjust code to jump to exit.
|
||||
|
||||
2017-06-19 Christian Borntraeger <borntraeger@de.ibm.com>
|
||||
|
||||
* sysdeps/unix/sysv/linux/s390/s390-32/syscall.S (syscall):
|
||||
|
@ -82,14 +82,14 @@ lose: SYSCALL_PIC_SETUP \
|
||||
END (name)
|
||||
|
||||
#undef JUMPTARGET
|
||||
#ifdef PIC
|
||||
#ifdef SHARED
|
||||
#define JUMPTARGET(name) name##@PLT
|
||||
#define SYSCALL_PIC_SETUP \
|
||||
bras %r12,1f \
|
||||
0: .long _GLOBAL_OFFSET_TABLE_-0b \
|
||||
bras %r12,1f; \
|
||||
0: .long _GLOBAL_OFFSET_TABLE_-0b; \
|
||||
1: al %r12,0(%r12)
|
||||
#else
|
||||
#define JUMPTARGET(name) name
|
||||
#define JUMPTARGET(name) name
|
||||
#define SYSCALL_PIC_SETUP /* Nothing. */
|
||||
#endif
|
||||
|
||||
|
@ -77,7 +77,7 @@ lose: SYSCALL_PIC_SETUP \
|
||||
END (name)
|
||||
|
||||
#undef JUMPTARGET
|
||||
#ifdef PIC
|
||||
#ifdef SHARED
|
||||
#define JUMPTARGET(name) name##@PLT
|
||||
#define SYSCALL_PIC_SETUP \
|
||||
larl %r12,_GLOBAL_OFFSET_TABLE_
|
||||
|
@ -32,25 +32,18 @@ ENTRY(__makecontext_ret)
|
||||
lr %r2,%r8
|
||||
br %r9
|
||||
1: lhi %r2,0 /* EXIT return value. */
|
||||
basr %r13,0
|
||||
2:
|
||||
#ifdef PIC
|
||||
l %r12,4f-2b(%r13)
|
||||
la %r12,0(%r12,%r13) /* GOT pointer in r12 after this. */
|
||||
l %r1,3f-2b(%r13)
|
||||
bas %r14,0(%r1,%r12)
|
||||
.align 4
|
||||
3:
|
||||
.long HIDDEN_JUMPTARGET (exit)@GOTOFF
|
||||
4:
|
||||
.long _GLOBAL_OFFSET_TABLE_-2b
|
||||
#else
|
||||
l %r1,3f-2b(%r13)
|
||||
basr %r14,%r1
|
||||
.align 4
|
||||
3:
|
||||
.long HIDDEN_JUMPTARGET (exit)
|
||||
#ifdef NO_HIDDEN
|
||||
/* If SHARED and NO_HIDDEN is defined, we need to setup got pointer
|
||||
as HIDDEN_JUMPTARGET expands to JUMPTARGET which expands to
|
||||
exit@PLT. Otherwise HIDDEN_JUMPTARGET expands to __GI_exit if
|
||||
SHARED is defined and to exit if SHARED is not defined. */
|
||||
SYSCALL_PIC_SETUP
|
||||
#endif
|
||||
.align 2
|
||||
basr %r1,0
|
||||
2:
|
||||
al %r1,3f-2b(%r1)
|
||||
basr %r14,%r1 /* Call exit. */
|
||||
j .+2 /* Trap if exit returns for some reason. */
|
||||
3:
|
||||
.long HIDDEN_JUMPTARGET (exit) - 2b
|
||||
END(__makecontext_ret)
|
||||
|
Loading…
Reference in New Issue
Block a user