diff options
author | midipix <writeonce@midipix.org> | 2019-02-20 14:47:29 -0500 |
---|---|---|
committer | midipix <writeonce@midipix.org> | 2019-02-20 23:31:15 -0500 |
commit | 54e94f38f5e4d9e4ad51766ea5ca97ec8839114c (patch) | |
tree | 684fdb3cc0c7549990602db228482ccea8ba913e /src | |
parent | 9e15f6c411ab058dc38d416a0871747a4d208b82 (diff) | |
download | mdso-54e94f38f5e4d9e4ad51766ea5ca97ec8839114c.tar.bz2 mdso-54e94f38f5e4d9e4ad51766ea5ca97ec8839114c.tar.xz |
ABI & specs: symbol reference optimization: use image-relative relocations.
Diffstat (limited to 'src')
-rw-r--r-- | src/logic/mdso_asmgen_symentry.c | 12 | ||||
-rw-r--r-- | src/object/mdso_objgen_symentry.c | 4 |
2 files changed, 9 insertions, 7 deletions
diff --git a/src/logic/mdso_asmgen_symentry.c b/src/logic/mdso_asmgen_symentry.c index cba360d..ef38182 100644 --- a/src/logic/mdso_asmgen_symentry.c +++ b/src/logic/mdso_asmgen_symentry.c @@ -28,7 +28,7 @@ int mdso_asmgen_symentry( { const char * const * line; const char * alignstr; - const char * ptrsize; + const char * rvapad; const char * uscore; if (mdso_dprintf(fdout,"\t.file \".%s_symentry.s\"\n",sym) < 0) @@ -36,11 +36,11 @@ int mdso_asmgen_symentry( if (dctx->cctx->drvflags & MDSO_DRIVER_QUAD_PTR) { alignstr = "\t.balign 16\n\n"; - ptrsize = ".quad"; + rvapad = "\t.long 0\n"; uscore = ""; } else { alignstr = "\t.balign 8\n\n"; - ptrsize = ".long"; + rvapad = ""; uscore = "_"; } @@ -57,10 +57,12 @@ int mdso_asmgen_symentry( if ((mdso_dprintf(fdout,"__imp_%s%s:\n",uscore,sym)) < 0) return MDSO_FILE_ERROR(dctx); - if ((mdso_dprintf(fdout,"\t%s\t.symstr_%s\n",ptrsize,sym)) < 0) + if ((mdso_dprintf(fdout,"\t.rva\t.symstr_%s\n%s", + sym,rvapad)) < 0) return MDSO_FILE_ERROR(dctx); - if ((mdso_dprintf(fdout,"\t%s\t.dsometa_%s\n",ptrsize,dctx->cctx->libname)) < 0) + if ((mdso_dprintf(fdout,"\t.rva\t.dsometa_%s\n%s", + dctx->cctx->libname,rvapad)) < 0) return MDSO_FILE_ERROR(dctx); if ((mdso_dprintf(fdout,"\t.linkonce discard\n")) < 0) diff --git a/src/object/mdso_objgen_symentry.c b/src/object/mdso_objgen_symentry.c index 429b641..159f924 100644 --- a/src/object/mdso_objgen_symentry.c +++ b/src/object/mdso_objgen_symentry.c @@ -115,12 +115,12 @@ int mdso_objgen_symentry( if (dctx->cctx->drvflags & MDSO_DRIVER_QUAD_PTR) { aattr = PE_IMAGE_SCN_ALIGN_16BYTES; machine = PE_IMAGE_FILE_MACHINE_AMD64; - reltype = PE_IMAGE_REL_AMD64_ADDR64; + reltype = PE_IMAGE_REL_AMD64_ADDR32NB; relrva = 8; } else { aattr = PE_IMAGE_SCN_ALIGN_4BYTES; machine = PE_IMAGE_FILE_MACHINE_I386; - reltype = PE_IMAGE_REL_I386_DIR32; + reltype = PE_IMAGE_REL_I386_DIR32NB; relrva = 4; } |