OSDN Git Service

Add support for DT_MIPS_RLD_MAP2 tag.
authorRaghu Gandham <raghu.gandham@imgtec.com>
Fri, 19 Dec 2014 03:12:19 +0000 (19:12 -0800)
committerRaghu 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>
libc/arch-mips/include/machine/elf_machdep.h
linker/linker.cpp

index d27d431..0aacedf 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
index 3409931..babefeb 100644 (file)
@@ -2402,6 +2402,13 @@ bool soinfo::prelink_image() {
           *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: