diff options
Diffstat (limited to 'gcc/config/i386/midipix.c')
-rw-r--r-- | gcc/config/i386/midipix.c | 72 |
1 files changed, 45 insertions, 27 deletions
diff --git a/gcc/config/i386/midipix.c b/gcc/config/i386/midipix.c index 4d511722f..3d076f3e9 100644 --- a/gcc/config/i386/midipix.c +++ b/gcc/config/i386/midipix.c @@ -136,29 +136,26 @@ static void midipix_pe_create_got_entry(FILE * stream, const char * name, tree d ? winnt_ptrsize_quad : winnt_ptrsize_long; - visibility = (decl->decl_with_vis.visibility == VISIBILITY_DEFAULT) - ? default_visibility - : decl->decl_with_vis.visibility; - - 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); - - /* .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); + visibility = decl->decl_with_vis.visibility; + + /* gotstrs$... */ + if ((visibility == VISIBILITY_DEFAULT) || (visibility == VISIBILITY_PROTECTED)) { + fputs("\n",stream); + fputs(GAS_SECTION,stream); + fputs(GOTSTRS_SECTION_NAME,stream); + fputs("$",stream); + assemble_name(stream,name); + fputs(GOT_SECTION_ATTR,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); @@ -178,13 +175,34 @@ 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\t",stream); - fputs(".rva",stream); - fputs("\t.symstr_",stream); - assemble_name(stream,name); fputs("\n",stream); + + if ((visibility == VISIBILITY_DEFAULT) || (visibility == VISIBILITY_PROTECTED)) { + fputs("\n\t",stream); + fputs(".rva",stream); + fputs("\t.symstr_",stream); + assemble_name(stream,name); + fputs("\n",stream); + } else { + fputs("\n\t.long\t" "0",stream); + fputs("\n",stream); + } + fputs(TARGET_64BIT ? "\t.long\t" "0" "\n" : "",stream); fputs("\n\n",stream); + + /* .symattr section, .symattr.hidden. symbols */ + if ((visibility == VISIBILITY_HIDDEN) || (visibility == VISIBILITY_INTERNAL)) { + fputs("\n",stream); + fputs(GAS_SECTION,stream); + fputs(SYMATTR_SECTION_NAME,stream); + fputs(SYMATTR_SECTION_ATTR,stream); + + /* .symattr.hidden. */ + fputs("\n.symattr.hidden.",stream); + assemble_name(stream,name); + fputs(":\n\n",stream); + } } |