summaryrefslogtreecommitdiff
path: root/gcc/config/i386
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/config/i386')
-rw-r--r--gcc/config/i386/midipix.c23
1 files changed, 18 insertions, 5 deletions
diff --git a/gcc/config/i386/midipix.c b/gcc/config/i386/midipix.c
index 8b920a8e7..4d511722f 100644
--- a/gcc/config/i386/midipix.c
+++ b/gcc/config/i386/midipix.c
@@ -587,6 +587,10 @@ bool midipix_asm_assemble_integer(rtx x, unsigned int size, int aligned_p)
&& (DECL_EXTERNAL(decl))
&& (TREE_PUBLIC(decl));
+ /* c++ type info */
+ falt |= (GET_CODE(xref) == SYMBOL_REF)
+ && (!(SYMBOL_REF_DECL(xref)));
+
/* visibility */
visibility = falt && decl && decl->decl_with_vis.visibility_specified
? decl->decl_with_vis.visibility
@@ -600,11 +604,20 @@ bool midipix_asm_assemble_integer(rtx x, unsigned int size, int aligned_p)
name = XSTR(xref,0);
ptrsize = TARGET_64BIT ? winnt_ptrsize_quad : winnt_ptrsize_long;
- sect = xoff
- ? data_section
- : in_section
- ? get_variable_section(decl,false)
- : 0;
+ if (in_section == data_section)
+ sect = data_section;
+ else if (in_section == readonly_data_section)
+ sect = readonly_data_section;
+ if (in_section == ctors_section)
+ sect = ctors_section;
+ if (in_section == dtors_section)
+ sect = dtors_section;
+ else if (in_section && decl)
+ sect = get_variable_section(decl,false);
+ else if (xoff)
+ sect = data_section;
+ else
+ sect = 0;
/* in-section mark */
fputs("1:\n",asm_out_file);