Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Andrew Burgess <andrew.burgess@embecosm.com>
To: Simon Marchi <simon.marchi@efficios.com>
Cc: gdb-patches@sourceware.org
Subject: Re: [PATCH] gdb/testsuite: make DWARF assembler's ranges' "base" and "range" procs
Date: Fri, 6 Nov 2020 18:08:44 +0000	[thread overview]
Message-ID: <20201106180844.GI2729@embecosm.com> (raw)
In-Reply-To: <20201106163359.2689648-1-simon.marchi@efficios.com>

* Simon Marchi via Gdb-patches <gdb-patches@sourceware.org> [2020-11-06 11:33:59 -0500]:

> When creating a .debug_ranges section using the testsuite's DWARF
> assembler, it currently looks like this:
> 
>   ranges {
>     sequence {
>       {base ...}
>       {range ...}
>       {range ...}
>     }
>   }
> 
> The sub-tree of sequence is manually traversed as a list of lists.  I
> think it would be nicer if `base` and `range` where procedure, just like
> the other levels:
> 
>   ranges {
>     sequence {
>       base ...
>       range ...
>       range ...
>     }
>   }
> 
> That makes the implementation more robust, and the usage a bit nicer
> (less special characters).  It also allows having comments in between
> the range list entries:
> 
>   ranges {
>     sequence {
>       base ...
>       range ...
> 
>       # Hello world.
>       range ...
>     }
>   }
> 
> ... which doesn't work with the current approach.
> 
> gdb/testsuite/ChangeLog:
> 
>         * lib/dwarf.exp (ranges): Handle "base" and "range" as
> 	proceduresu.
>         * gdb.dwarf/dw2-bad-elf.exp: Adjust.
>         * gdb.dwarf2/dw2-inline-many-frames.exp: Adjust.
>         * gdb.dwarf2/dw2-inline-stepping.exp: Adjust.
>         * gdb.dwarf2/dw2-ranges-base.exp: Adjust.
>         * gdb.dwarf2/dw2-ranges-func.exp: Adjust.
>         * gdb.dwarf2/dw2-ranges-overlap.exp: Adjust.
>         * gdb.dwarf2/dw2-ranges-psym.exp: Adjust.
>         * gdb.dwarf2/enqueued-cu-base-addr.exp: Adjust.

This seems like a good change to me.

Thanks for doing this.

Andrew


