Commit Graph

9 Commits

Author SHA1 Message Date
Ulrich Drepper
e83c1a8a72 Refine testing for xmm/ymm register use in x86-64 ld.so.
The test now takes the callgraph into account.  Only code called
during runtime relocation is affected by the limitation.  We now
determine the affected object files as closely as possible from
the outside.  This allowed to remove some the specializations
for some of the string functions as they are only used in other
code paths.
2009-07-27 13:40:27 -07:00
Ulrich Drepper
16d2ea4c82 Make sure no code in ld.so uses xmm/ymm registers on x86-64.
This patch introduces a test to make sure no function modifies the
xmm/ymm registers.  With the exception of the auditing functions.

The test is probably too pessimistic.  All code linked into ld.so
is checked.  Perhaps at some point the callgraph starting from
_dl_fixup and _dl_profile_fixup is checked and we can start using
faster SSE-using functions in parts of ld.so.
2009-07-26 16:10:00 -07:00
H.J. Lu
b0ecde3a63 Add AVX support to ld.so auditing for x86-64. 2009-07-10 12:04:14 -07:00
Ulrich Drepper
c9ff0187a6 Introduce TLS descriptors for i386 and x86_64.
* include/inline-hashtab.h: New file, copied from 2005's
	libiberty, with fix for memory leak imported afterwards by
	Glauber de Oliveira Costa.
	* elf/tlsdeschtab.h: New file.
	* elf/dl-reloc.c (_dl_try_allocate_static_tls): Extract from...
	(_dl_allocate_static_tls): ... here.  Rearrange failure path.
	(CHECK_STATIC_TLS): Move to...
	* elf/dynamic-link.h: ... this file.
	(TRY_STATIC_TLS): New macro.
	* elf/dl-conflict.c (CHECK_STATIC_TLS, TRY_STATIC_TLS): Override.
	* elf/elf.h (R_386_TLS_GOTDESC, R_386_TLS_DESC_CALL,
	R_386_TLS_DESC): Define.
	(R_X86_64_PC64, R_X86_GOTOFF64, R_X86_64_GOTPC32): Merge from
	binutils.
	(R_X86_64_GOTPC32_TLSDESC, R_X86_64_TLSDESC_CALL,
	R_X86_64_TLSDESC): Define.
	(R_386_NUM, R_X86_64_NUM): Adjust.
	* sysdeps/i386/Makefile (sysdep-dl-routines, sysdep_routines,
	systep-rtld-routines): Add tlsdesc and dl-tlsdesc for elf subdir.
	(gen-as-const-headers): Add tlsdesc.sym to csu subdir.
	* sysdeps/i386/dl-lookupcfg.h: New file.  Introduce _dl_unmap to
	release tlsdesc_table.
	* sysdeps/i386/dl-machine.h: Include dl-tlsdesc.h.
	(elf_machine_type_class): Mark R_386_TLS_DESC as PLT class.
	(elf_machine_rel): Handle R_386_TLS_DESC.
	(elf_machine_rela): Likewise.
	(elf_machine_lazy_rel): Likewise.
	(elf_machine_lazy_rela): Likewise.
	* sysdeps/i386/dl-tls.h (struct dl_tls_index): Name it.
	* sysdeps/i386/dl-tlsdesc.S: New file.
	* sysdeps/i386/dl-tlsdesc.h: New file.
	* sysdeps/i386/tlsdesc.c: New file.
	* sysdeps/i386/tlsdesc.sym: New file.
	* sysdeps/i386/bits/linkmap.h (struct link_map_machine): Add
	tlsdesc_table.
	* sysdeps/x86_64/Makefile (sysdep-dl-routines, sysdep_routines,
	systep-rtld-routines): Add tlsdesc and dl-tlsdesc for elf subdir.
	(gen-as-const-headers): Add tlsdesc.sym to csu subdir.
	* sysdeps/x86_64/dl-lookupcfg.h: New file.  Introduce _dl_unmap to
	release tlsdesc_table.
	* sysdeps/x86_64/dl-machine.h: Include dl-tlsdesc.h.
	(elf_machine_runtime_setup): Set up lazy TLSDESC GOT entry.
	(elf_machine_type_class): Mark R_X86_64_TLSDESC as PLT class.
	(elf_machine_rel): Handle R_X86_64_TLSDESC.
	(elf_machine_rela): Likewise.
	(elf_machine_lazy_rel): Likewise.
	* sysdeps/x86_64/dl-tls.h (struct dl_tls_index): Name it.
	(__tls_get_addr): Do not declare for non-shared compiles.
	* sysdeps/x86_64/dl-tlsdesc.S: New file.
	* sysdeps/x86_64/dl-tlsdesc.h: New file.
	* sysdeps/x86_64/tlsdesc.c: New file.
	* sysdeps/x86_64/tlsdesc.sym: New file.
	* sysdeps/x86_64/bits/linkmap.h (struct link_map_machine): Add
	tlsdesc_table for both 32- and 64-bit structs.
2008-05-13 05:41:30 +00:00
Ulrich Drepper
bfe6f5fa89 * sysdeps/unix/sysv/linux/x86_64/sysconf.c: Move cache information
handling to ...
	* sysdeps/x86_64/cacheinfo.c: ... here.  New file.
	* sysdeps/x86_64/Makefile [subdir=string] (sysdep_routines): Add
	cacheinfo.
	* sysdeps/x86_64/memcpy.S: Complete rewrite.
	* sysdeps/x86_64/mempcpy.S: Adjust appropriately.
	Patch by Evandro Menezes <evandro.menezes@amd.com>.

	* sysdeps/unix/sysv/linux/i386/epoll_pwait.S: New file.
2007-05-21 19:21:48 +00:00
Roland McGrath
813d9c0dd8 * sysdeps/i386/i686/Makefile (elide-routines.os): Append hp-timing to
this, not ...
	(static-only-routines): ... this.
	* sysdeps/ia64/Makefile: Likewise.
	* sysdeps/sparc/sparc32/sparcv9/Makefile: Likewise.
	* sysdeps/sparc/sparc64/Makefile: Likewise.
	* sysdeps/x86_64/Makefile: Likewise.
	* sysdeps/i386/i686/hp-timing.c: Revert copyright terms change.
	* sysdeps/ia64/hp-timing.c: Likewise.
	* sysdeps/sparc/sparc32/sparcv9/hp-timing.c: Likewise.
	* sysdeps/sparc/sparc64/hp-timing.c: Likewise.
2004-08-16 06:46:31 +00:00
Andreas Jaeger
6dbdc56c3d Update.
2002-08-21  Andreas Jaeger  <aj@suse.de>

	* sysdeps/x86_64/sysdep.h (CALL_MCOUNT): Fix it.

	* sysdeps/x86_64/Makefile (sysdep_routines): Add _mcount.

	* sysdeps/x86_64/machine-gmon.h: New.
	* sysdeps/x86_64/_mcount.S: New.
2002-08-21 07:57:48 +00:00
Ulrich Drepper
ccdf0cab1d Update.
* elf/dl-minimal.c: Define _itoa for 32-bit machines with HP timing.
	* elf/dl-reloc.c: Pretty printing.
	* sysdeps/generic/ldsodefs.h: Move _dl_hp_timing_overhead and
	procinfo-related variables in rtld_global struct.
	* elf/dl-support.c: Likewise.
	* elf/rtld.c: Likewise.
	* sysdeps/i386/i686/Makefile: Likewise.
	* sysdeps/i386/i686/hp-timing.c: Likewise.
	* sysdeps/i386/i686/hp-timing.h: Likewise.
	* sysdeps/ia64/Makefile: Likewise.
	* sysdeps/ia64/hp-timing.c: Likewise.
	* sysdeps/sparc/sparc32/sparcv9/Makefile: Likewise.
	* sysdeps/sparc/sparc32/sparcv9/hp-timing.c: Likewise.
	* sysdeps/unix/sysv/linux/arm/dl-procinfo.c: Likewise.
	* sysdeps/unix/sysv/linux/arm/dl-procinfo.h: Likewise.
	* sysdeps/unix/sysv/linux/i386/Makefile: Likewise.
	* sysdeps/unix/sysv/linux/i386/dl-procinfo.c: Likewise.
	* sysdeps/unix/sysv/linux/i386/dl-procinfo.h: Likewise.
	* sysdeps/x86_64/Makefile: Likewise.
