config.host (powerpc-ibm-aix*): Add crtdbase.o to extra_parts.
authorAndrew Dixie <andrewd@gentrack.com>
Fri, 18 Sep 2015 14:10:36 +0000 (14:10 +0000)
committerDavid Edelsohn <dje@gcc.gnu.org>
Fri, 18 Sep 2015 14:10:36 +0000 (10:10 -0400)
libgcc/
        * config.host (powerpc-ibm-aix*): Add crtdbase.o to extra_parts.
        * config/rs6000/crtdbase.S: New file.
        * config/rs6000/t-aix-cxa: Build crtdbase.o.

gcc/
        * defaults.h (EH_FRAME_SECTION_NAME): Depend on
        EH_FRAME_THROUGH_COLLECT2.
        * dwarf2asm.c (dw2_asm_output_encoded_addr_rtx): Add case for
        DW_EH_PE_datarel.
        * dwarf2out.c (switch_to_eh_frame_section): Use a read-only section
        even if EH_FRAME_SECTION_NAME is undefined.  Restrict special
        collect2 labels to EH_FRAME_THROUGH_COLLECT2.
        * except.c (switch_to_exception_section): Use a read-only section
        even if EH_FRAME_SECTION_NAME is undefined.
        * system.h (EH_FRAME_IN_DATA_SECTION): Poison.
        * collect2.c (write_c_file_stat): Provide dbase on AIX.
        (scan_prog_file): Don't export __dso_handle nor
        __gcc_unwind_dbase.
        * config/rs6000/aix.h (ASM_PREFERRED_EH_DATA_FORMAT): Define.
        (EH_TABLES_CAN_BE_READ_ONLY): Define.
        (ASM_OUTPUT_DWARF_PCREL): Define.
        (ASM_OUTPUT_DWARF_DATAREL): Define.
        (EH_FRAME_THROUGH_COLLECT2): Define.
        (EH_FRAME_IN_DATA_SECTION): Delete.
        * config/rs6000/rs6000.c (rs6000_aix_asm_output_dwarf_pcrel): New.
        (rs6000_aix_asm_output_dwarf_datarel): New.
        (rs6000_xcoff_asm_init_sections): Don't set exception_section.
        * config/spu/spu-elf.h (EH_FRAME_IN_DATA_SECTION): Delete.
        (EH_FRAME_THROUGH_COLLECT2): Define.
        * config/i386/i386-interix.h (EH_FRAME_IN_DATA_SECTION): Delete.
        (EH_FRAME_THROUGH_COLLECT2): Define.
        (EH_TABLES_CAN_BE_READ_ONLY): Define.
        * doc/tm.texi.in (EH_FRAME_IN_DATA_SECTION): Delete.
        (EH_FRAME_THROUGH_COLLECT2): New.
        (ASM_OUTPUT_DWARF_DATAREL): New.
        * doc/tm.texi: Regenerate.

Co-Authored-By: David Edelsohn <dje.gcc@gmail.com>
From-SVN: r227906

16 files changed:
gcc/ChangeLog
gcc/collect2.c
gcc/config/i386/i386-interix.h
gcc/config/rs6000/rs6000.c
gcc/config/spu/spu-elf.h
gcc/defaults.h
gcc/doc/tm.texi
gcc/doc/tm.texi.in
gcc/dwarf2asm.c
gcc/dwarf2out.c
gcc/except.c
gcc/system.h
libgcc/ChangeLog
libgcc/config.host
libgcc/config/rs6000/crtdbase.S [new file with mode: 0644]
libgcc/config/rs6000/t-aix-cxa

