[PATCH 1/1] gdb, btrace: Fix clang build

Simon Marchi simark@simark.ca
Tue Aug 20 15:07:41 GMT 2024


On 8/20/24 10:46 AM, Willgerodt, Felix wrote:
>> -----Original Message-----
>> From: Simon Marchi <simark@simark.ca>
>> Sent: Dienstag, 20. August 2024 15:47
>> To: Willgerodt, Felix <felix.willgerodt@intel.com>; gdb-patches@sourceware.org
>> Subject: Re: [PATCH 1/1] gdb, btrace: Fix clang build
>>
>> On 8/20/24 4:20 AM, Felix Willgerodt wrote:
>>> @@ -1233,7 +1234,7 @@ handle_pt_insn_events (struct btrace_thread_info
>> *btinfo,
>>>  #if defined (HAVE_PT_INSN_EVENT)
>>>    while (status & pts_event_pending)
>>>      {
>>> -      struct btrace_function *bfun;
>>> +      struct btrace_function *bfun = nullptr;
>>
>> In my version, I just removed the bfun parameter from the
>> handle_pt_aux_insn function, because it appears to be unused.  We pass a
>> bfun value to handle_pt_aux_insn, but it immediately overwrites it.
>>
>> Initializing bfun here is unnecessary, because other users do assign it
>> properly.  In fact, the declaration could be moved to each point where bfun is
>> assigned (i.e. have two separate declarations).  That helps show the
>> uses of bfun are unrelated.
>>
>> Simon
> 
> Hi Simon,
> 
> I did see that you did that, but I didn't like the unused declaration in case of
> ptwrite. We already have a patch series lined up for upstreaming that will
> add a lot more cases like ptwrite here.
> 
> I would go with what you proposed and make each case use their own
> declaration:
> 
> diff --git a/gdb/btrace.c b/gdb/btrace.c
> index 95ff27cc4fe..7d8be3314e8 100644
> --- a/gdb/btrace.c
> +++ b/gdb/btrace.c
> @@ -1200,7 +1200,8 @@ pt_btrace_insn_flags (const struct pt_insn &insn)
>  static btrace_insn
>  pt_btrace_insn (const struct pt_insn &insn)
>  {
> -  return {(CORE_ADDR) insn.ip, (gdb_byte) insn.size,
> +  return {{static_cast<CORE_ADDR> (insn.ip)},
> +	  static_cast<gdb_byte> (insn.size),
>  	  pt_reclassify_insn (insn.iclass),
>  	  pt_btrace_insn_flags (insn)};
>  }
> @@ -1209,13 +1210,13 @@ pt_btrace_insn (const struct pt_insn &insn)
>  /* Helper for events that will result in an aux_insn.  */
>  
>  static void
> -handle_pt_aux_insn (btrace_thread_info *btinfo, btrace_function *bfun,
> -		    std::string &aux_str, CORE_ADDR ip)
> +handle_pt_aux_insn (btrace_thread_info *btinfo, std::string &aux_str,
> +		    CORE_ADDR ip)
>  {
>    btinfo->aux_data.emplace_back (std::move (aux_str));
> -  bfun = ftrace_update_function (btinfo, ip);
> +  struct btrace_function *bfun = ftrace_update_function (btinfo, ip);
>  
> -  btrace_insn insn {btinfo->aux_data.size () - 1, 0,
> +  btrace_insn insn {{btinfo->aux_data.size () - 1}, 0,
>  		    BTRACE_INSN_AUX, 0};
>  
>    ftrace_update_insns (bfun, insn);
> @@ -1233,7 +1234,6 @@ handle_pt_insn_events (struct btrace_thread_info *btinfo,
>  #if defined (HAVE_PT_INSN_EVENT)
>    while (status & pts_event_pending)
>      {
> -      struct btrace_function *bfun;
>        struct pt_event event;
>        uint64_t offset;
>  
> @@ -1247,12 +1247,14 @@ handle_pt_insn_events (struct btrace_thread_info *btinfo,
>  	  break;
>  
>  	case ptev_enabled:
> +	{
>  	  if (event.status_update != 0)
>  	    break;
>  
>  	  if (event.variant.enabled.resumed == 0 && !btinfo->functions.empty ())
>  	    {
> -	      bfun = ftrace_new_gap (btinfo, BDE_PT_DISABLED, gaps);
> +	      struct btrace_function *bfun
> +		= ftrace_new_gap (btinfo, BDE_PT_DISABLED, gaps);
>  
>  	      pt_insn_get_offset (decoder, &offset);
>  
> @@ -1261,9 +1263,12 @@ handle_pt_insn_events (struct btrace_thread_info *btinfo,
>  	    }
>  
>  	  break;
> +	}
>  
>  	case ptev_overflow:
> -	  bfun = ftrace_new_gap (btinfo, BDE_PT_OVERFLOW, gaps);
> +	{
> +	  struct btrace_function *bfun
> +	    = ftrace_new_gap (btinfo, BDE_PT_OVERFLOW, gaps);
>  
>  	  pt_insn_get_offset (decoder, &offset);
>  
> @@ -1271,6 +1276,7 @@ handle_pt_insn_events (struct btrace_thread_info *btinfo,
>  		   bfun->insn_offset - 1, offset);
>  
>  	  break;
> +	}
>  #if defined (HAVE_STRUCT_PT_EVENT_VARIANT_PTWRITE)
>  	case ptev_ptwrite:
>  	  {
> @@ -1320,7 +1326,7 @@ handle_pt_insn_events (struct btrace_thread_info *btinfo,
>  	    if (!ptw_string.has_value ())
>  	      *ptw_string = hex_string (event.variant.ptwrite.payload);
>  
> -	    handle_pt_aux_insn (btinfo, bfun, *ptw_string, pc);
> +	    handle_pt_aux_insn (btinfo, *ptw_string, pc);
>  
>  	    break;
>  	  }
> 
> Is that ok?

This version LGTM, thanks.

Approved-By: Simon Marchi <simon.marchi@efficios.com>

Simon


More information about the Gdb-patches mailing list