Skip to content

Commit

Permalink
fix deactivated non-weak linkage code
Browse files Browse the repository at this point in the history
- method Obj::external(const char*) was renamed to external_def
- I32 stores relocation offset in target address
  • Loading branch information
MartinNowak committed Mar 14, 2013
1 parent dee2fbf commit aec20dc
Showing 1 changed file with 12 additions and 4 deletions.
16 changes: 12 additions & 4 deletions src/backend/elfobj.c
Expand Up @@ -3290,12 +3290,20 @@ static void obj_rtinit()

#if REQUIRE_DSO_REGISTRY

const IDXSYM symidx = Obj::external_def("_d_dso_registry");

// call _d_dso_registry@PLT
buf->writeByte(0xE8);
buf->write32(0);

reltype = I64 ? R_X86_64_PLT32 : RI_TYPE_PLT32;
ElfObj::addrel(codseg, off + 1, reltype, Obj::external("_d_dso_registry"), -4);
if (I64)
{
buf->write32(0);
ElfObj::addrel(codseg, off + 1, R_X86_64_PLT32, symidx, -4);
}
else
{
buf->write32(-4);
ElfObj::addrel(codseg, off + 1, RI_TYPE_PLT32, symidx, 0);
}
off += 5;

#else
Expand Down

0 comments on commit aec20dc

Please sign in to comment.