Mirror of the gdb mailing list
 help / color / mirror / Atom feed
* ARM stack alignment on hand called functions
@ 2002-11-20  7:29 Kris Warkentin
  2002-11-20  7:58 ` Richard Earnshaw
  0 siblings, 1 reply; 14+ messages in thread
From: Kris Warkentin @ 2002-11-20  7:29 UTC (permalink / raw)
  To: gdb

Hi,

I was chasing a bug that was uncovered by the gdb dejagnu regression suite
on QNX 6 with gdb 5.2.1.  The problem was in the file 'structs.c' which
follows the pattern below.

If I break on main and then do something like 'call fun1()', the inferior
would die with a SIGBUS.  As long as I called functions whose structures
were divisible by 4, like fun4(), fun12(), etc., it was fine.  I chased it
down to stack pointer alignment: the value stuffed into sp when it executed
the dummy frame was not aligned on a 4 byte boundary.

Initially I had tried defining STACK_ALIGN() but it seemed to cause other
problems to pop up.  For example, 'call Fun1(foo1)' would fail with a
SIGBUS.  My final fix which seems to work well was just to add sp = (sp + 3)
& ~3 at the end of arm_push_arguments() in arm-tdep.c just before it returns
sp.  Looking at the code for mips_push_arguments though, it seems like this
might be a little simplistic since there is quite a lot of alignment code in
there.

Can anyone comment on the correctness of this fix?

cheers,

Kris


struct struct1 { char a;};
struct struct2 { char a, b;};
struct struct3 { char a, b, c; };
...

struct struct1 foo1 = {'1'},  L1;
struct struct2 foo2 = { 'a', 'b'},  L2;
struct struct3 foo3 = { 'A', 'B', 'C'},  L3;
...

struct struct1  fun1()
{
  return foo1;
}
struct struct2  fun2()
{
  return foo2;
}
...

void Fun1(struct struct1 foo1)
{
  L1 = foo1;
}
void Fun2(struct struct2 foo2)
{
  L2 = foo2;
}
....


^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2002-11-27 21:13 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <200211272021.PAA04606@hub.ott.qnx.com>
2002-11-27 13:13 ` ARM stack alignment on hand called functions Kris Warkentin
2002-11-20  7:29 Kris Warkentin
2002-11-20  7:58 ` Richard Earnshaw
2002-11-20  8:10   ` Kris Warkentin
2002-11-20  8:21     ` Richard Earnshaw
2002-11-20  8:26       ` Kris Warkentin
2002-11-20  9:18         ` Andrew Cagney
2002-11-20  9:35           ` Kris Warkentin
2002-11-26 14:01             ` Andrew Cagney
2002-11-27  1:18               ` Richard Earnshaw
2002-11-20 10:37         ` Richard Earnshaw
2002-11-20 10:59           ` Kris Warkentin
2002-11-20 11:40             ` Kris Warkentin
2002-11-21  2:58               ` Richard Earnshaw

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox