summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 65e6985)
raw | patch | inline | side by side (parent: 65e6985)
author | Raghu Gandham <raghu.gandham@imgtec.com> | |
Fri, 19 Dec 2014 03:12:19 +0000 (19:12 -0800) | ||
committer | Raghu Gandham <raghu.gandham@imgtec.com> | |
Fri, 19 Dec 2014 19:13:11 +0000 (11:13 -0800) |
Position Independent Executables cannot communicate with GDB using DT_MIPS_RLD_TAG.
Hence a new tag DT_MIPS_RLD_MAP2 got introduced to fix the issue.
Change-Id: I77ce3faf1ef2e121003b804ecd291abb25cfbb56
Signed-off-by: Nikola Veljkovic<Nikola.Veljkovic@imgtec.com>
Hence a new tag DT_MIPS_RLD_MAP2 got introduced to fix the issue.
Change-Id: I77ce3faf1ef2e121003b804ecd291abb25cfbb56
Signed-off-by: Nikola Veljkovic<Nikola.Veljkovic@imgtec.com>
libc/arch-mips/include/machine/elf_machdep.h | patch | blob | history | |
linker/linker.cpp | patch | blob | history |
diff --git a/libc/arch-mips/include/machine/elf_machdep.h b/libc/arch-mips/include/machine/elf_machdep.h
index d27d43183560587f8bf1637e91310ee54bafd0ae..0aacedfe8c52901784ee5ebb274662251e7dcfcf 100644 (file)
#define DT_MIPS_GOTSYM 0x70000013 /* first dynamic sym in got */
#define DT_MIPS_HIPAGENO 0x70000014
#define DT_MIPS_RLD_MAP 0x70000016 /* address of loader map */
+#define DT_MIPS_RLD_MAP2 0x70000035 /* offset of loader map, used for PIE */
/*
* ELF Flags
diff --git a/linker/linker.cpp b/linker/linker.cpp
index 34099316fe163eda504e9cd52cb7581012bcdb6c..babefeb3c1fb259fd27da4abec33f913e96b29ea 100644 (file)
--- a/linker/linker.cpp
+++ b/linker/linker.cpp
*dp = &_r_debug;
}
break;
+ case DT_MIPS_RLD_MAP2:
+ // Set the DT_MIPS_RLD_MAP2 entry to the address of _r_debug for GDB.
+ {
+ r_debug** dp = reinterpret_cast<r_debug**>(reinterpret_cast<ElfW(Addr)>(d) + d->d_un.d_val);
+ *dp = &_r_debug;
+ }
+ break;
case DT_MIPS_RLD_VERSION:
case DT_MIPS_FLAGS: