Module Name: src
Committed By: joerg
Date: Sun Dec 5 00:56:07 UTC 2010
Modified Files:
src/libexec/ld.elf_so: Makefile rtld.h
src/libexec/ld.elf_so/arch/i386: rtld_start.S
src/libexec/ld.elf_so/arch/x86_64: rtld_start.S
Log Message:
Build ld.elf_so with -fvisibility=hidden. Exploit this for i386/x86_64
to simplify the assembler code.
To generate a diff of this commit:
cvs rdiff -u -r1.98 -r1.99 src/libexec/ld.elf_so/Makefile
cvs rdiff -u -r1.95 -r1.96 src/libexec/ld.elf_so/rtld.h
cvs rdiff -u -r1.10 -r1.11 src/libexec/ld.elf_so/arch/i386/rtld_start.S
cvs rdiff -u -r1.7 -r1.8 src/libexec/ld.elf_so/arch/x86_64/rtld_start.S
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/libexec/ld.elf_so/Makefile
diff -u src/libexec/ld.elf_so/Makefile:1.98 src/libexec/ld.elf_so/Makefile:1.99
--- src/libexec/ld.elf_so/Makefile:1.98 Fri Oct 29 15:08:17 2010
+++ src/libexec/ld.elf_so/Makefile Sun Dec 5 00:56:06 2010
@@ -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 @@
LDFLAGS+= -shared -symbolic -nostartfiles
LDFLAGS+= -Wl,-static
+CFLAGS+= -fvisibility=hidden
# Adds SRCS, CPPFLAGS, LDFLAGS, etc. Must go first so MD startup source
# is first.
Index: src/libexec/ld.elf_so/rtld.h
diff -u src/libexec/ld.elf_so/rtld.h:1.95 src/libexec/ld.elf_so/rtld.h:1.96
--- src/libexec/ld.elf_so/rtld.h:1.95 Sat Oct 16 10:27:07 2010
+++ src/libexec/ld.elf_so/rtld.h Sun Dec 5 00:56:06 2010
@@ -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 @@
/* 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 */
Index: src/libexec/ld.elf_so/arch/i386/rtld_start.S
diff -u src/libexec/ld.elf_so/arch/i386/rtld_start.S:1.10 src/libexec/ld.elf_so/arch/i386/rtld_start.S:1.11
--- src/libexec/ld.elf_so/arch/i386/rtld_start.S:1.10 Mon Apr 28 20:23:03 2008
+++ src/libexec/ld.elf_so/arch/i386/rtld_start.S Sun Dec 5 00:56:07 2010
@@ -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_s...@plt
+ call _rtld_relocate_nonplt_self
leal 12(%esp),%eax # &cleanup
pushl %ebx # relocbase
pushl %eax # sp
- call _r...@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 @@
pushl 20(%esp) # Copy of reloff
pushl 20(%esp) # Copy of obj
- call _rtld_b...@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
Index: src/libexec/ld.elf_so/arch/x86_64/rtld_start.S
diff -u src/libexec/ld.elf_so/arch/x86_64/rtld_start.S:1.7 src/libexec/ld.elf_so/arch/x86_64/rtld_start.S:1.8
--- src/libexec/ld.elf_so/arch/x86_64/rtld_start.S:1.7 Fri Dec 3 22:48:25 2010
+++ src/libexec/ld.elf_so/arch/x86_64/rtld_start.S Sun Dec 5 00:56:07 2010
@@ -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_s...@plt
+ call _rtld_relocate_nonplt_self
movq %r12,%rdi
movq %rbx,%rsi
- call _r...@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 @@
movq 80(%rsp),%rdi
movq 88(%rsp),%rsi
- call _rtld_b...@plt # call the binder
+ call _rtld_bind # call the binder
movq %rax,88(%rsp) # store function in obj
popq %r11