This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[PING][PATCH][gdb/symtab] Handle gas-generated stabs with -fPIE/-pie
- From: Tom de Vries <tdevries at suse dot de>
- To: gdb-patches at sourceware dot org
- Date: Thu, 29 Aug 2019 17:04:21 +0200
- Subject: [PING][PATCH][gdb/symtab] Handle gas-generated stabs with -fPIE/-pie
- References: <20190816155753.GA22229@delia>
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.
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
>