mirror of
https://sourceware.org/git/glibc.git
synced 2025-01-03 08:11:08 +00:00
* Makerules: Define build-module-asneeded.
* iconvdata/extra-module.mk: Use build-module-asneeded. needed. 2006-01-09 Richard Henderson <rth@redhat.com> * iconvdata/extra-module.mk ($(objpfx)$(mod).so): Depend on ld.so. * sysdeps/alpha/__longjmp.S: Use PTR_DEMANGLE. * sysdeps/alpha/setjmp.S: Likewise. Avoid __sigjmp_save for rtld; tailcall in libc.so. * sysdeps/unix/sysv/linux/alpha/sysdep.h (PTR_MANGLE): Define. (PTR_MANGLE2): Define. 2006-01-11 Ulrich Drepper <drepper@redhat.com>
This commit is contained in:
parent
3baf2e9b75
commit
d9266ea02f
15
ChangeLog
15
ChangeLog
@ -1,3 +1,18 @@
|
|||||||
|
2006-01-11 Ulrich Drepper <drepper@redhat.com>
|
||||||
|
|
||||||
|
* Makerules: Define build-module-asneeded.
|
||||||
|
* iconvdata/extra-module.mk: Use build-module-asneeded.
|
||||||
|
needed.
|
||||||
|
|
||||||
|
2006-01-09 Richard Henderson <rth@redhat.com>
|
||||||
|
|
||||||
|
* iconvdata/extra-module.mk ($(objpfx)$(mod).so): Depend on ld.so.
|
||||||
|
* sysdeps/alpha/__longjmp.S: Use PTR_DEMANGLE.
|
||||||
|
* sysdeps/alpha/setjmp.S: Likewise. Avoid __sigjmp_save for rtld;
|
||||||
|
tailcall in libc.so.
|
||||||
|
* sysdeps/unix/sysv/linux/alpha/sysdep.h (PTR_MANGLE): Define.
|
||||||
|
(PTR_MANGLE2): Define.
|
||||||
|
|
||||||
2006-01-11 Ulrich Drepper <drepper@redhat.com>
|
2006-01-11 Ulrich Drepper <drepper@redhat.com>
|
||||||
|
|
||||||
* elf/check-localplt.c: New file.
|
* elf/check-localplt.c: New file.
|
||||||
|
@ -572,6 +572,11 @@ define build-module
|
|||||||
$(build-module-helper) -o $@ -T $(common-objpfx)shlib.lds \
|
$(build-module-helper) -o $@ -T $(common-objpfx)shlib.lds \
|
||||||
$(csu-objpfx)abi-note.o $(build-module-objlist)
|
$(csu-objpfx)abi-note.o $(build-module-objlist)
|
||||||
endef
|
endef
|
||||||
|
define build-module-asneeded
|
||||||
|
$(build-module-helper) -o $@ -T $(common-objpfx)shlib.lds \
|
||||||
|
$(csu-objpfx)abi-note.o \
|
||||||
|
-Wl,--as-needed $(build-module-objlist) -Wl,--no-as-needed
|
||||||
|
endef
|
||||||
else
|
else
|
||||||
ifneq (,$(findstring aix,$(config-os)))
|
ifneq (,$(findstring aix,$(config-os)))
|
||||||
define build-module
|
define build-module
|
||||||
|
16
elf/Makefile
16
elf/Makefile
@ -828,11 +828,21 @@ check-data := $(firstword $(wildcard \
|
|||||||
ifneq (,$(check-data))
|
ifneq (,$(check-data))
|
||||||
tests: $(objpfx)check-localplt.out
|
tests: $(objpfx)check-localplt.out
|
||||||
|
|
||||||
|
ifeq ($(have-thread-library),yes)
|
||||||
|
thread-dso := $(filter-out %_nonshared.a, $(shared-thread-library))
|
||||||
|
endif
|
||||||
|
|
||||||
$(objpfx)check-localplt.out: $(objpfx)check-localplt $(common-objpfx)libc.so \
|
$(objpfx)check-localplt.out: $(objpfx)check-localplt $(common-objpfx)libc.so \
|
||||||
$(common-objpfx)math/libm.so $(check-data)
|
$(common-objpfx)math/libm.so $(thread-dso) \
|
||||||
|
$(common-objpfx)rt/librt.so \
|
||||||
|
$(common-objpfx)dlfcn/libdl.so \
|
||||||
|
$(check-data)
|
||||||
$(objpfx)check-localplt $(common-objpfx)libc.so \
|
$(objpfx)check-localplt $(common-objpfx)libc.so \
|
||||||
$(common-objpfx)math/libm.so | LC_ALL=C sort |\
|
$(common-objpfx)math/libm.so $(thread-dso) \
|
||||||
diff -u $(check-data) -
|
$(common-objpfx)rt/librt.so \
|
||||||
|
$(common-objpfx)dlfcn/libdl.so | \
|
||||||
|
LC_ALL=C sort | \
|
||||||
|
diff -u $(check-data) - > $@
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
@ -212,7 +212,7 @@ AB(handle_file) (const char *fname, int fd)
|
|||||||
|
|
||||||
if (sym.st_value != 0)
|
if (sym.st_value != 0)
|
||||||
/* This symbol is locally defined. */
|
/* This symbol is locally defined. */
|
||||||
puts (strtab + SWAP (sym.st_name));
|
printf ("%s: %s\n", basename (fname), strtab + SWAP (sym.st_name));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
for (E(Rel) *rel = relmem; (char *) rel - (char *) relmem < relsz; ++rel)
|
for (E(Rel) *rel = relmem; (char *) rel - (char *) relmem < relsz; ++rel)
|
||||||
@ -230,7 +230,7 @@ AB(handle_file) (const char *fname, int fd)
|
|||||||
|
|
||||||
if (sym.st_value != 0)
|
if (sym.st_value != 0)
|
||||||
/* This symbol is locally defined. */
|
/* This symbol is locally defined. */
|
||||||
puts (strtab + SWAP (sym.st_name));
|
printf ("%s: %s\n", basename (fname), strtab + SWAP (sym.st_name));
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -5,12 +5,14 @@ extra-objs := $(extra-objs) $(patsubst %,%.os,$($(mod)-routines))
|
|||||||
|
|
||||||
$(objpfx)$(mod).so: $(addprefix $(objpfx),$(addsuffix .os,$($(mod)-routines)))\
|
$(objpfx)$(mod).so: $(addprefix $(objpfx),$(addsuffix .os,$($(mod)-routines)))\
|
||||||
$(common-objpfx)shlib.lds
|
$(common-objpfx)shlib.lds
|
||||||
$(build-module)
|
$(build-module-asneeded)
|
||||||
|
|
||||||
# Depend on libc.so so a DT_NEEDED is generated in the shared objects.
|
# Depend on libc.so so a DT_NEEDED is generated in the shared objects.
|
||||||
# This ensures they will load libc.so for needed symbols if loaded by
|
# This ensures they will load libc.so for needed symbols if loaded by
|
||||||
# a statically-linked program that hasn't already loaded it.
|
# a statically-linked program that hasn't already loaded it.
|
||||||
$(objpfx)$(mod).so: $(common-objpfx)libc.so $(common-objpfx)libc_nonshared.a
|
$(objpfx)$(mod).so: $(common-objpfx)libc.so \
|
||||||
|
$(common-objpfx)/elf/ld.so \
|
||||||
|
$(common-objpfx)libc_nonshared.a
|
||||||
|
|
||||||
ifneq (,$(extra-modules-left))
|
ifneq (,$(extra-modules-left))
|
||||||
include extra-module.mk
|
include extra-module.mk
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
_Unwind_Find_FDE
|
libc.so: _Unwind_Find_FDE
|
||||||
calloc
|
libc.so: calloc
|
||||||
free
|
libc.so: free
|
||||||
malloc
|
libc.so: malloc
|
||||||
matherr
|
libc.so: memalign
|
||||||
memalign
|
libc.so: realloc
|
||||||
realloc
|
libm.so: matherr
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
calloc
|
libc.so: calloc
|
||||||
free
|
libc.so: free
|
||||||
malloc
|
libc.so: malloc
|
||||||
matherr
|
libc.so: memalign
|
||||||
memalign
|
libc.so: realloc
|
||||||
realloc
|
libm.so: matherr
|
||||||
|
@ -54,6 +54,11 @@ ENTRY(__longjmp)
|
|||||||
ldt $f7, JB_F7*8(a0)
|
ldt $f7, JB_F7*8(a0)
|
||||||
ldt $f8, JB_F8*8(a0)
|
ldt $f8, JB_F8*8(a0)
|
||||||
ldt $f9, JB_F9*8(a0)
|
ldt $f9, JB_F9*8(a0)
|
||||||
|
#ifdef PTR_DEMANGLE
|
||||||
|
PTR_DEMANGLE(ra, t1)
|
||||||
|
PTR_DEMANGLE2(t0, t1)
|
||||||
|
PTR_DEMANGLE2(fp, t1)
|
||||||
|
#endif
|
||||||
cmoveq v0, 1, v0
|
cmoveq v0, 1, v0
|
||||||
mov t0, sp
|
mov t0, sp
|
||||||
ret
|
ret
|
||||||
|
@ -29,10 +29,16 @@ __sigsetjmp:
|
|||||||
ldgp gp, 0(pv)
|
ldgp gp, 0(pv)
|
||||||
|
|
||||||
$sigsetjmp_local:
|
$sigsetjmp_local:
|
||||||
subq sp, 16, sp
|
#ifndef PIC
|
||||||
.frame sp, 16, ra, 0
|
#define FRAME 16
|
||||||
|
subq sp, FRAME, sp
|
||||||
|
.frame sp, FRAME, ra, 0
|
||||||
stq ra, 0(sp)
|
stq ra, 0(sp)
|
||||||
.mask 0x04000000, -16
|
.mask 0x04000000, -FRAME
|
||||||
|
#else
|
||||||
|
#define FRAME 0
|
||||||
|
.frame sp, FRAME, ra, 0
|
||||||
|
#endif
|
||||||
#ifdef PROF
|
#ifdef PROF
|
||||||
.set noat
|
.set noat
|
||||||
lda AT, _mcount
|
lda AT, _mcount
|
||||||
@ -47,10 +53,27 @@ $sigsetjmp_local:
|
|||||||
stq s3, JB_S3*8(a0)
|
stq s3, JB_S3*8(a0)
|
||||||
stq s4, JB_S4*8(a0)
|
stq s4, JB_S4*8(a0)
|
||||||
stq s5, JB_S5*8(a0)
|
stq s5, JB_S5*8(a0)
|
||||||
|
#ifdef PTR_MANGLE
|
||||||
|
PTR_MANGLE(t1, ra, t0)
|
||||||
|
stq t1, JB_PC*8(a0)
|
||||||
|
#else
|
||||||
stq ra, JB_PC*8(a0)
|
stq ra, JB_PC*8(a0)
|
||||||
addq sp, 16, t0
|
#endif
|
||||||
|
#if defined(PTR_MANGLE) && FRAME == 0
|
||||||
|
PTR_MANGLE2(t1, sp, t0)
|
||||||
|
#else
|
||||||
|
addq sp, FRAME, t1
|
||||||
|
# ifdef PTR_MANGLE
|
||||||
|
PTR_MANGLE2(t1, t1, t0)
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
stq t1, JB_SP*8(a0)
|
||||||
|
#ifdef PTR_MANGLE
|
||||||
|
PTR_MANGLE2(t1, fp, t0)
|
||||||
|
stq t1, JB_FP*8(a0)
|
||||||
|
#else
|
||||||
stq fp, JB_FP*8(a0)
|
stq fp, JB_FP*8(a0)
|
||||||
stq t0, JB_SP*8(a0)
|
#endif
|
||||||
stt $f2, JB_F2*8(a0)
|
stt $f2, JB_F2*8(a0)
|
||||||
stt $f3, JB_F3*8(a0)
|
stt $f3, JB_F3*8(a0)
|
||||||
stt $f4, JB_F4*8(a0)
|
stt $f4, JB_F4*8(a0)
|
||||||
@ -60,12 +83,20 @@ $sigsetjmp_local:
|
|||||||
stt $f8, JB_F8*8(a0)
|
stt $f8, JB_F8*8(a0)
|
||||||
stt $f9, JB_F9*8(a0)
|
stt $f9, JB_F9*8(a0)
|
||||||
|
|
||||||
|
#ifndef PIC
|
||||||
/* Call to C to (potentially) save our signal mask. */
|
/* Call to C to (potentially) save our signal mask. */
|
||||||
jsr ra, __sigjmp_save
|
jsr ra, __sigjmp_save
|
||||||
|
|
||||||
ldq ra, 0(sp)
|
ldq ra, 0(sp)
|
||||||
addq sp, 16, sp
|
addq sp, 16, sp
|
||||||
ret
|
ret
|
||||||
|
#elif defined NOT_IN_libc && defined IS_IN_rtld
|
||||||
|
/* In ld.so we never save the signal mask. */
|
||||||
|
mov 0, v0
|
||||||
|
ret
|
||||||
|
#else
|
||||||
|
/* Tailcall to save the signal mask. */
|
||||||
|
br $31, __sigjmp_save !samegp
|
||||||
|
#endif
|
||||||
|
|
||||||
END(__sigsetjmp)
|
END(__sigsetjmp)
|
||||||
|
|
||||||
|
@ -22,10 +22,10 @@
|
|||||||
#define _LINUX_ALPHA_SYSDEP_H 1
|
#define _LINUX_ALPHA_SYSDEP_H 1
|
||||||
|
|
||||||
#ifdef __ASSEMBLER__
|
#ifdef __ASSEMBLER__
|
||||||
|
|
||||||
#include <asm/pal.h>
|
#include <asm/pal.h>
|
||||||
#include <alpha/regdef.h>
|
#include <alpha/regdef.h>
|
||||||
|
#else
|
||||||
|
#include <stdint.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* There is some commonality. */
|
/* There is some commonality. */
|
||||||
@ -98,4 +98,39 @@
|
|||||||
INTERNAL_SYSCALL1(name, err_out, nr, args); \
|
INTERNAL_SYSCALL1(name, err_out, nr, args); \
|
||||||
})
|
})
|
||||||
|
|
||||||
|
/* Pointer mangling support. Note that tls access is slow enough that
|
||||||
|
we don't deoptimize things by placing the pointer check value there. */
|
||||||
|
#if defined NOT_IN_libc && defined IS_IN_rtld
|
||||||
|
# ifdef __ASSEMBLER__
|
||||||
|
# define PTR_MANGLE(dst, src, tmp) \
|
||||||
|
ldah tmp, __pointer_chk_guard_local($29) !gprelhigh; \
|
||||||
|
ldq tmp, __pointer_chk_guard_local(tmp) !gprellow; \
|
||||||
|
xor src, tmp, dst
|
||||||
|
# define PTR_MANGLE2(dst, src, tmp) \
|
||||||
|
xor src, tmp, dst
|
||||||
|
# define PTR_DEMANGLE(dst, tmp) PTR_MANGLE(dst, dst, tmp)
|
||||||
|
# define PTR_DEMANGLE2(dst, tmp) PTR_MANGLE2(dst, dst, tmp)
|
||||||
|
# else
|
||||||
|
extern uintptr_t __pointer_chk_guard_local attribute_relro attribute_hidden;
|
||||||
|
# define PTR_MANGLE(var) \
|
||||||
|
(var) = (void *) ((uintptr_t) (var) ^ __pointer_chk_guard_local)
|
||||||
|
# define PTR_DEMANGLE(var) PTR_MANGLE(var)
|
||||||
|
# endif
|
||||||
|
#elif defined PIC
|
||||||
|
# ifdef __ASSEMBLER__
|
||||||
|
# define PTR_MANGLE(dst, src, tmp) \
|
||||||
|
ldq tmp, __pointer_chk_guard; \
|
||||||
|
xor src, tmp, dst
|
||||||
|
# define PTR_MANGLE2(dst, src, tmp) \
|
||||||
|
xor src, tmp, dst
|
||||||
|
# define PTR_DEMANGLE(dst, tmp) PTR_MANGLE(dst, dst, tmp)
|
||||||
|
# define PTR_DEMANGLE2(dst, tmp) PTR_MANGLE2(dst, dst, tmp)
|
||||||
|
# else
|
||||||
|
extern uintptr_t __pointer_chk_guard attribute_relro;
|
||||||
|
# define PTR_MANGLE(var) \
|
||||||
|
(var) = (void *) ((uintptr_t) (var) ^ __pointer_chk_guard)
|
||||||
|
# define PTR_DEMANGLE(var) PTR_MANGLE(var)
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* _LINUX_ALPHA_SYSDEP_H */
|
#endif /* _LINUX_ALPHA_SYSDEP_H */
|
||||||
|
Loading…
Reference in New Issue
Block a user