index 36dcd5eb0ccd71064533b09b5e93a25ecfd8fc89..c8c44127b1f992aaff883570f0c59bff3985df1c 100644 (file)
@@ -1,3 +1,38 @@
+2015-09-18  Andrew Dixie  <andrewd@gentrack.com>
+           David Edelsohn  <dje.gcc@gmail.com>
+
+       * defaults.h (EH_FRAME_SECTION_NAME): Depend on
+       EH_FRAME_THROUGH_COLLECT2.
+       * dwarf2asm.c (dw2_asm_output_encoded_addr_rtx): Add case for
+       DW_EH_PE_datarel.
+       * dwarf2out.c (switch_to_eh_frame_section): Use a read-only section
+       even if EH_FRAME_SECTION_NAME is undefined.  Restrict special
+       collect2 labels to EH_FRAME_THROUGH_COLLECT2.
+       * except.c (switch_to_exception_section): Use a read-only section
+       even if EH_FRAME_SECTION_NAME is undefined.
+       * system.h (EH_FRAME_IN_DATA_SECTION): Poison.
+       * collect2.c (write_c_file_stat): Provide dbase on AIX.
+       (scan_prog_file): Don't export __dso_handle nor
+       __gcc_unwind_dbase.
+       * config/rs6000/aix.h (ASM_PREFERRED_EH_DATA_FORMAT): Define.
+       (EH_TABLES_CAN_BE_READ_ONLY): Define.
+       (ASM_OUTPUT_DWARF_PCREL): Define.
+       (ASM_OUTPUT_DWARF_DATAREL): Define.
+       (EH_FRAME_THROUGH_COLLECT2): Define.
+       (EH_FRAME_IN_DATA_SECTION): Delete.
+       * config/rs6000/rs6000.c (rs6000_aix_asm_output_dwarf_pcrel): New.
+       (rs6000_aix_asm_output_dwarf_datarel): New.
+       (rs6000_xcoff_asm_init_sections): Don't set exception_section.
+       * config/spu/spu-elf.h (EH_FRAME_IN_DATA_SECTION): Delete.
+       (EH_FRAME_THROUGH_COLLECT2): Define.
+       * config/i386/i386-interix.h (EH_FRAME_IN_DATA_SECTION): Delete.
+       (EH_FRAME_THROUGH_COLLECT2): Define.
+       (EH_TABLES_CAN_BE_READ_ONLY): Define.
+       * doc/tm.texi.in (EH_FRAME_IN_DATA_SECTION): Delete.
+       (EH_FRAME_THROUGH_COLLECT2): New.
+       (ASM_OUTPUT_DWARF_DATAREL): New.
+       * doc/tm.texi: Regenerate.
+
 2015-09-18  Richard Biener  <rguenther@suse.de>
 
        * dwarf2out.c (append_entry_to_tmpl_value_parm_die_table): Assert
index 5a7e874707538ed9bcdf535c1a0cc726d3878e54..20c253326f8e8b8ac94e34fc61ba5944888c5dcd 100644 (file)
@@ -2108,12 +2108,23 @@ write_c_file_stat (FILE *stream, const char *name ATTRIBUTE_UNUSED)
       fprintf (stream, "  struct object *next;\n");
       fprintf (stream, "};\n");
 
+      fprintf (stream, "extern void __register_frame_info_table_bases (void *, struct object *, void *tbase, void *dbase);\n");
       fprintf (stream, "extern void __register_frame_info_table (void *, struct object *);\n");
       fprintf (stream, "extern void *__deregister_frame_info (void *);\n");
+#ifdef TARGET_AIX_VERSION
+      fprintf (stream, "extern void *__gcc_unwind_dbase;\n");
+#endif
 
       fprintf (stream, "static void reg_frame () {\n");
       fprintf (stream, "\tstatic struct object ob;\n");
+#ifdef TARGET_AIX_VERSION
+      /* Use __gcc_unwind_dbase as the base address for data on AIX.
+        This might not be the start of the segment, signed offsets assumed.
+       */
+      fprintf (stream, "\t__register_frame_info_table_bases (frame_table, &ob, (void *)0, &__gcc_unwind_dbase);\n");
+#else
       fprintf (stream, "\t__register_frame_info_table (frame_table, &ob);\n");
+#endif
       fprintf (stream, "\t}\n");
 
       fprintf (stream, "static void dereg_frame () {\n");
@@ -2878,7 +2889,16 @@ scan_prog_file (const char *prog_name, scanpass which_pass,
                             provides an explicit export list.  */
                          if (shared_obj && !is_shared
                              && which_pass == PASS_OBJ && !export_flag)
-                           add_to_list (&exports, name);
+                           {
+                             /* Do not auto-export __dso_handle or
+                                __gcc_unwind_dbase.  They are required
+                                to be local to each module.  */
+                             if (strcmp(name, "__dso_handle") != 0
+                                 && strcmp(name, "__gcc_unwind_dbase") != 0)
+                               {
+                                 add_to_list (&exports, name);
+                               }
+                           }
 #endif
                          continue;
                        }
index b472d8e9fe640cae960c9fc8a890ba1ab0e34357..97dbcd97ef5419e268743659a6f9e36f5df3186d 100644 (file)
@@ -153,8 +153,6 @@ do {                                                                        \
 #define drectve_section()  /* nothing */
 
 
-#define EH_FRAME_IN_DATA_SECTION
-
 #define READONLY_DATA_SECTION_ASM_OP   "\t.section\t.rdata,\"r\""
 
 /* Define this macro if references to a symbol must be treated
@@ -326,7 +324,8 @@ while (0)
  : ((n) >= FIRST_STACK_REG && (n) <= LAST_STACK_REG) ? (int) (n)+8 \
  : (int) (-1))
 
-#define EH_FRAME_IN_DATA_SECTION
+#define EH_FRAME_THROUGH_COLLECT2
+#define EH_TABLES_CAN_BE_READ_ONLY 0
 
 /* the following are OSF linker (not gld) specific... we don't want them */
 #undef HAS_INIT_SECTION
index 7278792d0dc8f5bb4f1c991d0fb9bb88693d4d45..8a22af629628c0109c09535914bb602619a592a9 100644 (file)
@@ -30790,7 +30790,6 @@ rs6000_xcoff_asm_init_sections (void)
     = get_unnamed_section (0, rs6000_xcoff_output_toc_section_asm_op, NULL);
 
   readonly_data_section = read_only_data_section;
-  exception_section = data_section;
 }
 
 static int
@@ -31159,6 +31158,31 @@ rs6000_xcoff_declare_object_name (FILE *file, const char *name, tree decl)
   symtab_node::get (decl)->call_for_symbol_and_aliases (rs6000_declare_alias, &data, true);
 }
 
+/* Overide the default 'SYMBOL-.' syntax with AIX compatible 'SYMBOL-$'. */
+
+void
+rs6000_asm_output_dwarf_pcrel (FILE *file, int size, const char *label)
+{
+  fputs (integer_asm_op (size, FALSE), file);
+  assemble_name (file, label);
+  fputs ("-$", file);
+}
+
+/* Output a symbol offset relative to the dbase for the current object.
+   We use __gcc_unwind_dbase as an arbitrary base for dbase and assume
+   signed offsets.
+
+   __gcc_unwind_dbase is embedded in all executables/libraries through
+   libgcc/config/rs6000/crtdbase.S.  */
+
+void
+rs6000_asm_output_dwarf_datarel (FILE *file, int size, const char *label)
+{
+  fputs (integer_asm_op (size, FALSE), file);
+  assemble_name (file, label);
+  fputs("-__gcc_unwind_dbase", file);
+}
+
 #ifdef HAVE_AS_TLS
 static void
 rs6000_xcoff_encode_section_info (tree decl, rtx rtl, int first)
index c5098706c660eba6a54e912e4dcec4610b5d3dad..46d35016af0ea3ef0596c909cb17bb4e840b2a50 100644 (file)
@@ -61,7 +61,7 @@
 #undef TARGET_ASM_NAMED_SECTION
 #define TARGET_ASM_NAMED_SECTION  default_elf_asm_named_section
 
-#define EH_FRAME_IN_DATA_SECTION 1
+#define EH_FRAME_THROUGH_COLLECT2 1
 
 #define LINK_SPEC "%{mlarge-mem: --defsym __stack=0xfffffff0 }"
 
index 9ca9df2e117dcf4bf9071a8753cd6a9701bf389c..14ef91ad4b51a035c938a5e02fa15563cf1aa7b3 100644 (file)
@@ -351,7 +351,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 /* If we have named sections, and we're using crtstuff to run ctors,
    use them for registering eh frame information.  */
 #if defined (TARGET_ASM_NAMED_SECTION) && DWARF2_UNWIND_INFO \
-    && !defined (EH_FRAME_IN_DATA_SECTION)
+    && !defined (EH_FRAME_THROUGH_COLLECT2)
 #ifndef EH_FRAME_SECTION_NAME
 #define EH_FRAME_SECTION_NAME ".eh_frame"
 #endif
index 65fb8656a180c30f0f843f15a50185b6bae551c4..eb495a86a7269b4e8cb5f9dfeb1087afff26568c 100644 (file)
@@ -8962,14 +8962,15 @@ You should define this symbol if your target supports DWARF 2 frame
 unwind information and the default definition does not work.
 @end defmac
 
-@defmac EH_FRAME_IN_DATA_SECTION
-If defined, DWARF 2 frame unwind information will be placed in the
-data section even though the target supports named sections.  This
-might be necessary, for instance, if the system linker does garbage
-collection and sections cannot be marked as not to be collected.
+@defmac EH_FRAME_THROUGH_COLLECT2
+If defined, DWARF 2 frame unwind information will identified by
+specially named labels.  The collect2 process will locate these
+labels and generate code to register the frames.
 
-Do not define this macro unless @code{TARGET_ASM_NAMED_SECTION} is
-also defined.
+This might be necessary, for instance, if the system linker will not
+place the eh_frames in-between the sentinals from @file{crtstuff.c},
+or if the system linker does garbage collection and sections cannot
+be marked as not to be collected.
 @end defmac
 
 @defmac EH_TABLES_CAN_BE_READ_ONLY
@@ -9597,6 +9598,11 @@ A C statement to issue assembly directives that create a self-relative
 reference to the given @var{label}, using an integer of the given @var{size}.
 @end defmac
 
+@defmac ASM_OUTPUT_DWARF_DATAREL (@var{stream}, @var{size}, @var{label})
+A C statement to issue assembly directives that create a reference to the
+given @var{label} relative to the dbase, using an integer of the given @var{size}.
+@end defmac
+
 @defmac ASM_OUTPUT_DWARF_TABLE_REF (@var{label})
 A C statement to issue assembly directives that create a reference to
 the DWARF table identifier @var{label} from the current section.  This
index 8fe193c4f2560727956605e4fb5ed418f49d9853..92835c19c1e7be880e3b42575db40c671c476d51 100644 (file)
@@ -6477,14 +6477,15 @@ You should define this symbol if your target supports DWARF 2 frame
 unwind information and the default definition does not work.
 @end defmac
 
-@defmac EH_FRAME_IN_DATA_SECTION
-If defined, DWARF 2 frame unwind information will be placed in the
-data section even though the target supports named sections.  This
-might be necessary, for instance, if the system linker does garbage
-collection and sections cannot be marked as not to be collected.
+@defmac EH_FRAME_THROUGH_COLLECT2
+If defined, DWARF 2 frame unwind information will identified by
+specially named labels.  The collect2 process will locate these
+labels and generate code to register the frames.
 
-Do not define this macro unless @code{TARGET_ASM_NAMED_SECTION} is
-also defined.
+This might be necessary, for instance, if the system linker will not
+place the eh_frames in-between the sentinals from @file{crtstuff.c},
+or if the system linker does garbage collection and sections cannot
+be marked as not to be collected.
 @end defmac
 
 @defmac EH_TABLES_CAN_BE_READ_ONLY
@@ -7033,6 +7034,11 @@ A C statement to issue assembly directives that create a self-relative
 reference to the given @var{label}, using an integer of the given @var{size}.
 @end defmac
 
+@defmac ASM_OUTPUT_DWARF_DATAREL (@var{stream}, @var{size}, @var{label})
+A C statement to issue assembly directives that create a reference to the
+given @var{label} relative to the dbase, using an integer of the given @var{size}.
+@end defmac
+
 @defmac ASM_OUTPUT_DWARF_TABLE_REF (@var{label})
 A C statement to issue assembly directives that create a reference to
 the DWARF table identifier @var{label} from the current section.  This
