[lsb-discuss] Bug in DWARF specs
jacob navia
jacob at jacob.remcomp.fr
Thu Jul 13 08:37:52 PDT 2006
Hi
Bug in the specs or bug in the code?
I do not know, but one of this is wrong:
In the Linux Standard specs in
http://www.freestandards.org/spec/booksets/LSB-Core-generic/LSB-Core-generic/ehframechpt.html
it is written in the specification of the FDE (Frame Description Entry)
the following:
CIE Pointer
A 4 byte unsigned value that when subtracted from the offset of the
current FDE
yields the offset of the start of the associated CIE. This value
shall never be 0.
So, the offset is from the beginning of the current FDE, the specs say....
BUT
What does the code say?
In the file unwind-dw2-fde.h we find:
/* Locate the CIE for a given FDE. */
static inline const struct dwarf_cie *
get_cie (const struct dwarf_fde *f)
{
return (void *)&f->CIE_delta - f->CIE_delta;
}
Note that the first term is &f->CIE_delta and NOT &f as specified by the
standard.
This fact took me two days of work for finding it out. Either a bug in
the code or
a bug in the specs. The difference is 4 bytes since CIE_delta comes
after the length
field.
Please fix the specs, since if you fix the code everything will go
crashing as my
program did...
jacob
More information about the lsb-discuss
mailing list