Adjust DT_MIPS_RLD_MAP2 value
DT_MIPS_RLD_MAP2 stores the difference between dynamic entry address and the address of the _r_debug (used by GDB) since the dynamic section and target address are on the different sides of the hole it needs to be adjusted accordingly Bug: http://b/20658994 Bug: http://b/18051137 Change-Id: I4c5e379e8a4c68f029467df6dc660f81a7013a09
This commit is contained in:
parent
f29640c2d8
commit
18c935ceab
@ -472,6 +472,16 @@ void ElfFile<ELF>::AdjustDynamicSectionForHole(Elf_Scn* dynamic_section,
|
||||
<< " d_val adjusted to " << dynamic->d_un.d_val;
|
||||
}
|
||||
|
||||
// Special case: DT_MIPS_RLD_MAP2 stores the difference between dynamic
|
||||
// entry address and the address of the _r_debug (used by GDB)
|
||||
// since the dynamic section and target address are on the
|
||||
// different sides of the hole it needs to be adjusted accordingly
|
||||
if (tag == DT_MIPS_RLD_MAP2) {
|
||||
dynamic->d_un.d_val += hole_size;
|
||||
VLOG(1) << "dynamic[" << i << "] " << dynamic->d_tag
|
||||
<< " d_val adjusted to " << dynamic->d_un.d_val;
|
||||
}
|
||||
|
||||
// Ignore DT_RELCOUNT and DT_RELACOUNT: (1) nobody uses them and
|
||||
// technically (2) the relative relocation count is not changed.
|
||||
|
||||
|
@ -10,6 +10,10 @@
|
||||
#include "elf.h"
|
||||
#include "libelf.h"
|
||||
|
||||
#if !defined(DT_MIPS_RLD_MAP2)
|
||||
#define DT_MIPS_RLD_MAP2 0x70000035
|
||||
#endif
|
||||
|
||||
// ELF is a traits structure used to provide convenient aliases for
|
||||
// 32/64 bit Elf types and functions, depending on the target file.
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user