2002-02-01 07:49:47 +00:00
Andreas Jaeger
c9cf6ddeeb Update.
* sysdeps/unix/sysv/linux/x86_64/Makefile: New file.
	* sysdeps/unix/sysv/linux/x86_64/Versions: New file.
	* sysdeps/unix/sysv/linux/x86_64/bits/fcntl.h: New file.
	* sysdeps/unix/sysv/linux/x86_64/bits/mman.h: New file.
	* sysdeps/unix/sysv/linux/x86_64/bits/stat.h: New file.
	* sysdeps/unix/sysv/linux/x86_64/bits/statfs.h: New file.
	* sysdeps/unix/sysv/linux/x86_64/bits/time.h: New file.
	* sysdeps/unix/sysv/linux/x86_64/bits/types.h: New file.
	* sysdeps/unix/sysv/linux/x86_64/brk.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/clone.S: New file.
	* sysdeps/unix/sysv/linux/x86_64/fstatfs64.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/ftruncate64.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/fxstat.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/fxstat64.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/getdents.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/getdents64.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/getrlimit64.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/gettimeofday.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/glob64.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/lxstat.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/lxstat64.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/mmap64.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/pread64.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/profil-counter.h: New file.
	* sysdeps/unix/sysv/linux/x86_64/pwrite64.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/readdir.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/readdir64.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/readdir64_r.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/readdir_r.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/recv.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/register-dump.h: New file.
	* sysdeps/unix/sysv/linux/x86_64/send.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/setrlimit64.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/sigaction.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/sigcontextinfo.h: New file.
	* sysdeps/unix/sysv/linux/x86_64/sigpending.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/sigprocmask.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/sigsuspend.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/statfs64.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/sys/perm.h: New file.
	* sysdeps/unix/sysv/linux/x86_64/sys/procfs.h: New file.
	* sysdeps/unix/sysv/linux/x86_64/sys/reg.h: New file.
	* sysdeps/unix/sysv/linux/x86_64/sys/ucontext.h: New file.
	* sysdeps/unix/sysv/linux/x86_64/sys/user.h: New file.
	* sysdeps/unix/sysv/linux/x86_64/syscall.S: New file.
	* sysdeps/unix/sysv/linux/x86_64/syscalls.list: New file.
	* sysdeps/unix/sysv/linux/x86_64/sysdep.S: New file.
	* sysdeps/unix/sysv/linux/x86_64/sysdep.h: New file.
	* sysdeps/unix/sysv/linux/x86_64/time.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/truncate64.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/umount.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/vfork.S: New file.
	* sysdeps/unix/sysv/linux/x86_64/xstat.c: New file.
	* sysdeps/unix/sysv/linux/x86_64/xstat64.c: New file.
	* sysdeps/unix/x86_64/sysdep.S: New file.
	* sysdeps/unix/x86_64/sysdep.h: New file.
	* sysdeps/x86_64/Implies: New file.
	* sysdeps/x86_64/Makefile: New file.
	* sysdeps/x86_64/Versions: New file.
	* sysdeps/x86_64/__longjmp.S: New file.
	* sysdeps/x86_64/abort-instr.h: New file.
	* sysdeps/x86_64/atomicity.h: New file.
	* sysdeps/x86_64/bits/endian.h: New file.
	* sysdeps/x86_64/bits/setjmp.h: New file.
	* sysdeps/x86_64/bits/string.h: New file.
	* sysdeps/x86_64/bp-asm.h: New file.
	* sysdeps/x86_64/bsd-_setjmp.S: New file.
	* sysdeps/x86_64/bsd-setjmp.S: New file.
	* sysdeps/x86_64/dl-machine.h: New file.
	* sysdeps/x86_64/elf/initfini.c: New file.
	* sysdeps/x86_64/elf/start.S: New file.
	* sysdeps/x86_64/ffs.c: New file.
	* sysdeps/x86_64/ffsll.c: New file.
	* sysdeps/x86_64/fpu/bits/fenv.h: New file.
	* sysdeps/x86_64/fpu/bits/mathdef.h: New file.
	* sysdeps/x86_64/fpu/e_acosl.c: New file.
	* sysdeps/x86_64/fpu/e_atan2l.c: New file.
	* sysdeps/x86_64/fpu/e_exp2l.S: New file.
	* sysdeps/x86_64/fpu/e_expl.c: New file.
	* sysdeps/x86_64/fpu/e_fmodl.S: New file.
	* sysdeps/x86_64/fpu/e_log10l.S: New file.
	* sysdeps/x86_64/fpu/e_log2l.S: New file.
	* sysdeps/x86_64/fpu/e_logl.S: New file.
	* sysdeps/x86_64/fpu/e_powl.S: New file.
	* sysdeps/x86_64/fpu/e_rem_pio2l.c: New file.
	* sysdeps/x86_64/fpu/e_scalbl.S: New file.
	* sysdeps/x86_64/fpu/e_sqrtl.c: New file.
	* sysdeps/x86_64/fpu/fclrexcpt.c: New file.
	* sysdeps/x86_64/fpu/fedisblxcpt.c: New file.
	* sysdeps/x86_64/fpu/feenablxcpt.c: New file.
	* sysdeps/x86_64/fpu/fegetenv.c: New file.
	* sysdeps/x86_64/fpu/fegetexcept.c: New file.
	* sysdeps/x86_64/fpu/fegetround.c: New file.
	* sysdeps/x86_64/fpu/feholdexcpt.c: New file.
	* sysdeps/x86_64/fpu/fesetenv.c: New file.
	* sysdeps/x86_64/fpu/fesetround.c: New file.
	* sysdeps/x86_64/fpu/fgetexcptflg.c: New file.
	* sysdeps/x86_64/fpu/fraiseexcpt.c: New file.
	* sysdeps/x86_64/fpu/fsetexcptflg.c: New file.
	* sysdeps/x86_64/fpu/ftestexcept.c: New file.
	* sysdeps/x86_64/fpu/libm-test-ulps: New file.
	* sysdeps/x86_64/fpu/math_ldbl.h: New file.
	* sysdeps/x86_64/fpu/printf_fphex.c: New file.
	* sysdeps/x86_64/fpu/s_atanl.c: New file.
	* sysdeps/x86_64/fpu/s_cosl.S: New file.
	* sysdeps/x86_64/fpu/s_expm1l.S: New file.
	* sysdeps/x86_64/fpu/s_fpclassifyl.c: New file.
	* sysdeps/x86_64/fpu/s_isinfl.c: New file.
	* sysdeps/x86_64/fpu/s_isnanl.c: New file.
	* sysdeps/x86_64/fpu/s_log1pl.S: New file.
	* sysdeps/x86_64/fpu/s_logbl.c: New file.
	* sysdeps/x86_64/fpu/s_nextafterl.c: New file.
	* sysdeps/x86_64/fpu/s_nexttoward.c: New file.
	* sysdeps/x86_64/fpu/s_nexttowardf.c: New file.
	* sysdeps/x86_64/fpu/s_rintl.c: New file.
	* sysdeps/x86_64/fpu/s_significandl.c: New file.
	* sysdeps/x86_64/fpu/s_sincosl.S: New file.
	* sysdeps/x86_64/fpu/s_sinl.S: New file.
	* sysdeps/x86_64/fpu/s_tanl.S: New file.
	* sysdeps/x86_64/gmp-mparam.h: New file.
	* sysdeps/x86_64/hp-timing.c: New file.
	* sysdeps/x86_64/hp-timing.h: New file.
	* sysdeps/x86_64/htonl.S: New file.
	* sysdeps/x86_64/memusage.h: New file.
	* sysdeps/x86_64/setjmp.S: New file.
	* sysdeps/x86_64/soft-fp/sfp-machine.h: New file.
	* sysdeps/x86_64/stackinfo.h: New file.
	* sysdeps/x86_64/sysdep.h: New file.
	* sysdeps/unix/sysv/linux/x86_64/ldd-rewrite.sed: New file.
2001-09-19 10:37:31 +00:00