index 9f3c4b1c0c0567d8a452e832d227b87bd5c1864c..3a30fe443a8638baca807d5d4c44f59a56ecd9d5 100644 (file)
@@ -984,6 +984,13 @@ dw2_asm_output_encoded_addr_rtx (int encoding, rtx addr, bool is_public,
          dw2_assemble_integer (size, addr);
          break;
 
+#ifdef ASM_OUTPUT_DWARF_DATAREL
+       case DW_EH_PE_datarel:
+         gcc_assert (GET_CODE (addr) == SYMBOL_REF);
+         ASM_OUTPUT_DWARF_DATAREL (asm_out_file, size, XSTR (addr, 0));
+         break;
+#endif
+
        case DW_EH_PE_pcrel:
          gcc_assert (GET_CODE (addr) == SYMBOL_REF);
 #ifdef ASM_OUTPUT_DWARF_PCREL
index 2fd889a65341bdf0601197d0d151647232d75a5e..4a1c15245dea69cee8cf6dcbbcb15408ee27e0df 100644 (file)
@@ -438,7 +438,6 @@ switch_to_eh_frame_section (bool back)
 {
   tree label;
 
-#ifdef EH_FRAME_SECTION_NAME
   if (eh_frame_section == 0)
     {
       int flags;
@@ -466,27 +465,29 @@ switch_to_eh_frame_section (bool back)
        }
       else
        flags = SECTION_WRITE;
+
+#ifdef EH_FRAME_SECTION_NAME
       eh_frame_section = get_section (EH_FRAME_SECTION_NAME, flags, NULL);
-    }
+#else
+      eh_frame_section = ((flags == SECTION_WRITE)
+                         ? data_section : readonly_data_section);
 #endif /* EH_FRAME_SECTION_NAME */
+    }
 
-  if (eh_frame_section)
-    switch_to_section (eh_frame_section);
-  else
-    {
-      /* We have no special eh_frame section.  Put the information in
-        the data section and emit special labels to guide collect2.  */
-      switch_to_section (data_section);
+  switch_to_section (eh_frame_section);
 
-      if (!back)
-       {
-         label = get_file_function_name ("F");
-         ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
-         targetm.asm_out.globalize_label (asm_out_file,
-                                          IDENTIFIER_POINTER (label));
-         ASM_OUTPUT_LABEL (asm_out_file, IDENTIFIER_POINTER (label));
-       }
+#ifdef EH_FRAME_THROUGH_COLLECT2
+  /* We have no special eh_frame section.  Emit special labels to guide
+     collect2.  */
+  if (!back)
+    {
+      label = get_file_function_name ("F");
+      ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
+      targetm.asm_out.globalize_label (asm_out_file,
+                                       IDENTIFIER_POINTER (label));
+      ASM_OUTPUT_LABEL (asm_out_file, IDENTIFIER_POINTER (label));
     }
+#endif
 }
 
 /* Switch [BACK] to the eh or debug frame table section, depending on
index d59c539908749bd0d225fee15150b2e3ce5613f1..86ad6bc4446183ad51d78a24354f06f03f486cd6 100644 (file)
@@ -2838,24 +2838,24 @@ switch_to_exception_section (const char * ARG_UNUSED (fnname))
     s = exception_section;
   else
     {
+      int flags;
+
+      if (EH_TABLES_CAN_BE_READ_ONLY)
+       {
+         int tt_format =
+           ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/1);
+         flags = ((! flag_pic
+                   || ((tt_format & 0x70) != DW_EH_PE_absptr
+                       && (tt_format & 0x70) != DW_EH_PE_aligned))
+                  ? 0 : SECTION_WRITE);
+       }
+      else
+       flags = SECTION_WRITE;
+
       /* Compute the section and cache it into exception_section,
         unless it depends on the function name.  */
       if (targetm_common.have_named_sections)
        {
-         int flags;
-
-         if (EH_TABLES_CAN_BE_READ_ONLY)
-           {
-             int tt_format =
-               ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/1);
-             flags = ((! flag_pic
-                       || ((tt_format & 0x70) != DW_EH_PE_absptr
-                           && (tt_format & 0x70) != DW_EH_PE_aligned))
-                      ? 0 : SECTION_WRITE);
-           }
-         else
-           flags = SECTION_WRITE;
-
 #ifdef HAVE_LD_EH_GC_SECTIONS
          if (flag_function_sections
              || (DECL_COMDAT_GROUP (current_function_decl) && HAVE_COMDAT_GROUP))
@@ -2876,7 +2876,7 @@ switch_to_exception_section (const char * ARG_UNUSED (fnname))
        }
       else
        exception_section
-         = s = flag_pic ? data_section : readonly_data_section;
+         = s = flags == SECTION_WRITE ? data_section : readonly_data_section;
     }
 
   switch_to_section (s);
