* dwarf2-frame.c (struct dwarf2_cie): Add saw_z_augmentation.

(decode_frame_entry): Set it.  Skip FDE augmentation.
This commit is contained in:
Richard Henderson 2003-06-01 16:08:54 +00:00
parent f3e0f90b5d
commit 7131cb6efd
2 changed files with 22 additions and 1 deletions

View File

@ -1,3 +1,8 @@
2003-06-01 Richard Henderson <rth@redhat.com>
* dwarf2-frame.c (struct dwarf2_cie): Add saw_z_augmentation.
(decode_frame_entry): Set it. Skip FDE augmentation.
2003-06-01 Richard Henderson <rth@redhat.com>
* dwarf2-frame.c (dwarf2_frame_cache): Handle retaddr_column

View File

@ -65,6 +65,9 @@ struct dwarf2_cie
/* Encoding of addresses. */
unsigned char encoding;
/* True if a 'z' augmentation existed. */
unsigned char saw_z_augmentation;
struct dwarf2_cie *next;
};
@ -1111,7 +1114,8 @@ decode_frame_entry (struct comp_unit *unit, char *buf, int eh_frame_p)
cie->return_address_register = read_1_byte (unit->abfd, buf);
buf += 1;
if (*augmentation == 'z')
cie->saw_z_augmentation = (*augmentation == 'z');
if (cie->saw_z_augmentation)
{
ULONGEST length;
@ -1200,6 +1204,18 @@ decode_frame_entry (struct comp_unit *unit, char *buf, int eh_frame_p)
read_encoded_value (unit, fde->cie->encoding & 0x0f, buf, &bytes_read);
buf += bytes_read;
/* A 'z' augmentation in the CIE implies the presence of an
augmentation field in the FDE as well. The only thing known
to be in here at present is the LSDA entry for EH. So we
can skip the whole thing. */
if (fde->cie->saw_z_augmentation)
{
ULONGEST length;
length = read_unsigned_leb128 (unit->abfd, buf, &bytes_read);
buf += bytes_read + length;
}
fde->instructions = buf;
fde->end = end;