mirror of
https://sourceware.org/git/glibc.git
synced 2024-12-26 04:31:03 +00:00
2003-02-25 Steven Munroe <sjmunroe@us.ibm.com>
* elf/elf.h: Add new R_PPC64_* relocs for TLS. * elf/tls-macros.h [__powerpc64__] (TLS_LE, TLS_IE, TLS_LD, TLS_GD): Define. * sysdeps/powerpc/powerpc64/elf/configure.in: New file. * sysdeps/powerpc/powerpc64/elf/configure: New file (generated). * sysdeps/powerpc/elf/libc-start.c (__libc_start_main): Do DL_SYSDEP_OSCHECK here, matching 2002-12-01 change to generic file.
This commit is contained in:
parent
3c2a3b4106
commit
fec4171904
11
ChangeLog
11
ChangeLog
@ -1,3 +1,14 @@
|
||||
2003-02-25 Steven Munroe <sjmunroe@us.ibm.com>
|
||||
|
||||
* elf/elf.h: Add new R_PPC64_* relocs for TLS.
|
||||
* elf/tls-macros.h [__powerpc64__]
|
||||
(TLS_LE, TLS_IE, TLS_LD, TLS_GD): Define.
|
||||
* sysdeps/powerpc/powerpc64/elf/configure.in: New file.
|
||||
* sysdeps/powerpc/powerpc64/elf/configure: New file (generated).
|
||||
|
||||
* sysdeps/powerpc/elf/libc-start.c (__libc_start_main):
|
||||
Do DL_SYSDEP_OSCHECK here, matching 2002-12-01 change to generic file.
|
||||
|
||||
2003-02-25 Andreas Jaeger <aj@suse.de>
|
||||
|
||||
* manual/memory.texi (Malloc Tunable Parameters): Clarify
|
||||
|
44
elf/elf.h
44
elf/elf.h
@ -1953,8 +1953,50 @@ typedef Elf32_Addr Elf32_Conflict;
|
||||
#define R_PPC64_TOC16_LO_DS 64 /* half16ds #lo(S + A - .TOC.) >> 2. */
|
||||
#define R_PPC64_PLTGOT16_DS 65 /* half16ds* (M + A) >> 2. */
|
||||
#define R_PPC64_PLTGOT16_LO_DS 66 /* half16ds #lo(M + A) >> 2. */
|
||||
|
||||
/* PowerPC64 relocations defined for the TLS access ABI. */
|
||||
#define R_PPC64_TLS 67 /* none (sym+add)@tls. */
|
||||
#define R_PPC64_DTPMOD64 68 /* doubleword64 (sym+add)@dtpmod. */
|
||||
#define R_PPC64_TPREL16 69 /* half16* (sym+add)@tprel. */
|
||||
#define R_PPC64_TPREL16_LO 60 /* half16 (sym+add)@tprel@l. */
|
||||
#define R_PPC64_TPREL16_HI 71 /* half16 (sym+add)@tprel@h. */
|
||||
#define R_PPC64_TPREL16_HA 72 /* half16 (sym+add)@tprel@ha. */
|
||||
#define R_PPC64_TPREL64 73 /* doubleword64 (sym+add)@tprel. */
|
||||
#define R_PPC64_DTPREL16 74 /* half16* (sym+add)@dtprel. */
|
||||
#define R_PPC64_DTPREL16_LO 75 /* half16 (sym+add)@dtprel@l. */
|
||||
#define R_PPC64_DTPREL16_HI 76 /* half16 (sym+add)@dtprel@h. */
|
||||
#define R_PPC64_DTPREL16_HA 77 /* half16 (sym+add)@dtprel@ha. */
|
||||
#define R_PPC64_DTPREL64 78 /* doubleword64 (sym+add)@dtprel. */
|
||||
#define R_PPC64_GOT_TLSGD16 79 /* half16* (sym+add)@got@tlsgd. */
|
||||
#define R_PPC64_GOT_TLSGD16_LO 80 /* half16 (sym+add)@got@tlsgd@l. */
|
||||
#define R_PPC64_GOT_TLSGD16_HI 81 /* half16 (sym+add)@got@tlsgd@h. */
|
||||
#define R_PPC64_GOT_TLSGD16_HA 82 /* half16 (sym+add)@got@tlsgd@ha. */
|
||||
#define R_PPC64_GOT_TLSLD16 83 /* half16* (sym+add)@got@tlsld. */
|
||||
#define R_PPC64_GOT_TLSLD16_LO 84 /* half16 (sym+add)@got@tlsld@l. */
|
||||
#define R_PPC64_GOT_TLSLD16_HI 85 /* half16 (sym+add)@got@tlsld@h. */
|
||||
#define R_PPC64_GOT_TLSLD16_HA 86 /* half16 (sym+add)@got@tlsld@ha. */
|
||||
#define R_PPC64_GOT_TPREL16_DS 87 /* half16ds* (sym+add)@got@tprel. */
|
||||
#define R_PPC64_GOT_TPREL16_LO_DS 88 /* half16ds (sym+add)@got@tprel@l. */
|
||||
#define R_PPC64_GOT_TPREL16_HI 89 /* half16 (sym+add)@got@tprel@h. */
|
||||
#define R_PPC64_GOT_TPREL16_HA 90 /* half16 (sym+add)@got@tprel@ha. */
|
||||
#define R_PPC64_GOT_DTPREL16_DS 91 /* half16ds* (sym+add)@got@dtprel. */
|
||||
#define R_PPC64_GOT_DTPREL16_LO_DS 92 /* half16ds (sym+add)@got@dtprel@l. */
|
||||
#define R_PPC64_GOT_DTPREL16_HI 93 /* half16 (sym+add)@got@dtprel@h. */
|
||||
#define R_PPC64_GOT_DTPREL16_HA 94 /* half16 (sym+add)@got@dtprel@ha. */
|
||||
#define R_PPC64_TPREL16_DS 95 /* half16ds* (sym+add)@tprel. */
|
||||
#define R_PPC64_TPREL16_LO_DS 96 /* half16ds (sym+add)@tprel@l. */
|
||||
#define R_PPC64_TPREL16_HIGHER 97 /* half16 (sym+add)@tprel@higher. */
|
||||
#define R_PPC64_TPREL16_HIGHERA 98 /* half16 (sym+add)@tprel@highera. */
|
||||
#define R_PPC64_TPREL16_HIGHEST 99 /* half16 (sym+add)@tprel@highest. */
|
||||
#define R_PPC64_TPREL16_HIGHESTA 100 /* half16 (sym+add)@tprel@highesta. */
|
||||
#define R_PPC64_DTPREL16_DS 101 /* half16ds* (sym+add)@dtprel. */
|
||||
#define R_PPC64_DTPREL16_LO_DS 102 /* half16ds (sym+add)@dtprel@l. */
|
||||
#define R_PPC64_DTPREL16_HIGHER 103 /* half16 (sym+add)@dtprel@higher. */
|
||||
#define R_PPC64_DTPREL16_HIGHERA 104 /* half16 (sym+add)@dtprel@highera. */
|
||||
#define R_PPC64_DTPREL16_HIGHEST 105 /* half16 (sym+add)@dtprel@highest. */
|
||||
#define R_PPC64_DTPREL16_HIGHESTA 106 /* half16 (sym+add)@dtprel@highesta. */
|
||||
/* Keep this the last entry. */
|
||||
#define R_PPC64_NUM 67
|
||||
#define R_PPC64_NUM 107
|
||||
|
||||
/* The remaining relocs are from the Embedded ELF ABI, and are not
|
||||
in the SVR4 ELF ABI. */
|
||||
|
@ -623,6 +623,58 @@ register void *__gp __asm__("$29");
|
||||
(int *) (__builtin_thread_pointer() + __offset); })
|
||||
# endif
|
||||
|
||||
#elif defined __powerpc__ && defined __powerpc64__
|
||||
|
||||
/* PowerPC64 Local Exec TLS access. */
|
||||
# define TLS_LE(x) \
|
||||
({ int * __result; \
|
||||
asm ( \
|
||||
" addis %0,13," #x "@tprel@ha\n" \
|
||||
" addi %0,%0," #x "@tprel@l\n" \
|
||||
: "=b" (__result) ); \
|
||||
__result; \
|
||||
})
|
||||
/* PowerPC64 Initial Exec TLS access. */
|
||||
# define TLS_IE(x) \
|
||||
({ int * __result; \
|
||||
asm ( \
|
||||
" ld %0," #x "@got@tprel(2)\n" \
|
||||
" add %0,%0," #x "@tls\n" \
|
||||
: "=b" (__result) ); \
|
||||
__result; \
|
||||
})
|
||||
/* PowerPC64 Local Dynamic TLS access. */
|
||||
# define TLS_LD(x) \
|
||||
({ int * __result; \
|
||||
asm ( \
|
||||
" addi 3,2," #x "@got@tlsld\n" \
|
||||
" bl .__tls_get_addr\n" \
|
||||
" nop \n" \
|
||||
" addis %0,3," #x "@dtprel@ha\n" \
|
||||
" addi %0,%0," #x "@dtprel@l\n" \
|
||||
: "=b" (__result) : \
|
||||
: "0", "3", "4", "5", "6", "7", \
|
||||
"8", "9", "10", "11", "12", \
|
||||
"lr", "ctr", \
|
||||
"cr0", "cr1", "cr5", "cr6", "cr7"); \
|
||||
__result; \
|
||||
})
|
||||
/* PowerPC64 General Dynamic TLS access. */
|
||||
# define TLS_GD(x) \
|
||||
({ int * __result; \
|
||||
asm ( \
|
||||
" addi 3,2," #x "@got@tlsgd\n" \
|
||||
" bl .__tls_get_addr\n" \
|
||||
" nop \n" \
|
||||
" mr %0,3\n" \
|
||||
: "=b" (__result) : \
|
||||
: "0", "3", "4", "5", "6", "7", \
|
||||
"8", "9", "10", "11", "12", \
|
||||
"lr", "ctr", \
|
||||
"cr0", "cr1", "cr5", "cr6", "cr7"); \
|
||||
__result; \
|
||||
})
|
||||
|
||||
#else
|
||||
# error "No support for this architecture so far."
|
||||
#endif
|
||||
|
76
sysdeps/powerpc/powerpc64/elf/configure
vendored
Normal file
76
sysdeps/powerpc/powerpc64/elf/configure
vendored
Normal file
@ -0,0 +1,76 @@
|
||||
# This file is generated from configure.in by Autoconf. DO NOT EDIT!
|
||||
# Local configure fragment for sysdeps/powerpc64/elf.
|
||||
|
||||
if test "$usetls" != no; then
|
||||
# Check for support of thread-local storage handling in assembler and
|
||||
# linker.
|
||||
echo "$as_me:$LINENO: checking for powerpc64 TLS support" >&5
|
||||
echo $ECHO_N "checking for powerpc64 TLS support... $ECHO_C" >&6
|
||||
if test "${libc_cv_powerpc64_tls+set}" = set; then
|
||||
echo $ECHO_N "(cached) $ECHO_C" >&6
|
||||
else
|
||||
cat > conftest.s <<\EOF
|
||||
.section ".tdata","awT",@progbits
|
||||
x: .quad 1
|
||||
x1: .quad 1
|
||||
x2: .quad 1
|
||||
x3: .quad 1
|
||||
x4: .long 1
|
||||
.section ".toc","aw"
|
||||
.LC0:
|
||||
.quad x@dtpmod
|
||||
.quad x@dtprel
|
||||
.LC1:
|
||||
.quad x1@dtpmod
|
||||
.quad 0
|
||||
.LC2:
|
||||
.quad x@tprel
|
||||
.text
|
||||
addi 3,2,x@got@tlsgd
|
||||
addi 3,2,.LC0@toc
|
||||
addi 3,2,x1@got@tlsld
|
||||
addi 9,3,x1@dtprel
|
||||
addis 9,3,x2@dtprel@ha
|
||||
addi 9,9,x2@dtprel@l
|
||||
ld 9,x3@got@dtprel(2)
|
||||
addi 3,2,.LC0@toc
|
||||
lwz 0,x1@dtprel(3)
|
||||
ld 0,x1@dtprel(3)
|
||||
addis 9,3,x2@dtprel@ha
|
||||
lwz 0,x2@dtprel@l(9)
|
||||
ld 0,x2@dtprel@l(9)
|
||||
ld 9,x3@got@dtprel(2)
|
||||
ld 9,x@got@tprel(2)
|
||||
add 9,9,x@tls
|
||||
ld 9,.LC2@toc(2)
|
||||
add 9,9,.LC2@tls
|
||||
addi 9,13,x1@tprel
|
||||
addis 9,13,x2@tprel@ha
|
||||
addi 9,9,x2@tprel@l
|
||||
EOF
|
||||
if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'
|
||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||
(eval $ac_try) 2>&5
|
||||
ac_status=$?
|
||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); }; }; then
|
||||
libc_cv_powerpc64_tls=yes
|
||||
else
|
||||
libc_cv_powerpc64_tls=no
|
||||
fi
|
||||
rm -f conftest*
|
||||
fi
|
||||
echo "$as_me:$LINENO: result: $libc_cv_powerpc64_tls" >&5
|
||||
echo "${ECHO_T}$libc_cv_powerpc64_tls" >&6
|
||||
if test $libc_cv_powerpc64_tls = yes; then
|
||||
cat >>confdefs.h <<\_ACEOF
|
||||
#define HAVE_TLS_SUPPORT 1
|
||||
_ACEOF
|
||||
|
||||
fi
|
||||
fi
|
||||
|
||||
cat >>confdefs.h <<\_ACEOF
|
||||
#define PI_STATIC_AND_HIDDEN 1
|
||||
_ACEOF
|
||||
|
61
sysdeps/powerpc/powerpc64/elf/configure.in
Normal file
61
sysdeps/powerpc/powerpc64/elf/configure.in
Normal file
@ -0,0 +1,61 @@
|
||||
GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
|
||||
# Local configure fragment for sysdeps/powerpc64/elf.
|
||||
|
||||
if test "$usetls" != no; then
|
||||
# Check for support of thread-local storage handling in assembler and
|
||||
# linker.
|
||||
AC_CACHE_CHECK(for powerpc64 TLS support, libc_cv_powerpc64_tls, [dnl
|
||||
cat > conftest.s <<\EOF
|
||||
.section ".tdata","awT",@progbits
|
||||
x: .quad 1
|
||||
x1: .quad 1
|
||||
x2: .quad 1
|
||||
x3: .quad 1
|
||||
x4: .long 1
|
||||
.section ".toc","aw"
|
||||
.LC0:
|
||||
.quad x@dtpmod
|
||||
.quad x@dtprel
|
||||
.LC1:
|
||||
.quad x1@dtpmod
|
||||
.quad 0
|
||||
.LC2:
|
||||
.quad x@tprel
|
||||
.text
|
||||
addi 3,2,x@got@tlsgd
|
||||
addi 3,2,.LC0@toc
|
||||
addi 3,2,x1@got@tlsld
|
||||
addi 9,3,x1@dtprel
|
||||
addis 9,3,x2@dtprel@ha
|
||||
addi 9,9,x2@dtprel@l
|
||||
ld 9,x3@got@dtprel(2)
|
||||
addi 3,2,.LC0@toc
|
||||
lwz 0,x1@dtprel(3)
|
||||
ld 0,x1@dtprel(3)
|
||||
addis 9,3,x2@dtprel@ha
|
||||
lwz 0,x2@dtprel@l(9)
|
||||
ld 0,x2@dtprel@l(9)
|
||||
ld 9,x3@got@dtprel(2)
|
||||
ld 9,x@got@tprel(2)
|
||||
add 9,9,x@tls
|
||||
ld 9,.LC2@toc(2)
|
||||
add 9,9,.LC2@tls
|
||||
addi 9,13,x1@tprel
|
||||
addis 9,13,x2@tprel@ha
|
||||
addi 9,9,x2@tprel@l
|
||||
EOF
|
||||
dnl
|
||||
if AC_TRY_COMMAND(${CC-cc} -c $CFLAGS conftest.s 1>&AS_MESSAGE_LOG_FD); then
|
||||
libc_cv_powerpc64_tls=yes
|
||||
else
|
||||
libc_cv_powerpc64_tls=no
|
||||
fi
|
||||
rm -f conftest*])
|
||||
if test $libc_cv_powerpc64_tls = yes; then
|
||||
AC_DEFINE(HAVE_TLS_SUPPORT)
|
||||
fi
|
||||
fi
|
||||
|
||||
dnl It is always possible to access static and hidden symbols in an
|
||||
dnl position independent way.
|
||||
AC_DEFINE(PI_STATIC_AND_HIDDEN)
|
Loading…
Reference in New Issue
Block a user