From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp-out1.suse.de (smtp-out1.suse.de [195.135.220.28]) by sourceware.org (Postfix) with ESMTPS id 197EA385841A for ; Wed, 7 Sep 2022 11:45:45 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 197EA385841A Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=suse.cz Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.cz Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id D1E0D33D3E; Wed, 7 Sep 2022 11:45:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_rsa; t=1662551143; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=ylXaGezy3mONnlghp1VNQcCkd6GV6tt/o5OxsKRqCKY=; b=09TmA3lnTNQak2QtvJ1230UZ2mUNC0ETrqkA0EOrfOWFMZ/AOeCB8lcDVKO3KBFaByxWYu Ib6G2GgMv8aiIAu0YPuSenTJRiKv19KHaflprlYGp8FZ5emWZq0chmJ7w8U0eT6xFCOTYq 9UwXmTrMi1CgGVwX1zRgt5G8ZjizuwI= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_ed25519; t=1662551143; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=ylXaGezy3mONnlghp1VNQcCkd6GV6tt/o5OxsKRqCKY=; b=Da1i0bea3tQdluUKrW9SG+P3dNGNNdDIOWJrVJ+tUmv7SVTIwJLXOTNMe5u4PRgV/rp0ae ime2YCA2Z3GMUVBg== Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id B525B13486; Wed, 7 Sep 2022 11:45:43 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id c2/KKmeEGGPMawAAMHmgww (envelope-from ); Wed, 07 Sep 2022 11:45:43 +0000 Message-ID: <3993d3d0-9c4b-1293-07b5-be14a84c2959@suse.cz> Date: Wed, 7 Sep 2022 13:45:43 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.2.1 From: =?UTF-8?Q?Martin_Li=c5=a1ka?= Subject: [PATCH] Restore XCOFF for DWARF on AIX. To: gcc-patches@gcc.gnu.org Content-Language: en-US Cc: David Edelsohn , Richard Biener Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-10.4 required=5.0 tests=BAYES_00,DKIM_INVALID,DKIM_SIGNED,GIT_PATCH_0,KAM_DMARC_STATUS,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: Hi. The patch restores DWARF support for AIX target where XCOFF file container is used. Verified before and after the patch, gcc119 machine (AIX) could not build any run-time library, now it can. Ready to be installed? Thanks, Martin 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. --- gcc/collect2.cc | 7 +++ gcc/config/rs6000/rs6000.cc | 6 +++ gcc/config/rs6000/xcoff.h | 3 ++ gcc/dwarf2asm.cc | 13 +++-- gcc/dwarf2out.cc | 103 +++++++++++++++++++++++++----------- 5 files changed, 97 insertions(+), 35 deletions(-) diff --git a/gcc/collect2.cc b/gcc/collect2.cc index 9715e8eee30..d81c7f28f16 100644 --- a/gcc/collect2.cc +++ b/gcc/collect2.cc @@ -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 diff --git a/gcc/config/rs6000/rs6000.cc b/gcc/config/rs6000/rs6000.cc index 8b4edd281ca..7623d69a8c0 100644 --- a/gcc/config/rs6000/rs6000.cc +++ b/gcc/config/rs6000/rs6000.cc @@ -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 (); diff --git a/gcc/config/rs6000/xcoff.h b/gcc/config/rs6000/xcoff.h index bafc57df59a..cd0f99cb9c6 100644 --- a/gcc/config/rs6000/xcoff.h +++ b/gcc/config/rs6000/xcoff.h @@ -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 diff --git a/gcc/dwarf2asm.cc b/gcc/dwarf2asm.cc index 7eac83f7b0f..274f574f25e 100644 --- a/gcc/dwarf2asm.cc +++ b/gcc/dwarf2asm.cc @@ -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 *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 diff --git a/gcc/dwarf2out.cc b/gcc/dwarf2out.cc index e4183607ff8..2df75904022 100644 --- a/gcc/dwarf2out.cc +++ b/gcc/dwarf2out.cc @@ -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_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 *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); -- 2.37.3