summaryrefslogtreecommitdiff
path: root/gcc/config/i386/midipix.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/config/i386/midipix.c')
-rw-r--r--gcc/config/i386/midipix.c72
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);
+ }
}