OSDN Git Service

* dw2gencfi.c (cfi_finish): Deal with md_fix_up_eh_frame.
authorEric Botcazou <ebotcazou@libertysurf.fr>
Thu, 9 Oct 2008 17:31:43 +0000 (17:31 +0000)
committerEric Botcazou <ebotcazou@libertysurf.fr>
Thu, 9 Oct 2008 17:31:43 +0000 (17:31 +0000)
* config/tc-i386.h (md_fix_up_eh_frame): Define on Solaris.
(i386_solaris_fix_up_eh_frame): Declare.
* config/tc-i386.c (i386_solaris_fix_up_eh_frame): New function.

gas/ChangeLog
gas/config/tc-i386.c
gas/config/tc-i386.h
gas/dw2gencfi.c

index c53448a..a3b056b 100644 (file)
@@ -1,3 +1,10 @@
+2008-10-09  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * dw2gencfi.c (cfi_finish): Deal with md_fix_up_eh_frame.
+       * config/tc-i386.h (md_fix_up_eh_frame): Define on Solaris.
+       (i386_solaris_fix_up_eh_frame): Declare.
+       * config/tc-i386.c (i386_solaris_fix_up_eh_frame): New function.
+
 2008-10-09  Nick Clifton  <nickc@redhat.com>
 
        PR 6944
index 539ea79..df76ae9 100644 (file)
@@ -10105,6 +10105,15 @@ i386_elf_section_type (const char *str, size_t len)
   return -1;
 }
 
+#ifdef TE_SOLARIS
+void
+i386_solaris_fix_up_eh_frame (segT sec)
+{
+  if (flag_code == CODE_64BIT)
+    elf_section_type (sec) = SHT_X86_64_UNWIND;
+}
+#endif
+
 #ifdef TE_PE
 void
 tc_pe_dwarf2_emit_offset (symbolS *symbol, unsigned int size)
index a670ff9..fd8c8ec 100644 (file)
@@ -212,6 +212,11 @@ extern void tc_x86_frame_initial_instructions (void);
 #define md_elf_section_type(str,len) i386_elf_section_type (str, len)
 extern int i386_elf_section_type (const char *, size_t);
 
+#ifdef TE_SOLARIS
+#define md_fix_up_eh_frame(sec) i386_solaris_fix_up_eh_frame (sec)
+extern void i386_solaris_fix_up_eh_frame (segT);
+#endif
+
 /* Support for SHF_X86_64_LARGE */
 extern int x86_64_section_word (char *, size_t);
 extern int x86_64_section_letter (int, char **);
index 12a656f..4adfeab 100644 (file)
@@ -1496,6 +1496,10 @@ cfi_finish (void)
   subseg_set (cfi_seg, 0);
   record_alignment (cfi_seg, EH_FRAME_ALIGNMENT);
 
+#ifdef md_fix_up_eh_frame
+  md_fix_up_eh_frame (cfi_seg);
+#endif
+
   /* Make sure check_eh_frame doesn't do anything with our output.  */
   save_flag_traditional_format = flag_traditional_format;
   flag_traditional_format = 1;