> 
> Change-Id: I0b2af480faff54d0fd4214e0cc8d042d9583a865
> ---
>  gdb/testsuite/gdb.dwarf2/dw2-bad-elf.exp      |  8 +--
>  .../gdb.dwarf2/dw2-inline-many-frames.exp     | 12 ++--
>  .../gdb.dwarf2/dw2-inline-stepping.exp        |  4 +-
>  gdb/testsuite/gdb.dwarf2/dw2-ranges-base.exp  | 12 ++--
>  gdb/testsuite/gdb.dwarf2/dw2-ranges-func.exp  | 14 ++---
>  .../gdb.dwarf2/dw2-ranges-overlap.exp         |  8 +--
>  gdb/testsuite/gdb.dwarf2/dw2-ranges-psym.exp  | 12 ++--
>  .../gdb.dwarf2/enqueued-cu-base-addr.exp      |  2 +-
>  gdb/testsuite/lib/dwarf.exp                   | 55 +++++++++----------
>  9 files changed, 61 insertions(+), 66 deletions(-)
> 
> diff --git a/gdb/testsuite/gdb.dwarf2/dw2-bad-elf.exp b/gdb/testsuite/gdb.dwarf2/dw2-bad-elf.exp
> index e939046e961..20ecd68e7f1 100644
> --- a/gdb/testsuite/gdb.dwarf2/dw2-bad-elf.exp
> +++ b/gdb/testsuite/gdb.dwarf2/dw2-bad-elf.exp
> @@ -107,12 +107,12 @@ Dwarf::assemble $asm_file {
>  
>      ranges {is_64 [is_64_target]} {
>  	ranges_label_1: sequence {
> -	    {base [lindex $main_result 0]}
> -	    {range 0 [lindex $main_result 1]}
> +	    base [lindex $main_result 0]
> +	    range 0 [lindex $main_result 1]
>  	}
>  	ranges_label_2: sequence {
> -	    {base some_func}
> -	    {range 0 64}
> +	    base some_func
> +	    range 0 64
>  	}
>      }
>  
> diff --git a/gdb/testsuite/gdb.dwarf2/dw2-inline-many-frames.exp b/gdb/testsuite/gdb.dwarf2/dw2-inline-many-frames.exp
> index 935d519934c..591a9276577 100644
> --- a/gdb/testsuite/gdb.dwarf2/dw2-inline-many-frames.exp
> +++ b/gdb/testsuite/gdb.dwarf2/dw2-inline-many-frames.exp
> @@ -281,12 +281,12 @@ Dwarf::assemble $asm_file {
>  
>      ranges {is_64 [is_64_target]} {
>  	ranges_label: sequence {
> -	    {range {${main_start}} ${main_end}}
> -	    {range {${ddd_start}} ${ddd_end}}
> -	    {range {${eee_start}} ${eee_end}}
> -	    {range {${fff_start}} ${fff_end}}
> -	    {range {${jjj_start}} ${jjj_end}}
> -	    {range {${kkk_start}} ${kkk_end}}
> +	    range ${main_start} ${main_end}
> +	    range ${ddd_start} ${ddd_end}
> +	    range ${eee_start} ${eee_end}
> +	    range ${fff_start} ${fff_end}
> +	    range ${jjj_start} ${jjj_end}
> +	    range ${kkk_start} ${kkk_end}
>  	}
>      }
>  }
> diff --git a/gdb/testsuite/gdb.dwarf2/dw2-inline-stepping.exp b/gdb/testsuite/gdb.dwarf2/dw2-inline-stepping.exp
> index 24fbb717b22..a5853242dc5 100644
> --- a/gdb/testsuite/gdb.dwarf2/dw2-inline-stepping.exp
> +++ b/gdb/testsuite/gdb.dwarf2/dw2-inline-stepping.exp
> @@ -122,8 +122,8 @@ Dwarf::assemble $asm_file {
>  
>      ranges {is_64 [is_64_target]} {
>  	ranges_label: sequence {
> -	    {range {${main_start}} ${main_end}}
> -	    {range {${bar_start}} ${bar_end}}
> +	    range ${main_start} ${main_end}
> +	    range ${bar_start} ${bar_end}
>  	}
>      }
>  }
> diff --git a/gdb/testsuite/gdb.dwarf2/dw2-ranges-base.exp b/gdb/testsuite/gdb.dwarf2/dw2-ranges-base.exp
> index 3f03fa6f7ec..3164a908e70 100644
> --- a/gdb/testsuite/gdb.dwarf2/dw2-ranges-base.exp
> +++ b/gdb/testsuite/gdb.dwarf2/dw2-ranges-base.exp
> @@ -115,12 +115,12 @@ Dwarf::assemble $asm_file {
>      # base for each function.
>      ranges {is_64 [is_64_target]} {
>  	ranges_label: sequence {
> -	    {base [lindex $main_func 0]}
> -	    {range 0 [lindex $main_func 1]}
> -	    {base [lindex $frame2_func 0]}
> -	    {range 0 [lindex $frame2_func 1]}
> -	    {base [lindex $frame3_func 0]}
> -	    {range 0 [lindex $frame3_func 1]}
> +	    base [lindex $main_func 0]
> +	    range 0 [lindex $main_func 1]
> +	    base [lindex $frame2_func 0]
> +	    range 0 [lindex $frame2_func 1]
> +	    base [lindex $frame3_func 0]
> +	    range 0 [lindex $frame3_func 1]
>  	}
>      }
>  }
> diff --git a/gdb/testsuite/gdb.dwarf2/dw2-ranges-func.exp b/gdb/testsuite/gdb.dwarf2/dw2-ranges-func.exp
> index ac37b24285a..504b4049c2f 100644
> --- a/gdb/testsuite/gdb.dwarf2/dw2-ranges-func.exp
> +++ b/gdb/testsuite/gdb.dwarf2/dw2-ranges-func.exp
> @@ -199,15 +199,15 @@ proc do_test {suffix} {
>  	# Generate ranges data.
>  	ranges {is_64 [is_64_target]} {
>  	    func_ranges_label: sequence {
> -		{range {$foo_start } $foo_end}
> -		{range {$foo_cold_start} $foo_cold_end}
> +		range $foo_start $foo_end
> +		range $foo_cold_start $foo_cold_end
>  	    }
>  	    cu_ranges_label: sequence {
> -		{range {$foo_start } $foo_end}
> -		{range {$foo_cold_start} $foo_cold_end}
> -		{range {$main_start} $main_end}
> -		{range {$bar_start} $bar_end}
> -		{range {$baz_start} $baz_end}
> +		range $foo_start $foo_end
> +		range $foo_cold_start $foo_cold_end
> +		range $main_start $main_end
> +		range $bar_start $bar_end
> +		range $baz_start $baz_end
>  	    }
>  	}
>      }
> diff --git a/gdb/testsuite/gdb.dwarf2/dw2-ranges-overlap.exp b/gdb/testsuite/gdb.dwarf2/dw2-ranges-overlap.exp
> index 59c10c8ae24..485f5c04f1f 100644
> --- a/gdb/testsuite/gdb.dwarf2/dw2-ranges-overlap.exp
> +++ b/gdb/testsuite/gdb.dwarf2/dw2-ranges-overlap.exp
> @@ -66,10 +66,10 @@ Dwarf::assemble $asm_file {
>  
>      ranges {is_64 [is_64_target]} {
>  	ranges_label: sequence {
> -	    {base [lindex $main_func 0]}
> -	    {range 0 [lindex $main_func 1]}
> -	    {base [lindex $bar_func 0]}
> -	    {range 0 [lindex $bar_func 1]}
> +	    base [lindex $main_func 0]
> +	    range 0 [lindex $main_func 1]
> +	    base [lindex $bar_func 0]
> +	    range 0 [lindex $bar_func 1]
>  	}
>      }
>  }
> diff --git a/gdb/testsuite/gdb.dwarf2/dw2-ranges-psym.exp b/gdb/testsuite/gdb.dwarf2/dw2-ranges-psym.exp
> index 4ced125cd18..1be27c2622b 100644
> --- a/gdb/testsuite/gdb.dwarf2/dw2-ranges-psym.exp
> +++ b/gdb/testsuite/gdb.dwarf2/dw2-ranges-psym.exp
> @@ -108,14 +108,14 @@ Dwarf::assemble $asm_file {
>      # Generate ranges data.
>      ranges {is_64 [is_64_target]} {
>  	func_ranges_label: sequence {
> -	    {range {$foo_start } $foo_end}
> -	    {range {$foo_low_start} $foo_low_end}
> +	    range $foo_start $foo_end
> +	    range $foo_low_start $foo_low_end
>  	}
>  	cu_ranges_label: sequence {
> -	    {range {$foo_start } $foo_end}
> -	    {range {$foo_low_start} $foo_low_end}
> -	    {range {$bar_start} $bar_end}
> -	    {range {$baz_start} $baz_end}
> +	    range $foo_start $foo_end
> +	    range $foo_low_start $foo_low_end
> +	    range $bar_start $bar_end
> +	    range $baz_start $baz_end
>  	}
>      }
>  }
> diff --git a/gdb/testsuite/gdb.dwarf2/enqueued-cu-base-addr.exp b/gdb/testsuite/gdb.dwarf2/enqueued-cu-base-addr.exp
> index 77fe6ff5e94..e4ac1c9851e 100644
> --- a/gdb/testsuite/gdb.dwarf2/enqueued-cu-base-addr.exp
> +++ b/gdb/testsuite/gdb.dwarf2/enqueued-cu-base-addr.exp
> @@ -73,7 +73,7 @@ Dwarf::assemble $asm_file {
>  
>      ranges {is_64 [is_64_target]} {
>  	ranges_label: sequence {
> -	    {range 0 [lindex $main_func 1]}
> +	    range 0 [lindex $main_func 1]
>  	}
>      }
>  }
> diff --git a/gdb/testsuite/lib/dwarf.exp b/gdb/testsuite/lib/dwarf.exp
> index c585621ac48..c1596df58be 100644
> --- a/gdb/testsuite/lib/dwarf.exp
> +++ b/gdb/testsuite/lib/dwarf.exp
> @@ -1247,42 +1247,37 @@ namespace eval Dwarf {
>  	set section ".debug_ranges"
>  	_section $section
>  
> -	proc sequence {{ranges {}}} {
> +	proc sequence { body } {
>  	    variable _debug_ranges_64_bit
>  
>  	    # Emit the sequence of addresses.
> -	    set base ""
> -	    foreach range $ranges {
> -		set range [uplevel 1 "subst \"$range\""]
> -		set type [lindex $range 0]
> -		switch -exact -- $type {
> -		    base {
> -			set base [lrange $range 1 end]
> -
> -			if { $_debug_ranges_64_bit } then {
> -			    _op .8byte 0xffffffffffffffff "Base Marker"
> -			    _op .8byte $base "Base Address"
> -			} else {
> -			    _op .4byte 0xffffffff "Base Marker"
> -			    _op .4byte $base "Base Address"
> -			}
> -		    }
> -		    range {
> -			set start [lindex $range 1]
> -			set end [lrange $range 2 end]
> -
> -			if { $_debug_ranges_64_bit } then {
> -			    _op .8byte $start "Start Address"
> -			    _op .8byte $end "End Address"
> -			} else {
> -			    _op .4byte $start "Start Address"
> -			    _op .4byte $end "End Address"
> -			}
> -		    }
> -		    default { error "unknown range type: $type " }
> +
> +	    proc base { addr } {
> +		variable _debug_ranges_64_bit
> +
> +		if { $_debug_ranges_64_bit } then {
> +		    _op .8byte 0xffffffffffffffff "Base Marker"
> +		    _op .8byte $addr "Base Address"
> +		} else {
> +		    _op .4byte 0xffffffff "Base Marker"
> +		    _op .4byte $addr "Base Address"
>  		}
>  	    }
>  
> +	    proc range { start end } {
> +		variable _debug_ranges_64_bit
> +
> +		if { $_debug_ranges_64_bit } then {
> +		    _op .8byte $start "Start Address"
> +		    _op .8byte $end "End Address"
> +		} else {
> +		    _op .4byte $start "Start Address"
> +		    _op .4byte $end "End Address"
> +		}
> +	    }
> +
> +	    uplevel $body
> +
>  	    # End of the sequence.
>  	    if { $_debug_ranges_64_bit } then {
>  		_op .8byte 0x0 "End of Sequence Marker (Part 1)"
> -- 
> 2.28.0
> 

  reply	other threads:[~2020-11-06 18:08 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-11-06 16:33 Simon Marchi via Gdb-patches
2020-11-06 18:08 ` Andrew Burgess [this message]
2020-11-06 18:11   ` Simon Marchi via Gdb-patches

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20201106180844.GI2729@embecosm.com \
    --to=andrew.burgess@embecosm.com \
    --cc=gdb-patches@sourceware.org \
    --cc=simon.marchi@efficios.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox