This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH][gdb] Fix gdb.arch/amd64-tailcall-*.exp with -fPIE/-pie


On 8/9/19 11:48 AM, Tom de Vries wrote:
> @@ -240,14 +242,38 @@ pretend_pc (struct frame_info *this_frame, struct tailcall_cache *cache)
>    gdb_assert (next_levels >= 0);
>  
>    if (next_levels < chain->callees)
> -    return chain->call_site[chain->length - next_levels - 1]->pc;
> +    {
> +      struct call_site *call_site
> +	= chain->call_site[chain->length - next_levels - 1];
> +      CORE_ADDR addr = call_site->pc;
> +      struct dwarf2_per_objfile *dwarf2_per_objfile
> +	= call_site->per_cu->dwarf2_per_objfile;
> +       struct objfile *objfile = dwarf2_per_objfile->objfile;
> +       CORE_ADDR baseaddr
> +	 = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
> +       struct gdbarch *gdbarch = get_objfile_arch (objfile);
> +       addr = gdbarch_adjust_dwarf2_addr (gdbarch, addr + baseaddr);
> +      return addr;
> +    }
>    next_levels -= chain->callees;
>  
>    /* Otherwise CHAIN->CALLEES are already covered by CHAIN->CALLERS.  */
>    if (chain->callees != chain->length)
>      {
>        if (next_levels < chain->callers)
> -	return chain->call_site[chain->callers - next_levels - 1]->pc;
> +	{
> +	  struct call_site *call_site
> +	    = chain->call_site[chain->callers - next_levels - 1];
> +	  CORE_ADDR addr = call_site->pc;
> +	  struct dwarf2_per_objfile *dwarf2_per_objfile
> +	    = call_site->per_cu->dwarf2_per_objfile;
> +	  struct objfile *objfile = dwarf2_per_objfile->objfile;
> +	  CORE_ADDR baseaddr
> +	    = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
> +	  struct gdbarch *gdbarch = get_objfile_arch (objfile);
> +	  addr = gdbarch_adjust_dwarf2_addr (gdbarch, addr + baseaddr);
> +	  return addr;
> +	}

It seems like there's a repeated pattern here.  How about
factoring out the common code to a function?

Thanks,
Pedro Alves


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]