[Bug debug/94502] New: [aarch64] Missing LR register location in FDE

luis.machado at linaro dot org gcc-bugzilla@gcc.gnu.org
Mon Apr 6 14:55:28 GMT 2020


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94502

            Bug ID: 94502
           Summary: [aarch64] Missing LR register location in FDE
           Product: gcc
           Version: 10.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: debug
          Assignee: unassigned at gcc dot gnu.org
          Reporter: luis.machado at linaro dot org
  Target Milestone: ---

I've noticed this while investigating a GDB testsuite failure in
gdb.opt/inline-break.exp. Basically GDB runs into an internal error due to not
being able to unwind the PC register (which, in turn, requires the LR
register).

I originally noticed this with Ubuntu's GCC (gcc version 7.4.0 (Ubuntu
7.4.0-1ubuntu1~18.04.1). But i managed to reproduce the same problem with gcc
master at revision c72a1b6f8b26de37d1a922a8af143af009747498.

Reproduction steps:

1 - Build the test like so: gcc -g3
<gdb_tree_path>/gdb/testsuite/gdb.opt/inline-break/inline-break.c -o
inline-break

2 - readelf -w inline-break > inline-break.dwarf

3 - Take note of the low address of function not_inline_func1

4 - Locate the FDE entry for the PC above.

5 - You'll notice there is no rule to locate LR, which is required by GDB to
determine PC.

This is the FDE entry i see:

00000108 0000000000000014 0000010c FDE cie=00000000
pc=0000000000400674..00000000004006b0
DW_CFA_advance_loc: 4 to 0000000000400678
DW_CFA_def_cfa_offset: 32
DW_CFA_advance_loc: 52 to 00000000004006ac
DW_CFA_def_cfa_offset: 0
DW_CFA_nop


More information about the Gcc-bugs mailing list