diff options
author | Jason Molenda <jmolenda@apple.com> | 2015-02-13 23:24:21 +0000 |
---|---|---|
committer | Jason Molenda <jmolenda@apple.com> | 2015-02-13 23:24:21 +0000 |
commit | c980fa92ebac26a059e0d157362e82ae2f0c7d3a (patch) | |
tree | 0de6fab178c9e2f0ad661e8ceb1961fe60296b9c /lldb/source/Core/FormatEntity.cpp | |
parent | eff99e8ac53a83bbf9e408f6f59669132b272ae3 (diff) | |
download | bcm5719-llvm-c980fa92ebac26a059e0d157362e82ae2f0c7d3a.tar.gz bcm5719-llvm-c980fa92ebac26a059e0d157362e82ae2f0c7d3a.zip |
Change the default disassembly format again. First attempt at
changing it was in r219544 - after living on that for a few
months, I wanted to take another crack at this.
The disassembly-format setting still exists and the old format
can be user specified with a setting like
${current-pc-arrow}${addr-file-or-load}{ <${function.name-without-args}${function.concrete-only-addr-offset-no-padding}>}:
This patch was discussed in http://reviews.llvm.org/D7578
<rdar://problem/19726421>
llvm-svn: 229186
Diffstat (limited to 'lldb/source/Core/FormatEntity.cpp')
-rw-r--r-- | lldb/source/Core/FormatEntity.cpp | 37 |
1 files changed, 29 insertions, 8 deletions
diff --git a/lldb/source/Core/FormatEntity.cpp b/lldb/source/Core/FormatEntity.cpp index 48b2c2ddbf7..98f39982adb 100644 --- a/lldb/source/Core/FormatEntity.cpp +++ b/lldb/source/Core/FormatEntity.cpp @@ -94,7 +94,9 @@ static FormatEntity::Entry::Definition g_function_child_entries[] = ENTRY ("addr-offset" , FunctionAddrOffset , UInt64), ENTRY ("concrete-only-addr-offset-no-padding", FunctionAddrOffsetConcrete, UInt64), ENTRY ("line-offset" , FunctionLineOffset , UInt64), - ENTRY ("pc-offset" , FunctionPCOffset , UInt64) + ENTRY ("pc-offset" , FunctionPCOffset , UInt64), + ENTRY ("initial-function" , FunctionInitial , None), + ENTRY ("changed" , FunctionChanged , None) }; static FormatEntity::Entry::Definition g_line_child_entries[] = @@ -335,6 +337,8 @@ FormatEntity::Entry::TypeToCString (Type t) ENUM_TO_CSTR(FunctionAddrOffsetConcrete); ENUM_TO_CSTR(FunctionLineOffset); ENUM_TO_CSTR(FunctionPCOffset); + ENUM_TO_CSTR(FunctionInitial); + ENUM_TO_CSTR(FunctionChanged); ENUM_TO_CSTR(LineEntryFile); ENUM_TO_CSTR(LineEntryLineNumber); ENUM_TO_CSTR(LineEntryStartAddress); @@ -444,7 +448,8 @@ DumpAddressOffsetFromFunction (Stream &s, const ExecutionContext *exe_ctx, const Address &format_addr, bool concrete_only, - bool no_padding) + bool no_padding, + bool print_zero_offsets) { if (format_addr.IsValid()) { @@ -479,10 +484,15 @@ DumpAddressOffsetFromFunction (Stream &s, { addr_t func_file_addr = func_addr.GetFileAddress(); addr_t addr_file_addr = format_addr.GetFileAddress(); - if (addr_file_addr > func_file_addr) + if (addr_file_addr > func_file_addr + || (addr_file_addr == func_file_addr && print_zero_offsets)) + { s.Printf("%s+%s%" PRIu64, addr_offset_padding, addr_offset_padding, addr_file_addr - func_file_addr); + } else if (addr_file_addr < func_file_addr) + { s.Printf("%s-%s%" PRIu64, addr_offset_padding, addr_offset_padding, func_file_addr - addr_file_addr); + } return true; } else @@ -492,10 +502,15 @@ DumpAddressOffsetFromFunction (Stream &s, { addr_t func_load_addr = func_addr.GetLoadAddress (target); addr_t addr_load_addr = format_addr.GetLoadAddress (target); - if (addr_load_addr > func_load_addr) + if (addr_load_addr > func_load_addr + || (addr_load_addr == func_load_addr && print_zero_offsets)) + { s.Printf("%s+%s%" PRIu64, addr_offset_padding, addr_offset_padding, addr_load_addr - func_load_addr); + } else if (addr_load_addr < func_load_addr) + { s.Printf("%s-%s%" PRIu64, addr_offset_padding, addr_offset_padding, func_load_addr - addr_load_addr); + } return true; } } @@ -1803,7 +1818,7 @@ FormatEntity::Format (const Entry &entry, case Entry::Type::FunctionAddrOffset: if (addr) { - if (DumpAddressOffsetFromFunction (s, sc, exe_ctx, *addr, false, false)) + if (DumpAddressOffsetFromFunction (s, sc, exe_ctx, *addr, false, false, false)) return true; } return false; @@ -1811,13 +1826,13 @@ FormatEntity::Format (const Entry &entry, case Entry::Type::FunctionAddrOffsetConcrete: if (addr) { - if (DumpAddressOffsetFromFunction (s, sc, exe_ctx, *addr, true, true)) + if (DumpAddressOffsetFromFunction (s, sc, exe_ctx, *addr, true, true, true)) return true; } return false; case Entry::Type::FunctionLineOffset: - if (DumpAddressOffsetFromFunction (s, sc, exe_ctx, sc->line_entry.range.GetBaseAddress(), false, false)) + if (DumpAddressOffsetFromFunction (s, sc, exe_ctx, sc->line_entry.range.GetBaseAddress(), false, false, false)) return true; return false; @@ -1827,12 +1842,18 @@ FormatEntity::Format (const Entry &entry, StackFrame *frame = exe_ctx->GetFramePtr(); if (frame) { - if (DumpAddressOffsetFromFunction (s, sc, exe_ctx, frame->GetFrameCodeAddress(), false, false)) + if (DumpAddressOffsetFromFunction (s, sc, exe_ctx, frame->GetFrameCodeAddress(), false, false, false)) return true; } } return false; + case Entry::Type::FunctionChanged: + return function_changed == true; + + case Entry::Type::FunctionInitial: + return initial_function == true; + case Entry::Type::LineEntryFile: if (sc && sc->line_entry.IsValid()) { |