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
diff --git a/linker/linker.cpp b/linker/linker.cpp
index b2d813f..0e2d9dd 100644
--- a/linker/linker.cpp
+++ b/linker/linker.cpp
@@ -1860,6 +1860,17 @@
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 */