From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by sourceware.org (Postfix) with ESMTPS id 59DDE3858D20 for ; Wed, 20 Sep 2023 09:18:32 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 59DDE3858D20 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1695201511; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=QuiT4u7bE0x/7fFqG1W3FyKBfRpw1pMdIl8EnUDYkTY=; b=WWgiTupoZveoHbLg00/FhOFj+HiV45lg1nRTf2noYX8CdMawoLl71i22Z5USfkOjhiRGCi Qd7ZG7LACVvjFnW4oxVHh4GK7oNGfEC9xFX13qcMBFFgiNBXhYW/xpaBze2FusaHnmDUaY lqeWsKc2e/UzI2OcrzKtpogtL8nMwSo= Received: from mail-ed1-f72.google.com (mail-ed1-f72.google.com [209.85.208.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-539-wJq5EjMkPSSbbuBSNu4x4g-1; Wed, 20 Sep 2023 05:18:30 -0400 X-MC-Unique: wJq5EjMkPSSbbuBSNu4x4g-1 Received: by mail-ed1-f72.google.com with SMTP id 4fb4d7f45d1cf-532b7807d5dso1362715a12.1 for ; Wed, 20 Sep 2023 02:18:30 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695201509; x=1695806309; h=content-transfer-encoding:in-reply-to:from:content-language :references:to:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=QuiT4u7bE0x/7fFqG1W3FyKBfRpw1pMdIl8EnUDYkTY=; b=d+s3XL6V6pNJmI0nIXL3agfcB2pWKbgOCsALjYFbMW4L77KCYofMQCZsr0Bnf2UgtT QhmSXbtRByBDLSbwckDoJzQXm7Dd4EcvnhRz9Hypot3k7gKYB8vpHnVLxuyaUYrUkqQk MeUluvpTqoA/yJdm9Ji82Q3GOWzlXDU21DXn2cCJVXK7a3CQ1o2gt+5wdfB9PxxQP0jI DdohXILillHrFgI2lgFnmJosuu+hTevn+rOeFMkRVDalAwhPK8R3JmFTmsrPpNTgWp/o 2OlOdhxC+mMIRsO75ojBgzvKWTi9UevpklqDcdEJSJVa/C28njB16UByrAWYJ58myVW7 VRSw== X-Gm-Message-State: AOJu0YxJH0xhZEQ+uQOgvLiiRT9loTo5qauIV/jSN0eOmnbUS3Jyo7no hPmGYD6GSYrc2lPEfyPriIdMelBZVXAsKIh3kpTaCldjwa1OpOud7eeEfooAGvbXjE1MVOcZXsz 3eLgk1RcRscipzqzIiWRk4kRxUQ/hVA== X-Received: by 2002:a17:907:780a:b0:9a1:c357:c743 with SMTP id la10-20020a170907780a00b009a1c357c743mr1585834ejc.52.1695201508946; Wed, 20 Sep 2023 02:18:28 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEn2BududYBAMLbyEpX+PKRiEoWptxzMG7l5J6trV8xKy2fKmga/YGVOPot9nh2oJMBpD+qjg== X-Received: by 2002:a17:907:780a:b0:9a1:c357:c743 with SMTP id la10-20020a170907780a00b009a1c357c743mr1585825ejc.52.1695201508639; Wed, 20 Sep 2023 02:18:28 -0700 (PDT) Received: from [192.168.0.129] (ip-94-112-227-180.bb.vodafone.cz. [94.112.227.180]) by smtp.gmail.com with ESMTPSA id r20-20020a170906365400b0099bd1a78ef5sm9020855ejb.74.2023.09.20.02.18.28 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 20 Sep 2023 02:18:28 -0700 (PDT) Message-ID: <422fd996-6908-7663-9531-50654a6185cb@redhat.com> Date: Wed, 20 Sep 2023 11:18:27 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.13.0 Subject: Re: [PATCH] [gdb/symtab] Error out for .debug_types section in dwz file To: Tom de Vries , gdb-patches@sourceware.org References: <20230912084326.26830-1-tdevries@suse.de> From: Guinevere Larsen In-Reply-To: <20230912084326.26830-1-tdevries@suse.de> X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Language: en-US Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-11.0 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,KAM_SHORT,NICE_REPLY_A,RCVD_IN_BARRACUDACENTRAL,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE,TXREP 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 12/09/2023 10:43, Tom de Vries via Gdb-patches wrote: > There are two methods to factor out type information in a dwarf4 executable: > - use -fdebug-info-types to generate type units in a .debug_types section, and > - use dwz to create partial units. > > The dwz method has an extra benefit: it also allows to factor out information > between executables into a newly created .dwz file, pointed to by a > .gnu_debugaltlink section. > > There is nothing prohibiting a .gnu_debugaltlink file to contain a > .debug_types section. > > It's just not generated by dwz or any other tool atm, and consequently gdb has > no support for it. Enhancement PR symtab/30838 is open about the lack of > support. > > Make the current situation explicit by emitting a dwarf error: > ... > (gdb) file struct-with-sig-2^M > Reading symbols from struct-with-sig-2...^M > Dwarf Error: .debug_types section not supported in dwz file^M > ... > and add an assert in write_gdbindex: > ... > + /* See enhancement PR symtab/30838. */ > + gdb_assert (!(per_cu->is_dwz && per_cu->is_debug_types)); > ... > to clarify why we can use: > ... > data_buf &cu_list = (per_cu->is_debug_types > ? types_cu_list > : per_cu->is_dwz ? dwz_cu_list : objfile_cu_list); > ... > > The test-case is a modified copy from gdb.dwarf2/struct-with-sig.exp, so it > keeps the copyright years range. > > Tested on x86_64-linux. > > Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30838 > --- Hi! I tested this patch and it does not add any regression, and properly detects the situation. Tested-By: Guinevere Larsen -- Cheers, Guinevere Larsen She/Her/Hers > gdb/dwarf2/dwz.c | 5 + > gdb/dwarf2/dwz.h | 1 + > gdb/dwarf2/index-write.c | 3 + > gdb/dwarf2/read.c | 6 + > .../gdb.dwarf2/struct-with-sig-2.exp | 128 ++++++++++++++++++ > 5 files changed, 143 insertions(+) > create mode 100644 gdb/testsuite/gdb.dwarf2/struct-with-sig-2.exp > > diff --git a/gdb/dwarf2/dwz.c b/gdb/dwarf2/dwz.c > index 447c942da6a..bd2bcb91d83 100644 > --- a/gdb/dwarf2/dwz.c > +++ b/gdb/dwarf2/dwz.c > @@ -91,6 +91,11 @@ locate_dwz_sections (bfd *abfd, asection *sectp, dwz_file *dwz_file) > dwz_file->debug_names.s.section = sectp; > dwz_file->debug_names.size = bfd_section_size (sectp); > } > + else if (dwarf2_elf_names.types.matches (sectp->name)) > + { > + dwz_file->types.s.section = sectp; > + dwz_file->types.size = bfd_section_size (sectp); > + } > } > > /* Attempt to find a .dwz file (whose full path is represented by > diff --git a/gdb/dwarf2/dwz.h b/gdb/dwarf2/dwz.h > index 232b4dbce01..5f61b5e1216 100644 > --- a/gdb/dwarf2/dwz.h > +++ b/gdb/dwarf2/dwz.h > @@ -48,6 +48,7 @@ struct dwz_file > struct dwarf2_section_info macro {}; > struct dwarf2_section_info gdb_index {}; > struct dwarf2_section_info debug_names {}; > + struct dwarf2_section_info types {}; > > /* The dwz's BFD. */ > gdb_bfd_ref_ptr dwz_bfd; > diff --git a/gdb/dwarf2/index-write.c b/gdb/dwarf2/index-write.c > index 11f254e263a..7e2f77e3642 100644 > --- a/gdb/dwarf2/index-write.c > +++ b/gdb/dwarf2/index-write.c > @@ -1211,6 +1211,9 @@ write_gdbindex (dwarf2_per_bfd *per_bfd, cooked_index *table, > const auto insertpair = cu_index_htab.emplace (per_cu, counter); > gdb_assert (insertpair.second); > > + /* See enhancement PR symtab/30838. */ > + gdb_assert (!(per_cu->is_dwz && per_cu->is_debug_types)); > + > /* The all_units list contains CUs read from the objfile as well as > from the eventual dwz file. We need to place the entry in the > corresponding index. */ > diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c > index 98bedbc5d49..cd4005fb7b2 100644 > --- a/gdb/dwarf2/read.c > +++ b/gdb/dwarf2/read.c > @@ -5314,6 +5314,12 @@ create_all_units (dwarf2_per_objfile *per_objfile) > dwz->line.read (objfile); > read_comp_units_from_section (per_objfile, &dwz->info, &dwz->abbrev, 1, > types_htab, rcuh_kind::COMPILE); > + > + if (!dwz->types.empty ()) > + { > + /* See enhancement PR symtab/30838. */ > + error (_("Dwarf Error: .debug_types section not supported in dwz file")); > + } > } > > per_objfile->per_bfd->signatured_types = std::move (types_htab); > diff --git a/gdb/testsuite/gdb.dwarf2/struct-with-sig-2.exp b/gdb/testsuite/gdb.dwarf2/struct-with-sig-2.exp > new file mode 100644 > index 00000000000..f6877fc6a17 > --- /dev/null > +++ b/gdb/testsuite/gdb.dwarf2/struct-with-sig-2.exp > @@ -0,0 +1,128 @@ > +# Copyright 2020-2023 Free Software Foundation, Inc. > + > +# This program 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 of the License, or > +# (at your option) any later version. > +# > +# This program 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. > +# > +# You should have received a copy of the GNU General Public License > +# along with this program. If not, see . > + > +# Variant of struct-with-sig.exp where TUs are in .gnu_debugaltlink file. > + > +load_lib dwarf.exp > + > +# This test can only be run on targets which support DWARF-2 and use gas. > +require dwarf2_support > + > +standard_testfile main-foo.c .S .S > + > +set build_id [string repeat ff 20] > + > +# Make some DWARF for the dwz file. > +set asm_file [standard_output_file $srcfile2] > +Dwarf::assemble $asm_file { > + build_id $::build_id > + > + tu {} 0x0000000000000001 the_type_i { > + type_unit {} { > + declare_labels int_type > + > + the_type_i: structure_type { > + {name s} > + {byte_size 4 sdata} > + } { > + member { > + {name i} > + {type :$int_type} > + } > + } > + int_type: base_type { > + {name int} > + {encoding @DW_ATE_signed} > + {byte_size 4 sdata} > + } > + } > + } > + > + tu {} 0x0000000000000002 the_type_j { > + type_unit {} { > + declare_labels int_type > + > + the_type_j: structure_type { > + {name s} > + {byte_size 4 sdata} > + } { > + member { > + {name j} > + {type :$int_type} > + } > + } > + int_type: base_type { > + {name int} > + {encoding @DW_ATE_signed} > + {byte_size 4 sdata} > + } > + } > + } > +} > + > +# We're using an object instead of executable here to keep cc-with-tweaks.sh > +# from modifying it. It also means we can set the build-id, rather than > +# having to extract it. > +if { [gdb_compile $asm_file $binfile.dwz object {nodebug}] != "" } { > + return -1 > +} > + > +set host_dwz_file [gdb_remote_download host $binfile.dwz] > + > +# Make some DWARF for the executable. > +set asm_file [standard_output_file $srcfile3] > +Dwarf::assemble $asm_file { > + gnu_debugaltlink $::host_dwz_file $::build_id > + > + cu {} { > + compile_unit { > + {DW_AT_language @DW_LANG_C} > + {DW_AT_name main.c} > + } { > + structure_type { > + {name s} > + {signature 0x0000000000000001 ref_sig8} > + {declaration 1 flag} > + } > + DW_TAG_subprogram { > + {MACRO_AT_func {main}} > + } > + } > + } > + > + cu {} { > + compile_unit { > + {DW_AT_language @DW_LANG_C} > + {DW_AT_name foo.c} > + } { > + structure_type { > + {name s} > + {signature 0x0000000000000002 ref_sig8} > + {declaration 1 flag} > + } > + DW_TAG_subprogram { > + {MACRO_AT_func {foo}} > + } > + } > + } > +} > + > +if { [prepare_for_testing "failed to prepare" ${testfile} \ > + [list $srcfile $asm_file] {nodebug}] } { > + return -1 > +} > + > +set re "Dwarf Error: .debug_types section not supported in dwz file" > +gdb_assert { [regexp $re $gdb_file_cmd_msg] } "Dwarf Error message" > > base-commit: 318d3bda5cad124bd11eebb0349d0f183ba625b1