On 09/28/2010 03:09 AM, Kai Tietz wrote:
>           * config/i386/cygming.h (ASM_OUTPUT_DWARF_OFFSET): Output
>           addition zero for padding of secrel32 requested for 8 bytes.
> 
> I will apply this today, if there aren't any objections.

I've committed the following instead, which I think is a bit tidier.


r~
        * config/i386/cygming.h (ASM_OUTPUT_DWARF_OFFSET): Output 8 bytes
        when 8 bytes are requested.                             


diff --git a/gcc/config/i386/cygming.h b/gcc/config/i386/cygming.h
index 3fee731..ed6b459 100644
--- a/gcc/config/i386/cygming.h
+++ b/gcc/config/i386/cygming.h
@@ -96,11 +96,25 @@ along with GCC; see the file COPYING3.  If not see
    won't allow it.  */
 #define ASM_OUTPUT_DWARF_OFFSET(FILE, SIZE, LABEL, SECTION)    \
   do {                                                         \
-    if (SIZE != 4 && (!TARGET_64BIT || SIZE != 8))             \
-      abort ();                                                        \
-                                                               \
-    fputs ("\t.secrel32\t", FILE);                             \
-    assemble_name (FILE, LABEL);                               \
+    switch (SIZE)                                              \
+      {                                                                \
+      case 4:                                                  \
+       fputs ("\t.secrel32\t", FILE);                          \
+       assemble_name (FILE, LABEL);                            \
+       break;                                                  \
+      case 8:                                                  \
+       /* This is a hack.  There is no 64-bit section relative \
+          relocation.  However, the COFF format also does not  \
+          support 64-bit file offsets; 64-bit applications are \
+          limited to 32-bits of code+data in any one module.   \
+          Fake the 64-bit offset by zero-extending it.  */     \
+       fputs ("\t.secrel32\t", FILE);                          \
+       assemble_name (FILE, LABEL);                            \
+       fputs ("\n\t.long\t0", FILE);                           \
+       break;                                                  \
+      default:                                                 \
+       gcc_unreachable ();                                     \
+      }                                                                \
   } while (0)
 #endif
 

Reply via email to