mirror of
https://sourceware.org/git/glibc.git
synced 2024-12-28 13:31:13 +00:00
c9ff0187a6
* 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.
78 lines
2.2 KiB
Makefile
78 lines
2.2 KiB
Makefile
# The mpn functions need a #define for asm syntax flavor.
|
|
# Every i386 port in use uses gas syntax (I think).
|
|
asm-CPPFLAGS += -DGAS_SYNTAX
|
|
|
|
# The i386 `long double' is a distinct type we support.
|
|
long-double-fcts = yes
|
|
|
|
ifeq ($(subdir),csu)
|
|
# On i686 we must avoid generating the trampoline functions generated
|
|
# to get the GOT pointer.
|
|
CFLAGS-initfini.s += -march=i386 -mtune=i386
|
|
endif
|
|
|
|
ifeq ($(subdir),gmon)
|
|
sysdep_routines += i386-mcount
|
|
endif
|
|
|
|
ifeq ($(subdir),elf)
|
|
CFLAGS-rtld.c += -Wno-uninitialized -Wno-unused
|
|
CFLAGS-dl-load.c += -Wno-unused
|
|
CFLAGS-dl-reloc.c += -Wno-unused
|
|
endif
|
|
|
|
ifeq ($(subdir),debug)
|
|
CFLAGS-backtrace.c += -fexceptions
|
|
endif
|
|
|
|
# Most of the glibc routines don't ever call user defined callbacks
|
|
# nor use any FPU or SSE* and as such don't need bigger %esp alignment
|
|
# than 4 bytes.
|
|
# Lots of routines in math will use FPU, so make math subdir an exception
|
|
# here.
|
|
ifeq ($(subdir),math)
|
|
sysdep-CFLAGS += -mpreferred-stack-boundary=4
|
|
else
|
|
ifeq ($(subdir),csu)
|
|
sysdep-CFLAGS += -mpreferred-stack-boundary=4
|
|
else
|
|
sysdep-CFLAGS += -mpreferred-stack-boundary=2
|
|
# Likewise, any function which calls user callbacks
|
|
uses-callbacks += -mpreferred-stack-boundary=4
|
|
# Likewise, any stack alignment tests
|
|
stack-align-test-flags += -malign-double -mpreferred-stack-boundary=4
|
|
endif
|
|
endif
|
|
|
|
# And a couple of other routines
|
|
ifeq ($(subdir),stdlib)
|
|
CFLAGS-exit.c += -mpreferred-stack-boundary=4
|
|
endif
|
|
ifeq ($(subdir),elf)
|
|
CFLAGS-dl-init.c += -mpreferred-stack-boundary=4
|
|
CFLAGS-dl-fini.c += -mpreferred-stack-boundary=4
|
|
CFLAGS-dl-open.c += -mpreferred-stack-boundary=4
|
|
CFLAGS-dl-close.c += -mpreferred-stack-boundary=4
|
|
CFLAGS-dl-error.c += -mpreferred-stack-boundary=4
|
|
endif
|
|
ifeq ($(subdir),dlfcn)
|
|
CFLAGS-dlopen.c += -mpreferred-stack-boundary=4
|
|
CFLAGS-dlopenold.c += -mpreferred-stack-boundary=4
|
|
CFLAGS-dlclose.c += -mpreferred-stack-boundary=4
|
|
CFLAGS-dlerror.c += -mpreferred-stack-boundary=4
|
|
endif
|
|
|
|
ifneq (,$(filter -mno-tls-direct-seg-refs,$(CFLAGS)))
|
|
defines += -DNO_TLS_DIRECT_SEG_REFS
|
|
endif
|
|
|
|
ifeq ($(subdir),elf)
|
|
sysdep-dl-routines += tlsdesc dl-tlsdesc
|
|
sysdep_routines += tlsdesc dl-tlsdesc
|
|
sysdep-rtld-routines += tlsdesc dl-tlsdesc
|
|
endif
|
|
|
|
ifeq ($(subdir),csu)
|
|
gen-as-const-headers += tlsdesc.sym
|
|
endif
|