From 3ac8569f3cfc9557e2b4b793889364c1988eee36 Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Fri, 6 Nov 2009 18:29:27 +0000 Subject: [PATCH] Handle the "eh" CIE augmentation which can appear in a .eh_frame section. Hopefully the last hurdle gcc 2 has prepared for preventing variables to show up. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33924 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/apps/debugger/dwarf/DwarfFile.cpp | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/apps/debugger/dwarf/DwarfFile.cpp b/src/apps/debugger/dwarf/DwarfFile.cpp index 21a713274f..70f807f372 100644 --- a/src/apps/debugger/dwarf/DwarfFile.cpp +++ b/src/apps/debugger/dwarf/DwarfFile.cpp @@ -1395,8 +1395,23 @@ DwarfFile::_ParseCIE(CompilationUnit* unit, CfaContext& context, uint8 version = dataReader.Read(0); const char* augmentation = dataReader.ReadString(); - if (version != 1 || augmentation == NULL || *augmentation != '\0') + if (version != 1) { + TRACE_CFI(" cie: length: %llu, version: %u -- unsupported\n", + length, version); return B_UNSUPPORTED; + } + + if (augmentation == NULL || *augmentation != '\0') { + if (strcmp(augmentation, "eh") == 0) { + // the augmentation consists of the exception table pointer -- just + // ignore it + dataReader.ReadAddress(0); + } else { + TRACE_CFI(" cie: length: %llu, version: %u, augmentation: \"%s\" " + "-- unsupported\n", length, version, augmentation); + return B_UNSUPPORTED; + } + } context.SetCodeAlignment(dataReader.ReadUnsignedLEB128(0)); context.SetDataAlignment(dataReader.ReadSignedLEB128(0));