mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-10 03:30:27 +08:00
config.host (powerpc-ibm-aix*): Add crtdbase.o to extra_parts.
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
This commit is contained in:
parent
8cd60b238b
commit
04218b3564
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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 }"
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
||||
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));
|
||||
}
|
||||
}
|
||||
|
||||
switch_to_section (eh_frame_section);
|
||||
|
||||
#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
|
||||
|
30
gcc/except.c
30
gcc/except.c
@ -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);
|
||||
|
@ -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 \
|
||||
|
@ -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):
|
||||
|
@ -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"
|
||||
|
31
libgcc/config/rs6000/crtdbase.S
Normal file
31
libgcc/config/rs6000/crtdbase.S
Normal file
@ -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
|
@ -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 $<
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user