From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 12948 invoked by alias); 20 May 2013 22:09:24 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 12911 invoked by uid 89); 20 May 2013 22:09:20 -0000 X-Spam-SWARE-Status: No, score=-4.5 required=5.0 tests=AWL,BAYES_00,KHOP_THREADED,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE,RP_MATCHES_RCVD,SPF_PASS autolearn=ham version=3.3.1 Received: from mail-yh0-f73.google.com (HELO mail-yh0-f73.google.com) (209.85.213.73) by sourceware.org (qpsmtpd/0.84/v0.84-167-ge50287c) with ESMTP; Mon, 20 May 2013 22:09:18 +0000 Received: by mail-yh0-f73.google.com with SMTP id a41so585019yho.2 for ; Mon, 20 May 2013 15:09:16 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=x-received:from:mime-version:content-type:content-transfer-encoding :message-id:date:to:cc:subject:in-reply-to:references:x-mailer :x-gm-message-state; bh=Mf7IbLFw1/0GySNQLltISTL8ei4SFsBuKBtJlu55nMY=; b=MRV/DKPxIlty79mIEIz03f4RDMbZfWgQpWCrQboVm4JSOomS4xNEgWrGbyjB9RVEIj sq/uyG/EFFxoh0wrI0eDGcfpiIjWT4J0pccu0Kgkd9+sPPwkwUjVHZw7ATJNn/0GAvbo iEjcYmP21m7JNU1OwScm+pElc74aODKlUXPlHEcSpfLbcUIAPDEXv6e65+P5inPlluRm Guqqh6EF/D5XF1A6Yjt7i9Ss4ESr7OgxViDX5CSaBbpiCesnWH8Jqcq8LIsxxecKHFZj EZ4CGZXyELiOiidIEabeFdes47+OlUL9nW0Ctp3m1wrpZH/cG0Gp14tUCdDPTkdOGXHU be/Q== X-Received: by 10.236.133.235 with SMTP id q71mr16654543yhi.13.1369087756734; Mon, 20 May 2013 15:09:16 -0700 (PDT) Received: from corp2gmr1-2.hot.corp.google.com (corp2gmr1-2.hot.corp.google.com [172.24.189.93]) by gmr-mx.google.com with ESMTPS id u47si2278308yhe.0.2013.05.20.15.09.16 for (version=TLSv1.1 cipher=AES128-SHA bits=128/128); Mon, 20 May 2013 15:09:16 -0700 (PDT) Received: from ruffy.mtv.corp.google.com (ruffy.mtv.corp.google.com [172.17.128.44]) by corp2gmr1-2.hot.corp.google.com (Postfix) with ESMTP id 31AB75A415E; Mon, 20 May 2013 15:09:16 -0700 (PDT) From: Doug Evans MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <20890.40715.628277.388931@ruffy.mtv.corp.google.com> Date: Mon, 20 May 2013 22:09:00 -0000 To: Tom Tromey Cc: gdb-patches@sourceware.org Subject: Re: [RFA] Make cu/tu functions in dwarf.exp take a list of options In-Reply-To: <871u95qy90.fsf@fleche.redhat.com> References: <871u95qy90.fsf@fleche.redhat.com> X-Gm-Message-State: ALoCoQnbNHRH3/CCsd1k5ZgBoeupgiDLD1eC/UKf5AvmjPG9IJZuOioxdMwbmcZAil+k0WaLbLC3vY/NwJYgLDdwLznDGkRTtNLYVSrMZ/N+kj6/+f7Zb9rs079HDt58r+N3THoTg62JGfP6tVke7B6tX71IbP2IFP17nFB2ewkgWZ521tz23L0vSCkpACO8hlWz4BJlENU9MAb/F0Y1wPLIC1ryxEhxGA== X-SW-Source: 2013-05/txt/msg00749.txt.bz2 Tom Tromey writes: > >>>>> "Doug" == Doug Evans writes: > > Doug> Ok to check in? > Doug> Regression tested on amd64-linux. > > Looks good to me. > > Doug> 2013-05-17 Doug Evans > > Doug> * lib/dwarf.exp (Dwarf): New variable _abbrev_section. > Doug> (_handle_DW_TAG): Use it. > Doug> (cu): Replace parameters is_64, version, addr_size with options. > Doug> All callers updated. Add Fission support. > > I thought we were supposed to list all the changed files, even in this > case. If not, it would be nice to know, so I can stop doing that in the > future. Here is what I checked in so that the discussion can continue at its own pace. [I forget to mention "tu", so the changelog entry is fixed to include that.] 2013-05-20 Doug Evans * lib/dwarf.exp (Dwarf): New variable _abbrev_section. (_handle_DW_TAG): Use it. (cu, tu): Replace parameters is_64, version, addr_size with options. All callers updated. Add Fission support. * gdb.dwarf2/implptrconst.exp: Update callers of "cu". * gdb.dwarf2/method-ptr.exp: Ditto. * gdb.dwarf2/nostaticblock.exp: Ditto. * gdb.dwarf2/subrange.exp: Ditto. * gdb.dwarf2/missing-sig-type.exp: Update callers of "cu", "tu". Index: testsuite/gdb.dwarf2/implptrconst.exp =================================================================== RCS file: /cvs/src/src/gdb/testsuite/gdb.dwarf2/implptrconst.exp,v retrieving revision 1.2 diff -u -p -r1.2 implptrconst.exp --- testsuite/gdb.dwarf2/implptrconst.exp 13 May 2013 19:32:17 -0000 1.2 +++ testsuite/gdb.dwarf2/implptrconst.exp 20 May 2013 22:01:05 -0000 @@ -29,7 +29,7 @@ set asm_file [standard_output_file $srcf Dwarf::assemble $asm_file { # Creating a CU with 4-byte addresses lets this test link on both # 32- and 64-bit machines. - cu 0 2 4 { + cu { addr_size 4 } { compile_unit {} { declare_labels byte_label size_type_label array_label declare_labels var_label ptr_label Index: testsuite/gdb.dwarf2/method-ptr.exp =================================================================== RCS file: /cvs/src/src/gdb/testsuite/gdb.dwarf2/method-ptr.exp,v retrieving revision 1.3 diff -u -p -r1.3 method-ptr.exp --- testsuite/gdb.dwarf2/method-ptr.exp 1 Feb 2013 19:33:47 -0000 1.3 +++ testsuite/gdb.dwarf2/method-ptr.exp 20 May 2013 22:01:05 -0000 @@ -29,7 +29,7 @@ Dwarf::assemble $asm_file { declare_labels int_label float_label struct_label declare_labels ptr_label subr_label memptr_label - cu 0 2 8 { + cu {} { compile_unit {{language @DW_LANG_C_plus_plus}} { int_label: base_type { {name int} Index: testsuite/gdb.dwarf2/missing-sig-type.exp =================================================================== RCS file: /cvs/src/src/gdb/testsuite/gdb.dwarf2/missing-sig-type.exp,v retrieving revision 1.1 diff -u -p -r1.1 missing-sig-type.exp --- testsuite/gdb.dwarf2/missing-sig-type.exp 17 Apr 2013 21:07:09 -0000 1.1 +++ testsuite/gdb.dwarf2/missing-sig-type.exp 20 May 2013 22:01:05 -0000 @@ -26,7 +26,7 @@ standard_testfile main.c missing-sig-typ # Make some DWARF for the test. set asm_file [standard_output_file $srcfile2] Dwarf::assemble $asm_file { - cu 0 4 8 { + cu {} { compile_unit {} { declare_labels typedef_label @@ -38,7 +38,7 @@ Dwarf::assemble $asm_file { } } - tu 0 4 8 0x1122334455667788 the_type { + tu {} 0x1122334455667788 the_type { type_unit {} { the_type: base_type { {name int} Index: testsuite/gdb.dwarf2/nostaticblock.exp =================================================================== RCS file: /cvs/src/src/gdb/testsuite/gdb.dwarf2/nostaticblock.exp,v retrieving revision 1.1 diff -u -p -r1.1 nostaticblock.exp --- testsuite/gdb.dwarf2/nostaticblock.exp 25 Apr 2013 16:25:37 -0000 1.1 +++ testsuite/gdb.dwarf2/nostaticblock.exp 20 May 2013 22:01:05 -0000 @@ -26,7 +26,7 @@ standard_testfile main.c .S # Make some DWARF for the test. set asm_file [standard_output_file $srcfile2] Dwarf::assemble $asm_file { - cu 0 2 8 { + cu {} { compile_unit { {low_pc 0x104320 DW_FORM_addr} {high_pc 0x1045ed DW_FORM_addr} Index: testsuite/gdb.dwarf2/subrange.exp =================================================================== RCS file: /cvs/src/src/gdb/testsuite/gdb.dwarf2/subrange.exp,v retrieving revision 1.1 diff -u -p -r1.1 subrange.exp --- testsuite/gdb.dwarf2/subrange.exp 18 Feb 2013 21:04:28 -0000 1.1 +++ testsuite/gdb.dwarf2/subrange.exp 20 May 2013 22:01:05 -0000 @@ -26,7 +26,7 @@ standard_testfile method-ptr.cc subrange # Make some DWARF for the test. set asm_file [standard_output_file $srcfile2] Dwarf::assemble $asm_file { - cu 0 2 8 { + cu {} { compile_unit {{language @DW_LANG_Pascal83}} { declare_labels byte_label typedef_label array_label Index: testsuite/lib/dwarf.exp =================================================================== RCS file: /cvs/src/src/gdb/testsuite/lib/dwarf.exp,v retrieving revision 1.8 diff -u -p -r1.8 dwarf.exp --- testsuite/lib/dwarf.exp 6 May 2013 19:44:04 -0000 1.8 +++ testsuite/lib/dwarf.exp 20 May 2013 22:01:05 -0000 @@ -137,6 +137,10 @@ namespace eval Dwarf { # Otherwise, this is the name of a section to write to. variable _defer + # The abbrev section. Typically .debug_abbrev but can be .debug_abbrev.dwo + # for Fission. + variable _abbrev_section + # The next available abbrev number in the current CU's abbrev # table. variable _abbrev_num @@ -401,6 +405,7 @@ namespace eval Dwarf { } proc _handle_DW_TAG {tag_name {attrs {}} {children {}}} { + variable _abbrev_section variable _abbrev_num variable _constants @@ -409,7 +414,7 @@ namespace eval Dwarf { # We somewhat wastefully emit a new abbrev entry for each tag. # There's no reason for this other than laziness. - _defer_output .debug_abbrev { + _defer_output $_abbrev_section { _op .uleb128 $my_abbrev "Abbrev start" _op .uleb128 $_constants($tag_name) $tag_name _op .byte $has_children "has_children" @@ -429,13 +434,13 @@ namespace eval Dwarf { _handle_DW_FORM $attr_form $attr_value - _defer_output .debug_abbrev { + _defer_output $_abbrev_section { _op .uleb128 $_constants($attr_name) $attr_name _op .uleb128 $_constants($attr_form) $attr_form } } - _defer_output .debug_abbrev { + _defer_output $_abbrev_section { # Terminator. _op .byte 0x0 Terminator _op .byte 0x0 Terminator @@ -667,29 +672,52 @@ namespace eval Dwarf { } # Emit a DWARF CU. - # IS_64 is a boolean which is true if you want to emit 64-bit - # DWARF, and false for 32-bit DWARF. - # VERSION is the DWARF version number to emit. - # ADDR_SIZE is the size of addresses in bytes. + # OPTIONS is a list with an even number of elements containing + # option-name and option-value pairs. + # Current options are: + # is_64 0|1 - boolean indicating if you want to emit 64-bit DWARF + # default = 0 (32-bit) + # version n - DWARF version number to emit + # default = 4 + # addr_size n - the size of addresses, 32 or 64 + # default = 64 + # fission 0|1 - boolean indicating if generating Fission debug info + # default = 0 # BODY is Tcl code that emits the DIEs which make up the body of # the CU. It is evaluated in the caller's context. - proc cu {is_64 version addr_size body} { + proc cu {options body} { variable _cu_count + variable _abbrev_section variable _abbrev_num variable _cu_label variable _cu_version variable _cu_addr_size variable _cu_offset_size - set _cu_version $version - if {$is_64} { - set _cu_offset_size 8 - } else { - set _cu_offset_size 4 + # Establish the defaults. + set is_64 0 + set _cu_version 4 + set _cu_addr_size 8 + set fission 0 + set section ".debug_info" + set _abbrev_section ".debug_abbrev" + + foreach { name value } $options { + switch -exact -- $name { + is_64 { set is_64 $value } + version { set _cu_version $value } + addr_size { set _cu_addr_size $value } + fission { set fission $value } + default { error "unknown option $name" } + } + } + set _cu_offset_size [expr { $is_64 ? 8 : 4 }] + if { $fission } { + set section ".debug_info.dwo" + set _abbrev_section ".debug_abbrev.dwo" } - set _cu_addr_size $addr_size - _section .debug_info + _section $section set cu_num [incr _cu_count] set my_abbrevs [_compute_label "abbrev${cu_num}_begin"] @@ -707,17 +735,17 @@ namespace eval Dwarf { _op .4byte "$end_label - $start_label" } define_label $start_label - _op .2byte $version Version + _op .2byte $_cu_version Version _op .4byte $my_abbrevs Abbrevs - _op .byte $addr_size "Pointer size" + _op .byte $_cu_addr_size "Pointer size" - _defer_output .debug_abbrev { + _defer_output $_abbrev_section { define_label $my_abbrevs } uplevel $body - _defer_output .debug_abbrev { + _defer_output $_abbrev_section { # Emit the terminator. _op .byte 0x0 Terminator _op .byte 0x0 Terminator @@ -727,31 +755,55 @@ namespace eval Dwarf { } # Emit a DWARF TU. - # IS_64 is a boolean which is true if you want to emit 64-bit - # DWARF, and false for 32-bit DWARF. - # VERSION is the DWARF version number to emit. - # ADDR_SIZE is the size of addresses in bytes. + # OPTIONS is a list with an even number of elements containing + # option-name and option-value pairs. + # Current options are: + # is_64 0|1 - boolean indicating if you want to emit 64-bit DWARF + # default = 0 (32-bit) + # version n - DWARF version number to emit + # default = 4 + # addr_size n - the size of addresses, 32 or 64 + # default = 64 + # fission 0|1 - boolean indicating if generating Fission debug info + # default = 0 # SIGNATURE is the 64-bit signature of the type. - # TYPE_LABEL is the label of the type defined by this TU. + # TYPE_LABEL is the label of the type defined by this TU, + # or "" if there is no type (i.e., type stubs in Fission). # BODY is Tcl code that emits the DIEs which make up the body of - # the CU. It is evaluated in the caller's context. - proc tu {is_64 version addr_size signature type_label body} { + # the TU. It is evaluated in the caller's context. + proc tu {options signature type_label body} { variable _cu_count + variable _abbrev_section variable _abbrev_num variable _cu_label variable _cu_version variable _cu_addr_size variable _cu_offset_size - set _cu_version $version - if {$is_64} { - set _cu_offset_size 8 - } else { - set _cu_offset_size 4 + # Establish the defaults. + set is_64 0 + set _cu_version 4 + set _cu_addr_size 8 + set fission 0 + set section ".debug_types" + set _abbrev_section ".debug_abbrev" + + foreach { name value } $options { + switch -exact -- $name { + is_64 { set is_64 $value } + version { set _cu_version $value } + addr_size { set _cu_addr_size $value } + fission { set fission $value } + default { error "unknown option $name" } + } + } + set _cu_offset_size [expr { $is_64 ? 8 : 4 }] + if { $fission } { + set section ".debug_types.dwo" + set _abbrev_section ".debug_abbrev.dwo" } - set _cu_addr_size $addr_size - _section .debug_types + _section $section set cu_num [incr _cu_count] set my_abbrevs [_compute_label "abbrev${cu_num}_begin"] @@ -769,25 +821,33 @@ namespace eval Dwarf { _op .4byte "$end_label - $start_label" } define_label $start_label - _op .2byte $version Version + _op .2byte $_cu_version Version _op .4byte $my_abbrevs Abbrevs - _op .byte $addr_size "Pointer size" + _op .byte $_cu_addr_size "Pointer size" _op .8byte $signature Signature - uplevel declare_labels $type_label - upvar $type_label my_type_label - if {$is_64} { - _op .8byte "$my_type_label - $_cu_label" + if { $type_label != "" } { + uplevel declare_labels $type_label + upvar $type_label my_type_label + if {$is_64} { + _op .8byte "$my_type_label - $_cu_label" + } else { + _op .4byte "$my_type_label - $_cu_label" + } } else { - _op .4byte "$my_type_label - $_cu_label" + if {$is_64} { + _op .8byte 0 + } else { + _op .4byte 0 + } } - _defer_output .debug_abbrev { + _defer_output $_abbrev_section { define_label $my_abbrevs } uplevel $body - _defer_output .debug_abbrev { + _defer_output $_abbrev_section { # Emit the terminator. _op .byte 0x0 Terminator _op .byte 0x0 Terminator