hrev46996 adds 1 changeset to branch 'master' old head: 982b4e98094506904eaea78800808f231b365c63 new head: 3414d0b64d6a36ba8bcb014aed12d391085ef016 overview: http://cgit.haiku-os.org/haiku/log/?qt=range&q=3414d0b+%5E982b4e9 ---------------------------------------------------------------------------- 3414d0b: Debugger: Fix program counter handling issue. - For DWARF4, lowpc/highpc can be specified as constants in addition to addresses. Furthermore, they can also be specified such that highpc is a relative offset from lowpc rather than an absolute address. We weren't handling this case, which gcc4.8 is now using when emitting version 4 debug information. Fixes another part of #10659. There still remains a problem with regards to class/structure variables not showing up in the local variables view. [ Rene Gollent <rene@xxxxxxxxxxx> ] ---------------------------------------------------------------------------- Revision: hrev46996 Commit: 3414d0b64d6a36ba8bcb014aed12d391085ef016 URL: http://cgit.haiku-os.org/haiku/commit/?id=3414d0b Author: Rene Gollent <rene@xxxxxxxxxxx> Date: Sun Mar 9 03:36:22 2014 UTC Ticket: https://dev.haiku-os.org/ticket/10659 ---------------------------------------------------------------------------- 2 files changed, 7 insertions(+), 5 deletions(-) src/apps/debugger/debug_info/DwarfImageDebugInfo.cpp | 6 ++++-- src/apps/debugger/dwarf/AttributeClasses.cpp | 6 +++--- ---------------------------------------------------------------------------- diff --git a/src/apps/debugger/debug_info/DwarfImageDebugInfo.cpp b/src/apps/debugger/debug_info/DwarfImageDebugInfo.cpp index ba463b4..90c4d01 100644 --- a/src/apps/debugger/debug_info/DwarfImageDebugInfo.cpp +++ b/src/apps/debugger/debug_info/DwarfImageDebugInfo.cpp @@ -1,6 +1,6 @@ /* * Copyright 2009-2012, Ingo Weinhold, ingo_weinhold@xxxxxx. - * Copyright 2012-2013, Rene Gollent, rene@xxxxxxxxxxx. + * Copyright 2012-2014, Rene Gollent, rene@xxxxxxxxxxx. * Distributed under the terms of the MIT License. */ @@ -351,8 +351,10 @@ DwarfImageDebugInfo::GetFunctions(const BObjectList<SymbolInfo>& symbols, if (rangeList == NULL) { target_addr_t lowPC = subprogramEntry->LowPC(); target_addr_t highPC = subprogramEntry->HighPC(); - if (lowPC >= highPC) + if (lowPC == highPC) continue; + else if (highPC < lowPC) + highPC += lowPC; rangeList = new(std::nothrow) TargetAddressRangeList( TargetAddressRange(lowPC, highPC - lowPC)); diff --git a/src/apps/debugger/dwarf/AttributeClasses.cpp b/src/apps/debugger/dwarf/AttributeClasses.cpp index 801e783..e326ed1 100644 --- a/src/apps/debugger/dwarf/AttributeClasses.cpp +++ b/src/apps/debugger/dwarf/AttributeClasses.cpp @@ -1,6 +1,6 @@ /* * Copyright 2009, Ingo Weinhold, ingo_weinhold@xxxxxx. - * Copyright 2013, Rene Gollent, rene@xxxxxxxxxxx. + * Copyright 2013-2014, Rene Gollent, rene@xxxxxxxxxxx. * Distributed under the terms of the MIT License. */ @@ -49,8 +49,8 @@ static const attribute_name_info_entry kAttributeNameInfos[] = { { ENTRY(bit_offset), AC_BLOCK | AC_CONSTANT | AC_REFERENCE }, { ENTRY(bit_size), AC_BLOCK | AC_CONSTANT | AC_REFERENCE }, { ENTRY(stmt_list), AC_LINEPTR }, - { ENTRY(low_pc), AC_ADDRESS }, - { ENTRY(high_pc), AC_ADDRESS }, + { ENTRY(low_pc), AC_ADDRESS | AC_CONSTANT | AC_REFERENCE }, + { ENTRY(high_pc), AC_ADDRESS | AC_CONSTANT | AC_REFERENCE }, { ENTRY(language), AC_CONSTANT }, { ENTRY(discr), AC_REFERENCE }, { ENTRY(discr_value), AC_CONSTANT },