From aec20dc964543823d02f8ca81f17b40e1de6eefb Mon Sep 17 00:00:00 2001 From: Martin Nowak Date: Thu, 14 Mar 2013 06:30:52 +0100 Subject: [PATCH] fix deactivated non-weak linkage code - method Obj::external(const char*) was renamed to external_def - I32 stores relocation offset in target address --- src/backend/elfobj.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/backend/elfobj.c b/src/backend/elfobj.c index 888fb28cb2fc..1342762480fb 100644 --- a/src/backend/elfobj.c +++ b/src/backend/elfobj.c @@ -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