From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ej1-x62e.google.com (mail-ej1-x62e.google.com [IPv6:2a00:1450:4864:20::62e]) by sourceware.org (Postfix) with ESMTPS id 0FE6A384B12A for ; Wed, 7 Sep 2022 12:04:35 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 0FE6A384B12A Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-ej1-x62e.google.com with SMTP id y3so29902209ejc.1 for ; Wed, 07 Sep 2022 05:04:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date; bh=m3UexXmwH5LFlP9miMlCfMYjWJ/gSPxK2KG5hdwgq8E=; b=hIm7JcuofHf49L4Jlvk1379+f8ibu0qoNpeR2HVfAkHkDIecBjdScApz0cOR9Dz5hg VW/CJ2i9MTqj9UV0ja4v4nKcpVSyna9DrJOPnleX+WE3ruTPZuKleZHrPiur42NMrP44 E/quVQ7Em/KZKmRX8WW0w+CCfphIpEXSUiGACbMX7BTfIB3UHtQXxE+tMnyLNBU8yZjG HOd0wRaOw4neGXm/0Dy2LrJbaxRoPxN0BIO7lup4cDOk9Fw9CrnPgR87SWXvvUmdqWis 1OLynnmdtv/ZwhpEw9enoqcKoTycFncgsqDMUxDvvLgY3q5VGeA8LqGte1nQcyw7A+eb 4dhg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date; bh=m3UexXmwH5LFlP9miMlCfMYjWJ/gSPxK2KG5hdwgq8E=; b=uuwE/ThXcmuD8/eDGfAbCeShdsSOwgfKVA7cHasG8Os0ojMkIy/TAkQmfJLCyIFUwa v2Wy+qIqjPnM212gvUshqKH1LX+ibhrTiVNziuHCXRwhJidmdXQjpo6FEZSP3Rm2BJPS J6/8OBlMmyTIZ5u7h793lg0fchhADP97hhBCg5gFRIx0ydnhuTfDsvJTfkBWWzac0EGf jCluYKeta71DZwfmje3+3sB/4MdWiA3fRZp7BxtSqqm62xBpDtBcLOulD+kqevmtjWfX 2Du0mmOa8/YkTKvQ10SKXNI761Qm4OKCxr4E6SkQ06RgIckd9z9um8R5RlJ/1lF62ptI b5fA== X-Gm-Message-State: ACgBeo2soh03euXsCRS354IqiFYq3GAujJpJI0r5DzE09bIHr+WbyvIg 2SRKaW/jvK6gGvShx44lOPalA5qKtG0p7mU+0ig= X-Google-Smtp-Source: AA6agR4Q8fTwrCN/3NUPToJwMkIvDaY2oYr15Dc1H/5EQvvK00qIzo5X/7oykTLfuW2mJ1/CpT7ITLzcB0oPaz8PFoA= X-Received: by 2002:a17:907:2722:b0:731:23a3:be78 with SMTP id d2-20020a170907272200b0073123a3be78mr2192641ejl.330.1662552273688; Wed, 07 Sep 2022 05:04:33 -0700 (PDT) MIME-Version: 1.0 References: <3993d3d0-9c4b-1293-07b5-be14a84c2959@suse.cz> In-Reply-To: <3993d3d0-9c4b-1293-07b5-be14a84c2959@suse.cz> From: Richard Biener Date: Wed, 7 Sep 2022 14:04:21 +0200 Message-ID: Subject: Re: [PATCH] Restore XCOFF for DWARF on AIX. To: =?UTF-8?Q?Martin_Li=C5=A1ka?= Cc: GCC Patches , David Edelsohn Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-7.6 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,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: On Wed, Sep 7, 2022 at 1:45 PM Martin Li=C5=A1ka wrote: > > Hi. > > The patch restores DWARF support for AIX target where XCOFF file containe= r 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? OK. Thanks, Richard. > 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 wh= ich_pass, > if ((name =3D ldgetname (ldptr, &symbol)) =3D=3D NU= LL) > continue; /* Should never happen. = */ > > +#ifdef XCOFF_DEBUGGING_INFO > + /* All AIX function names have a duplicate entry > + beginning with a dot. */ > + if (*name =3D=3D '.') > + ++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_f= lags); > > +#ifdef XCOFF_DEBUGGING_INFO > + /* For AIX default to 64-bit DWARF. */ > + if (!OPTION_SET_P (dwarf_offset_size)) > + dwarf_offset_size =3D 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 =3D 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 no= t > 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 ori= g_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 =3D 0; i < len; i++) > { > int c =3D str[i]; > if (c =3D=3D '\"') > - fputc ('\\', asm_out_file); > + fputc (XCOFF_DEBUGGING_INFO ? '\"' : '\\', asm_out_file); > else if (c =3D=3D '\\') > 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_IN= FO) > #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 secon= d, > 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 =3D=3D 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 =3D=3D 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 =3D=3D 4 && !for_eh) > - dw2_asm_output_data (4, 0xffffffff, > - "Initial length escape value indicating 64-bit D= WARF 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 =3D=3D 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 >=3D DINFO_LEVEL_VERBOSE \ > + ((!XCOFF_DEBUGGING_INFO || HAVE_XCOFF_DWARF_EXTRAS) \ > + && debug_info_level >=3D 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_attribu= te attr_kind, dw_loc_list_ref > { > dw_attr_node attr; > > + if (XCOFF_DEBUGGING_INFO && !HAVE_XCOFF_DWARF_EXTRAS) > + return; > + > attr.dw_attr =3D attr_kind; > attr.dw_attr_val.val_class =3D dw_val_class_loc_list; > attr.dw_attr_val.val_entry =3D NULL; > @@ -4990,6 +5008,9 @@ add_AT_view_list (dw_die_ref die, enum dwarf_attrib= ute attr_kind) > { > dw_attr_node attr; > > + if (XCOFF_DEBUGGING_INFO && !HAVE_XCOFF_DWARF_EXTRAS) > + return; > + > attr.dw_attr =3D attr_kind; > attr.dw_attr_val.val_class =3D dw_val_class_view_list; > attr.dw_attr_val.val_entry =3D 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 =3D=3D 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 =3D=3D 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 >=3D 5) > @@ -11659,11 +11683,14 @@ output_pubnames (vec *nam= es) > unsigned long pubnames_length =3D size_of_pubnames (names); > pubname_entry *pub; > > - if (DWARF_INITIAL_LENGTH_SIZE - dwarf_offset_size =3D=3D 4) > - dw2_asm_output_data (4, 0xffffffff, > - "Initial length escape value indicating 64-bit D= WARF 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 =3D=3D 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 versio= n. */ > dw2_asm_output_data (2, 2, "DWARF pubnames/pubtypes version"); > @@ -11738,11 +11765,14 @@ output_aranges (void) > unsigned i; > unsigned long aranges_length =3D size_of_aranges (); > > - if (DWARF_INITIAL_LENGTH_SIZE - dwarf_offset_size =3D=3D 4) > - dw2_asm_output_data (4, 0xffffffff, > - "Initial length escape value indicating 64-bit D= WARF 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 =3D=3D 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 =3D=3D 4) > - dw2_asm_output_data (4, 0xffffffff, > - "Initial length escape value indicating 64-bit D= WARF 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 =3D=3D 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, boo= l 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 >=3D 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 >=3D 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 >=3D DINFO_LEVEL_TERSE) > add_AT_lineptr (comp_unit_die (), DW_AT_stmt_list, dl_section_ref); > -- > 2.37.3 >