From patchwork Sat May 23 13:14:08 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "H.J. Lu" X-Patchwork-Id: 6901 Received: (qmail 104825 invoked by alias); 23 May 2015 13:14:22 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 104815 invoked by uid 89); 23 May 2015 13:14:21 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-0.5 required=5.0 tests=AWL, BAYES_00, FREEMAIL_FROM, RCVD_IN_DNSWL_LOW, SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-pd0-f172.google.com X-Received: by 10.66.118.166 with SMTP id kn6mr23941670pab.93.1432386849915; Sat, 23 May 2015 06:14:09 -0700 (PDT) Date: Sat, 23 May 2015 06:14:08 -0700 From: "H.J. Lu" To: GNU C Library Subject: [PATCH] [BZ #18422] elf/tst-audit tests fail without PLT entries Message-ID: <20150523131408.GA18203@gmail.com> MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.5.23 (2014-03-12) PLT entries aren't required when -z now used. Linker on master with: commit 25070364b0ce33eed46aa5d78ebebbec6accec7e Author: H.J. Lu Date: Sat May 16 07:00:21 2015 -0700 Don't generate PLT relocations for now binding There is no need for PLT relocations with -z now. We can use GOT relocations, which take less space, instead and replace 16-byte .plt entres with 8-byte .plt.got entries. bfd/ * elf32-i386.c (elf_i386_check_relocs): Create .plt.got section for now binding. (elf_i386_allocate_dynrelocs): Use .plt.got section for now binding. * elf64-x86-64.c (elf_x86_64_check_relocs): Create .plt.got section for now binding. (elf_x86_64_allocate_dynrelocs): Use .plt.got section for now binding. won't generate PLT entries with -z now. elf/tst-audit2.c has /* This calloc definition will be called by the dynamic linker itself. We test that it has initialized our TLS block by the time it does so. */ void * calloc (size_t n, size_t m) { if (magic[0] != MAGIC1 || magic[1] != MAGIC2) { printf ("{%x, %x} != {%x, %x}\n", magic[0], magic[1], MAGIC1, MAGIC2); abort (); } magic[0] = MAGIC2; magic[1] = MAGIC1; Since ld.so is built with -z now, there are no PLT relocations and this calloc won't be used: Relocation section '.rela.dyn' at offset 0x66c contains 16 entries: Offset Info Type Sym.Value Sym. Name + Addend 00222e88 00000008 R_X86_64_RELATIVE 10970 00222e8c 00000008 R_X86_64_RELATIVE f8f0 00222e90 00000008 R_X86_64_RELATIVE f6c0 00222e94 00000008 R_X86_64_RELATIVE 11bd0 00222e98 00000008 R_X86_64_RELATIVE a1b0 00222e9c 00000008 R_X86_64_RELATIVE 130c0 00222ea0 00000008 R_X86_64_RELATIVE 13c50 00222ea4 00000008 R_X86_64_RELATIVE 15fc0 00222ea8 00000008 R_X86_64_RELATIVE 12cd0 00222eac 00000008 R_X86_64_RELATIVE 17f90 00222fbc 00000a06 R_X86_64_GLOB_DAT 00018230 __libc_memalign@@GLIBC_2.16 + 0 00222fc4 00001506 R_X86_64_GLOB_DAT 00018300 malloc@@GLIBC_2.16 + 0 00222fcc 00000d06 R_X86_64_GLOB_DAT 00018310 calloc@@GLIBC_2.16 + 0 00222fd4 00000506 R_X86_64_GLOB_DAT 000184a0 realloc@@GLIBC_2.16 + 0 00222fdc 00000706 R_X86_64_GLOB_DAT 002239a0 _r_debug@@GLIBC_2.16 + 0 00222fe4 00000406 R_X86_64_GLOB_DAT 00018340 free@@GLIBC_2.16 + 0 Assuming we do want to keep PLT relocations in ld.so so that malloc functions in ld.so can be overridden, ld.so should be built with -z now. There is no reason to build ld.so with -z now since ld.so is the one doing BIND_NOW. The only thing we get with -z now on ld.so is DT tag: 0x0000000000000018 (BIND_NOW) 0x000000006ffffffb (FLAGS_1) Flags: NOW This patch removes -Wl,-z,now from ld.so build. OK for master? H.J. [BZ #18422] * elf/Makefile (z-now-yes): Removed. ($(objpfx)ld.so): Remove $(z-now-$(bind-now)). --- elf/Makefile | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/elf/Makefile b/elf/Makefile index 34450ea..324b4a2 100644 --- a/elf/Makefile +++ b/elf/Makefile @@ -349,13 +349,11 @@ $(objpfx)librtld.os: $(objpfx)dl-allobjs.os $(objpfx)rtld-libc.a generated += librtld.map librtld.mk rtld-libc.a librtld.os.map -z-now-yes = -Wl,-z,now - $(objpfx)ld.so: $(objpfx)librtld.os $(ld-map) # Link into a temporary file so that we don't touch $@ at all # if the sanity check below fails. $(LINK.o) -nostdlib -nostartfiles -shared -o $@.new \ - $(LDFLAGS-rtld) -Wl,-z,defs $(z-now-$(bind-now)) \ + $(LDFLAGS-rtld) -Wl,-z,defs \ $(filter-out $(map-file),$^) $(load-map-file) \ -Wl,-soname=$(rtld-installed-name) \ -Wl,-defsym=_begin=0