diff options
| author | joerg <joerg@NetBSD.org> | 2010-12-05 00:56:06 +0000 |
|---|---|---|
| committer | joerg <joerg@NetBSD.org> | 2010-12-05 00:56:06 +0000 |
| commit | 67e01e0a99e6c20edb3cebbbc5d2462b41c95f57 (patch) | |
| tree | 108cb49f6d5520fac793776d3b467c17a2dd5294 /libexec | |
| parent | d639454cacb02eab6bdedea845b75b4d71d517ee (diff) | |
Build ld.elf_so with -fvisibility=hidden. Exploit this for i386/x86_64
to simplify the assembler code.
Diffstat (limited to 'libexec')
| -rw-r--r-- | libexec/ld.elf_so/Makefile | 3 | ||||
| -rw-r--r-- | libexec/ld.elf_so/arch/i386/rtld_start.S | 10 | ||||
| -rw-r--r-- | libexec/ld.elf_so/arch/x86_64/rtld_start.S | 10 | ||||
| -rw-r--r-- | libexec/ld.elf_so/rtld.h | 16 |
4 files changed, 22 insertions, 17 deletions
diff --git a/libexec/ld.elf_so/Makefile b/libexec/ld.elf_so/Makefile index 9ca2211814e..2b82fd3988e 100644 --- a/libexec/ld.elf_so/Makefile +++ b/libexec/ld.elf_so/Makefile @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.98 2010/10/29 15:08:17 christos Exp $ +# $NetBSD: Makefile,v 1.99 2010/12/05 00:56:06 joerg Exp $ # # NOTE: when changing ld.so, ensure that ldd still compiles. # @@ -40,6 +40,7 @@ M= ${.CURDIR}/arch/${ARCHSUBDIR} LDFLAGS+= -shared -symbolic -nostartfiles LDFLAGS+= -Wl,-static +CFLAGS+= -fvisibility=hidden # Adds SRCS, CPPFLAGS, LDFLAGS, etc. Must go first so MD startup source # is first. diff --git a/libexec/ld.elf_so/arch/i386/rtld_start.S b/libexec/ld.elf_so/arch/i386/rtld_start.S index 050a6e1148f..211649ff238 100644 --- a/libexec/ld.elf_so/arch/i386/rtld_start.S +++ b/libexec/ld.elf_so/arch/i386/rtld_start.S @@ -1,4 +1,4 @@ -/* $NetBSD: rtld_start.S,v 1.10 2008/04/28 20:23:03 martin Exp $ */ +/* $NetBSD: rtld_start.S,v 1.11 2010/12/05 00:56:07 joerg Exp $ */ /*- * Copyright (c) 1998, 2002 The NetBSD Foundation, Inc. @@ -34,6 +34,7 @@ .text .align 4 .globl .rtld_start + .hidden .rtld_start .type .rtld_start,@function .rtld_start: subl $8,%esp # make room of obj_main and exit proc @@ -48,12 +49,12 @@ pushl %ebx # relocbase pushl %ecx # &_DYNAMIC - call _rtld_relocate_nonplt_self@PLT + call _rtld_relocate_nonplt_self leal 12(%esp),%eax # &cleanup pushl %ebx # relocbase pushl %eax # sp - call _rtld@PLT # _rtld(sp, relocbase) + call _rtld # _rtld(sp, relocbase) addl $16,%esp # pop args @@ -64,6 +65,7 @@ .align 4 .globl _rtld_bind_start + .hidden _rtld_bind_start .type _rtld_bind_start,@function _rtld_bind_start: # (obj, reloff) pushf # save registers @@ -73,7 +75,7 @@ _rtld_bind_start: # (obj, reloff) pushl 20(%esp) # Copy of reloff pushl 20(%esp) # Copy of obj - call _rtld_bind@PLT # Call the binder + call _rtld_bind # Call the binder addl $8,%esp # pop binder args movl %eax,20(%esp) # Store function to be called in obj diff --git a/libexec/ld.elf_so/arch/x86_64/rtld_start.S b/libexec/ld.elf_so/arch/x86_64/rtld_start.S index 630053dd458..d154e9475d0 100644 --- a/libexec/ld.elf_so/arch/x86_64/rtld_start.S +++ b/libexec/ld.elf_so/arch/x86_64/rtld_start.S @@ -1,4 +1,4 @@ -/* $NetBSD: rtld_start.S,v 1.7 2010/12/03 22:48:25 joerg Exp $ */ +/* $NetBSD: rtld_start.S,v 1.8 2010/12/05 00:56:07 joerg Exp $ */ /* * Copyright (c) 2001 Wasabi Systems, Inc. @@ -40,6 +40,7 @@ .text .align 16 .globl .rtld_start + .hidden .rtld_start .type .rtld_start,@function .rtld_start: subq $16,%rsp # make room of obj_main and exit proc @@ -52,11 +53,11 @@ subq (%rax),%rbx # relocbase movq %rbx,%rsi - call _rtld_relocate_nonplt_self@PLT + call _rtld_relocate_nonplt_self movq %r12,%rdi movq %rbx,%rsi - call _rtld@PLT # _rtld(sp, relocbase) + call _rtld # _rtld(sp, relocbase) popq %rbx # %rbx = ps_strings popq %rdx # %rdx = cleanup @@ -65,6 +66,7 @@ .align 4 .globl _rtld_bind_start + .hidden _rtld_bind_start .type _rtld_bind_start,@function _rtld_bind_start: # (obj, reloff) # This function is called with a misaligned stack from the PLT @@ -84,7 +86,7 @@ _rtld_bind_start: # (obj, reloff) movq 80(%rsp),%rdi movq 88(%rsp),%rsi - call _rtld_bind@PLT # call the binder + call _rtld_bind # call the binder movq %rax,88(%rsp) # store function in obj popq %r11 diff --git a/libexec/ld.elf_so/rtld.h b/libexec/ld.elf_so/rtld.h index 915ee0bdcf3..cba3b1739d7 100644 --- a/libexec/ld.elf_so/rtld.h +++ b/libexec/ld.elf_so/rtld.h @@ -1,4 +1,4 @@ -/* $NetBSD: rtld.h,v 1.95 2010/10/16 10:27:07 skrll Exp $ */ +/* $NetBSD: rtld.h,v 1.96 2010/12/05 00:56:06 joerg Exp $ */ /* * Copyright 1996 John D. Polstra. @@ -254,13 +254,13 @@ extern Elf_Sym _rtld_sym_zero; /* rtld.c */ /* We export these symbols using _rtld_symbol_lookup and is_exported. */ -char *dlerror(void); -void *dlopen(const char *, int); -void *dlsym(void *, const char *); -int dlclose(void *); -int dladdr(const void *, Dl_info *); -int dlinfo(void *, int, void *); -int dl_iterate_phdr(int (*)(struct dl_phdr_info *, size_t, void *), +__dso_public char *dlerror(void); +__dso_public void *dlopen(const char *, int); +__dso_public void *dlsym(void *, const char *); +__dso_public int dlclose(void *); +__dso_public int dladdr(const void *, Dl_info *); +__dso_public int dlinfo(void *, int, void *); +__dso_public int dl_iterate_phdr(int (*)(struct dl_phdr_info *, size_t, void *), void *); /* These aren't exported */ |
