From 28ba0b33be60df63fca1d457b70bf791dc7c97ef Mon Sep 17 00:00:00 2001 From: Paul Brook Date: Tue, 8 Jun 2004 13:34:56 +0000 Subject: [PATCH] * gdb/dwarf2-frame.c (decode_frame_entry_1): Decode version 3 CIE records. --- gdb/ChangeLog | 5 +++++ gdb/dwarf2-frame.c | 15 ++++++++++++--- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 370a5d97f9d..973ad818f6c 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2004-06-06 Paul Brook + + * gdb/dwarf2-frame.c (decode_frame_entry_1): Decode version 3 CIE + records. + 2004-06-08 Paul N. Hilfinger * ada-lang.c (lookup_symbol_in_language): New function to allow diff --git a/gdb/dwarf2-frame.c b/gdb/dwarf2-frame.c index fccb94d3e33..52ca337cc8b 100644 --- a/gdb/dwarf2-frame.c +++ b/gdb/dwarf2-frame.c @@ -1268,6 +1268,7 @@ decode_frame_entry_1 (struct comp_unit *unit, char *start, int eh_frame_p) /* This is a CIE. */ struct dwarf2_cie *cie; char *augmentation; + unsigned int cie_version; /* Record the offset into the .debug_frame section of this CIE. */ cie_pointer = start - unit->dwarf_frame_buffer; @@ -1288,7 +1289,8 @@ decode_frame_entry_1 (struct comp_unit *unit, char *start, int eh_frame_p) cie->encoding = encoding_for_size (unit->addr_size); /* Check version number. */ - if (read_1_byte (unit->abfd, buf) != DW_CIE_VERSION) + cie_version = read_1_byte (unit->abfd, buf); + if (cie_version != 1 && cie_version != 3) return NULL; buf += 1; @@ -1314,8 +1316,15 @@ decode_frame_entry_1 (struct comp_unit *unit, char *start, int eh_frame_p) read_signed_leb128 (unit->abfd, buf, &bytes_read); buf += bytes_read; - cie->return_address_register = read_1_byte (unit->abfd, buf); - buf += 1; + if (cie_version == 1) + { + cie->return_address_register = read_1_byte (unit->abfd, buf); + bytes_read = 1; + } + else + cie->return_address_register = read_unsigned_leb128 (unit->abfd, buf, + &bytes_read); + buf += bytes_read; cie->saw_z_augmentation = (*augmentation == 'z'); if (cie->saw_z_augmentation) -- 2.30.2