Restore XCOFF for DWARF on AIX.
PR bootstrap/106855 gcc/ChangeLog: * collect2.cc (scan_prog_file): Restore if XCOFF_DEBUGGING_INFO. * config/rs6000/rs6000.cc (rs6000_option_override_internal): Restore usage of XCOFF_DEBUGGING_INFO. * config/rs6000/xcoff.h (XCOFF_DEBUGGING_INFO): Restore. * dwarf2asm.cc (XCOFF_DEBUGGING_INFO): Restore support for XCOFF_DEBUGGING_INFO. (dw2_asm_output_nstring): Likewise. (USE_LINKONCE_INDIRECT): Likewise. * dwarf2out.cc (XCOFF_DEBUGGING_INFO): Likewise. (HAVE_XCOFF_DWARF_EXTRAS): Likewise. (output_fde): Likewise. (output_call_frame_info): Likewise. (have_macinfo): Likewise. (add_AT_loc_list): Likewise. (add_AT_view_list): Likewise. (output_compilation_unit_header): Likewise. (output_pubnames): Likewise. (output_aranges): Likewise. (output_line_info): Likewise. (output_macinfo): Likewise. (dwarf2out_finish): Likewise. (dwarf2out_early_finish): Likewise.
This commit is contained in:
@@ -2784,6 +2784,13 @@ scan_prog_file (const char *prog_name, scanpass which_pass,
|
||||
if ((name = ldgetname (ldptr, &symbol)) == NULL)
|
||||
continue; /* Should never happen. */
|
||||
|
||||
#ifdef XCOFF_DEBUGGING_INFO
|
||||
/* All AIX function names have a duplicate entry
|
||||
beginning with a dot. */
|
||||
if (*name == '.')
|
||||
++name;
|
||||
#endif
|
||||
|
||||
switch (is_ctor_dtor (name))
|
||||
{
|
||||
#if TARGET_AIX_VERSION
|
||||
|
||||
@@ -3821,6 +3821,12 @@ rs6000_option_override_internal (bool global_init_p)
|
||||
if (TARGET_DEBUG_REG || TARGET_DEBUG_TARGET)
|
||||
rs6000_print_isa_options (stderr, 0, "before defaults", rs6000_isa_flags);
|
||||
|
||||
#ifdef XCOFF_DEBUGGING_INFO
|
||||
/* For AIX default to 64-bit DWARF. */
|
||||
if (!OPTION_SET_P (dwarf_offset_size))
|
||||
dwarf_offset_size = POINTER_SIZE_UNITS;
|
||||
#endif
|
||||
|
||||
/* Handle explicit -mno-{altivec,vsx,power8-vector,power9-vector} and turn
|
||||
off all of the options that depend on those flags. */
|
||||
ignore_masks = rs6000_disable_incompatible_switches ();
|
||||
|
||||
@@ -21,6 +21,9 @@
|
||||
|
||||
#define TARGET_OBJECT_FORMAT OBJECT_XCOFF
|
||||
|
||||
/* The RS/6000 uses the XCOFF format. */
|
||||
#define XCOFF_DEBUGGING_INFO 1
|
||||
|
||||
/* Define if the object format being used is COFF or a superset. */
|
||||
#define OBJECT_FORMAT_COFF
|
||||
|
||||
|
||||
+10
-3
@@ -35,6 +35,10 @@ along with GCC; see the file COPYING3. If not see
|
||||
#include "emit-rtl.h"
|
||||
#include "fold-const.h"
|
||||
|
||||
#ifndef XCOFF_DEBUGGING_INFO
|
||||
#define XCOFF_DEBUGGING_INFO 0
|
||||
#endif
|
||||
|
||||
|
||||
/* Output an unaligned integer with the given value and size. Prefer not
|
||||
to print a newline, since the caller may want to add a comment. */
|
||||
@@ -380,13 +384,16 @@ dw2_asm_output_nstring (const char *str, size_t orig_len,
|
||||
|
||||
if (flag_debug_asm && comment)
|
||||
{
|
||||
fputs ("\t.ascii \"", asm_out_file);
|
||||
if (XCOFF_DEBUGGING_INFO)
|
||||
fputs ("\t.byte \"", asm_out_file);
|
||||
else
|
||||
fputs ("\t.ascii \"", asm_out_file);
|
||||
|
||||
for (i = 0; i < len; i++)
|
||||
{
|
||||
int c = str[i];
|
||||
if (c == '\"')
|
||||
fputc ('\\', asm_out_file);
|
||||
fputc (XCOFF_DEBUGGING_INFO ? '\"' : '\\', asm_out_file);
|
||||
else if (c == '\\')
|
||||
fputc ('\\', asm_out_file);
|
||||
if (ISPRINT (c))
|
||||
@@ -906,7 +913,7 @@ static GTY(()) hash_map<const char *, tree> *indirect_pool;
|
||||
static GTY(()) int dw2_const_labelno;
|
||||
|
||||
#if defined(HAVE_GAS_HIDDEN)
|
||||
# define USE_LINKONCE_INDIRECT (SUPPORTS_ONE_ONLY)
|
||||
# define USE_LINKONCE_INDIRECT (SUPPORTS_ONE_ONLY && !XCOFF_DEBUGGING_INFO)
|
||||
#else
|
||||
# define USE_LINKONCE_INDIRECT 0
|
||||
#endif
|
||||
|
||||
+71
-32
@@ -105,6 +105,14 @@ static rtx_insn *cached_next_real_insn;
|
||||
static void dwarf2out_decl (tree);
|
||||
static bool is_redundant_typedef (const_tree);
|
||||
|
||||
#ifndef XCOFF_DEBUGGING_INFO
|
||||
#define XCOFF_DEBUGGING_INFO 0
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_XCOFF_DWARF_EXTRAS
|
||||
#define HAVE_XCOFF_DWARF_EXTRAS 0
|
||||
#endif
|
||||
|
||||
#ifdef VMS_DEBUGGING_INFO
|
||||
int vms_file_stats_name (const char *, long long *, long *, char *, int *);
|
||||
|
||||
@@ -600,11 +608,14 @@ output_fde (dw_fde_ref fde, bool for_eh, bool second,
|
||||
for_eh + j);
|
||||
ASM_GENERATE_INTERNAL_LABEL (l1, FDE_AFTER_SIZE_LABEL, for_eh + j);
|
||||
ASM_GENERATE_INTERNAL_LABEL (l2, FDE_END_LABEL, for_eh + j);
|
||||
if (DWARF_INITIAL_LENGTH_SIZE - dwarf_offset_size == 4 && !for_eh)
|
||||
dw2_asm_output_data (4, 0xffffffff, "Initial length escape value"
|
||||
" indicating 64-bit DWARF extension");
|
||||
dw2_asm_output_delta (for_eh ? 4 : dwarf_offset_size, l2, l1,
|
||||
"FDE Length");
|
||||
if (!XCOFF_DEBUGGING_INFO || for_eh)
|
||||
{
|
||||
if (DWARF_INITIAL_LENGTH_SIZE - dwarf_offset_size == 4 && !for_eh)
|
||||
dw2_asm_output_data (4, 0xffffffff, "Initial length escape value"
|
||||
" indicating 64-bit DWARF extension");
|
||||
dw2_asm_output_delta (for_eh ? 4 : dwarf_offset_size, l2, l1,
|
||||
"FDE Length");
|
||||
}
|
||||
ASM_OUTPUT_LABEL (asm_out_file, l1);
|
||||
|
||||
if (for_eh)
|
||||
@@ -801,11 +812,14 @@ output_call_frame_info (int for_eh)
|
||||
/* Output the CIE. */
|
||||
ASM_GENERATE_INTERNAL_LABEL (l1, CIE_AFTER_SIZE_LABEL, for_eh);
|
||||
ASM_GENERATE_INTERNAL_LABEL (l2, CIE_END_LABEL, for_eh);
|
||||
if (DWARF_INITIAL_LENGTH_SIZE - dwarf_offset_size == 4 && !for_eh)
|
||||
dw2_asm_output_data (4, 0xffffffff,
|
||||
"Initial length escape value indicating 64-bit DWARF extension");
|
||||
dw2_asm_output_delta (for_eh ? 4 : dwarf_offset_size, l2, l1,
|
||||
"Length of Common Information Entry");
|
||||
if (!XCOFF_DEBUGGING_INFO || for_eh)
|
||||
{
|
||||
if (DWARF_INITIAL_LENGTH_SIZE - dwarf_offset_size == 4 && !for_eh)
|
||||
dw2_asm_output_data (4, 0xffffffff,
|
||||
"Initial length escape value indicating 64-bit DWARF extension");
|
||||
dw2_asm_output_delta (for_eh ? 4 : dwarf_offset_size, l2, l1,
|
||||
"Length of Common Information Entry");
|
||||
}
|
||||
ASM_OUTPUT_LABEL (asm_out_file, l1);
|
||||
|
||||
/* Now that the CIE pointer is PC-relative for EH,
|
||||
@@ -3665,7 +3679,8 @@ static GTY (()) vec<macinfo_entry, va_gc> *macinfo_table;
|
||||
/* True if .debug_macinfo or .debug_macros section is going to be
|
||||
emitted. */
|
||||
#define have_macinfo \
|
||||
(debug_info_level >= DINFO_LEVEL_VERBOSE \
|
||||
((!XCOFF_DEBUGGING_INFO || HAVE_XCOFF_DWARF_EXTRAS) \
|
||||
&& debug_info_level >= DINFO_LEVEL_VERBOSE \
|
||||
&& !macinfo_table->is_empty ())
|
||||
|
||||
/* Vector of dies for which we should generate .debug_ranges info. */
|
||||
@@ -4967,6 +4982,9 @@ add_AT_loc_list (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_list_ref
|
||||
{
|
||||
dw_attr_node attr;
|
||||
|
||||
if (XCOFF_DEBUGGING_INFO && !HAVE_XCOFF_DWARF_EXTRAS)
|
||||
return;
|
||||
|
||||
attr.dw_attr = attr_kind;
|
||||
attr.dw_attr_val.val_class = dw_val_class_loc_list;
|
||||
attr.dw_attr_val.val_entry = NULL;
|
||||
@@ -4990,6 +5008,9 @@ add_AT_view_list (dw_die_ref die, enum dwarf_attribute attr_kind)
|
||||
{
|
||||
dw_attr_node attr;
|
||||
|
||||
if (XCOFF_DEBUGGING_INFO && !HAVE_XCOFF_DWARF_EXTRAS)
|
||||
return;
|
||||
|
||||
attr.dw_attr = attr_kind;
|
||||
attr.dw_attr_val.val_class = dw_val_class_view_list;
|
||||
attr.dw_attr_val.val_entry = NULL;
|
||||
@@ -11145,12 +11166,15 @@ output_dwarf_version ()
|
||||
static void
|
||||
output_compilation_unit_header (enum dwarf_unit_type ut)
|
||||
{
|
||||
if (DWARF_INITIAL_LENGTH_SIZE - dwarf_offset_size == 4)
|
||||
dw2_asm_output_data (4, 0xffffffff,
|
||||
"Initial length escape value indicating 64-bit DWARF extension");
|
||||
dw2_asm_output_data (dwarf_offset_size,
|
||||
next_die_offset - DWARF_INITIAL_LENGTH_SIZE,
|
||||
"Length of Compilation Unit Info");
|
||||
if (!XCOFF_DEBUGGING_INFO)
|
||||
{
|
||||
if (DWARF_INITIAL_LENGTH_SIZE - dwarf_offset_size == 4)
|
||||
dw2_asm_output_data (4, 0xffffffff,
|
||||
"Initial length escape value indicating 64-bit DWARF extension");
|
||||
dw2_asm_output_data (dwarf_offset_size,
|
||||
next_die_offset - DWARF_INITIAL_LENGTH_SIZE,
|
||||
"Length of Compilation Unit Info");
|
||||
}
|
||||
|
||||
output_dwarf_version ();
|
||||
if (dwarf_version >= 5)
|
||||
@@ -11659,11 +11683,14 @@ output_pubnames (vec<pubname_entry, va_gc> *names)
|
||||
unsigned long pubnames_length = size_of_pubnames (names);
|
||||
pubname_entry *pub;
|
||||
|
||||
if (DWARF_INITIAL_LENGTH_SIZE - dwarf_offset_size == 4)
|
||||
dw2_asm_output_data (4, 0xffffffff,
|
||||
"Initial length escape value indicating 64-bit DWARF extension");
|
||||
dw2_asm_output_data (dwarf_offset_size, pubnames_length,
|
||||
"Pub Info Length");
|
||||
if (!XCOFF_DEBUGGING_INFO)
|
||||
{
|
||||
if (DWARF_INITIAL_LENGTH_SIZE - dwarf_offset_size == 4)
|
||||
dw2_asm_output_data (4, 0xffffffff,
|
||||
"Initial length escape value indicating 64-bit DWARF extension");
|
||||
dw2_asm_output_data (dwarf_offset_size, pubnames_length,
|
||||
"Pub Info Length");
|
||||
}
|
||||
|
||||
/* Version number for pubnames/pubtypes is independent of dwarf version. */
|
||||
dw2_asm_output_data (2, 2, "DWARF pubnames/pubtypes version");
|
||||
@@ -11738,11 +11765,14 @@ output_aranges (void)
|
||||
unsigned i;
|
||||
unsigned long aranges_length = size_of_aranges ();
|
||||
|
||||
if (DWARF_INITIAL_LENGTH_SIZE - dwarf_offset_size == 4)
|
||||
dw2_asm_output_data (4, 0xffffffff,
|
||||
"Initial length escape value indicating 64-bit DWARF extension");
|
||||
dw2_asm_output_data (dwarf_offset_size, aranges_length,
|
||||
"Length of Address Ranges Info");
|
||||
if (!XCOFF_DEBUGGING_INFO)
|
||||
{
|
||||
if (DWARF_INITIAL_LENGTH_SIZE - dwarf_offset_size == 4)
|
||||
dw2_asm_output_data (4, 0xffffffff,
|
||||
"Initial length escape value indicating 64-bit DWARF extension");
|
||||
dw2_asm_output_data (dwarf_offset_size, aranges_length,
|
||||
"Length of Address Ranges Info");
|
||||
}
|
||||
|
||||
/* Version number for aranges is still 2, even up to DWARF5. */
|
||||
dw2_asm_output_data (2, 2, "DWARF aranges version");
|
||||
@@ -13036,11 +13066,14 @@ output_line_info (bool prologue_only)
|
||||
ASM_GENERATE_INTERNAL_LABEL (p2, LN_PROLOG_END_LABEL,
|
||||
output_line_info_generation++);
|
||||
|
||||
if (DWARF_INITIAL_LENGTH_SIZE - dwarf_offset_size == 4)
|
||||
dw2_asm_output_data (4, 0xffffffff,
|
||||
"Initial length escape value indicating 64-bit DWARF extension");
|
||||
dw2_asm_output_delta (dwarf_offset_size, l2, l1,
|
||||
"Length of Source Line Info");
|
||||
if (!XCOFF_DEBUGGING_INFO)
|
||||
{
|
||||
if (DWARF_INITIAL_LENGTH_SIZE - dwarf_offset_size == 4)
|
||||
dw2_asm_output_data (4, 0xffffffff,
|
||||
"Initial length escape value indicating 64-bit DWARF extension");
|
||||
dw2_asm_output_delta (dwarf_offset_size, l2, l1,
|
||||
"Length of Source Line Info");
|
||||
}
|
||||
|
||||
ASM_OUTPUT_LABEL (asm_out_file, l1);
|
||||
|
||||
@@ -29111,6 +29144,8 @@ output_macinfo (const char *debug_line_label, bool early_lto_debug)
|
||||
/* AIX Assembler inserts the length, so adjust the reference to match the
|
||||
offset expected by debuggers. */
|
||||
strcpy (dl_section_ref, debug_line_label);
|
||||
if (XCOFF_DEBUGGING_INFO)
|
||||
strcat (dl_section_ref, DWARF_INITIAL_LENGTH_SIZE_STR);
|
||||
|
||||
/* For .debug_macro emit the section header. */
|
||||
if (!dwarf_strict || dwarf_version >= 5)
|
||||
@@ -32315,6 +32350,8 @@ dwarf2out_finish (const char *filename)
|
||||
/* AIX Assembler inserts the length, so adjust the reference to match the
|
||||
offset expected by debuggers. */
|
||||
strcpy (dl_section_ref, debug_line_section_label);
|
||||
if (XCOFF_DEBUGGING_INFO)
|
||||
strcat (dl_section_ref, DWARF_INITIAL_LENGTH_SIZE_STR);
|
||||
|
||||
if (debug_info_level >= DINFO_LEVEL_TERSE)
|
||||
add_AT_lineptr (main_comp_unit_die, DW_AT_stmt_list,
|
||||
@@ -33030,6 +33067,8 @@ dwarf2out_early_finish (const char *filename)
|
||||
/* AIX Assembler inserts the length, so adjust the reference to match the
|
||||
offset expected by debuggers. */
|
||||
strcpy (dl_section_ref, debug_line_section_label);
|
||||
if (XCOFF_DEBUGGING_INFO)
|
||||
strcat (dl_section_ref, DWARF_INITIAL_LENGTH_SIZE_STR);
|
||||
|
||||
if (debug_info_level >= DINFO_LEVEL_TERSE)
|
||||
add_AT_lineptr (comp_unit_die (), DW_AT_stmt_list, dl_section_ref);
|
||||
|
||||
Reference in New Issue
Block a user