aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2018-06-08 10:28:38 -0700
committerH.J. Lu <hjl.tools@gmail.com>2018-06-08 10:28:52 -0700
commit67c0579669ba1fc265d770252fab31babf887329 (patch)
tree34059924ead164f11bc21fd73ccab758153bd9f7
parent1c09524e4db3efd797ebcfcd8241bdb78f0b06f0 (diff)
downloadglibc-67c0579669ba1fc265d770252fab31babf887329.zip
glibc-67c0579669ba1fc265d770252fab31babf887329.tar.gz
glibc-67c0579669ba1fc265d770252fab31babf887329.tar.bz2
Mark _init and _fini as hidden [BZ #23145]
_init and _fini are special functions provided by glibc for linker to define DT_INIT and DT_FINI in executable and shared library. They should never be put in dynamic symbol table. This patch marks them as hidden to remove them from dynamic symbol table. Tested with build-many-glibcs.py. [BZ #23145] * elf/Makefile (tests-special): Add $(objpfx)check-initfini.out. ($(all-built-dso:=.dynsym): New target. (common-generated): Add $(all-built-dso:$(common-objpfx)%=%.dynsym). ($(objpfx)check-initfini.out): New target. (generated): Add check-initfini.out. * scripts/check-initfini.awk: New file. * sysdeps/aarch64/crti.S (_init): Mark as hidden. (_fini): Likewise. * sysdeps/alpha/crti.S (_init): Mark as hidden. (_fini): Likewise. * sysdeps/arm/crti.S (_init): Mark as hidden. (_fini): Likewise. * sysdeps/hppa/crti.S (_init): Mark as hidden. (_fini): Likewise. * sysdeps/i386/crti.S (_init): Mark as hidden. (_fini): Likewise. * sysdeps/ia64/crti.S (_init): Mark as hidden. (_fini): Likewise. * sysdeps/m68k/crti.S (_init): Mark as hidden. (_fini): Likewise. * sysdeps/microblaze/crti.S (_init): Mark as hidden. (_fini): Likewise. * sysdeps/mips/mips32/crti.S (_init): Mark as hidden. (_fini): Likewise. * sysdeps/mips/mips64/n32/crti.S (_init): Mark as hidden. (_fini): Likewise. * sysdeps/mips/mips64/n64/crti.S (_init): Mark as hidden. (_fini): Likewise. * sysdeps/nios2/crti.S (_init): Mark as hidden. (_fini): Likewise. * sysdeps/powerpc/powerpc32/crti.S (_init): Mark as hidden. (_fini): Likewise. * sysdeps/powerpc/powerpc64/crti.S (_init): Mark as hidden. (_fini): Likewise. * sysdeps/s390/s390-32/crti.S (_init): Mark as hidden. (_fini): Likewise. * sysdeps/s390/s390-64/crti.S (_init): Mark as hidden. (_fini): Likewise. * sysdeps/sh/crti.S (_init): Mark as hidden. (_fini): Likewise. * sysdeps/sparc/crti.S (_init): Mark as hidden. (_fini): Likewise. * sysdeps/x86_64/crti.S (_init): Mark as hidden. (_fini): Likewise.
-rw-r--r--ChangeLog48
-rw-r--r--elf/Makefile15
-rw-r--r--scripts/check-initfini.awk63
-rw-r--r--sysdeps/aarch64/crti.S2
-rw-r--r--sysdeps/alpha/crti.S2
-rw-r--r--sysdeps/arm/crti.S2
-rw-r--r--sysdeps/hppa/crti.S2
-rw-r--r--sysdeps/i386/crti.S2
-rw-r--r--sysdeps/ia64/crti.S2
-rw-r--r--sysdeps/m68k/crti.S2
-rw-r--r--sysdeps/microblaze/crti.S2
-rw-r--r--sysdeps/mips/mips32/crti.S2
-rw-r--r--sysdeps/mips/mips64/n32/crti.S2
-rw-r--r--sysdeps/mips/mips64/n64/crti.S2
-rw-r--r--sysdeps/nios2/crti.S2
-rw-r--r--sysdeps/powerpc/powerpc32/crti.S2
-rw-r--r--sysdeps/powerpc/powerpc64/crti.S2
-rw-r--r--sysdeps/s390/s390-32/crti.S2
-rw-r--r--sysdeps/s390/s390-64/crti.S2
-rw-r--r--sysdeps/sh/crti.S2
-rw-r--r--sysdeps/sparc/crti.S2
-rw-r--r--sysdeps/x86_64/crti.S2
22 files changed, 163 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index b1d694a..73b2595 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,51 @@
+2018-06-08 H.J. Lu <hongjiu.lu@intel.com>
+
+ [BZ #23145]
+ * elf/Makefile (tests-special): Add $(objpfx)check-initfini.out.
+ ($(all-built-dso:=.dynsym): New target.
+ (common-generated): Add $(all-built-dso:$(common-objpfx)%=%.dynsym).
+ ($(objpfx)check-initfini.out): New target.
+ (generated): Add check-initfini.out.
+ * scripts/check-initfini.awk: New file.
+ * sysdeps/aarch64/crti.S (_init): Mark as hidden.
+ (_fini): Likewise.
+ * sysdeps/alpha/crti.S (_init): Mark as hidden.
+ (_fini): Likewise.
+ * sysdeps/arm/crti.S (_init): Mark as hidden.
+ (_fini): Likewise.
+ * sysdeps/hppa/crti.S (_init): Mark as hidden.
+ (_fini): Likewise.
+ * sysdeps/i386/crti.S (_init): Mark as hidden.
+ (_fini): Likewise.
+ * sysdeps/ia64/crti.S (_init): Mark as hidden.
+ (_fini): Likewise.
+ * sysdeps/m68k/crti.S (_init): Mark as hidden.
+ (_fini): Likewise.
+ * sysdeps/microblaze/crti.S (_init): Mark as hidden.
+ (_fini): Likewise.
+ * sysdeps/mips/mips32/crti.S (_init): Mark as hidden.
+ (_fini): Likewise.
+ * sysdeps/mips/mips64/n32/crti.S (_init): Mark as hidden.
+ (_fini): Likewise.
+ * sysdeps/mips/mips64/n64/crti.S (_init): Mark as hidden.
+ (_fini): Likewise.
+ * sysdeps/nios2/crti.S (_init): Mark as hidden.
+ (_fini): Likewise.
+ * sysdeps/powerpc/powerpc32/crti.S (_init): Mark as hidden.
+ (_fini): Likewise.
+ * sysdeps/powerpc/powerpc64/crti.S (_init): Mark as hidden.
+ (_fini): Likewise.
+ * sysdeps/s390/s390-32/crti.S (_init): Mark as hidden.
+ (_fini): Likewise.
+ * sysdeps/s390/s390-64/crti.S (_init): Mark as hidden.
+ (_fini): Likewise.
+ * sysdeps/sh/crti.S (_init): Mark as hidden.
+ (_fini): Likewise.
+ * sysdeps/sparc/crti.S (_init): Mark as hidden.
+ (_fini): Likewise.
+ * sysdeps/x86_64/crti.S (_init): Mark as hidden.
+ (_fini): Likewise.
+
2018-06-06 Tulio Magno Quites Machado Filho <tuliom@linux.ibm.com>
* sysdeps/powerpc/powerpc64/le/fpu/e_sqrtf128.c
diff --git a/elf/Makefile b/elf/Makefile
index 2dcd2b8..f221422 100644
--- a/elf/Makefile
+++ b/elf/Makefile
@@ -348,7 +348,7 @@ ifeq ($(run-built-tests),yes)
tests-special += $(objpfx)tst-pathopt.out $(objpfx)tst-rtld-load-self.out
endif
tests-special += $(objpfx)check-textrel.out $(objpfx)check-execstack.out \
- $(objpfx)check-localplt.out
+ $(objpfx)check-localplt.out $(objpfx)check-initfini.out
endif
ifeq ($(run-built-tests),yes)
@@ -1136,6 +1136,19 @@ $(objpfx)check-localplt.out: $(..)scripts/check-localplt.awk \
$(evaluate-test)
endif
+$(all-built-dso:=.dynsym): %.dynsym: %
+ @rm -f $@T
+ LC_ALL=C $(READELF) -W --dyn-syms $< > $@T
+ test -s $@T
+ mv -f $@T $@
+common-generated += $(all-built-dso:$(common-objpfx)%=%.dynsym)
+
+$(objpfx)check-initfini.out: $(..)scripts/check-initfini.awk \
+ $(all-built-dso:=.dynsym)
+ LC_ALL=C $(AWK) -f $^ > $@; \
+ $(evaluate-test)
+generated += check-initfini.out
+
$(objpfx)tst-dlopenrpathmod.so: $(libdl)
$(objpfx)tst-dlopenrpath: $(objpfx)tst-dlopenrpathmod.so $(libdl)
CFLAGS-tst-dlopenrpath.c += -DPFX=\"$(objpfx)\"
diff --git a/scripts/check-initfini.awk b/scripts/check-initfini.awk
new file mode 100644
index 0000000..19514a9
--- /dev/null
+++ b/scripts/check-initfini.awk
@@ -0,0 +1,63 @@
+# Copyright (C) 2018 Free Software Foundation, Inc.
+# This file is part of the GNU C Library.
+
+# The GNU C Library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+
+# The GNU C Library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+
+# You should have received a copy of the GNU Lesser General Public
+# License along with the GNU C Library; if not, see
+# <http://www.gnu.org/licenses/>.
+
+# This awk script expects to get command-line files that are each
+# the output of 'readelf -W --dyn-syms' on a single shared object.
+# It exits successfully (0) if none contained _init nor _fini in dynamic
+# symbol table.
+# It fails (1) if any did contain _init or _fini in dynamic symbol table.
+# It fails (2) if the input did not take the expected form.
+
+BEGIN { result = _init = _fini = sanity = 0 }
+
+function check_one(name) {
+ if (!sanity) {
+ print name ": *** input did not look like readelf -d output";
+ result = 2;
+ } else {
+ ok = 1;
+ if (_init) {
+ print name ": *** _init is in dynamic symbol table";
+ result = result ? result : 1;
+ ok = 0;
+ }
+ if (_fini) {
+ print name ": *** _fini is in dynamic symbol table";
+ result = result ? result : 1;
+ ok = 0;
+ }
+ if (ok)
+ print name ": OK";
+ }
+
+ _init = _fini = sanity = 0
+}
+
+FILENAME != lastfile {
+ if (lastfile)
+ check_one(lastfile);
+ lastfile = FILENAME;
+}
+
+$1 == "Symbol" && $2 == "table" && $3 == "'.dynsym'" { sanity = 1 }
+$8 == "_init" { _init = 1 }
+$8 == "_fini" { _fini = 1 }
+
+END {
+ check_one(lastfile);
+ exit(result);
+}
diff --git a/sysdeps/aarch64/crti.S b/sysdeps/aarch64/crti.S
index 366b837..2b21375 100644
--- a/sysdeps/aarch64/crti.S
+++ b/sysdeps/aarch64/crti.S
@@ -72,6 +72,7 @@ call_weak_fn:
.section .init,"ax",%progbits
.align 2
.global _init
+ .hidden _init
.type _init, %function
_init:
stp x29, x30, [sp, -16]!
@@ -85,6 +86,7 @@ _init:
.section .fini,"ax",%progbits
.align 2
.global _fini
+ .hidden _fini
.type _fini, %function
_fini:
stp x29, x30, [sp, -16]!
diff --git a/sysdeps/alpha/crti.S b/sysdeps/alpha/crti.S
index b00ae20..bcce1e9 100644
--- a/sysdeps/alpha/crti.S
+++ b/sysdeps/alpha/crti.S
@@ -67,6 +67,7 @@
.section .init, "ax", @progbits
.globl _init
+ .hidden _init
.type _init, @function
.usepv _init, std
_init:
@@ -89,6 +90,7 @@ _init:
.section .fini, "ax", @progbits
.globl _fini
+ .hidden _fini
.type _fini,@function
.usepv _fini,std
_fini:
diff --git a/sysdeps/arm/crti.S b/sysdeps/arm/crti.S
index e645d46..a1424d0 100644
--- a/sysdeps/arm/crti.S
+++ b/sysdeps/arm/crti.S
@@ -78,6 +78,7 @@ call_weak_fn:
.section .init,"ax",%progbits
.p2align 2
.globl _init
+ .hidden _init
.type _init, %function
_init:
push {r3, lr}
@@ -90,6 +91,7 @@ _init:
.section .fini,"ax",%progbits
.p2align 2
.globl _fini
+ .hidden _fini
.type _fini, %function
_fini:
push {r3, lr}
diff --git a/sysdeps/hppa/crti.S b/sysdeps/hppa/crti.S
index 4566d9f..28550e5 100644
--- a/sysdeps/hppa/crti.S
+++ b/sysdeps/hppa/crti.S
@@ -142,6 +142,7 @@ gmon_initializer:
.section .init, "ax", %progbits
.align 4
.globl _init
+ .hidden _init
.type _init,@function
_init:
stw %rp,-20(%sp)
@@ -152,6 +153,7 @@ _init:
.section .fini,"ax",%progbits
.align 4
.globl _fini
+ .hidden _fini
.type _fini,@function
_fini:
stw %rp,-20(%sp)
diff --git a/sysdeps/i386/crti.S b/sysdeps/i386/crti.S
index 065460b..ffbc92c 100644
--- a/sysdeps/i386/crti.S
+++ b/sysdeps/i386/crti.S
@@ -58,6 +58,7 @@
.section .init,"ax",@progbits
.p2align 2
.globl _init
+ .hidden _init
.type _init, @function
_init:
pushl %ebx
@@ -77,6 +78,7 @@ _init:
.section .fini,"ax",@progbits
.p2align 2
.globl _fini
+ .hidden _fini
.type _fini, @function
_fini:
pushl %ebx
diff --git a/sysdeps/ia64/crti.S b/sysdeps/ia64/crti.S
index 867683b..c46e297 100644
--- a/sysdeps/ia64/crti.S
+++ b/sysdeps/ia64/crti.S
@@ -129,6 +129,7 @@ gmon_initializer:
.section .init,"ax",@progbits
.global _init#
+ .hidden _init#
.proc _init#
_init:
.prologue
@@ -145,6 +146,7 @@ _init:
.section .fini,"ax",@progbits
.global _fini#
+ .hidden _fini#
.proc _fini#
_fini:
.prologue
diff --git a/sysdeps/m68k/crti.S b/sysdeps/m68k/crti.S
index b810763..e5f2157 100644
--- a/sysdeps/m68k/crti.S
+++ b/sysdeps/m68k/crti.S
@@ -58,6 +58,7 @@
.section .init,"ax",@progbits
.align 2
.globl _init
+ .hidden _init
.type _init, @function
_init:
link.w %fp, #0
@@ -75,6 +76,7 @@ _init:
.section .fini,"ax",@progbits
.align 2
.globl _fini
+ .hidden _fini
.type _fini, @function
_fini:
link.w %fp, #0
diff --git a/sysdeps/microblaze/crti.S b/sysdeps/microblaze/crti.S
index c407487..09c8cd7 100644
--- a/sysdeps/microblaze/crti.S
+++ b/sysdeps/microblaze/crti.S
@@ -58,6 +58,7 @@
.section .init,"ax",@progbits
.align 2
.globl _init
+ .hidden _init
.type _init, @function
_init:
addik r1,r1,-32
@@ -79,6 +80,7 @@ $Lno_weak_fn:
.section .fini,"ax",@progbits
.align 2
.globl _fini
+ .hidden _fini
.type _fini, @function
_fini:
addik r1,r1,-32
diff --git a/sysdeps/mips/mips32/crti.S b/sysdeps/mips/mips32/crti.S
index 139f8bb..b3e1c4e 100644
--- a/sysdeps/mips/mips32/crti.S
+++ b/sysdeps/mips/mips32/crti.S
@@ -65,6 +65,7 @@
.section .init,"ax",@progbits
.p2align 2
.globl _init
+ .hidden _init
.type _init, @function
_init:
.set noreorder
@@ -90,6 +91,7 @@ _init:
.section .fini,"ax",@progbits
.p2align 2
.globl _fini
+ .hidden _fini
.type _fini, @function
_fini:
.set noreorder
diff --git a/sysdeps/mips/mips64/n32/crti.S b/sysdeps/mips/mips64/n32/crti.S
index 23ad90b..59a09d5 100644
--- a/sysdeps/mips/mips64/n32/crti.S
+++ b/sysdeps/mips/mips64/n32/crti.S
@@ -65,6 +65,7 @@
.section .init,"ax",@progbits
.p2align 2
.globl _init
+ .hidden _init
.type _init, @function
_init:
addiu $sp,$sp,-16
@@ -90,6 +91,7 @@ _init:
.section .fini,"ax",@progbits
.p2align 2
.globl _fini
+ .hidden _fini
.type _fini, @function
_fini:
addiu $sp,$sp,-16
diff --git a/sysdeps/mips/mips64/n64/crti.S b/sysdeps/mips/mips64/n64/crti.S
index 24b47b5..fd468f0 100644
--- a/sysdeps/mips/mips64/n64/crti.S
+++ b/sysdeps/mips/mips64/n64/crti.S
@@ -65,6 +65,7 @@
.section .init,"ax",@progbits
.p2align 2
.globl _init
+ .hidden _init
.type _init, @function
_init:
daddiu $sp,$sp,-16
@@ -90,6 +91,7 @@ _init:
.section .fini,"ax",@progbits
.p2align 2
.globl _fini
+ .hidden _fini
.type _fini, @function
_fini:
daddiu $sp,$sp,-16
diff --git a/sysdeps/nios2/crti.S b/sysdeps/nios2/crti.S
index a3b42a4..46ab896 100644
--- a/sysdeps/nios2/crti.S
+++ b/sysdeps/nios2/crti.S
@@ -57,6 +57,7 @@
.section .init,"ax",@progbits
.align 2
.global _init
+ .hidden _init
.type _init, @function
_init:
addi sp, sp, -8
@@ -84,6 +85,7 @@ _init:
.section .fini,"ax",@progbits
.align 2
.global _fini
+ .hidden _fini
.type _fini, @function
_fini:
addi sp, sp, -8
diff --git a/sysdeps/powerpc/powerpc32/crti.S b/sysdeps/powerpc/powerpc32/crti.S
index a30e33a..e4ee8dd 100644
--- a/sysdeps/powerpc/powerpc32/crti.S
+++ b/sysdeps/powerpc/powerpc32/crti.S
@@ -58,6 +58,7 @@
.section .init,"ax",@progbits
.align 2
.globl _init
+ .hidden _init
.type _init, @function
_init:
stwu r1, -16(r1)
@@ -80,6 +81,7 @@ _init:
.section .fini,"ax",@progbits
.align 2
.globl _fini
+ .hidden _fini
.type _fini, @function
_fini:
stwu r1, -16(r1)
diff --git a/sysdeps/powerpc/powerpc64/crti.S b/sysdeps/powerpc/powerpc64/crti.S
index 61b1409..2242deb 100644
--- a/sysdeps/powerpc/powerpc64/crti.S
+++ b/sysdeps/powerpc/powerpc64/crti.S
@@ -62,6 +62,7 @@
#endif
.section ".init", "ax", @progbits
ENTRY_2(_init)
+ .hidden _init
.align ALIGNARG (2)
BODY_LABEL (_init):
LOCALENTRY(_init)
@@ -80,6 +81,7 @@ BODY_LABEL (_init):
.section ".fini", "ax", @progbits
ENTRY_2(_fini)
+ .hidden _fini
.align ALIGNARG (2)
BODY_LABEL (_fini):
LOCALENTRY(_fini)
diff --git a/sysdeps/s390/s390-32/crti.S b/sysdeps/s390/s390-32/crti.S
index cb0c967..44b1a70 100644
--- a/sysdeps/s390/s390-32/crti.S
+++ b/sysdeps/s390/s390-32/crti.S
@@ -57,6 +57,7 @@
.section .init,"ax",@progbits
.globl _init
+ .hidden _init
.type _init,@function
.align 4
_init:
@@ -88,6 +89,7 @@ _init:
.section .fini,"ax",@progbits
.globl _fini
+ .hidden _fini
.type _fini,@function
.align 4
_fini:
diff --git a/sysdeps/s390/s390-64/crti.S b/sysdeps/s390/s390-64/crti.S
index 613bac2..f676eb52 100644
--- a/sysdeps/s390/s390-64/crti.S
+++ b/sysdeps/s390/s390-64/crti.S
@@ -59,6 +59,7 @@
.section .init,"ax",@progbits
.align 4
.globl _init
+ .hidden _init
.type _init,@function
_init:
stmg %r6,%r15,48(%r15)
@@ -81,6 +82,7 @@ _init:
.section .fini,"ax",@progbits
.align 4
.globl _fini
+ .hidden _fini
.type _fini,@function
_fini:
stmg %r6,%r15,48(%r15)
diff --git a/sysdeps/sh/crti.S b/sysdeps/sh/crti.S
index 48f04a4..c070740 100644
--- a/sysdeps/sh/crti.S
+++ b/sysdeps/sh/crti.S
@@ -58,6 +58,7 @@
.section .init,"ax",@progbits
.align 5
.global _init
+ .hidden _init
.type _init, @function
_init:
mov.l r12,@-r15
@@ -103,6 +104,7 @@ _init:
.section .fini,"ax",@progbits
.align 5
.global _fini
+ .hidden _fini
.type _fini, @function
_fini:
mov.l r12,@-r15
diff --git a/sysdeps/sparc/crti.S b/sysdeps/sparc/crti.S
index 69aabe7..a7d1a08 100644
--- a/sysdeps/sparc/crti.S
+++ b/sysdeps/sparc/crti.S
@@ -66,6 +66,7 @@
.section .init,"ax",@progbits
.p2align 2
.globl _init
+ .hidden _init
.type _init, @function
_init:
save %sp, -STACKFRAME_SIZE, %sp
@@ -88,6 +89,7 @@ _init:
.section .fini,"ax",@progbits
.p2align 2
.globl _fini
+ .hidden _fini
.type _fini, @function
_fini:
save %sp, -STACKFRAME_SIZE, %sp
diff --git a/sysdeps/x86_64/crti.S b/sysdeps/x86_64/crti.S
index 619effa..f26915e 100644
--- a/sysdeps/x86_64/crti.S
+++ b/sysdeps/x86_64/crti.S
@@ -58,6 +58,7 @@
.section .init,"ax",@progbits
.p2align 2
.globl _init
+ .hidden _init
.type _init, @function
_init:
/* Maintain 16-byte stack alignment for called functions. */
@@ -75,6 +76,7 @@ _init:
.section .fini,"ax",@progbits
.p2align 2
.globl _fini
+ .hidden _fini
.type _fini, @function
_fini:
subq $8, %rsp