diff options
author | midipix <writeonce@midipix.org> | 2019-02-08 12:17:22 -0500 |
---|---|---|
committer | midipix <writeonce@midipix.org> | 2019-02-17 22:35:52 -0500 |
commit | 1b1487d3a6c086cb01bf4520229d58314e6a37e2 (patch) | |
tree | 8ba943767ec6fc16ec03eccc93fb67f85cd1624d | |
parent | a02b4135412d664bc39a8a2e4ebeddc344afc888 (diff) | |
download | cbb-gcc-4.6.4-1b1487d3a6c086cb01bf4520229d58314e6a37e2.tar.bz2 cbb-gcc-4.6.4-1b1487d3a6c086cb01bf4520229d58314e6a37e2.tar.xz |
midipix targets: create .got entries in .dsosyms, support interposition.
-rw-r--r-- | gcc/config/i386/midipix.c | 34 | ||||
-rw-r--r-- | gcc/config/i386/midipix.h | 16 |
2 files changed, 28 insertions, 22 deletions
diff --git a/gcc/config/i386/midipix.c b/gcc/config/i386/midipix.c index 4b29c0917..0d81e0d25 100644 --- a/gcc/config/i386/midipix.c +++ b/gcc/config/i386/midipix.c @@ -144,23 +144,32 @@ static void midipix_pe_create_got_entry(FILE * stream, const char * name, tree d if ((visibility == VISIBILITY_PROTECTED) || (visibility == VISIBILITY_INTERNAL)) return; + /* dsostrs$... */ fputs("\n",stream); fputs(GAS_SECTION,stream); + fputs(GOTSTRS_SECTION_NAME,stream); + fputs("$",stream); + assemble_name(stream,name); + fputs(GOT_SECTION_ATTR,stream); - if (decl->decl_with_vis.weak_flag) { - fputs(GOT_SECTION_NAME,stream); - - } else if (decl->decl_with_vis.visibility == VISIBILITY_INTERNAL) { - fputs(INTERNAL_SECTION_NAME,stream); - - } else { - fputs(GOT_SECTION_NAME,stream); - } + /* .symstr_... */ + fputs("\n.symstr_",stream); + assemble_name(stream,name); + fputs(":\n\t",stream); + fputs(".ascii\t\"",stream); + assemble_name(stream,name); + fputs("\\0\"\n",stream); + fputs("\t.linkonce discard\n\n",stream); + /* dsosyms$... */ + fputs("\n",stream); + fputs(GAS_SECTION,stream); + fputs(GOTSYMS_SECTION_NAME,stream); fputs("$",stream); assemble_name(stream,name); fputs(GOT_SECTION_ATTR,stream); + /* __imp_... */ fputs("\n\t.global __imp_",stream); assemble_name(stream,name); fputs("\n__imp_",stream); @@ -169,8 +178,11 @@ static void midipix_pe_create_got_entry(FILE * stream, const char * name, tree d fputs(ptrsize,stream); fputs("\t",stream); assemble_name(stream,name); - fputs("\n",stream); - fputs("\t.linkonce discard\n\n",stream); + fputs("\n\t",stream); + fputs(ptrsize,stream); + fputs("\t.symstr_",stream); + assemble_name(stream,name); + fputs("\n\t.linkonce discard\n\n",stream); } diff --git a/gcc/config/i386/midipix.h b/gcc/config/i386/midipix.h index de9166582..f87cdc5c5 100644 --- a/gcc/config/i386/midipix.h +++ b/gcc/config/i386/midipix.h @@ -181,21 +181,15 @@ #undef RODATA_SECTION_NAME #define RODATA_SECTION_NAME ".rdata,\"r\"" -#undef GOT_SECTION_NAME -#define GOT_SECTION_NAME ".got" +#undef GOTSYMS_SECTION_NAME +#define GOTSYMS_SECTION_NAME ".dsosyms" + +#undef GOTSTRS_SECTION_NAME +#define GOTSTRS_SECTION_NAME ".gotstrs" #undef GOTREFS_SECTION_NAME #define GOTREFS_SECTION_NAME ".gotrefs" -#undef PROTECTED_SECTION_NAME -#define PROTECTED_SECTION_NAME GOT_SECTION_NAME - -#undef HIDDEN_SECTION_NAME -#define HIDDEN_SECTION_NAME ".hidden" - -#undef INTERNAL_SECTION_NAME -#define INTERNAL_SECTION_NAME ".intern" - #undef GOT_SECTION_ATTR #define GOT_SECTION_ATTR ",\"r\"" |