public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug debug/109354] New: [arm32] Parameter stored on stack gets wrong debug info with -Og or higher
@ 2023-03-31 8:27 sirl at gcc dot gnu.org
0 siblings, 0 replies; only message in thread
From: sirl at gcc dot gnu.org @ 2023-03-31 8:27 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109354
Bug ID: 109354
Summary: [arm32] Parameter stored on stack gets wrong debug
info with -Og or higher
Product: gcc
Version: 13.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: debug
Assignee: unassigned at gcc dot gnu.org
Reporter: sirl at gcc dot gnu.org
Target Milestone: ---
Hi,
this small testcase
class c1
{
struct s1
{
unsigned int m_n1;
};
struct s2
{
s1 sM1;
s1 sM2;
};
s2 m_s2;
int m_bsoM1;
int m_bsoM2;
struct OnOffP {
unsigned int count;
int so;
s1 *ts;
};
void OnI(struct OnOffP *p);
void OffI(struct OnOffP *p);
virtual void OnOff(unsigned int nCount, bool bOff, bool bM1);
};
void c1::OnOff(unsigned int nCount, bool bOff, bool bM1)
{
struct OnOffP eOffP;
// 2 variables only added to better show the behaviour
volatile int xxx = 0xaa00aa;
volatile int xyz = 0xab00ab;
eOffP.count = nCount;
eOffP.so = m_bsoM2;
eOffP.ts = &(m_s2.sM2);
if (bM1) {
eOffP.so = m_bsoM1;
eOffP.ts = &(m_s2.sM1);
}
if (!bOff)
OnI(&eOffP);
else
OffI(&eOffP);
xxx++;
xyz++;
}
compiled with "arm-none-eabi-g++-13 -c -mcpu=cortex-r5 -mfpu=vfpv3-d16
-mfloat-abi=hard -fno-exceptions -g -Og" generates wrong debug info for the
nCount parameter.
llvm-dwarfdump-16.0.0 --name nCount --name eOffP -name xyz
arm-debug-info-bug1.o shows:
arm-debug-info-bug1.o: file format elf32-littlearm
0x000001c5: DW_TAG_formal_parameter
DW_AT_name ("nCount")
DW_AT_decl_file ("arm-debug-info-bug1.cpp")
DW_AT_decl_line (31)
DW_AT_decl_column (0x1d)
DW_AT_type (0x0000002c "unsigned int")
DW_AT_location (0x0000005c:
[0x00000000, 0x00000028): DW_OP_reg1 R1
[0x00000028, 0x00000054): DW_OP_fbreg -28
[0x00000054, 0x00000057): DW_OP_breg1 R1+0
[0x00000057, 0x00000078): DW_OP_GNU_entry_value(<decoding
error> f5 01 25 f7 2c f7 00 9f
[0x00000078, 0x0000007c): DW_OP_fbreg -28
[0x0000007c, 0x0000007f): DW_OP_breg1 R1+0
[0x0000007f, 0x00000084): DW_OP_GNU_entry_value(<decoding
error> f5 01 25 f7 2c f7 00 9f)
DW_AT_GNU_locviews (0x0000004e)
0x00000201: DW_TAG_variable
DW_AT_name ("eOffP")
DW_AT_decl_file ("arm-debug-info-bug1.cpp")
DW_AT_decl_line (33)
DW_AT_decl_column (0x10)
DW_AT_type (0x0000008b "c1::OnOffP")
DW_AT_location (DW_OP_fbreg -20)
0x0000021f: DW_TAG_variable
DW_AT_name ("xyz")
DW_AT_decl_file ("arm-debug-info-bug1.cpp")
DW_AT_decl_line (35)
DW_AT_decl_column (0x0f)
DW_AT_type (0x00000163 "volatile int")
DW_AT_location (DW_OP_fbreg -28)
So according to this the debug info says that "nCount" (DW_OP_fbreg -28)
overlaps with "xyz" (DW_OP_fbreg -28), when in fact it overlaps with
"eOffP.count" (DW_OP_fbreg -20).
It's unclear if this is caused by wrong debug info generation, wrong lifetime
or both. When we see cases like this, a common point seems to be that the
offset difference is always 8 (-20 vs -28).
The bug seems to be long-standing though, we saw it with 10.4.0, 12.2.1 and
13.0.1 so far.
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2023-03-31 8:27 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-03-31 8:27 [Bug debug/109354] New: [arm32] Parameter stored on stack gets wrong debug info with -Og or higher sirl 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).