[PING^2][PATCH][gdb/symtab] Handle gas-generated stabs with -fPIE/-pie

Tom de Vries tdevries@suse.de
Fri Sep 6 15:31:00 GMT 2019


On 29-08-19 17:04, Tom de Vries wrote:
> On 16-08-19 17:57, Tom de Vries wrote:
>> Hi,
>>
>> With gdb.dwarf2/dw2-ranges.exp and target board unix/-fPIE/-pie, we run into:
>> ...
>> info line main3^M
>> No line number information available for address 0x55555555464c <main3>^M
>> (gdb) FAIL: gdb.dwarf2/dw2-ranges.exp: info line main3
>> ...
>>
>> The main3 function in the executable comes from dw2-ranges3.o, which is
>> generated like this (leaving out -fPIE -pie for clarity):
>> ...
>> $ gcc -S dw2-ranges3.c
>> $ gcc dw2-ranges3.s -o dw2-ranges3.o -gstabs
>> ...
>> So, main3 is described in stabs format, generated by gas.
>>
>> The difference between gcc-generated and gas-generated SLINE stabs is that gcc
>> generates a sequence SO (source), FUN (function), SLINE (source line) whereas
>> gas generates SO, SLINE.
>>
>> The problem is that the line address relocation handling in process_one_symbol
>> assumes an order of SO, FUN, SLINE.
>>
>> Fix this by also handling SO, SLINE.
>>
>> This also fixes FAILs in gdb.btrace/instruction_history.exp with
>> target board stabs/-fPIE/-pie.
>>
>> Tested on x86_64-linux with target boards unix, unix/-fPIE/-pie, stabs, and
>> stabs/-fPIE/-pie.
>>
>> OK for trunk?
>>

Ping^2.

Thanks,
- Tom

>> [gdb/symtab] Handle gas-generated stabs with -fPIE/-pie
>>
>> gdb/ChangeLog:
>>
>> 2019-08-16  Tom de Vries  <tdevries@suse.de>
>>
>> 	PR symtab/12497
>> 	* dbxread.c (process_one_symbol): Handle relocation of SLINE address
>> 	without preceding FUN/FNAME.
>>
>> ---
>>  gdb/dbxread.c | 3 +++
>>  1 file changed, 3 insertions(+)
>>
>> diff --git a/gdb/dbxread.c b/gdb/dbxread.c
>> index e339d1f7ec..e0ab4ec19c 100644
>> --- a/gdb/dbxread.c
>> +++ b/gdb/dbxread.c
>> @@ -2626,6 +2626,9 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, const char *name,
>>  
>>        /* Relocate for dynamic loading and for ELF acc
>>           function-relative symbols.  */
>> +      if (function_start_offset == 0)
>> +	function_start_offset
>> +	  = ANOFFSET (section_offsets, SECT_OFF_TEXT (objfile));
>>        valu += function_start_offset;
>>  
>>        /* GCC 2.95.3 emits the first N_SLINE stab somwehere in the
>>



More information about the Gdb-patches mailing list