This is the mail archive of the gdb@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Dwarf 2 Stack pointer unwind.


Hi,
   We have an ABI where the stack pointer is never saved to the stack
on a function call and there is NO frame pointer. Instead the stack is
maintained by stack pointer increments and decrements.
How does one describe this in Dwarf Call Frame Instructions? The only
rules available for register operations are to save on the stack or to
copy to another register. No rules to describe plus or negative
register adjustments.

  I find it difficult to understand why there is no support for this
in Dwarf 2 or Dwarf 3 as this must be a common idiom.

When we adjust the stack pointer we issue CFA_CFA_def_cfa operations
to describe the new rule to access the CFA, effectively issuing a CFA
rule to compensate for the stack pointer being changed. This is
sufficient to allow stack unwind to work. However, when we look up the
values of automatics in upper stack frames this fails. The reason
being that the address of these variables (in location expressions) is given
as an offset from the stack pointer but there appear to be no unwind
rules for the stack pointer register.

More correctly we'd like to say that the address of an automatic was
CFA plus offset but there doesn't appear to be any support for this.

How does one describe stack pointer changes which do not involve
saving on the stack or use of a frame pointer.

  Con Bradley.



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]