public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
* [Bug debug/94502] New: [aarch64] Missing LR register location in FDE @ 2020-04-06 14:55 luis.machado at linaro dot org 2020-04-08 13:22 ` [Bug debug/94502] " luis.machado at linaro dot org ` (6 more replies) 0 siblings, 7 replies; 8+ messages in thread From: luis.machado at linaro dot org @ 2020-04-06 14:55 UTC (permalink / raw) To: gcc-bugs 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 ^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug debug/94502] [aarch64] Missing LR register location in FDE 2020-04-06 14:55 [Bug debug/94502] New: [aarch64] Missing LR register location in FDE luis.machado at linaro dot org @ 2020-04-08 13:22 ` luis.machado at linaro dot org 2020-04-08 13:57 ` wilco at gcc dot gnu.org ` (5 subsequent siblings) 6 siblings, 0 replies; 8+ messages in thread From: luis.machado at linaro dot org @ 2020-04-08 13:22 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94502 --- Comment #1 from Luis Machado <luis.machado at linaro dot org> --- CC-ing ARM folks so they can assign this to whoever is more appropriate. ^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug debug/94502] [aarch64] Missing LR register location in FDE 2020-04-06 14:55 [Bug debug/94502] New: [aarch64] Missing LR register location in FDE luis.machado at linaro dot org 2020-04-08 13:22 ` [Bug debug/94502] " luis.machado at linaro dot org @ 2020-04-08 13:57 ` wilco at gcc dot gnu.org 2020-04-08 14:15 ` luis.machado at linaro dot org ` (4 subsequent siblings) 6 siblings, 0 replies; 8+ messages in thread From: wilco at gcc dot gnu.org @ 2020-04-08 13:57 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94502 Wilco <wilco at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |wilco at gcc dot gnu.org --- Comment #2 from Wilco <wilco at gcc dot gnu.org> --- (In reply to Luis Machado from comment #1) > CC-ing ARM folks so they can assign this to whoever is more appropriate. Can you list the assembly code? My understanding is that unless LR is saved there is no entry needed as the default action is to return to LR. ^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug debug/94502] [aarch64] Missing LR register location in FDE 2020-04-06 14:55 [Bug debug/94502] New: [aarch64] Missing LR register location in FDE luis.machado at linaro dot org 2020-04-08 13:22 ` [Bug debug/94502] " luis.machado at linaro dot org 2020-04-08 13:57 ` wilco at gcc dot gnu.org @ 2020-04-08 14:15 ` luis.machado at linaro dot org 2020-04-08 14:20 ` wilco at gcc dot gnu.org ` (3 subsequent siblings) 6 siblings, 0 replies; 8+ messages in thread From: luis.machado at linaro dot org @ 2020-04-08 14:15 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94502 --- Comment #3 from Luis Machado <luis.machado at linaro dot org> --- Here's a DWARF and asm dump from the same binary: 000000d0 000000000000001c 00000000 FDE cie=00000000 pc=00000000000007f4..0000000000000830 DW_CFA_advance_loc: 4 to 00000000000007f8 DW_CFA_def_cfa_offset: 32 DW_CFA_advance_loc: 52 to 000000000000082c DW_CFA_def_cfa_offset: 0 DW_CFA_nop DW_CFA_nop 00000000000007f4 <not_inline_func1>: 7f4: d10083ff sub sp, sp, #0x20 7f8: b9000fe0 str w0, [sp, #12] 7fc: 52800040 mov w0, #0x2 // #2 800: b90017e0 str w0, [sp, #20] 804: b9400fe0 ldr w0, [sp, #12] 808: b9001be0 str w0, [sp, #24] 80c: 52800020 mov w0, #0x1 // #1 810: b9001fe0 str w0, [sp, #28] 814: b9401be1 ldr w1, [sp, #24] 818: b9401fe0 ldr w0, [sp, #28] 81c: 0b000021 add w1, w1, w0 820: b94017e0 ldr w0, [sp, #20] 824: 0b000020 add w0, w1, w0 828: 910083ff add sp, sp, #0x20 82c: d65f03c0 ret Sources: static inline ATTR int inline_func1 (int x) { int y = 1; /* inline_func1 */ return y + x; } static int not_inline_func1 (int x) { int y = 2; /* not_inline_func1 */ return y + inline_func1 (x); } -- The lack of a rule for LR means GDB will assume the register is UNSPECIFIED. Is GCC assuming this register is considered to have the same value as an inner frame? ^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug debug/94502] [aarch64] Missing LR register location in FDE 2020-04-06 14:55 [Bug debug/94502] New: [aarch64] Missing LR register location in FDE luis.machado at linaro dot org ` (2 preceding siblings ...) 2020-04-08 14:15 ` luis.machado at linaro dot org @ 2020-04-08 14:20 ` wilco at gcc dot gnu.org 2020-04-08 14:40 ` luis.machado at linaro dot org ` (2 subsequent siblings) 6 siblings, 0 replies; 8+ messages in thread From: wilco at gcc dot gnu.org @ 2020-04-08 14:20 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94502 --- Comment #4 from Wilco <wilco at gcc dot gnu.org> --- (In reply to Luis Machado from comment #3) > The lack of a rule for LR means GDB will assume the register is UNSPECIFIED. > Is GCC assuming this register is considered to have the same value as an > inner frame? Right so it's a leaf function like I suspected. The default rule has always been to use the return register LR if it isn't stored (and that doesn't change if you adjust the stack). Leaf functions have always worked, so I'm surprised you are seeing an issue. ^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug debug/94502] [aarch64] Missing LR register location in FDE 2020-04-06 14:55 [Bug debug/94502] New: [aarch64] Missing LR register location in FDE luis.machado at linaro dot org ` (3 preceding siblings ...) 2020-04-08 14:20 ` wilco at gcc dot gnu.org @ 2020-04-08 14:40 ` luis.machado at linaro dot org 2020-04-08 14:40 ` luis.machado at linaro dot org 2020-04-09 10:34 ` rearnsha at gcc dot gnu.org 6 siblings, 0 replies; 8+ messages in thread From: luis.machado at linaro dot org @ 2020-04-08 14:40 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94502 --- Comment #5 from Luis Machado <luis.machado at linaro dot org> --- Thanks for confirming this behavior. There have been some changes to the DWARF unwinding code that exposed this particular case. I'm guessing this will need to go back to GDB for a fixup. ^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug debug/94502] [aarch64] Missing LR register location in FDE 2020-04-06 14:55 [Bug debug/94502] New: [aarch64] Missing LR register location in FDE luis.machado at linaro dot org ` (4 preceding siblings ...) 2020-04-08 14:40 ` luis.machado at linaro dot org @ 2020-04-08 14:40 ` luis.machado at linaro dot org 2020-04-09 10:34 ` rearnsha at gcc dot gnu.org 6 siblings, 0 replies; 8+ messages in thread From: luis.machado at linaro dot org @ 2020-04-08 14:40 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94502 Luis Machado <luis.machado at linaro dot org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |RESOLVED Resolution|--- |FIXED --- Comment #6 from Luis Machado <luis.machado at linaro dot org> --- Confirmed a non-issue for GCC. ^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug debug/94502] [aarch64] Missing LR register location in FDE 2020-04-06 14:55 [Bug debug/94502] New: [aarch64] Missing LR register location in FDE luis.machado at linaro dot org ` (5 preceding siblings ...) 2020-04-08 14:40 ` luis.machado at linaro dot org @ 2020-04-09 10:34 ` rearnsha at gcc dot gnu.org 6 siblings, 0 replies; 8+ messages in thread From: rearnsha at gcc dot gnu.org @ 2020-04-09 10:34 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94502 Richard Earnshaw <rearnsha at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Resolution|FIXED |INVALID --- Comment #7 from Richard Earnshaw <rearnsha at gcc dot gnu.org> --- Compiler was conforming to specification. Not a bug. ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2020-04-09 10:34 UTC | newest] Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2020-04-06 14:55 [Bug debug/94502] New: [aarch64] Missing LR register location in FDE luis.machado at linaro dot org 2020-04-08 13:22 ` [Bug debug/94502] " luis.machado at linaro dot org 2020-04-08 13:57 ` wilco at gcc dot gnu.org 2020-04-08 14:15 ` luis.machado at linaro dot org 2020-04-08 14:20 ` wilco at gcc dot gnu.org 2020-04-08 14:40 ` luis.machado at linaro dot org 2020-04-08 14:40 ` luis.machado at linaro dot org 2020-04-09 10:34 ` rearnsha at gcc dot gnu.org
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).