From 06f0e74a2b957db93fed3fdd49fe939ab2fe1595 Mon Sep 17 00:00:00 2001 From: Ben Cheng Date: Fri, 10 Aug 2012 16:07:02 -0700 Subject: [PATCH] Set the dynamic field in the link map for the linker itself. Otherwise gdb will print a spurious warning each time gdb is used: warning: .dynamic section for "/system/bin/linker" is not at the expected address (wrong library or version mismatch?) BUG:6946614 Change-Id: Ib21b8db0615751189c1601140deb43bc089289b6 --- linker/linker.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/linker/linker.cpp b/linker/linker.cpp index b2d813fb0..0e2d9dd68 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -1860,6 +1860,17 @@ sanitize: strlcpy((char*) linker_soinfo.name, "/system/bin/linker", sizeof linker_soinfo.name); linker_soinfo.flags = 0; linker_soinfo.base = linker_base; + /* + * Set the dynamic field in the link map otherwise gdb will complain with + * the following: + * warning: .dynamic section for "/system/bin/linker" is not at the + * expected address (wrong library or version mismatch?) + */ + Elf32_Ehdr *elf_hdr = (Elf32_Ehdr *) linker_base; + Elf32_Phdr *phdr = + (Elf32_Phdr *)((unsigned char *) linker_base + elf_hdr->e_phoff); + linker_soinfo.dynamic = + phdr_table_get_dynamic_section(phdr, elf_hdr->e_phnum, linker_base); insert_soinfo_into_debug_map(&linker_soinfo); /* extract information passed from the kernel */