index 3189bda8e5f790bb49e1e977c6c02b50976ac81d..1ba5afc63948803e7b6ae7d8104f6c07912621c1 100644 (file)
@@ -956,7 +956,7 @@ extern void fancy_abort (const char *, int, const char *) ATTRIBUTE_NORETURN;
        EXTRA_ADDRESS_CONSTRAINT CONST_DOUBLE_OK_FOR_CONSTRAINT_P          \
        CALLER_SAVE_PROFITABLE LARGEST_EXPONENT_IS_NORMAL                  \
        ROUND_TOWARDS_ZERO SF_SIZE DF_SIZE XF_SIZE TF_SIZE LIBGCC2_TF_CEXT \
-       LIBGCC2_LONG_DOUBLE_TYPE_SIZE STRUCT_VALUE
+       LIBGCC2_LONG_DOUBLE_TYPE_SIZE STRUCT_VALUE EH_FRAME_IN_DATA_SECTION
 
 /* Hooks that are no longer used.  */
  #pragma GCC poison LANG_HOOKS_FUNCTION_MARK LANG_HOOKS_FUNCTION_FREE  \
index 472dd78c2c6a560e27cc4d61ccd14e6521ede1ce..8d44ec2f75bccda47105d69a54cda36bdf1e740c 100644 (file)
@@ -1,3 +1,10 @@
+2015-09-18  Andrew Dixie  <andrewd@gentrack.com>
+           David Edelsohn  <dje.gcc@gmail.com>
+
+       * config.host (powerpc-ibm-aix*): Add crtdbase.o to extra_parts.
+       * config/rs6000/crtdbase.S: New file.
+       * config/rs6000/t-aix-cxa: Build crtdbase.o.
+
 2015-09-15  Max Filippov  <jcmvbkbc@gmail.com>
 
        * config/xtensa/linux-unwind.h (xtensa_fallback_frame_state):
index 3a2c75db45817bc861a195e845de0d3b864d3bee..140aa227c499dc01d140d0498a748372c90f8392 100644 (file)
@@ -1085,7 +1085,7 @@ rs6000-ibm-aix5.1.* | powerpc-ibm-aix5.1.*)
 rs6000-ibm-aix[56789].* | powerpc-ibm-aix[56789].*)
        md_unwind_header=rs6000/aix-unwind.h
        tmake_file="t-fdpbit rs6000/t-ppc64-fp rs6000/t-slibgcc-aix rs6000/t-ibm-ldouble rs6000/t-aix-cxa"
-       extra_parts="crtcxa.o crtcxa_s.o"
+       extra_parts="crtcxa.o crtcxa_s.o crtdbase.o"
        ;;
 rl78-*-elf)
        tmake_file="$tm_file t-fdpbit rl78/t-rl78"
diff --git a/libgcc/config/rs6000/crtdbase.S b/libgcc/config/rs6000/crtdbase.S
new file mode 100644 (file)
index 0000000..732d777
--- /dev/null
@@ -0,0 +1,31 @@
+/* Defines __gcc_unwind_dbase
+
+   Copyright (C) 2014 Free Software Foundation, Inc.
+
+   This file is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by the
+   Free Software Foundation; either version 3, or (at your option) any
+   later version.
+
+   This file is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   Under Section 7 of GPL version 3, you are granted additional
+   permissions described in the GCC Runtime Library Exception, version
+   3.1, as published by the Free Software Foundation.
+
+   You should have received a copy of the GNU General Public License and
+   a copy of the GCC Runtime Library Exception along with this program;
+   see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* Symbol used as an arbitrary base for offsets inside the data
+ * segment for unwind information. */
+       .file "crtdbase.S"
+       .globl __gcc_unwind_dbase
+       .csect __gcc_unwind_dbase[RW],2
+       .align 2
+__gcc_unwind_dbase:
+       .long 0
index 4755c20c9649105480486b582368006e3e873d5e..f230a88d47fbfbc49cbcd8c7078c38d1f2ed263e 100644 (file)
@@ -5,6 +5,9 @@ LIB2ADD_ST += $(srcdir)/config/rs6000/aixinitfini.c
 
 SHLIB_MAPFILES += $(srcdir)/config/rs6000/libgcc-aix-cxa.ver
 
+crtdbase.o: $(srcdir)/config/rs6000/crtdbase.S
+       $(crt_compile) -c $<
+
 crtcxa.o: $(srcdir)/config/rs6000/crtcxa.c
        $(crt_compile) -c $<