diff options
author | Adrian Prantl <aprantl@apple.com> | 2018-04-30 16:49:04 +0000 |
---|---|---|
committer | Adrian Prantl <aprantl@apple.com> | 2018-04-30 16:49:04 +0000 |
commit | 05097246f352eca76207c9ebb08656c88bdf751a (patch) | |
tree | bfc4ec8250a939aaf4ade6fc6c528726183e5367 /lldb/source/Plugins | |
parent | add59c052dd6768fd54431e6a3bf045e7f25cb59 (diff) | |
download | bcm5719-llvm-05097246f352eca76207c9ebb08656c88bdf751a.tar.gz bcm5719-llvm-05097246f352eca76207c9ebb08656c88bdf751a.zip |
Reflow paragraphs in comments.
This is intended as a clean up after the big clang-format commit
(r280751), which unfortunately resulted in many of the comment
paragraphs in LLDB being very hard to read.
FYI, the script I used was:
import textwrap
import commands
import os
import sys
import re
tmp = "%s.tmp"%sys.argv[1]
out = open(tmp, "w+")
with open(sys.argv[1], "r") as f:
header = ""
text = ""
comment = re.compile(r'^( *//) ([^ ].*)$')
special = re.compile(r'^((([A-Z]+[: ])|([0-9]+ )).*)|(.*;)$')
for line in f:
match = comment.match(line)
if match and not special.match(match.group(2)):
# skip intentionally short comments.
if not text and len(match.group(2)) < 40:
out.write(line)
continue
if text:
text += " " + match.group(2)
else:
header = match.group(1)
text = match.group(2)
continue
if text:
filled = textwrap.wrap(text, width=(78-len(header)),
break_long_words=False)
for l in filled:
out.write(header+" "+l+'\n')
text = ""
out.write(line)
os.rename(tmp, sys.argv[1])
Differential Revision: https://reviews.llvm.org/D46144
llvm-svn: 331197
Diffstat (limited to 'lldb/source/Plugins')
193 files changed, 5317 insertions, 6341 deletions
diff --git a/lldb/source/Plugins/ABI/MacOSX-arm/ABIMacOSX_arm.cpp b/lldb/source/Plugins/ABI/MacOSX-arm/ABIMacOSX_arm.cpp index 1bd1c1bf8dd..e0e293d7ae6 100644 --- a/lldb/source/Plugins/ABI/MacOSX-arm/ABIMacOSX_arm.cpp +++ b/lldb/source/Plugins/ABI/MacOSX-arm/ABIMacOSX_arm.cpp @@ -1466,8 +1466,8 @@ bool ABIMacOSX_arm::GetArgumentValues(Thread &thread, ValueList &values) const { addr_t sp = 0; for (uint32_t value_idx = 0; value_idx < num_values; ++value_idx) { - // We currently only support extracting values with Clang QualTypes. - // Do we care about others? + // We currently only support extracting values with Clang QualTypes. Do we + // care about others? Value *value = values.GetValueAtIndex(value_idx); if (!value) @@ -1589,10 +1589,8 @@ ValueObjectSP ABIMacOSX_arm::GetReturnValueObjectImpl( case 128: if (IsArmv7kProcess()) { // "A composite type not larger than 16 bytes is returned in r0-r3. The - // format is - // as if the result had been stored in memory at a word-aligned address - // and then - // loaded into r0-r3 with an ldm instruction" + // format is as if the result had been stored in memory at a word- + // aligned address and then loaded into r0-r3 with an ldm instruction" { const RegisterInfo *r1_reg_info = reg_ctx->GetRegisterInfoByName("r1", 0); @@ -1756,10 +1754,8 @@ Status ABIMacOSX_arm::SetReturnValueObject(lldb::StackFrameSP &frame_sp, } } else if (num_bytes <= 16 && IsArmv7kProcess()) { // "A composite type not larger than 16 bytes is returned in r0-r3. The - // format is - // as if the result had been stored in memory at a word-aligned address - // and then - // loaded into r0-r3 with an ldm instruction" + // format is as if the result had been stored in memory at a word-aligned + // address and then loaded into r0-r3 with an ldm instruction" const RegisterInfo *r0_info = reg_ctx->GetRegisterInfoByName("r0", 0); const RegisterInfo *r1_info = reg_ctx->GetRegisterInfoByName("r1", 0); diff --git a/lldb/source/Plugins/ABI/MacOSX-arm64/ABIMacOSX_arm64.cpp b/lldb/source/Plugins/ABI/MacOSX-arm64/ABIMacOSX_arm64.cpp index e301b21d542..85f864ec756 100644 --- a/lldb/source/Plugins/ABI/MacOSX-arm64/ABIMacOSX_arm64.cpp +++ b/lldb/source/Plugins/ABI/MacOSX-arm64/ABIMacOSX_arm64.cpp @@ -1760,8 +1760,8 @@ bool ABIMacOSX_arm64::GetArgumentValues(Thread &thread, addr_t sp = 0; for (uint32_t value_idx = 0; value_idx < num_values; ++value_idx) { - // We currently only support extracting values with Clang QualTypes. - // Do we care about others? + // We currently only support extracting values with Clang QualTypes. Do we + // care about others? Value *value = values.GetValueAtIndex(value_idx); if (!value) @@ -2022,10 +2022,9 @@ bool ABIMacOSX_arm64::CreateDefaultUnwindPlan(UnwindPlan &unwind_plan) { } // AAPCS64 (Procedure Call Standard for the ARM 64-bit Architecture) says -// registers x19 through x28 and sp are callee preserved. -// v8-v15 are non-volatile (and specifically only the lower 8 bytes of these -// regs), -// the rest of the fp/SIMD registers are volatile. +// registers x19 through x28 and sp are callee preserved. v8-v15 are non- +// volatile (and specifically only the lower 8 bytes of these regs), the rest +// of the fp/SIMD registers are volatile. // We treat x29 as callee preserved also, else the unwinder won't try to // retrieve fp saves. @@ -2209,14 +2208,14 @@ static bool LoadValueFromConsecutiveGPRRegisters( } else { const RegisterInfo *reg_info = nullptr; if (is_return_value) { - // We are assuming we are decoding this immediately after returning - // from a function call and that the address of the structure is in x8 + // We are assuming we are decoding this immediately after returning from + // a function call and that the address of the structure is in x8 reg_info = reg_ctx->GetRegisterInfoByName("x8", 0); } else { // We are assuming we are stopped at the first instruction in a function - // and that the ABI is being respected so all parameters appear where they - // should be (functions with no external linkage can legally violate the - // ABI). + // and that the ABI is being respected so all parameters appear where + // they should be (functions with no external linkage can legally violate + // the ABI). if (NGRN >= 8) return false; diff --git a/lldb/source/Plugins/ABI/MacOSX-i386/ABIMacOSX_i386.cpp b/lldb/source/Plugins/ABI/MacOSX-i386/ABIMacOSX_i386.cpp index 716a73b854b..9e5e39ec28c 100644 --- a/lldb/source/Plugins/ABI/MacOSX-i386/ABIMacOSX_i386.cpp +++ b/lldb/source/Plugins/ABI/MacOSX-i386/ABIMacOSX_i386.cpp @@ -736,10 +736,10 @@ bool ABIMacOSX_i386::PrepareTrivialCall(Thread &thread, addr_t sp, uint32_t sp_reg_num = reg_ctx->ConvertRegisterKindToRegisterNumber( eRegisterKindGeneric, LLDB_REGNUM_GENERIC_SP); - // When writing a register value down to memory, the register info used - // to write memory just needs to have the correct size of a 32 bit register, - // the actual register it pertains to is not important, just the size needs - // to be correct. Here we use "eax"... + // When writing a register value down to memory, the register info used to + // write memory just needs to have the correct size of a 32 bit register, the + // actual register it pertains to is not important, just the size needs to be + // correct. Here we use "eax"... const RegisterInfo *reg_info_32 = reg_ctx->GetRegisterInfoByName("eax"); if (!reg_info_32) return false; // TODO this should actually never happen @@ -828,8 +828,8 @@ bool ABIMacOSX_i386::GetArgumentValues(Thread &thread, if (!value) return false; - // We currently only support extracting values with Clang QualTypes. - // Do we care about others? + // We currently only support extracting values with Clang QualTypes. Do we + // care about others? CompilerType compiler_type(value->GetCompilerType()); if (compiler_type) { bool is_signed; @@ -1075,12 +1075,13 @@ bool ABIMacOSX_i386::RegisterIsVolatile(const RegisterInfo *reg_info) { } // v. -// http://developer.apple.com/library/mac/#documentation/developertools/Conceptual/LowLevelABI/130-IA-32_Function_Calling_Conventions/IA32.html#//apple_ref/doc/uid/TP40002492-SW4 +// http://developer.apple.com/library/mac/#documentation/developertools/Conceptual/LowLevelABI/130 +// -IA- +// 32_Function_Calling_Conventions/IA32.html#//apple_ref/doc/uid/TP40002492-SW4 // // This document ("OS X ABI Function Call Guide", chapter "IA-32 Function -// Calling Conventions") -// says that the following registers on i386 are preserved aka non-volatile aka -// callee-saved: +// Calling Conventions") says that the following registers on i386 are +// preserved aka non-volatile aka callee-saved: // // ebx, ebp, esi, edi, esp diff --git a/lldb/source/Plugins/ABI/SysV-arm/ABISysV_arm.cpp b/lldb/source/Plugins/ABI/SysV-arm/ABISysV_arm.cpp index 882d5cd23e5..af7ac469e6d 100644 --- a/lldb/source/Plugins/ABI/SysV-arm/ABISysV_arm.cpp +++ b/lldb/source/Plugins/ABI/SysV-arm/ABISysV_arm.cpp @@ -1470,8 +1470,8 @@ bool ABISysV_arm::GetArgumentValues(Thread &thread, ValueList &values) const { addr_t sp = 0; for (uint32_t value_idx = 0; value_idx < num_values; ++value_idx) { - // We currently only support extracting values with Clang QualTypes. - // Do we care about others? + // We currently only support extracting values with Clang QualTypes. Do we + // care about others? Value *value = values.GetValueAtIndex(value_idx); if (!value) diff --git a/lldb/source/Plugins/ABI/SysV-arm64/ABISysV_arm64.cpp b/lldb/source/Plugins/ABI/SysV-arm64/ABISysV_arm64.cpp index dbe333c4649..2c221689954 100644 --- a/lldb/source/Plugins/ABI/SysV-arm64/ABISysV_arm64.cpp +++ b/lldb/source/Plugins/ABI/SysV-arm64/ABISysV_arm64.cpp @@ -1763,8 +1763,8 @@ bool ABISysV_arm64::GetArgumentValues(Thread &thread, ValueList &values) const { addr_t sp = 0; for (uint32_t value_idx = 0; value_idx < num_values; ++value_idx) { - // We currently only support extracting values with Clang QualTypes. - // Do we care about others? + // We currently only support extracting values with Clang QualTypes. Do we + // care about others? Value *value = values.GetValueAtIndex(value_idx); if (!value) @@ -1994,10 +1994,9 @@ bool ABISysV_arm64::CreateDefaultUnwindPlan(UnwindPlan &unwind_plan) { } // AAPCS64 (Procedure Call Standard for the ARM 64-bit Architecture) says -// registers x19 through x28 and sp are callee preserved. -// v8-v15 are non-volatile (and specifically only the lower 8 bytes of these -// regs), -// the rest of the fp/SIMD registers are volatile. +// registers x19 through x28 and sp are callee preserved. v8-v15 are non- +// volatile (and specifically only the lower 8 bytes of these regs), the rest +// of the fp/SIMD registers are volatile. // We treat x29 as callee preserved also, else the unwinder won't try to // retrieve fp saves. @@ -2020,10 +2019,10 @@ bool ABISysV_arm64::RegisterIsVolatile(const RegisterInfo *reg_info) { if (name[0] == 'x' || name[0] == 'r') { // Volatile registers: x0-x18 - // Although documentation says only x19-28 + sp are callee saved - // We ll also have to treat x30 as non-volatile. - // Each dwarf frame has its own value of lr. - // Return false for the non-volatile gpr regs, true for everything else + // Although documentation says only x19-28 + sp are callee saved We ll + // also have to treat x30 as non-volatile. Each dwarf frame has its own + // value of lr. Return false for the non-volatile gpr regs, true for + // everything else switch (name[1]) { case '1': switch (name[2]) { @@ -2180,14 +2179,14 @@ static bool LoadValueFromConsecutiveGPRRegisters( } else { const RegisterInfo *reg_info = nullptr; if (is_return_value) { - // We are assuming we are decoding this immediately after returning - // from a function call and that the address of the structure is in x8 + // We are assuming we are decoding this immediately after returning from + // a function call and that the address of the structure is in x8 reg_info = reg_ctx->GetRegisterInfoByName("x8", 0); } else { // We are assuming we are stopped at the first instruction in a function - // and that the ABI is being respected so all parameters appear where they - // should be (functions with no external linkage can legally violate the - // ABI). + // and that the ABI is being respected so all parameters appear where + // they should be (functions with no external linkage can legally violate + // the ABI). if (NGRN >= 8) return false; diff --git a/lldb/source/Plugins/ABI/SysV-hexagon/ABISysV_hexagon.cpp b/lldb/source/Plugins/ABI/SysV-hexagon/ABISysV_hexagon.cpp index 74274f08b24..a30416cf5a8 100644 --- a/lldb/source/Plugins/ABI/SysV-hexagon/ABISysV_hexagon.cpp +++ b/lldb/source/Plugins/ABI/SysV-hexagon/ABISysV_hexagon.cpp @@ -1214,8 +1214,8 @@ ValueObjectSP ABISysV_hexagon::GetReturnValueObjectImpl( return return_valobj_sp; } -// called when we are on the first instruction of a new function -// for hexagon the return address is in RA (R31) +// called when we are on the first instruction of a new function for hexagon +// the return address is in RA (R31) bool ABISysV_hexagon::CreateFunctionEntryUnwindPlan(UnwindPlan &unwind_plan) { unwind_plan.Clear(); unwind_plan.SetRegisterKind(eRegisterKindGeneric); diff --git a/lldb/source/Plugins/ABI/SysV-i386/ABISysV_i386.cpp b/lldb/source/Plugins/ABI/SysV-i386/ABISysV_i386.cpp index d799c587dd0..e7ddfccea33 100755..100644 --- a/lldb/source/Plugins/ABI/SysV-i386/ABISysV_i386.cpp +++ b/lldb/source/Plugins/ABI/SysV-i386/ABISysV_i386.cpp @@ -3,8 +3,7 @@ // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source -// License. -// See LICENSE.TXT for details. +// License. See LICENSE.TXT for details. //===----------------------------------------------------------------------===// #include "ABISysV_i386.h" @@ -56,8 +55,8 @@ using namespace lldb_private; // DWARF Register Number Mapping // See Table 2.14 of the reference document (specified on top of this file) -// Comment: Table 2.14 is followed till 'mm' entries. -// After that, all entries are ignored here. +// Comment: Table 2.14 is followed till 'mm' entries. After that, all entries +// are ignored here. enum dwarf_regnums { dwarf_eax = 0, @@ -228,12 +227,10 @@ bool ABISysV_i386::PrepareTrivialCall(Thread &thread, addr_t sp, uint32_t sp_reg_num = reg_ctx->ConvertRegisterKindToRegisterNumber( eRegisterKindGeneric, LLDB_REGNUM_GENERIC_SP); - // While using register info to write a register value to memory, the register - // info - // just needs to have the correct size of a 32 bit register, the actual - // register it - // pertains to is not important, just the size needs to be correct. - // "eax" is used here for this purpose. + // While using register info to write a register value to memory, the + // register info just needs to have the correct size of a 32 bit register, + // the actual register it pertains to is not important, just the size needs + // to be correct. "eax" is used here for this purpose. const RegisterInfo *reg_info_32 = reg_ctx->GetRegisterInfoByName("eax"); if (!reg_info_32) return false; // TODO this should actually never happen @@ -364,8 +361,8 @@ Status ABISysV_i386::SetReturnValueObject(lldb::StackFrameSP &frame_sp, } // Following "IF ELSE" block categorizes various 'Fundamental Data Types'. - // The terminology 'Fundamental Data Types' used here is adopted from - // Table 2.1 of the reference document (specified on top of this file) + // The terminology 'Fundamental Data Types' used here is adopted from Table + // 2.1 of the reference document (specified on top of this file) if (type_flags & eTypeIsPointer) // 'Pointer' { @@ -390,8 +387,8 @@ Status ABISysV_i386::SetReturnValueObject(lldb::StackFrameSP &frame_sp, default: break; case 16: - // For clang::BuiltinType::UInt128 & Int128 - // ToDo: Need to decide how to handle it + // For clang::BuiltinType::UInt128 & Int128 ToDo: Need to decide how to + // handle it break; case 8: { uint32_t raw_value_low = data.GetMaxU32(&offset, 4); @@ -470,8 +467,8 @@ Status ABISysV_i386::SetReturnValueObject(lldb::StackFrameSP &frame_sp, error.SetErrorString("Implementation is missing for this clang type."); } } else { - // Neither 'Integral' nor 'Floating Point'. If flow reaches here - // then check type_flags. This type_flags is not a valid type. + // Neither 'Integral' nor 'Floating Point'. If flow reaches here then + // check type_flags. This type_flags is not a valid type. error.SetErrorString("Invalid clang type"); } } else { @@ -508,8 +505,8 @@ ValueObjectSP ABISysV_i386::GetReturnValueObjectSimple( reg_ctx->GetRegisterInfoByName("edx", 0)->kinds[eRegisterKindLLDB]; // Following "IF ELSE" block categorizes various 'Fundamental Data Types'. - // The terminology 'Fundamental Data Types' used here is adopted from - // Table 2.1 of the reference document (specified on top of this file) + // The terminology 'Fundamental Data Types' used here is adopted from Table + // 2.1 of the reference document (specified on top of this file) if (type_flags & eTypeIsPointer) // 'Pointer' { @@ -543,8 +540,8 @@ ValueObjectSP ABISysV_i386::GetReturnValueObjectSimple( break; case 16: - // For clang::BuiltinType::UInt128 & Int128 - // ToDo: Need to decide how to handle it + // For clang::BuiltinType::UInt128 & Int128 ToDo: Need to decide how to + // handle it break; case 8: @@ -612,8 +609,8 @@ ValueObjectSP ABISysV_i386::GetReturnValueObjectSimple( success = true; } else if (byte_size == 8) // double is 8 bytes { - // On Android Platform: long double is also 8 bytes - // It will be handled here only. + // On Android Platform: long double is also 8 bytes It will be + // handled here only. double value_double = (double)value_long_double; value.GetScalar() = value_double; success = true; @@ -639,8 +636,8 @@ ValueObjectSP ABISysV_i386::GetReturnValueObjectSimple( } } else // Neither 'Integral' nor 'Floating Point' { - // If flow reaches here then check type_flags - // This type_flags is unhandled + // If flow reaches here then check type_flags This type_flags is + // unhandled } } else if (type_flags & eTypeIsComplex) // 'Complex Floating Point' { @@ -797,9 +794,9 @@ bool ABISysV_i386::CreateDefaultUnwindPlan(UnwindPlan &unwind_plan) { return true; } -// According to "Register Usage" in reference document (specified on top -// of this source file) ebx, ebp, esi, edi and esp registers are preserved -// i.e. non-volatile i.e. callee-saved on i386 +// According to "Register Usage" in reference document (specified on top of +// this source file) ebx, ebp, esi, edi and esp registers are preserved i.e. +// non-volatile i.e. callee-saved on i386 bool ABISysV_i386::RegisterIsCalleeSaved(const RegisterInfo *reg_info) { if (!reg_info) return false; diff --git a/lldb/source/Plugins/ABI/SysV-mips/ABISysV_mips.cpp b/lldb/source/Plugins/ABI/SysV-mips/ABISysV_mips.cpp index 95e2a7b0afe..ce02f8677a6 100644 --- a/lldb/source/Plugins/ABI/SysV-mips/ABISysV_mips.cpp +++ b/lldb/source/Plugins/ABI/SysV-mips/ABISysV_mips.cpp @@ -698,8 +698,8 @@ bool ABISysV_mips::PrepareTrivialCall(Thread &thread, addr_t sp, if (log) log->Printf("Writing r25: 0x%" PRIx64, (uint64_t)func_addr); - // All callers of position independent functions must place the address of the - // called function in t9 (r25) + // All callers of position independent functions must place the address of + // the called function in t9 (r25) if (!reg_ctx->WriteRegisterFromUnsigned(r25_info, func_addr)) return false; @@ -867,8 +867,8 @@ ValueObjectSP ABISysV_mips::GetReturnValueObjectImpl( UINT32_MAX; value.GetScalar() = ptr; } else if (return_compiler_type.IsAggregateType()) { - // Structure/Vector is always passed in memory and pointer to that memory is - // passed in r2. + // Structure/Vector is always passed in memory and pointer to that memory + // is passed in r2. uint64_t mem_address = reg_ctx->ReadRegisterAsUnsigned( reg_ctx->GetRegisterInfoByName("r2", 0), 0); // We have got the address. Create a memory object out of it diff --git a/lldb/source/Plugins/ABI/SysV-mips64/ABISysV_mips64.cpp b/lldb/source/Plugins/ABI/SysV-mips64/ABISysV_mips64.cpp index 749e170fa17..b958abf2563 100644 --- a/lldb/source/Plugins/ABI/SysV-mips64/ABISysV_mips64.cpp +++ b/lldb/source/Plugins/ABI/SysV-mips64/ABISysV_mips64.cpp @@ -661,8 +661,8 @@ bool ABISysV_mips64::PrepareTrivialCall(Thread &thread, addr_t sp, if (log) log->Printf("Writing r25: 0x%" PRIx64, (uint64_t)func_addr); - // All callers of position independent functions must place the address of the - // called function in t9 (r25) + // All callers of position independent functions must place the address of + // the called function in t9 (r25) if (!reg_ctx->WriteRegisterFromUnsigned(r25_info, func_addr)) return false; @@ -1035,10 +1035,9 @@ ValueObjectSP ABISysV_mips64::GetReturnValueObjectImpl( } } - // If we reach here, it means this structure either contains more than two - // fields or - // it contains at least one non floating point type. - // In that case, all fields are returned in GP return registers. + // If we reach here, it means this structure either contains more than + // two fields or it contains at least one non floating point type. In + // that case, all fields are returned in GP return registers. for (uint32_t idx = 0; idx < num_children; idx++) { uint64_t field_bit_offset = 0; bool is_signed; @@ -1049,8 +1048,8 @@ ValueObjectSP ABISysV_mips64::GetReturnValueObjectImpl( const size_t field_byte_width = field_compiler_type.GetByteSize(nullptr); - // if we don't know the size of the field (e.g. invalid type), just bail - // out + // if we don't know the size of the field (e.g. invalid type), just + // bail out if (field_byte_width == 0) break; @@ -1078,16 +1077,15 @@ ValueObjectSP ABISysV_mips64::GetReturnValueObjectImpl( } } // We already have consumed at-least 8 bytes that means r2 is done, - // and this field will be in r3. - // Check if this field can fit in r3. + // and this field will be in r3. Check if this field can fit in r3. else if (integer_bytes + field_byte_width + padding <= 16) { integer_bytes = integer_bytes + field_byte_width + padding; use_r3 = 1; } else { - // There isn't any space left for this field, this should not happen - // as we have already checked - // the overall size is not greater than 16 bytes. For now, return a - // nullptr return value object. + // There isn't any space left for this field, this should not + // happen as we have already checked the overall size is not + // greater than 16 bytes. For now, return a nullptr return value + // object. return return_valobj_sp; } } @@ -1123,15 +1121,16 @@ ValueObjectSP ABISysV_mips64::GetReturnValueObjectImpl( sucess = 1; } if (sucess) { - // The result is in our data buffer. Create a variable object out of it + // The result is in our data buffer. Create a variable object out of + // it return_valobj_sp = ValueObjectConstResult::Create( &thread, return_compiler_type, ConstString(""), return_ext); } return return_valobj_sp; } - // Any structure/vector greater than 16 bytes in size is returned in memory. - // The pointer to that memory is returned in r2. + // Any structure/vector greater than 16 bytes in size is returned in + // memory. The pointer to that memory is returned in r2. uint64_t mem_address = reg_ctx->ReadRegisterAsUnsigned( reg_ctx->GetRegisterInfoByName("r2", 0), 0); diff --git a/lldb/source/Plugins/ABI/SysV-ppc/ABISysV_ppc.cpp b/lldb/source/Plugins/ABI/SysV-ppc/ABISysV_ppc.cpp index 2fee176739f..e93dcdbe1a5 100644 --- a/lldb/source/Plugins/ABI/SysV-ppc/ABISysV_ppc.cpp +++ b/lldb/source/Plugins/ABI/SysV-ppc/ABISysV_ppc.cpp @@ -402,8 +402,8 @@ bool ABISysV_ppc::GetArgumentValues(Thread &thread, ValueList &values) const { if (!value) return false; - // We currently only support extracting values with Clang QualTypes. - // Do we care about others? + // We currently only support extracting values with Clang QualTypes. Do we + // care about others? CompilerType compiler_type = value->GetCompilerType(); if (!compiler_type) return false; @@ -501,8 +501,8 @@ Status ABISysV_ppc::SetReturnValueObject(lldb::StackFrameSP &frame_sp, if (!set_it_simple) { // Okay we've got a structure or something that doesn't fit in a simple - // register. - // We should figure out where it really goes, but we don't support this yet. + // register. We should figure out where it really goes, but we don't + // support this yet. error.SetErrorString("We only support setting simple integer and float " "return types at present."); } @@ -735,10 +735,9 @@ ValueObjectSP ABISysV_ppc::GetReturnValueObjectImpl( copy_from_offset = integer_bytes - 8; integer_bytes += field_byte_width; } else { - // The last field didn't fit. I can't see how that would happen w/o - // the overall size being - // greater than 16 bytes. For now, return a nullptr return value - // object. + // The last field didn't fit. I can't see how that would happen + // w/o the overall size being greater than 16 bytes. For now, + // return a nullptr return value object. return return_valobj_sp; } } else if (field_compiler_type.IsFloatingPointType(count, is_complex)) { @@ -751,10 +750,9 @@ ValueObjectSP ABISysV_ppc::GetReturnValueObjectImpl( fp_bytes += field_byte_width; } else if (field_bit_width == 32) { // This one is kind of complicated. If we are in an "eightbyte" - // with another float, we'll - // be stuffed into an xmm register with it. If we are in an - // "eightbyte" with one or more ints, - // then we will be stuffed into the appropriate GPR with them. + // with another float, we'll be stuffed into an xmm register with + // it. If we are in an "eightbyte" with one or more ints, then we + // will be stuffed into the appropriate GPR with them. bool in_gpr; if (field_byte_offset % 8 == 0) { // We are at the beginning of one of the eightbytes, so check the @@ -776,9 +774,9 @@ ValueObjectSP ABISysV_ppc::GetReturnValueObjectImpl( } } } else if (field_byte_offset % 4 == 0) { - // We are inside of an eightbyte, so see if the field before us is - // floating point: - // This could happen if somebody put padding in the structure. + // We are inside of an eightbyte, so see if the field before us + // is floating point: This could happen if somebody put padding + // in the structure. if (idx == 0) in_gpr = false; else { @@ -819,9 +817,9 @@ ValueObjectSP ABISysV_ppc::GetReturnValueObjectImpl( } } - // These two tests are just sanity checks. If I somehow get the - // type calculation wrong above it is better to just return nothing - // than to assert or crash. + // These two tests are just sanity checks. If I somehow get the type + // calculation wrong above it is better to just return nothing than to + // assert or crash. if (!copy_from_extractor) return return_valobj_sp; if (copy_from_offset + field_byte_width > @@ -845,9 +843,8 @@ ValueObjectSP ABISysV_ppc::GetReturnValueObjectImpl( // FIXME: This is just taking a guess, r3 may very well no longer hold the // return storage location. // If we are going to do this right, when we make a new frame we should - // check to see if it uses a memory - // return, and if we are at the first instruction and if so stash away the - // return location. Then we would + // check to see if it uses a memory return, and if we are at the first + // instruction and if so stash away the return location. Then we would // only return the memory return value if we know it is valid. if (is_memory) { @@ -918,9 +915,9 @@ bool ABISysV_ppc::RegisterIsVolatile(const RegisterInfo *reg_info) { // See "Register Usage" in the // "System V Application Binary Interface" -// "64-bit PowerPC ELF Application Binary Interface Supplement" -// current version is 1.9 released 2004 at -// http://refspecs.linuxfoundation.org/ELF/ppc/PPC-elf64abi-1.9.pdf +// "64-bit PowerPC ELF Application Binary Interface Supplement" current version +// is 1.9 released 2004 at http://refspecs.linuxfoundation.org/ELF/ppc/PPC- +// elf64abi-1.9.pdf bool ABISysV_ppc::RegisterIsCalleeSaved(const RegisterInfo *reg_info) { if (reg_info) { diff --git a/lldb/source/Plugins/ABI/SysV-ppc64/ABISysV_ppc64.cpp b/lldb/source/Plugins/ABI/SysV-ppc64/ABISysV_ppc64.cpp index c032b95f451..d0140a0c894 100644 --- a/lldb/source/Plugins/ABI/SysV-ppc64/ABISysV_ppc64.cpp +++ b/lldb/source/Plugins/ABI/SysV-ppc64/ABISysV_ppc64.cpp @@ -281,8 +281,8 @@ bool ABISysV_ppc64::GetArgumentValues(Thread &thread, ValueList &values) const { if (!value) return false; - // We currently only support extracting values with Clang QualTypes. - // Do we care about others? + // We currently only support extracting values with Clang QualTypes. Do we + // care about others? CompilerType compiler_type = value->GetCompilerType(); if (!compiler_type) return false; @@ -380,8 +380,8 @@ Status ABISysV_ppc64::SetReturnValueObject(lldb::StackFrameSP &frame_sp, if (!set_it_simple) { // Okay we've got a structure or something that doesn't fit in a simple - // register. - // We should figure out where it really goes, but we don't support this yet. + // register. We should figure out where it really goes, but we don't + // support this yet. error.SetErrorString("We only support setting simple integer and float " "return types at present."); } @@ -400,10 +400,10 @@ namespace { class ReturnValueExtractor { // This class represents a register, from which data may be extracted. // - // It may be constructed by directly specifying its index (where 0 is - // the first register used to return values) or by specifying the offset - // of a given struct field, in which case the appropriated register index - // will be calculated. + // It may be constructed by directly specifying its index (where 0 is the + // first register used to return values) or by specifying the offset of a + // given struct field, in which case the appropriated register index will be + // calculated. class Register { public: enum Type { @@ -720,8 +720,8 @@ private: } } - // Get the whole contents of vector registers and let the - // logic here arrange the data properly. + // Get the whole contents of vector registers and let the logic here + // arrange the data properly. RegisterValue vr_val[MAX_VRS]; Status error; @@ -740,8 +740,8 @@ private: } } - // The compiler generated code seems to always put the vector elements - // at the end of the vector register, in case they don't occupy all of it. + // The compiler generated code seems to always put the vector elements at + // the end of the vector register, in case they don't occupy all of it. // This offset variable handles this. uint32_t offs = 0; if (m_byte_size < vr_size) @@ -1025,8 +1025,8 @@ bool ABISysV_ppc64::RegisterIsVolatile(const RegisterInfo *reg_info) { // See "Register Usage" in the // "System V Application Binary Interface" -// "64-bit PowerPC ELF Application Binary Interface Supplement" -// current version is 2 released 2015 at +// "64-bit PowerPC ELF Application Binary Interface Supplement" current version +// is 2 released 2015 at // https://members.openpowerfoundation.org/document/dl/576 bool ABISysV_ppc64::RegisterIsCalleeSaved(const RegisterInfo *reg_info) { if (reg_info) { diff --git a/lldb/source/Plugins/ABI/SysV-s390x/ABISysV_s390x.cpp b/lldb/source/Plugins/ABI/SysV-s390x/ABISysV_s390x.cpp index 967e407188f..31e2825c0fa 100644 --- a/lldb/source/Plugins/ABI/SysV-s390x/ABISysV_s390x.cpp +++ b/lldb/source/Plugins/ABI/SysV-s390x/ABISysV_s390x.cpp @@ -380,8 +380,8 @@ bool ABISysV_s390x::GetArgumentValues(Thread &thread, ValueList &values) const { if (!value) return false; - // We currently only support extracting values with Clang QualTypes. - // Do we care about others? + // We currently only support extracting values with Clang QualTypes. Do we + // care about others? CompilerType compiler_type = value->GetCompilerType(); if (!compiler_type) return false; @@ -483,8 +483,8 @@ Status ABISysV_s390x::SetReturnValueObject(lldb::StackFrameSP &frame_sp, if (!set_it_simple) { // Okay we've got a structure or something that doesn't fit in a simple - // register. - // We should figure out where it really goes, but we don't support this yet. + // register. We should figure out where it really goes, but we don't + // support this yet. error.SetErrorString("We only support setting simple integer and float " "return types at present."); } @@ -618,9 +618,8 @@ ValueObjectSP ABISysV_s390x::GetReturnValueObjectImpl( // FIXME: This is just taking a guess, r2 may very well no longer hold the // return storage location. // If we are going to do this right, when we make a new frame we should - // check to see if it uses a memory - // return, and if we are at the first instruction and if so stash away the - // return location. Then we would + // check to see if it uses a memory return, and if we are at the first + // instruction and if so stash away the return location. Then we would // only return the memory return value if we know it is valid. unsigned r2_id = @@ -654,8 +653,8 @@ bool ABISysV_s390x::CreateFunctionEntryUnwindPlan(UnwindPlan &unwind_plan) { } bool ABISysV_s390x::CreateDefaultUnwindPlan(UnwindPlan &unwind_plan) { - // There's really no default way to unwind on s390x. - // Trust the .eh_frame CFI, which should always be good. + // There's really no default way to unwind on s390x. Trust the .eh_frame CFI, + // which should always be good. return false; } @@ -663,8 +662,8 @@ bool ABISysV_s390x::GetFallbackRegisterLocation( const RegisterInfo *reg_info, UnwindPlan::Row::RegisterLocation &unwind_regloc) { // If a volatile register is being requested, we don't want to forward the - // next frame's register contents - // up the stack -- the register is not retrievable at this frame. + // next frame's register contents up the stack -- the register is not + // retrievable at this frame. if (RegisterIsVolatile(reg_info)) { unwind_regloc.SetUndefined(); return true; diff --git a/lldb/source/Plugins/ABI/SysV-x86_64/ABISysV_x86_64.cpp b/lldb/source/Plugins/ABI/SysV-x86_64/ABISysV_x86_64.cpp index 41d146f2452..36ae3a49827 100644 --- a/lldb/source/Plugins/ABI/SysV-x86_64/ABISysV_x86_64.cpp +++ b/lldb/source/Plugins/ABI/SysV-x86_64/ABISysV_x86_64.cpp @@ -1267,8 +1267,8 @@ bool ABISysV_x86_64::GetArgumentValues(Thread &thread, if (!value) return false; - // We currently only support extracting values with Clang QualTypes. - // Do we care about others? + // We currently only support extracting values with Clang QualTypes. Do we + // care about others? CompilerType compiler_type = value->GetCompilerType(); if (!compiler_type) return false; @@ -1371,8 +1371,8 @@ Status ABISysV_x86_64::SetReturnValueObject(lldb::StackFrameSP &frame_sp, if (!set_it_simple) { // Okay we've got a structure or something that doesn't fit in a simple - // register. - // We should figure out where it really goes, but we don't support this yet. + // register. We should figure out where it really goes, but we don't + // support this yet. error.SetErrorString("We only support setting simple integer and float " "return types at present."); } @@ -1624,8 +1624,8 @@ ValueObjectSP ABISysV_x86_64::GetReturnValueObjectImpl( idx, name, &field_bit_offset, nullptr, nullptr); const size_t field_bit_width = field_compiler_type.GetBitSize(&thread); - // if we don't know the size of the field (e.g. invalid type), just bail - // out + // if we don't know the size of the field (e.g. invalid type), just + // bail out if (field_bit_width == 0) break; @@ -1661,10 +1661,9 @@ ValueObjectSP ABISysV_x86_64::GetReturnValueObjectImpl( copy_from_offset = integer_bytes - 8; integer_bytes += field_byte_width; } else { - // The last field didn't fit. I can't see how that would happen w/o - // the overall size being - // greater than 16 bytes. For now, return a nullptr return value - // object. + // The last field didn't fit. I can't see how that would happen + // w/o the overall size being greater than 16 bytes. For now, + // return a nullptr return value object. return return_valobj_sp; } } else if (field_compiler_type.IsFloatingPointType(count, is_complex)) { @@ -1683,10 +1682,9 @@ ValueObjectSP ABISysV_x86_64::GetReturnValueObjectImpl( fp_bytes += field_byte_width; } else if (field_bit_width == 32) { // This one is kind of complicated. If we are in an "eightbyte" - // with another float, we'll - // be stuffed into an xmm register with it. If we are in an - // "eightbyte" with one or more ints, - // then we will be stuffed into the appropriate GPR with them. + // with another float, we'll be stuffed into an xmm register with + // it. If we are in an "eightbyte" with one or more ints, then we + // will be stuffed into the appropriate GPR with them. bool in_gpr; if (field_byte_offset % 8 == 0) { // We are at the beginning of one of the eightbytes, so check the @@ -1708,9 +1706,9 @@ ValueObjectSP ABISysV_x86_64::GetReturnValueObjectImpl( } } } else if (field_byte_offset % 4 == 0) { - // We are inside of an eightbyte, so see if the field before us is - // floating point: - // This could happen if somebody put padding in the structure. + // We are inside of an eightbyte, so see if the field before us + // is floating point: This could happen if somebody put padding + // in the structure. if (idx == 0) in_gpr = false; else { @@ -1756,9 +1754,9 @@ ValueObjectSP ABISysV_x86_64::GetReturnValueObjectImpl( } } - // These two tests are just sanity checks. If I somehow get the - // type calculation wrong above it is better to just return nothing - // than to assert or crash. + // These two tests are just sanity checks. If I somehow get the type + // calculation wrong above it is better to just return nothing than to + // assert or crash. if (!copy_from_extractor) return return_valobj_sp; if (copy_from_offset + field_byte_width > @@ -1782,9 +1780,8 @@ ValueObjectSP ABISysV_x86_64::GetReturnValueObjectImpl( // FIXME: This is just taking a guess, rax may very well no longer hold the // return storage location. // If we are going to do this right, when we make a new frame we should - // check to see if it uses a memory - // return, and if we are at the first instruction and if so stash away the - // return location. Then we would + // check to see if it uses a memory return, and if we are at the first + // instruction and if so stash away the return location. Then we would // only return the memory return value if we know it is valid. if (is_memory) { @@ -1858,12 +1855,11 @@ bool ABISysV_x86_64::RegisterIsVolatile(const RegisterInfo *reg_info) { // See "Register Usage" in the // "System V Application Binary Interface" -// "AMD64 Architecture Processor Supplement" -// (or "x86-64(tm) Architecture Processor Supplement" in earlier revisions) -// (this doc is also commonly referred to as the x86-64/AMD64 psABI) -// Edited by Michael Matz, Jan Hubicka, Andreas Jaeger, and Mark Mitchell -// current version is 0.99.6 released 2012-07-02 at -// http://refspecs.linuxfoundation.org/elf/x86-64-abi-0.99.pdf +// "AMD64 Architecture Processor Supplement" (or "x86-64(tm) Architecture +// Processor Supplement" in earlier revisions) (this doc is also commonly +// referred to as the x86-64/AMD64 psABI) Edited by Michael Matz, Jan Hubicka, +// Andreas Jaeger, and Mark Mitchell current version is 0.99.6 released +// 2012-07-02 at http://refspecs.linuxfoundation.org/elf/x86-64-abi-0.99.pdf // It's being revised & updated at https://github.com/hjl-tools/x86-psABI/ bool ABISysV_x86_64::RegisterIsCalleeSaved(const RegisterInfo *reg_info) { diff --git a/lldb/source/Plugins/Architecture/Arm/ArchitectureArm.cpp b/lldb/source/Plugins/Architecture/Arm/ArchitectureArm.cpp index abac6d3001a..0645b3f8e33 100644 --- a/lldb/source/Plugins/Architecture/Arm/ArchitectureArm.cpp +++ b/lldb/source/Plugins/Architecture/Arm/ArchitectureArm.cpp @@ -42,31 +42,31 @@ ConstString ArchitectureArm::GetPluginName() { return GetPluginNameStatic(); } uint32_t ArchitectureArm::GetPluginVersion() { return 1; } void ArchitectureArm::OverrideStopInfo(Thread &thread) { - // We need to check if we are stopped in Thumb mode in a IT instruction - // and detect if the condition doesn't pass. If this is the case it means - // we won't actually execute this instruction. If this happens we need to - // clear the stop reason to no thread plans think we are stopped for a - // reason and the plans should keep going. + // We need to check if we are stopped in Thumb mode in a IT instruction and + // detect if the condition doesn't pass. If this is the case it means we + // won't actually execute this instruction. If this happens we need to clear + // the stop reason to no thread plans think we are stopped for a reason and + // the plans should keep going. // // We do this because when single stepping many ARM processes, debuggers - // often use the BVR/BCR registers that says "stop when the PC is not - // equal to its current value". This method of stepping means we can end - // up stopping on instructions inside an if/then block that wouldn't get - // executed. By fixing this we can stop the debugger from seeming like - // you stepped through both the "if" _and_ the "else" clause when source - // level stepping because the debugger stops regardless due to the BVR/BCR + // often use the BVR/BCR registers that says "stop when the PC is not equal + // to its current value". This method of stepping means we can end up + // stopping on instructions inside an if/then block that wouldn't get + // executed. By fixing this we can stop the debugger from seeming like you + // stepped through both the "if" _and_ the "else" clause when source level + // stepping because the debugger stops regardless due to the BVR/BCR // triggering a stop. // - // It also means we can set breakpoints on instructions inside an an - // if/then block and correctly skip them if we use the BKPT instruction. - // The ARM and Thumb BKPT instructions are unconditional even when executed - // in a Thumb IT block. + // It also means we can set breakpoints on instructions inside an an if/then + // block and correctly skip them if we use the BKPT instruction. The ARM and + // Thumb BKPT instructions are unconditional even when executed in a Thumb IT + // block. // - // If your debugger inserts software traps in ARM/Thumb code, it will - // need to use 16 and 32 bit instruction for 16 and 32 bit thumb - // instructions respectively. If your debugger inserts a 16 bit thumb - // trap on top of a 32 bit thumb instruction for an opcode that is inside - // an if/then, it will change the it/then to conditionally execute your + // If your debugger inserts software traps in ARM/Thumb code, it will need to + // use 16 and 32 bit instruction for 16 and 32 bit thumb instructions + // respectively. If your debugger inserts a 16 bit thumb trap on top of a 32 + // bit thumb instruction for an opcode that is inside an if/then, it will + // change the it/then to conditionally execute your // 16 bit trap and then cause your program to crash if it executes the // trailing 16 bits (the second half of the 32 bit thumb instruction you // partially overwrote). @@ -85,23 +85,20 @@ void ArchitectureArm::OverrideStopInfo(Thread &thread) { const uint32_t ISETSTATE = J << 1 | T; if (ISETSTATE == 0) { // NOTE: I am pretty sure we want to enable the code below -// that detects when we stop on an instruction in ARM mode -// that is conditional and the condition doesn't pass. This -// can happen if you set a breakpoint on an instruction that -// is conditional. We currently will _always_ stop on the -// instruction which is bad. You can also run into this while -// single stepping and you could appear to run code in the "if" -// and in the "else" clause because it would stop at all of the -// conditional instructions in both. -// In such cases, we really don't want to stop at this location. +// that detects when we stop on an instruction in ARM mode that is conditional +// and the condition doesn't pass. This can happen if you set a breakpoint on +// an instruction that is conditional. We currently will _always_ stop on the +// instruction which is bad. You can also run into this while single stepping +// and you could appear to run code in the "if" and in the "else" clause +// because it would stop at all of the conditional instructions in both. In +// such cases, we really don't want to stop at this location. // I will check with the lldb-dev list first before I enable this. #if 0 // ARM mode: check for condition on intsruction const addr_t pc = reg_ctx_sp->GetPC(); Status error; - // If we fail to read the opcode we will get UINT64_MAX as the - // result in "opcode" which we can use to detect if we read a - // valid opcode. + // If we fail to read the opcode we will get UINT64_MAX as the result in + // "opcode" which we can use to detect if we read a valid opcode. const uint64_t opcode = thread.GetProcess()->ReadUnsignedIntegerFromMemory(pc, 4, UINT64_MAX, error); if (opcode <= UINT32_MAX) { @@ -109,8 +106,8 @@ void ArchitectureArm::OverrideStopInfo(Thread &thread) { if (!ARMConditionPassed(condition, cpsr)) { // We ARE stopped on an ARM instruction whose condition doesn't - // pass so this instruction won't get executed. - // Regardless of why it stopped, we need to clear the stop info + // pass so this instruction won't get executed. Regardless of why + // it stopped, we need to clear the stop info thread.SetStopInfo (StopInfoSP()); } } diff --git a/lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVMC.cpp b/lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVMC.cpp index 99be015b104..e6f6a41e8ab 100644 --- a/lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVMC.cpp +++ b/lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVMC.cpp @@ -1082,8 +1082,7 @@ DisassemblerLLVMC::DisassemblerLLVMC(const ArchSpec &arch, llvm::Triple triple = arch.GetTriple(); // So far the only supported flavor is "intel" on x86. The base class will - // set this - // correctly coming in. + // set this correctly coming in. if (triple.getArch() == llvm::Triple::x86 || triple.getArch() == llvm::Triple::x86_64) { if (m_flavor == "intel") { @@ -1107,12 +1106,10 @@ DisassemblerLLVMC::DisassemblerLLVMC(const ArchSpec &arch, } // If no sub architecture specified then use the most recent arm architecture - // so the - // disassembler will return all instruction. Without it we will see a lot of - // unknow opcode - // in case the code uses instructions which are not available in the oldest - // arm version - // (used when no sub architecture is specified) + // so the disassembler will return all instruction. Without it we will see a + // lot of unknow opcode in case the code uses instructions which are not + // available in the oldest arm version (used when no sub architecture is + // specified) if (triple.getArch() == llvm::Triple::arm && triple.getSubArch() == llvm::Triple::NoSubArch) triple.setArchName("armv8.2a"); @@ -1186,14 +1183,14 @@ DisassemblerLLVMC::DisassemblerLLVMC(const ArchSpec &arch, features_str += "+dspr2,"; } - // If any AArch64 variant, enable the ARMv8.2 ISA - // extensions so we can disassemble newer instructions. + // If any AArch64 variant, enable the ARMv8.2 ISA extensions so we can + // disassemble newer instructions. if (triple.getArch() == llvm::Triple::aarch64) features_str += "+v8.2a"; - // We use m_disasm_ap.get() to tell whether we are valid or not, - // so if this isn't good for some reason, - // we won't be valid and FindPlugin will fail and we won't get used. + // We use m_disasm_ap.get() to tell whether we are valid or not, so if this + // isn't good for some reason, we won't be valid and FindPlugin will fail and + // we won't get used. m_disasm_up = MCDisasmInstance::Create(triple_str, cpu, features_str.c_str(), flavor, *this); @@ -1391,8 +1388,8 @@ const char *DisassemblerLLVMC::SymbolLookup(uint64_t value, uint64_t *type_ptr, } } - // If the "value" address (the target address we're symbolicating) - // is inside the same SymbolContext as the current instruction pc + // If the "value" address (the target address we're symbolicating) is + // inside the same SymbolContext as the current instruction pc // (pc_so_addr), don't print the full function name - just print it // with DumpStyleNoFunctionName style, e.g. "<+36>". if (format_omitting_current_func_name) { @@ -1407,9 +1404,8 @@ const char *DisassemblerLLVMC::SymbolLookup(uint64_t value, uint64_t *type_ptr, if (!ss.GetString().empty()) { // If Address::Dump returned a multi-line description, most commonly - // seen when we - // have multiple levels of inlined functions at an address, only show - // the first line. + // seen when we have multiple levels of inlined functions at an + // address, only show the first line. std::string str = ss.GetString(); size_t first_eol_char = str.find_first_of("\r\n"); if (first_eol_char != std::string::npos) { diff --git a/lldb/source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.cpp b/lldb/source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.cpp index a81a0306671..e02d6920b21 100644 --- a/lldb/source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.cpp +++ b/lldb/source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.cpp @@ -45,10 +45,10 @@ using namespace lldb; using namespace lldb_private; -// Progressively greater amounts of scanning we will allow -// For some targets very early in startup, we can't do any random reads of -// memory or we can crash the device -// so a setting is needed that can completely disable the KASLR scans. +// Progressively greater amounts of scanning we will allow For some targets +// very early in startup, we can't do any random reads of memory or we can +// crash the device so a setting is needed that can completely disable the +// KASLR scans. enum KASLRScanType { eKASLRScanNone = 0, // No reading into the inferior at all @@ -122,15 +122,15 @@ static const DynamicLoaderDarwinKernelPropertiesSP &GetGlobalProperties() { } //---------------------------------------------------------------------- -// Create an instance of this class. This function is filled into -// the plugin info class that gets handed out by the plugin factory and -// allows the lldb to instantiate an instance of this class. +// Create an instance of this class. This function is filled into the plugin +// info class that gets handed out by the plugin factory and allows the lldb to +// instantiate an instance of this class. //---------------------------------------------------------------------- DynamicLoader *DynamicLoaderDarwinKernel::CreateInstance(Process *process, bool force) { if (!force) { - // If the user provided an executable binary and it is not a kernel, - // this plugin should not create an instance. + // If the user provided an executable binary and it is not a kernel, this + // plugin should not create an instance. Module *exe_module = process->GetTarget().GetExecutableModulePointer(); if (exe_module) { ObjectFile *object_file = exe_module->GetObjectFile(); @@ -155,8 +155,8 @@ DynamicLoader *DynamicLoaderDarwinKernel::CreateInstance(Process *process, return NULL; } break; - // If we have triple like armv7-unknown-unknown, we should try looking for a - // Darwin kernel. + // If we have triple like armv7-unknown-unknown, we should try looking for + // a Darwin kernel. case llvm::Triple::UnknownOS: break; default: @@ -166,9 +166,8 @@ DynamicLoader *DynamicLoaderDarwinKernel::CreateInstance(Process *process, } // At this point if there is an ExecutableModule, it is a kernel and the - // Target is some variant of an Apple system. - // If the Process hasn't provided the kernel load address, we need to look - // around in memory to find it. + // Target is some variant of an Apple system. If the Process hasn't provided + // the kernel load address, we need to look around in memory to find it. const addr_t kernel_load_address = SearchForDarwinKernel(process); if (CheckForKernelImageAtAddress(kernel_load_address, process).IsValid()) { @@ -197,10 +196,9 @@ DynamicLoaderDarwinKernel::SearchForDarwinKernel(Process *process) { } //---------------------------------------------------------------------- -// Check if the kernel binary is loaded in memory without a slide. -// First verify that the ExecutableModule is a kernel before we proceed. -// Returns the address of the kernel if one was found, else -// LLDB_INVALID_ADDRESS. +// Check if the kernel binary is loaded in memory without a slide. First verify +// that the ExecutableModule is a kernel before we proceed. Returns the address +// of the kernel if one was found, else LLDB_INVALID_ADDRESS. //---------------------------------------------------------------------- lldb::addr_t DynamicLoaderDarwinKernel::SearchForKernelAtSameLoadAddr(Process *process) { @@ -229,10 +227,8 @@ DynamicLoaderDarwinKernel::SearchForKernelAtSameLoadAddr(Process *process) { //---------------------------------------------------------------------- // If the debug flag is included in the boot-args nvram setting, the kernel's -// load address -// will be noted in the lowglo page at a fixed address -// Returns the address of the kernel if one was found, else -// LLDB_INVALID_ADDRESS. +// load address will be noted in the lowglo page at a fixed address Returns the +// address of the kernel if one was found, else LLDB_INVALID_ADDRESS. //---------------------------------------------------------------------- lldb::addr_t DynamicLoaderDarwinKernel::SearchForKernelWithDebugHints(Process *process) { @@ -282,8 +278,8 @@ DynamicLoaderDarwinKernel::SearchForKernelWithDebugHints(Process *process) { } //---------------------------------------------------------------------- -// If the kernel is currently executing when lldb attaches, and we don't have -// a better way of finding the kernel's load address, try searching backwards +// If the kernel is currently executing when lldb attaches, and we don't have a +// better way of finding the kernel's load address, try searching backwards // from the current pc value looking for the kernel's Mach header in memory. // Returns the address of the kernel if one was found, else // LLDB_INVALID_ADDRESS. @@ -304,9 +300,8 @@ DynamicLoaderDarwinKernel::SearchForKernelNearPC(Process *process) { return LLDB_INVALID_ADDRESS; // The kernel will load at at one megabyte boundary (0x100000), or at that - // boundary plus - // an offset of one page (0x1000) or two, or four (0x4000), depending on the - // device. + // boundary plus an offset of one page (0x1000) or two, or four (0x4000), + // depending on the device. // Round the current pc down to the nearest one megabyte boundary - the place // where we will start searching. @@ -329,11 +324,10 @@ DynamicLoaderDarwinKernel::SearchForKernelNearPC(Process *process) { } //---------------------------------------------------------------------- -// Scan through the valid address range for a kernel binary. -// This is uselessly slow in 64-bit environments so we don't even try it. -// This scan is not enabled by default even for 32-bit targets. -// Returns the address of the kernel if one was found, else -// LLDB_INVALID_ADDRESS. +// Scan through the valid address range for a kernel binary. This is uselessly +// slow in 64-bit environments so we don't even try it. This scan is not +// enabled by default even for 32-bit targets. Returns the address of the +// kernel if one was found, else LLDB_INVALID_ADDRESS. //---------------------------------------------------------------------- lldb::addr_t DynamicLoaderDarwinKernel::SearchForKernelViaExhaustiveSearch( Process *process) { @@ -375,9 +369,8 @@ lldb::addr_t DynamicLoaderDarwinKernel::SearchForKernelViaExhaustiveSearch( //---------------------------------------------------------------------- // Given an address in memory, look to see if there is a kernel image at that -// address. -// Returns a UUID; if a kernel was not found at that address, UUID.IsValid() -// will be false. +// address. Returns a UUID; if a kernel was not found at that address, +// UUID.IsValid() will be false. //---------------------------------------------------------------------- lldb_private::UUID DynamicLoaderDarwinKernel::CheckForKernelImageAtAddress(lldb::addr_t addr, @@ -392,8 +385,8 @@ DynamicLoaderDarwinKernel::CheckForKernelImageAtAddress(lldb::addr_t addr, addr); // First try a quick test -- read the first 4 bytes and see if there is a - // valid Mach-O magic field there - // (the first field of the mach_header/mach_header_64 struct). + // valid Mach-O magic field there (the first field of the + // mach_header/mach_header_64 struct). Status read_error; uint8_t magicbuf[4]; @@ -630,10 +623,8 @@ UUID DynamicLoaderDarwinKernel::KextImageInfo::GetUUID() const { } // Given the m_load_address from the kext summaries, and a UUID, try to create -// an in-memory -// Module at that address. Require that the MemoryModule have a matching UUID -// and detect -// if this MemoryModule is a kernel or a kext. +// an in-memory Module at that address. Require that the MemoryModule have a +// matching UUID and detect if this MemoryModule is a kernel or a kext. // // Returns true if m_memory_module_sp is now set to a valid Module. @@ -668,10 +659,8 @@ bool DynamicLoaderDarwinKernel::KextImageInfo::ReadMemoryModule( } // If this is a kext, and the kernel specified what UUID we should find at - // this - // load address, require that the memory module have a matching UUID or - // something - // has gone wrong and we should discard it. + // this load address, require that the memory module have a matching UUID or + // something has gone wrong and we should discard it. if (m_uuid.IsValid()) { if (m_uuid != memory_module_sp->GetUUID()) { if (log) { @@ -737,9 +726,8 @@ bool DynamicLoaderDarwinKernel::KextImageInfo::LoadImageUsingMemoryModule( Target &target = process->GetTarget(); - // If we don't have / can't create a memory module for this kext, don't try to - // load it - we won't - // have the correct segment load addresses. + // If we don't have / can't create a memory module for this kext, don't try + // to load it - we won't have the correct segment load addresses. if (!ReadMemoryModule(process)) { Log *log(GetLogIfAnyCategoriesSet(LIBLLDB_LOG_DYNAMIC_LOADER)); if (log) @@ -772,9 +760,8 @@ bool DynamicLoaderDarwinKernel::KextImageInfo::LoadImageUsingMemoryModule( module_spec.GetUUID() = m_uuid; module_spec.GetArchitecture() = target.GetArchitecture(); - // For the kernel, we really do need an on-disk file copy of the binary to - // do anything useful. - // This will force a clal to + // For the kernel, we really do need an on-disk file copy of the binary + // to do anything useful. This will force a clal to if (IsKernel()) { if (Symbols::DownloadObjectAndSymbolFile(module_spec, true)) { if (module_spec.GetFileSpec().Exists()) { @@ -791,10 +778,8 @@ bool DynamicLoaderDarwinKernel::KextImageInfo::LoadImageUsingMemoryModule( } // If the current platform is PlatformDarwinKernel, create a ModuleSpec - // with the filename set - // to be the bundle ID for this kext, e.g. - // "com.apple.filesystems.msdosfs", and ask the platform - // to find it. + // with the filename set to be the bundle ID for this kext, e.g. + // "com.apple.filesystems.msdosfs", and ask the platform to find it. PlatformSP platform_sp(target.GetPlatform()); if (!m_module_sp && platform_sp) { ConstString platform_name(platform_sp->GetPluginName()); @@ -828,8 +813,9 @@ bool DynamicLoaderDarwinKernel::KextImageInfo::LoadImageUsingMemoryModule( } } - // If we managed to find a module, append it to the target's list of images. - // If we also have a memory module, require that they have matching UUIDs + // If we managed to find a module, append it to the target's list of + // images. If we also have a memory module, require that they have matching + // UUIDs if (m_module_sp) { bool uuid_match_ok = true; if (m_memory_module_sp) { @@ -871,15 +857,15 @@ bool DynamicLoaderDarwinKernel::KextImageInfo::LoadImageUsingMemoryModule( SectionList *memory_section_list = memory_object_file->GetSectionList(); if (memory_section_list && ondisk_section_list) { const uint32_t num_ondisk_sections = ondisk_section_list->GetSize(); - // There may be CTF sections in the memory image so we can't - // always just compare the number of sections (which are actually - // segments in mach-o parlance) + // There may be CTF sections in the memory image so we can't always + // just compare the number of sections (which are actually segments + // in mach-o parlance) uint32_t sect_idx = 0; - // Use the memory_module's addresses for each section to set the - // file module's load address as appropriate. We don't want to use - // a single slide value for the entire kext - different segments may - // be slid different amounts by the kext loader. + // Use the memory_module's addresses for each section to set the file + // module's load address as appropriate. We don't want to use a + // single slide value for the entire kext - different segments may be + // slid different amounts by the kext loader. uint32_t num_sections_loaded = 0; for (sect_idx = 0; sect_idx < num_ondisk_sections; ++sect_idx) { @@ -969,10 +955,9 @@ DynamicLoaderDarwinKernel::KextImageInfo::GetArchitecture() const { } //---------------------------------------------------------------------- -// Load the kernel module and initialize the "m_kernel" member. Return -// true _only_ if the kernel is loaded the first time through (subsequent -// calls to this function should return false after the kernel has been -// already loaded). +// Load the kernel module and initialize the "m_kernel" member. Return true +// _only_ if the kernel is loaded the first time through (subsequent calls to +// this function should return false after the kernel has been already loaded). //---------------------------------------------------------------------- void DynamicLoaderDarwinKernel::LoadKernelModuleIfNeeded() { if (!m_kext_summary_header_ptr_addr.IsValid()) { @@ -996,9 +981,8 @@ void DynamicLoaderDarwinKernel::LoadKernelModuleIfNeeded() { m_kernel.SetLoadAddress(m_kernel_load_address); if (m_kernel.GetLoadAddress() == LLDB_INVALID_ADDRESS && m_kernel.GetModule()) { - // We didn't get a hint from the process, so we will - // try the kernel at the address that it exists at in - // the file if we have one + // We didn't get a hint from the process, so we will try the kernel at + // the address that it exists at in the file if we have one ObjectFile *kernel_object_file = m_kernel.GetModule()->GetObjectFile(); if (kernel_object_file) { addr_t load_address = @@ -1011,8 +995,7 @@ void DynamicLoaderDarwinKernel::LoadKernelModuleIfNeeded() { if (load_address != file_address) { // Don't accidentally relocate the kernel to the File address -- // the Load address has already been set to its actual in-memory - // address. - // Mark it as IsLoaded. + // address. Mark it as IsLoaded. m_kernel.SetProcessStopId(m_process->GetStopID()); } } else { @@ -1028,10 +1011,10 @@ void DynamicLoaderDarwinKernel::LoadKernelModuleIfNeeded() { } } - // The operating system plugin gets loaded and initialized in - // LoadImageUsingMemoryModule when we discover the kernel dSYM. For a - // core file in particular, that's the wrong place to do this, since - // we haven't fixed up the section addresses yet. So let's redo it here. + // The operating system plugin gets loaded and initialized in + // LoadImageUsingMemoryModule when we discover the kernel dSYM. For a core + // file in particular, that's the wrong place to do this, since we haven't + // fixed up the section addresses yet. So let's redo it here. LoadOperatingSystemPlugin(false); if (m_kernel.IsLoaded() && m_kernel.GetModule()) { @@ -1052,9 +1035,9 @@ void DynamicLoaderDarwinKernel::LoadKernelModuleIfNeeded() { //---------------------------------------------------------------------- // Static callback function that gets called when our DYLD notification -// breakpoint gets hit. We update all of our image infos and then -// let our super class DynamicLoader class decide if we should stop -// or not (based on global preference). +// breakpoint gets hit. We update all of our image infos and then let our super +// class DynamicLoader class decide if we should stop or not (based on global +// preference). //---------------------------------------------------------------------- bool DynamicLoaderDarwinKernel::BreakpointHitCallback( void *baton, StoppointCallbackContext *context, user_id_t break_id, @@ -1087,8 +1070,8 @@ bool DynamicLoaderDarwinKernel::ReadKextSummaryHeader() { const uint32_t addr_size = m_kernel.GetAddressByteSize(); const ByteOrder byte_order = m_kernel.GetByteOrder(); Status error; - // Read enough bytes for a "OSKextLoadedKextSummaryHeader" structure - // which is currently 4 uint32_t and a pointer. + // Read enough bytes for a "OSKextLoadedKextSummaryHeader" structure which + // is currently 4 uint32_t and a pointer. uint8_t buf[24]; DataExtractor data(buf, sizeof(buf), byte_order, addr_size); const size_t count = 4 * sizeof(uint32_t) + addr_size; @@ -1130,7 +1113,8 @@ bool DynamicLoaderDarwinKernel::ReadKextSummaryHeader() { return false; } } else { - // Versions less than 2 didn't have an entry size, it was hard coded + // Versions less than 2 didn't have an entry size, it was hard + // coded m_kext_summary_header.entry_size = KERNEL_MODULE_ENTRY_SIZE_VERSION_1; } @@ -1156,13 +1140,10 @@ bool DynamicLoaderDarwinKernel::ReadKextSummaryHeader() { } // We've either (a) just attached to a new kernel, or (b) the kexts-changed -// breakpoint was hit -// and we need to figure out what kexts have been added or removed. -// Read the kext summaries from the inferior kernel memory, compare them against -// the -// m_known_kexts vector and update the m_known_kexts vector as needed to keep in -// sync with the -// inferior. +// breakpoint was hit and we need to figure out what kexts have been added or +// removed. Read the kext summaries from the inferior kernel memory, compare +// them against the m_known_kexts vector and update the m_known_kexts vector as +// needed to keep in sync with the inferior. bool DynamicLoaderDarwinKernel::ParseKextSummaries( const Address &kext_summary_addr, uint32_t count) { @@ -1178,14 +1159,13 @@ bool DynamicLoaderDarwinKernel::ParseKextSummaries( return false; // read the plugin.dynamic-loader.darwin-kernel.load-kexts setting -- if the - // user requested no - // kext loading, don't print any messages about kexts & don't try to read - // them. + // user requested no kext loading, don't print any messages about kexts & + // don't try to read them. const bool load_kexts = GetGlobalProperties()->GetLoadKexts(); // By default, all kexts we've loaded in the past are marked as "remove" and - // all of the kexts - // we just found out about from ReadKextSummaries are marked as "add". + // all of the kexts we just found out about from ReadKextSummaries are marked + // as "add". std::vector<bool> to_be_removed(m_known_kexts.size(), true); std::vector<bool> to_be_added(count, true); @@ -1195,8 +1175,8 @@ bool DynamicLoaderDarwinKernel::ParseKextSummaries( const uint32_t new_kexts_size = kext_summaries.size(); const uint32_t old_kexts_size = m_known_kexts.size(); - // The m_known_kexts vector may have entries that have been Cleared, - // or are a kernel. + // The m_known_kexts vector may have entries that have been Cleared, or are a + // kernel. for (uint32_t old_kext = 0; old_kext < old_kexts_size; old_kext++) { bool ignore = false; KextImageInfo &image_info = m_known_kexts[old_kext]; @@ -1229,10 +1209,9 @@ bool DynamicLoaderDarwinKernel::ParseKextSummaries( break; } } - // If this "kext" entry is actually an alias for the kernel -- - // the kext was compiled into the kernel or something -- then - // we don't want to load the kernel's text section at a different - // address. Ignore this kext entry. + // If this "kext" entry is actually an alias for the kernel -- the kext was + // compiled into the kernel or something -- then we don't want to load the + // kernel's text section at a different address. Ignore this kext entry. if (kext_summaries[new_kext].GetUUID().IsValid() && m_kernel.GetUUID().IsValid() && kext_summaries[new_kext].GetUUID() == m_kernel.GetUUID()) { @@ -1322,9 +1301,8 @@ bool DynamicLoaderDarwinKernel::ParseKextSummaries( s->Printf("."); image_info.Clear(); // should pull it out of the KextImageInfos vector but that would - // mutate the list and invalidate - // the to_be_removed bool vector; leaving it in place once Cleared() - // is relatively harmless. + // mutate the list and invalidate the to_be_removed bool vector; + // leaving it in place once Cleared() is relatively harmless. } } m_process->GetTarget().ModulesDidUnload(unloaded_module_list, false); @@ -1433,8 +1411,8 @@ void DynamicLoaderDarwinKernel::KextImageInfo::PutToLog(Log *log) const { } //---------------------------------------------------------------------- -// Dump the _dyld_all_image_infos members and all current image infos -// that we have parsed to the file handle provided. +// Dump the _dyld_all_image_infos members and all current image infos that we +// have parsed to the file handle provided. //---------------------------------------------------------------------- void DynamicLoaderDarwinKernel::PutToLog(Log *log) const { if (log == NULL) diff --git a/lldb/source/Plugins/DynamicLoader/Hexagon-DYLD/DynamicLoaderHexagonDYLD.cpp b/lldb/source/Plugins/DynamicLoader/Hexagon-DYLD/DynamicLoaderHexagonDYLD.cpp index d0d60017e86..5ca20229d01 100644 --- a/lldb/source/Plugins/DynamicLoader/Hexagon-DYLD/DynamicLoaderHexagonDYLD.cpp +++ b/lldb/source/Plugins/DynamicLoader/Hexagon-DYLD/DynamicLoaderHexagonDYLD.cpp @@ -127,8 +127,8 @@ void DynamicLoaderHexagonDYLD::DidAttach() { executable = GetTargetExecutable(); - // Find the difference between the desired load address in the elf file - // and the real load address in memory + // Find the difference between the desired load address in the elf file and + // the real load address in memory load_offset = ComputeLoadOffset(); // Check that there is a valid executable @@ -157,10 +157,10 @@ void DynamicLoaderHexagonDYLD::DidAttach() { // Callback for the target to give it the loaded module list m_process->GetTarget().ModulesDidLoad(module_list); - // Try to set a breakpoint at the rendezvous breakpoint. - // DidLaunch uses ProbeEntry() instead. That sets a breakpoint, - // at the dyld breakpoint address, with a callback so that when hit, - // the dyld structure can be parsed. + // Try to set a breakpoint at the rendezvous breakpoint. DidLaunch uses + // ProbeEntry() instead. That sets a breakpoint, at the dyld breakpoint + // address, with a callback so that when hit, the dyld structure can be + // parsed. if (!SetRendezvousBreakpoint()) { // fail } @@ -203,8 +203,8 @@ ModuleSP DynamicLoaderHexagonDYLD::GetTargetExecutable() { // TODO: What case is this code used? executable = target.GetSharedModule(module_spec); if (executable.get() != target.GetExecutableModulePointer()) { - // Don't load dependent images since we are in dyld where we will know - // and find out about all images that are loaded + // Don't load dependent images since we are in dyld where we will know and + // find out about all images that are loaded const bool get_dependent_images = false; target.SetExecutableModule(executable, get_dependent_images); } @@ -270,9 +270,8 @@ bool DynamicLoaderHexagonDYLD::SetRendezvousBreakpoint() { // This is the original code, which want to look in the rendezvous structure // to find the breakpoint address. Its backwards for us, since we can easily - // find the breakpoint address, since it is exported in our executable. - // We however know that we cant read the Rendezvous structure until we have - // hit + // find the breakpoint address, since it is exported in our executable. We + // however know that we cant read the Rendezvous structure until we have hit // the breakpoint once. const ConstString dyldBpName("_rtld_debug_state"); addr_t break_addr = findSymbolAddress(m_process, dyldBpName); @@ -326,8 +325,8 @@ bool DynamicLoaderHexagonDYLD::RendezvousBreakpointHit( DynamicLoaderHexagonDYLD *dyld_instance = nullptr; dyld_instance = static_cast<DynamicLoaderHexagonDYLD *>(baton); - // if the dyld_instance is still not valid then - // try to locate it on the symbol table + // if the dyld_instance is still not valid then try to locate it on the + // symbol table if (!dyld_instance->m_rendezvous.IsValid()) { Process *proc = dyld_instance->m_process; @@ -480,8 +479,8 @@ void DynamicLoaderHexagonDYLD::LoadAllCurrentModules() { return; } - // The rendezvous class doesn't enumerate the main module, so track - // that ourselves here. + // The rendezvous class doesn't enumerate the main module, so track that + // ourselves here. ModuleSP executable = GetTargetExecutable(); m_loaded_modules[executable] = m_rendezvous.GetLinkMapAddress(); @@ -517,12 +516,11 @@ addr_t DynamicLoaderHexagonDYLD::ComputeLoadOffset() { return 0; } -// Here we must try to read the entry point directly from -// the elf header. This is possible if the process is not -// relocatable or dynamically linked. +// Here we must try to read the entry point directly from the elf header. This +// is possible if the process is not relocatable or dynamically linked. // -// an alternative is to look at the PC if we can be sure -// that we have connected when the process is at the entry point. +// an alternative is to look at the PC if we can be sure that we have connected +// when the process is at the entry point. // I dont think that is reliable for us. addr_t DynamicLoaderHexagonDYLD::GetEntryPoint() { if (m_entry_point != LLDB_INVALID_ADDRESS) diff --git a/lldb/source/Plugins/DynamicLoader/Hexagon-DYLD/HexagonDYLDRendezvous.cpp b/lldb/source/Plugins/DynamicLoader/Hexagon-DYLD/HexagonDYLDRendezvous.cpp index c49cdc2f11b..d5f60e07bd7 100644 --- a/lldb/source/Plugins/DynamicLoader/Hexagon-DYLD/HexagonDYLDRendezvous.cpp +++ b/lldb/source/Plugins/DynamicLoader/Hexagon-DYLD/HexagonDYLDRendezvous.cpp @@ -115,8 +115,8 @@ bool HexagonDYLDRendezvous::UpdateSOEntries() { if (m_current.map_addr == 0) return false; - // When the previous and current states are consistent this is the first - // time we have been asked to update. Just take a snapshot of the currently + // When the previous and current states are consistent this is the first time + // we have been asked to update. Just take a snapshot of the currently // loaded modules. if (m_previous.state == eConsistent && m_current.state == eConsistent) return TakeSnapshot(m_soentries); @@ -126,8 +126,8 @@ bool HexagonDYLDRendezvous::UpdateSOEntries() { if (m_current.state == eAdd || m_current.state == eDelete) { // this is a fudge so that we can clear the assert below. m_previous.state = eConsistent; - // We hit this assert on the 2nd run of this function after running the calc - // example + // We hit this assert on the 2nd run of this function after running the + // calc example assert(m_previous.state == eConsistent); m_soentries.clear(); m_added_soentries.clear(); @@ -159,9 +159,9 @@ bool HexagonDYLDRendezvous::UpdateSOEntriesForAddition() { if (!ReadSOEntryFromMemory(cursor, entry)) return false; - // Only add shared libraries and not the executable. - // On Linux this is indicated by an empty path in the entry. - // On FreeBSD it is the name of the executable. + // Only add shared libraries and not the executable. On Linux this is + // indicated by an empty path in the entry. On FreeBSD it is the name of + // the executable. if (entry.path.empty() || ::strcmp(entry.path.c_str(), m_exe_path) == 0) continue; @@ -204,9 +204,9 @@ bool HexagonDYLDRendezvous::TakeSnapshot(SOEntryList &entry_list) { if (!ReadSOEntryFromMemory(cursor, entry)) return false; - // Only add shared libraries and not the executable. - // On Linux this is indicated by an empty path in the entry. - // On FreeBSD it is the name of the executable. + // Only add shared libraries and not the executable. On Linux this is + // indicated by an empty path in the entry. On FreeBSD it is the name of + // the executable. if (entry.path.empty() || ::strcmp(entry.path.c_str(), m_exe_path) == 0) continue; diff --git a/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderDarwin.cpp b/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderDarwin.cpp index 703b461f6fe..3a43751398d 100644 --- a/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderDarwin.cpp +++ b/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderDarwin.cpp @@ -112,8 +112,8 @@ ModuleSP DynamicLoaderDarwin::FindTargetModuleForImageInfo( if (module_sp && !module_spec.GetUUID().IsValid() && !module_sp->GetUUID().IsValid()) { - // No UUID, we must rely upon the cached module modification - // time and the modification time of the file on disk + // No UUID, we must rely upon the cached module modification time and the + // modification time of the file on disk if (module_sp->GetModificationTime() != FileSystem::GetModificationTime(module_sp->GetFileSpec())) module_sp.reset(); @@ -198,8 +198,7 @@ void DynamicLoaderDarwin::UnloadAllImages() { ModuleSP module_sp = target_modules.GetModuleAtIndexUnlocked(i); // Don't remove dyld - else we'll lose our breakpoint notifying us about - // libraries - // being re-loaded... + // libraries being re-loaded... if (module_sp.get() != nullptr && module_sp.get() != dyld_sp.get()) { UnloadSections(module_sp); unloaded_modules_list.Append(module_sp); @@ -219,8 +218,8 @@ void DynamicLoaderDarwin::UnloadAllImages() { } //---------------------------------------------------------------------- -// Update the load addresses for all segments in MODULE using the -// updated INFO that is passed in. +// Update the load addresses for all segments in MODULE using the updated INFO +// that is passed in. //---------------------------------------------------------------------- bool DynamicLoaderDarwin::UpdateImageLoadAddress(Module *module, ImageInfo &info) { @@ -231,13 +230,12 @@ bool DynamicLoaderDarwin::UpdateImageLoadAddress(Module *module, SectionList *section_list = image_object_file->GetSectionList(); if (section_list) { std::vector<uint32_t> inaccessible_segment_indexes; - // We now know the slide amount, so go through all sections - // and update the load addresses with the correct values. + // We now know the slide amount, so go through all sections and update + // the load addresses with the correct values. const size_t num_segments = info.segments.size(); for (size_t i = 0; i < num_segments; ++i) { - // Only load a segment if it has protections. Things like - // __PAGEZERO don't have any protections, and they shouldn't - // be slid + // Only load a segment if it has protections. Things like __PAGEZERO + // don't have any protections, and they shouldn't be slid SectionSP section_sp( section_list->FindSectionByName(info.segments[i].name)); @@ -249,10 +247,10 @@ bool DynamicLoaderDarwin::UpdateImageLoadAddress(Module *module, static ConstString g_section_name_LINKEDIT("__LINKEDIT"); if (section_sp) { - // __LINKEDIT sections from files in the shared cache - // can overlap so check to see what the segment name is - // and pass "false" so we don't warn of overlapping - // "Section" objects, and "true" for all other sections. + // __LINKEDIT sections from files in the shared cache can overlap + // so check to see what the segment name is and pass "false" so + // we don't warn of overlapping "Section" objects, and "true" for + // all other sections. const bool warn_multiple = section_sp->GetName() != g_section_name_LINKEDIT; @@ -270,13 +268,12 @@ bool DynamicLoaderDarwin::UpdateImageLoadAddress(Module *module, } } - // If the loaded the file (it changed) and we have segments that - // are not readable or writeable, add them to the invalid memory - // region cache for the process. This will typically only be - // the __PAGEZERO segment in the main executable. We might be able - // to apply this more generally to more sections that have no - // protections in the future, but for now we are going to just - // do __PAGEZERO. + // If the loaded the file (it changed) and we have segments that are + // not readable or writeable, add them to the invalid memory region + // cache for the process. This will typically only be the __PAGEZERO + // segment in the main executable. We might be able to apply this more + // generally to more sections that have no protections in the future, + // but for now we are going to just do __PAGEZERO. if (changed && !inaccessible_segment_indexes.empty()) { for (uint32_t i = 0; i < inaccessible_segment_indexes.size(); ++i) { const uint32_t seg_idx = inaccessible_segment_indexes[i]; @@ -344,8 +341,7 @@ bool DynamicLoaderDarwin::UnloadModuleSections(Module *module, } // Given a JSON dictionary (from debugserver, most likely) of binary images -// loaded in the inferior -// process, add the images to the ImageInfo collection. +// loaded in the inferior process, add the images to the ImageInfo collection. bool DynamicLoaderDarwin::JSONImageInformationIntoImageInfo( StructuredData::ObjectSP image_details, @@ -412,8 +408,7 @@ bool DynamicLoaderDarwin::JSONImageInformationIntoImageInfo( } // Fields that aren't used by DynamicLoaderDarwin so debugserver doesn't - // currently send them - // in the reply. + // currently send them in the reply. if (mh->HasKey("flags")) image_infos[i].header.flags = @@ -454,8 +449,7 @@ bool DynamicLoaderDarwin::JSONImageInformationIntoImageInfo( seg->GetValueForKey("maxprot")->GetAsInteger()->GetValue(); // Fields that aren't used by DynamicLoaderDarwin so debugserver doesn't - // currently send them - // in the reply. + // currently send them in the reply. if (seg->HasKey("initprot")) segment.initprot = @@ -481,25 +475,23 @@ bool DynamicLoaderDarwin::JSONImageInformationIntoImageInfo( image_infos[i].uuid.SetFromStringRef( image->GetValueForKey("uuid")->GetAsString()->GetValue()); - // All sections listed in the dyld image info structure will all - // either be fixed up already, or they will all be off by a single - // slide amount that is determined by finding the first segment - // that is at file offset zero which also has bytes (a file size - // that is greater than zero) in the object file. + // All sections listed in the dyld image info structure will all either be + // fixed up already, or they will all be off by a single slide amount that + // is determined by finding the first segment that is at file offset zero + // which also has bytes (a file size that is greater than zero) in the + // object file. // Determine the slide amount (if any) const size_t num_sections = image_infos[i].segments.size(); for (size_t k = 0; k < num_sections; ++k) { - // Iterate through the object file sections to find the - // first section that starts of file offset zero and that - // has bytes in the file... + // Iterate through the object file sections to find the first section + // that starts of file offset zero and that has bytes in the file... if ((image_infos[i].segments[k].fileoff == 0 && image_infos[i].segments[k].filesize > 0) || (image_infos[i].segments[k].name == ConstString("__TEXT"))) { image_infos[i].slide = image_infos[i].address - image_infos[i].segments[k].vmaddr; - // We have found the slide amount, so we can exit - // this for loop. + // We have found the slide amount, so we can exit this for loop. break; } } @@ -520,16 +512,15 @@ void DynamicLoaderDarwin::UpdateSpecialBinariesFromNewImageInfos( const size_t image_infos_size = image_infos.size(); for (size_t i = 0; i < image_infos_size; i++) { if (image_infos[i].header.filetype == llvm::MachO::MH_DYLINKER) { - // In a "simulator" process (an x86 process that is ios/tvos/watchos) - // we will have two dyld modules -- a "dyld" that we want to keep track - // of, - // and a "dyld_sim" which we don't need to keep track of here. - // If the target is an x86 system and the OS of the dyld binary is + // In a "simulator" process (an x86 process that is ios/tvos/watchos) we + // will have two dyld modules -- a "dyld" that we want to keep track of, + // and a "dyld_sim" which we don't need to keep track of here. If the + // target is an x86 system and the OS of the dyld binary is // ios/tvos/watchos, then we are looking at dyld_sym. - // debugserver has only recently (late 2016) started sending up the - // os type for each binary it sees -- so if we don't have an os - // type, use a filename check as our next best guess. + // debugserver has only recently (late 2016) started sending up the os + // type for each binary it sees -- so if we don't have an os type, use a + // filename check as our next best guess. if (image_infos[i].os_type == llvm::Triple::OSType::UnknownOS) { if (image_infos[i].file_spec.GetFilename() != g_dyld_sim_filename) { dyld_idx = i; @@ -543,7 +534,8 @@ void DynamicLoaderDarwin::UpdateSpecialBinariesFromNewImageInfos( } } else { - // catch-all for any other environment -- trust that dyld is actually dyld + // catch-all for any other environment -- trust that dyld is actually + // dyld dyld_idx = i; } } else if (image_infos[i].header.filetype == llvm::MachO::MH_EXECUTE) { @@ -669,11 +661,10 @@ bool DynamicLoaderDarwin::AddModulesUsingImageInfos( } } - // UpdateImageLoadAddress will return true if any segments - // change load address. We need to check this so we don't - // mention that all loaded shared libraries are newly loaded - // each time we hit out dyld breakpoint since dyld will list all - // shared libraries each time. + // UpdateImageLoadAddress will return true if any segments change load + // address. We need to check this so we don't mention that all loaded + // shared libraries are newly loaded each time we hit out dyld breakpoint + // since dyld will list all shared libraries each time. if (UpdateImageLoadAddress(image_module_sp.get(), image_infos[idx])) { target_images.AppendIfNeeded(image_module_sp); loaded_module_list.AppendIfNeeded(image_module_sp); @@ -692,12 +683,11 @@ bool DynamicLoaderDarwin::AddModulesUsingImageInfos( //---------------------------------------------------------------------- // On Mac OS X libobjc (the Objective-C runtime) has several critical dispatch -// functions written in hand-written assembly, and also have hand-written unwind -// information in the eh_frame section. Normally we prefer analyzing the -// assembly instructions of a currently executing frame to unwind from that -// frame -- -// but on hand-written functions this profiling can fail. We should use the -// eh_frame instructions for these functions all the time. +// functions written in hand-written assembly, and also have hand-written +// unwind information in the eh_frame section. Normally we prefer analyzing +// the assembly instructions of a currently executing frame to unwind from that +// frame -- but on hand-written functions this profiling can fail. We should +// use the eh_frame instructions for these functions all the time. // // As an aside, it would be better if the eh_frame entries had a flag (or were // extensible so they could have an Apple-specific flag) which indicates that @@ -817,8 +807,8 @@ void DynamicLoaderDarwin::PrivateProcessStateChanged(Process *process, break; case eStateStopped: - // Keep trying find dyld and set our notification breakpoint each time - // we stop until we succeed + // Keep trying find dyld and set our notification breakpoint each time we + // stop until we succeed if (!DidSetNotificationBreakpoint() && m_process->IsAlive()) { if (NeedToDoInitialImageFetch()) DoInitialImageFetch(); @@ -956,8 +946,8 @@ DynamicLoaderDarwin::GetStepThroughTrampolinePlan(Thread &thread, } if (addresses.size() > 0) { - // First check whether any of the addresses point to Indirect symbols, and - // if they do, resolve them: + // First check whether any of the addresses point to Indirect symbols, + // and if they do, resolve them: std::vector<lldb::addr_t> load_addrs; for (Address address : addresses) { Symbol *symbol = address.CalculateSymbolContextSymbol(); @@ -1073,10 +1063,10 @@ DynamicLoaderDarwin::GetThreadLocalData(const lldb::ModuleSP module_sp, const lldb::addr_t pthread_key = data.GetAddress(&offset); const lldb::addr_t tls_offset = data.GetAddress(&offset); if (pthread_key != 0) { - // First check to see if we have already figured out the location - // of TLS data for the pthread_key on a specific thread yet. If we - // have we can re-use it since its location will not change unless - // the process execs. + // First check to see if we have already figured out the location of + // TLS data for the pthread_key on a specific thread yet. If we have we + // can re-use it since its location will not change unless the process + // execs. const tid_t tid = thread_sp->GetID(); auto tid_pos = m_tid_to_tls_map.find(tid); if (tid_pos != m_tid_to_tls_map.end()) { diff --git a/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOS.cpp b/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOS.cpp index 66085a23759..8178b5b155d 100644 --- a/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOS.cpp +++ b/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOS.cpp @@ -29,9 +29,9 @@ using namespace lldb; using namespace lldb_private; //---------------------------------------------------------------------- -// Create an instance of this class. This function is filled into -// the plugin info class that gets handed out by the plugin factory and -// allows the lldb to instantiate an instance of this class. +// Create an instance of this class. This function is filled into the plugin +// info class that gets handed out by the plugin factory and allows the lldb to +// instantiate an instance of this class. //---------------------------------------------------------------------- DynamicLoader *DynamicLoaderMacOS::CreateInstance(Process *process, bool force) { @@ -144,17 +144,18 @@ void DynamicLoaderMacOS::ClearNotificationBreakpoint() { } //---------------------------------------------------------------------- -// Try and figure out where dyld is by first asking the Process -// if it knows (which currently calls down in the lldb::Process -// to get the DYLD info (available on SnowLeopard only). If that fails, -// then check in the default addresses. +// Try and figure out where dyld is by first asking the Process if it knows +// (which currently calls down in the lldb::Process to get the DYLD info +// (available on SnowLeopard only). If that fails, then check in the default +// addresses. //---------------------------------------------------------------------- void DynamicLoaderMacOS::DoInitialImageFetch() { Log *log(lldb_private::GetLogIfAnyCategoriesSet(LIBLLDB_LOG_DYNAMIC_LOADER)); - // Remove any binaries we pre-loaded in the Target before launching/attaching. - // If the same binaries are present in the process, we'll get them from the - // shared module cache, we won't need to re-load them from disk. + // Remove any binaries we pre-loaded in the Target before + // launching/attaching. If the same binaries are present in the process, + // we'll get them from the shared module cache, we won't need to re-load them + // from disk. UnloadAllImages(); StructuredData::ObjectSP all_image_info_json_sp( @@ -184,9 +185,9 @@ bool DynamicLoaderMacOS::NeedToDoInitialImageFetch() { return true; } //---------------------------------------------------------------------- // Static callback function that gets called when our DYLD notification -// breakpoint gets hit. We update all of our image infos and then -// let our super class DynamicLoader class decide if we should stop -// or not (based on global preference). +// breakpoint gets hit. We update all of our image infos and then let our super +// class DynamicLoader class decide if we should stop or not (based on global +// preference). //---------------------------------------------------------------------- bool DynamicLoaderMacOS::NotifyBreakpointHit(void *baton, StoppointCallbackContext *context, @@ -194,11 +195,10 @@ bool DynamicLoaderMacOS::NotifyBreakpointHit(void *baton, lldb::user_id_t break_loc_id) { // Let the event know that the images have changed // DYLD passes three arguments to the notification breakpoint. - // Arg1: enum dyld_notify_mode mode - 0 = adding, 1 = removing, 2 = remove all - // Arg2: unsigned long icount - Number of shared libraries - // added/removed - // Arg3: uint64_t mach_headers[] - Array of load addresses of binaries - // added/removed + // Arg1: enum dyld_notify_mode mode - 0 = adding, 1 = removing, 2 = remove + // all Arg2: unsigned long icount - Number of shared libraries + // added/removed Arg3: uint64_t mach_headers[] - Array of load addresses + // of binaries added/removed DynamicLoaderMacOS *dyld_instance = (DynamicLoaderMacOS *)baton; @@ -328,8 +328,8 @@ void DynamicLoaderMacOS::AddBinaries( } } -// Dump the _dyld_all_image_infos members and all current image infos -// that we have parsed to the file handle provided. +// Dump the _dyld_all_image_infos members and all current image infos that we +// have parsed to the file handle provided. //---------------------------------------------------------------------- void DynamicLoaderMacOS::PutToLog(Log *log) const { if (log == NULL) @@ -432,9 +432,9 @@ Status DynamicLoaderMacOS::CanLoadImage() { } } - // Default assumption is that it is OK to load images. - // Only say that we cannot load images if we find the symbol in libdyld and it - // indicates that we cannot. + // Default assumption is that it is OK to load images. Only say that we + // cannot load images if we find the symbol in libdyld and it indicates that + // we cannot. if (symbol_address != LLDB_INVALID_ADDRESS) { { @@ -445,11 +445,11 @@ Status DynamicLoaderMacOS::CanLoadImage() { } } } else { - // If we were unable to find _dyld_global_lock_held in any modules, or it is - // not loaded into memory yet, we may be at process startup (sitting - // at _dyld_start) - so we should not allow dlopen calls. - // But if we found more than one module then we are clearly past _dyld_start - // so in that case we'll default to "it's safe". + // If we were unable to find _dyld_global_lock_held in any modules, or it + // is not loaded into memory yet, we may be at process startup (sitting at + // _dyld_start) - so we should not allow dlopen calls. But if we found more + // than one module then we are clearly past _dyld_start so in that case + // we'll default to "it's safe". if (num_modules <= 1) error.SetErrorString("could not find the dyld library or " "the dyld lock symbol"); @@ -472,7 +472,9 @@ bool DynamicLoaderMacOS::GetSharedCacheInformation( info_dict = info->GetAsDictionary(); } - // {"shared_cache_base_address":140735683125248,"shared_cache_uuid":"DDB8D70C-C9A2-3561-B2C8-BE48A4F33F96","no_shared_cache":false,"shared_cache_private_cache":false} + // {"shared_cache_base_address":140735683125248,"shared_cache_uuid + // ":"DDB8D70C- + // C9A2-3561-B2C8-BE48A4F33F96","no_shared_cache":false,"shared_cache_private_cache":false} if (info_dict && info_dict->HasKey("shared_cache_uuid") && info_dict->HasKey("no_shared_cache") && diff --git a/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.cpp b/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.cpp index e0def58f41c..6cabbef0a25 100644 --- a/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.cpp +++ b/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.cpp @@ -49,9 +49,9 @@ using namespace lldb; using namespace lldb_private; //---------------------------------------------------------------------- -// Create an instance of this class. This function is filled into -// the plugin info class that gets handed out by the plugin factory and -// allows the lldb to instantiate an instance of this class. +// Create an instance of this class. This function is filled into the plugin +// info class that gets handed out by the plugin factory and allows the lldb to +// instantiate an instance of this class. //---------------------------------------------------------------------- DynamicLoader *DynamicLoaderMacOSXDYLD::CreateInstance(Process *process, bool force) { @@ -123,17 +123,18 @@ bool DynamicLoaderMacOSXDYLD::ProcessDidExec() { const addr_t shlib_addr = m_process->GetImageInfoAddress(); if (m_process_image_addr_is_all_images_infos == true && shlib_addr != m_dyld_all_image_infos_addr) { - // The image info address from the process is the 'dyld_all_image_infos' - // address and it has changed. + // The image info address from the process is the + // 'dyld_all_image_infos' address and it has changed. did_exec = true; } else if (m_process_image_addr_is_all_images_infos == false && shlib_addr == m_dyld.address) { - // The image info address from the process is the mach_header - // address for dyld and it has changed. + // The image info address from the process is the mach_header address + // for dyld and it has changed. did_exec = true; } else { // ASLR might be disabled and dyld could have ended up in the same - // location. We should try and detect if we are stopped at '_dyld_start' + // location. We should try and detect if we are stopped at + // '_dyld_start' ThreadSP thread_sp(m_process->GetThreadList().GetThreadAtIndex(0)); if (thread_sp) { lldb::StackFrameSP frame_sp(thread_sp->GetStackFrameAtIndex(0)); @@ -185,16 +186,15 @@ void DynamicLoaderMacOSXDYLD::ClearNotificationBreakpoint() { } //---------------------------------------------------------------------- -// Try and figure out where dyld is by first asking the Process -// if it knows (which currently calls down in the lldb::Process -// to get the DYLD info (available on SnowLeopard only). If that fails, -// then check in the default addresses. +// Try and figure out where dyld is by first asking the Process if it knows +// (which currently calls down in the lldb::Process to get the DYLD info +// (available on SnowLeopard only). If that fails, then check in the default +// addresses. //---------------------------------------------------------------------- void DynamicLoaderMacOSXDYLD::DoInitialImageFetch() { if (m_dyld_all_image_infos_addr == LLDB_INVALID_ADDRESS) { - // Check the image info addr as it might point to the - // mach header for dyld, or it might point to the - // dyld_all_image_infos struct + // Check the image info addr as it might point to the mach header for dyld, + // or it might point to the dyld_all_image_infos struct const addr_t shlib_addr = m_process->GetImageInfoAddress(); if (shlib_addr != LLDB_INVALID_ADDRESS) { ByteOrder byte_order = @@ -255,8 +255,7 @@ void DynamicLoaderMacOSXDYLD::DoInitialImageFetch() { } //---------------------------------------------------------------------- -// Assume that dyld is in memory at ADDR and try to parse it's load -// commands +// Assume that dyld is in memory at ADDR and try to parse it's load commands //---------------------------------------------------------------------- bool DynamicLoaderMacOSXDYLD::ReadDYLDInfoFromMemoryAndSetNotificationCallback( lldb::addr_t addr) { @@ -287,10 +286,10 @@ bool DynamicLoaderMacOSXDYLD::ReadDYLDInfoFromMemoryAndSetNotificationCallback( // Update all image infos InitializeFromAllImageInfos(); - // If we didn't have an executable before, but now we do, then the - // dyld module shared pointer might be unique and we may need to add - // it again (since Target::SetExecutableModule() will clear the - // images). So append the dyld module back to the list if it is + // If we didn't have an executable before, but now we do, then the dyld + // module shared pointer might be unique and we may need to add it again + // (since Target::SetExecutableModule() will clear the images). So append + // the dyld module back to the list if it is /// unique! if (dyld_module_sp) { target.GetImages().AppendIfNeeded(dyld_module_sp); @@ -315,18 +314,18 @@ bool DynamicLoaderMacOSXDYLD::NeedToDoInitialImageFetch() { //---------------------------------------------------------------------- // Static callback function that gets called when our DYLD notification -// breakpoint gets hit. We update all of our image infos and then -// let our super class DynamicLoader class decide if we should stop -// or not (based on global preference). +// breakpoint gets hit. We update all of our image infos and then let our super +// class DynamicLoader class decide if we should stop or not (based on global +// preference). //---------------------------------------------------------------------- bool DynamicLoaderMacOSXDYLD::NotifyBreakpointHit( void *baton, StoppointCallbackContext *context, lldb::user_id_t break_id, lldb::user_id_t break_loc_id) { // Let the event know that the images have changed // DYLD passes three arguments to the notification breakpoint. - // Arg1: enum dyld_image_mode mode - 0 = adding, 1 = removing - // Arg2: uint32_t infoCount - Number of shared libraries added - // Arg3: dyld_image_info info[] - Array of structs of the form: + // Arg1: enum dyld_image_mode mode - 0 = adding, 1 = removing Arg2: uint32_t + // infoCount - Number of shared libraries added Arg3: dyld_image_info + // info[] - Array of structs of the form: // const struct mach_header // *imageLoadAddress // const char *imageFilePath @@ -335,11 +334,10 @@ bool DynamicLoaderMacOSXDYLD::NotifyBreakpointHit( DynamicLoaderMacOSXDYLD *dyld_instance = (DynamicLoaderMacOSXDYLD *)baton; // First step is to see if we've already initialized the all image infos. If - // we haven't then this function - // will do so and return true. In the course of initializing the - // all_image_infos it will read the complete - // current state, so we don't need to figure out what has changed from the - // data passed in to us. + // we haven't then this function will do so and return true. In the course + // of initializing the all_image_infos it will read the complete current + // state, so we don't need to figure out what has changed from the data + // passed in to us. ExecutionContext exe_ctx(context->exe_ctx_ref); Process *process = exe_ctx.GetProcessPtr(); @@ -388,11 +386,9 @@ bool DynamicLoaderMacOSXDYLD::NotifyBreakpointHit( argument_values.GetValueAtIndex(1)->GetScalar().UInt(-1); if (image_infos_count != static_cast<uint32_t>(-1)) { // Got the number added, now go through the array of added elements, - // putting out the mach header - // address, and adding the image. - // Note, I'm not putting in logging here, since the AddModules & - // RemoveModules functions do - // all the logging internally. + // putting out the mach header address, and adding the image. Note, + // I'm not putting in logging here, since the AddModules & + // RemoveModules functions do all the logging internally. lldb::addr_t image_infos_addr = argument_values.GetValueAtIndex(2)->GetScalar().ULongLong(); @@ -467,12 +463,12 @@ bool DynamicLoaderMacOSXDYLD::ReadAllImageInfosStructure() { if (m_process->ReadMemory(m_dyld_all_image_infos_addr, buf, 4, error) == 4) { m_dyld_all_image_infos.version = data.GetU32(&offset); - // If anything in the high byte is set, we probably got the byte - // order incorrect (the process might not have it set correctly - // yet due to attaching to a program without a specified file). + // If anything in the high byte is set, we probably got the byte order + // incorrect (the process might not have it set correctly yet due to + // attaching to a program without a specified file). if (m_dyld_all_image_infos.version & 0xff000000) { - // We have guessed the wrong byte order. Swap it and try - // reading the version again. + // We have guessed the wrong byte order. Swap it and try reading the + // version again. if (byte_order == eByteOrderLittle) byte_order = eByteOrderBig; else @@ -508,21 +504,17 @@ bool DynamicLoaderMacOSXDYLD::ReadAllImageInfosStructure() { uint64_t dyld_all_image_infos_addr = data.GetPointer(&offset); // When we started, we were given the actual address of the - // all_image_infos - // struct (probably via TASK_DYLD_INFO) in memory - this address is - // stored in - // m_dyld_all_image_infos_addr and is the most accurate address we have. + // all_image_infos struct (probably via TASK_DYLD_INFO) in memory - + // this address is stored in m_dyld_all_image_infos_addr and is the + // most accurate address we have. // We read the dyld_all_image_infos struct from memory; it contains its - // own address. - // If the address in the struct does not match the actual address, - // the dyld we're looking at has been loaded at a different location - // (slid) from - // where it intended to load. The addresses in the dyld_all_image_infos - // struct - // are the original, non-slid addresses, and need to be adjusted. Most - // importantly - // the address of dyld and the notification address need to be adjusted. + // own address. If the address in the struct does not match the actual + // address, the dyld we're looking at has been loaded at a different + // location (slid) from where it intended to load. The addresses in + // the dyld_all_image_infos struct are the original, non-slid + // addresses, and need to be adjusted. Most importantly the address of + // dyld and the notification address need to be adjusted. if (dyld_all_image_infos_addr != m_dyld_all_image_infos_addr) { uint64_t image_infos_offset = @@ -615,14 +607,13 @@ bool DynamicLoaderMacOSXDYLD::RemoveModulesUsingImageInfosAddress( image_infos[idx].PutToLog(log); } - // Remove this image_infos from the m_all_image_infos. We do the comparison - // by address - // rather than by file spec because we can have many modules with the same - // "file spec" in the - // case that they are modules loaded from memory. + // Remove this image_infos from the m_all_image_infos. We do the + // comparison by address rather than by file spec because we can have many + // modules with the same "file spec" in the case that they are modules + // loaded from memory. // - // Also copy over the uuid from the old entry to the removed entry so we can - // use it to lookup the module in the module list. + // Also copy over the uuid from the old entry to the removed entry so we + // can use it to lookup the module in the module list. ImageInfo::collection::iterator pos, end = m_dyld_image_infos.end(); for (pos = m_dyld_image_infos.begin(); pos != end; pos++) { @@ -630,8 +621,7 @@ bool DynamicLoaderMacOSXDYLD::RemoveModulesUsingImageInfosAddress( image_infos[idx].uuid = (*pos).uuid; // Add the module from this image_info to the "unloaded_module_list". - // We'll remove them all at - // one go later on. + // We'll remove them all at one go later on. ModuleSP unload_image_module_sp( FindTargetModuleForImageInfo(image_infos[idx], false, NULL)); @@ -713,11 +703,10 @@ bool DynamicLoaderMacOSXDYLD::ReadImageInfos( } //---------------------------------------------------------------------- -// If we have found where the "_dyld_all_image_infos" lives in memory, -// read the current info from it, and then update all image load -// addresses (or lack thereof). Only do this if this is the first time -// we're reading the dyld infos. Return true if we actually read anything, -// and false otherwise. +// If we have found where the "_dyld_all_image_infos" lives in memory, read the +// current info from it, and then update all image load addresses (or lack +// thereof). Only do this if this is the first time we're reading the dyld +// infos. Return true if we actually read anything, and false otherwise. //---------------------------------------------------------------------- bool DynamicLoaderMacOSXDYLD::InitializeFromAllImageInfos() { Log *log(lldb_private::GetLogIfAnyCategoriesSet(LIBLLDB_LOG_DYNAMIC_LOADER)); @@ -748,14 +737,11 @@ bool DynamicLoaderMacOSXDYLD::InitializeFromAllImageInfos() { } // Now we have one more bit of business. If there is a library left in the - // images for our target that - // doesn't have a load address, then it must be something that we were - // expecting to load (for instance we - // read a load command for it) but it didn't in fact load - probably because - // DYLD_*_PATH pointed - // to an equivalent version. We don't want it to stay in the target's - // module list or it will confuse - // us, so unload it here. + // images for our target that doesn't have a load address, then it must be + // something that we were expecting to load (for instance we read a load + // command for it) but it didn't in fact load - probably because + // DYLD_*_PATH pointed to an equivalent version. We don't want it to stay + // in the target's module list or it will confuse us, so unload it here. Target &target = m_process->GetTarget(); const ModuleList &target_modules = target.GetImages(); ModuleList not_loaded_modules; @@ -784,8 +770,8 @@ bool DynamicLoaderMacOSXDYLD::InitializeFromAllImageInfos() { } //---------------------------------------------------------------------- -// Read a mach_header at ADDR into HEADER, and also fill in the load -// command data into LOAD_COMMAND_DATA if it is non-NULL. +// Read a mach_header at ADDR into HEADER, and also fill in the load command +// data into LOAD_COMMAND_DATA if it is non-NULL. // // Returns true if we succeed, false if we fail for any reason. //---------------------------------------------------------------------- @@ -840,8 +826,8 @@ bool DynamicLoaderMacOSXDYLD::ReadMachHeader(lldb::addr_t addr, load_cmd_data_sp->GetByteSize(), error); if (load_cmd_bytes_read == header->sizeofcmds) { - // Set the load command data and also set the correct endian - // swap settings and the correct address size + // Set the load command data and also set the correct endian swap + // settings and the correct address size load_command_data->SetData(load_cmd_data_sp, 0, header->sizeofcmds); load_command_data->SetByteOrder(data.GetByteOrder()); load_command_data->SetAddressByteSize(data.GetAddressByteSize()); @@ -867,8 +853,8 @@ uint32_t DynamicLoaderMacOSXDYLD::ParseLoadCommands(const DataExtractor &data, dylib_info.Clear(true); for (cmd_idx = 0; cmd_idx < dylib_info.header.ncmds; cmd_idx++) { - // Clear out any load command specific data from DYLIB_INFO since - // we are about to read it. + // Clear out any load command specific data from DYLIB_INFO since we are + // about to read it. if (data.ValidOffsetForDataOfSize(offset, sizeof(llvm::MachO::load_command))) { @@ -880,8 +866,8 @@ uint32_t DynamicLoaderMacOSXDYLD::ParseLoadCommands(const DataExtractor &data, case llvm::MachO::LC_SEGMENT: { segment.name.SetTrimmedCStringWithLength( (const char *)data.GetData(&offset, 16), 16); - // We are putting 4 uint32_t values 4 uint64_t values so - // we have to use multiple 32 bit gets below. + // We are putting 4 uint32_t values 4 uint64_t values so we have to use + // multiple 32 bit gets below. segment.vmaddr = data.GetU32(&offset); segment.vmsize = data.GetU32(&offset); segment.fileoff = data.GetU32(&offset); @@ -922,24 +908,21 @@ uint32_t DynamicLoaderMacOSXDYLD::ParseLoadCommands(const DataExtractor &data, } } - // All sections listed in the dyld image info structure will all - // either be fixed up already, or they will all be off by a single - // slide amount that is determined by finding the first segment - // that is at file offset zero which also has bytes (a file size - // that is greater than zero) in the object file. + // All sections listed in the dyld image info structure will all either be + // fixed up already, or they will all be off by a single slide amount that is + // determined by finding the first segment that is at file offset zero which + // also has bytes (a file size that is greater than zero) in the object file. // Determine the slide amount (if any) const size_t num_sections = dylib_info.segments.size(); for (size_t i = 0; i < num_sections; ++i) { - // Iterate through the object file sections to find the - // first section that starts of file offset zero and that - // has bytes in the file... + // Iterate through the object file sections to find the first section that + // starts of file offset zero and that has bytes in the file... if ((dylib_info.segments[i].fileoff == 0 && dylib_info.segments[i].filesize > 0) || (dylib_info.segments[i].name == ConstString("__TEXT"))) { dylib_info.slide = dylib_info.address - dylib_info.segments[i].vmaddr; - // We have found the slide amount, so we can exit - // this for loop. + // We have found the slide amount, so we can exit this for loop. break; } } @@ -984,11 +967,11 @@ void DynamicLoaderMacOSXDYLD::UpdateImageInfosHeaderAndLoadCommands( // Don't load dependent images since we are in dyld where we will know // and find out about all images that are loaded. Also when setting the // executable module, it will clear the targets module list, and if we - // have an in memory dyld module, it will get removed from the list - // so we will need to add it back after setting the executable module, - // so we first try and see if we already have a weak pointer to the - // dyld module, make it into a shared pointer, then add the executable, - // then re-add it back to make sure it is always in the list. + // have an in memory dyld module, it will get removed from the list so + // we will need to add it back after setting the executable module, so + // we first try and see if we already have a weak pointer to the dyld + // module, make it into a shared pointer, then add the executable, then + // re-add it back to make sure it is always in the list. ModuleSP dyld_module_sp(GetDYLDModule()); const bool get_dependent_images = false; @@ -1009,8 +992,8 @@ void DynamicLoaderMacOSXDYLD::UpdateImageInfosHeaderAndLoadCommands( } //---------------------------------------------------------------------- -// Dump the _dyld_all_image_infos members and all current image infos -// that we have parsed to the file handle provided. +// Dump the _dyld_all_image_infos members and all current image infos that we +// have parsed to the file handle provided. //---------------------------------------------------------------------- void DynamicLoaderMacOSXDYLD::PutToLog(Log *log) const { if (log == NULL) @@ -1039,10 +1022,9 @@ bool DynamicLoaderMacOSXDYLD::SetNotificationBreakpoint() { if (m_break_id == LLDB_INVALID_BREAK_ID) { if (m_dyld_all_image_infos.notification != LLDB_INVALID_ADDRESS) { Address so_addr; - // Set the notification breakpoint and install a breakpoint - // callback function that will get called each time the - // breakpoint gets hit. We will use this to track when shared - // libraries get loaded/unloaded. + // Set the notification breakpoint and install a breakpoint callback + // function that will get called each time the breakpoint gets hit. We + // will use this to track when shared libraries get loaded/unloaded. bool resolved = m_process->GetTarget().ResolveLoadAddress( m_dyld_all_image_infos.notification, so_addr); if (!resolved) { @@ -1071,9 +1053,9 @@ bool DynamicLoaderMacOSXDYLD::SetNotificationBreakpoint() { Status DynamicLoaderMacOSXDYLD::CanLoadImage() { Status error; - // In order for us to tell if we can load a shared library we verify that - // the dylib_info_addr isn't zero (which means no shared libraries have - // been set yet, or dyld is currently mucking with the shared library list). + // In order for us to tell if we can load a shared library we verify that the + // dylib_info_addr isn't zero (which means no shared libraries have been set + // yet, or dyld is currently mucking with the shared library list). if (ReadAllImageInfosStructure()) { // TODO: also check the _dyld_global_lock_held variable in // libSystem.B.dylib? @@ -1099,13 +1081,10 @@ bool DynamicLoaderMacOSXDYLD::GetSharedCacheInformation( addr_t all_image_infos = m_process->GetImageInfoAddress(); // The address returned by GetImageInfoAddress may be the address of dyld - // (don't want) - // or it may be the address of the dyld_all_image_infos structure (want). - // The first four - // bytes will be either the version field (all_image_infos) or a Mach-O file - // magic constant. - // Version 13 and higher of dyld_all_image_infos is required to get the - // sharedCacheUUID field. + // (don't want) or it may be the address of the dyld_all_image_infos + // structure (want). The first four bytes will be either the version field + // (all_image_infos) or a Mach-O file magic constant. Version 13 and higher + // of dyld_all_image_infos is required to get the sharedCacheUUID field. Status err; uint32_t version_or_magic = diff --git a/lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DYLDRendezvous.cpp b/lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DYLDRendezvous.cpp index e601d64f0d8..effef9e3eb8 100644 --- a/lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DYLDRendezvous.cpp +++ b/lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DYLDRendezvous.cpp @@ -45,8 +45,8 @@ static addr_t ResolveRendezvousAddress(Process *process) { if (log) log->Printf("%s info_location = 0x%" PRIx64, __FUNCTION__, info_location); - // If the process fails to return an address, fall back to seeing if the local - // object file can help us find it. + // If the process fails to return an address, fall back to seeing if the + // local object file can help us find it. if (info_location == LLDB_INVALID_ADDRESS) { Target *target = &process->GetTarget(); if (target) { @@ -190,8 +190,8 @@ bool DYLDRendezvous::UpdateSOEntries(bool fromRemote) { if (!fromRemote && m_current.map_addr == 0) return false; - // When the previous and current states are consistent this is the first - // time we have been asked to update. Just take a snapshot of the currently + // When the previous and current states are consistent this is the first time + // we have been asked to update. Just take a snapshot of the currently // loaded modules. if (m_previous.state == eConsistent && m_current.state == eConsistent) return fromRemote ? SaveSOEntriesFromRemote(module_list) @@ -200,9 +200,9 @@ bool DYLDRendezvous::UpdateSOEntries(bool fromRemote) { // If we are about to add or remove a shared object clear out the current // state and take a snapshot of the currently loaded images. if (m_current.state == eAdd || m_current.state == eDelete) { - // Some versions of the android dynamic linker might send two - // notifications with state == eAdd back to back. Ignore them - // until we get an eConsistent notification. + // Some versions of the android dynamic linker might send two notifications + // with state == eAdd back to back. Ignore them until we get an eConsistent + // notification. if (!(m_previous.state == eConsistent || (m_previous.state == eAdd && m_current.state == eDelete))) return false; @@ -449,13 +449,11 @@ std::string DYLDRendezvous::ReadStringFromMemory(addr_t addr) { } // Returns true if the load bias reported by the linker is incorrect for the -// given entry. This -// function is used to handle cases where we want to work around a bug in the -// system linker. +// given entry. This function is used to handle cases where we want to work +// around a bug in the system linker. static bool isLoadBiasIncorrect(Target &target, const std::string &file_path) { // On Android L (API 21, 22) the load address of the "/system/bin/linker" - // isn't filled in - // correctly. + // isn't filled in correctly. uint32_t os_major = 0, os_minor = 0, os_update = 0; if (target.GetArchitecture().GetTriple().isAndroid() && target.GetPlatform()->GetOSVersion(os_major, os_minor, os_update) && @@ -471,8 +469,7 @@ static bool isLoadBiasIncorrect(Target &target, const std::string &file_path) { void DYLDRendezvous::UpdateBaseAddrIfNecessary(SOEntry &entry, std::string const &file_path) { // If the load bias reported by the linker is incorrect then fetch the load - // address of the file - // from the proc file system. + // address of the file from the proc file system. if (isLoadBiasIncorrect(m_process->GetTarget(), file_path)) { lldb::addr_t load_addr = LLDB_INVALID_ADDRESS; bool is_loaded = false; @@ -491,8 +488,8 @@ bool DYLDRendezvous::ReadSOEntryFromMemory(lldb::addr_t addr, SOEntry &entry) { if (!(addr = ReadPointer(addr, &entry.base_addr))) return false; - // mips adds an extra load offset field to the link map struct on - // FreeBSD and NetBSD (need to validate other OSes). + // mips adds an extra load offset field to the link map struct on FreeBSD and + // NetBSD (need to validate other OSes). // http://svnweb.freebsd.org/base/head/sys/sys/link_elf.h?revision=217153&view=markup#l57 const ArchSpec &arch = m_process->GetTarget().GetArchitecture(); if ((arch.GetTriple().getOS() == llvm::Triple::FreeBSD || diff --git a/lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.cpp b/lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.cpp index 0ad9edc1d48..26825d879f0 100644 --- a/lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.cpp +++ b/lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.cpp @@ -155,8 +155,8 @@ void DynamicLoaderPOSIXDYLD::DidAttach() { LoadAllCurrentModules(); if (!SetRendezvousBreakpoint()) { - // If we cannot establish rendezvous breakpoint right now - // we'll try again at entry point. + // If we cannot establish rendezvous breakpoint right now we'll try again + // at entry point. ProbeEntry(); } @@ -199,8 +199,8 @@ void DynamicLoaderPOSIXDYLD::DidLaunch() { __FUNCTION__); if (!SetRendezvousBreakpoint()) { - // If we cannot establish rendezvous breakpoint right now - // we'll try again at entry point. + // If we cannot establish rendezvous breakpoint right now we'll try again + // at entry point. ProbeEntry(); } @@ -259,11 +259,11 @@ void DynamicLoaderPOSIXDYLD::ProbeEntry() { } // The runtime linker has run and initialized the rendezvous structure once the -// process has hit its entry point. When we hit the corresponding breakpoint we -// interrogate the rendezvous structure to get the load addresses of all +// process has hit its entry point. When we hit the corresponding breakpoint +// we interrogate the rendezvous structure to get the load addresses of all // dependent modules for the process. Similarly, we can discover the runtime -// linker function and setup a breakpoint to notify us of any dynamically loaded -// modules (via dlopen). +// linker function and setup a breakpoint to notify us of any dynamically +// loaded modules (via dlopen). bool DynamicLoaderPOSIXDYLD::EntryBreakpointHit( void *baton, StoppointCallbackContext *context, user_id_t break_id, user_id_t break_loc_id) { @@ -281,13 +281,11 @@ bool DynamicLoaderPOSIXDYLD::EntryBreakpointHit( : LLDB_INVALID_PROCESS_ID); // Disable the breakpoint --- if a stop happens right after this, which we've - // seen on occasion, we don't - // want the breakpoint stepping thread-plan logic to show a breakpoint - // instruction at the disassembled - // entry point to the program. Disabling it prevents it. (One-shot is not - // enough - one-shot removal logic - // only happens after the breakpoint goes public, which wasn't happening in - // our scenario). + // seen on occasion, we don't want the breakpoint stepping thread-plan logic + // to show a breakpoint instruction at the disassembled entry point to the + // program. Disabling it prevents it. (One-shot is not enough - one-shot + // removal logic only happens after the breakpoint goes public, which wasn't + // happening in our scenario). if (dyld_instance->m_process) { BreakpointSP breakpoint_sp = dyld_instance->m_process->GetTarget().GetBreakpointByID(break_id); @@ -345,8 +343,8 @@ bool DynamicLoaderPOSIXDYLD::SetRendezvousBreakpoint() { return false; } - // Function names from different dynamic loaders that are known - // to be used as rendezvous between the loader and debuggers. + // Function names from different dynamic loaders that are known to be used + // as rendezvous between the loader and debuggers. static std::vector<std::string> DebugStateCandidates{ "_dl_debug_state", "rtld_db_dlactivity", "__dl_rtld_db_dlactivity", "r_debug_state", "_r_debug_state", "_rtld_debug_state", @@ -572,8 +570,8 @@ void DynamicLoaderPOSIXDYLD::LoadAllCurrentModules() { return; } - // The rendezvous class doesn't enumerate the main module, so track - // that ourselves here. + // The rendezvous class doesn't enumerate the main module, so track that + // ourselves here. ModuleSP executable = GetTargetExecutable(); m_loaded_modules[executable] = m_rendezvous.GetLinkMapAddress(); diff --git a/lldb/source/Plugins/DynamicLoader/Static/DynamicLoaderStatic.cpp b/lldb/source/Plugins/DynamicLoader/Static/DynamicLoaderStatic.cpp index 291695cb68c..2960e393946 100644 --- a/lldb/source/Plugins/DynamicLoader/Static/DynamicLoaderStatic.cpp +++ b/lldb/source/Plugins/DynamicLoader/Static/DynamicLoaderStatic.cpp @@ -19,9 +19,9 @@ using namespace lldb; using namespace lldb_private; //---------------------------------------------------------------------- -// Create an instance of this class. This function is filled into -// the plugin info class that gets handed out by the plugin factory and -// allows the lldb to instantiate an instance of this class. +// Create an instance of this class. This function is filled into the plugin +// info class that gets handed out by the plugin factory and allows the lldb to +// instantiate an instance of this class. //---------------------------------------------------------------------- DynamicLoader *DynamicLoaderStatic::CreateInstance(Process *process, bool force) { @@ -97,17 +97,17 @@ void DynamicLoaderStatic::LoadAllImagesAtFileAddresses() { if (section_list) { // All sections listed in the dyld image info structure will all // either be fixed up already, or they will all be off by a single - // slide amount that is determined by finding the first segment - // that is at file offset zero which also has bytes (a file size - // that is greater than zero) in the object file. + // slide amount that is determined by finding the first segment that + // is at file offset zero which also has bytes (a file size that is + // greater than zero) in the object file. // Determine the slide amount (if any) const size_t num_sections = section_list->GetSize(); size_t sect_idx = 0; for (sect_idx = 0; sect_idx < num_sections; ++sect_idx) { - // Iterate through the object file sections to find the - // first section that starts of file offset zero and that - // has bytes in the file... + // Iterate through the object file sections to find the first + // section that starts of file offset zero and that has bytes in + // the file... SectionSP section_sp(section_list->GetSectionAtIndex(sect_idx)); if (section_sp) { if (m_process->GetTarget().SetSectionLoadAddress( diff --git a/lldb/source/Plugins/ExpressionParser/Clang/ASTResultSynthesizer.cpp b/lldb/source/Plugins/ExpressionParser/Clang/ASTResultSynthesizer.cpp index 9e6a2f3acaf..524f9bd24f1 100644 --- a/lldb/source/Plugins/ExpressionParser/Clang/ASTResultSynthesizer.cpp +++ b/lldb/source/Plugins/ExpressionParser/Clang/ASTResultSynthesizer.cpp @@ -226,8 +226,7 @@ bool ASTResultSynthesizer::SynthesizeBodyResult(CompoundStmt *Body, return true; // In C++11, last_expr can be a LValueToRvalue implicit cast. Strip that off - // if that's the - // case. + // if that's the case. do { ImplicitCastExpr *implicit_cast = dyn_cast<ImplicitCastExpr>(last_expr); @@ -242,8 +241,8 @@ bool ASTResultSynthesizer::SynthesizeBodyResult(CompoundStmt *Body, } while (0); // is_lvalue is used to record whether the expression returns an assignable - // Lvalue or an - // Rvalue. This is relevant because they are handled differently. + // Lvalue or an Rvalue. This is relevant because they are handled + // differently. // // For Lvalues // diff --git a/lldb/source/Plugins/ExpressionParser/Clang/ClangASTSource.cpp b/lldb/source/Plugins/ExpressionParser/Clang/ClangASTSource.cpp index b929a052d41..c26b1a615a1 100644 --- a/lldb/source/Plugins/ExpressionParser/Clang/ClangASTSource.cpp +++ b/lldb/source/Plugins/ExpressionParser/Clang/ClangASTSource.cpp @@ -33,8 +33,8 @@ using namespace clang; using namespace lldb_private; //------------------------------------------------------------------ -// Scoped class that will remove an active lexical decl from the set -// when it goes out of scope. +// Scoped class that will remove an active lexical decl from the set when it +// goes out of scope. //------------------------------------------------------------------ namespace { class ScopedLexicalDeclEraser { @@ -141,8 +141,8 @@ ClangASTSource::~ClangASTSource() { m_ast_importer_sp->ForgetDestination(m_ast_context); // We are in the process of destruction, don't create clang ast context on - // demand - // by passing false to Target::GetScratchClangASTContext(create_on_demand). + // demand by passing false to + // Target::GetScratchClangASTContext(create_on_demand). ClangASTContext *scratch_clang_ast_context = m_target->GetScratchClangASTContext(false); @@ -231,8 +231,8 @@ bool ClangASTSource::FindExternalVisibleDeclsByName( } if (!GetLookupsEnabled()) { - // Wait until we see a '$' at the start of a name before we start doing - // any lookups so we can avoid lookup up all of the builtin types. + // Wait until we see a '$' at the start of a name before we start doing any + // lookups so we can avoid lookup up all of the builtin types. if (!decl_name.empty() && decl_name[0] == '$') { SetLookupsEnabled(true); } else { @@ -297,8 +297,8 @@ void ClangASTSource::CompleteType(TagDecl *tag_decl) { } if (!m_ast_importer_sp->CompleteTagDecl(tag_decl)) { - // We couldn't complete the type. Maybe there's a definition - // somewhere else that can be completed. + // We couldn't complete the type. Maybe there's a definition somewhere + // else that can be completed. if (log) log->Printf(" CTD[%u] Type could not be completed in the module in " @@ -398,8 +398,8 @@ void ClangASTSource::CompleteType(TagDecl *tag_decl) { const_cast<TagDecl *>(tag_type->getDecl()); // We have found a type by basename and we need to make sure the decl - // contexts - // are the same before we can try to complete this type with another + // contexts are the same before we can try to complete this type with + // another if (!ClangASTContext::DeclsAreEquivalent(tag_decl, candidate_tag_decl)) continue; @@ -1243,8 +1243,8 @@ void ClangASTSource::FindObjCMethodDecls(NameSearchContext &context) { break; // Fall back and check for methods in categories. If we find methods this - // way, we need to check that they're actually in - // categories on the desired class. + // way, we need to check that they're actually in categories on the desired + // class. SymbolContextList candidate_sc_list; @@ -1591,8 +1591,7 @@ void ClangASTSource::FindObjCPropertyAndIvarDecls(NameSearchContext &context) { do { // Check the runtime only if the debug information didn't have a complete - // interface - // and nothing was in the modules. + // interface and nothing was in the modules. lldb::ProcessSP process(m_target->GetProcessSP()); @@ -1645,12 +1644,9 @@ static bool ImportOffsetMap(llvm::DenseMap<const D *, O> &destination_map, ClangASTSource &source) { // When importing fields into a new record, clang has a hard requirement that // fields be imported in field offset order. Since they are stored in a - // DenseMap - // with a pointer as the key type, this means we cannot simply iterate over - // the - // map, as the order will be non-deterministic. Instead we have to sort by - // the offset - // and then insert in sorted order. + // DenseMap with a pointer as the key type, this means we cannot simply + // iterate over the map, as the order will be non-deterministic. Instead we + // have to sort by the offset and then insert in sorted order. typedef llvm::DenseMap<const D *, O> MapType; typedef typename MapType::value_type PairType; std::vector<PairType> sorted_items; @@ -2051,9 +2047,8 @@ CompilerType ClangASTSource::GuardedCopyType(const CompilerType &src_type) { if (copied_qual_type.getAsOpaquePtr() && copied_qual_type->getCanonicalTypeInternal().isNull()) - // this shouldn't happen, but we're hardening because the AST importer seems - // to be generating bad types - // on occasion. + // this shouldn't happen, but we're hardening because the AST importer + // seems to be generating bad types on occasion. return CompilerType(); return CompilerType(m_ast_context, copied_qual_type); @@ -2156,8 +2151,8 @@ clang::NamedDecl *NameSearchContext::AddFunDecl(const CompilerType &type, log->Printf("Function type wasn't a FunctionProtoType"); } - // If this is an operator (e.g. operator new or operator==), only insert - // the declaration we inferred from the symbol if we can provide the correct + // If this is an operator (e.g. operator new or operator==), only insert the + // declaration we inferred from the symbol if we can provide the correct // number of arguments. We shouldn't really inject random decl(s) for // functions that are analyzed semantically in a special way, otherwise we // will crash in clang. diff --git a/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp b/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp index 76f08dc426a..5a970aadd4f 100644 --- a/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp +++ b/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp @@ -213,8 +213,8 @@ private: m_exporter.getFromContext().getSourceManager().getFileID(loc); if (file != m_file) return false; - // We are assuming the Decl was parsed in this very expression, so it should - // not have external storage. + // We are assuming the Decl was parsed in this very expression, so it + // should not have external storage. lldbassert(!llvm::cast<DeclContext>(decl)->hasExternalLexicalStorage()); return true; } @@ -591,8 +591,8 @@ bool ClangExpressionDeclMap::GetFunctionInfo(const NamedDecl *decl, if (!entity) return false; - // We know m_parser_vars is valid since we searched for the variable by - // its NamedDecl + // We know m_parser_vars is valid since we searched for the variable by its + // NamedDecl ClangExpressionVariable::ParserVars *parser_vars = entity->GetParserVars(GetParserID()); @@ -867,8 +867,8 @@ void ClangExpressionDeclMap::FindExternalVisibleDecls( if (IgnoreName(name, false)) return; - // Only look for functions by name out in our symbols if the function - // doesn't start with our phony prefix of '$' + // Only look for functions by name out in our symbols if the function doesn't + // start with our phony prefix of '$' Target *target = m_parser_vars->m_exe_ctx.GetTargetPtr(); StackFrame *frame = m_parser_vars->m_exe_ctx.GetFramePtr(); SymbolContext sym_ctx; @@ -977,13 +977,11 @@ void ClangExpressionDeclMap::FindExternalVisibleDecls( m_struct_vars->m_object_pointer_type = self_user_type; } } else { - // This branch will get hit if we are executing code in the context of a - // function that - // claims to have an object pointer (through DW_AT_object_pointer?) but - // is not formally a - // method of the class. In that case, just look up the "this" variable - // in the current - // scope and use its type. + // This branch will get hit if we are executing code in the context of + // a function that claims to have an object pointer (through + // DW_AT_object_pointer?) but is not formally a method of the class. + // In that case, just look up the "this" variable in the current scope + // and use its type. // FIXME: This code is formally correct, but clang doesn't currently // emit DW_AT_object_pointer // for C++ so it hasn't actually been tested. @@ -1093,13 +1091,11 @@ void ClangExpressionDeclMap::FindExternalVisibleDecls( return; } else { - // This branch will get hit if we are executing code in the context of a - // function that - // claims to have an object pointer (through DW_AT_object_pointer?) but - // is not formally a - // method of the class. In that case, just look up the "self" variable - // in the current - // scope and use its type. + // This branch will get hit if we are executing code in the context of + // a function that claims to have an object pointer (through + // DW_AT_object_pointer?) but is not formally a method of the class. + // In that case, just look up the "self" variable in the current scope + // and use its type. VariableList *vars = frame->GetVariableList(false); @@ -1217,9 +1213,8 @@ void ClangExpressionDeclMap::FindExternalVisibleDecls( vars->GetVariableAtIndex(i)->GetDecl(); // Search for declarations matching the name. Do not include imported - // decls - // in the search if we are looking for decls in the artificial namespace - // $__lldb_local_vars. + // decls in the search if we are looking for decls in the artificial + // namespace $__lldb_local_vars. std::vector<CompilerDecl> found_decls = compiler_decl_context.FindDeclByName(name, namespace_decl.IsValid()); @@ -1285,15 +1280,15 @@ void ClangExpressionDeclMap::FindExternalVisibleDecls( append, sc_list); } - // If we found more than one function, see if we can use the - // frame's decl context to remove functions that are shadowed - // by other functions which match in type but are nearer in scope. + // If we found more than one function, see if we can use the frame's decl + // context to remove functions that are shadowed by other functions which + // match in type but are nearer in scope. // // AddOneFunction will not add a function whose type has already been - // added, so if there's another function in the list with a matching - // type, check to see if their decl context is a parent of the current - // frame's or was imported via a and using statement, and pick the - // best match according to lookup rules. + // added, so if there's another function in the list with a matching type, + // check to see if their decl context is a parent of the current frame's or + // was imported via a and using statement, and pick the best match + // according to lookup rules. if (sc_list.GetSize() > 1) { // Collect some info about our frame's context. StackFrame *frame = m_parser_vars->m_exe_ctx.GetFramePtr(); @@ -1321,11 +1316,10 @@ void ClangExpressionDeclMap::FindExternalVisibleDecls( SymbolContext m_sym_ctx; }; - // First, symplify things by looping through the symbol contexts - // to remove unwanted functions and separate out the functions we - // want to compare and prune into a separate list. - // Cache the info needed about the function declarations in a - // vector for efficiency. + // First, symplify things by looping through the symbol contexts to + // remove unwanted functions and separate out the functions we want to + // compare and prune into a separate list. Cache the info needed about + // the function declarations in a vector for efficiency. SymbolContextList sc_sym_list; uint32_t num_indices = sc_list.GetSize(); std::vector<FuncDeclInfo> fdi_cache; @@ -1335,16 +1329,16 @@ void ClangExpressionDeclMap::FindExternalVisibleDecls( SymbolContext sym_ctx; sc_list.GetContextAtIndex(index, sym_ctx); - // We don't know enough about symbols to compare them, - // but we should keep them in the list. + // We don't know enough about symbols to compare them, but we should + // keep them in the list. Function *function = sym_ctx.function; if (!function) { sc_sym_list.Append(sym_ctx); continue; } // Filter out functions without declaration contexts, as well as - // class/instance methods, since they'll be skipped in the - // code that follows anyway. + // class/instance methods, since they'll be skipped in the code that + // follows anyway. CompilerDeclContext func_decl_context = function->GetDeclContext(); if (!func_decl_context || func_decl_context.IsClassMethod(nullptr, nullptr, nullptr)) @@ -1363,11 +1357,10 @@ void ClangExpressionDeclMap::FindExternalVisibleDecls( fdi.m_copied_type = copied_func_type; fdi.m_decl_lvl = LLDB_INVALID_DECL_LEVEL; if (fdi.m_copied_type && func_decl_context) { - // Call CountDeclLevels to get the number of parent scopes we - // have to look through before we find the function declaration. - // When comparing functions of the same type, the one with a - // lower count will be closer to us in the lookup scope and - // shadows the other. + // Call CountDeclLevels to get the number of parent scopes we have + // to look through before we find the function declaration. When + // comparing functions of the same type, the one with a lower count + // will be closer to us in the lookup scope and shadows the other. clang::DeclContext *func_decl_ctx = (clang::DeclContext *)func_decl_context.GetOpaqueDeclContext(); fdi.m_decl_lvl = ast->CountDeclLevels( @@ -1536,9 +1529,8 @@ void ClangExpressionDeclMap::FindExternalVisibleDecls( } if (target && !context.m_found.variable && !namespace_decl) { - // We couldn't find a non-symbol variable for this. Now we'll hunt for - // a generic - // data symbol, and -- if it is found -- treat it as a variable. + // We couldn't find a non-symbol variable for this. Now we'll hunt for a + // generic data symbol, and -- if it is found -- treat it as a variable. Status error; const Symbol *data_symbol = diff --git a/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp b/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp index d9e53074b3f..6151e97bcd8 100644 --- a/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp +++ b/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp @@ -182,8 +182,7 @@ public: m_manager->AddDiagnostic(new_diagnostic); // Don't store away warning fixits, since the compiler doesn't have - // enough - // context in an expression for the warning to be useful. + // enough context in an expression for the warning to be useful. // FIXME: Should we try to filter out FixIts that apply to our generated // code, and not the user's expression? if (severity == eDiagnosticSeverityError) { @@ -226,10 +225,9 @@ ClangExpressionParser::ClangExpressionParser(ExecutionContextScope *exe_scope, m_code_generator(), m_pp_callbacks(nullptr) { Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_EXPRESSIONS)); - // We can't compile expressions without a target. So if the exe_scope is null - // or doesn't have a target, - // then we just need to get out of here. I'll lldb_assert and not make any of - // the compiler objects since + // We can't compile expressions without a target. So if the exe_scope is + // null or doesn't have a target, then we just need to get out of here. I'll + // lldb_assert and not make any of the compiler objects since // I can't return errors directly from the constructor. Further calls will // check if the compiler was made and // bag out if it wasn't. @@ -262,14 +260,14 @@ ClangExpressionParser::ClangExpressionParser(ExecutionContextScope *exe_scope, const auto target_machine = target_arch.GetMachine(); - // If the expression is being evaluated in the context of an existing - // stack frame, we introspect to see if the language runtime is available. + // If the expression is being evaluated in the context of an existing stack + // frame, we introspect to see if the language runtime is available. lldb::StackFrameSP frame_sp = exe_scope->CalculateStackFrame(); lldb::ProcessSP process_sp = exe_scope->CalculateProcess(); - // Make sure the user hasn't provided a preferred execution language - // with `expression --language X -- ...` + // Make sure the user hasn't provided a preferred execution language with + // `expression --language X -- ...` if (frame_sp && frame_lang == lldb::eLanguageTypeUnknown) frame_lang = frame_sp->GetLanguage(); @@ -281,8 +279,7 @@ ClangExpressionParser::ClangExpressionParser(ExecutionContextScope *exe_scope, } // 2. Configure the compiler with a set of default options that are - // appropriate - // for most situations. + // appropriate for most situations. if (target_arch.IsValid()) { std::string triple = target_arch.GetTriple().str(); m_compiler->getTargetOpts().Triple = triple; @@ -292,19 +289,17 @@ ClangExpressionParser::ClangExpressionParser(ExecutionContextScope *exe_scope, } else { // If we get here we don't have a valid target and just have to guess. // Sometimes this will be ok to just use the host target triple (when we - // evaluate say "2+3", but other - // expressions like breakpoint conditions and other things that _are_ target - // specific really shouldn't just be - // using the host triple. In such a case the language runtime should expose - // an overridden options set (3), - // below. + // evaluate say "2+3", but other expressions like breakpoint conditions and + // other things that _are_ target specific really shouldn't just be using + // the host triple. In such a case the language runtime should expose an + // overridden options set (3), below. m_compiler->getTargetOpts().Triple = llvm::sys::getDefaultTargetTriple(); if (log) log->Printf("Using default target triple of %s", m_compiler->getTargetOpts().Triple.c_str()); } - // Now add some special fixes for known architectures: - // Any arm32 iOS environment, but not on arm64 + // Now add some special fixes for known architectures: Any arm32 iOS + // environment, but not on arm64 if (m_compiler->getTargetOpts().Triple.find("arm64") == std::string::npos && m_compiler->getTargetOpts().Triple.find("arm") != std::string::npos && m_compiler->getTargetOpts().Triple.find("ios") != std::string::npos) { @@ -317,8 +312,8 @@ ClangExpressionParser::ClangExpressionParser(ExecutionContextScope *exe_scope, m_compiler->getTargetOpts().Features.push_back("+sse2"); } - // Set the target CPU to generate code for. - // This will be empty for any CPU that doesn't really need to make a special + // Set the target CPU to generate code for. This will be empty for any CPU + // that doesn't really need to make a special // CPU string. m_compiler->getTargetOpts().CPU = target_arch.GetClangTargetCPU(); @@ -328,11 +323,9 @@ ClangExpressionParser::ClangExpressionParser(ExecutionContextScope *exe_scope, m_compiler->getTargetOpts().ABI = abi; // 3. Now allow the runtime to provide custom configuration options for the - // target. - // In this case, a specialized language runtime is available and we can query - // it for extra options. - // For 99% of use cases, this will not be needed and should be provided when - // basic platform detection is not enough. + // target. In this case, a specialized language runtime is available and we + // can query it for extra options. For 99% of use cases, this will not be + // needed and should be provided when basic platform detection is not enough. if (lang_rt) overridden_target_opts = lang_rt->GetOverrideExprOptions(m_compiler->getTargetOpts()); @@ -378,9 +371,9 @@ ClangExpressionParser::ClangExpressionParser(ExecutionContextScope *exe_scope, case lldb::eLanguageTypeC11: // FIXME: the following language option is a temporary workaround, // to "ask for C, get C++." - // For now, the expression parser must use C++ anytime the - // language is a C family language, because the expression parser - // uses features of C++ to capture values. + // For now, the expression parser must use C++ anytime the language is a C + // family language, because the expression parser uses features of C++ to + // capture values. m_compiler->getLangOpts().CPlusPlus = true; break; case lldb::eLanguageTypeObjC: @@ -392,10 +385,10 @@ ClangExpressionParser::ClangExpressionParser(ExecutionContextScope *exe_scope, // Clang now sets as default C++14 as the default standard (with // GNU extensions), so we do the same here to avoid mismatches that - // cause compiler error when evaluating expressions (e.g. nullptr - // not found as it's a C++11 feature). Currently lldb evaluates - // C++14 as C++11 (see two lines below) so we decide to be consistent - // with that, but this could be re-evaluated in the future. + // cause compiler error when evaluating expressions (e.g. nullptr not found + // as it's a C++11 feature). Currently lldb evaluates C++14 as C++11 (see + // two lines below) so we decide to be consistent with that, but this could + // be re-evaluated in the future. m_compiler->getLangOpts().CPlusPlus11 = true; break; case lldb::eLanguageTypeC_plus_plus: @@ -407,8 +400,8 @@ ClangExpressionParser::ClangExpressionParser(ExecutionContextScope *exe_scope, case lldb::eLanguageTypeC_plus_plus_03: m_compiler->getLangOpts().CPlusPlus = true; // FIXME: the following language option is a temporary workaround, - // to "ask for C++, get ObjC++". Apple hopes to remove this requirement - // on non-Apple platforms, but for now it is needed. + // to "ask for C++, get ObjC++". Apple hopes to remove this requirement on + // non-Apple platforms, but for now it is needed. m_compiler->getLangOpts().ObjC1 = true; break; case lldb::eLanguageTypeObjC_plus_plus: @@ -434,10 +427,9 @@ ClangExpressionParser::ClangExpressionParser(ExecutionContextScope *exe_scope, ArchSpec(m_compiler->getTargetOpts().Triple.c_str()) .CharIsSignedByDefault(); - // Spell checking is a nice feature, but it ends up completing a - // lot of types that we didn't strictly speaking need to complete. - // As a result, we spend a long time parsing and importing debug - // information. + // Spell checking is a nice feature, but it ends up completing a lot of types + // that we didn't strictly speaking need to complete. As a result, we spend a + // long time parsing and importing debug information. m_compiler->getLangOpts().SpellChecking = false; if (process_sp && m_compiler->getLangOpts().ObjC1) { @@ -513,8 +505,8 @@ ClangExpressionParser::ClangExpressionParser(ExecutionContextScope *exe_scope, m_compiler->getPreprocessor().addPPCallbacks(std::move(pp_callbacks)); } - // 8. Most of this we get from the CompilerInstance, but we - // also want to give the context an ExternalASTSource. + // 8. Most of this we get from the CompilerInstance, but we also want to give + // the context an ExternalASTSource. m_selector_table.reset(new SelectorTable()); m_builtin_context.reset(new Builtin::Context()); diff --git a/lldb/source/Plugins/ExpressionParser/Clang/ClangFunctionCaller.cpp b/lldb/source/Plugins/ExpressionParser/Clang/ClangFunctionCaller.cpp index a26ceda82d5..e3e0ed49181 100644 --- a/lldb/source/Plugins/ExpressionParser/Clang/ClangFunctionCaller.cpp +++ b/lldb/source/Plugins/ExpressionParser/Clang/ClangFunctionCaller.cpp @@ -101,14 +101,12 @@ ClangFunctionCaller::CompileFunction(lldb::ThreadSP thread_to_use_sp, m_wrapper_function_text.append(" (*fn_ptr) ("); // Get the number of arguments. If we have a function type and it is - // prototyped, - // trust that, otherwise use the values we were given. + // prototyped, trust that, otherwise use the values we were given. // FIXME: This will need to be extended to handle Variadic functions. We'll // need // to pull the defined arguments out of the function, then add the types from - // the - // arguments list for the variable arguments. + // the arguments list for the variable arguments. uint32_t num_args = UINT32_MAX; bool trust_function = false; diff --git a/lldb/source/Plugins/ExpressionParser/Clang/ClangModulesDeclVendor.cpp b/lldb/source/Plugins/ExpressionParser/Clang/ClangModulesDeclVendor.cpp index eaa0315d146..020f8821f0b 100644 --- a/lldb/source/Plugins/ExpressionParser/Clang/ClangModulesDeclVendor.cpp +++ b/lldb/source/Plugins/ExpressionParser/Clang/ClangModulesDeclVendor.cpp @@ -40,9 +40,9 @@ using namespace lldb_private; namespace { -// Any Clang compiler requires a consumer for diagnostics. This one stores them -// as strings -// so we can provide them to the user in case a module failed to load. +// Any Clang compiler requires a consumer for diagnostics. This one stores +// them as strings so we can provide them to the user in case a module failed +// to load. class StoringDiagnosticConsumer : public clang::DiagnosticConsumer { public: StoringDiagnosticConsumer(); @@ -62,8 +62,7 @@ private: }; // The private implementation of our ClangModulesDeclVendor. Contains all the -// Clang state required -// to load modules. +// Clang state required to load modules. class ClangModulesDeclVendorImpl : public ClangModulesDeclVendor { public: ClangModulesDeclVendorImpl( diff --git a/lldb/source/Plugins/ExpressionParser/Clang/ClangUserExpression.cpp b/lldb/source/Plugins/ExpressionParser/Clang/ClangUserExpression.cpp index 18fe8b49227..d6526c08f1b 100644 --- a/lldb/source/Plugins/ExpressionParser/Clang/ClangUserExpression.cpp +++ b/lldb/source/Plugins/ExpressionParser/Clang/ClangUserExpression.cpp @@ -195,12 +195,10 @@ void ClangUserExpression::ScanContext(ExecutionContext &exe_ctx, Status &err) { } else if (clang::FunctionDecl *function_decl = ClangASTContext::DeclContextGetAsFunctionDecl(decl_context)) { // We might also have a function that said in the debug information that it - // captured an - // object pointer. The best way to deal with getting to the ivars at - // present is by pretending - // that this is a method of a class in whatever runtime the debug info says - // the object pointer - // belongs to. Do that here. + // captured an object pointer. The best way to deal with getting to the + // ivars at present is by pretending that this is a method of a class in + // whatever runtime the debug info says the object pointer belongs to. Do + // that here. ClangASTMetadata *metadata = ClangASTContext::DeclContextGetMetaData(decl_context, function_decl); @@ -290,10 +288,10 @@ void ClangUserExpression::ScanContext(ExecutionContext &exe_ctx, Status &err) { } } -// This is a really nasty hack, meant to fix Objective-C expressions of the form -// (int)[myArray count]. Right now, because the type information for count is -// not available, [myArray count] returns id, which can't be directly cast to -// int without causing a clang error. +// This is a really nasty hack, meant to fix Objective-C expressions of the +// form (int)[myArray count]. Right now, because the type information for +// count is not available, [myArray count] returns id, which can't be directly +// cast to int without causing a clang error. static void ApplyObjcCastHack(std::string &expr) { #define OBJC_CAST_HACK_FROM "(int)[" #define OBJC_CAST_HACK_TO "(int)(long long)[" @@ -463,17 +461,15 @@ bool ClangUserExpression::Parse(DiagnosticManager &diagnostic_manager, exe_scope = exe_ctx.GetTargetPtr(); // We use a shared pointer here so we can use the original parser - if it - // succeeds - // or the rewrite parser we might make if it fails. But the parser_sp will - // never be empty. + // succeeds or the rewrite parser we might make if it fails. But the + // parser_sp will never be empty. ClangExpressionParser parser(exe_scope, *this, generate_debug_info); unsigned num_errors = parser.Parse(diagnostic_manager); // Check here for FixItHints. If there are any try to apply the fixits and - // set the fixed text in m_fixed_text - // before returning an error. + // set the fixed text in m_fixed_text before returning an error. if (num_errors) { if (diagnostic_manager.HasFixIts()) { if (parser.RewriteExpression(diagnostic_manager)) { @@ -495,8 +491,8 @@ bool ClangUserExpression::Parse(DiagnosticManager &diagnostic_manager, } ////////////////////////////////////////////////////////////////////////////////////////// - // Prepare the output of the parser for execution, evaluating it statically if - // possible + // Prepare the output of the parser for execution, evaluating it statically + // if possible // { @@ -539,9 +535,9 @@ bool ClangUserExpression::Parse(DiagnosticManager &diagnostic_manager, register_execution_unit = true; } - // If there is more than one external function in the execution - // unit, it needs to keep living even if it's not top level, because - // the result could refer to that function. + // If there is more than one external function in the execution unit, it + // needs to keep living even if it's not top level, because the result + // could refer to that function. if (m_execution_unit_sp->GetJittedFunctions().size() > 1) { register_execution_unit = true; diff --git a/lldb/source/Plugins/ExpressionParser/Clang/IRForTarget.cpp b/lldb/source/Plugins/ExpressionParser/Clang/IRForTarget.cpp index 13f5657eedd..e51c9ee07b9 100644 --- a/lldb/source/Plugins/ExpressionParser/Clang/IRForTarget.cpp +++ b/lldb/source/Plugins/ExpressionParser/Clang/IRForTarget.cpp @@ -263,8 +263,7 @@ bool IRForTarget::CreateResultVariable(llvm::Function &llvm_function) { } // Get the next available result name from m_decl_map and create the - // persistent - // variable for it + // persistent variable for it // If the result is an Lvalue, it is emitted as a pointer; see // ASTResultSynthesizer::SynthesizeBodyResult. @@ -345,9 +344,9 @@ bool IRForTarget::CreateResultVariable(llvm::Function &llvm_function) { GlobalValue::ExternalLinkage, NULL, /* no initializer */ m_result_name.GetCString()); - // It's too late in compilation to create a new VarDecl for this, but we don't - // need to. We point the metadata at the old VarDecl. This creates an odd - // anomaly: a variable with a Value whose name is something like $0 and a + // It's too late in compilation to create a new VarDecl for this, but we + // don't need to. We point the metadata at the old VarDecl. This creates an + // odd anomaly: a variable with a Value whose name is something like $0 and a // Decl whose name is $__lldb_expr_result. This condition is handled in // ClangExpressionDeclMap::DoMaterialize, and the name of the variable is // fixed up. @@ -464,9 +463,7 @@ bool IRForTarget::RewriteObjCConstString(llvm::GlobalVariable *ns_str, // CFAllocatorRef -> i8* // UInt8 * -> i8* // CFIndex -> long (i32 or i64, as appropriate; we ask the module for its - // pointer size for now) - // CFStringEncoding -> i32 - // Boolean -> i8 + // pointer size for now) CFStringEncoding -> i32 Boolean -> i8 Type *arg_type_array[5]; @@ -801,9 +798,8 @@ bool IRForTarget::RewriteObjCSelector(Instruction *selector_load) { // Unpack the message name from the selector. In LLVM IR, an objc_msgSend // gets represented as // - // %tmp = load i8** @"OBJC_SELECTOR_REFERENCES_" ; <i8*> - // %call = call i8* (i8*, i8*, ...)* @objc_msgSend(i8* %obj, i8* %tmp, ...) - // ; <i8*> + // %tmp = load i8** @"OBJC_SELECTOR_REFERENCES_" ; <i8*> %call = call + // i8* (i8*, i8*, ...)* @objc_msgSend(i8* %obj, i8* %tmp, ...) ; <i8*> // // where %obj is the object pointer and %tmp is the selector. // @@ -870,7 +866,8 @@ bool IRForTarget::RewriteObjCSelector(Instruction *selector_load) { log->Printf("Found sel_registerName at 0x%" PRIx64, sel_registerName_addr); - // Build the function type: struct objc_selector *sel_registerName(uint8_t*) + // Build the function type: struct objc_selector + // *sel_registerName(uint8_t*) // The below code would be "more correct," but in actuality what's required // is uint8_t* @@ -980,11 +977,10 @@ bool IRForTarget::RewriteObjCClassReference(Instruction *class_load) { // %struct._objc_class** @OBJC_CLASS_REFERENCES_, align 4 // // @"OBJC_CLASS_REFERENCES_ is a bitcast of a character array called - // @OBJC_CLASS_NAME_. - // @OBJC_CLASS_NAME contains the string. + // @OBJC_CLASS_NAME_. @OBJC_CLASS_NAME contains the string. - // Find the pointer's initializer (a ConstantExpr with opcode BitCast) - // and get the string from its target + // Find the pointer's initializer (a ConstantExpr with opcode BitCast) and + // get the string from its target GlobalVariable *_objc_class_references_ = dyn_cast<GlobalVariable>(load->getPointerOperand()); @@ -1159,8 +1155,8 @@ bool IRForTarget::RewritePersistentAlloc(llvm::Instruction *persistent_alloc) { GlobalValue::ExternalLinkage, NULL, /* no initializer */ alloc->getName().str()); - // What we're going to do here is make believe this was a regular old external - // variable. That means we need to make the metadata valid. + // What we're going to do here is make believe this was a regular old + // external variable. That means we need to make the metadata valid. NamedMDNode *named_metadata = m_module->getOrInsertNamedMetadata("clang.global.decl.ptrs"); @@ -1175,8 +1171,7 @@ bool IRForTarget::RewritePersistentAlloc(llvm::Instruction *persistent_alloc) { named_metadata->addOperand(persistent_global_md); // Now, since the variable is a pointer variable, we will drop in a load of - // that - // pointer variable. + // that pointer variable. LoadInst *persistent_load = new LoadInst(persistent_global, "", alloc); @@ -1366,16 +1361,13 @@ bool IRForTarget::MaybeHandleVariable(Value *llvm_value_ptr) { if (name[0] == '$') { // The $__lldb_expr_result name indicates the return value has allocated - // as - // a static variable. Per the comment at - // ASTResultSynthesizer::SynthesizeBodyResult, - // accesses to this static variable need to be redirected to the result of - // dereferencing - // a pointer that is passed in as one of the arguments. + // as a static variable. Per the comment at + // ASTResultSynthesizer::SynthesizeBodyResult, accesses to this static + // variable need to be redirected to the result of dereferencing a + // pointer that is passed in as one of the arguments. // // Consequently, when reporting the size of the type, we report a pointer - // type pointing - // to the type of $__lldb_expr_result, not the type itself. + // type pointing to the type of $__lldb_expr_result, not the type itself. // // We also do this for any user-declared persistent variables. compiler_type = compiler_type.GetPointerType(); @@ -1965,12 +1957,11 @@ bool IRForTarget::ReplaceVariables(Function &llvm_function) { FunctionValueCache body_result_maker( [this, name, offset_type, offset, argument, value](llvm::Function *function) -> llvm::Value * { - // Per the comment at ASTResultSynthesizer::SynthesizeBodyResult, in - // cases where the result - // variable is an rvalue, we have to synthesize a dereference of the - // appropriate structure - // entry in order to produce the static variable that the AST thinks - // it is accessing. + // Per the comment at ASTResultSynthesizer::SynthesizeBodyResult, + // in cases where the result variable is an rvalue, we have to + // synthesize a dereference of the appropriate structure entry in + // order to produce the static variable that the AST thinks it is + // accessing. llvm::Instruction *entry_instruction = llvm::cast<Instruction>( m_entry_instruction_finder.GetValue(function)); @@ -2194,7 +2185,8 @@ bool IRForTarget::runOnModule(Module &llvm_module) { if (log) log->Printf("RewriteObjCSelectors() failed"); - // RewriteObjCSelectors() reports its own errors, so we don't do so here + // RewriteObjCSelectors() reports its own errors, so we don't do so + // here return false; } diff --git a/lldb/source/Plugins/ExpressionParser/Go/GoUserExpression.cpp b/lldb/source/Plugins/ExpressionParser/Go/GoUserExpression.cpp index f4b8cfbe03d..48c006a2cf7 100644 --- a/lldb/source/Plugins/ExpressionParser/Go/GoUserExpression.cpp +++ b/lldb/source/Plugins/ExpressionParser/Go/GoUserExpression.cpp @@ -400,8 +400,7 @@ ValueObjectSP GoUserExpression::GoInterpreter::VisitIdent(const GoASTIdent *e) { val = m_frame->GetValueObjectForFrameVariable(var_sp, m_use_dynamic); else { // When a variable is on the heap instead of the stack, go records a - // variable - // '&x' instead of 'x'. + // variable '&x' instead of 'x'. var_sp = var_list_sp->FindVariable(ConstString("&" + varname)); if (var_sp) { val = m_frame->GetValueObjectForFrameVariable(var_sp, m_use_dynamic); diff --git a/lldb/source/Plugins/Instruction/ARM/EmulateInstructionARM.cpp b/lldb/source/Plugins/Instruction/ARM/EmulateInstructionARM.cpp index 262a7914d24..ab5a464c15d 100644 --- a/lldb/source/Plugins/Instruction/ARM/EmulateInstructionARM.cpp +++ b/lldb/source/Plugins/Instruction/ARM/EmulateInstructionARM.cpp @@ -258,8 +258,8 @@ static bool GetARMDWARFRegisterInfo(unsigned reg_num, RegisterInfo ®_info) { reg_info.name = "f7"; break; - // Intel wireless MMX general purpose registers 0 - 7 - // XScale accumulator register 0 - 7 (they do overlap with wCGR0 - wCGR7) + // Intel wireless MMX general purpose registers 0 - 7 XScale accumulator + // register 0 - 7 (they do overlap with wCGR0 - wCGR7) case dwarf_wCGR0: reg_info.name = "wCGR0/ACC0"; break; @@ -901,7 +901,8 @@ uint32_t EmulateInstructionARM::GetFramePointerDWARFRegisterNumber() const { } // Push Multiple Registers stores multiple registers to the stack, storing to -// consecutive memory locations ending just below the address in SP, and updates +// consecutive memory locations ending just below the address in SP, and +// updates // SP to point to the start of the stored data. bool EmulateInstructionARM::EmulatePUSH(const uint32_t opcode, const ARMEncoding encoding) { @@ -1390,8 +1391,8 @@ bool EmulateInstructionARM::EmulateMOVRdImm(const uint32_t opcode, uint32_t imm32; // the immediate value to be written to Rd uint32_t carry = 0; // the carry bit after ThumbExpandImm_C or ARMExpandImm_C. - // for setflags == false, this value is a don't care - // initialized to 0 to silence the static analyzer + // for setflags == false, this value is a don't care initialized to + // 0 to silence the static analyzer bool setflags; switch (encoding) { case eEncodingT1: @@ -1473,12 +1474,11 @@ bool EmulateInstructionARM::EmulateMOVRdImm(const uint32_t opcode, // MUL multiplies two register values. The least significant 32 bits of the // result are written to the destination // register. These 32 bits do not depend on whether the source register values -// are considered to be signed values or -// unsigned values. +// are considered to be signed values or unsigned values. // // Optionally, it can update the condition flags based on the result. In the -// Thumb instruction set, this option is -// limited to only a few forms of the instruction. +// Thumb instruction set, this option is limited to only a few forms of the +// instruction. bool EmulateInstructionARM::EmulateMUL(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -1606,8 +1606,8 @@ bool EmulateInstructionARM::EmulateMUL(const uint32_t opcode, } // Bitwise NOT (immediate) writes the bitwise inverse of an immediate value to -// the destination register. -// It can optionally update the condition flags based on the value. +// the destination register. It can optionally update the condition flags based +// on the value. bool EmulateInstructionARM::EmulateMVNImm(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -1666,8 +1666,8 @@ bool EmulateInstructionARM::EmulateMVNImm(const uint32_t opcode, } // Bitwise NOT (register) writes the bitwise inverse of a register value to the -// destination register. -// It can optionally update the condition flags based on the result. +// destination register. It can optionally update the condition flags based on +// the result. bool EmulateInstructionARM::EmulateMVNReg(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -2005,9 +2005,9 @@ bool EmulateInstructionARM::EmulateADDSPRm(const uint32_t opcode, return true; } -// Branch with Link and Exchange Instruction Sets (immediate) calls a subroutine -// at a PC-relative address, and changes instruction set from ARM to Thumb, or -// from Thumb to ARM. +// Branch with Link and Exchange Instruction Sets (immediate) calls a +// subroutine at a PC-relative address, and changes instruction set from ARM to +// Thumb, or from Thumb to ARM. // BLX (immediate) bool EmulateInstructionARM::EmulateBLXImmediate(const uint32_t opcode, const ARMEncoding encoding) { @@ -2110,8 +2110,8 @@ bool EmulateInstructionARM::EmulateBLXImmediate(const uint32_t opcode, return true; } -// Branch with Link and Exchange (register) calls a subroutine at an address and -// instruction set specified by a register. +// Branch with Link and Exchange (register) calls a subroutine at an address +// and instruction set specified by a register. // BLX (register) bool EmulateInstructionARM::EmulateBLXRm(const uint32_t opcode, const ARMEncoding encoding) { @@ -2220,9 +2220,8 @@ bool EmulateInstructionARM::EmulateBXRm(const uint32_t opcode, } // Branch and Exchange Jazelle attempts to change to Jazelle state. If the -// attempt fails, it branches to an -// address and instruction set specified by a register as though it were a BX -// instruction. +// attempt fails, it branches to an address and instruction set specified by a +// register as though it were a BX instruction. // // TODO: Emulate Jazelle architecture? // We currently assume that switching to Jazelle state fails, thus @@ -2561,8 +2560,8 @@ bool EmulateInstructionARM::EmulateSTRRtSP(const uint32_t opcode, return true; } -// Vector Push stores multiple extension registers to the stack. -// It also updates SP to point to the start of the stored data. +// Vector Push stores multiple extension registers to the stack. It also +// updates SP to point to the start of the stored data. bool EmulateInstructionARM::EmulateVPUSH(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -2577,7 +2576,8 @@ bool EmulateInstructionARM::EmulateVPUSH(const uint32_t opcode, MemA[address,4] = S[d+r]; address = address+4; else for r = 0 to regs-1 - // Store as two word-aligned words in the correct order for current endianness. + // Store as two word-aligned words in the correct order for + // current endianness. MemA[address,4] = if BigEndian() then D[d+r]<63:32> else D[d+r]<31:0>; MemA[address+4,4] = if BigEndian() then D[d+r]<31:0> else D[d+r]<63:32>; address = address+8; @@ -2653,8 +2653,8 @@ bool EmulateInstructionARM::EmulateVPUSH(const uint32_t opcode, return true; } -// Vector Pop loads multiple extension registers from the stack. -// It also updates SP to point just above the loaded data. +// Vector Pop loads multiple extension registers from the stack. It also +// updates SP to point just above the loaded data. bool EmulateInstructionARM::EmulateVPOP(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -2670,7 +2670,8 @@ bool EmulateInstructionARM::EmulateVPOP(const uint32_t opcode, else for r = 0 to regs-1 word1 = MemA[address,4]; word2 = MemA[address+4,4]; address = address+8; - // Combine the word-aligned words in the correct order for current endianness. + // Combine the word-aligned words in the correct order for + // current endianness. D[d+r] = if BigEndian() then word1:word2 else word2:word1; } #endif @@ -2892,10 +2893,8 @@ bool EmulateInstructionARM::EmulateB(const uint32_t opcode, } // Compare and Branch on Nonzero and Compare and Branch on Zero compare the -// value in a register with -// zero and conditionally branch forward a constant value. They do not affect -// the condition flags. -// CBNZ, CBZ +// value in a register with zero and conditionally branch forward a constant +// value. They do not affect the condition flags. CBNZ, CBZ bool EmulateInstructionARM::EmulateCB(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -2938,8 +2937,8 @@ bool EmulateInstructionARM::EmulateCB(const uint32_t opcode, return true; } -// Table Branch Byte causes a PC-relative forward branch using a table of single -// byte offsets. +// Table Branch Byte causes a PC-relative forward branch using a table of +// single byte offsets. // A base register provides a pointer to the table, and a second register // supplies an index into the table. // The branch length is twice the value of the byte returned from the table. @@ -2948,8 +2947,8 @@ bool EmulateInstructionARM::EmulateCB(const uint32_t opcode, // single halfword offsets. // A base register provides a pointer to the table, and a second register // supplies an index into the table. -// The branch length is twice the value of the halfword returned from the table. -// TBB, TBH +// The branch length is twice the value of the halfword returned from the +// table. TBB, TBH bool EmulateInstructionARM::EmulateTB(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -2984,9 +2983,8 @@ bool EmulateInstructionARM::EmulateTB(const uint32_t opcode, return false; } - // Read the address of the table from the operand register Rn. - // The PC can be used, in which case the table immediately follows this - // instruction. + // Read the address of the table from the operand register Rn. The PC can + // be used, in which case the table immediately follows this instruction. uint32_t base = ReadCoreReg(Rn, &success); if (!success) return false; @@ -3023,8 +3021,8 @@ bool EmulateInstructionARM::EmulateTB(const uint32_t opcode, } // This instruction adds an immediate value to a register value, and writes the -// result to the destination register. -// It can optionally update the condition flags based on the result. +// result to the destination register. It can optionally update the condition +// flags based on the result. bool EmulateInstructionARM::EmulateADDImmThumb(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -3145,8 +3143,8 @@ bool EmulateInstructionARM::EmulateADDImmThumb(const uint32_t opcode, } // This instruction adds an immediate value to a register value, and writes the -// result to the destination -// register. It can optionally update the condition flags based on the result. +// result to the destination register. It can optionally update the condition +// flags based on the result. bool EmulateInstructionARM::EmulateADDImmARM(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -3210,9 +3208,8 @@ bool EmulateInstructionARM::EmulateADDImmARM(const uint32_t opcode, } // This instruction adds a register value and an optionally-shifted register -// value, and writes the result -// to the destination register. It can optionally update the condition flags -// based on the result. +// value, and writes the result to the destination register. It can optionally +// update the condition flags based on the result. bool EmulateInstructionARM::EmulateADDReg(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -3350,8 +3347,8 @@ bool EmulateInstructionARM::EmulateCMNImm(const uint32_t opcode, } // Compare Negative (register) adds a register value and an optionally-shifted -// register value. -// It updates the condition flags based on the result, and discards the result. +// register value. It updates the condition flags based on the result, and +// discards the result. bool EmulateInstructionARM::EmulateCMNReg(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -3419,8 +3416,8 @@ bool EmulateInstructionARM::EmulateCMNReg(const uint32_t opcode, return true; } -// Compare (immediate) subtracts an immediate value from a register value. -// It updates the condition flags based on the result, and discards the result. +// Compare (immediate) subtracts an immediate value from a register value. It +// updates the condition flags based on the result, and discards the result. bool EmulateInstructionARM::EmulateCMPImm(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -3473,8 +3470,8 @@ bool EmulateInstructionARM::EmulateCMPImm(const uint32_t opcode, } // Compare (register) subtracts an optionally-shifted register value from a -// register value. -// It updates the condition flags based on the result, and discards the result. +// register value. It updates the condition flags based on the result, and +// discards the result. bool EmulateInstructionARM::EmulateCMPReg(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -3552,10 +3549,9 @@ bool EmulateInstructionARM::EmulateCMPReg(const uint32_t opcode, } // Arithmetic Shift Right (immediate) shifts a register value right by an -// immediate number of bits, -// shifting in copies of its sign bit, and writes the result to the destination -// register. It can -// optionally update the condition flags based on the result. +// immediate number of bits, shifting in copies of its sign bit, and writes the +// result to the destination register. It can optionally update the condition +// flags based on the result. bool EmulateInstructionARM::EmulateASRImm(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -3577,13 +3573,11 @@ bool EmulateInstructionARM::EmulateASRImm(const uint32_t opcode, return EmulateShiftImm(opcode, encoding, SRType_ASR); } -// Arithmetic Shift Right (register) shifts a register value right by a variable -// number of bits, -// shifting in copies of its sign bit, and writes the result to the destination -// register. -// The variable number of bits is read from the bottom byte of a register. It -// can optionally update -// the condition flags based on the result. +// Arithmetic Shift Right (register) shifts a register value right by a +// variable number of bits, shifting in copies of its sign bit, and writes the +// result to the destination register. The variable number of bits is read from +// the bottom byte of a register. It can optionally update the condition flags +// based on the result. bool EmulateInstructionARM::EmulateASRReg(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -3604,10 +3598,8 @@ bool EmulateInstructionARM::EmulateASRReg(const uint32_t opcode, } // Logical Shift Left (immediate) shifts a register value left by an immediate -// number of bits, -// shifting in zeros, and writes the result to the destination register. It can -// optionally -// update the condition flags based on the result. +// number of bits, shifting in zeros, and writes the result to the destination +// register. It can optionally update the condition flags based on the result. bool EmulateInstructionARM::EmulateLSLImm(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -3630,12 +3622,9 @@ bool EmulateInstructionARM::EmulateLSLImm(const uint32_t opcode, } // Logical Shift Left (register) shifts a register value left by a variable -// number of bits, -// shifting in zeros, and writes the result to the destination register. The -// variable number -// of bits is read from the bottom byte of a register. It can optionally update -// the condition -// flags based on the result. +// number of bits, shifting in zeros, and writes the result to the destination +// register. The variable number of bits is read from the bottom byte of a +// register. It can optionally update the condition flags based on the result. bool EmulateInstructionARM::EmulateLSLReg(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -3655,11 +3644,10 @@ bool EmulateInstructionARM::EmulateLSLReg(const uint32_t opcode, return EmulateShiftReg(opcode, encoding, SRType_LSL); } -// Logical Shift Right (immediate) shifts a register value right by an immediate -// number of bits, -// shifting in zeros, and writes the result to the destination register. It can -// optionally -// update the condition flags based on the result. +// Logical Shift Right (immediate) shifts a register value right by an +// immediate number of bits, shifting in zeros, and writes the result to the +// destination register. It can optionally update the condition flags based on +// the result. bool EmulateInstructionARM::EmulateLSRImm(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -3682,12 +3670,9 @@ bool EmulateInstructionARM::EmulateLSRImm(const uint32_t opcode, } // Logical Shift Right (register) shifts a register value right by a variable -// number of bits, -// shifting in zeros, and writes the result to the destination register. The -// variable number -// of bits is read from the bottom byte of a register. It can optionally update -// the condition -// flags based on the result. +// number of bits, shifting in zeros, and writes the result to the destination +// register. The variable number of bits is read from the bottom byte of a +// register. It can optionally update the condition flags based on the result. bool EmulateInstructionARM::EmulateLSRReg(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -3708,10 +3693,9 @@ bool EmulateInstructionARM::EmulateLSRReg(const uint32_t opcode, } // Rotate Right (immediate) provides the value of the contents of a register -// rotated by a constant value. -// The bits that are rotated off the right end are inserted into the vacated bit -// positions on the left. -// It can optionally update the condition flags based on the result. +// rotated by a constant value. The bits that are rotated off the right end are +// inserted into the vacated bit positions on the left. It can optionally +// update the condition flags based on the result. bool EmulateInstructionARM::EmulateRORImm(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -3734,12 +3718,10 @@ bool EmulateInstructionARM::EmulateRORImm(const uint32_t opcode, } // Rotate Right (register) provides the value of the contents of a register -// rotated by a variable number of bits. -// The bits that are rotated off the right end are inserted into the vacated bit -// positions on the left. -// The variable number of bits is read from the bottom byte of a register. It -// can optionally update the condition -// flags based on the result. +// rotated by a variable number of bits. The bits that are rotated off the +// right end are inserted into the vacated bit positions on the left. The +// variable number of bits is read from the bottom byte of a register. It can +// optionally update the condition flags based on the result. bool EmulateInstructionARM::EmulateRORReg(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -3760,8 +3742,7 @@ bool EmulateInstructionARM::EmulateRORReg(const uint32_t opcode, } // Rotate Right with Extend provides the value of the contents of a register -// shifted right by one place, -// with the carry flag shifted into bit [31]. +// shifted right by one place, with the carry flag shifted into bit [31]. // // RRX can optionally update the condition flags based on the result. // In that case, bit [0] is shifted into the carry flag. @@ -3808,10 +3789,9 @@ bool EmulateInstructionARM::EmulateShiftImm(const uint32_t opcode, // A8.6.139 ROR (immediate) -- Encoding T1 ARMEncoding use_encoding = encoding; if (shift_type == SRType_ROR && use_encoding == eEncodingT1) { - // Morph the T1 encoding from the ARM Architecture Manual into T2 encoding - // to - // have the same decoding of bit fields as the other Thumb2 shift - // operations. + // Morph the T1 encoding from the ARM Architecture Manual into T2 + // encoding to have the same decoding of bit fields as the other Thumb2 + // shift operations. use_encoding = eEncodingT2; } @@ -3950,8 +3930,7 @@ bool EmulateInstructionARM::EmulateShiftReg(const uint32_t opcode, // LDM loads multiple registers from consecutive memory locations, using an // address from a base register. Optionally the address just above the highest -// of those locations -// can be written back to the base register. +// of those locations can be written back to the base register. bool EmulateInstructionARM::EmulateLDM(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -4093,8 +4072,8 @@ bool EmulateInstructionARM::EmulateLDM(const uint32_t opcode, // LDMDA loads multiple registers from consecutive memory locations using an // address from a base register. // The consecutive memory locations end at this address and the address just -// below the lowest of those locations -// can optionally be written back to the base register. +// below the lowest of those locations can optionally be written back to the +// base register. bool EmulateInstructionARM::EmulateLDMDA(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -4210,8 +4189,8 @@ bool EmulateInstructionARM::EmulateLDMDA(const uint32_t opcode, // LDMDB loads multiple registers from consecutive memory locations using an // address from a base register. The // consecutive memory locations end just below this address, and the address of -// the lowest of those locations can -// be optionally written back to the base register. +// the lowest of those locations can be optionally written back to the base +// register. bool EmulateInstructionARM::EmulateLDMDB(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -4349,8 +4328,8 @@ bool EmulateInstructionARM::EmulateLDMDB(const uint32_t opcode, // LDMIB loads multiple registers from consecutive memory locations using an // address from a base register. The // consecutive memory locations start just above this address, and thea ddress -// of the last of those locations can -// optinoally be written back to the base register. +// of the last of those locations can optinoally be written back to the base +// register. bool EmulateInstructionARM::EmulateLDMIB(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -4461,8 +4440,7 @@ bool EmulateInstructionARM::EmulateLDMIB(const uint32_t opcode, } // Load Register (immediate) calculates an address from a base register value -// and -// an immediate offset, loads a word from memory, and writes to a register. +// and an immediate offset, loads a word from memory, and writes to a register. // LDR (immediate, Thumb) bool EmulateInstructionARM::EmulateLDRRtRnImm(const uint32_t opcode, const ARMEncoding encoding) { @@ -4625,8 +4603,8 @@ bool EmulateInstructionARM::EmulateLDRRtRnImm(const uint32_t opcode, // STM (Store Multiple Increment After) stores multiple registers to consecutive // memory locations using an address // from a base register. The consecutive memory locations start at this -// address, and the address just above the last -// of those locations can optionally be written back to the base register. +// address, and the address just above the last of those locations can +// optionally be written back to the base register. bool EmulateInstructionARM::EmulateSTM(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -4775,10 +4753,10 @@ bool EmulateInstructionARM::EmulateSTM(const uint32_t opcode, } // STMDA (Store Multiple Decrement After) stores multiple registers to -// consecutive memory locations using an address -// from a base register. The consecutive memory locations end at this address, -// and the address just below the lowest -// of those locations can optionally be written back to the base register. +// consecutive memory locations using an address from a base register. The +// consecutive memory locations end at this address, and the address just below +// the lowest of those locations can optionally be written back to the base +// register. bool EmulateInstructionARM::EmulateSTMDA(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -4897,10 +4875,10 @@ bool EmulateInstructionARM::EmulateSTMDA(const uint32_t opcode, } // STMDB (Store Multiple Decrement Before) stores multiple registers to -// consecutive memory locations using an address -// from a base register. The consecutive memory locations end just below this -// address, and the address of the first of -// those locations can optionally be written back to the base register. +// consecutive memory locations using an address from a base register. The +// consecutive memory locations end just below this address, and the address of +// the first of those locations can optionally be written back to the base +// register. bool EmulateInstructionARM::EmulateSTMDB(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -5046,10 +5024,10 @@ bool EmulateInstructionARM::EmulateSTMDB(const uint32_t opcode, } // STMIB (Store Multiple Increment Before) stores multiple registers to -// consecutive memory locations using an address -// from a base register. The consecutive memory locations start just above this -// address, and the address of the last -// of those locations can optionally be written back to the base register. +// consecutive memory locations using an address from a base register. The +// consecutive memory locations start just above this address, and the address +// of the last of those locations can optionally be written back to the base +// register. bool EmulateInstructionARM::EmulateSTMIB(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -5337,8 +5315,8 @@ bool EmulateInstructionARM::EmulateSTRThumb(const uint32_t opcode, // STR (Store Register) calculates an address from a base register value and an // offset register value, stores a -// word from a register to memory. The offset register value can optionally be -// shifted. +// word from a register to memory. The offset register value can optionally +// be shifted. bool EmulateInstructionARM::EmulateSTRRegister(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -5423,7 +5401,7 @@ bool EmulateInstructionARM::EmulateSTRRegister(const uint32_t opcode, n = Bits32(opcode, 19, 16); m = Bits32(opcode, 3, 0); - // index = (P == '1'); add = (U == '1'); wback = (P == '0') || + // index = (P == '1'); add = (U == '1'); wback = (P == '0') || // (W == '1'); index = BitIsSet(opcode, 24); add = BitIsSet(opcode, 23); @@ -5664,8 +5642,8 @@ bool EmulateInstructionARM::EmulateSTRBThumb(const uint32_t opcode, // STRH (register) calculates an address from a base register value and an // offset register value, and stores a -// halfword from a register to memory. The offset register value can be shifted -// left by 0, 1, 2, or 3 bits. +// halfword from a register to memory. The offset register value can be +// shifted left by 0, 1, 2, or 3 bits. bool EmulateInstructionARM::EmulateSTRHRegister(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -5745,7 +5723,7 @@ bool EmulateInstructionARM::EmulateSTRHRegister(const uint32_t opcode, n = Bits32(opcode, 19, 16); m = Bits32(opcode, 3, 0); - // index = (P == '1'); add = (U == '1'); wback = (P == '0') || + // index = (P == '1'); add = (U == '1'); wback = (P == '0') || // (W == '1'); index = BitIsSet(opcode, 24); add = BitIsSet(opcode, 23); @@ -5842,10 +5820,8 @@ bool EmulateInstructionARM::EmulateSTRHRegister(const uint32_t opcode, } // Add with Carry (immediate) adds an immediate value and the carry flag value -// to a register value, -// and writes the result to the destination register. It can optionally update -// the condition flags -// based on the result. +// to a register value, and writes the result to the destination register. It +// can optionally update the condition flags based on the result. bool EmulateInstructionARM::EmulateADCImm(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -5911,11 +5887,10 @@ bool EmulateInstructionARM::EmulateADCImm(const uint32_t opcode, return true; } -// Add with Carry (register) adds a register value, the carry flag value, and an -// optionally-shifted -// register value, and writes the result to the destination register. It can -// optionally update the -// condition flags based on the result. +// Add with Carry (register) adds a register value, the carry flag value, and +// an optionally-shifted register value, and writes the result to the +// destination register. It can optionally update the condition flags based on +// the result. bool EmulateInstructionARM::EmulateADCReg(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -5999,9 +5974,8 @@ bool EmulateInstructionARM::EmulateADCReg(const uint32_t opcode, return true; } -// This instruction adds an immediate value to the PC value to form a -// PC-relative address, -// and writes the result to the destination register. +// This instruction adds an immediate value to the PC value to form a PC- +// relative address, and writes the result to the destination register. bool EmulateInstructionARM::EmulateADR(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -6063,9 +6037,8 @@ bool EmulateInstructionARM::EmulateADR(const uint32_t opcode, } // This instruction performs a bitwise AND of a register value and an immediate -// value, and writes the result -// to the destination register. It can optionally update the condition flags -// based on the result. +// value, and writes the result to the destination register. It can optionally +// update the condition flags based on the result. bool EmulateInstructionARM::EmulateANDImm(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -6139,10 +6112,8 @@ bool EmulateInstructionARM::EmulateANDImm(const uint32_t opcode, } // This instruction performs a bitwise AND of a register value and an -// optionally-shifted register value, -// and writes the result to the destination register. It can optionally update -// the condition flags -// based on the result. +// optionally-shifted register value, and writes the result to the destination +// register. It can optionally update the condition flags based on the result. bool EmulateInstructionARM::EmulateANDReg(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -6230,10 +6201,9 @@ bool EmulateInstructionARM::EmulateANDReg(const uint32_t opcode, } // Bitwise Bit Clear (immediate) performs a bitwise AND of a register value and -// the complement of an -// immediate value, and writes the result to the destination register. It can -// optionally update the -// condition flags based on the result. +// the complement of an immediate value, and writes the result to the +// destination register. It can optionally update the condition flags based on +// the result. bool EmulateInstructionARM::EmulateBICImm(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -6306,10 +6276,9 @@ bool EmulateInstructionARM::EmulateBICImm(const uint32_t opcode, } // Bitwise Bit Clear (register) performs a bitwise AND of a register value and -// the complement of an -// optionally-shifted register value, and writes the result to the destination -// register. -// It can optionally update the condition flags based on the result. +// the complement of an optionally-shifted register value, and writes the +// result to the destination register. It can optionally update the condition +// flags based on the result. bool EmulateInstructionARM::EmulateBICReg(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -6439,7 +6408,7 @@ bool EmulateInstructionARM::EmulateLDRImmediateARM(const uint32_t opcode, n = Bits32(opcode, 19, 16); imm32 = Bits32(opcode, 11, 0); - // index = (P == '1'); add = (U == '1'); wback = (P == '0') || + // index = (P == '1'); add = (U == '1'); wback = (P == '0') || // (W == '1'); index = BitIsSet(opcode, 24); add = BitIsSet(opcode, 23); @@ -6624,7 +6593,7 @@ bool EmulateInstructionARM::EmulateLDRRegister(const uint32_t opcode, n = Bits32(opcode, 19, 16); m = Bits32(opcode, 3, 0); - // index = (P == '1'); add = (U == '1'); wback = (P == '0') || + // index = (P == '1'); add = (U == '1'); wback = (P == '0') || // (W == '1'); index = BitIsSet(opcode, 24); add = BitIsSet(opcode, 23); @@ -6661,8 +6630,8 @@ bool EmulateInstructionARM::EmulateLDRRegister(const uint32_t opcode, addr_t offset_addr; addr_t address; - // offset = Shift(R[m], shift_t, shift_n, APSR.C); -- Note "The APSR is an - // application level alias for the CPSR". + // offset = Shift(R[m], shift_t, shift_n, APSR.C); -- Note "The APSR is + // an application level alias for the CPSR". addr_t offset = Shift(Rm, shift_t, shift_n, Bit32(m_opcode_cpsr, APSR_C), &success); if (!success) @@ -6968,9 +6937,8 @@ bool EmulateInstructionARM::EmulateLDRBLiteral(const uint32_t opcode, } // LDRB (register) calculates an address from a base register value and an -// offset rigister value, loads a byte from -// memory, zero-extends it to form a 32-bit word, and writes it to a register. -// The offset register value can +// offset rigister value, loads a byte from memory, zero-extends it to form a +// 32-bit word, and writes it to a register. The offset register value can // optionally be shifted. bool EmulateInstructionARM::EmulateLDRBRegister(const uint32_t opcode, const ARMEncoding encoding) { @@ -7049,7 +7017,7 @@ bool EmulateInstructionARM::EmulateLDRBRegister(const uint32_t opcode, n = Bits32(opcode, 19, 16); m = Bits32(opcode, 3, 0); - // index = (P == '1'); add = (U == '1'); wback = (P == '0') || + // index = (P == '1'); add = (U == '1'); wback = (P == '0') || // (W == '1'); index = BitIsSet(opcode, 24); add = BitIsSet(opcode, 23); @@ -7132,9 +7100,8 @@ bool EmulateInstructionARM::EmulateLDRBRegister(const uint32_t opcode, // LDRH (immediate, Thumb) calculates an address from a base register value and // an immediate offset, loads a -// halfword from memory, zero-extends it to form a 32-bit word, and writes it to -// a register. It can use offset, -// post-indexed, or pre-indexed addressing. +// halfword from memory, zero-extends it to form a 32-bit word, and writes it +// to a register. It can use offset, post-indexed, or pre-indexed addressing. bool EmulateInstructionARM::EmulateLDRHImmediate(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -7384,8 +7351,8 @@ bool EmulateInstructionARM::EmulateLDRHLiteral(const uint32_t opcode, // LDRH (literal) calculates an address from a base register value and an offset // register value, loads a halfword // from memory, zero-extends it to form a 32-bit word, and writes it to a -// register. The offset register value can -// be shifted left by 0, 1, 2, or 3 bits. +// register. The offset register value can be shifted left by 0, 1, 2, or 3 +// bits. bool EmulateInstructionARM::EmulateLDRHRegister(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -7464,7 +7431,7 @@ bool EmulateInstructionARM::EmulateLDRHRegister(const uint32_t opcode, n = Bits32(opcode, 19, 16); m = Bits32(opcode, 3, 0); - // index = (P == '1'); add = (U == '1'); wback = (P == '0') || + // index = (P == '1'); add = (U == '1'); wback = (P == '0') || // (W == '1'); index = BitIsSet(opcode, 24); add = BitIsSet(opcode, 23); @@ -7561,8 +7528,7 @@ bool EmulateInstructionARM::EmulateLDRHRegister(const uint32_t opcode, // LDRSB (immediate) calculates an address from a base register value and an // immediate offset, loads a byte from // memory, sign-extends it to form a 32-bit word, and writes it to a register. -// It can use offset, post-indexed, -// or pre-indexed addressing. +// It can use offset, post-indexed, or pre-indexed addressing. bool EmulateInstructionARM::EmulateLDRSBImmediate(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -7643,7 +7609,7 @@ bool EmulateInstructionARM::EmulateLDRSBImmediate(const uint32_t opcode, uint32_t imm4L = Bits32(opcode, 3, 0); imm32 = (imm4H << 4) | imm4L; - // index = (P == '1'); add = (U == '1'); wback = (P == '0') || + // index = (P == '1'); add = (U == '1'); wback = (P == '0') || // (W == '1'); index = BitIsSet(opcode, 24); add = BitIsSet(opcode, 23); @@ -7799,8 +7765,7 @@ bool EmulateInstructionARM::EmulateLDRSBLiteral(const uint32_t opcode, // LDRSB (register) calculates an address from a base register value and an // offset register value, loadsa byte from // memory, sign-extends it to form a 32-bit word, and writes it to a register. -// The offset register value can be -// shifted left by 0, 1, 2, or 3 bits. +// The offset register value can be shifted left by 0, 1, 2, or 3 bits. bool EmulateInstructionARM::EmulateLDRSBRegister(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -7873,7 +7838,7 @@ bool EmulateInstructionARM::EmulateLDRSBRegister(const uint32_t opcode, n = Bits32(opcode, 19, 16); m = Bits32(opcode, 3, 0); - // index = (P == '1'); add = (U == '1'); wback = (P == '0') || + // index = (P == '1'); add = (U == '1'); wback = (P == '0') || // (W == '1'); index = BitIsSet(opcode, 24); add = BitIsSet(opcode, 23); @@ -7960,8 +7925,7 @@ bool EmulateInstructionARM::EmulateLDRSBRegister(const uint32_t opcode, // LDRSH (immediate) calculates an address from a base register value and an // immediate offset, loads a halfword from // memory, sign-extends it to form a 32-bit word, and writes it to a register. -// It can use offset, post-indexed, or -// pre-indexed addressing. +// It can use offset, post-indexed, or pre-indexed addressing. bool EmulateInstructionARM::EmulateLDRSHImmediate(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -8043,7 +8007,7 @@ bool EmulateInstructionARM::EmulateLDRSHImmediate(const uint32_t opcode, uint32_t imm4L = Bits32(opcode, 3, 0); imm32 = (imm4H << 4) | imm4L; - // index = (P == '1'); add = (U == '1'); wback = (P == '0') || + // index = (P == '1'); add = (U == '1'); wback = (P == '0') || // (W == '1'); index = BitIsSet(opcode, 24); add = BitIsSet(opcode, 23); @@ -8220,8 +8184,8 @@ bool EmulateInstructionARM::EmulateLDRSHLiteral(const uint32_t opcode, // LDRSH (register) calculates an address from a base register value and an // offset register value, loads a halfword // from memory, sign-extends it to form a 32-bit word, and writes it to a -// register. The offset register value can be -// shifted left by 0, 1, 2, or 3 bits. +// register. The offset register value can be shifted left by 0, 1, 2, or 3 +// bits. bool EmulateInstructionARM::EmulateLDRSHRegister(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -8301,7 +8265,7 @@ bool EmulateInstructionARM::EmulateLDRSHRegister(const uint32_t opcode, n = Bits32(opcode, 19, 16); m = Bits32(opcode, 3, 0); - // index = (P == '1'); add = (U == '1'); wback = (P == '0') || + // index = (P == '1'); add = (U == '1'); wback = (P == '0') || // (W == '1'); index = BitIsSet(opcode, 24); add = BitIsSet(opcode, 23); @@ -8879,9 +8843,8 @@ bool EmulateInstructionARM::EmulateRFE(const uint32_t opcode, } // Bitwise Exclusive OR (immediate) performs a bitwise exclusive OR of a -// register value and an immediate value, -// and writes the result to the destination register. It can optionally update -// the condition flags based on +// register value and an immediate value, and writes the result to the +// destination register. It can optionally update the condition flags based on // the result. bool EmulateInstructionARM::EmulateEORImm(const uint32_t opcode, const ARMEncoding encoding) { @@ -8957,11 +8920,10 @@ bool EmulateInstructionARM::EmulateEORImm(const uint32_t opcode, return true; } -// Bitwise Exclusive OR (register) performs a bitwise exclusive OR of a register -// value and an -// optionally-shifted register value, and writes the result to the destination -// register. -// It can optionally update the condition flags based on the result. +// Bitwise Exclusive OR (register) performs a bitwise exclusive OR of a +// register value and an optionally-shifted register value, and writes the +// result to the destination register. It can optionally update the condition +// flags based on the result. bool EmulateInstructionARM::EmulateEORReg(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -9051,10 +9013,8 @@ bool EmulateInstructionARM::EmulateEORReg(const uint32_t opcode, } // Bitwise OR (immediate) performs a bitwise (inclusive) OR of a register value -// and an immediate value, and -// writes the result to the destination register. It can optionally update the -// condition flags based -// on the result. +// and an immediate value, and writes the result to the destination register. +// It can optionally update the condition flags based on the result. bool EmulateInstructionARM::EmulateORRImm(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -9128,10 +9088,9 @@ bool EmulateInstructionARM::EmulateORRImm(const uint32_t opcode, } // Bitwise OR (register) performs a bitwise (inclusive) OR of a register value -// and an optionally-shifted register -// value, and writes the result to the destination register. It can optionally -// update the condition flags based -// on the result. +// and an optionally-shifted register value, and writes the result to the +// destination register. It can optionally update the condition flags based on +// the result. bool EmulateInstructionARM::EmulateORRReg(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -9219,9 +9178,8 @@ bool EmulateInstructionARM::EmulateORRReg(const uint32_t opcode, } // Reverse Subtract (immediate) subtracts a register value from an immediate -// value, and writes the result to -// the destination register. It can optionally update the condition flags based -// on the result. +// value, and writes the result to the destination register. It can optionally +// update the condition flags based on the result. bool EmulateInstructionARM::EmulateRSBImm(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -9294,10 +9252,9 @@ bool EmulateInstructionARM::EmulateRSBImm(const uint32_t opcode, return true; } -// Reverse Subtract (register) subtracts a register value from an -// optionally-shifted register value, and writes the -// result to the destination register. It can optionally update the condition -// flags based on the result. +// Reverse Subtract (register) subtracts a register value from an optionally- +// shifted register value, and writes the result to the destination register. +// It can optionally update the condition flags based on the result. bool EmulateInstructionARM::EmulateRSBReg(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -9377,10 +9334,9 @@ bool EmulateInstructionARM::EmulateRSBReg(const uint32_t opcode, } // Reverse Subtract with Carry (immediate) subtracts a register value and the -// value of NOT (Carry flag) from -// an immediate value, and writes the result to the destination register. It can -// optionally update the condition -// flags based on the result. +// value of NOT (Carry flag) from an immediate value, and writes the result to +// the destination register. It can optionally update the condition flags based +// on the result. bool EmulateInstructionARM::EmulateRSCImm(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -9440,9 +9396,8 @@ bool EmulateInstructionARM::EmulateRSCImm(const uint32_t opcode, } // Reverse Subtract with Carry (register) subtracts a register value and the -// value of NOT (Carry flag) from an -// optionally-shifted register value, and writes the result to the destination -// register. It can optionally update the +// value of NOT (Carry flag) from an optionally-shifted register value, and +// writes the result to the destination register. It can optionally update the // condition flags based on the result. bool EmulateInstructionARM::EmulateRSCReg(const uint32_t opcode, const ARMEncoding encoding) { @@ -9512,7 +9467,8 @@ bool EmulateInstructionARM::EmulateRSCReg(const uint32_t opcode, return true; } -// Subtract with Carry (immediate) subtracts an immediate value and the value of +// Subtract with Carry (immediate) subtracts an immediate value and the value +// of // NOT (Carry flag) from a register value, and writes the result to the // destination register. // It can optionally update the condition flags based on the result. @@ -9582,8 +9538,8 @@ bool EmulateInstructionARM::EmulateSBCImm(const uint32_t opcode, return true; } -// Subtract with Carry (register) subtracts an optionally-shifted register value -// and the value of +// Subtract with Carry (register) subtracts an optionally-shifted register +// value and the value of // NOT (Carry flag) from a register value, and writes the result to the // destination register. // It can optionally update the condition flags based on the result. @@ -9672,9 +9628,8 @@ bool EmulateInstructionARM::EmulateSBCReg(const uint32_t opcode, } // This instruction subtracts an immediate value from a register value, and -// writes the result -// to the destination register. It can optionally update the condition flags -// based on the result. +// writes the result to the destination register. It can optionally update the +// condition flags based on the result. bool EmulateInstructionARM::EmulateSUBImmThumb(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -9766,9 +9721,8 @@ bool EmulateInstructionARM::EmulateSUBImmThumb(const uint32_t opcode, } // This instruction subtracts an immediate value from a register value, and -// writes the result -// to the destination register. It can optionally update the condition flags -// based on the result. +// writes the result to the destination register. It can optionally update the +// condition flags based on the result. bool EmulateInstructionARM::EmulateSUBImmARM(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -9844,9 +9798,8 @@ bool EmulateInstructionARM::EmulateSUBImmARM(const uint32_t opcode, } // Test Equivalence (immediate) performs a bitwise exclusive OR operation on a -// register value and an -// immediate value. It updates the condition flags based on the result, and -// discards the result. +// register value and an immediate value. It updates the condition flags based +// on the result, and discards the result. bool EmulateInstructionARM::EmulateTEQImm(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -9904,10 +9857,8 @@ bool EmulateInstructionARM::EmulateTEQImm(const uint32_t opcode, } // Test Equivalence (register) performs a bitwise exclusive OR operation on a -// register value and an -// optionally-shifted register value. It updates the condition flags based on -// the result, and discards -// the result. +// register value and an optionally-shifted register value. It updates the +// condition flags based on the result, and discards the result. bool EmulateInstructionARM::EmulateTEQReg(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -9972,8 +9923,8 @@ bool EmulateInstructionARM::EmulateTEQReg(const uint32_t opcode, } // Test (immediate) performs a bitwise AND operation on a register value and an -// immediate value. -// It updates the condition flags based on the result, and discards the result. +// immediate value. It updates the condition flags based on the result, and +// discards the result. bool EmulateInstructionARM::EmulateTSTImm(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -10031,8 +9982,8 @@ bool EmulateInstructionARM::EmulateTSTImm(const uint32_t opcode, } // Test (register) performs a bitwise AND operation on a register value and an -// optionally-shifted register value. -// It updates the condition flags based on the result, and discards the result. +// optionally-shifted register value. It updates the condition flags based on +// the result, and discards the result. bool EmulateInstructionARM::EmulateTSTReg(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -10403,9 +10354,8 @@ bool EmulateInstructionARM::EmulateSUBReg(const uint32_t opcode, AddWithCarryResult res = AddWithCarry(Rn, ~shifted, 1); - // if d == 15 then // Can only occur for ARM encoding - // ALUWritePC(result); // setflags is always FALSE here - // else + // if d == 15 then // Can only occur for ARM encoding ALUWritePC(result); + // // setflags is always FALSE here else // R[d] = result; // if setflags then // APSR.N = result<31>; @@ -10429,10 +10379,9 @@ bool EmulateInstructionARM::EmulateSUBReg(const uint32_t opcode, } // A8.6.202 STREX -// Store Register Exclusive calculates an address from a base register value and -// an immediate offset, and stores a -// word from a register to memory if the executing processor has exclusive -// access to the memory addressed. +// Store Register Exclusive calculates an address from a base register value +// and an immediate offset, and stores a word from a register to memory if the +// executing processor has exclusive access to the memory addressed. bool EmulateInstructionARM::EmulateSTREX(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -10457,7 +10406,8 @@ bool EmulateInstructionARM::EmulateSTREX(const uint32_t opcode, switch (encoding) { case eEncodingT1: - // d = UInt(Rd); t = UInt(Rt); n = UInt(Rn); imm32 = ZeroExtend(imm8:'00', + // d = UInt(Rd); t = UInt(Rt); n = UInt(Rn); imm32 = + // ZeroExtend(imm8:'00', // 32); d = Bits32(opcode, 11, 8); t = Bits32(opcode, 15, 12); @@ -10511,9 +10461,9 @@ bool EmulateInstructionARM::EmulateSTREX(const uint32_t opcode, context.type = eContextRegisterStore; context.SetRegisterToRegisterPlusOffset(data_reg, base_reg, imm32); - // if ExclusiveMonitorsPass(address,4) then - // if (ExclusiveMonitorsPass (address, addr_byte_size)) -- For now, for the - // sake of emulation, we will say this + // if ExclusiveMonitorsPass(address,4) then if (ExclusiveMonitorsPass + // (address, addr_byte_size)) -- For now, for the sake of emulation, we + // will say this // always return // true. if (true) { @@ -10742,9 +10692,9 @@ bool EmulateInstructionARM::EmulateSTRImmARM(const uint32_t opcode, // A8.6.66 LDRD (immediate) // Load Register Dual (immediate) calculates an address from a base register -// value and an immediate offset, loads two -// words from memory, and writes them to two registers. It can use offset, -// post-indexed, or pre-indexed addressing. +// value and an immediate offset, loads two words from memory, and writes them +// to two registers. It can use offset, post-indexed, or pre-indexed +// addressing. bool EmulateInstructionARM::EmulateLDRDImmediate(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -10891,9 +10841,8 @@ bool EmulateInstructionARM::EmulateLDRDImmediate(const uint32_t opcode, // A8.6.68 LDRD (register) // Load Register Dual (register) calculates an address from a base register -// value and a register offset, loads two -// words from memory, and writes them to two registers. It can use offset, -// post-indexed or pre-indexed addressing. +// value and a register offset, loads two words from memory, and writes them to +// two registers. It can use offset, post-indexed or pre-indexed addressing. bool EmulateInstructionARM::EmulateLDRDRegister(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -11021,9 +10970,8 @@ bool EmulateInstructionARM::EmulateLDRDRegister(const uint32_t opcode, // A8.6.200 STRD (immediate) // Store Register Dual (immediate) calculates an address from a base register -// value and an immediate offset, and -// stores two words from two registers to memory. It can use offset, -// post-indexed, or pre-indexed addressing. +// value and an immediate offset, and stores two words from two registers to +// memory. It can use offset, post-indexed, or pre-indexed addressing. bool EmulateInstructionARM::EmulateSTRDImm(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -11314,8 +11262,7 @@ bool EmulateInstructionARM::EmulateSTRDReg(const uint32_t opcode, // A8.6.319 VLDM // Vector Load Multiple loads multiple extension registers from consecutive -// memory locations using an address from -// an ARM core register. +// memory locations using an address from an ARM core register. bool EmulateInstructionARM::EmulateVLDM(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -11328,7 +11275,8 @@ bool EmulateInstructionARM::EmulateVLDM(const uint32_t opcode, S[d+r] = MemA[address,4]; address = address+4; else word1 = MemA[address,4]; word2 = MemA[address+4,4]; address = address+8; - // Combine the word-aligned words in the correct order for current endianness. + // Combine the word-aligned words in the correct order for + // current endianness. D[d+r] = if BigEndian() then word1:word2 else word2:word1; #endif @@ -11389,8 +11337,8 @@ bool EmulateInstructionARM::EmulateVLDM(const uint32_t opcode, return false; // // Remaining combinations are PUW = 010 (IA without !), 011 (IA with - // !), 101 (DB with !) - // single_regs = TRUE; add = (U == '1'); wback = (W == '1'); d = + // !), 101 (DB with !) single_regs = TRUE; add = (U == '1'); wback = (W + // == '1'); d = // UInt(Vd:D); n = UInt(Rn); single_regs = true; add = BitIsSet(opcode, 23); @@ -11519,7 +11467,8 @@ bool EmulateInstructionARM::EmulateVSTM(const uint32_t opcode, if single_regs then MemA[address,4] = S[d+r]; address = address+4; else - // Store as two word-aligned words in the correct order for current endianness. + // Store as two word-aligned words in the correct order for + // current endianness. MemA[address,4] = if BigEndian() then D[d+r]<63:32> else D[d+r]<31:0>; MemA[address+4,4] = if BigEndian() then D[d+r]<31:0> else D[d+r]<63:32>; address = address+8; @@ -11582,8 +11531,8 @@ bool EmulateInstructionARM::EmulateVSTM(const uint32_t opcode, return false; // // Remaining combinations are PUW = 010 (IA without !), 011 (IA with - // !), 101 (DB with !) - // single_regs = TRUE; add = (U == '1'); wback = (W == '1'); d = + // !), 101 (DB with !) single_regs = TRUE; add = (U == '1'); wback = (W + // == '1'); d = // UInt(Vd:D); n = UInt(Rn); single_regs = true; add = BitIsSet(opcode, 23); @@ -11665,8 +11614,7 @@ bool EmulateInstructionARM::EmulateVSTM(const uint32_t opcode, address = address + 4; } else { // // Store as two word-aligned words in the correct order for current - // endianness. - // MemA[address,4] = if BigEndian() then D[d+r]<63:32> else + // endianness. MemA[address,4] = if BigEndian() then D[d+r]<63:32> else // D[d+r]<31:0>; // MemA[address+4,4] = if BigEndian() then D[d+r]<31:0> else // D[d+r]<63:32>; @@ -11712,8 +11660,7 @@ bool EmulateInstructionARM::EmulateVSTM(const uint32_t opcode, // A8.6.320 // This instruction loads a single extension register from memory, using an -// address from an ARM core register, with -// an optional offset. +// address from an ARM core register, with an optional offset. bool EmulateInstructionARM::EmulateVLDR(const uint32_t opcode, ARMEncoding encoding) { #if 0 @@ -11725,7 +11672,8 @@ bool EmulateInstructionARM::EmulateVLDR(const uint32_t opcode, S[d] = MemA[address,4]; else word1 = MemA[address,4]; word2 = MemA[address+4,4]; - // Combine the word-aligned words in the correct order for current endianness. + // Combine the word-aligned words in the correct order for current + // endianness. D[d] = if BigEndian() then word1:word2 else word2:word1; #endif @@ -11839,8 +11787,7 @@ bool EmulateInstructionARM::EmulateVLDR(const uint32_t opcode, // A8.6.400 VSTR // This instruction stores a signle extension register to memory, using an -// address from an ARM core register, with an -// optional offset. +// address from an ARM core register, with an optional offset. bool EmulateInstructionARM::EmulateVSTR(const uint32_t opcode, ARMEncoding encoding) { #if 0 @@ -11850,7 +11797,8 @@ bool EmulateInstructionARM::EmulateVSTR(const uint32_t opcode, if single_reg then MemA[address,4] = S[d]; else - // Store as two word-aligned words in the correct order for current endianness. + // Store as two word-aligned words in the correct order for current + // endianness. MemA[address,4] = if BigEndian() then D[d]<63:32> else D[d]<31:0>; MemA[address+4,4] = if BigEndian() then D[d]<31:0> else D[d]<63:32>; #endif @@ -11970,10 +11918,9 @@ bool EmulateInstructionARM::EmulateVSTR(const uint32_t opcode, return true; } -// A8.6.307 VLDI1 (multiple single elements) -// This instruction loads elements from memory into one, two, three or four -// registers, without de-interleaving. Every -// element of each register is loaded. +// A8.6.307 VLDI1 (multiple single elements) This instruction loads elements +// from memory into one, two, three or four registers, without de-interleaving. +// Every element of each register is loaded. bool EmulateInstructionARM::EmulateVLD1Multiple(const uint32_t opcode, ARMEncoding encoding) { #if 0 @@ -12291,8 +12238,7 @@ bool EmulateInstructionARM::EmulateVLD1Single(const uint32_t opcode, if (index > 0) mask = mask | Bits64(all_ones, (index * esize) - 1, 0); // add 1's to the right of where 'element' goes. - // now mask should be 0's where element goes & 1's - // everywhere else. + // now mask should be 0's where element goes & 1's everywhere else. uint64_t masked_reg = reg_data & mask; // Take original reg value & zero out 'element' bits @@ -12307,10 +12253,9 @@ bool EmulateInstructionARM::EmulateVLD1Single(const uint32_t opcode, return true; } -// A8.6.391 VST1 (multiple single elements) -// Vector Store (multiple single elements) stores elements to memory from one, -// two, three, or four registers, without -// interleaving. Every element of each register is stored. +// A8.6.391 VST1 (multiple single elements) Vector Store (multiple single +// elements) stores elements to memory from one, two, three, or four registers, +// without interleaving. Every element of each register is stored. bool EmulateInstructionARM::EmulateVST1Multiple(const uint32_t opcode, ARMEncoding encoding) { #if 0 @@ -12465,8 +12410,8 @@ bool EmulateInstructionARM::EmulateVST1Multiple(const uint32_t opcode, return true; } -// A8.6.392 VST1 (single element from one lane) -// This instruction stores one element to memory from one element of a register. +// A8.6.392 VST1 (single element from one lane) This instruction stores one +// element to memory from one element of a register. bool EmulateInstructionARM::EmulateVST1Single(const uint32_t opcode, ARMEncoding encoding) { #if 0 @@ -12624,9 +12569,8 @@ bool EmulateInstructionARM::EmulateVST1Single(const uint32_t opcode, return true; } -// A8.6.309 VLD1 (single element to all lanes) -// This instruction loads one element from memory into every element of one or -// two vectors. +// A8.6.309 VLD1 (single element to all lanes) This instruction loads one +// element from memory into every element of one or two vectors. bool EmulateInstructionARM::EmulateVLD1SingleAll(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -12754,11 +12698,10 @@ bool EmulateInstructionARM::EmulateVLD1SingleAll(const uint32_t opcode, return true; } -// B6.2.13 SUBS PC, LR and related instructions -// The SUBS PC, LR, #<const? instruction provides an exception return without -// the use of the stack. It subtracts the -// immediate constant from the LR, branches to the resulting address, and also -// copies the SPSR to the CPSR. +// B6.2.13 SUBS PC, LR and related instructions The SUBS PC, LR, #<const? +// instruction provides an exception return without the use of the stack. It +// subtracts the immediate constant from the LR, branches to the resulting +// address, and also copies the SPSR to the CPSR. bool EmulateInstructionARM::EmulateSUBSPcLrEtc(const uint32_t opcode, const ARMEncoding encoding) { #if 0 @@ -12797,9 +12740,9 @@ bool EmulateInstructionARM::EmulateSUBSPcLrEtc(const uint32_t opcode, switch (encoding) { case eEncodingT1: - // if CurrentInstrSet() == InstrSet_ThumbEE then UNPREDICTABLE - // n = 14; imm32 = ZeroExtend(imm8, 32); register_form = FALSE; opcode = - // '0010'; // = SUB + // if CurrentInstrSet() == InstrSet_ThumbEE then UNPREDICTABLE n = 14; + // imm32 = ZeroExtend(imm8, 32); register_form = FALSE; opcode = '0010'; + // // = SUB n = 14; imm32 = Bits32(opcode, 7, 0); register_form = false; @@ -12924,8 +12867,7 @@ bool EmulateInstructionARM::EmulateSUBSPcLrEtc(const uint32_t opcode, // CPSRWriteByInstr(SPSR[], '1111', TRUE); // For now, in emulation mode, we don't have access to the SPSR, so we will - // use the CPSR instead, and hope for - // the best. + // use the CPSR instead, and hope for the best. uint32_t spsr = ReadRegisterUnsigned(eRegisterKindDWARF, dwarf_cpsr, 0, &success); if (!success) @@ -13999,8 +13941,7 @@ bool EmulateInstructionARM::ReadInstruction() { if (!m_ignore_conditions) { // If we are not ignoreing the conditions then init the it session from - // the current - // value of cpsr. + // the current value of cpsr. uint32_t it = (Bits32(m_opcode_cpsr, 15, 10) << 2) | Bits32(m_opcode_cpsr, 26, 25); if (it != 0) @@ -14018,10 +13959,9 @@ bool EmulateInstructionARM::ReadInstruction() { uint32_t EmulateInstructionARM::ArchVersion() { return m_arm_isa; } bool EmulateInstructionARM::ConditionPassed(const uint32_t opcode) { - // If we are ignoring conditions, then always return true. - // this allows us to iterate over disassembly code and still - // emulate an instruction even if we don't have all the right - // bits set in the CPSR register... + // If we are ignoring conditions, then always return true. this allows us to + // iterate over disassembly code and still emulate an instruction even if we + // don't have all the right bits set in the CPSR register... if (m_ignore_conditions) return true; @@ -14225,8 +14165,8 @@ bool EmulateInstructionARM::BranchWritePC(const Context &context, bool EmulateInstructionARM::BXWritePC(Context &context, uint32_t addr) { addr_t target; // If the CPSR is changed due to switching between ARM and Thumb ISETSTATE, - // we want to record it and issue a WriteRegister callback so the clients - // can track the mode changes accordingly. + // we want to record it and issue a WriteRegister callback so the clients can + // track the mode changes accordingly. bool cpsr_changed = false; if (BitIsSet(addr, 0)) { @@ -14307,9 +14247,10 @@ bool EmulateInstructionARM::UnalignedSupport() { return (ArchVersion() >= ARMv7); } -// The main addition and subtraction instructions can produce status information -// about both unsigned carry and signed overflow conditions. This status -// information can be used to synthesize multi-word additions and subtractions. +// The main addition and subtraction instructions can produce status +// information about both unsigned carry and signed overflow conditions. This +// status information can be used to synthesize multi-word additions and +// subtractions. EmulateInstructionARM::AddWithCarryResult EmulateInstructionARM::AddWithCarry(uint32_t x, uint32_t y, uint8_t carry_in) { uint32_t result; @@ -14364,9 +14305,8 @@ uint32_t EmulateInstructionARM::ReadCoreReg(uint32_t num, bool *success) { uint32_t val = ReadRegisterUnsigned(reg_kind, reg_num, 0, success); // When executing an ARM instruction , PC reads as the address of the current - // instruction plus 8. - // When executing a Thumb instruction , PC reads as the address of the current - // instruction plus 4. + // instruction plus 8. When executing a Thumb instruction , PC reads as the + // address of the current instruction plus 4. if (num == 15) { if (CurrentInstrSet() == eModeARM) val += 8; @@ -14434,8 +14374,7 @@ bool EmulateInstructionARM::WriteCoreRegOptionalFlags( // APSR.V = overflow // // Default arguments can be specified for carry and overflow parameters, which -// means -// not to update the respective flags. +// means not to update the respective flags. bool EmulateInstructionARM::WriteFlags(Context &context, const uint32_t result, const uint32_t carry, const uint32_t overflow) { @@ -14496,8 +14435,7 @@ bool EmulateInstructionARM::EvaluateInstruction(uint32_t evaluate_options) { } // Advance the ITSTATE bits to their values for the next instruction if we - // haven't just executed - // an IT instruction what initialized it. + // haven't just executed an IT instruction what initialized it. if (m_opcode_mode == eModeThumb && m_it_session.InITBlock() && (opcode_data == nullptr || opcode_data->callback != &EmulateInstructionARM::EmulateIT)) diff --git a/lldb/source/Plugins/Instruction/ARM64/EmulateInstructionARM64.cpp b/lldb/source/Plugins/Instruction/ARM64/EmulateInstructionARM64.cpp index d2832656d90..2f484ab5ea9 100644 --- a/lldb/source/Plugins/Instruction/ARM64/EmulateInstructionARM64.cpp +++ b/lldb/source/Plugins/Instruction/ARM64/EmulateInstructionARM64.cpp @@ -506,8 +506,8 @@ bool EmulateInstructionARM64::UsingAArch32() { bool EmulateInstructionARM64::BranchTo(const Context &context, uint32_t N, addr_t target) { #if 0 - // Set program counter to a new address, with a branch reason hint - // for possible use by hardware fetching the next instruction. + // Set program counter to a new address, with a branch reason hint for + // possible use by hardware fetching the next instruction. BranchTo(bits(N) target, BranchType branch_type) Hint_Branch(branch_type); if N == 32 then @@ -555,10 +555,9 @@ bool EmulateInstructionARM64::BranchTo(const Context &context, uint32_t N, } bool EmulateInstructionARM64::ConditionHolds(const uint32_t cond) { - // If we are ignoring conditions, then always return true. - // this allows us to iterate over disassembly code and still - // emulate an instruction even if we don't have all the right - // bits set in the CPSR register... + // If we are ignoring conditions, then always return true. this allows us to + // iterate over disassembly code and still emulate an instruction even if we + // don't have all the right bits set in the CPSR register... if (m_ignore_conditions) return true; @@ -690,8 +689,8 @@ bool EmulateInstructionARM64::EmulateADDSUBImm(const uint32_t opcode) { context.SetRegisterPlusOffset(reg_info_Rn, imm); if (n == GetFramePointerRegisterNumber() && d == gpr_sp_arm64 && !setflags) { - // 'mov sp, fp' - common epilogue instruction, CFA is now in terms - // of the stack pointer, instead of frame pointer. + // 'mov sp, fp' - common epilogue instruction, CFA is now in terms of the + // stack pointer, instead of frame pointer. context.type = EmulateInstruction::eContextRestoreStackPointer; } else if ((n == gpr_sp_arm64 || n == GetFramePointerRegisterNumber()) && d == gpr_sp_arm64 && !setflags) { diff --git a/lldb/source/Plugins/Instruction/MIPS/EmulateInstructionMIPS.cpp b/lldb/source/Plugins/Instruction/MIPS/EmulateInstructionMIPS.cpp index db3d8fc1b8c..3593d67b9fb 100644 --- a/lldb/source/Plugins/Instruction/MIPS/EmulateInstructionMIPS.cpp +++ b/lldb/source/Plugins/Instruction/MIPS/EmulateInstructionMIPS.cpp @@ -1205,13 +1205,10 @@ bool EmulateInstructionMIPS::Emulate_ADDiu(llvm::MCInst &insn) { dst = m_reg_info->getEncodingValue(insn.getOperand(0).getReg()); src = m_reg_info->getEncodingValue(insn.getOperand(1).getReg()); - // If immediate value is greater then 2^16 - 1 then clang generate - // LUI, ADDIU, SUBU instructions in prolog. - // Example - // lui $1, 0x2 - // addiu $1, $1, -0x5920 - // subu $sp, $sp, $1 - // In this case, ADDIU dst and src will be same and not equal to sp + // If immediate value is greater then 2^16 - 1 then clang generate LUI, + // ADDIU, SUBU instructions in prolog. Example lui $1, 0x2 addiu $1, $1, + // -0x5920 subu $sp, $sp, $1 In this case, ADDIU dst and src will be same + // and not equal to sp if (dst == src) { Context context; @@ -1545,8 +1542,8 @@ bool EmulateInstructionMIPS::Emulate_SWSP(llvm::MCInst &insn) { address = address + imm5; // We use bad_vaddr_context to store base address which is used by H/W - // watchpoint - // Set the bad_vaddr register with base address used in the instruction + // watchpoint Set the bad_vaddr register with base address used in the + // instruction bad_vaddr_context.type = eContextInvalid; WriteRegisterUnsigned(bad_vaddr_context, eRegisterKindDWARF, dwarf_bad_mips, address); @@ -1682,8 +1679,8 @@ bool EmulateInstructionMIPS::Emulate_LWSP(llvm::MCInst &insn) { base_address = base_address + imm5; // We use bad_vaddr_context to store base address which is used by H/W - // watchpoint - // Set the bad_vaddr register with base address used in the instruction + // watchpoint Set the bad_vaddr register with base address used in the + // instruction bad_vaddr_context.type = eContextInvalid; WriteRegisterUnsigned(bad_vaddr_context, eRegisterKindDWARF, dwarf_bad_mips, base_address); diff --git a/lldb/source/Plugins/Instruction/MIPS64/EmulateInstructionMIPS64.cpp b/lldb/source/Plugins/Instruction/MIPS64/EmulateInstructionMIPS64.cpp index d298589afdd..5af12ad141a 100644 --- a/lldb/source/Plugins/Instruction/MIPS64/EmulateInstructionMIPS64.cpp +++ b/lldb/source/Plugins/Instruction/MIPS64/EmulateInstructionMIPS64.cpp @@ -1091,13 +1091,10 @@ bool EmulateInstructionMIPS64::Emulate_DADDiu(llvm::MCInst &insn) { dst = m_reg_info->getEncodingValue(insn.getOperand(0).getReg()); src = m_reg_info->getEncodingValue(insn.getOperand(1).getReg()); - // If immediate is greater than 2^16 - 1 then clang generate - // LUI, (D)ADDIU,(D)SUBU instructions in prolog. - // Example - // lui $1, 0x2 - // daddiu $1, $1, -0x5920 - // dsubu $sp, $sp, $1 - // In this case, (D)ADDIU dst and src will be same and not equal to sp + // If immediate is greater than 2^16 - 1 then clang generate LUI, + // (D)ADDIU,(D)SUBU instructions in prolog. Example lui $1, 0x2 daddiu $1, + // $1, -0x5920 dsubu $sp, $sp, $1 In this case, (D)ADDIU dst and src will be + // same and not equal to sp if (dst == src) { Context context; diff --git a/lldb/source/Plugins/Instruction/PPC64/EmulateInstructionPPC64.cpp b/lldb/source/Plugins/Instruction/PPC64/EmulateInstructionPPC64.cpp index 807fc5ce9e2..f3a9ca570a4 100644 --- a/lldb/source/Plugins/Instruction/PPC64/EmulateInstructionPPC64.cpp +++ b/lldb/source/Plugins/Instruction/PPC64/EmulateInstructionPPC64.cpp @@ -248,8 +248,8 @@ bool EmulateInstructionPPC64::EmulateLD(uint32_t opcode) { int32_t ids = llvm::SignExtend32<16>(ds << 2); - // For now, tracking only loads from 0(r1) to r1 - // (0(r1) is the ABI defined location to save previous SP) + // For now, tracking only loads from 0(r1) to r1 (0(r1) is the ABI defined + // location to save previous SP) if (ra != gpr_r1_ppc64le || rt != gpr_r1_ppc64le || ids != 0) return false; @@ -294,8 +294,8 @@ bool EmulateInstructionPPC64::EmulateSTD(uint32_t opcode) { LLDB_LOG(log, "EmulateSTD: {0:X+8}: std{1} r{2}, {3}(r{4})", m_addr, u ? "u" : "", rs, ids, ra); - // Make sure that r0 is really holding LR value - // (this won't catch unlikely cases, such as r0 being overwritten after mfspr) + // Make sure that r0 is really holding LR value (this won't catch unlikely + // cases, such as r0 being overwritten after mfspr) uint32_t rs_num = rs; if (rs == gpr_r0_ppc64le) { uint64_t lr = diff --git a/lldb/source/Plugins/InstrumentationRuntime/MainThreadChecker/MainThreadCheckerRuntime.cpp b/lldb/source/Plugins/InstrumentationRuntime/MainThreadChecker/MainThreadCheckerRuntime.cpp index eb238419ab1..32da327ee46 100644 --- a/lldb/source/Plugins/InstrumentationRuntime/MainThreadChecker/MainThreadCheckerRuntime.cpp +++ b/lldb/source/Plugins/InstrumentationRuntime/MainThreadChecker/MainThreadCheckerRuntime.cpp @@ -267,8 +267,8 @@ MainThreadCheckerRuntime::GetBacktracesFromExtendedStopInfo( new HistoryThread(*process_sp, tid, PCs, stop_id, stop_id_is_valid); ThreadSP new_thread_sp(history_thread); - // Save this in the Process' ExtendedThreadList so a strong pointer - // retains the object + // Save this in the Process' ExtendedThreadList so a strong pointer retains + // the object process_sp->GetExtendedThreadList().AddThread(new_thread_sp); threads->AddThread(new_thread_sp); diff --git a/lldb/source/Plugins/InstrumentationRuntime/TSan/TSanRuntime.cpp b/lldb/source/Plugins/InstrumentationRuntime/TSan/TSanRuntime.cpp index cf9ba60c7b6..7c4b7be5003 100644 --- a/lldb/source/Plugins/InstrumentationRuntime/TSan/TSanRuntime.cpp +++ b/lldb/source/Plugins/InstrumentationRuntime/TSan/TSanRuntime.cpp @@ -282,9 +282,8 @@ GetRenumberedThreadIds(ProcessSP process_sp, ValueObjectSP data, } else { // This isn't a live thread anymore. Ask process to assign a new // Index ID (or return an old one if we've already seen this - // thread_os_id). - // It will also make sure that no new threads are assigned this Index - // ID. + // thread_os_id). It will also make sure that no new threads are + // assigned this Index ID. lldb_user_id = process_sp->AssignIndexIDToThread(thread_os_id); } diff --git a/lldb/source/Plugins/InstrumentationRuntime/UBSan/UBSanRuntime.cpp b/lldb/source/Plugins/InstrumentationRuntime/UBSan/UBSanRuntime.cpp index 28c28e41ef4..1e9280c8c06 100644 --- a/lldb/source/Plugins/InstrumentationRuntime/UBSan/UBSanRuntime.cpp +++ b/lldb/source/Plugins/InstrumentationRuntime/UBSan/UBSanRuntime.cpp @@ -334,8 +334,8 @@ UndefinedBehaviorSanitizerRuntime::GetBacktracesFromExtendedStopInfo( std::string stop_reason_description = GetStopReasonDescription(info); new_thread_sp->SetName(stop_reason_description.c_str()); - // Save this in the Process' ExtendedThreadList so a strong pointer - // retains the object + // Save this in the Process' ExtendedThreadList so a strong pointer retains + // the object process_sp->GetExtendedThreadList().AddThread(new_thread_sp); threads->AddThread(new_thread_sp); diff --git a/lldb/source/Plugins/Language/CPlusPlus/BlockPointer.cpp b/lldb/source/Plugins/Language/CPlusPlus/BlockPointer.cpp index 5e8f051dec9..82b7ac1675f 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/BlockPointer.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/BlockPointer.cpp @@ -147,9 +147,8 @@ public: return child_sp; } - // return true if this object is now safe to use forever without - // ever updating again; the typical (and tested) answer here is - // 'false' + // return true if this object is now safe to use forever without ever + // updating again; the typical (and tested) answer here is 'false' bool Update() override { return false; } // maybe return false if the block pointer is, say, null diff --git a/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp b/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp index 622b66d8de9..1aa48e4f248 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp @@ -120,10 +120,9 @@ static bool ReverseFindMatchingChars(const llvm::StringRef &s, static bool IsTrivialBasename(const llvm::StringRef &basename) { // Check that the basename matches with the following regular expression - // "^~?([A-Za-z_][A-Za-z_0-9]*)$" - // We are using a hand written implementation because it is significantly more - // efficient then - // using the general purpose regular expression library. + // "^~?([A-Za-z_][A-Za-z_0-9]*)$" We are using a hand written implementation + // because it is significantly more efficient then using the general purpose + // regular expression library. size_t idx = 0; if (basename.size() > 0 && basename[0] == '~') idx = 1; @@ -151,10 +150,9 @@ static bool IsTrivialBasename(const llvm::StringRef &basename) { } bool CPlusPlusLanguage::MethodName::TrySimplifiedParse() { - // This method tries to parse simple method definitions - // which are presumably most comman in user programs. - // Definitions that can be parsed by this function don't have return types - // and templates in the name. + // This method tries to parse simple method definitions which are presumably + // most comman in user programs. Definitions that can be parsed by this + // function don't have return types and templates in the name. // A::B::C::fun(std::vector<T> &) const size_t arg_start, arg_end; llvm::StringRef full(m_full.GetCString()); @@ -251,8 +249,8 @@ std::string CPlusPlusLanguage::MethodName::GetScopeQualifiedName() { } bool CPlusPlusLanguage::IsCPPMangledName(const char *name) { - // FIXME!! we should really run through all the known C++ Language - // plugins and ask each one if this is a C++ mangled name + // FIXME!! we should really run through all the known C++ Language plugins + // and ask each one if this is a C++ mangled name if (name == nullptr) return false; diff --git a/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusNameParser.cpp b/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusNameParser.cpp index a992b72dc6c..b32fe958896 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusNameParser.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusNameParser.cpp @@ -25,8 +25,8 @@ Optional<ParsedFunction> CPlusPlusNameParser::ParseAsFunctionDefinition() { m_next_token_index = 0; Optional<ParsedFunction> result(None); - // Try to parse the name as function without a return type specified - // e.g. main(int, char*[]) + // Try to parse the name as function without a return type specified e.g. + // main(int, char*[]) { Bookmark start_position = SetBookmark(); result = ParseFunctionImpl(false); @@ -34,8 +34,8 @@ Optional<ParsedFunction> CPlusPlusNameParser::ParseAsFunctionDefinition() { return result; } - // Try to parse the name as function with function pointer return type - // e.g. void (*get_func(const char*))() + // Try to parse the name as function with function pointer return type e.g. + // void (*get_func(const char*))() result = ParseFuncPtr(true); if (result) return result; @@ -183,13 +183,13 @@ bool CPlusPlusNameParser::ConsumeTemplateArgs() { Advance(); // Consuming template arguments is a bit trickier than consuming function - // arguments, because '<' '>' brackets are not always trivially balanced. - // In some rare cases tokens '<' and '>' can appear inside template arguments - // as arithmetic or shift operators not as template brackets. - // Examples: std::enable_if<(10u)<(64), bool> + // arguments, because '<' '>' brackets are not always trivially balanced. In + // some rare cases tokens '<' and '>' can appear inside template arguments as + // arithmetic or shift operators not as template brackets. Examples: + // std::enable_if<(10u)<(64), bool> // f<A<operator<(X,Y)::Subclass>> - // Good thing that compiler makes sure that really ambiguous cases of - // '>' usage should be enclosed within '()' brackets. + // Good thing that compiler makes sure that really ambiguous cases of '>' + // usage should be enclosed within '()' brackets. int template_counter = 1; bool can_open_template = false; while (HasMoreTokens() && template_counter > 0) { @@ -208,9 +208,9 @@ bool CPlusPlusNameParser::ConsumeTemplateArgs() { case tok::less: // '<' is an attempt to open a subteamplte // check if parser is at the point where it's actually possible, - // otherwise it's just a part of an expression like 'sizeof(T)<(10)'. - // No need to do the same for '>' because compiler actually makes sure - // that '>' always surrounded by brackets to avoid ambiguity. + // otherwise it's just a part of an expression like 'sizeof(T)<(10)'. No + // need to do the same for '>' because compiler actually makes sure that + // '>' always surrounded by brackets to avoid ambiguity. if (can_open_template) ++template_counter; can_open_template = false; @@ -388,10 +388,9 @@ void CPlusPlusNameParser::SkipFunctionQualifiers() { bool CPlusPlusNameParser::ConsumeBuiltinType() { bool result = false; bool continue_parsing = true; - // Built-in types can be made of a few keywords - // like 'unsigned long long int'. This function - // consumes all built-in type keywords without - // checking if they make sense like 'unsigned char void'. + // Built-in types can be made of a few keywords like 'unsigned long long + // int'. This function consumes all built-in type keywords without checking + // if they make sense like 'unsigned char void'. while (continue_parsing && HasMoreTokens()) { switch (Peek().getKind()) { case tok::kw_short: diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxx.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibCxx.cpp index f6d1f18cb59..95e02a473cd 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/LibCxx.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxx.cpp @@ -123,12 +123,11 @@ bool lldb_private::formatters::LibCxxMapIteratorSyntheticFrontEnd::Update() { static ConstString g___i_("__i_"); - // this must be a ValueObject* because it is a child of the ValueObject we are - // producing children for - // it if were a ValueObjectSP, we would end up with a loop (iterator -> - // synthetic -> child -> parent == iterator) - // and that would in turn leak memory by never allowing the ValueObjects to - // die and free their memory + // this must be a ValueObject* because it is a child of the ValueObject we + // are producing children for it if were a ValueObjectSP, we would end up + // with a loop (iterator -> synthetic -> child -> parent == iterator) and + // that would in turn leak memory by never allowing the ValueObjects to die + // and free their memory m_pair_ptr = valobj_sp ->GetValueForExpressionPath( ".__i_.__ptr_->__value_", nullptr, nullptr, @@ -386,7 +385,8 @@ enum LibcxxStringLayoutMode { }; // this function abstracts away the layout and mode details of a libc++ string -// and returns the address of the data and the size ready for callers to consume +// and returns the address of the data and the size ready for callers to +// consume static bool ExtractLibcxxStringInfo(ValueObject &valobj, ValueObjectSP &location_sp, uint64_t &size) { diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxxList.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibCxxList.cpp index 6407ae129ad..6066f14b18c 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/LibCxxList.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxxList.cpp @@ -206,8 +206,7 @@ bool AbstractListFrontEnd::HasLoop(size_t count) { if (m_loop_detected == 0) { // This is the first time we are being run (after the last update). Set up - // the loop - // invariant for the first element. + // the loop invariant for the first element. m_slow_runner = ListEntry(m_head).next(); m_fast_runner = m_slow_runner.next(); m_loop_detected = 1; @@ -215,9 +214,8 @@ bool AbstractListFrontEnd::HasLoop(size_t count) { // Loop invariant: // Loop detection has been run over the first m_loop_detected elements. If - // m_slow_runner == - // m_fast_runner then the loop has been detected after m_loop_detected - // elements. + // m_slow_runner == m_fast_runner then the loop has been detected after + // m_loop_detected elements. const size_t steps_to_run = std::min(count, m_count); while (m_loop_detected < steps_to_run && m_slow_runner && m_fast_runner && m_slow_runner != m_fast_runner) { diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxxMap.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibCxxMap.cpp index be96a6d95bc..8f82bdcbfd5 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/LibCxxMap.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxxMap.cpp @@ -382,8 +382,8 @@ lldb_private::formatters::LibcxxStdMapSyntheticFrontEnd::GetChildAtIndex( return lldb::ValueObjectSP(); } } else { - // because of the way our debug info is made, we need to read item 0 first - // so that we can cache information used to generate other elements + // because of the way our debug info is made, we need to read item 0 + // first so that we can cache information used to generate other elements if (m_skip_size == UINT32_MAX) GetChildAtIndex(0); if (m_skip_size == UINT32_MAX) { diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibStdcppUniquePointer.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibStdcppUniquePointer.cpp index 19b0e88b896..dde75971b25 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/LibStdcppUniquePointer.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/LibStdcppUniquePointer.cpp @@ -71,8 +71,8 @@ ValueObjectSP LibStdcppUniquePtrSyntheticFrontEnd::GetTuple() { ValueObjectSP obj_subchild_sp = obj_child_sp->GetChildMemberWithName(ConstString("_M_t"), true); - // if there is a _M_t subchild, the tuple is found in - // the obj_subchild_sp (for libstdc++ 6.0.23). + // if there is a _M_t subchild, the tuple is found in the obj_subchild_sp + // (for libstdc++ 6.0.23). if (obj_subchild_sp) { return obj_subchild_sp; } diff --git a/lldb/source/Plugins/Language/ObjC/Cocoa.cpp b/lldb/source/Plugins/Language/ObjC/Cocoa.cpp index 16de62b02e5..d787d86bfee 100644 --- a/lldb/source/Plugins/Language/ObjC/Cocoa.cpp +++ b/lldb/source/Plugins/Language/ObjC/Cocoa.cpp @@ -766,9 +766,9 @@ bool lldb_private::formatters::NSDateSummaryProvider( stream.Printf("0001-12-30 00:00:00 +0000"); return true; } - // this snippet of code assumes that time_t == seconds since Jan-1-1970 - // this is generally true and POSIXly happy, but might break if a library - // vendor decides to get creative + // this snippet of code assumes that time_t == seconds since Jan-1-1970 this + // is generally true and POSIXly happy, but might break if a library vendor + // decides to get creative time_t epoch = GetOSXEpoch(); epoch = epoch + (time_t)date_value; tm *tm_date = gmtime(&epoch); diff --git a/lldb/source/Plugins/Language/ObjC/NSError.cpp b/lldb/source/Plugins/Language/ObjC/NSError.cpp index 4365a12b54e..77721e2db32 100644 --- a/lldb/source/Plugins/Language/ObjC/NSError.cpp +++ b/lldb/source/Plugins/Language/ObjC/NSError.cpp @@ -177,12 +177,11 @@ public: private: // the child here can be "real" (i.e. an actual child of the root) or - // synthetized from raw memory - // if the former, I need to store a plain pointer to it - or else a loop of - // references will cause this entire hierarchy of values to leak - // if the latter, then I need to store a SharedPointer to it - so that it only - // goes away when everyone else in the cluster goes away - // oh joy! + // synthetized from raw memory if the former, I need to store a plain pointer + // to it - or else a loop of references will cause this entire hierarchy of + // values to leak if the latter, then I need to store a SharedPointer to it - + // so that it only goes away when everyone else in the cluster goes away oh + // joy! ValueObject *m_child_ptr; ValueObjectSP m_child_sp; }; diff --git a/lldb/source/Plugins/Language/ObjC/NSException.cpp b/lldb/source/Plugins/Language/ObjC/NSException.cpp index 1da4f6de19a..c6970efae4d 100644 --- a/lldb/source/Plugins/Language/ObjC/NSException.cpp +++ b/lldb/source/Plugins/Language/ObjC/NSException.cpp @@ -171,12 +171,11 @@ public: private: // the child here can be "real" (i.e. an actual child of the root) or - // synthetized from raw memory - // if the former, I need to store a plain pointer to it - or else a loop of - // references will cause this entire hierarchy of values to leak - // if the latter, then I need to store a SharedPointer to it - so that it only - // goes away when everyone else in the cluster goes away - // oh joy! + // synthetized from raw memory if the former, I need to store a plain pointer + // to it - or else a loop of references will cause this entire hierarchy of + // values to leak if the latter, then I need to store a SharedPointer to it - + // so that it only goes away when everyone else in the cluster goes away oh + // joy! ValueObject *m_child_ptr; ValueObjectSP m_child_sp; }; diff --git a/lldb/source/Plugins/Language/ObjC/NSString.cpp b/lldb/source/Plugins/Language/ObjC/NSString.cpp index 3b4edf68e06..0b12edb53d7 100644 --- a/lldb/source/Plugins/Language/ObjC/NSString.cpp +++ b/lldb/source/Plugins/Language/ObjC/NSString.cpp @@ -256,8 +256,7 @@ bool lldb_private::formatters::NSStringSummaryProvider( uint64_t location = valobj_addr + 2 * ptr_size; if (!has_explicit_length) { // in this kind of string, the byte before the string content is a length - // byte - // so let's try and use it to handle the embedded NUL case + // byte so let's try and use it to handle the embedded NUL case Status error; explicit_length = process_sp->ReadUnsignedIntegerFromMemory(location, 1, 0, error); @@ -368,9 +367,7 @@ bool lldb_private::formatters::NSTaggedString_SummaryProvider( } // this is a fairly ugly trick - pretend that the numeric value is actually a - // char* - // this works under a few assumptions: - // little endian architecture + // char* this works under a few assumptions: little endian architecture // sizeof(uint64_t) > g_MaxNonBitmaskedLen if (len_bits <= g_MaxNonBitmaskedLen) { stream.Printf("%s", prefix.c_str()); diff --git a/lldb/source/Plugins/Language/ObjC/ObjCLanguage.cpp b/lldb/source/Plugins/Language/ObjC/ObjCLanguage.cpp index ea2eec7b33b..95d2d047bb0 100644 --- a/lldb/source/Plugins/Language/ObjC/ObjCLanguage.cpp +++ b/lldb/source/Plugins/Language/ObjC/ObjCLanguage.cpp @@ -90,9 +90,8 @@ bool ObjCLanguage::MethodName::SetName(llvm::StringRef name, bool strict) { if (name.empty()) return IsValid(strict); - // If "strict" is true. then the method must be specified with a - // '+' or '-' at the beginning. If "strict" is false, then the '+' - // or '-' can be omitted + // If "strict" is true. then the method must be specified with a '+' or '-' + // at the beginning. If "strict" is false, then the '+' or '-' can be omitted bool valid_prefix = false; if (name.size() > 1 && (name[0] == '+' || name[0] == '-')) { @@ -134,8 +133,8 @@ const ConstString &ObjCLanguage::MethodName::GetClassName() { if (paren_pos) { m_class.SetCStringWithLength(class_start, paren_pos - class_start); } else { - // No '(' was found in the full name, we can definitively say - // that our category was valid (and empty). + // No '(' was found in the full name, we can definitively say that our + // category was valid (and empty). m_category_is_valid = true; const char *space_pos = strchr(full, ' '); if (space_pos) { @@ -164,8 +163,8 @@ const ConstString &ObjCLanguage::MethodName::GetClassNameWithCategory() { // contain a '(', then we can also fill in the m_class if (!m_class && strchr(m_class_category.GetCString(), '(') == nullptr) { m_class = m_class_category; - // No '(' was found in the full name, we can definitively say - // that our category was valid (and empty). + // No '(' was found in the full name, we can definitively say that + // our category was valid (and empty). m_category_is_valid = true; } } @@ -796,8 +795,8 @@ static void LoadObjCFormatters(TypeCategoryImplSP objc_category_sp) { objc_category_sp, lldb_private::formatters::NSTimeZoneSummaryProvider, "NSTimeZone summary provider", ConstString("__NSTimeZone"), appkit_flags); - // CFAbsoluteTime is actually a double rather than a pointer to an object - // we do not care about the numeric value, since it is probably meaningless to + // CFAbsoluteTime is actually a double rather than a pointer to an object we + // do not care about the numeric value, since it is probably meaningless to // users appkit_flags.SetDontShowValue(true); AddCXXSummary(objc_category_sp, diff --git a/lldb/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.cpp b/lldb/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.cpp index 04789e5db23..fc661bbbf2c 100644 --- a/lldb/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.cpp +++ b/lldb/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.cpp @@ -93,8 +93,8 @@ TypeAndOrName ItaniumABILanguageRuntime::GetTypeInfoFromVTableAddress( TypeList class_types; uint32_t num_matches = 0; - // First look in the module that the vtable symbol came from - // and look for a single exact match. + // First look in the module that the vtable symbol came from and + // look for a single exact match. llvm::DenseSet<SymbolFile *> searched_symbol_files; if (sc.module_sp) { num_matches = sc.module_sp->FindTypes( @@ -102,9 +102,8 @@ TypeAndOrName ItaniumABILanguageRuntime::GetTypeInfoFromVTableAddress( searched_symbol_files, class_types); } - // If we didn't find a symbol, then move on to the entire - // module list in the target and get as many unique matches - // as possible + // If we didn't find a symbol, then move on to the entire module + // list in the target and get as many unique matches as possible if (num_matches == 0) { num_matches = target.GetImages().FindTypes( sc, ConstString(lookup_name), exact_match, UINT32_MAX, @@ -192,15 +191,12 @@ bool ItaniumABILanguageRuntime::GetDynamicTypeAndAddress( TypeAndOrName &class_type_or_name, Address &dynamic_address, Value::ValueType &value_type) { // For Itanium, if the type has a vtable pointer in the object, it will be at - // offset 0 - // in the object. That will point to the "address point" within the vtable - // (not the beginning of the - // vtable.) We can then look up the symbol containing this "address point" - // and that symbol's name - // demangled will contain the full class name. - // The second pointer above the "address point" is the "offset_to_top". We'll - // use that to get the - // start of the value object which holds the dynamic type. + // offset 0 in the object. That will point to the "address point" within the + // vtable (not the beginning of the vtable.) We can then look up the symbol + // containing this "address point" and that symbol's name demangled will + // contain the full class name. The second pointer above the "address point" + // is the "offset_to_top". We'll use that to get the start of the value + // object which holds the dynamic type. // class_type_or_name.Clear(); @@ -235,17 +231,15 @@ bool ItaniumABILanguageRuntime::GetDynamicTypeAndAddress( if (class_type_or_name) { TypeSP type_sp = class_type_or_name.GetTypeSP(); - // There can only be one type with a given name, - // so we've just found duplicate definitions, and this - // one will do as well as any other. - // We don't consider something to have a dynamic type if - // it is the same as the static type. So compare against - // the value we were handed. + // There can only be one type with a given name, so we've just found + // duplicate definitions, and this one will do as well as any other. We + // don't consider something to have a dynamic type if it is the same as + // the static type. So compare against the value we were handed. if (type_sp) { if (ClangASTContext::AreTypesSame(in_value.GetCompilerType(), type_sp->GetForwardCompilerType())) { - // The dynamic type we found was the same type, - // so we don't have a dynamic type here... + // The dynamic type we found was the same type, so we don't have a + // dynamic type here... return false; } @@ -262,8 +256,8 @@ bool ItaniumABILanguageRuntime::GetDynamicTypeAndAddress( if (offset_to_top == INT64_MIN) return false; - // So the dynamic type is a value that starts at offset_to_top - // above the original address. + // So the dynamic type is a value that starts at offset_to_top above + // the original address. lldb::addr_t dynamic_addr = original_ptr + offset_to_top; if (!process->GetTarget().GetSectionLoadList().ResolveLoadAddress( dynamic_addr, dynamic_address)) { @@ -285,10 +279,9 @@ TypeAndOrName ItaniumABILanguageRuntime::FixUpDynamicType( TypeAndOrName ret(type_and_or_name); if (type_and_or_name.HasType()) { // The type will always be the type of the dynamic object. If our parent's - // type was a pointer, - // then our type should be a pointer to the type of the dynamic object. If - // a reference, then the original type - // should be okay... + // type was a pointer, then our type should be a pointer to the type of the + // dynamic object. If a reference, then the original type should be + // okay... CompilerType orig_type = type_and_or_name.GetCompilerType(); CompilerType corrected_type = orig_type; if (static_type_flags.AllSet(eTypeIsPointer)) @@ -373,8 +366,8 @@ protected: // the actual Mangled class should be strict about this, but on the // command line if you're copying mangled names out of 'nm' on Darwin, - // they will come out with an extra underscore - be willing to strip - // this on behalf of the user. This is the moral equivalent of the -_/-n + // they will come out with an extra underscore - be willing to strip this + // on behalf of the user. This is the moral equivalent of the -_/-n // options to c++filt auto name = entry.ref; if (name.startswith("__Z")) @@ -453,13 +446,12 @@ BreakpointResolverSP ItaniumABILanguageRuntime::CreateExceptionResolver( BreakpointResolverSP ItaniumABILanguageRuntime::CreateExceptionResolver( Breakpoint *bkpt, bool catch_bp, bool throw_bp, bool for_expressions) { // One complication here is that most users DON'T want to stop at - // __cxa_allocate_expression, but until we can do - // anything better with predicting unwinding the expression parser does. So - // we have two forms of the exception - // breakpoints, one for expressions that leaves out __cxa_allocate_exception, - // and one that includes it. - // The SetExceptionBreakpoints does the latter, the CreateExceptionBreakpoint - // in the runtime the former. + // __cxa_allocate_expression, but until we can do anything better with + // predicting unwinding the expression parser does. So we have two forms of + // the exception breakpoints, one for expressions that leaves out + // __cxa_allocate_exception, and one that includes it. The + // SetExceptionBreakpoints does the latter, the CreateExceptionBreakpoint in + // the runtime the former. static const char *g_catch_name = "__cxa_begin_catch"; static const char *g_throw_name1 = "__cxa_throw"; static const char *g_throw_name2 = "__cxa_rethrow"; @@ -522,8 +514,7 @@ void ItaniumABILanguageRuntime::SetExceptionBreakpoints() { const bool for_expressions = true; // For the exception breakpoints set by the Expression parser, we'll be a - // little more aggressive and - // stop at exception allocation as well. + // little more aggressive and stop at exception allocation as well. if (m_cxx_exception_bp_sp) { m_cxx_exception_bp_sp->SetEnabled(true); diff --git a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCClassDescriptorV2.cpp b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCClassDescriptorV2.cpp index ecb0b64f234..edb29e735ca 100644 --- a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCClassDescriptorV2.cpp +++ b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCClassDescriptorV2.cpp @@ -378,8 +378,7 @@ bool ClassDescriptorV2::Describe( AppleObjCRuntime::ClassDescriptorSP metaclass(GetMetaclass()); // We don't care about the metaclass's superclass, or its class methods. - // Its instance methods are - // our class methods. + // Its instance methods are our class methods. if (metaclass) { metaclass->Describe( diff --git a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntime.cpp b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntime.cpp index eacc98a0719..5516cf90122 100644 --- a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntime.cpp +++ b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntime.cpp @@ -54,23 +54,20 @@ bool AppleObjCRuntime::GetObjectDescription(Stream &str, ValueObject &valobj) { CompilerType compiler_type(valobj.GetCompilerType()); bool is_signed; // ObjC objects can only be pointers (or numbers that actually represents - // pointers - // but haven't been typecast, because reasons..) + // pointers but haven't been typecast, because reasons..) if (!compiler_type.IsIntegerType(is_signed) && !compiler_type.IsPointerType()) return false; - // Make the argument list: we pass one arg, the address of our pointer, to the - // print function. + // Make the argument list: we pass one arg, the address of our pointer, to + // the print function. Value val; if (!valobj.ResolveValue(val.GetScalar())) return false; // Value Objects may not have a process in their ExecutionContextRef. But we - // need to have one - // in the ref we pass down to eventually call description. Get it from the - // target if it isn't - // present. + // need to have one in the ref we pass down to eventually call description. + // Get it from the target if it isn't present. ExecutionContext exe_ctx; if (valobj.GetProcessSP()) { exe_ctx = ExecutionContext(valobj.GetExecutionContextRef()); @@ -257,10 +254,9 @@ AppleObjCRuntime::FixUpDynamicType(const TypeAndOrName &type_and_or_name, TypeAndOrName ret(type_and_or_name); if (type_and_or_name.HasType()) { // The type will always be the type of the dynamic object. If our parent's - // type was a pointer, - // then our type should be a pointer to the type of the dynamic object. If - // a reference, then the original type - // should be okay... + // type was a pointer, then our type should be a pointer to the type of the + // dynamic object. If a reference, then the original type should be + // okay... CompilerType orig_type = type_and_or_name.GetCompilerType(); CompilerType corrected_type = orig_type; if (static_type_flags.AllSet(eTypeIsPointer)) @@ -325,8 +321,8 @@ bool AppleObjCRuntime::IsModuleObjCLibrary(const ModuleSP &module_sp) { bool AppleObjCRuntime::ReadObjCLibrary(const ModuleSP &module_sp) { // Maybe check here and if we have a handler already, and the UUID of this - // module is the same as the one in the - // current module, then we don't have to reread it? + // module is the same as the one in the current module, then we don't have to + // reread it? m_objc_trampoline_handler_ap.reset( new AppleObjCTrampolineHandler(m_process->shared_from_this(), module_sp)); if (m_objc_trampoline_handler_ap.get() != NULL) { @@ -365,11 +361,9 @@ AppleObjCRuntime::GetObjCVersion(Process *process, ModuleSP &objc_module_sp) { for (size_t i = 0; i < num_images; i++) { ModuleSP module_sp = target_modules.GetModuleAtIndexUnlocked(i); // One tricky bit here is that we might get called as part of the initial - // module loading, but - // before all the pre-run libraries get winnowed from the module list. So - // there might actually - // be an old and incorrect ObjC library sitting around in the list, and we - // don't want to look at that. + // module loading, but before all the pre-run libraries get winnowed from + // the module list. So there might actually be an old and incorrect ObjC + // library sitting around in the list, and we don't want to look at that. // That's why we call IsLoadedInTarget. if (AppleIsModuleObjCLibrary(module_sp) && diff --git a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV1.cpp b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV1.cpp index 9cac499c0ff..270e83642ac 100644 --- a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV1.cpp +++ b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV1.cpp @@ -42,8 +42,7 @@ AppleObjCRuntimeV1::AppleObjCRuntimeV1(Process *process) m_isa_hash_table_ptr(LLDB_INVALID_ADDRESS) {} // for V1 runtime we just try to return a class name as that is the minimum -// level of support -// required for the data formatters to work +// level of support required for the data formatters to work bool AppleObjCRuntimeV1::GetDynamicTypeAndAddress( ValueObject &in_value, lldb::DynamicValueType use_dynamic, TypeAndOrName &class_type_or_name, Address &address, @@ -383,8 +382,8 @@ void AppleObjCRuntimeV1::UpdateISAToDescriptorMapIfNeeded() { ObjCISA isa; if (bucket_isa_count == 1) { - // When we only have one entry in the bucket, the bucket data is - // the "isa" + // When we only have one entry in the bucket, the bucket data + // is the "isa" isa = bucket_data; if (isa) { if (!ISAIsCached(isa)) { @@ -402,8 +401,7 @@ void AppleObjCRuntimeV1::UpdateISAToDescriptorMapIfNeeded() { } } else { // When we have more than one entry in the bucket, the bucket - // data is a pointer - // to an array of "isa" values + // data is a pointer to an array of "isa" values addr_t isa_addr = bucket_data; for (uint32_t isa_idx = 0; isa_idx < bucket_isa_count; ++isa_idx, isa_addr += addr_size) { diff --git a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp index 3742fc1e1ca..4605effcd19 100644 --- a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp +++ b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp @@ -77,8 +77,7 @@ static constexpr std::chrono::seconds g_utility_function_timeout(2); static const char *g_get_dynamic_class_info_name = "__lldb_apple_objc_v2_get_dynamic_class_info"; // Testing using the new C++11 raw string literals. If this breaks GCC then we -// will -// need to revert to the code above... +// will need to revert to the code above... static const char *g_get_dynamic_class_info_body = R"( extern "C" @@ -162,8 +161,7 @@ __lldb_apple_objc_v2_get_dynamic_class_info (void *gdb_objc_realized_classes_ptr static const char *g_get_shared_cache_class_info_name = "__lldb_apple_objc_v2_get_shared_cache_class_info"; // Testing using the new C++11 raw string literals. If this breaks GCC then we -// will -// need to revert to the code above... +// will need to revert to the code above... static const char *g_get_shared_cache_class_info_body = R"( extern "C" @@ -407,10 +405,9 @@ bool AppleObjCRuntimeV2::GetDynamicTypeAndAddress( assert(m_process != NULL); // The Runtime is attached to a particular process, you shouldn't pass in a - // value from another process. - // Note, however, the process might be NULL (e.g. if the value was made with - // SBTarget::EvaluateExpression...) - // in which case it is sufficient if the target's match: + // value from another process. Note, however, the process might be NULL (e.g. + // if the value was made with SBTarget::EvaluateExpression...) in which case + // it is sufficient if the target's match: Process *process = in_value.GetProcessSP().get(); if (process) @@ -423,8 +420,8 @@ bool AppleObjCRuntimeV2::GetDynamicTypeAndAddress( // Make sure we can have a dynamic value before starting... if (CouldHaveDynamicValue(in_value)) { - // First job, pull out the address at 0 offset from the object That will be - // the ISA pointer. + // First job, pull out the address at 0 offset from the object That will + // be the ISA pointer. ClassDescriptorSP objc_class_sp(GetNonKVOClassDescriptor(in_value)); if (objc_class_sp) { const addr_t object_ptr = in_value.GetPointerValue(); @@ -871,8 +868,8 @@ size_t AppleObjCRuntimeV2::GetByteOffsetForIvar(CompilerType &parent_ast_type, const char *class_name = parent_ast_type.GetConstTypeName().AsCString(); if (class_name && class_name[0] && ivar_name && ivar_name[0]) { //---------------------------------------------------------------------- - // Make the objective C V2 mangled name for the ivar offset from the - // class name and ivar name + // Make the objective C V2 mangled name for the ivar offset from the class + // name and ivar name //---------------------------------------------------------------------- std::string buffer("OBJC_IVAR_$_"); buffer.append(class_name); @@ -881,8 +878,8 @@ size_t AppleObjCRuntimeV2::GetByteOffsetForIvar(CompilerType &parent_ast_type, ConstString ivar_const_str(buffer.c_str()); //---------------------------------------------------------------------- - // Try to get the ivar offset address from the symbol table first using - // the name we created above + // Try to get the ivar offset address from the symbol table first using the + // name we created above //---------------------------------------------------------------------- SymbolContextList sc_list; Target &target = m_process->GetTarget(); @@ -915,11 +912,9 @@ size_t AppleObjCRuntimeV2::GetByteOffsetForIvar(CompilerType &parent_ast_type, } // tagged pointers are special not-a-real-pointer values that contain both type -// and value information -// this routine attempts to check with as little computational effort as -// possible whether something -// could possibly be a tagged pointer - false positives are possible but false -// negatives shouldn't +// and value information this routine attempts to check with as little +// computational effort as possible whether something could possibly be a +// tagged pointer - false positives are possible but false negatives shouldn't bool AppleObjCRuntimeV2::IsTaggedPointer(addr_t ptr) { if (!m_tagged_pointer_vendor_ap) return false; @@ -951,11 +946,11 @@ public: Status err; // This currently holds true for all platforms we support, but we might - // need to change this to use get the actually byte size of "unsigned" - // from the target AST... + // need to change this to use get the actually byte size of "unsigned" from + // the target AST... const uint32_t unsigned_byte_size = sizeof(uint32_t); - // Skip the prototype as we don't need it (const struct +NXMapTablePrototype - // *prototype) + // Skip the prototype as we don't need it (const struct + // +NXMapTablePrototype *prototype) bool success = true; if (load_addr == LLDB_INVALID_ADDRESS) @@ -989,8 +984,8 @@ public: return success; } - // const_iterator mimics NXMapState and its code comes from NXInitMapState and - // NXNextMapState. + // const_iterator mimics NXMapState and its code comes from NXInitMapState + // and NXNextMapState. typedef std::pair<ConstString, ObjCLanguageRuntime::ObjCISA> element; friend class const_iterator; @@ -1133,8 +1128,8 @@ bool AppleObjCRuntimeV2::HashTableSignature::NeedsUpdate( return false; // Failed to parse the header, no need to update anything } - // Check with out current signature and return true if the count, - // number of buckets or the hash table address changes. + // Check with out current signature and return true if the count, number of + // buckets or the hash table address changes. if (m_count == hash_table.GetCount() && m_num_buckets == hash_table.GetBucketCount() && m_buckets_ptr == hash_table.GetBucketDataPointer()) { @@ -1168,9 +1163,9 @@ AppleObjCRuntimeV2::GetClassDescriptor(ValueObject &valobj) { } return nullptr; } - // if we get an invalid VO (which might still happen when playing around - // with pointers returned by the expression parser, don't consider this - // a valid ObjC object) + // if we get an invalid VO (which might still happen when playing around with + // pointers returned by the expression parser, don't consider this a valid + // ObjC object) if (valobj.GetCompilerType().IsValid()) { addr_t isa_pointer = valobj.GetPointerValue(); @@ -1360,8 +1355,8 @@ AppleObjCRuntimeV2::UpdateISAToDescriptorMapDynamic( arguments.GetValueAtIndex(1)->GetScalar() = class_infos_addr; arguments.GetValueAtIndex(2)->GetScalar() = class_infos_byte_size; - // Only dump the runtime classes from the expression evaluation if the - // log is verbose: + // Only dump the runtime classes from the expression evaluation if the log is + // verbose: Log *type_log = GetLogIfAllCategoriesSet(LIBLLDB_LOG_TYPES); bool dump_log = type_log && type_log->GetVerbose(); @@ -1455,8 +1450,8 @@ uint32_t AppleObjCRuntimeV2::ParseClassInfoArray(const DataExtractor &data, "AppleObjCRuntimeV2 found NULL isa, ignoring this class info"); continue; } - // Check if we already know about this ISA, if we do, the info will - // never change, so we can just skip it. + // Check if we already know about this ISA, if we do, the info will never + // change, so we can just skip it. if (ISAIsCached(isa)) { if (log) log->Printf("AppleObjCRuntimeV2 found cached isa=0x%" PRIx64 @@ -1607,8 +1602,8 @@ AppleObjCRuntimeV2::UpdateISAToDescriptorMapSharedCache() { arguments.GetValueAtIndex(0)->GetScalar() = objc_opt_ptr; arguments.GetValueAtIndex(1)->GetScalar() = class_infos_addr; arguments.GetValueAtIndex(2)->GetScalar() = class_infos_byte_size; - // Only dump the runtime classes from the expression evaluation if the - // log is verbose: + // Only dump the runtime classes from the expression evaluation if the log is + // verbose: Log *type_log = GetLogIfAllCategoriesSet(LIBLLDB_LOG_TYPES); bool dump_log = type_log && type_log->GetVerbose(); @@ -1788,21 +1783,17 @@ void AppleObjCRuntimeV2::UpdateISAToDescriptorMapIfNeeded() { DescriptorMapUpdateResult dynamic_update_result = UpdateISAToDescriptorMapDynamic(hash_table); - // Now get the objc classes that are baked into the Objective C runtime - // in the shared cache, but only once per process as this data never - // changes + // Now get the objc classes that are baked into the Objective C runtime in + // the shared cache, but only once per process as this data never changes if (!m_loaded_objc_opt) { // it is legitimately possible for the shared cache to be empty - in that - // case, the dynamic hash table - // will contain all the class information we need; the situation we're - // trying to detect is one where - // we aren't seeing class information from the runtime - in order to - // detect that vs. just the shared cache - // being empty or sparsely populated, we set an arbitrary (very low) - // threshold for the number of classes - // that we want to see in a "good" scenario - anything below that is - // suspicious (Foundation alone has thousands - // of classes) + // case, the dynamic hash table will contain all the class information we + // need; the situation we're trying to detect is one where we aren't + // seeing class information from the runtime - in order to detect that + // vs. just the shared cache being empty or sparsely populated, we set an + // arbitrary (very low) threshold for the number of classes that we want + // to see in a "good" scenario - anything below that is suspicious + // (Foundation alone has thousands of classes) const uint32_t num_classes_to_warn_at = 500; DescriptorMapUpdateResult shared_cache_update_result = @@ -2089,8 +2080,8 @@ AppleObjCRuntimeV2::TaggedPointerVendorV2::CreateInstance( if (error.Fail()) return new TaggedPointerVendorLegacy(runtime); - // try to detect the "extended tagged pointer" variables - if any are missing, - // use the non-extended vendor + // try to detect the "extended tagged pointer" variables - if any are + // missing, use the non-extended vendor do { auto objc_debug_taggedpointer_ext_mask = ExtractRuntimeGlobalSymbol( process, ConstString("objc_debug_taggedpointer_ext_mask"), @@ -2143,8 +2134,8 @@ AppleObjCRuntimeV2::TaggedPointerVendorV2::CreateInstance( objc_debug_taggedpointer_classes, objc_debug_taggedpointer_ext_classes); } while (false); - // we might want to have some rules to outlaw these values (e.g if the table's - // address is zero) + // we might want to have some rules to outlaw these values (e.g if the + // table's address is zero) return new TaggedPointerVendorRuntimeAssisted( runtime, objc_debug_taggedpointer_mask, @@ -2414,11 +2405,10 @@ bool AppleObjCRuntimeV2::NonPointerISACache::EvaluateNonPointerISA( if ((isa & ~m_objc_debug_isa_class_mask) == 0) return false; - // If all of the indexed ISA variables are set, then its possible that - // this ISA is indexed, and we should first try to get its value using - // the index. - // Note, we check these varaibles first as the ObjC runtime will set at - // least one of their values to 0 if they aren't needed. + // If all of the indexed ISA variables are set, then its possible that this + // ISA is indexed, and we should first try to get its value using the index. + // Note, we check these varaibles first as the ObjC runtime will set at least + // one of their values to 0 if they aren't needed. if (m_objc_debug_indexed_isa_magic_mask && m_objc_debug_indexed_isa_magic_value && m_objc_debug_indexed_isa_index_mask && @@ -2431,10 +2421,10 @@ bool AppleObjCRuntimeV2::NonPointerISACache::EvaluateNonPointerISA( // Magic bits are correct, so try extract the index. uintptr_t index = (isa & m_objc_debug_indexed_isa_index_mask) >> m_objc_debug_indexed_isa_index_shift; - // If the index is out of bounds of the length of the array then - // check if the array has been updated. If that is the case then - // we should try read the count again, and update the cache if the - // count has been updated. + // If the index is out of bounds of the length of the array then check if + // the array has been updated. If that is the case then we should try + // read the count again, and update the cache if the count has been + // updated. if (index > m_indexed_isa_cache.size()) { if (log) log->Printf("AOCRT::NPI (index = %" PRIu64 @@ -2459,9 +2449,9 @@ bool AppleObjCRuntimeV2::NonPointerISACache::EvaluateNonPointerISA( (uint64_t)objc_indexed_classes_count); if (objc_indexed_classes_count > m_indexed_isa_cache.size()) { - // Read the class entries we don't have. We should just - // read all of them instead of just the one we need as then - // we can cache those we may need later. + // Read the class entries we don't have. We should just read all of + // them instead of just the one we need as then we can cache those we + // may need later. auto num_new_classes = objc_indexed_classes_count - m_indexed_isa_cache.size(); const uint32_t addr_size = process->GetAddressByteSize(); @@ -2504,8 +2494,8 @@ bool AppleObjCRuntimeV2::NonPointerISACache::EvaluateNonPointerISA( return false; } - // Definately not an indexed ISA, so try to use a mask to extract - // the pointer from the ISA. + // Definately not an indexed ISA, so try to use a mask to extract the pointer + // from the ISA. if ((isa & m_objc_debug_isa_magic_mask) == m_objc_debug_isa_magic_value) { ret_isa = isa & m_objc_debug_isa_class_mask; return (ret_isa != 0); // this is a pointer so 0 is not a valid value diff --git a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTrampolineHandler.cpp b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTrampolineHandler.cpp index a6e9c0c16f1..c75fa71ba13 100644 --- a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTrampolineHandler.cpp +++ b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTrampolineHandler.cpp @@ -49,227 +49,237 @@ const char *AppleObjCTrampolineHandler::g_lookup_implementation_function_name = const char *AppleObjCTrampolineHandler:: g_lookup_implementation_with_stret_function_code = " \n\ -extern \"C\" \n\ -{ \n\ - extern void *class_getMethodImplementation(void *objc_class, void *sel); \n\ - extern void *class_getMethodImplementation_stret(void *objc_class, void *sel); \n\ - extern void * object_getClass (id object); \n\ - extern void * sel_getUid(char *name); \n\ - extern int printf(const char *format, ...); \n\ -} \n\ -extern \"C\" void * __lldb_objc_find_implementation_for_selector (void *object, \n\ - void *sel, \n\ - int is_stret, \n\ - int is_super, \n\ - int is_super2, \n\ - int is_fixup, \n\ - int is_fixed, \n\ - int debug) \n\ -{ \n\ - struct __lldb_imp_return_struct \n\ - { \n\ - void *class_addr; \n\ - void *sel_addr; \n\ - void *impl_addr; \n\ - }; \n\ - \n\ - struct __lldb_objc_class { \n\ - void *isa; \n\ - void *super_ptr; \n\ - }; \n\ - struct __lldb_objc_super { \n\ - void *reciever; \n\ - struct __lldb_objc_class *class_ptr; \n\ - }; \n\ - struct __lldb_msg_ref { \n\ - void *dont_know; \n\ - void *sel; \n\ - }; \n\ - \n\ - struct __lldb_imp_return_struct return_struct; \n\ - \n\ - if (debug) \n\ - printf (\"\\n*** Called with obj: 0x%p sel: 0x%p is_stret: %d is_super: %d, \" \n\ - \"is_super2: %d, is_fixup: %d, is_fixed: %d\\n\", \n\ - object, sel, is_stret, is_super, is_super2, is_fixup, is_fixed); \n\ - if (is_super) \n\ - { \n\ - if (is_super2) \n\ - { \n\ - return_struct.class_addr = ((__lldb_objc_super *) object)->class_ptr->super_ptr; \n\ - } \n\ - else \n\ - { \n\ - return_struct.class_addr = ((__lldb_objc_super *) object)->class_ptr; \n\ - } \n\ - } \n\ - else \n\ - { \n\ - // This code seems a little funny, but has its reasons... \n\ - // The call to [object class] is here because if this is a class, and has not been called into \n\ - // yet, we need to do something to force the class to initialize itself. \n\ - // Then the call to object_getClass will actually return the correct class, either the class \n\ - // if object is a class instance, or the meta-class if it is a class pointer. \n\ - void *class_ptr = (void *) [(id) object class]; \n\ - return_struct.class_addr = (id) object_getClass((id) object); \n\ - if (debug) \n\ - { \n\ - if (class_ptr == object) \n\ - { \n\ - printf (\"Found a class object, need to use the meta class %p -> %p\\n\", \n\ - class_ptr, return_struct.class_addr); \n\ - } \n\ - else \n\ - { \n\ - printf (\"[object class] returned: %p object_getClass: %p.\\n\", \n\ - class_ptr, return_struct.class_addr); \n\ - } \n\ - } \n\ - } \n\ - \n\ - if (is_fixup) \n\ - { \n\ - if (is_fixed) \n\ - { \n\ - return_struct.sel_addr = ((__lldb_msg_ref *) sel)->sel; \n\ - } \n\ - else \n\ - { \n\ - char *sel_name = (char *) ((__lldb_msg_ref *) sel)->sel; \n\ - return_struct.sel_addr = sel_getUid (sel_name); \n\ - if (debug) \n\ - printf (\"\\n*** Got fixed up selector: %p for name %s.\\n\", \n\ - return_struct.sel_addr, sel_name); \n\ - } \n\ - } \n\ - else \n\ - { \n\ - return_struct.sel_addr = sel; \n\ - } \n\ - \n\ - if (is_stret) \n\ - { \n\ - return_struct.impl_addr = class_getMethodImplementation_stret (return_struct.class_addr, \n\ - return_struct.sel_addr); \n\ - } \n\ - else \n\ - { \n\ - return_struct.impl_addr = class_getMethodImplementation (return_struct.class_addr, \n\ - return_struct.sel_addr); \n\ - } \n\ - if (debug) \n\ - printf (\"\\n*** Returning implementation: %p.\\n\", return_struct.impl_addr); \n\ - \n\ - return return_struct.impl_addr; \n\ -} \n\ +extern \"C\" \n\ +{ \n\ + extern void *class_getMethodImplementation(void *objc_class, void *sel); \n\ + extern void *class_getMethodImplementation_stret(void *objc_class, \n\ + void *sel); \n\ + extern void * object_getClass (id object); \n\ + extern void * sel_getUid(char *name); \n\ + extern int printf(const char *format, ...); \n\ +} \n\ +extern \"C\" void * __lldb_objc_find_implementation_for_selector ( \n\ + void *object, \n\ + void *sel, \n\ + int is_stret, \n\ + int is_super, \n\ + int is_super2, \n\ + int is_fixup, \n\ + int is_fixed, \n\ + int debug) \n\ +{ \n\ + struct __lldb_imp_return_struct \n\ + { \n\ + void *class_addr; \n\ + void *sel_addr; \n\ + void *impl_addr; \n\ + }; \n\ + \n\ + struct __lldb_objc_class { \n\ + void *isa; \n\ + void *super_ptr; \n\ + }; \n\ + struct __lldb_objc_super { \n\ + void *reciever; \n\ + struct __lldb_objc_class *class_ptr; \n\ + }; \n\ + struct __lldb_msg_ref { \n\ + void *dont_know; \n\ + void *sel; \n\ + }; \n\ + \n\ + struct __lldb_imp_return_struct return_struct; \n\ + \n\ + if (debug) \n\ + printf (\"\\n*** Called with obj: 0x%p sel: 0x%p is_stret: %d is_super: %d, \"\n\ + \"is_super2: %d, is_fixup: %d, is_fixed: %d\\n\", \n\ + object, sel, is_stret, is_super, is_super2, is_fixup, is_fixed);\n\ + if (is_super) \n\ + { \n\ + if (is_super2) \n\ + { \n\ + return_struct.class_addr = ((__lldb_objc_super *) object)->class_ptr->super_ptr;\n\ + } \n\ + else \n\ + { \n\ + return_struct.class_addr = ((__lldb_objc_super *) object)->class_ptr;\n\ + } \n\ + } \n\ + else \n\ + { \n\ + // This code seems a little funny, but has its reasons... \n\ + \n\ + // The call to [object class] is here because if this is a \n\ + // class, and has not been called into yet, we need to do \n\ + // something to force the class to initialize itself. \n\ + // Then the call to object_getClass will actually return the \n\ + // correct class, either the class if object is a class \n\ + // instance, or the meta-class if it is a class pointer. \n\ + void *class_ptr = (void *) [(id) object class]; \n\ + return_struct.class_addr = (id) object_getClass((id) object); \n\ + if (debug) \n\ + { \n\ + if (class_ptr == object) \n\ + { \n\ + printf (\"Found a class object, need to use the meta class %p -> %p\\n\",\n\ + class_ptr, return_struct.class_addr); \n\ + } \n\ + else \n\ + { \n\ + printf (\"[object class] returned: %p object_getClass: %p.\\n\", \n\ + class_ptr, return_struct.class_addr); \n\ + } \n\ + } \n\ + } \n\ + \n\ + if (is_fixup) \n\ + { \n\ + if (is_fixed) \n\ + { \n\ + return_struct.sel_addr = ((__lldb_msg_ref *) sel)->sel; \n\ + } \n\ + else \n\ + { \n\ + char *sel_name = (char *) ((__lldb_msg_ref *) sel)->sel; \n\ + return_struct.sel_addr = sel_getUid (sel_name); \n\ + if (debug) \n\ + printf (\"\\n*** Got fixed up selector: %p for name %s.\\n\",\n\ + return_struct.sel_addr, sel_name); \n\ + } \n\ + } \n\ + else \n\ + { \n\ + return_struct.sel_addr = sel; \n\ + } \n\ + \n\ + if (is_stret) \n\ + { \n\ + return_struct.impl_addr = \n\ + class_getMethodImplementation_stret (return_struct.class_addr, \n\ + return_struct.sel_addr); \n\ + } \n\ + else \n\ + { \n\ + return_struct.impl_addr = \n\ + class_getMethodImplementation (return_struct.class_addr, \n\ + return_struct.sel_addr); \n\ + } \n\ + if (debug) \n\ + printf (\"\\n*** Returning implementation: %p.\\n\", \n\ + return_struct.impl_addr); \n\ + \n\ + return return_struct.impl_addr; \n\ +} \n\ "; const char * AppleObjCTrampolineHandler::g_lookup_implementation_no_stret_function_code = " \n\ -extern \"C\" \n\ -{ \n\ - extern void *class_getMethodImplementation(void *objc_class, void *sel); \n\ - extern void * object_getClass (id object); \n\ - extern void * sel_getUid(char *name); \n\ - extern int printf(const char *format, ...); \n\ -} \n\ +extern \"C\" \n\ +{ \n\ + extern void *class_getMethodImplementation(void *objc_class, void *sel); \n\ + extern void * object_getClass (id object); \n\ + extern void * sel_getUid(char *name); \n\ + extern int printf(const char *format, ...); \n\ +} \n\ extern \"C\" void * __lldb_objc_find_implementation_for_selector (void *object, \n\ - void *sel, \n\ - int is_stret, \n\ - int is_super, \n\ - int is_super2, \n\ - int is_fixup, \n\ - int is_fixed, \n\ - int debug) \n\ -{ \n\ - struct __lldb_imp_return_struct \n\ - { \n\ - void *class_addr; \n\ - void *sel_addr; \n\ - void *impl_addr; \n\ - }; \n\ - \n\ - struct __lldb_objc_class { \n\ - void *isa; \n\ - void *super_ptr; \n\ - }; \n\ - struct __lldb_objc_super { \n\ - void *reciever; \n\ - struct __lldb_objc_class *class_ptr; \n\ - }; \n\ - struct __lldb_msg_ref { \n\ - void *dont_know; \n\ - void *sel; \n\ - }; \n\ - \n\ - struct __lldb_imp_return_struct return_struct; \n\ - \n\ - if (debug) \n\ + void *sel, \n\ + int is_stret, \n\ + int is_super, \n\ + int is_super2, \n\ + int is_fixup, \n\ + int is_fixed, \n\ + int debug) \n\ +{ \n\ + struct __lldb_imp_return_struct \n\ + { \n\ + void *class_addr; \n\ + void *sel_addr; \n\ + void *impl_addr; \n\ + }; \n\ + \n\ + struct __lldb_objc_class { \n\ + void *isa; \n\ + void *super_ptr; \n\ + }; \n\ + struct __lldb_objc_super { \n\ + void *reciever; \n\ + struct __lldb_objc_class *class_ptr; \n\ + }; \n\ + struct __lldb_msg_ref { \n\ + void *dont_know; \n\ + void *sel; \n\ + }; \n\ + \n\ + struct __lldb_imp_return_struct return_struct; \n\ + \n\ + if (debug) \n\ printf (\"\\n*** Called with obj: 0x%p sel: 0x%p is_stret: %d is_super: %d, \" \n\ - \"is_super2: %d, is_fixup: %d, is_fixed: %d\\n\", \n\ + \"is_super2: %d, is_fixup: %d, is_fixed: %d\\n\", \n\ object, sel, is_stret, is_super, is_super2, is_fixup, is_fixed); \n\ - if (is_super) \n\ - { \n\ - if (is_super2) \n\ - { \n\ + if (is_super) \n\ + { \n\ + if (is_super2) \n\ + { \n\ return_struct.class_addr = ((__lldb_objc_super *) object)->class_ptr->super_ptr; \n\ - } \n\ - else \n\ - { \n\ + } \n\ + else \n\ + { \n\ return_struct.class_addr = ((__lldb_objc_super *) object)->class_ptr; \n\ - } \n\ - } \n\ - else \n\ - { \n\ - // This code seems a little funny, but has its reasons... \n\ + } \n\ + } \n\ + else \n\ + { \n\ + // This code seems a little funny, but has its reasons... \n\ // The call to [object class] is here because if this is a class, and has not been called into \n\ // yet, we need to do something to force the class to initialize itself. \n\ // Then the call to object_getClass will actually return the correct class, either the class \n\ // if object is a class instance, or the meta-class if it is a class pointer. \n\ - void *class_ptr = (void *) [(id) object class]; \n\ - return_struct.class_addr = (id) object_getClass((id) object); \n\ - if (debug) \n\ - { \n\ - if (class_ptr == object) \n\ - { \n\ + void *class_ptr = (void *) [(id) object class]; \n\ + return_struct.class_addr = (id) object_getClass((id) object); \n\ + if (debug) \n\ + { \n\ + if (class_ptr == object) \n\ + { \n\ printf (\"Found a class object, need to return the meta class %p -> %p\\n\", \n\ - class_ptr, return_struct.class_addr); \n\ - } \n\ - else \n\ - { \n\ + class_ptr, return_struct.class_addr); \n\ + } \n\ + else \n\ + { \n\ printf (\"[object class] returned: %p object_getClass: %p.\\n\", \n\ - class_ptr, return_struct.class_addr); \n\ - } \n\ - } \n\ - } \n\ - \n\ - if (is_fixup) \n\ - { \n\ - if (is_fixed) \n\ - { \n\ - return_struct.sel_addr = ((__lldb_msg_ref *) sel)->sel; \n\ - } \n\ - else \n\ - { \n\ - char *sel_name = (char *) ((__lldb_msg_ref *) sel)->sel; \n\ - return_struct.sel_addr = sel_getUid (sel_name); \n\ - if (debug) \n\ - printf (\"\\n*** Got fixed up selector: %p for name %s.\\n\", \n\ - return_struct.sel_addr, sel_name); \n\ - } \n\ - } \n\ - else \n\ - { \n\ - return_struct.sel_addr = sel; \n\ - } \n\ - \n\ - return_struct.impl_addr = class_getMethodImplementation (return_struct.class_addr, \n\ - return_struct.sel_addr); \n\ - if (debug) \n\ - printf (\"\\n*** Returning implementation: 0x%p.\\n\", return_struct.impl_addr); \n\ - \n\ - return return_struct.impl_addr; \n\ -} \n\ + class_ptr, return_struct.class_addr); \n\ + } \n\ + } \n\ + } \n\ + \n\ + if (is_fixup) \n\ + { \n\ + if (is_fixed) \n\ + { \n\ + return_struct.sel_addr = ((__lldb_msg_ref *) sel)->sel; \n\ + } \n\ + else \n\ + { \n\ + char *sel_name = (char *) ((__lldb_msg_ref *) sel)->sel; \n\ + return_struct.sel_addr = sel_getUid (sel_name); \n\ + if (debug) \n\ + printf (\"\\n*** Got fixed up selector: %p for name %s.\\n\",\n\ + return_struct.sel_addr, sel_name); \n\ + } \n\ + } \n\ + else \n\ + { \n\ + return_struct.sel_addr = sel; \n\ + } \n\ + \n\ + return_struct.impl_addr = \n\ + class_getMethodImplementation (return_struct.class_addr, \n\ + return_struct.sel_addr); \n\ + if (debug) \n\ + printf (\"\\n*** Returning implementation: 0x%p.\\n\", \n\ + return_struct.impl_addr); \n\ + \n\ + return return_struct.impl_addr; \n\ +} \n\ "; AppleObjCTrampolineHandler::AppleObjCVTables::VTableRegion::VTableRegion( @@ -328,12 +338,11 @@ void AppleObjCTrampolineHandler::AppleObjCVTables::VTableRegion::SetUpRegion() { // uint32_t offset // uint32_t flags // - // Where offset is either 0 - in which case it is unused, or - // it is the offset of the vtable code from the beginning of the descriptor - // record. - // Below, we'll convert that into an absolute code address, since I don't want - // to have - // to compute it over and over. + // Where offset is either 0 - in which case it is unused, or it is + // the offset of the vtable code from the beginning of the + // descriptor record. Below, we'll convert that into an absolute + // code address, since I don't want to have to compute it over and + // over. // Ingest the whole descriptor array: const lldb::addr_t desc_ptr = m_header_addr + header_size; @@ -370,10 +379,9 @@ void AppleObjCTrampolineHandler::AppleObjCVTables::VTableRegion::SetUpRegion() { offset = start_offset + descriptor_size; } - // Finally, a little bird told me that all the vtable code blocks are the same - // size. - // Let's compute the blocks and if they are all the same add the size to the - // code end address: + // Finally, a little bird told me that all the vtable code blocks + // are the same size. Let's compute the blocks and if they are all + // the same add the size to the code end address: lldb::addr_t code_size = 0; bool all_the_same = true; for (size_t i = 0; i < num_descriptors - 1; i++) { @@ -548,9 +556,8 @@ bool AppleObjCTrampolineHandler::AppleObjCVTables::RefreshTrampolines( } bool AppleObjCTrampolineHandler::AppleObjCVTables::ReadRegions() { - // The no argument version reads the start region from the value of the - // gdb_regions_header, and - // gets started from there. + // The no argument version reads the start region from the value of + // the gdb_regions_header, and gets started from there. m_regions.clear(); if (!InitializeVTableSymbols()) @@ -718,13 +725,12 @@ AppleObjCTrampolineHandler::AppleObjCTrampolineHandler( g_lookup_implementation_with_stret_function_code; } - // Look up the addresses for the objc dispatch functions and cache them. For - // now I'm inspecting the symbol - // names dynamically to figure out how to dispatch to them. If it becomes - // more complicated than this we can - // turn the g_dispatch_functions char * array into a template table, and - // populate the DispatchFunction map - // from there. + // Look up the addresses for the objc dispatch functions and cache + // them. For now I'm inspecting the symbol names dynamically to + // figure out how to dispatch to them. If it becomes more + // complicated than this we can turn the g_dispatch_functions char * + // array into a template table, and populate the DispatchFunction + // map from there. for (size_t i = 0; i != llvm::array_lengthof(g_dispatch_functions); i++) { ConstString name_const_str(g_dispatch_functions[i].name); @@ -732,11 +738,11 @@ AppleObjCTrampolineHandler::AppleObjCTrampolineHandler( m_objc_module_sp->FindFirstSymbolWithNameAndType(name_const_str, eSymbolTypeCode); if (msgSend_symbol && msgSend_symbol->ValueIsAddress()) { - // FixMe: Make g_dispatch_functions static table of DispatchFunctions, and - // have the map be address->index. - // Problem is we also need to lookup the dispatch function. For now we - // could have a side table of stret & non-stret - // dispatch functions. If that's as complex as it gets, we're fine. + // FIXME: Make g_dispatch_functions static table of + // DispatchFunctions, and have the map be address->index. + // Problem is we also need to lookup the dispatch function. For + // now we could have a side table of stret & non-stret dispatch + // functions. If that's as complex as it gets, we're fine. lldb::addr_t sym_addr = msgSend_symbol->GetAddressRef().GetOpcodeLoadAddress(target); @@ -820,11 +826,11 @@ AppleObjCTrampolineHandler::SetupDispatchFunction(Thread &thread, diagnostics.Clear(); - // Now write down the argument values for this particular call. This looks - // like it might be a race condition - // if other threads were calling into here, but actually it isn't because we - // allocate a new args structure for - // this call by passing args_addr = LLDB_INVALID_ADDRESS... + // Now write down the argument values for this particular call. + // This looks like it might be a race condition if other threads + // were calling into here, but actually it isn't because we allocate + // a new args structure for this call by passing args_addr = + // LLDB_INVALID_ADDRESS... if (!impl_function_caller->WriteFunctionArguments( exe_ctx, args_addr, dispatch_values, diagnostics)) { @@ -847,9 +853,9 @@ AppleObjCTrampolineHandler::GetStepThroughDispatchPlan(Thread &thread, DispatchFunction this_dispatch; bool found_it = false; - // First step is to look and see if we are in one of the known ObjC dispatch - // functions. We've already compiled - // a table of same, so consult it. + // First step is to look and see if we are in one of the known ObjC + // dispatch functions. We've already compiled a table of same, so + // consult it. MsgsendMap::iterator pos; pos = m_msgSend_map.find(curr_pc); @@ -879,8 +885,8 @@ AppleObjCTrampolineHandler::GetStepThroughDispatchPlan(Thread &thread, if (found_it) { Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_STEP)); - // We are decoding a method dispatch. - // First job is to pull the arguments out: + // We are decoding a method dispatch. First job is to pull the + // arguments out: lldb::StackFrameSP thread_cur_frame = thread.GetStackFrameAtIndex(0); @@ -906,10 +912,10 @@ AppleObjCTrampolineHandler::GetStepThroughDispatchPlan(Thread &thread, int obj_index; int sel_index; - // If this is a struct return dispatch, then the first argument is the - // return struct pointer, and the object is the second, and the selector is - // the third. - // Otherwise the object is the first and the selector the second. + // If this is a struct return dispatch, then the first argument is + // the return struct pointer, and the object is the second, and + // the selector is the third. Otherwise the object is the first + // and the selector the second. if (this_dispatch.stret_return) { obj_index = 1; sel_index = 2; @@ -938,29 +944,26 @@ AppleObjCTrampolineHandler::GetStepThroughDispatchPlan(Thread &thread, ExecutionContext exe_ctx(thread.shared_from_this()); Process *process = exe_ctx.GetProcessPtr(); - // isa_addr will store the class pointer that the method is being dispatched - // to - so either the class - // directly or the super class if this is one of the objc_msgSendSuper - // flavors. That's mostly used to - // look up the class/selector pair in our cache. + // isa_addr will store the class pointer that the method is being + // dispatched to - so either the class directly or the super class + // if this is one of the objc_msgSendSuper flavors. That's mostly + // used to look up the class/selector pair in our cache. lldb::addr_t isa_addr = LLDB_INVALID_ADDRESS; lldb::addr_t sel_addr = argument_values.GetValueAtIndex(sel_index)->GetScalar().ULongLong(); - // Figure out the class this is being dispatched to and see if we've already - // cached this method call, - // If so we can push a run-to-address plan directly. Otherwise we have to - // figure out where - // the implementation lives. + // Figure out the class this is being dispatched to and see if + // we've already cached this method call, If so we can push a + // run-to-address plan directly. Otherwise we have to figure out + // where the implementation lives. if (this_dispatch.is_super) { if (this_dispatch.is_super2) { - // In the objc_msgSendSuper2 case, we don't get the object directly, we - // get a structure containing - // the object and the class to which the super message is being sent. - // So we need to dig the super - // out of the class and use that. + // In the objc_msgSendSuper2 case, we don't get the object + // directly, we get a structure containing the object and the + // class to which the super message is being sent. So we need + // to dig the super out of the class and use that. Value super_value(*(argument_values.GetValueAtIndex(obj_index))); super_value.GetScalar() += process->GetAddressByteSize(); @@ -984,11 +987,11 @@ AppleObjCTrampolineHandler::GetStepThroughDispatchPlan(Thread &thread, log->Printf("Failed to extract the class value from objc_super."); } } else { - // In the objc_msgSendSuper case, we don't get the object directly, we - // get a two element structure containing - // the object and the super class to which the super message is being - // sent. So the class we want is - // the second element of this structure. + // In the objc_msgSendSuper case, we don't get the object + // directly, we get a two element structure containing the + // object and the super class to which the super message is + // being sent. So the class we want is the second element of + // this structure. Value super_value(*(argument_values.GetValueAtIndex(obj_index))); super_value.GetScalar() += process->GetAddressByteSize(); @@ -1009,9 +1012,9 @@ AppleObjCTrampolineHandler::GetStepThroughDispatchPlan(Thread &thread, // making the object value a load address value and resolving it will get // the pointer sized data pointed to by that value... - // Note, it isn't a fatal error not to be able to get the address from the - // object, since this might - // be a "tagged pointer" which isn't a real object, but rather some word + // Note, it isn't a fatal error not to be able to get the + // address from the object, since this might be a "tagged + // pointer" which isn't a real object, but rather some word // length encoded dingus. Value isa_value(*(argument_values.GetValueAtIndex(obj_index))); @@ -1126,9 +1129,9 @@ AppleObjCTrampolineHandler::GetStepThroughDispatchPlan(Thread &thread, flag_value.GetScalar() = 0; // FIXME - Set to 0 when debugging is done. dispatch_values.PushValue(flag_value); - // The step through code might have to fill in the cache, so it is not - // safe to run only one thread. - // So we override the stop_others value passed in to us here: + // The step through code might have to fill in the cache, so it + // is not safe to run only one thread. So we override the + // stop_others value passed in to us here: const bool trampoline_stop_others = false; ret_plan_sp.reset(new AppleThreadPlanStepThroughObjCTrampoline( thread, this, dispatch_values, isa_addr, sel_addr, diff --git a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTypeEncodingParser.cpp b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTypeEncodingParser.cpp index 316115b0dcb..9bb1a4e0ee4 100644 --- a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTypeEncodingParser.cpp +++ b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTypeEncodingParser.cpp @@ -105,10 +105,9 @@ clang::QualType AppleObjCTypeEncodingParser::BuildAggregate( return clang::QualType(); std::string name(ReadStructName(type)); - // We do not handle templated classes/structs at the moment. - // If the name has a < in it, we are going to abandon this. - // We're still obliged to parse it, so we just set a flag that - // means "Don't actually build anything." + // We do not handle templated classes/structs at the moment. If the name has + // a < in it, we are going to abandon this. We're still obliged to parse it, + // so we just set a flag that means "Don't actually build anything." const bool is_templated = name.find('<') != std::string::npos; @@ -180,11 +179,9 @@ AppleObjCTypeEncodingParser::BuildArray(clang::ASTContext &ast_ctx, // the runtime can emit these in the form of @"SomeType", giving more specifics // this would be interesting for expression parser interop, but since we -// actually try -// to avoid exposing the ivar info to the expression evaluator, consume but -// ignore the type info -// and always return an 'id'; if anything, dynamic typing will resolve things -// for us anyway +// actually try to avoid exposing the ivar info to the expression evaluator, +// consume but ignore the type info and always return an 'id'; if anything, +// dynamic typing will resolve things for us anyway clang::QualType AppleObjCTypeEncodingParser::BuildObjCObjectPointerType( clang::ASTContext &ast_ctx, lldb_utility::StringLexer &type, bool for_expression) { @@ -197,24 +194,21 @@ clang::QualType AppleObjCTypeEncodingParser::BuildObjCObjectPointerType( // We have to be careful here. We're used to seeing // @"NSString" // but in records it is possible that the string following an @ is the name - // of the next field and @ means "id". - // This is the case if anything unquoted except for "}", the end of the - // type, or another name follows the quoted string. + // of the next field and @ means "id". This is the case if anything + // unquoted except for "}", the end of the type, or another name follows + // the quoted string. // // E.g. // - @"NSString"@ means "id, followed by a field named NSString of type id" - // - @"NSString"} means "a pointer to NSString and the end of the struct" - // - @"NSString""nextField" means "a pointer to NSString and a field named - // nextField" - // - @"NSString" followed by the end of the string means "a pointer to - // NSString" + // - @"NSString"} means "a pointer to NSString and the end of the struct" - + // @"NSString""nextField" means "a pointer to NSString and a field named + // nextField" - @"NSString" followed by the end of the string means "a + // pointer to NSString" // // As a result, the rule is: If we see @ followed by a quoted string, we - // peek. - // - If we see }, ), ], the end of the string, or a quote ("), the quoted - // string is a class name. - // - If we see anything else, the quoted string is a field name and we push - // it back onto type. + // peek. - If we see }, ), ], the end of the string, or a quote ("), the + // quoted string is a class name. - If we see anything else, the quoted + // string is a field name and we push it back onto type. name = ReadQuotedString(type); @@ -260,9 +254,8 @@ clang::QualType AppleObjCTypeEncodingParser::BuildObjCObjectPointerType( decl_vendor->FindDecls(ConstString(name), append, max_matches, decls); // The user can forward-declare something that has no definition. The runtime -// doesn't prohibit this at all. -// This is a rare and very weird case. We keep this assert in debug builds so -// we catch other weird cases. +// doesn't prohibit this at all. This is a rare and very weird case. We keep +// this assert in debug builds so we catch other weird cases. #ifdef LLDB_CONFIGURATION_DEBUG assert(num_types); #else @@ -315,8 +308,8 @@ AppleObjCTypeEncodingParser::BuildType(clang::ASTContext &ast_ctx, // if (!lldb_ctx) // return clang::QualType(); // return lldb_ctx->GetIntTypeFromBitSize(32, true).GetQualType(); - // which uses one of the constants if one is available, but we don't think all - // this work is necessary. + // which uses one of the constants if one is available, but we don't think + // all this work is necessary. case 'q': return ast_ctx.LongLongTy; case 'C': @@ -364,11 +357,10 @@ AppleObjCTypeEncodingParser::BuildType(clang::ASTContext &ast_ctx, case '^': { if (!for_expression && type.NextIf('?')) { // if we are not supporting the concept of unknownAny, but what is being - // created here is an unknownAny*, then - // we can just get away with a void* + // created here is an unknownAny*, then we can just get away with a void* // this is theoretically wrong (in the same sense as 'theoretically - // nothing exists') but is way better than outright failure - // in many practical cases + // nothing exists') but is way better than outright failure in many + // practical cases return ast_ctx.VoidPtrTy; } else { clang::QualType target_type = BuildType(ast_ctx, type, for_expression); diff --git a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleThreadPlanStepThroughObjCTrampoline.cpp b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleThreadPlanStepThroughObjCTrampoline.cpp index a295d1b4ce7..75b67073942 100644 --- a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleThreadPlanStepThroughObjCTrampoline.cpp +++ b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleThreadPlanStepThroughObjCTrampoline.cpp @@ -52,8 +52,8 @@ AppleThreadPlanStepThroughObjCTrampoline:: void AppleThreadPlanStepThroughObjCTrampoline::DidPush() { // Setting up the memory space for the called function text might require - // allocations, - // i.e. a nested function call. This needs to be done as a PreResumeAction. + // allocations, i.e. a nested function call. This needs to be done as a + // PreResumeAction. m_thread.GetProcess()->AddPreResumeAction(PreResumeInitializeFunctionCaller, (void *)this); } @@ -110,8 +110,7 @@ bool AppleThreadPlanStepThroughObjCTrampoline::DoPlanExplainsStop( Event *event_ptr) { // If we get asked to explain the stop it will be because something went // wrong (like the implementation for selector function crashed... We're - // going - // to figure out what to do about that, so we do explain the stop. + // going to figure out what to do about that, so we do explain the stop. return true; } @@ -135,8 +134,7 @@ bool AppleThreadPlanStepThroughObjCTrampoline::ShouldStop(Event *event_ptr) { } // Second stage, if all went well with the function calling, then fetch the - // target address, and - // queue up a "run to that address" plan. + // target address, and queue up a "run to that address" plan. if (!m_run_to_sp) { Value target_addr_value; ExecutionContext exc_ctx; @@ -201,8 +199,8 @@ bool AppleThreadPlanStepThroughObjCTrampoline::ShouldStop(Event *event_ptr) { return false; } -// The base class MischiefManaged does some cleanup - so you have to call it -// in your MischiefManaged derived class. +// The base class MischiefManaged does some cleanup - so you have to call it in +// your MischiefManaged derived class. bool AppleThreadPlanStepThroughObjCTrampoline::MischiefManaged() { if (IsPlanComplete()) return true; diff --git a/lldb/source/Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime/RenderScriptExpressionOpts.cpp b/lldb/source/Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime/RenderScriptExpressionOpts.cpp index 654ac9abfca..cbbc35f1c08 100644 --- a/lldb/source/Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime/RenderScriptExpressionOpts.cpp +++ b/lldb/source/Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime/RenderScriptExpressionOpts.cpp @@ -38,14 +38,12 @@ using namespace lldb_renderscript; // [``slang``](https://android.googlesource.com/platform/frameworks/compile/slang), // the compiler frontend for RenderScript embeds an ARM specific triple in IR -// that is shipped in the app, after -// generating IR that has some assumptions that an ARM device is the target. -// As the IR is then compiled on a device of unknown (at time the IR was -// generated at least) architecture, -// when calling RenderScript API function as part of debugger expressions, we -// have to perform a fixup pass that -// removes those assumptions right before the module is sent to be generated by -// the llvm backend. +// that is shipped in the app, after generating IR that has some assumptions +// that an ARM device is the target. As the IR is then compiled on a device of +// unknown (at time the IR was generated at least) architecture, when calling +// RenderScript API function as part of debugger expressions, we have to +// perform a fixup pass that removes those assumptions right before the module +// is sent to be generated by the llvm backend. namespace { bool registerRSDefaultTargetOpts(clang::TargetOptions &proto, @@ -107,10 +105,9 @@ bool RenderScriptRuntimeModulePass::runOnModule(llvm::Module &module) { case llvm::Triple::ArchType::x86: changed_module |= fixupX86FunctionCalls(module); // For some reason this triple gets totally missed by the backend, and must - // be set manually. - // There a reference in bcc/Main.cpp about auto feature-detection being - // removed from LLVM3.5, but I can't - // see that discussion anywhere public. + // be set manually. There a reference in bcc/Main.cpp about auto feature- + // detection being removed from LLVM3.5, but I can't see that discussion + // anywhere public. real_triple = "i686--linux-android"; break; case llvm::Triple::ArchType::x86_64: @@ -118,12 +115,12 @@ bool RenderScriptRuntimeModulePass::runOnModule(llvm::Module &module) { break; case llvm::Triple::ArchType::mipsel: case llvm::Triple::ArchType::mips64el: - // No actual IR fixup pass is needed on MIPS, but the datalayout - // and targetmachine do need to be explicitly set. + // No actual IR fixup pass is needed on MIPS, but the datalayout and + // targetmachine do need to be explicitly set. - // bcc explicitly compiles MIPS code to use the static relocation - // model due to an issue with relocations in mclinker. - // see libbcc/support/CompilerConfig.cpp for details + // bcc explicitly compiles MIPS code to use the static relocation model due + // to an issue with relocations in mclinker. see + // libbcc/support/CompilerConfig.cpp for details reloc_model = llvm::Reloc::Static; changed_module = true; break; @@ -146,8 +143,7 @@ bool RenderScriptRuntimeModulePass::runOnModule(llvm::Module &module) { assert(target_machine && "failed to identify RenderScriptRuntime target machine"); // We've been using a triple and datalayout of some ARM variant all along, - // so - // we need to let the backend know that this is no longer the case. + // so we need to let the backend know that this is no longer the case. if (log) { log->Printf("%s - Changing RS target triple to '%s'", __FUNCTION__, real_triple.str().c_str()); diff --git a/lldb/source/Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime/RenderScriptRuntime.cpp b/lldb/source/Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime/RenderScriptRuntime.cpp index a9707fae072..4ab1510d2c7 100644 --- a/lldb/source/Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime/RenderScriptRuntime.cpp +++ b/lldb/source/Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime/RenderScriptRuntime.cpp @@ -312,7 +312,8 @@ bool GetArgsMipsel(GetArgsCtx &ctx, ArgItem *arg_list, size_t num_args) { Status err; - // find offset to arguments on the stack (+16 to skip over a0-a3 shadow space) + // find offset to arguments on the stack (+16 to skip over a0-a3 shadow + // space) uint64_t sp = ctx.reg_ctx->GetSP() + 16; for (size_t i = 0; i < num_args; ++i) { @@ -447,12 +448,11 @@ bool IsRenderScriptScriptModule(ModuleSP module) { } bool ParseCoordinate(llvm::StringRef coord_s, RSCoordinate &coord) { - // takes an argument of the form 'num[,num][,num]'. - // Where 'coord_s' is a comma separated 1,2 or 3-dimensional coordinate - // with the whitespace trimmed. - // Missing coordinates are defaulted to zero. - // If parsing of any elements fails the contents of &coord are undefined - // and `false` is returned, `true` otherwise + // takes an argument of the form 'num[,num][,num]'. Where 'coord_s' is a + // comma separated 1,2 or 3-dimensional coordinate with the whitespace + // trimmed. Missing coordinates are defaulted to zero. If parsing of any + // elements fails the contents of &coord are undefined and `false` is + // returned, `true` otherwise RegularExpression regex; RegularExpression::Match regex_match(3); @@ -633,8 +633,9 @@ struct RenderScriptRuntime::AllocationDetails { // subelements, there may be more than one instance of the ElementHeader // struct. With this first instance being the root element, and the other // instances being the root's descendants. To identify which instances are an - // ElementHeader's children, each struct is immediately followed by a sequence - // of consecutive offsets to the start of its child structs. These offsets are + // ElementHeader's children, each struct is immediately followed by a + // sequence of consecutive offsets to the start of its child structs. These + // offsets are // 4 bytes in size, and the 0 offset signifies no more children. struct FileHeader { uint8_t ident[4]; // ASCII 'RSAD' identifying the file @@ -653,8 +654,8 @@ struct RenderScriptRuntime::AllocationDetails { // Monotonically increasing from 1 static uint32_t ID; - // Maps Allocation DataType enum and vector size to printable strings - // using mapping from RenderScript numerical types summary documentation + // Maps Allocation DataType enum and vector size to printable strings using + // mapping from RenderScript numerical types summary documentation static const char *RsDataTypeToString[][4]; // Maps Allocation DataKind enum to printable strings @@ -844,11 +845,10 @@ RSReduceBreakpointResolver::SearchCallback(lldb_private::SearchFilter &filter, lldb_private::SymbolContext &context, Address *, bool) { // We need to have access to the list of reductions currently parsed, as - // reduce names don't actually exist as - // symbols in a module. They are only identifiable by parsing the .rs.info - // packet, or finding the expand symbol. We - // therefore need access to the list of parsed rs modules to properly resolve - // reduction names. + // reduce names don't actually exist as symbols in a module. They are only + // identifiable by parsing the .rs.info packet, or finding the expand symbol. + // We therefore need access to the list of parsed rs modules to properly + // resolve reduction names. Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_BREAKPOINTS)); ModuleSP module = context.module_sp; @@ -967,8 +967,8 @@ Searcher::CallbackReturn RSScriptGroupBreakpointResolver::SearchCallback( log->Printf("%s: Placed %sbreakpoint on %s", __FUNCTION__, new_bp ? "new " : "", k.m_name.AsCString()); - // exit after placing the first breakpoint if we do not intend to stop - // on all kernels making up this script group + // exit after placing the first breakpoint if we do not intend to stop on + // all kernels making up this script group if (!m_stop_on_all) break; } @@ -1684,8 +1684,8 @@ void RenderScriptRuntime::FixupScriptDetails(RSModuleDescriptorSP rsmodule_sp) { const ModuleSP module = rsmodule_sp->m_module; const FileSpec &file = module->GetPlatformFileSpec(); - // Iterate over all of the scripts that we currently know of. - // Note: We cant push or pop to m_scripts here or it may invalidate rs_script. + // Iterate over all of the scripts that we currently know of. Note: We cant + // push or pop to m_scripts here or it may invalidate rs_script. for (const auto &rs_script : m_scripts) { // Extract the expected .so file path for this script. std::string shared_lib; @@ -1825,9 +1825,9 @@ const char *JITTemplate(ExpressionStrings e) { // rsaTypeGetNativeData(Context*, Type*, void* typeData, size) Pack the // data in the following way mHal.state.dimX; mHal.state.dimY; - // mHal.state.dimZ; mHal.state.lodCount; mHal.state.faces; mElement; into - // typeData Need to specify 32 or 64 bit for uint_t since this differs - // between devices + // mHal.state.dimZ; mHal.state.lodCount; mHal.state.faces; mElement; + // into typeData Need to specify 32 or 64 bit for uint_t since this + // differs between devices JIT_TEMPLATE_CONTEXT "uint%" PRIu32 "_t data[6]; (void*)rsaTypeGetNativeData(ctxt" ", 0x%" PRIx64 ", data, 6); data[0]", // eExprTypeDimX @@ -1882,10 +1882,10 @@ const char *JITTemplate(ExpressionStrings e) { } } // end of the anonymous namespace -// JITs the RS runtime for the internal data pointer of an allocation. Is passed -// x,y,z coordinates for the pointer to a specific element. Then sets the -// data_ptr member in Allocation with the result. Returns true on success, false -// otherwise +// JITs the RS runtime for the internal data pointer of an allocation. Is +// passed x,y,z coordinates for the pointer to a specific element. Then sets +// the data_ptr member in Allocation with the result. Returns true on success, +// false otherwise bool RenderScriptRuntime::JITDataPointer(AllocationDetails *alloc, StackFrame *frame_ptr, uint32_t x, uint32_t y, uint32_t z) { @@ -1961,8 +1961,8 @@ bool RenderScriptRuntime::JITTypePointer(AllocationDetails *alloc, } // JITs the RS runtime for information about the dimensions and type of an -// allocation Then sets dimension and element_ptr members in Allocation with the -// result. Returns true on success, false otherwise +// allocation Then sets dimension and element_ptr members in Allocation with +// the result. Returns true on success, false otherwise bool RenderScriptRuntime::JITTypePacked(AllocationDetails *alloc, StackFrame *frame_ptr) { Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_LANGUAGE)); @@ -2245,9 +2245,8 @@ bool RenderScriptRuntime::JITAllocationSize(AllocationDetails *alloc, } // JITs the RS runtime for information about the stride between rows in the -// allocation. This is done to detect padding, since allocated memory is 16-byte -// aligned. -// Returns true on success, false otherwise +// allocation. This is done to detect padding, since allocated memory is +// 16-byte aligned. Returns true on success, false otherwise bool RenderScriptRuntime::JITAllocationStride(AllocationDetails *alloc, StackFrame *frame_ptr) { Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_LANGUAGE)); @@ -2313,9 +2312,8 @@ bool RenderScriptRuntime::RefreshAllocation(AllocationDetails *alloc, } // Function attempts to set the type_name member of the paramaterised Element -// object. -// This string should be the name of the struct type the Element represents. -// We need this string for pretty printing the Element to users. +// object. This string should be the name of the struct type the Element +// represents. We need this string for pretty printing the Element to users. void RenderScriptRuntime::FindStructTypeName(Element &elem, StackFrame *frame_ptr) { Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_LANGUAGE)); @@ -2333,9 +2331,8 @@ void RenderScriptRuntime::FindStructTypeName(Element &elem, RegularExpression(llvm::StringRef(".")), true, UINT32_MAX, var_list); // Iterate over all the global variables looking for one with a matching type - // to the Element. - // We make the assumption a match exists since there needs to be a global - // variable to reflect the struct type back into java host code. + // to the Element. We make the assumption a match exists since there needs to + // be a global variable to reflect the struct type back into java host code. for (uint32_t i = 0; i < var_list.GetSize(); ++i) { const VariableSP var_sp(var_list.GetVariableAtIndex(i)); if (!var_sp) @@ -2347,15 +2344,14 @@ void RenderScriptRuntime::FindStructTypeName(Element &elem, // Find the number of variable fields. // If it has no fields, or more fields than our Element, then it can't be - // the struct we're looking for. - // Don't check for equality since RS can add extra struct members for - // padding. + // the struct we're looking for. Don't check for equality since RS can add + // extra struct members for padding. size_t num_children = valobj_sp->GetNumChildren(); if (num_children > elem.children.size() || num_children == 0) continue; - // Iterate over children looking for members with matching field names. - // If all the field names match, this is likely the struct we want. + // Iterate over children looking for members with matching field names. If + // all the field names match, this is likely the struct we want. // TODO: This could be made more robust by also checking children data // sizes, or array size bool found = true; @@ -2404,8 +2400,8 @@ void RenderScriptRuntime::FindStructTypeName(Element &elem, } // Function sets the datum_size member of Element. Representing the size of a -// single instance including padding. -// Assumes the relevant allocation information has already been jitted. +// single instance including padding. Assumes the relevant allocation +// information has already been jitted. void RenderScriptRuntime::SetElementSize(Element &elem) { Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_LANGUAGE)); const Element::DataType type = *elem.type.get(); @@ -2446,9 +2442,9 @@ void RenderScriptRuntime::SetElementSize(Element &elem) { data_size + padding); } -// Given an allocation, this function copies the allocation contents from device -// into a buffer on the heap. -// Returning a shared pointer to the buffer containing the data. +// Given an allocation, this function copies the allocation contents from +// device into a buffer on the heap. Returning a shared pointer to the buffer +// containing the data. std::shared_ptr<uint8_t> RenderScriptRuntime::GetAllocationData(AllocationDetails *alloc, StackFrame *frame_ptr) { @@ -2496,9 +2492,8 @@ RenderScriptRuntime::GetAllocationData(AllocationDetails *alloc, return buffer; } -// Function copies data from a binary file into an allocation. -// There is a header at the start of the file, FileHeader, before the data -// content itself. +// Function copies data from a binary file into an allocation. There is a +// header at the start of the file, FileHeader, before the data content itself. // Information from this header is used to display warnings to the user about // incompatibilities bool RenderScriptRuntime::LoadAllocation(Stream &strm, const uint32_t alloc_id, @@ -2630,7 +2625,8 @@ bool RenderScriptRuntime::LoadAllocation(Stream &strm, const uint32_t alloc_id, // Calculate size of allocation data in file size_t size = data_sp->GetByteSize() - file_header->hdr_size; - // Check if the target allocation and file both have the same total data size. + // Check if the target allocation and file both have the same total data + // size. const uint32_t alloc_size = *alloc->size.get(); if (alloc_size != size) { strm.Printf("Warning: Mismatched allocation sizes - file 0x%" PRIx64 @@ -2660,15 +2656,15 @@ bool RenderScriptRuntime::LoadAllocation(Stream &strm, const uint32_t alloc_id, // Function takes as parameters a byte buffer, which will eventually be written // to file as the element header, an offset into that buffer, and an Element -// that will be saved into the buffer at the parametrised offset. -// Return value is the new offset after writing the element into the buffer. -// Elements are saved to the file as the ElementHeader struct followed by -// offsets to the structs of all the element's children. +// that will be saved into the buffer at the parametrised offset. Return value +// is the new offset after writing the element into the buffer. Elements are +// saved to the file as the ElementHeader struct followed by offsets to the +// structs of all the element's children. size_t RenderScriptRuntime::PopulateElementHeaders( const std::shared_ptr<uint8_t> header_buffer, size_t offset, const Element &elem) { - // File struct for an element header with all the relevant details copied from - // elem. We assume members are valid already. + // File struct for an element header with all the relevant details copied + // from elem. We assume members are valid already. AllocationDetails::ElementHeader elem_header; elem_header.type = *elem.type.get(); elem_header.kind = *elem.type_kind.get(); @@ -2678,9 +2674,8 @@ size_t RenderScriptRuntime::PopulateElementHeaders( elem.array_size.isValid() ? *elem.array_size.get() : 0; const size_t elem_header_size = sizeof(AllocationDetails::ElementHeader); - // Copy struct into buffer and advance offset - // We assume that header_buffer has been checked for nullptr before this - // method is called + // Copy struct into buffer and advance offset We assume that header_buffer + // has been checked for nullptr before this method is called memcpy(header_buffer.get() + offset, &elem_header, elem_header_size); offset += elem_header_size; @@ -2721,8 +2716,8 @@ size_t RenderScriptRuntime::CalculateElementHeaderSize(const Element &elem) { return size; } -// Function copies allocation contents into a binary file. This file can then be -// loaded later into a different allocation. There is a header, FileHeader, +// Function copies allocation contents into a binary file. This file can then +// be loaded later into a different allocation. There is a header, FileHeader, // before the allocation data containing meta-data. bool RenderScriptRuntime::SaveAllocation(Stream &strm, const uint32_t alloc_id, const char *path, @@ -2852,8 +2847,8 @@ bool RenderScriptRuntime::LoadModule(const lldb::ModuleSP &module_sp) { if (module_sp) { for (const auto &rs_module : m_rsmodules) { if (rs_module->m_module == module_sp) { - // Check if the user has enabled automatically breaking on - // all RS kernels. + // Check if the user has enabled automatically breaking on all RS + // kernels. if (m_breakAllKernels) BreakOnModuleKernels(rs_module); @@ -2975,11 +2970,10 @@ bool RSModuleDescriptor::ParseExportReduceCount(llvm::StringRef *lines, size_t n_lines) { // The list of reduction kernels in the `.rs.info` symbol is of the form // "signature - accumulatordatasize - reduction_name - initializer_name - - // accumulator_name - combiner_name - - // outconverter_name - halter_name" - // Where a function is not explicitly named by the user, or is not generated - // by the compiler, it is named "." so the - // dash separated list should always be 8 items long + // accumulator_name - combiner_name - outconverter_name - halter_name" Where + // a function is not explicitly named by the user, or is not generated by the + // compiler, it is named "." so the dash separated list should always be 8 + // items long Log *log = GetLogIfAllCategoriesSet(LIBLLDB_LOG_LANGUAGE); // Skip the exportReduceCount line ++lines; @@ -3069,8 +3063,7 @@ bool RSModuleDescriptor::ParseExportVarCount(llvm::StringRef *lines, } // The .rs.info symbol in renderscript modules contains a string which needs to -// be parsed. -// The string is basic and is parsed on a line by line basis. +// be parsed. The string is basic and is parsed on a line by line basis. bool RSModuleDescriptor::ParseRSInfo() { assert(m_module); Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_LANGUAGE)); @@ -3137,8 +3130,8 @@ bool RSModuleDescriptor::ParseRSInfo() { const auto handler = rs_info_handler(key); if (handler == -1) continue; - // getAsInteger returns `true` on an error condition - we're only interested - // in numeric fields at the moment + // getAsInteger returns `true` on an error condition - we're only + // interested in numeric fields at the moment uint64_t n_lines; if (val.getAsInteger(10, n_lines)) { LLDB_LOGV(log, "Failed to parse non-numeric '.rs.info' section {0}", @@ -3213,9 +3206,8 @@ void RenderScriptRuntime::DumpContexts(Stream &strm) const { std::map<addr_t, uint64_t> contextReferences; - // Iterate over all of the currently discovered scripts. - // Note: We cant push or pop from m_scripts inside this loop or it may - // invalidate script. + // Iterate over all of the currently discovered scripts. Note: We cant push + // or pop from m_scripts inside this loop or it may invalidate script. for (const auto &script : m_scripts) { if (!script->context.isValid()) continue; @@ -3393,15 +3385,15 @@ bool RenderScriptRuntime::DumpAllocation(Stream &strm, StackFrame *frame_ptr, if ((type == Element::RS_TYPE_NONE) && (alloc->element.children.size() > 0) && (alloc->element.type_name != Element::GetFallbackStructName())) { - // Here we are dumping an Element of struct type. - // This is done using expression evaluation with the name of the - // struct type and pointer to element. - // Don't print the name of the resulting expression, since this will - // be '$[0-9]+' + // Here we are dumping an Element of struct type. This is done using + // expression evaluation with the name of the struct type and pointer + // to element. Don't print the name of the resulting expression, + // since this will be '$[0-9]+' DumpValueObjectOptions expr_options; expr_options.SetHideName(true); - // Setup expression as derefrencing a pointer cast to element address. + // Setup expression as derefrencing a pointer cast to element + // address. char expr_char_buffer[jit_max_expr_size]; int written = snprintf(expr_char_buffer, jit_max_expr_size, "*(%s*) 0x%" PRIx64, @@ -3435,9 +3427,9 @@ bool RenderScriptRuntime::DumpAllocation(Stream &strm, StackFrame *frame_ptr, return true; } -// Function recalculates all our cached information about allocations by jitting -// the RS runtime regarding each allocation we know about. Returns true if all -// allocations could be recomputed, false otherwise. +// Function recalculates all our cached information about allocations by +// jitting the RS runtime regarding each allocation we know about. Returns true +// if all allocations could be recomputed, false otherwise. bool RenderScriptRuntime::RecomputeAllAllocations(Stream &strm, StackFrame *frame_ptr) { bool success = true; @@ -3601,8 +3593,8 @@ void RenderScriptRuntime::SetBreakAllKernels(bool do_break, TargetSP target) { } } -// Given the name of a kernel this function creates a breakpoint using our -// own breakpoint resolver, and returns the Breakpoint shared pointer. +// Given the name of a kernel this function creates a breakpoint using our own +// breakpoint resolver, and returns the Breakpoint shared pointer. BreakpointSP RenderScriptRuntime::CreateKernelBreakpoint(const ConstString &name) { Log *log( @@ -3743,8 +3735,8 @@ bool RenderScriptRuntime::GetKernelCoordinate(RSCoordinate &coord, log->Printf("%s - Found .expand function '%s'", __FUNCTION__, func_name.GetCString()); - // Get values for variables in .expand frame that tell us the current kernel - // invocation + // Get values for variables in .expand frame that tell us the current + // kernel invocation uint64_t x, y, z; bool found = GetFrameVarAsUnsigned(frame_sp, x_expr, x) && GetFrameVarAsUnsigned(frame_sp, y_expr, y) && @@ -3765,12 +3757,11 @@ bool RenderScriptRuntime::GetKernelCoordinate(RSCoordinate &coord, // Callback when a kernel breakpoint hits and we're looking for a specific // coordinate. Baton parameter contains a pointer to the target coordinate we -// want to break on. -// Function then checks the .expand frame for the current coordinate and breaks -// to user if it matches. -// Parameter 'break_id' is the id of the Breakpoint which made the callback. -// Parameter 'break_loc_id' is the id for the BreakpointLocation which was hit, -// a single logical breakpoint can have multiple addresses. +// want to break on. Function then checks the .expand frame for the current +// coordinate and breaks to user if it matches. Parameter 'break_id' is the id +// of the Breakpoint which made the callback. Parameter 'break_loc_id' is the +// id for the BreakpointLocation which was hit, a single logical breakpoint can +// have multiple addresses. bool RenderScriptRuntime::KernelBreakpointHit(void *baton, StoppointCallbackContext *ctx, user_id_t break_id, @@ -3845,12 +3836,10 @@ void RenderScriptRuntime::SetConditional(BreakpointSP bp, Stream &messages, m_conditional_breaks[bp->GetID()] = std::unique_ptr<RSCoordinate>(baton); } -// Tries to set a breakpoint on the start of a kernel, resolved using the kernel -// name. Argument 'coords', represents a three dimensional coordinate which can -// be -// used to specify a single kernel instance to break on. If this is set then we -// add a callback -// to the breakpoint. +// Tries to set a breakpoint on the start of a kernel, resolved using the +// kernel name. Argument 'coords', represents a three dimensional coordinate +// which can be used to specify a single kernel instance to break on. If this +// is set then we add a callback to the breakpoint. bool RenderScriptRuntime::PlaceBreakpointOnKernel(TargetSP target, Stream &messages, const char *name, @@ -4270,8 +4259,8 @@ public: }; // Matching a comma separated list of known words is fairly - // straightforward with PCRE, but we're - // using ERE, so we end up with a little ugliness... + // straightforward with PCRE, but we're using ERE, so we end up with a + // little ugliness... RegularExpression::Match match(/* max_matches */ 5); RegularExpression match_type_list( llvm::StringRef("^([[:alpha:]]+)(,[[:alpha:]]+){0,4}$")); diff --git a/lldb/source/Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime/RenderScriptx86ABIFixups.cpp b/lldb/source/Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime/RenderScriptx86ABIFixups.cpp index 439d372fade..1e75126621c 100644 --- a/lldb/source/Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime/RenderScriptx86ABIFixups.cpp +++ b/lldb/source/Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime/RenderScriptx86ABIFixups.cpp @@ -46,18 +46,15 @@ bool isRSAPICall(llvm::Module &module, llvm::CallInst *call_inst) { bool isRSLargeReturnCall(llvm::Module &module, llvm::CallInst *call_inst) { // i686 and x86_64 returns for large vectors in the RenderScript API are not - // handled as normal - // register pairs, but as a hidden sret type. This is not reflected in the - // debug info or mangled - // symbol name, and the android ABI for x86 and x86_64, (as well as the - // emulators) specifies there is - // no AVX, so bcc generates an sret function because we cannot natively return + // handled as normal register pairs, but as a hidden sret type. This is not + // reflected in the debug info or mangled symbol name, and the android ABI + // for x86 and x86_64, (as well as the emulators) specifies there is no AVX, + // so bcc generates an sret function because we cannot natively return // 256 bit vectors. // This function simply checks whether a function has a > 128bit return type. - // It is perhaps an - // unreliable heuristic, and relies on bcc not generating AVX code, so if the - // android ABI one day - // provides for AVX, this function may go out of fashion. + // It is perhaps an unreliable heuristic, and relies on bcc not generating + // AVX code, so if the android ABI one day provides for AVX, this function + // may go out of fashion. (void)module; if (!call_inst || !call_inst->getCalledFunction()) return false; @@ -88,12 +85,11 @@ bool isRSAllocationTyCallSite(llvm::Module &module, llvm::CallInst *call_inst) { llvm::FunctionType *cloneToStructRetFnTy(llvm::CallInst *call_inst) { // on x86 StructReturn functions return a pointer to the return value, rather - // than the return - // value itself [ref](http://www.agner.org/optimize/calling_conventions.pdf - // section 6). - // We create a return type by getting the pointer type of the old return type, - // and inserting a new - // initial argument of pointer type of the original return type. + // than the return value itself + // [ref](http://www.agner.org/optimize/calling_conventions.pdf section 6). We + // create a return type by getting the pointer type of the old return type, + // and inserting a new initial argument of pointer type of the original + // return type. Log *log( GetLogIfAnyCategoriesSet(LIBLLDB_LOG_LANGUAGE | LIBLLDB_LOG_EXPRESSIONS)); @@ -112,8 +108,7 @@ llvm::FunctionType *cloneToStructRetFnTy(llvm::CallInst *call_inst) { orig_type->param_end()}; // This may not work if the function is somehow declared void as llvm is - // strongly typed - // and represents void* with i8* + // strongly typed and represents void* with i8* assert(!orig_type->getReturnType()->isVoidTy() && "Cannot add StructRet attribute to void function"); llvm::PointerType *return_type_ptr_type = @@ -126,8 +121,8 @@ llvm::FunctionType *cloneToStructRetFnTy(llvm::CallInst *call_inst) { if (log) log->Printf("%s - return type pointer type for StructRet clone @ '0x%p':\n", __FUNCTION__, (void *)return_type_ptr_type); - // put the the sret pointer argument in place at the beginning of the argument - // list. + // put the the sret pointer argument in place at the beginning of the + // argument list. params.emplace(params.begin(), return_type_ptr_type); assert(params.size() == num_params + 1); return llvm::FunctionType::get(return_type_ptr_type, params, @@ -157,11 +152,9 @@ bool findRSCallSites(llvm::Module &module, bool fixupX86StructRetCalls(llvm::Module &module) { bool changed = false; - // changing a basic block while iterating over it seems to have some undefined - // behaviour - // going on so we find all RS callsites first, then fix them up after - // consuming - // the iterator. + // changing a basic block while iterating over it seems to have some + // undefined behaviour going on so we find all RS callsites first, then fix + // them up after consuming the iterator. std::set<llvm::CallInst *> rs_callsites; if (!findRSCallSites(module, rs_callsites, isRSLargeReturnCall)) return false; @@ -180,8 +173,7 @@ bool fixupX86StructRetCalls(llvm::Module &module) { // Allocate enough space to store the return value of the original function // we pass a pointer to this allocation as the StructRet param, and then - // copy its - // value into the lldb return value + // copy its value into the lldb return value const llvm::DataLayout &DL = module.getDataLayout(); llvm::AllocaInst *return_value_alloc = new llvm::AllocaInst( func->getReturnType(), DL.getAllocaAddrSpace(), "var_vector_return_alloc", @@ -222,19 +214,15 @@ bool fixupX86StructRetCalls(llvm::Module &module) { bool fixupRSAllocationStructByValCalls(llvm::Module &module) { // On x86_64, calls to functions in the RS runtime that take an - // `rs_allocation` type argument - // are actually handled as by-ref params by bcc, but appear to be passed by - // value by lldb (the callsite all use - // `struct byval`). - // On x86_64 Linux, struct arguments are transferred in registers if the - // struct size is no bigger than - // 128bits [ref](http://www.agner.org/optimize/calling_conventions.pdf) - // section 7.1 "Passing and returning objects" - // otherwise passed on the stack. - // an object of type `rs_allocation` is actually 256bits, so should be passed - // on the stack. However, code generated - // by bcc actually treats formal params of type `rs_allocation` as - // `rs_allocation *` so we need to convert the + // `rs_allocation` type argument are actually handled as by-ref params by + // bcc, but appear to be passed by value by lldb (the callsite all use + // `struct byval`). On x86_64 Linux, struct arguments are transferred in + // registers if the struct size is no bigger than 128bits + // [ref](http://www.agner.org/optimize/calling_conventions.pdf) section 7.1 + // "Passing and returning objects" otherwise passed on the stack. an object + // of type `rs_allocation` is actually 256bits, so should be passed on the + // stack. However, code generated by bcc actually treats formal params of + // type `rs_allocation` as `rs_allocation *` so we need to convert the // calling convention to pass by reference, and remove any hint of byval from // formal parameters. bool changed = false; diff --git a/lldb/source/Plugins/ObjectContainer/BSD-Archive/ObjectContainerBSDArchive.cpp b/lldb/source/Plugins/ObjectContainer/BSD-Archive/ObjectContainerBSDArchive.cpp index d7bef836d9d..275f1fa2f70 100644 --- a/lldb/source/Plugins/ObjectContainer/BSD-Archive/ObjectContainerBSDArchive.cpp +++ b/lldb/source/Plugins/ObjectContainer/BSD-Archive/ObjectContainerBSDArchive.cpp @@ -89,9 +89,9 @@ ObjectContainerBSDArchive::Object::Extract(const DataExtractor &data, str.assign((const char *)data.GetData(&offset, 16), 16); if (str.find("#1/") == 0) { - // If the name is longer than 16 bytes, or contains an embedded space - // then it will use this format where the length of the name is - // here and the name characters are after this header. + // If the name is longer than 16 bytes, or contains an embedded space then + // it will use this format where the length of the name is here and the + // name characters are after this header. ar_name_len = strtoul(str.c_str() + 3, &err, 10); } else { // Strip off any trailing spaces. @@ -203,8 +203,8 @@ ObjectContainerBSDArchive::Archive::FindCachedArchive( shared_ptr archive_sp; Archive::Map &archive_map = Archive::GetArchiveCache(); Archive::Map::iterator pos = archive_map.find(file); - // Don't cache a value for "archive_map.end()" below since we might - // delete an archive entry... + // Don't cache a value for "archive_map.end()" below since we might delete an + // archive entry... while (pos != archive_map.end() && pos->first == file) { bool match = true; if (arch.IsValid() && @@ -217,14 +217,13 @@ ObjectContainerBSDArchive::Archive::FindCachedArchive( if (pos->second->GetModificationTime() == time) { return pos->second; } else { - // We have a file at the same path with the same architecture - // whose modification time doesn't match. It doesn't make sense - // for us to continue to use this BSD archive since we cache only - // the object info which consists of file time info and also the - // file offset and file size of any contained objects. Since - // this information is now out of date, we won't get the correct - // information if we go and extract the file data, so we should - // remove the old and outdated entry. + // We have a file at the same path with the same architecture whose + // modification time doesn't match. It doesn't make sense for us to + // continue to use this BSD archive since we cache only the object info + // which consists of file time info and also the file offset and file + // size of any contained objects. Since this information is now out of + // date, we won't get the correct information if we go and extract the + // file data, so we should remove the old and outdated entry. archive_map.erase(pos); pos = archive_map.find(file); continue; // Continue to next iteration so we don't increment pos @@ -295,9 +294,9 @@ ObjectContainer *ObjectContainerBSDArchive::CreateInstance( return nullptr; if (data_sp) { - // We have data, which means this is the first 512 bytes of the file - // Check to see if the magic bytes match and if they do, read the entire - // table of contents for the archive and cache it + // We have data, which means this is the first 512 bytes of the file Check + // to see if the magic bytes match and if they do, read the entire table of + // contents for the archive and cache it DataExtractor data; data.SetData(data_sp, data_offset, length); if (file && data_sp && ObjectContainerBSDArchive::MagicBytesMatch(data)) { @@ -389,8 +388,8 @@ bool ObjectContainerBSDArchive::ParseHeader() { m_file, module_sp->GetArchitecture(), module_sp->GetModificationTime(), m_offset, m_data); } - // Clear the m_data that contains the entire archive - // data and let our m_archive_sp hold onto the data. + // Clear the m_data that contains the entire archive data and let our + // m_archive_sp hold onto the data. m_data.Clear(); } } @@ -453,9 +452,9 @@ size_t ObjectContainerBSDArchive::GetModuleSpecifications( lldb::offset_t data_offset, lldb::offset_t file_offset, lldb::offset_t file_size, lldb_private::ModuleSpecList &specs) { - // We have data, which means this is the first 512 bytes of the file - // Check to see if the magic bytes match and if they do, read the entire - // table of contents for the archive and cache it + // We have data, which means this is the first 512 bytes of the file Check to + // see if the magic bytes match and if they do, read the entire table of + // contents for the archive and cache it DataExtractor data; data.SetData(data_sp, data_offset, data_sp->GetByteSize()); if (!file || !data_sp || !ObjectContainerBSDArchive::MagicBytesMatch(data)) @@ -505,8 +504,8 @@ size_t ObjectContainerBSDArchive::GetModuleSpecifications( const size_t end_count = specs.GetSize(); size_t num_specs_added = end_count - initial_count; if (set_archive_arch && num_specs_added > 0) { - // The archive was created but we didn't have an architecture - // so we need to set it + // The archive was created but we didn't have an architecture so we need to + // set it for (size_t i = initial_count; i < end_count; ++i) { ModuleSpec module_spec; if (specs.GetModuleSpecAtIndex(i, module_spec)) { diff --git a/lldb/source/Plugins/ObjectContainer/Universal-Mach-O/ObjectContainerUniversalMachO.cpp b/lldb/source/Plugins/ObjectContainer/Universal-Mach-O/ObjectContainerUniversalMachO.cpp index 0266bbe27e7..4c48d641829 100644 --- a/lldb/source/Plugins/ObjectContainer/Universal-Mach-O/ObjectContainerUniversalMachO.cpp +++ b/lldb/source/Plugins/ObjectContainer/Universal-Mach-O/ObjectContainerUniversalMachO.cpp @@ -44,8 +44,8 @@ ObjectContainer *ObjectContainerUniversalMachO::CreateInstance( const lldb::ModuleSP &module_sp, DataBufferSP &data_sp, lldb::offset_t data_offset, const FileSpec *file, lldb::offset_t file_offset, lldb::offset_t length) { - // We get data when we aren't trying to look for cached container information, - // so only try and look for an architecture slice if we get data + // We get data when we aren't trying to look for cached container + // information, so only try and look for an architecture slice if we get data if (data_sp) { DataExtractor data; data.SetData(data_sp, data_offset, length); @@ -81,8 +81,8 @@ ObjectContainerUniversalMachO::~ObjectContainerUniversalMachO() {} bool ObjectContainerUniversalMachO::ParseHeader() { bool success = ParseHeader(m_data, m_header, m_fat_archs); - // We no longer need any data, we parsed all we needed to parse - // and cached it in m_header and m_fat_archs + // We no longer need any data, we parsed all we needed to parse and cached it + // in m_header and m_fat_archs m_data.Clear(); return success; } @@ -92,8 +92,7 @@ bool ObjectContainerUniversalMachO::ParseHeader( std::vector<llvm::MachO::fat_arch> &fat_archs) { bool success = false; // Store the file offset for this universal file as we could have a universal - // .o file - // in a BSD archive, or be contained in another kind of object. + // .o file in a BSD archive, or be contained in another kind of object. // Universal mach-o files always have their headers in big endian. lldb::offset_t offset = 0; data.SetByteOrder(eByteOrderBig); diff --git a/lldb/source/Plugins/ObjectFile/ELF/ELFHeader.cpp b/lldb/source/Plugins/ObjectFile/ELF/ELFHeader.cpp index 39ea4920870..16cbb6e5753 100644 --- a/lldb/source/Plugins/ObjectFile/ELF/ELFHeader.cpp +++ b/lldb/source/Plugins/ObjectFile/ELF/ELFHeader.cpp @@ -140,13 +140,12 @@ bool ELFHeader::Parse(lldb_private::DataExtractor &data, if (data.GetU32(offset, &e_flags, 1) == NULL) return false; - // Read e_ehsize, e_phentsize, e_phnum, e_shentsize, e_shnum and - // e_shstrndx. + // Read e_ehsize, e_phentsize, e_phnum, e_shentsize, e_shnum and e_shstrndx. if (data.GetU16(offset, &e_ehsize, 6) == NULL) return false; - // Initialize e_phnum, e_shnum, and e_shstrndx with the values - // read from the header. + // Initialize e_phnum, e_shnum, and e_shstrndx with the values read from the + // header. e_phnum = e_phnum_hdr; e_shnum = e_shnum_hdr; e_shstrndx = e_shstrndx_hdr; diff --git a/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp b/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp index 61186aebfc6..923a74935a7 100644 --- a/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp +++ b/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp @@ -240,11 +240,10 @@ bool ELFNote::Parse(const DataExtractor &data, lldb::offset_t *offset) { if (data.GetU32(offset, &n_namesz, 3) == NULL) return false; - // The name field is required to be nul-terminated, and n_namesz - // includes the terminating nul in observed implementations (contrary - // to the ELF-64 spec). A special case is needed for cores generated - // by some older Linux versions, which write a note named "CORE" - // without a nul terminator and n_namesz = 4. + // The name field is required to be nul-terminated, and n_namesz includes the + // terminating nul in observed implementations (contrary to the ELF-64 spec). + // A special case is needed for cores generated by some older Linux versions, + // which write a note named "CORE" without a nul terminator and n_namesz = 4. if (n_namesz == 4) { char buf[4]; if (data.ExtractBytes(*offset, 4, data.GetByteOrder(), buf) != 4) @@ -295,7 +294,8 @@ static uint32_t mipsVariantFromElfFlags (const elf::ELFHeader &header) { uint32_t arch_variant = ArchSpec::eMIPSSubType_unknown; uint32_t fileclass = header.e_ident[EI_CLASS]; - // If there aren't any elf flags available (e.g core elf file) then return default + // If there aren't any elf flags available (e.g core elf file) then return + // default // 32 or 64 bit arch (without any architecture revision) based on object file's class. if (header.e_type == ET_CORE) { switch (fileclass) { @@ -549,8 +549,8 @@ uint32_t ObjectFileELF::CalculateELFNotesSegmentsCRC32( DataExtractor segment_data; if (segment_data.SetData(object_data, ph_offset, ph_size) != ph_size) { - // The ELF program header contained incorrect data, - // probably corefile is incomplete or corrupted. + // The ELF program header contained incorrect data, probably corefile + // is incomplete or corrupted. break; } @@ -595,8 +595,8 @@ static const char *OSABIAsCString(unsigned char osabi_byte) { // // WARNING : This function is being deprecated -// It's functionality has moved to ArchSpec::SetArchitecture -// This function is only being kept to validate the move. +// It's functionality has moved to ArchSpec::SetArchitecture This function is +// only being kept to validate the move. // // TODO : Remove this function static bool GetOsFromOSABI(unsigned char osabi_byte, @@ -677,10 +677,10 @@ size_t ObjectFileELF::GetModuleSpecifications( data_sp = MapFileData(file, -1, file_offset); if (data_sp) data.SetData(data_sp); - // In case there is header extension in the section #0, the header - // we parsed above could have sentinel values for e_phnum, e_shnum, - // and e_shstrndx. In this case we need to reparse the header - // with a bigger data source to get the actual values. + // In case there is header extension in the section #0, the header we + // parsed above could have sentinel values for e_phnum, e_shnum, and + // e_shstrndx. In this case we need to reparse the header with a + // bigger data source to get the actual values. if (header.HasHeaderExtension()) { lldb::offset_t header_offset = data_offset; header.Parse(data, &header_offset); @@ -736,8 +736,8 @@ size_t ObjectFileELF::GetModuleSpecifications( uuid.SetBytes(uuidt, sizeof(uuidt)); } else if (core_notes_crc) { // Use 8 bytes - first 4 bytes for *magic* prefix, mainly to make - // it look different form - // .gnu_debuglink crc followed by 4 bytes of note segments crc. + // it look different form .gnu_debuglink crc followed by 4 bytes + // of note segments crc. uint32_t uuidt[4] = {g_core_uuid_magic, core_notes_crc, 0, 0}; uuid.SetBytes(uuidt, sizeof(uuidt)); } @@ -823,21 +823,19 @@ bool ObjectFileELF::SetLoadAddress(Target &target, lldb::addr_t value, size_t sect_idx = 0; for (sect_idx = 0; sect_idx < num_sections; ++sect_idx) { - // Iterate through the object file sections to find all - // of the sections that have SHF_ALLOC in their flag bits. + // Iterate through the object file sections to find all of the sections + // that have SHF_ALLOC in their flag bits. SectionSP section_sp(section_list->GetSectionAtIndex(sect_idx)); if (section_sp && section_sp->Test(SHF_ALLOC)) { lldb::addr_t load_addr = section_sp->GetFileAddress(); // We don't want to update the load address of a section with type // eSectionTypeAbsoluteAddress as they already have the absolute load - // address - // already specified + // address already specified if (section_sp->GetType() != eSectionTypeAbsoluteAddress) load_addr += value; // On 32-bit systems the load address have to fit into 4 bytes. The - // rest of - // the bytes are the overflow from the addition. + // rest of the bytes are the overflow from the addition. if (GetAddressByteSize() == 4) load_addr &= 0xFFFFFFFF; @@ -869,9 +867,8 @@ AddressClass ObjectFileELF::GetAddressClass(addr_t file_addr) { if (!symtab) return eAddressClassUnknown; - // The address class is determined based on the symtab. Ask it from the object - // file what - // contains the symtab information. + // The address class is determined based on the symtab. Ask it from the + // object file what contains the symtab information. ObjectFile *symtab_objfile = symtab->GetObjectFile(); if (symtab_objfile != nullptr && symtab_objfile != this) return symtab_objfile->GetAddressClass(file_addr); @@ -882,8 +879,8 @@ AddressClass ObjectFileELF::GetAddressClass(addr_t file_addr) { auto ub = m_address_class_map.upper_bound(file_addr); if (ub == m_address_class_map.begin()) { - // No entry in the address class map before the address. Return - // default address class for an address in a code section. + // No entry in the address class map before the address. Return default + // address class for an address in a code section. return eAddressClassCode; } @@ -925,8 +922,8 @@ bool ObjectFileELF::GetUUID(lldb_private::UUID *uuid) { core_notes_crc = CalculateELFNotesSegmentsCRC32(m_program_headers, m_data); if (core_notes_crc) { - // Use 8 bytes - first 4 bytes for *magic* prefix, mainly to make it - // look different form .gnu_debuglink crc - followed by 4 bytes of note + // Use 8 bytes - first 4 bytes for *magic* prefix, mainly to make it look + // different form .gnu_debuglink crc - followed by 4 bytes of note // segments crc. uint32_t uuidt[4] = {g_core_uuid_magic, core_notes_crc, 0, 0}; m_uuid.SetBytes(uuidt, sizeof(uuidt)); @@ -996,8 +993,8 @@ Address ObjectFileELF::GetImageInfoAddress(Target *target) { ELFDynamic &symbol = m_dynamic_symbols[i]; if (symbol.d_tag == DT_DEBUG) { - // Compute the offset as the number of previous entries plus the - // size of d_tag. + // Compute the offset as the number of previous entries plus the size of + // d_tag. addr_t offset = i * dynsym_hdr->sh_entsize + GetAddressByteSize(); return Address(dynsym_section_sp, offset); } @@ -1330,8 +1327,8 @@ ObjectFileELF::RefineModuleDetailsFromNote(lldb_private::DataExtractor &data, arch_spec.GetTriple().setVendor(llvm::Triple::VendorType::CSR); // TODO At some point the description string could be processed. - // It could provide a steer towards the kalimba variant which - // this ELF targets. + // It could provide a steer towards the kalimba variant which this ELF + // targets. if (note.n_descsz) { const char *cstr = data.GetCStr(&offset, llvm::alignTo(note.n_descsz, 4)); @@ -1346,36 +1343,28 @@ ObjectFileELF::RefineModuleDetailsFromNote(lldb_private::DataExtractor &data, // register info arch_spec.GetTriple().setOS(llvm::Triple::OSType::Linux); } else if (note.n_name == LLDB_NT_OWNER_CORE) { - // Parse the NT_FILE to look for stuff in paths to shared libraries - // As the contents look like this in a 64 bit ELF core file: - // count = 0x000000000000000a (10) - // page_size = 0x0000000000001000 (4096) - // Index start end file_ofs path - // ===== ------------------ ------------------ ------------------ - // ------------------------------------- - // [ 0] 0x0000000000400000 0x0000000000401000 0x0000000000000000 - // /tmp/a.out - // [ 1] 0x0000000000600000 0x0000000000601000 0x0000000000000000 - // /tmp/a.out - // [ 2] 0x0000000000601000 0x0000000000602000 0x0000000000000001 - // /tmp/a.out + // Parse the NT_FILE to look for stuff in paths to shared libraries As + // the contents look like this in a 64 bit ELF core file: count = + // 0x000000000000000a (10) page_size = 0x0000000000001000 (4096) Index + // start end file_ofs path ===== + // ------------------ ------------------ ------------------ + // ------------------------------------- [ 0] 0x0000000000400000 + // 0x0000000000401000 0x0000000000000000 /tmp/a.out [ 1] + // 0x0000000000600000 0x0000000000601000 0x0000000000000000 /tmp/a.out [ + // 2] 0x0000000000601000 0x0000000000602000 0x0000000000000001 /tmp/a.out // [ 3] 0x00007fa79c9ed000 0x00007fa79cba8000 0x0000000000000000 - // /lib/x86_64-linux-gnu/libc-2.19.so - // [ 4] 0x00007fa79cba8000 0x00007fa79cda7000 0x00000000000001bb - // /lib/x86_64-linux-gnu/libc-2.19.so - // [ 5] 0x00007fa79cda7000 0x00007fa79cdab000 0x00000000000001ba - // /lib/x86_64-linux-gnu/libc-2.19.so - // [ 6] 0x00007fa79cdab000 0x00007fa79cdad000 0x00000000000001be - // /lib/x86_64-linux-gnu/libc-2.19.so - // [ 7] 0x00007fa79cdb2000 0x00007fa79cdd5000 0x0000000000000000 - // /lib/x86_64-linux-gnu/ld-2.19.so - // [ 8] 0x00007fa79cfd4000 0x00007fa79cfd5000 0x0000000000000022 - // /lib/x86_64-linux-gnu/ld-2.19.so - // [ 9] 0x00007fa79cfd5000 0x00007fa79cfd6000 0x0000000000000023 - // /lib/x86_64-linux-gnu/ld-2.19.so - // In the 32 bit ELFs the count, page_size, start, end, file_ofs are - // uint32_t - // For reference: see readelf source code (in binutils). + // /lib/x86_64-linux-gnu/libc-2.19.so [ 4] 0x00007fa79cba8000 + // 0x00007fa79cda7000 0x00000000000001bb /lib/x86_64-linux- + // gnu/libc-2.19.so [ 5] 0x00007fa79cda7000 0x00007fa79cdab000 + // 0x00000000000001ba /lib/x86_64-linux-gnu/libc-2.19.so [ 6] + // 0x00007fa79cdab000 0x00007fa79cdad000 0x00000000000001be /lib/x86_64 + // -linux-gnu/libc-2.19.so [ 7] 0x00007fa79cdb2000 0x00007fa79cdd5000 + // 0x0000000000000000 /lib/x86_64-linux-gnu/ld-2.19.so [ 8] + // 0x00007fa79cfd4000 0x00007fa79cfd5000 0x0000000000000022 /lib/x86_64 + // -linux-gnu/ld-2.19.so [ 9] 0x00007fa79cfd5000 0x00007fa79cfd6000 + // 0x0000000000000023 /lib/x86_64-linux-gnu/ld-2.19.so In the 32 bit ELFs + // the count, page_size, start, end, file_ofs are uint32_t For reference: + // see readelf source code (in binutils). if (note.n_type == NT_FILE) { uint64_t count = data.GetAddress(&offset); const char *cstr; @@ -1399,15 +1388,14 @@ ObjectFileELF::RefineModuleDetailsFromNote(lldb_private::DataExtractor &data, } if (arch_spec.IsMIPS() && arch_spec.GetTriple().getOS() == llvm::Triple::OSType::UnknownOS) - // In case of MIPSR6, the LLDB_NT_OWNER_GNU note is missing - // for some cases (e.g. compile with -nostdlib) - // Hence set OS to Linux + // In case of MIPSR6, the LLDB_NT_OWNER_GNU note is missing for some + // cases (e.g. compile with -nostdlib) Hence set OS to Linux arch_spec.GetTriple().setOS(llvm::Triple::OSType::Linux); } } - // Calculate the offset of the next note just in case "offset" has been used - // to poke at the contents of the note data + // Calculate the offset of the next note just in case "offset" has been + // used to poke at the contents of the note data offset = note_offset + note.GetByteSize(); } @@ -1507,13 +1495,12 @@ size_t ObjectFileELF::GetSectionHeaderInfo(SectionHeaderColl §ion_headers, arch_spec.SetArchitecture(eArchTypeELF, header.e_machine, sub_type, header.e_ident[EI_OSABI]); - // Validate if it is ok to remove GetOsFromOSABI. - // Note, that now the OS is determined based on EI_OSABI flag and - // the info extracted from ELF notes (see RefineModuleDetailsFromNote). - // However in some cases that still might be not enough: for example - // a shared library might not have any notes at all - // and have EI_OSABI flag set to System V, - // as result the OS will be set to UnknownOS. + // Validate if it is ok to remove GetOsFromOSABI. Note, that now the OS is + // determined based on EI_OSABI flag and the info extracted from ELF notes + // (see RefineModuleDetailsFromNote). However in some cases that still + // might be not enough: for example a shared library might not have any + // notes at all and have EI_OSABI flag set to System V, as result the OS + // will be set to UnknownOS. GetOsFromOSABI(header.e_ident[EI_OSABI], ostype); spec_ostype = arch_spec.GetTriple().getOS(); assert(spec_ostype == ostype); @@ -1844,23 +1831,19 @@ void ObjectFileELF::CreateSections(SectionList &unified_section_list) { } // .debug_abbrev – Abbreviations used in the .debug_info section // .debug_aranges – Lookup table for mapping addresses to compilation - // units - // .debug_frame – Call frame information - // .debug_info – The core DWARF information section - // .debug_line – Line number information + // units .debug_frame – Call frame information .debug_info – The core + // DWARF information section .debug_line – Line number information // .debug_loc – Location lists used in DW_AT_location attributes - // .debug_macinfo – Macro information - // .debug_pubnames – Lookup table for mapping object and function names to - // compilation units + // .debug_macinfo – Macro information .debug_pubnames – Lookup table + // for mapping object and function names to compilation units // .debug_pubtypes – Lookup table for mapping type names to compilation - // units - // .debug_ranges – Address ranges used in DW_AT_ranges attributes - // .debug_str – String table used in .debug_info - // MISSING? .gnu_debugdata - "mini debuginfo / MiniDebugInfo" section, - // http://sourceware.org/gdb/onlinedocs/gdb/MiniDebugInfo.html - // MISSING? .debug-index - - // http://src.chromium.org/viewvc/chrome/trunk/src/build/gdb-add-index?pathrev=144644 - // MISSING? .debug_types - Type descriptions from DWARF 4? See + // units .debug_ranges – Address ranges used in DW_AT_ranges attributes + // .debug_str – String table used in .debug_info MISSING? + // .gnu_debugdata - "mini debuginfo / MiniDebugInfo" section, + // http://sourceware.org/gdb/onlinedocs/gdb/MiniDebugInfo.html MISSING? + // .debug-index - http://src.chromium.org/viewvc/chrome/trunk/src/build + // /gdb-add-index?pathrev=144644 MISSING? .debug_types - Type + // descriptions from DWARF 4? See // http://gcc.gnu.org/wiki/DwarfSeparateTypeInfo else if (name == g_sect_name_dwarf_debug_abbrev) sect_type = eSectionTypeDWARFDebugAbbrev; @@ -1943,10 +1926,8 @@ void ObjectFileELF::CreateSections(SectionList &unified_section_list) { if (eSectionTypeOther == sect_type) { // the kalimba toolchain assumes that ELF section names are free-form. - // It does - // support linkscripts which (can) give rise to various arbitrarily - // named - // sections being "Code" or "Data". + // It does support linkscripts which (can) give rise to various + // arbitrarily named sections being "Code" or "Data". sect_type = kalimbaSectionType(m_header, header); } @@ -2006,11 +1987,9 @@ void ObjectFileELF::CreateSections(SectionList &unified_section_list) { } // Find the arm/aarch64 mapping symbol character in the given symbol name. -// Mapping symbols have the -// form of "$<char>[.<any>]*". Additionally we recognize cases when the mapping -// symbol prefixed by -// an arbitrary string because if a symbol prefix added to each symbol in the -// object file with +// Mapping symbols have the form of "$<char>[.<any>]*". Additionally we +// recognize cases when the mapping symbol prefixed by an arbitrary string +// because if a symbol prefix added to each symbol in the object file with // objcopy then the mapping symbols are also prefixed. static char FindArmAarch64MappingSymbol(const char *symbol_name) { if (!symbol_name) @@ -2052,19 +2031,15 @@ unsigned ObjectFileELF::ParseSymbols(Symtab *symtab, user_id_t start_id, static ConstString opd_section_name(".opd"); // For ppc64 // On Android the oatdata and the oatexec symbols in the oat and odex files - // covers the full - // .text section what causes issues with displaying unusable symbol name to - // the user and very - // slow unwinding speed because the instruction emulation based unwind plans - // try to emulate all - // instructions in these symbols. Don't add these symbols to the symbol list - // as they have no - // use for the debugger and they are causing a lot of trouble. - // Filtering can't be restricted to Android because this special object file - // don't contain the - // note section specifying the environment to Android but the custom extension - // and file name - // makes it highly unlikely that this will collide with anything else. + // covers the full .text section what causes issues with displaying unusable + // symbol name to the user and very slow unwinding speed because the + // instruction emulation based unwind plans try to emulate all instructions + // in these symbols. Don't add these symbols to the symbol list as they have + // no use for the debugger and they are causing a lot of trouble. Filtering + // can't be restricted to Android because this special object file don't + // contain the note section specifying the environment to Android but the + // custom extension and file name makes it highly unlikely that this will + // collide with anything else. ConstString file_extension = m_file.GetFileNameExtension(); bool skip_oatdata_oatexec = file_extension == ConstString("oat") || file_extension == ConstString("odex"); @@ -2076,8 +2051,8 @@ unsigned ObjectFileELF::ParseSymbols(Symtab *symtab, user_id_t start_id, module_sp ? module_sp->GetSectionList() : nullptr; // Local cache to avoid doing a FindSectionByName for each symbol. The "const - // char*" key must - // came from a ConstString object so they can be compared by pointer + // char*" key must came from a ConstString object so they can be compared by + // pointer std::unordered_map<const char *, lldb::SectionSP> section_name_to_section; unsigned i; @@ -2095,8 +2070,7 @@ unsigned ObjectFileELF::ParseSymbols(Symtab *symtab, user_id_t start_id, continue; // Skipping oatdata and oatexec sections if it is requested. See details - // above the - // definition of skip_oatdata_oatexec for the reasons. + // above the definition of skip_oatdata_oatexec for the reasons. if (skip_oatdata_oatexec && (::strcmp(symbol_name, "oatdata") == 0 || ::strcmp(symbol_name, "oatexec") == 0)) continue; @@ -2127,8 +2101,8 @@ unsigned ObjectFileELF::ParseSymbols(Symtab *symtab, user_id_t start_id, break; case STT_OBJECT: - // The symbol is associated with a data object, such as a variable, - // an array, etc. + // The symbol is associated with a data object, such as a variable, an + // array, etc. symbol_type = eSymbolTypeData; break; @@ -2139,13 +2113,13 @@ unsigned ObjectFileELF::ParseSymbols(Symtab *symtab, user_id_t start_id, case STT_SECTION: // The symbol is associated with a section. Symbol table entries of - // this type exist primarily for relocation and normally have - // STB_LOCAL binding. + // this type exist primarily for relocation and normally have STB_LOCAL + // binding. break; case STT_FILE: - // Conventionally, the symbol's name gives the name of the source - // file associated with the object file. A file symbol has STB_LOCAL + // Conventionally, the symbol's name gives the name of the source file + // associated with the object file. A file symbol has STB_LOCAL // binding, its section index is SHN_ABS, and it precedes the other // STB_LOCAL symbols for the file, if it is present. symbol_type = eSymbolTypeSourceFile; @@ -2228,12 +2202,11 @@ unsigned ObjectFileELF::ParseSymbols(Symtab *symtab, user_id_t start_id, if (arch.GetMachine() == llvm::Triple::arm) { if (symbol_type == eSymbolTypeCode) { if (symbol.st_value & 1) { - // Subtracting 1 from the address effectively unsets - // the low order bit, which results in the address - // actually pointing to the beginning of the symbol. - // This delta will be used below in conjunction with - // symbol.st_value to produce the final symbol_value - // that we store in the symtab. + // Subtracting 1 from the address effectively unsets the low order + // bit, which results in the address actually pointing to the + // beginning of the symbol. This delta will be used below in + // conjunction with symbol.st_value to produce the final + // symbol_value that we store in the symtab. symbol_value_offset = -1; m_address_class_map[symbol.st_value ^ 1] = eAddressClassCodeAlternateISA; @@ -2280,20 +2253,16 @@ unsigned ObjectFileELF::ParseSymbols(Symtab *symtab, user_id_t start_id, } // symbol_value_offset may contain 0 for ARM symbols or -1 for THUMB - // symbols. See above for - // more details. + // symbols. See above for more details. uint64_t symbol_value = symbol.st_value + symbol_value_offset; if (symbol_section_sp == nullptr && section_idx == SHN_ABS && symbol.st_size != 0) { // We don't have a section for a symbol with non-zero size. Create a new - // section for it - // so the address range covered by the symbol is also covered by the - // module (represented - // through the section list). It is needed so module lookup for the - // addresses covered - // by this symbol will be successfull. This case happens for absolute - // symbols. + // section for it so the address range covered by the symbol is also + // covered by the module (represented through the section list). It is + // needed so module lookup for the addresses covered by this symbol will + // be successfull. This case happens for absolute symbols. ConstString fake_section_name(std::string(".absolute.") + symbol_name); symbol_section_sp = std::make_shared<Section>(module_sp, this, SHN_ABS, fake_section_name, @@ -2336,8 +2305,7 @@ unsigned ObjectFileELF::ParseSymbols(Symtab *symtab, user_id_t start_id, Mangled mangled(ConstString(symbol_bare), is_mangled); // Now append the suffix back to mangled and unmangled names. Only do it if - // the - // demangling was successful (string is not empty). + // the demangling was successful (string is not empty). if (has_suffix) { llvm::StringRef suffix = symbol_ref.substr(version_pos); @@ -2353,12 +2321,10 @@ unsigned ObjectFileELF::ParseSymbols(Symtab *symtab, user_id_t start_id, } // In ELF all symbol should have a valid size but it is not true for some - // function symbols - // coming from hand written assembly. As none of the function symbol should - // have 0 size we - // try to calculate the size for these symbols in the symtab with saying - // that their original - // size is not valid. + // function symbols coming from hand written assembly. As none of the + // function symbol should have 0 size we try to calculate the size for + // these symbols in the symtab with saying that their original size is not + // valid. bool symbol_size_valid = symbol.st_size != 0 || symbol.getType() != STT_FUNC; @@ -2387,8 +2353,7 @@ unsigned ObjectFileELF::ParseSymbolTable(Symtab *symbol_table, lldb_private::Section *symtab) { if (symtab->GetObjectFile() != this) { // If the symbol table section is owned by a different object file, have it - // do the - // parsing. + // do the parsing. ObjectFileELF *obj_file_elf = static_cast<ObjectFileELF *>(symtab->GetObjectFile()); return obj_file_elf->ParseSymbolTable(symbol_table, start_id, symtab); @@ -2404,8 +2369,8 @@ unsigned ObjectFileELF::ParseSymbolTable(Symtab *symbol_table, assert(symtab_hdr->sh_type == SHT_SYMTAB || symtab_hdr->sh_type == SHT_DYNSYM); - // sh_link: section header index of associated string table. - // Section ID's are ones based. + // sh_link: section header index of associated string table. Section ID's are + // ones based. user_id_t strtab_id = symtab_hdr->sh_link + 1; Section *strtab = section_list->FindSectionByID(strtab_id).get(); @@ -2490,19 +2455,17 @@ unsigned ObjectFileELF::PLTRelocationType() { return 0; } -// Returns the size of the normal plt entries and the offset of the first normal -// plt entry. The -// 0th entry in the plt table is usually a resolution entry which have different -// size in some -// architectures then the rest of the plt entries. +// Returns the size of the normal plt entries and the offset of the first +// normal plt entry. The 0th entry in the plt table is usually a resolution +// entry which have different size in some architectures then the rest of the +// plt entries. static std::pair<uint64_t, uint64_t> GetPltEntrySizeAndOffset(const ELFSectionHeader *rel_hdr, const ELFSectionHeader *plt_hdr) { const elf_xword num_relocations = rel_hdr->sh_size / rel_hdr->sh_entsize; - // Clang 3.3 sets entsize to 4 for 32-bit binaries, but the plt entries are 16 - // bytes. - // So round the entsize up by the alignment if addralign is set. + // Clang 3.3 sets entsize to 4 for 32-bit binaries, but the plt entries are + // 16 bytes. So round the entsize up by the alignment if addralign is set. elf_xword plt_entsize = plt_hdr->sh_addralign ? llvm::alignTo(plt_hdr->sh_entsize, plt_hdr->sh_addralign) @@ -2514,12 +2477,10 @@ GetPltEntrySizeAndOffset(const ELFSectionHeader *rel_hdr, // just in case. if (plt_entsize <= 4) { // The linker haven't set the plt_hdr->sh_entsize field. Try to guess the - // size of the plt - // entries based on the number of entries and the size of the plt section - // with the - // assumption that the size of the 0th entry is at least as big as the size - // of the normal - // entries and it isn't much bigger then that. + // size of the plt entries based on the number of entries and the size of + // the plt section with the assumption that the size of the 0th entry is at + // least as big as the size of the normal entries and it isn't much bigger + // then that. if (plt_hdr->sh_addralign) plt_entsize = plt_hdr->sh_size / plt_hdr->sh_addralign / (num_relocations + 1) * plt_hdr->sh_addralign; @@ -2812,8 +2773,7 @@ Symtab *ObjectFileELF::GetSymtab() { return NULL; // We always want to use the main object file so we (hopefully) only have one - // cached copy - // of our symtab, dynamic sections, etc. + // cached copy of our symtab, dynamic sections, etc. ObjectFile *module_obj_file = module_sp->GetObjectFile(); if (module_obj_file && module_obj_file != this) return module_obj_file->GetSymtab(); @@ -2828,18 +2788,15 @@ Symtab *ObjectFileELF::GetSymtab() { // Sharable objects and dynamic executables usually have 2 distinct symbol // tables, one named ".symtab", and the other ".dynsym". The dynsym is a - // smaller - // version of the symtab that only contains global symbols. The information - // found - // in the dynsym is therefore also found in the symtab, while the reverse is - // not - // necessarily true. + // smaller version of the symtab that only contains global symbols. The + // information found in the dynsym is therefore also found in the symtab, + // while the reverse is not necessarily true. Section *symtab = section_list->FindSectionByType(eSectionTypeELFSymbolTable, true).get(); if (!symtab) { // The symtab section is non-allocable and can be stripped, so if it - // doesn't exist - // then use the dynsym section which should always be there. + // doesn't exist then use the dynsym section which should always be + // there. symtab = section_list->FindSectionByType(eSectionTypeELFDynamicSymbols, true) .get(); @@ -2886,8 +2843,7 @@ Symtab *ObjectFileELF::GetSymtab() { } // If we still don't have any symtab then create an empty instance to avoid - // do the section - // lookup next time. + // do the section lookup next time. if (m_symtab_ap == nullptr) m_symtab_ap.reset(new Symtab(this)); @@ -2901,8 +2857,8 @@ void ObjectFileELF::RelocateSection(lldb_private::Section *section) { static const char *debug_prefix = ".debug"; - // Set relocated bit so we stop getting called, regardless of - // whether we actually relocate. + // Set relocated bit so we stop getting called, regardless of whether we + // actually relocate. section->SetIsRelocated(true); // We only relocate in ELF relocatable files @@ -2945,12 +2901,10 @@ void ObjectFileELF::ParseUnwindSymbols(Symtab *symbol_table, return; // First we save the new symbols into a separate list and add them to the - // symbol table after - // we colleced all symbols we want to add. This is neccessary because adding a - // new symbol - // invalidates the internal index of the symtab what causing the next lookup - // to be slow because - // it have to recalculate the index first. + // symbol table after we colleced all symbols we want to add. This is + // neccessary because adding a new symbol invalidates the internal index of + // the symtab what causing the next lookup to be slow because it have to + // recalculate the index first. std::vector<Symbol> new_symbols; eh_frame->ForEachFDEEntries([this, symbol_table, section_list, &new_symbols]( @@ -3144,8 +3098,8 @@ void ObjectFileELF::DumpELFProgramHeader(Stream *s, //---------------------------------------------------------------------- // DumpELFProgramHeader_p_type // -// Dump an token value for the ELF program header member p_type which -// describes the type of the program header +// Dump an token value for the ELF program header member p_type which describes +// the type of the program header // ---------------------------------------------------------------------- void ObjectFileELF::DumpELFProgramHeader_p_type(Stream *s, elf_word p_type) { const int kStrWidth = 15; @@ -3316,8 +3270,7 @@ bool ObjectFileELF::GetArchitecture(ArchSpec &arch) { if (CalculateType() == eTypeCoreFile && m_arch_spec.TripleOSIsUnspecifiedUnknown()) { // Core files don't have section headers yet they have PT_NOTE program - // headers - // that might shed more light on the architecture + // headers that might shed more light on the architecture if (ParseProgramHeaders()) { for (size_t i = 1, count = GetProgramHeaderCount(); i <= count; ++i) { const elf::ELFProgramHeader *header = GetProgramHeaderByIndex(i); @@ -3378,22 +3331,22 @@ ObjectFile::Strata ObjectFileELF::CalculateStrata() { case llvm::ELF::ET_EXEC: // 2 - Executable file // TODO: is there any way to detect that an executable is a kernel - // related executable by inspecting the program headers, section - // headers, symbols, or any other flag bits??? + // related executable by inspecting the program headers, section headers, + // symbols, or any other flag bits??? return eStrataUser; case llvm::ELF::ET_DYN: // 3 - Shared object file // TODO: is there any way to detect that an shared library is a kernel - // related executable by inspecting the program headers, section - // headers, symbols, or any other flag bits??? + // related executable by inspecting the program headers, section headers, + // symbols, or any other flag bits??? return eStrataUnknown; case ET_CORE: // 4 - Core file // TODO: is there any way to detect that an core file is a kernel - // related executable by inspecting the program headers, section - // headers, symbols, or any other flag bits??? + // related executable by inspecting the program headers, section headers, + // symbols, or any other flag bits??? return eStrataUnknown; default: @@ -3468,8 +3421,8 @@ bool ObjectFileELF::AnySegmentHasPhysicalAddress() { std::vector<ObjectFile::LoadableData> ObjectFileELF::GetLoadableData(Target &target) { - // Create a list of loadable data from loadable segments, - // using physical addresses if they aren't all null + // Create a list of loadable data from loadable segments, using physical + // addresses if they aren't all null std::vector<LoadableData> loadables; size_t header_count = ParseProgramHeaders(); bool should_use_paddr = AnySegmentHasPhysicalAddress(); diff --git a/lldb/source/Plugins/ObjectFile/JIT/ObjectFileJIT.cpp b/lldb/source/Plugins/ObjectFile/JIT/ObjectFileJIT.cpp index a9ab366fbf5..af040322ec5 100644 --- a/lldb/source/Plugins/ObjectFile/JIT/ObjectFileJIT.cpp +++ b/lldb/source/Plugins/ObjectFile/JIT/ObjectFileJIT.cpp @@ -65,8 +65,8 @@ ObjectFile *ObjectFileJIT::CreateInstance(const lldb::ModuleSP &module_sp, const FileSpec *file, lldb::offset_t file_offset, lldb::offset_t length) { - // JIT'ed object file is backed by the ObjectFileJITDelegate, never - // read from a file + // JIT'ed object file is backed by the ObjectFileJITDelegate, never read from + // a file return NULL; } @@ -74,8 +74,8 @@ ObjectFile *ObjectFileJIT::CreateMemoryInstance(const lldb::ModuleSP &module_sp, DataBufferSP &data_sp, const ProcessSP &process_sp, lldb::addr_t header_addr) { - // JIT'ed object file is backed by the ObjectFileJITDelegate, never - // read from memory + // JIT'ed object file is backed by the ObjectFileJITDelegate, never read from + // memory return NULL; } @@ -214,9 +214,8 @@ bool ObjectFileJIT::SetLoadAddress(Target &target, lldb::addr_t value, const size_t num_sections = section_list->GetSize(); // "value" is an offset to apply to each top level segment for (size_t sect_idx = 0; sect_idx < num_sections; ++sect_idx) { - // Iterate through the object file sections to find all - // of the sections that size on disk (to avoid __PAGEZERO) - // and load them + // Iterate through the object file sections to find all of the sections + // that size on disk (to avoid __PAGEZERO) and load them SectionSP section_sp(section_list->GetSectionAtIndex(sect_idx)); if (section_sp && section_sp->GetFileSize() > 0 && section_sp->IsThreadSpecific() == false) { diff --git a/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp b/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp index b2fa02591ab..6f8ad16b012 100644 --- a/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp +++ b/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp @@ -161,8 +161,7 @@ public: case 7: case 8: case 9: - // fancy flavors that encapsulate of the above - // flavors... + // fancy flavors that encapsulate of the above flavors... break; default: @@ -393,8 +392,7 @@ public: case 7: case 8: case 9: - // fancy flavors that encapsulate of the above - // flavors... + // fancy flavors that encapsulate of the above flavors... break; default: @@ -517,8 +515,7 @@ public: } // Note that gpr.cpsr is also copied by the above loop; this loop - // technically extends - // one element past the end of the gpr.r[] array. + // technically extends one element past the end of the gpr.r[] array. SetError(GPRRegSet, Read, 0); offset = next_thread_state; @@ -1168,8 +1165,8 @@ AddressClass ObjectFileMachO::GetAddressClass(lldb::addr_t file_addr) { case eSectionTypeCode: if (m_header.cputype == llvm::MachO::CPU_TYPE_ARM) { - // For ARM we have a bit in the n_desc field of the symbol - // that tells us ARM/Thumb which is bit 0x0008. + // For ARM we have a bit in the n_desc field of the symbol that + // tells us ARM/Thumb which is bit 0x0008. if (symbol->GetFlags() & MACHO_NLIST_ARM_SYMBOL_IS_THUMB) return eAddressClassCodeAlternateISA; } @@ -1243,8 +1240,8 @@ AddressClass ObjectFileMachO::GetAddressClass(lldb::addr_t file_addr) { case eSymbolTypeTrampoline: case eSymbolTypeResolver: if (m_header.cputype == llvm::MachO::CPU_TYPE_ARM) { - // For ARM we have a bit in the n_desc field of the symbol - // that tells us ARM/Thumb which is bit 0x0008. + // For ARM we have a bit in the n_desc field of the symbol that tells + // us ARM/Thumb which is bit 0x0008. if (symbol->GetFlags() & MACHO_NLIST_ARM_SYMBOL_IS_THUMB) return eAddressClassCodeAlternateISA; } @@ -1360,8 +1357,8 @@ ObjectFileMachO::EncryptedFileRanges ObjectFileMachO::GetEncryptedFileRanges() { if (m_data.GetU32(&offset, &encryption_cmd, 2) == NULL) break; - // LC_ENCRYPTION_INFO and LC_ENCRYPTION_INFO_64 have the same sizes for - // the 3 fields we care about, so treat them the same. + // LC_ENCRYPTION_INFO and LC_ENCRYPTION_INFO_64 have the same sizes for the + // 3 fields we care about, so treat them the same. if (encryption_cmd.cmd == LC_ENCRYPTION_INFO || encryption_cmd.cmd == LC_ENCRYPTION_INFO_64) { if (m_data.GetU32(&offset, &encryption_cmd.cryptoff, 3)) { @@ -1605,12 +1602,12 @@ void ObjectFileMachO::ProcessSegmentCommand(const load_command &load_cmd_, context.UnifiedList.FindSectionByName(const_segname)); if (is_dsym && unified_section_sp) { if (const_segname == GetSegmentNameLINKEDIT()) { - // We need to keep the __LINKEDIT segment private to this object - // file only + // We need to keep the __LINKEDIT segment private to this object file + // only add_to_unified = false; } else { - // This is the dSYM file and this section has already been created - // by the object file, no need to create it. + // This is the dSYM file and this section has already been created by the + // object file, no need to create it. add_section = false; } } @@ -1627,12 +1624,12 @@ void ObjectFileMachO::ProcessSegmentCommand(const load_command &load_cmd_, const bool segment_is_encrypted = (load_cmd.flags & SG_PROTECTED_VERSION_1) != 0; - // Keep a list of mach segments around in case we need to - // get at data that isn't stored in the abstracted Sections. + // Keep a list of mach segments around in case we need to get at data that + // isn't stored in the abstracted Sections. m_mach_segments.push_back(load_cmd); - // Use a segment ID of the segment index shifted left by 8 so they - // never conflict with any of the sections. + // Use a segment ID of the segment index shifted left by 8 so they never + // conflict with any of the sections. SectionSP segment_sp; if (add_section && (const_segname || is_core)) { segment_sp.reset(new Section( @@ -1640,9 +1637,8 @@ void ObjectFileMachO::ProcessSegmentCommand(const load_command &load_cmd_, this, // Object file to which this sections belongs ++context.NextSegmentIdx << 8, // Section ID is the 1 based segment index - // shifted right by 8 bits as not to collide - // with any of the 256 section IDs that are - // possible + // shifted right by 8 bits as not to collide with any of the 256 + // section IDs that are possible const_segname, // Name of this section eSectionTypeContainer, // This section is a container of other // sections. @@ -1665,27 +1661,24 @@ void ObjectFileMachO::ProcessSegmentCommand(const load_command &load_cmd_, if (is_dsym && unified_section_sp->GetFileAddress() != load_cmd.vmaddr) { // Check to see if the module was read from memory? if (module_sp->GetObjectFile()->GetHeaderAddress().IsValid()) { - // We have a module that is in memory and needs to have its - // file address adjusted. We need to do this because when we - // load a file from memory, its addresses will be slid already, - // yet the addresses in the new symbol file will still be - // unslid. Since everything is stored as section offset, this - // shouldn't cause any problems. - - // Make sure we've parsed the symbol table from the - // ObjectFile before we go around changing its Sections. + // We have a module that is in memory and needs to have its file + // address adjusted. We need to do this because when we load a file + // from memory, its addresses will be slid already, yet the addresses + // in the new symbol file will still be unslid. Since everything is + // stored as section offset, this shouldn't cause any problems. + + // Make sure we've parsed the symbol table from the ObjectFile before + // we go around changing its Sections. module_sp->GetObjectFile()->GetSymtab(); - // eh_frame would present the same problems but we parse that - // on a per-function basis as-needed so it's more difficult to - // remove its use of the Sections. Realistically, the - // environments where this code path will be taken will not - // have eh_frame sections. + // eh_frame would present the same problems but we parse that on a per- + // function basis as-needed so it's more difficult to remove its use of + // the Sections. Realistically, the environments where this code path + // will be taken will not have eh_frame sections. unified_section_sp->SetFileAddress(load_cmd.vmaddr); - // Notify the module that the section addresses have been - // changed once we're done so any file-address caches can be - // updated. + // Notify the module that the section addresses have been changed once + // we're done so any file-address caches can be updated. context.FileAddressesChanged = true; } } @@ -1694,8 +1687,8 @@ void ObjectFileMachO::ProcessSegmentCommand(const load_command &load_cmd_, struct section_64 sect64; ::memset(§64, 0, sizeof(sect64)); - // Push a section into our mach sections for the section at - // index zero (NO_SECT) if we don't have any mach sections yet... + // Push a section into our mach sections for the section at index zero + // (NO_SECT) if we don't have any mach sections yet... if (m_mach_sections.empty()) m_mach_sections.push_back(sect64); uint32_t segment_sect_idx; @@ -1716,8 +1709,8 @@ void ObjectFileMachO::ProcessSegmentCommand(const load_command &load_cmd_, if (m_data.GetU32(&offset, §64.offset, num_u32s) == NULL) break; - // Keep a list of mach sections around in case we need to - // get at data that isn't stored in the abstracted Sections. + // Keep a list of mach sections around in case we need to get at data that + // isn't stored in the abstracted Sections. m_mach_sections.push_back(sect64); if (add_section) { @@ -1725,12 +1718,12 @@ void ObjectFileMachO::ProcessSegmentCommand(const load_command &load_cmd_, sect64.sectname, std::min<size_t>(strlen(sect64.sectname), sizeof(sect64.sectname))); if (!const_segname) { - // We have a segment with no name so we need to conjure up - // segments that correspond to the section's segname if there - // isn't already such a section. If there is such a section, we - // resize the section so that it spans all sections. We also - // mark these sections as fake so address matches don't hit if - // they land in the gaps between the child sections. + // We have a segment with no name so we need to conjure up segments + // that correspond to the section's segname if there isn't already such + // a section. If there is such a section, we resize the section so that + // it spans all sections. We also mark these sections as fake so + // address matches don't hit if they land in the gaps between the child + // sections. const_segname.SetTrimmedCStringWithLength(sect64.segname, sizeof(sect64.segname)); segment_sp = context.UnifiedList.FindSectionByName(const_segname); @@ -1750,9 +1743,8 @@ void ObjectFileMachO::ProcessSegmentCommand(const load_command &load_cmd_, if (new_seg_byte_size > curr_seg_byte_size) segment->SetByteSize(new_seg_byte_size); } else { - // We need to change the base address of the segment and - // adjust the child section offsets for all existing - // children. + // We need to change the base address of the segment and adjust the + // child section offsets for all existing children. const lldb::addr_t slide_amount = sect64_min_addr - curr_seg_min_addr; segment->Slide(slide_amount, false); @@ -1905,9 +1897,9 @@ class MachSymtabSectionInfo { public: MachSymtabSectionInfo(SectionList *section_list) : m_section_list(section_list), m_section_infos() { - // Get the number of sections down to a depth of 1 to include - // all segments and their sections, but no other sections that - // may be added for debug map or + // Get the number of sections down to a depth of 1 to include all segments + // and their sections, but no other sections that may be added for debug + // map or m_section_infos.resize(section_list->GetNumSections(1)); } @@ -1935,9 +1927,9 @@ public: } else if (m_section_infos[n_sect].vm_range.GetByteSize() == 0 && m_section_infos[n_sect].vm_range.GetBaseAddress() == file_addr) { - // Symbol is in section with zero size, but has the same start - // address as the section. This can happen with linker symbols - // (symbols that start with the letter 'l' or 'L'. + // Symbol is in section with zero size, but has the same start address + // as the section. This can happen with linker symbols (symbols that + // start with the letter 'l' or 'L'. return m_section_infos[n_sect].section_sp; } } @@ -2251,10 +2243,9 @@ size_t ObjectFileMachO::ParseSymtab() { linkedit_section_sp->GetLoadBaseAddress(&target); if (linkedit_load_addr == LLDB_INVALID_ADDRESS) { // We might be trying to access the symbol table before the - // __LINKEDIT's load - // address has been set in the target. We can't fail to read the - // symbol table, - // so calculate the right address manually + // __LINKEDIT's load address has been set in the target. We can't + // fail to read the symbol table, so calculate the right address + // manually linkedit_load_addr = CalculateSectionLoadAddressForMemoryImage( m_memory_addr, GetMachHeaderSection(), linkedit_section_sp.get()); } @@ -2275,8 +2266,8 @@ size_t ObjectFileMachO::ParseSymtab() { process->GetAddressByteSize() == sizeof(void *)) { // This mach-o memory file is in the dyld shared cache. If this // program is not remote and this is iOS, then this process will - // share the same shared cache as the process we are debugging and - // we can read the entire __LINKEDIT from the address space in this + // share the same shared cache as the process we are debugging and we + // can read the entire __LINKEDIT from the address space in this // process. This is a needed optimization that is used for local iOS // debugging only since all shared libraries in the shared cache do // not have corresponding files that exist in the file system of the @@ -2285,10 +2276,9 @@ size_t ObjectFileMachO::ParseSymtab() { // string tables from all of the __LINKEDIT sections from the shared // libraries in the shared cache have been merged into a single large // symbol and string table. Reading all of this symbol and string - // table - // data across can slow down debug launch times, so we optimize this - // by - // reading the memory for the __LINKEDIT section from this process. + // table data across can slow down debug launch times, so we optimize + // this by reading the memory for the __LINKEDIT section from this + // process. UUID lldb_shared_cache(GetLLDBSharedCacheUUID()); UUID process_shared_cache(GetProcessSharedCacheUUID(process)); @@ -2324,10 +2314,9 @@ size_t ObjectFileMachO::ParseSymtab() { if (!data_was_read) { // Always load dyld - the dynamic linker - from memory if we didn't - // find a binary anywhere else. - // lldb will not register dylib/framework/bundle loads/unloads if we - // don't have the dyld symbols, - // we force dyld to load from memory despite the user's + // find a binary anywhere else. lldb will not register + // dylib/framework/bundle loads/unloads if we don't have the dyld + // symbols, we force dyld to load from memory despite the user's // target.memory-module-load-level setting. if (memory_module_load_level == eMemoryModuleLoadLevelComplete || m_header.filetype == llvm::MachO::MH_DYLINKER) { @@ -2337,10 +2326,9 @@ size_t ObjectFileMachO::ParseSymtab() { nlist_data.SetData(nlist_data_sp, 0, nlist_data_sp->GetByteSize()); // Load strings individually from memory when loading from memory - // since shared cache - // string tables contain strings for all symbols from all shared - // cached libraries - // DataBufferSP strtab_data_sp (ReadMemory (process_sp, strtab_addr, + // since shared cache string tables contain strings for all symbols + // from all shared cached libraries DataBufferSP strtab_data_sp + // (ReadMemory (process_sp, strtab_addr, // strtab_data_byte_size)); // if (strtab_data_sp) // strtab_data.SetData (strtab_data_sp, 0, @@ -2444,11 +2432,9 @@ size_t ObjectFileMachO::ParseSymtab() { const bool is_arm = (m_header.cputype == llvm::MachO::CPU_TYPE_ARM); // lldb works best if it knows the start address of all functions in a - // module. - // Linker symbols or debug info are normally the best source of information - // for start addr / size but - // they may be stripped in a released binary. - // Two additional sources of information exist in Mach-O binaries: + // module. Linker symbols or debug info are normally the best source of + // information for start addr / size but they may be stripped in a released + // binary. Two additional sources of information exist in Mach-O binaries: // LC_FUNCTION_STARTS - a list of ULEB128 encoded offsets of each // function's start address in the // binary, relative to the text section. @@ -2473,12 +2459,10 @@ size_t ObjectFileMachO::ParseSymtab() { } } else { // If m_type is eTypeDebugInfo, then this is a dSYM - it will have the - // load command claiming an eh_frame - // but it doesn't actually have the eh_frame content. And if we have a - // dSYM, we don't need to do any - // of this fill-in-the-missing-symbols works anyway - the debug info - // should give us all the functions in - // the module. + // load command claiming an eh_frame but it doesn't actually have the + // eh_frame content. And if we have a dSYM, we don't need to do any of + // this fill-in-the-missing-symbols works anyway - the debug info should + // give us all the functions in the module. if (text_section_sp.get() && eh_frame_section_sp.get() && m_type != eTypeDebugInfo) { DWARFCallFrameInfo eh_frame(*this, eh_frame_section_sp, @@ -2502,18 +2486,14 @@ size_t ObjectFileMachO::ParseSymtab() { const size_t function_starts_count = function_starts.GetSize(); // For user process binaries (executables, dylibs, frameworks, bundles), if - // we don't have - // LC_FUNCTION_STARTS/eh_frame section in this binary, we're going to assume - // the binary - // has been stripped. Don't allow assembly language instruction emulation - // because we don't - // know proper function start boundaries. + // we don't have LC_FUNCTION_STARTS/eh_frame section in this binary, we're + // going to assume the binary has been stripped. Don't allow assembly + // language instruction emulation because we don't know proper function + // start boundaries. // // For all other types of binaries (kernels, stand-alone bare board - // binaries, kexts), they - // may not have LC_FUNCTION_STARTS / eh_frame sections - we should not make - // any assumptions - // about them based on that. + // binaries, kexts), they may not have LC_FUNCTION_STARTS / eh_frame + // sections - we should not make any assumptions about them based on that. if (function_starts_count == 0 && CalculateStrata() == eStrataUser) { m_allow_assembly_emulation_unwind_plans = false; Log *unwind_or_symbol_log(lldb_private::GetLogIfAnyCategoriesSet( @@ -2545,8 +2525,8 @@ size_t ObjectFileMachO::ParseSymtab() { ValueToSymbolIndexMap N_FUN_addr_to_sym_idx; ValueToSymbolIndexMap N_STSYM_addr_to_sym_idx; ConstNameToSymbolIndexMap N_GSYM_name_to_sym_idx; - // Any symbols that get merged into another will get an entry - // in this map so we know + // Any symbols that get merged into another will get an entry in this map + // so we know NListIndexToSymbolIndexMap m_nlist_idx_to_sym_idx; uint32_t nlist_idx = 0; Symbol *symbol_ptr = NULL; @@ -2585,21 +2565,18 @@ size_t ObjectFileMachO::ParseSymtab() { (defined(__arm__) || defined(__arm64__) || defined(__aarch64__)) // Some recent builds of the dyld_shared_cache (hereafter: DSC) have been - // optimized by moving LOCAL - // symbols out of the memory mapped portion of the DSC. The symbol - // information has all been retained, - // but it isn't available in the normal nlist data. However, there *are* - // duplicate entries of *some* + // optimized by moving LOCAL symbols out of the memory mapped portion of + // the DSC. The symbol information has all been retained, but it isn't + // available in the normal nlist data. However, there *are* duplicate + // entries of *some* // LOCAL symbols in the normal nlist data. To handle this situation // correctly, we must first attempt // to parse any DSC unmapped symbol information. If we find any, we set a - // flag that tells the normal - // nlist parser to ignore all LOCAL symbols. + // flag that tells the normal nlist parser to ignore all LOCAL symbols. if (m_header.flags & 0x80000000u) { - // Before we can start mapping the DSC, we need to make certain the target - // process is actually - // using the cache we can find. + // Before we can start mapping the DSC, we need to make certain the + // target process is actually using the cache we can find. // Next we need to determine the correct path for the dyld shared cache. @@ -2633,9 +2610,9 @@ size_t ObjectFileMachO::ParseSymtab() { process_shared_cache_uuid = GetProcessSharedCacheUUID(process); } - // First see if we can find an exact match for the inferior process shared - // cache UUID in - // the development or non-development shared caches on disk. + // First see if we can find an exact match for the inferior process + // shared cache UUID in the development or non-development shared caches + // on disk. if (process_shared_cache_uuid.IsValid()) { if (dsc_development_filespec.Exists()) { UUID dsc_development_uuid = GetSharedCacheUUID( @@ -2700,8 +2677,7 @@ size_t ObjectFileMachO::ParseSymtab() { if (process_shared_cache_uuid.IsValid() && dsc_uuid != process_shared_cache_uuid) { // The on-disk dyld_shared_cache file is not the same as the one in - // this - // process' memory, don't use it. + // this process' memory, don't use it. uuid_match = false; ModuleSP module_sp(GetModule()); if (module_sp) @@ -2729,11 +2705,9 @@ size_t ObjectFileMachO::ParseSymtab() { offset = 0; // The File addresses (from the in-memory Mach-O load commands) for - // the shared libraries - // in the shared library cache need to be adjusted by an offset to - // match up with the - // dylibOffset identifying field in the - // dyld_cache_local_symbol_entry's. This offset is + // the shared libraries in the shared library cache need to be + // adjusted by an offset to match up with the dylibOffset identifying + // field in the dyld_cache_local_symbol_entry's. This offset is // recorded in mapping_offset_value. const uint64_t mapping_offset_value = dsc_mapping_info_data.GetU64(&offset); @@ -2827,8 +2801,8 @@ size_t ObjectFileMachO::ParseSymtab() { if (symbol_name == NULL) { // No symbol should be NULL, even the symbols with no - // string values should have an offset zero which points - // to an empty C-string + // string values should have an offset zero which + // points to an empty C-string Host::SystemLog( Host::eSystemLogError, "error: DSC unmapped local symbol[%u] has invalid " @@ -2863,14 +2837,13 @@ size_t ObjectFileMachO::ParseSymtab() { // FIXME: In the .o files, we have a GSYM and a debug // symbol for all the ObjC data. They // have the same address, but we want to ensure that - // we always find only the real symbol, - // 'cause we don't currently correctly attribute the + // we always find only the real symbol, 'cause we + // don't currently correctly attribute the // GSYM one to the ObjCClass/Ivar/MetaClass - // symbol type. This is a temporary hack to make sure - // the ObjectiveC symbols get treated - // correctly. To do this right, we should coalesce - // all the GSYM & global symbols that have the - // same address. + // symbol type. This is a temporary hack to make + // sure the ObjectiveC symbols get treated correctly. + // To do this right, we should coalesce all the GSYM + // & global symbols that have the same address. is_gsym = true; sym[sym_idx].SetExternal(true); @@ -2924,25 +2897,24 @@ size_t ObjectFileMachO::ParseSymtab() { N_FUN_addr_to_sym_idx.insert( std::make_pair(nlist.n_value, sym_idx)); // We use the current number of symbols in the - // symbol table in lieu of - // using nlist_idx in case we ever start trimming - // entries out + // symbol table in lieu of using nlist_idx in case + // we ever start trimming entries out N_FUN_indexes.push_back(sym_idx); } else { type = eSymbolTypeCompiler; if (!N_FUN_indexes.empty()) { - // Copy the size of the function into the original + // Copy the size of the function into the + // original // STAB entry so we don't have // to hunt for it later symtab->SymbolAtIndex(N_FUN_indexes.back()) ->SetByteSize(nlist.n_value); N_FUN_indexes.pop_back(); // We don't really need the end function STAB as - // it contains the size which - // we already placed with the original symbol, so - // don't add it if we want a - // minimal symbol table + // it contains the size which we already placed + // with the original symbol, so don't add it if + // we want a minimal symbol table add_nlist = false; } } @@ -2969,19 +2941,17 @@ size_t ObjectFileMachO::ParseSymtab() { case N_BNSYM: // We use the current number of symbols in the symbol - // table in lieu of - // using nlist_idx in case we ever start trimming - // entries out - // Skip these if we want minimal symbol tables + // table in lieu of using nlist_idx in case we ever + // start trimming entries out Skip these if we want + // minimal symbol tables add_nlist = false; break; case N_ENSYM: // Set the size of the N_BNSYM to the terminating - // index of this N_ENSYM - // so that we can always skip the entire symbol if we - // need to navigate - // more quickly at the source level when parsing STABS + // index of this N_ENSYM so that we can always skip + // the entire symbol if we need to navigate more + // quickly at the source level when parsing STABS // Skip these if we want minimal symbol tables add_nlist = false; break; @@ -3015,11 +2985,9 @@ size_t ObjectFileMachO::ParseSymtab() { add_nlist = false; if (N_SO_index != UINT32_MAX) { // Set the size of the N_SO to the terminating - // index of this N_SO - // so that we can always skip the entire N_SO if - // we need to navigate - // more quickly at the source level when parsing - // STABS + // index of this N_SO so that we can always skip + // the entire N_SO if we need to navigate more + // quickly at the source level when parsing STABS symbol_ptr = symtab->SymbolAtIndex(N_SO_index); symbol_ptr->SetByteSize(sym_idx); symbol_ptr->SetSizeIsSibling(true); @@ -3032,17 +3000,16 @@ size_t ObjectFileMachO::ParseSymtab() { N_SO_index = UINT32_MAX; } else { // We use the current number of symbols in the - // symbol table in lieu of - // using nlist_idx in case we ever start trimming - // entries out + // symbol table in lieu of using nlist_idx in case + // we ever start trimming entries out const bool N_SO_has_full_path = symbol_name[0] == '/'; if (N_SO_has_full_path) { if ((N_SO_index == sym_idx - 1) && ((sym_idx - 1) < num_syms)) { // We have two consecutive N_SO entries where - // the first contains a directory - // and the second contains a full path. + // the first contains a directory and the + // second contains a full path. sym[sym_idx - 1].GetMangled().SetValue( ConstString(symbol_name), false); m_nlist_idx_to_sym_idx[nlist_idx] = sym_idx - 1; @@ -3056,9 +3023,9 @@ size_t ObjectFileMachO::ParseSymtab() { } else if ((N_SO_index == sym_idx - 1) && ((sym_idx - 1) < num_syms)) { // This is usually the second N_SO entry that - // contains just the filename, - // so here we combine it with the first one if we - // are minimizing the symbol table + // contains just the filename, so here we combine + // it with the first one if we are minimizing the + // symbol table const char *so_path = sym[sym_idx - 1] .GetMangled() @@ -3072,11 +3039,11 @@ size_t ObjectFileMachO::ParseSymtab() { if (double_slash_pos != std::string::npos) { // The linker has been generating bad N_SO // entries with doubled up paths - // in the format "%s%s" where the first string - // in the DW_AT_comp_dir, - // and the second is the directory for the - // source file so you end up with - // a path that looks like "/tmp/src//tmp/src/" + // in the format "%s%s" where the first + // string in the DW_AT_comp_dir, and the + // second is the directory for the source + // file so you end up with a path that looks + // like "/tmp/src//tmp/src/" FileSpec so_dir(so_path, false); if (!so_dir.Exists()) { so_dir.SetFile( @@ -3118,11 +3085,10 @@ size_t ObjectFileMachO::ParseSymtab() { // INCL scopes //---------------------------------------------------------------------- case N_BINCL: - // include file beginning: name,,NO_SECT,0,sum - // We use the current number of symbols in the symbol - // table in lieu of - // using nlist_idx in case we ever start trimming - // entries out + // include file beginning: name,,NO_SECT,0,sum We use + // the current number of symbols in the symbol table + // in lieu of using nlist_idx in case we ever start + // trimming entries out N_INCL_indexes.push_back(sym_idx); type = eSymbolTypeScopeBegin; break; @@ -3130,10 +3096,9 @@ size_t ObjectFileMachO::ParseSymtab() { case N_EINCL: // include file end: name,,NO_SECT,0,0 // Set the size of the N_BINCL to the terminating - // index of this N_EINCL - // so that we can always skip the entire symbol if we - // need to navigate - // more quickly at the source level when parsing STABS + // index of this N_EINCL so that we can always skip + // the entire symbol if we need to navigate more + // quickly at the source level when parsing STABS if (!N_INCL_indexes.empty()) { symbol_ptr = symtab->SymbolAtIndex(N_INCL_indexes.back()); @@ -3183,11 +3148,10 @@ size_t ObjectFileMachO::ParseSymtab() { // Left and Right Braces //---------------------------------------------------------------------- case N_LBRAC: - // left bracket: 0,,NO_SECT,nesting level,address - // We use the current number of symbols in the symbol - // table in lieu of - // using nlist_idx in case we ever start trimming - // entries out + // left bracket: 0,,NO_SECT,nesting level,address We + // use the current number of symbols in the symbol + // table in lieu of using nlist_idx in case we ever + // start trimming entries out symbol_section = section_info.GetSection( nlist.n_sect, nlist.n_value); N_BRAC_indexes.push_back(sym_idx); @@ -3197,10 +3161,9 @@ size_t ObjectFileMachO::ParseSymtab() { case N_RBRAC: // right bracket: 0,,NO_SECT,nesting level,address // Set the size of the N_LBRAC to the terminating - // index of this N_RBRAC - // so that we can always skip the entire symbol if we - // need to navigate - // more quickly at the source level when parsing STABS + // index of this N_RBRAC so that we can always skip + // the entire symbol if we need to navigate more + // quickly at the source level when parsing STABS symbol_section = section_info.GetSection( nlist.n_sect, nlist.n_value); if (!N_BRAC_indexes.empty()) { @@ -3224,9 +3187,8 @@ size_t ObjectFileMachO::ParseSymtab() { case N_BCOMM: // begin common: name,,NO_SECT,0,0 // We use the current number of symbols in the symbol - // table in lieu of - // using nlist_idx in case we ever start trimming - // entries out + // table in lieu of using nlist_idx in case we ever + // start trimming entries out type = eSymbolTypeScopeBegin; N_COMM_indexes.push_back(sym_idx); break; @@ -3240,10 +3202,10 @@ size_t ObjectFileMachO::ParseSymtab() { case N_ECOMM: // end common: name,,n_sect,0,0 // Set the size of the N_BCOMM to the terminating - // index of this N_ECOMM/N_ECOML - // so that we can always skip the entire symbol if we - // need to navigate - // more quickly at the source level when parsing STABS + // index of this N_ECOMM/N_ECOML so that we can + // always skip the entire symbol if we need to + // navigate more quickly at the source level when + // parsing STABS if (!N_COMM_indexes.empty()) { symbol_ptr = symtab->SymbolAtIndex(N_COMM_indexes.back()); @@ -3533,16 +3495,16 @@ size_t ObjectFileMachO::ParseSymtab() { function_starts_count > 0) { addr_t symbol_lookup_file_addr = nlist.n_value; // Do an exact address match for non-ARM addresses, - // else get the closest since - // the symbol might be a thumb symbol which has an - // address with bit zero set + // else get the closest since the symbol might be a + // thumb symbol which has an address with bit zero + // set FunctionStarts::Entry *func_start_entry = function_starts.FindEntry( symbol_lookup_file_addr, !is_arm); if (is_arm && func_start_entry) { // Verify that the function start address is the - // symbol address (ARM) - // or the symbol address + 1 (thumb) + // symbol address (ARM) or the symbol address + 1 + // (thumb) if (func_start_entry->addr != symbol_lookup_file_addr && func_start_entry->addr != @@ -3574,8 +3536,8 @@ size_t ObjectFileMachO::ParseSymtab() { addr_t next_symbol_file_addr = next_func_start_entry->addr; // Be sure the clear the Thumb address bit when - // we calculate the size - // from the current and next address + // we calculate the size from the current and + // next address if (is_arm) next_symbol_file_addr &= THUMB_ADDRESS_BIT_MASK; @@ -3594,12 +3556,10 @@ size_t ObjectFileMachO::ParseSymtab() { if (is_debug == false) { if (type == eSymbolTypeCode) { // See if we can find a N_FUN entry for any code - // symbols. - // If we do find a match, and the name matches, then - // we - // can merge the two into just the function symbol - // to avoid - // duplicate entries in the symbol table + // symbols. If we do find a match, and the name + // matches, then we can merge the two into just the + // function symbol to avoid duplicate entries in + // the symbol table std::pair<ValueToSymbolIndexMap::const_iterator, ValueToSymbolIndexMap::const_iterator> range; @@ -3647,12 +3607,10 @@ size_t ObjectFileMachO::ParseSymtab() { type == eSymbolTypeObjCMetaClass || type == eSymbolTypeObjCIVar) { // See if we can find a N_STSYM entry for any data - // symbols. - // If we do find a match, and the name matches, then - // we - // can merge the two into just the Static symbol to - // avoid - // duplicate entries in the symbol table + // symbols. If we do find a match, and the name + // matches, then we can merge the two into just the + // Static symbol to avoid duplicate entries in the + // symbol table std::pair<ValueToSymbolIndexMap::const_iterator, ValueToSymbolIndexMap::const_iterator> range; @@ -3694,8 +3652,8 @@ size_t ObjectFileMachO::ParseSymtab() { Mangled::ePreferMangled) .GetCString(); if (gsym_name) { - // Combine N_GSYM stab entries with the non stab - // symbol + // Combine N_GSYM stab entries with the non + // stab symbol ConstNameToSymbolIndexMap::const_iterator pos = N_GSYM_name_to_sym_idx.find(gsym_name); if (pos != N_GSYM_name_to_sym_idx.end()) { @@ -3811,9 +3769,8 @@ size_t ObjectFileMachO::ParseSymtab() { symbol_name = strtab_data.PeekCStr(nlist.n_strx); if (symbol_name == NULL) { - // No symbol should be NULL, even the symbols with no - // string values should have an offset zero which points - // to an empty C-string + // No symbol should be NULL, even the symbols with no string values + // should have an offset zero which points to an empty C-string Host::SystemLog(Host::eSystemLogError, "error: symbol[%u] has invalid string table offset " "0x%x in %s, ignoring symbol\n", @@ -3852,14 +3809,12 @@ size_t ObjectFileMachO::ParseSymtab() { // FIXME: In the .o files, we have a GSYM and a debug symbol for all // the ObjC data. They // have the same address, but we want to ensure that we always find - // only the real symbol, - // 'cause we don't currently correctly attribute the GSYM one to the - // ObjCClass/Ivar/MetaClass - // symbol type. This is a temporary hack to make sure the - // ObjectiveC symbols get treated - // correctly. To do this right, we should coalesce all the GSYM & - // global symbols that have the - // same address. + // only the real symbol, 'cause we don't currently correctly + // attribute the GSYM one to the ObjCClass/Ivar/MetaClass symbol + // type. This is a temporary hack to make sure the ObjectiveC + // symbols get treated correctly. To do this right, we should + // coalesce all the GSYM & global symbols that have the same + // address. is_gsym = true; sym[sym_idx].SetExternal(true); @@ -3906,24 +3861,21 @@ size_t ObjectFileMachO::ParseSymtab() { N_FUN_addr_to_sym_idx.insert( std::make_pair(nlist.n_value, sym_idx)); // We use the current number of symbols in the symbol table in - // lieu of - // using nlist_idx in case we ever start trimming entries out + // lieu of using nlist_idx in case we ever start trimming entries + // out N_FUN_indexes.push_back(sym_idx); } else { type = eSymbolTypeCompiler; if (!N_FUN_indexes.empty()) { - // Copy the size of the function into the original STAB entry so - // we don't have - // to hunt for it later + // Copy the size of the function into the original STAB entry + // so we don't have to hunt for it later symtab->SymbolAtIndex(N_FUN_indexes.back()) ->SetByteSize(nlist.n_value); N_FUN_indexes.pop_back(); - // We don't really need the end function STAB as it contains the - // size which - // we already placed with the original symbol, so don't add it - // if we want a - // minimal symbol table + // We don't really need the end function STAB as it contains + // the size which we already placed with the original symbol, + // so don't add it if we want a minimal symbol table add_nlist = false; } } @@ -3950,18 +3902,15 @@ size_t ObjectFileMachO::ParseSymtab() { case N_BNSYM: // We use the current number of symbols in the symbol table in lieu - // of - // using nlist_idx in case we ever start trimming entries out + // of using nlist_idx in case we ever start trimming entries out // Skip these if we want minimal symbol tables add_nlist = false; break; case N_ENSYM: // Set the size of the N_BNSYM to the terminating index of this - // N_ENSYM - // so that we can always skip the entire symbol if we need to - // navigate - // more quickly at the source level when parsing STABS + // N_ENSYM so that we can always skip the entire symbol if we need + // to navigate more quickly at the source level when parsing STABS // Skip these if we want minimal symbol tables add_nlist = false; break; @@ -3995,10 +3944,9 @@ size_t ObjectFileMachO::ParseSymtab() { add_nlist = false; if (N_SO_index != UINT32_MAX) { // Set the size of the N_SO to the terminating index of this - // N_SO - // so that we can always skip the entire N_SO if we need to - // navigate - // more quickly at the source level when parsing STABS + // N_SO so that we can always skip the entire N_SO if we need + // to navigate more quickly at the source level when parsing + // STABS symbol_ptr = symtab->SymbolAtIndex(N_SO_index); symbol_ptr->SetByteSize(sym_idx); symbol_ptr->SetSizeIsSibling(true); @@ -4011,30 +3959,27 @@ size_t ObjectFileMachO::ParseSymtab() { N_SO_index = UINT32_MAX; } else { // We use the current number of symbols in the symbol table in - // lieu of - // using nlist_idx in case we ever start trimming entries out + // lieu of using nlist_idx in case we ever start trimming entries + // out const bool N_SO_has_full_path = symbol_name[0] == '/'; if (N_SO_has_full_path) { if ((N_SO_index == sym_idx - 1) && ((sym_idx - 1) < num_syms)) { // We have two consecutive N_SO entries where the first - // contains a directory - // and the second contains a full path. + // contains a directory and the second contains a full path. sym[sym_idx - 1].GetMangled().SetValue( ConstString(symbol_name), false); m_nlist_idx_to_sym_idx[nlist_idx] = sym_idx - 1; add_nlist = false; } else { - // This is the first entry in a N_SO that contains a directory - // or - // a full path to the source file + // This is the first entry in a N_SO that contains a + // directory or a full path to the source file N_SO_index = sym_idx; } } else if ((N_SO_index == sym_idx - 1) && ((sym_idx - 1) < num_syms)) { // This is usually the second N_SO entry that contains just the - // filename, - // so here we combine it with the first one if we are minimizing - // the symbol table + // filename, so here we combine it with the first one if we are + // minimizing the symbol table const char *so_path = sym[sym_idx - 1] .GetMangled() @@ -4045,12 +3990,10 @@ size_t ObjectFileMachO::ParseSymtab() { const size_t double_slash_pos = full_so_path.find("//"); if (double_slash_pos != std::string::npos) { // The linker has been generating bad N_SO entries with - // doubled up paths - // in the format "%s%s" where the first string in the - // DW_AT_comp_dir, - // and the second is the directory for the source file so - // you end up with - // a path that looks like "/tmp/src//tmp/src/" + // doubled up paths in the format "%s%s" where the first + // string in the DW_AT_comp_dir, and the second is the + // directory for the source file so you end up with a path + // that looks like "/tmp/src//tmp/src/" FileSpec so_dir(so_path, false); if (!so_dir.Exists()) { so_dir.SetFile(&full_so_path[double_slash_pos + 1], @@ -4090,10 +4033,9 @@ size_t ObjectFileMachO::ParseSymtab() { // INCL scopes //---------------------------------------------------------------------- case N_BINCL: - // include file beginning: name,,NO_SECT,0,sum - // We use the current number of symbols in the symbol table in lieu - // of - // using nlist_idx in case we ever start trimming entries out + // include file beginning: name,,NO_SECT,0,sum We use the current + // number of symbols in the symbol table in lieu of using nlist_idx + // in case we ever start trimming entries out N_INCL_indexes.push_back(sym_idx); type = eSymbolTypeScopeBegin; break; @@ -4101,10 +4043,8 @@ size_t ObjectFileMachO::ParseSymtab() { case N_EINCL: // include file end: name,,NO_SECT,0,0 // Set the size of the N_BINCL to the terminating index of this - // N_EINCL - // so that we can always skip the entire symbol if we need to - // navigate - // more quickly at the source level when parsing STABS + // N_EINCL so that we can always skip the entire symbol if we need + // to navigate more quickly at the source level when parsing STABS if (!N_INCL_indexes.empty()) { symbol_ptr = symtab->SymbolAtIndex(N_INCL_indexes.back()); symbol_ptr->SetByteSize(sym_idx + 1); @@ -4153,10 +4093,9 @@ size_t ObjectFileMachO::ParseSymtab() { // Left and Right Braces //---------------------------------------------------------------------- case N_LBRAC: - // left bracket: 0,,NO_SECT,nesting level,address - // We use the current number of symbols in the symbol table in lieu - // of - // using nlist_idx in case we ever start trimming entries out + // left bracket: 0,,NO_SECT,nesting level,address We use the + // current number of symbols in the symbol table in lieu of using + // nlist_idx in case we ever start trimming entries out symbol_section = section_info.GetSection(nlist.n_sect, nlist.n_value); N_BRAC_indexes.push_back(sym_idx); @@ -4164,12 +4103,10 @@ size_t ObjectFileMachO::ParseSymtab() { break; case N_RBRAC: - // right bracket: 0,,NO_SECT,nesting level,address - // Set the size of the N_LBRAC to the terminating index of this - // N_RBRAC - // so that we can always skip the entire symbol if we need to - // navigate - // more quickly at the source level when parsing STABS + // right bracket: 0,,NO_SECT,nesting level,address Set the size of + // the N_LBRAC to the terminating index of this N_RBRAC so that we + // can always skip the entire symbol if we need to navigate more + // quickly at the source level when parsing STABS symbol_section = section_info.GetSection(nlist.n_sect, nlist.n_value); if (!N_BRAC_indexes.empty()) { @@ -4192,8 +4129,7 @@ size_t ObjectFileMachO::ParseSymtab() { case N_BCOMM: // begin common: name,,NO_SECT,0,0 // We use the current number of symbols in the symbol table in lieu - // of - // using nlist_idx in case we ever start trimming entries out + // of using nlist_idx in case we ever start trimming entries out type = eSymbolTypeScopeBegin; N_COMM_indexes.push_back(sym_idx); break; @@ -4207,10 +4143,9 @@ size_t ObjectFileMachO::ParseSymtab() { case N_ECOMM: // end common: name,,n_sect,0,0 // Set the size of the N_BCOMM to the terminating index of this - // N_ECOMM/N_ECOML - // so that we can always skip the entire symbol if we need to - // navigate - // more quickly at the source level when parsing STABS + // N_ECOMM/N_ECOML so that we can always skip the entire symbol if + // we need to navigate more quickly at the source level when + // parsing STABS if (!N_COMM_indexes.empty()) { symbol_ptr = symtab->SymbolAtIndex(N_COMM_indexes.back()); symbol_ptr->SetByteSize(sym_idx + 1); @@ -4470,15 +4405,13 @@ size_t ObjectFileMachO::ParseSymtab() { if (symbol_byte_size == 0 && function_starts_count > 0) { addr_t symbol_lookup_file_addr = nlist.n_value; // Do an exact address match for non-ARM addresses, else get the - // closest since - // the symbol might be a thumb symbol which has an address with - // bit zero set + // closest since the symbol might be a thumb symbol which has an + // address with bit zero set FunctionStarts::Entry *func_start_entry = function_starts.FindEntry(symbol_lookup_file_addr, !is_arm); if (is_arm && func_start_entry) { // Verify that the function start address is the symbol address - // (ARM) - // or the symbol address + 1 (thumb) + // (ARM) or the symbol address + 1 (thumb) if (func_start_entry->addr != symbol_lookup_file_addr && func_start_entry->addr != (symbol_lookup_file_addr + 1)) { // Not the right entry, NULL it out... @@ -4499,8 +4432,7 @@ size_t ObjectFileMachO::ParseSymtab() { if (next_func_start_entry) { addr_t next_symbol_file_addr = next_func_start_entry->addr; // Be sure the clear the Thumb address bit when we calculate - // the size - // from the current and next address + // the size from the current and next address if (is_arm) next_symbol_file_addr &= THUMB_ADDRESS_BIT_MASK; symbol_byte_size = std::min<lldb::addr_t>( @@ -4516,10 +4448,10 @@ size_t ObjectFileMachO::ParseSymtab() { if (is_debug == false) { if (type == eSymbolTypeCode) { - // See if we can find a N_FUN entry for any code symbols. - // If we do find a match, and the name matches, then we - // can merge the two into just the function symbol to avoid - // duplicate entries in the symbol table + // See if we can find a N_FUN entry for any code symbols. If we + // do find a match, and the name matches, then we can merge the + // two into just the function symbol to avoid duplicate entries + // in the symbol table std::pair<ValueToSymbolIndexMap::const_iterator, ValueToSymbolIndexMap::const_iterator> range; @@ -4536,9 +4468,8 @@ size_t ObjectFileMachO::ParseSymtab() { Mangled::ePreferMangled)) { m_nlist_idx_to_sym_idx[nlist_idx] = pos->second; // We just need the flags from the linker symbol, so put - // these flags - // into the N_FUN flags to avoid duplicate symbols in the - // symbol table + // these flags into the N_FUN flags to avoid duplicate + // symbols in the symbol table sym[pos->second].SetExternal(sym[sym_idx].IsExternal()); sym[pos->second].SetFlags(nlist.n_type << 16 | nlist.n_desc); @@ -4561,10 +4492,10 @@ size_t ObjectFileMachO::ParseSymtab() { type == eSymbolTypeObjCClass || type == eSymbolTypeObjCMetaClass || type == eSymbolTypeObjCIVar) { - // See if we can find a N_STSYM entry for any data symbols. - // If we do find a match, and the name matches, then we - // can merge the two into just the Static symbol to avoid - // duplicate entries in the symbol table + // See if we can find a N_STSYM entry for any data symbols. If we + // do find a match, and the name matches, then we can merge the + // two into just the Static symbol to avoid duplicate entries in + // the symbol table std::pair<ValueToSymbolIndexMap::const_iterator, ValueToSymbolIndexMap::const_iterator> range; @@ -4581,9 +4512,8 @@ size_t ObjectFileMachO::ParseSymtab() { Mangled::ePreferMangled)) { m_nlist_idx_to_sym_idx[nlist_idx] = pos->second; // We just need the flags from the linker symbol, so put - // these flags - // into the N_STSYM flags to avoid duplicate symbols in the - // symbol table + // these flags into the N_STSYM flags to avoid duplicate + // symbols in the symbol table sym[pos->second].SetExternal(sym[sym_idx].IsExternal()); sym[pos->second].SetFlags(nlist.n_type << 16 | nlist.n_desc); @@ -4607,16 +4537,15 @@ size_t ObjectFileMachO::ParseSymtab() { if (pos != N_GSYM_name_to_sym_idx.end()) { const uint32_t GSYM_sym_idx = pos->second; m_nlist_idx_to_sym_idx[nlist_idx] = GSYM_sym_idx; - // Copy the address, because often the N_GSYM address has an - // invalid address of zero - // when the global is a common symbol + // Copy the address, because often the N_GSYM address has + // an invalid address of zero when the global is a common + // symbol sym[GSYM_sym_idx].GetAddressRef().SetSection( symbol_section); sym[GSYM_sym_idx].GetAddressRef().SetOffset(symbol_value); // We just need the flags from the linker symbol, so put - // these flags - // into the N_GSYM flags to avoid duplicate symbols in the - // symbol table + // these flags into the N_GSYM flags to avoid duplicate + // symbols in the symbol table sym[GSYM_sym_idx].SetFlags(nlist.n_type << 16 | nlist.n_desc); sym[sym_idx].Clear(); @@ -4723,8 +4652,8 @@ size_t ObjectFileMachO::ParseSymtab() { } } - // Trim our symbols down to just what we ended up with after - // removing any symbols. + // Trim our symbols down to just what we ended up with after removing any + // symbols. if (sym_idx < num_syms) { num_syms = sym_idx; sym = symtab->Resize(num_syms); @@ -4772,13 +4701,12 @@ size_t ObjectFileMachO::ParseSymtab() { m_nlist_idx_to_sym_idx.find(stub_sym_id); Symbol *stub_symbol = NULL; if (index_pos != end_index_pos) { - // We have a remapping from the original nlist index to - // a current symbol index, so just look this up by index + // We have a remapping from the original nlist index to a + // current symbol index, so just look this up by index stub_symbol = symtab->SymbolAtIndex(index_pos->second); } else { - // We need to lookup a symbol using the original nlist - // symbol index since this index is coming from the - // S_SYMBOL_STUBS + // We need to lookup a symbol using the original nlist symbol + // index since this index is coming from the S_SYMBOL_STUBS stub_symbol = symtab->FindSymbolByID(stub_sym_id); } @@ -4787,12 +4715,9 @@ size_t ObjectFileMachO::ParseSymtab() { if (stub_symbol->GetType() == eSymbolTypeUndefined) { // Change the external symbol into a trampoline that makes - // sense - // These symbols were N_UNDF N_EXT, and are useless to us, - // so we - // can re-use them so we don't have to make up a synthetic - // symbol - // for no good reason. + // sense These symbols were N_UNDF N_EXT, and are useless + // to us, so we can re-use them so we don't have to make up + // a synthetic symbol for no good reason. if (resolver_addresses.find(symbol_stub_addr) == resolver_addresses.end()) stub_symbol->SetType(eSymbolTypeTrampoline); @@ -4837,8 +4762,8 @@ size_t ObjectFileMachO::ParseSymtab() { if (!trie_entries.empty()) { for (const auto &e : trie_entries) { if (e.entry.import_name) { - // Only add indirect symbols from the Trie entries if we - // didn't have a N_INDR nlist entry for this already + // Only add indirect symbols from the Trie entries if we didn't have + // a N_INDR nlist entry for this already if (indirect_symbol_names.find(e.entry.name) == indirect_symbol_names.end()) { // Make a synthetic symbol to describe re-exported symbol. @@ -4952,16 +4877,16 @@ bool ObjectFileMachO::GetArchitecture(const llvm::MachO::mach_header &header, if (header.filetype == MH_PRELOAD) { if (header.cputype == CPU_TYPE_ARM) { - // If this is a 32-bit arm binary, and it's a standalone binary, - // force the Vendor to Apple so we don't accidentally pick up - // the generic armv7 ABI at runtime. Apple's armv7 ABI always uses - // r7 for the frame pointer register; most other armv7 ABIs use a - // combination of r7 and r11. + // If this is a 32-bit arm binary, and it's a standalone binary, force + // the Vendor to Apple so we don't accidentally pick up the generic + // armv7 ABI at runtime. Apple's armv7 ABI always uses r7 for the + // frame pointer register; most other armv7 ABIs use a combination of + // r7 and r11. triple.setVendor(llvm::Triple::Apple); } else { // Set vendor to an unspecified unknown or a "*" so it can match any - // vendor - // This is required for correct behavior of EFI debugging on x86_64 + // vendor This is required for correct behavior of EFI debugging on + // x86_64 triple.setVendor(llvm::Triple::UnknownVendor); triple.setVendorName(llvm::StringRef()); } @@ -5032,7 +4957,8 @@ uint32_t ObjectFileMachO::GetDependentModules(FileSpecList &files) { std::vector<std::string> rpath_relative_paths; std::vector<std::string> at_exec_relative_paths; const bool resolve_path = false; // Don't resolve the dependent file paths - // since they may not reside on this system + // since they may not reside on this + // system uint32_t i; for (i = 0; i < m_header.ncmds; ++i) { const uint32_t cmd_offset = offset; @@ -5096,8 +5022,8 @@ uint32_t ObjectFileMachO::GetDependentModules(FileSpecList &files) { for (const auto &rpath : rpath_paths) { std::string path = rpath; path += rpath_relative_path; - // It is OK to resolve this path because we must find a file on - // disk for us to accept it anyway if it is rpath relative. + // It is OK to resolve this path because we must find a file on disk + // for us to accept it anyway if it is rpath relative. FileSpec file_spec(path, true); if (file_spec.Exists() && files.AppendIfUnique(file_spec)) { count++; @@ -5126,17 +5052,15 @@ uint32_t ObjectFileMachO::GetDependentModules(FileSpecList &files) { lldb_private::Address ObjectFileMachO::GetEntryPointAddress() { // If the object file is not an executable it can't hold the entry point. - // m_entry_point_address - // is initialized to an invalid address, so we can just return that. - // If m_entry_point_address is valid it means we've found it already, so - // return the cached value. + // m_entry_point_address is initialized to an invalid address, so we can just + // return that. If m_entry_point_address is valid it means we've found it + // already, so return the cached value. if (!IsExecutable() || m_entry_point_address.IsValid()) return m_entry_point_address; // Otherwise, look for the UnixThread or Thread command. The data for the - // Thread command is given in - // /usr/include/mach-o.h, but it is basically: + // Thread command is given in /usr/include/mach-o.h, but it is basically: // // uint32_t flavor - this is the flavor argument you would pass to // thread_get_state @@ -5150,9 +5074,9 @@ lldb_private::Address ObjectFileMachO::GetEntryPointAddress() { // FIXME: We will need to have a "RegisterContext data provider" class at some // point that can get all the registers // out of data in this form & attach them to a given thread. That should - // underlie the MacOS X User process plugin, - // and we'll also need it for the MacOS X Core File process plugin. When we - // have that we can also use it here. + // underlie the MacOS X User process plugin, and we'll also need it for the + // MacOS X Core File process plugin. When we have that we can also use it + // here. // // For now we hard-code the offsets and flavors we need: // @@ -5257,16 +5181,14 @@ lldb_private::Address ObjectFileMachO::GetEntryPointAddress() { if (start_address != LLDB_INVALID_ADDRESS) { // We got the start address from the load commands, so now resolve that - // address in the sections - // of this ObjectFile: + // address in the sections of this ObjectFile: if (!m_entry_point_address.ResolveAddressUsingFileSections( start_address, GetSectionList())) { m_entry_point_address.Clear(); } } else { // We couldn't read the UnixThread load command - maybe it wasn't there. - // As a fallback look for the - // "start" symbol in the main executable. + // As a fallback look for the "start" symbol in the main executable. ModuleSP module_sp(GetModule()); @@ -5331,8 +5253,8 @@ std::string ObjectFileMachO::GetIdentifierString() { if (module_sp) { std::lock_guard<std::recursive_mutex> guard(module_sp->GetMutex()); - // First, look over the load commands for an LC_NOTE load command - // with data_owner string "kern ver str" & use that if found. + // First, look over the load commands for an LC_NOTE load command with + // data_owner string "kern ver str" & use that if found. lldb::offset_t offset = MachHeaderSizeFromMagic(m_header.magic); for (uint32_t i = 0; i < m_header.ncmds; ++i) { const uint32_t cmd_offset = offset; @@ -5348,8 +5270,8 @@ std::string ObjectFileMachO::GetIdentifierString() { uint64_t fileoff = m_data.GetU64_unchecked (&offset); uint64_t size = m_data.GetU64_unchecked (&offset); - // "kern ver str" has a uint32_t version and then a - // nul terminated c-string. + // "kern ver str" has a uint32_t version and then a nul terminated + // c-string. if (strcmp ("kern ver str", data_owner) == 0) { offset = fileoff; @@ -5376,8 +5298,8 @@ std::string ObjectFileMachO::GetIdentifierString() { offset = cmd_offset + lc.cmdsize; } - // Second, make a pass over the load commands looking for an - // obsolete LC_IDENT load command. + // Second, make a pass over the load commands looking for an obsolete + // LC_IDENT load command. offset = MachHeaderSizeFromMagic(m_header.magic); for (uint32_t i = 0; i < m_header.ncmds; ++i) { const uint32_t cmd_offset = offset; @@ -5422,7 +5344,8 @@ bool ObjectFileMachO::GetCorefileMainBinaryInfo (addr_t &address, UUID &uuid) { uint64_t fileoff = m_data.GetU64_unchecked (&offset); uint64_t size = m_data.GetU64_unchecked (&offset); - // "main bin spec" (main binary specification) data payload is formatted: + // "main bin spec" (main binary specification) data payload is + // formatted: // uint32_t version [currently 1] // uint32_t type [0 == unspecified, 1 == kernel, 2 == user process] // uint64_t address [ UINT64_MAX if address not specified ] @@ -5503,9 +5426,9 @@ ObjectFile::Type ObjectFileMachO::CalculateType() { // UUID load command. UUID uuid; if (GetUUID(&uuid)) { - // this checking for the UUID load command is not enough - // we could eventually look for the symbol named - // "OSKextGetCurrentIdentifier" as this is required of kexts + // this checking for the UUID load command is not enough we could + // eventually look for the symbol named "OSKextGetCurrentIdentifier" as + // this is required of kexts if (m_strata == eStrataInvalid) m_strata = eStrataKernel; return eTypeSharedLibrary; @@ -5547,9 +5470,9 @@ ObjectFile::Strata ObjectFileMachO::CalculateStrata() { // UUID load command. UUID uuid; if (GetUUID(&uuid)) { - // this checking for the UUID load command is not enough - // we could eventually look for the symbol named - // "OSKextGetCurrentIdentifier" as this is required of kexts + // this checking for the UUID load command is not enough we could + // eventually look for the symbol named "OSKextGetCurrentIdentifier" as + // this is required of kexts if (m_type == eTypeInvalid) m_type = eTypeSharedLibrary; @@ -5636,8 +5559,8 @@ uint32_t ObjectFileMachO::GetVersion(uint32_t *versions, for (i = 3; i < num_versions; ++i) versions[i] = UINT32_MAX; } - // The LC_ID_DYLIB load command has a version with 3 version numbers - // in it, so always return 3 + // The LC_ID_DYLIB load command has a version with 3 version numbers in + // it, so always return 3 return 3; } } @@ -5837,9 +5760,9 @@ lldb_private::ConstString ObjectFileMachO::GetPluginName() { uint32_t ObjectFileMachO::GetPluginVersion() { return 1; } Section *ObjectFileMachO::GetMachHeaderSection() { - // Find the first address of the mach header which is the first non-zero - // file sized section whose file offset is zero. This is the base file address - // of the mach-o file which can be subtracted from the vmaddr of the other + // Find the first address of the mach header which is the first non-zero file + // sized section whose file offset is zero. This is the base file address of + // the mach-o file which can be subtracted from the vmaddr of the other // segments found in memory and added to the load address ModuleSP module_sp = GetModule(); if (module_sp) { @@ -5877,8 +5800,8 @@ lldb::addr_t ObjectFileMachO::CalculateSectionLoadAddressForMemoryImage( module_sp.get() == section->GetModule().get()) { // Ignore __LINKEDIT and __DWARF segments if (section->GetName() == GetSegmentNameLINKEDIT()) { - // Only map __LINKEDIT if we have an in memory image and this isn't - // a kernel binary like a kext or mach_kernel. + // Only map __LINKEDIT if we have an in memory image and this isn't a + // kernel binary like a kext or mach_kernel. const bool is_memory_image = (bool)m_process_wp.lock(); const Strata strata = GetStrata(); if (is_memory_image == false || strata == eStrataKernel) @@ -5904,9 +5827,8 @@ bool ObjectFileMachO::SetLoadAddress(Target &target, lldb::addr_t value, if (value_is_offset) { // "value" is an offset to apply to each top level segment for (size_t sect_idx = 0; sect_idx < num_sections; ++sect_idx) { - // Iterate through the object file sections to find all - // of the sections that size on disk (to avoid __PAGEZERO) - // and load them + // Iterate through the object file sections to find all of the + // sections that size on disk (to avoid __PAGEZERO) and load them SectionSP section_sp(section_list->GetSectionAtIndex(sect_idx)); if (section_sp && section_sp->GetFileSize() > 0 && section_sp->IsThreadSpecific() == false && @@ -5914,8 +5836,7 @@ bool ObjectFileMachO::SetLoadAddress(Target &target, lldb::addr_t value, // Ignore __LINKEDIT and __DWARF segments if (section_sp->GetName() == GetSegmentNameLINKEDIT()) { // Only map __LINKEDIT if we have an in memory image and this - // isn't - // a kernel binary like a kext or mach_kernel. + // isn't a kernel binary like a kext or mach_kernel. const bool is_memory_image = (bool)m_process_wp.lock(); const Strata strata = GetStrata(); if (is_memory_image == false || strata == eStrataKernel) @@ -6065,10 +5986,10 @@ bool ObjectFileMachO::SaveCore(const lldb::ProcessSP &process_sp, ThreadList &thread_list = process_sp->GetThreadList(); const uint32_t num_threads = thread_list.GetSize(); - // Make an array of LC_THREAD data items. Each one contains - // the contents of the LC_THREAD load command. The data doesn't - // contain the load command + load command size, we will - // add the load command and load command size as we emit the data. + // Make an array of LC_THREAD data items. Each one contains the + // contents of the LC_THREAD load command. The data doesn't contain + // the load command + load command size, we will add the load command + // and load command size as we emit the data. std::vector<StreamString> LC_THREAD_datas(num_threads); for (auto &LC_THREAD_data : LC_THREAD_datas) { LC_THREAD_data.GetFlags().Set(Stream::eBinary); @@ -6228,8 +6149,8 @@ bool ObjectFileMachO::SaveCore(const lldb::ProcessSP &process_sp, bytes_left -= bytes_read; addr += bytes_read; } else { - // Some pages within regions are not readable, those - // should be zero filled + // Some pages within regions are not readable, those should + // be zero filled memset(bytes, 0, bytes_to_read); size_t bytes_written = bytes_to_read; error = core_file.Write(bytes, bytes_written); diff --git a/lldb/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp b/lldb/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp index 77bfa7fe0a6..3612ff0b595 100644 --- a/lldb/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp +++ b/lldb/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp @@ -236,8 +236,8 @@ bool ObjectFilePECOFF::SetLoadAddress(Target &target, addr_t value, size_t sect_idx = 0; for (sect_idx = 0; sect_idx < num_sections; ++sect_idx) { - // Iterate through the object file sections to find all - // of the sections that have SHF_ALLOC in their flag bits. + // Iterate through the object file sections to find all of the sections + // that have SHF_ALLOC in their flag bits. SectionSP section_sp(section_list->GetSectionAtIndex(sect_idx)); if (section_sp && !section_sp->IsThreadSpecific()) { if (target.GetSectionLoadList().SetSectionLoadAddress( @@ -268,8 +268,8 @@ uint32_t ObjectFilePECOFF::GetAddressByteSize() const { //---------------------------------------------------------------------- // NeedsEndianSwap // -// Return true if an endian swap needs to occur when extracting data -// from this file. +// Return true if an endian swap needs to occur when extracting data from this +// file. //---------------------------------------------------------------------- bool ObjectFilePECOFF::NeedsEndianSwap() const { #if defined(__LITTLE_ENDIAN__) @@ -552,8 +552,8 @@ Symtab *ObjectFilePECOFF::GetSymtab() { // are followed by a 4-byte string table offset. Else these // 8 bytes contain the symbol name if (symtab_data.GetU32(&offset) == 0) { - // Long string that doesn't fit into the symbol table name, - // so now we must read the 4 byte string table offset + // Long string that doesn't fit into the symbol table name, so + // now we must read the 4 byte string table offset uint32_t strtab_offset = symtab_data.GetU32(&offset); symbol_name_cstr = strtab_data.PeekCStr(strtab_offset); symbol_name.assign(symbol_name_cstr); diff --git a/lldb/source/Plugins/OperatingSystem/Go/OperatingSystemGo.cpp b/lldb/source/Plugins/OperatingSystem/Go/OperatingSystemGo.cpp index 75bc518f753..5c74939c9c0 100644 --- a/lldb/source/Plugins/OperatingSystem/Go/OperatingSystemGo.cpp +++ b/lldb/source/Plugins/OperatingSystem/Go/OperatingSystemGo.cpp @@ -312,8 +312,8 @@ bool OperatingSystemGo::UpdateThreadList(ThreadList &old_thread_list, } std::vector<Goroutine> goroutines; // The threads that are in "new_thread_list" upon entry are the threads from - // the - // lldb_private::Process subclass, no memory threads will be in this list. + // the lldb_private::Process subclass, no memory threads will be in this + // list. Status err; for (uint64_t i = 0; i < allglen; ++i) { diff --git a/lldb/source/Plugins/OperatingSystem/Python/OperatingSystemPython.cpp b/lldb/source/Plugins/OperatingSystem/Python/OperatingSystemPython.cpp index db678608858..d6252c47327 100644 --- a/lldb/source/Plugins/OperatingSystem/Python/OperatingSystemPython.cpp +++ b/lldb/source/Plugins/OperatingSystem/Python/OperatingSystemPython.cpp @@ -50,8 +50,8 @@ void OperatingSystemPython::Terminate() { OperatingSystem *OperatingSystemPython::CreateInstance(Process *process, bool force) { - // Python OperatingSystem plug-ins must be requested by name, so force must be - // true + // Python OperatingSystem plug-ins must be requested by name, so force must + // be true FileSpec python_os_plugin_spec(process->GetPythonOSPluginPath()); if (python_os_plugin_spec && python_os_plugin_spec.Exists()) { std::unique_ptr<OperatingSystemPython> os_ap( @@ -186,8 +186,8 @@ bool OperatingSystemPython::UpdateThreadList(ThreadList &old_thread_list, const uint32_t num_cores = core_thread_list.GetSize(false); // Make a map so we can keep track of which cores were used from the - // core_thread list. Any real threads/cores that weren't used should - // later be put back into the "new_thread_list". + // core_thread list. Any real threads/cores that weren't used should later be + // put back into the "new_thread_list". std::vector<bool> core_used_map(num_cores, false); if (threads_list) { if (log) { @@ -212,8 +212,7 @@ bool OperatingSystemPython::UpdateThreadList(ThreadList &old_thread_list, // Any real core threads that didn't end up backing a memory thread should // still be in the main thread list, and they should be inserted at the - // beginning - // of the list + // beginning of the list uint32_t insert_idx = 0; for (uint32_t core_idx = 0; core_idx < num_cores; ++core_idx) { if (core_used_map[core_idx] == false) { @@ -254,8 +253,8 @@ ThreadSP OperatingSystemPython::CreateThreadFromThreadInfo( // plug-in generated thread. if (!IsOperatingSystemPluginThread(thread_sp)) { // We have thread ID overlap between the protocol threads and the - // operating system threads, clear the thread so we create an - // operating system thread for this. + // operating system threads, clear the thread so we create an operating + // system thread for this. thread_sp.reset(); } } @@ -328,8 +327,8 @@ OperatingSystemPython::CreateRegisterContextForThread(Thread *thread, reg_ctx_sp.reset(new RegisterContextMemory( *thread, 0, *GetDynamicRegisterInfo(), reg_data_addr)); } else { - // No register data address is provided, query the python plug-in to let - // it make up the data as it sees fit + // No register data address is provided, query the python plug-in to let it + // make up the data as it sees fit if (log) log->Printf("OperatingSystemPython::CreateRegisterContextForThread (tid " "= 0x%" PRIx64 ", 0x%" PRIx64 diff --git a/lldb/source/Plugins/Platform/Android/AdbClient.cpp b/lldb/source/Plugins/Platform/Android/AdbClient.cpp index 6e15eb2b1dc..4cd8c645dd7 100644 --- a/lldb/source/Plugins/Platform/Android/AdbClient.cpp +++ b/lldb/source/Plugins/Platform/Android/AdbClient.cpp @@ -165,8 +165,8 @@ Status AdbClient::GetDevices(DeviceIDList &device_list) { for (const auto device : devices) device_list.push_back(device.split('\t').first); - // Force disconnect since ADB closes connection after host:devices - // response is sent. + // Force disconnect since ADB closes connection after host:devices response + // is sent. m_conn.reset(); return error; } diff --git a/lldb/source/Plugins/Platform/Android/PlatformAndroid.cpp b/lldb/source/Plugins/Platform/Android/PlatformAndroid.cpp index 5b85bcdf7fd..f1ec8029e31 100644 --- a/lldb/source/Plugins/Platform/Android/PlatformAndroid.cpp +++ b/lldb/source/Plugins/Platform/Android/PlatformAndroid.cpp @@ -83,9 +83,9 @@ PlatformSP PlatformAndroid::CreateInstance(bool force, const ArchSpec *arch) { break; #if defined(__ANDROID__) - // Only accept "unknown" for the vendor if the host is android and - // it "unknown" wasn't specified (it was just returned because it - // was NOT specified_ + // Only accept "unknown" for the vendor if the host is android and it + // "unknown" wasn't specified (it was just returned because it was NOT + // specified_ case llvm::Triple::VendorType::UnknownVendor: create = !arch->TripleVendorWasSpecified(); break; @@ -100,9 +100,9 @@ PlatformSP PlatformAndroid::CreateInstance(bool force, const ArchSpec *arch) { break; #if defined(__ANDROID__) - // Only accept "unknown" for the OS if the host is android and - // it "unknown" wasn't specified (it was just returned because it - // was NOT specified) + // Only accept "unknown" for the OS if the host is android and it + // "unknown" wasn't specified (it was just returned because it was NOT + // specified) case llvm::Triple::OSType::UnknownOS: create = !arch->TripleOSWasSpecified(); break; @@ -222,8 +222,8 @@ Status PlatformAndroid::GetFile(const FileSpec &source, if (strchr(source_file, '\'') != nullptr) return Status("Doesn't support single-quotes in filenames"); - // mode == 0 can signify that adbd cannot access the file - // due security constraints - try "cat ..." as a fallback. + // mode == 0 can signify that adbd cannot access the file due security + // constraints - try "cat ..." as a fallback. AdbClient adb(m_device_id); char cmd[PATH_MAX]; diff --git a/lldb/source/Plugins/Platform/Android/PlatformAndroidRemoteGDBServer.cpp b/lldb/source/Plugins/Platform/Android/PlatformAndroidRemoteGDBServer.cpp index dbc74833e28..2415da31daf 100644 --- a/lldb/source/Plugins/Platform/Android/PlatformAndroidRemoteGDBServer.cpp +++ b/lldb/source/Plugins/Platform/Android/PlatformAndroidRemoteGDBServer.cpp @@ -180,9 +180,9 @@ Status PlatformAndroidRemoteGDBServer::MakeConnectURL( static const int kAttempsNum = 5; Status error; - // There is a race possibility that somebody will occupy - // a port while we're in between FindUnusedPort and ForwardPortWithAdb - - // adding the loop to mitigate such problem. + // There is a race possibility that somebody will occupy a port while we're + // in between FindUnusedPort and ForwardPortWithAdb - adding the loop to + // mitigate such problem. for (auto i = 0; i < kAttempsNum; ++i) { uint16_t local_port = 0; error = FindUnusedPort(local_port); @@ -208,10 +208,9 @@ lldb::ProcessSP PlatformAndroidRemoteGDBServer::ConnectProcess( lldb_private::Debugger &debugger, lldb_private::Target *target, lldb_private::Status &error) { // We don't have the pid of the remote gdbserver when it isn't started by us - // but we still want - // to store the list of port forwards we set up in our port forward map. - // Generate a fake pid for - // these cases what won't collide with any other valid pid on android. + // but we still want to store the list of port forwards we set up in our port + // forward map. Generate a fake pid for these cases what won't collide with + // any other valid pid on android. static lldb::pid_t s_remote_gdbserver_fake_pid = 0xffffffffffffffffULL; int remote_port; diff --git a/lldb/source/Plugins/Platform/FreeBSD/PlatformFreeBSD.cpp b/lldb/source/Plugins/Platform/FreeBSD/PlatformFreeBSD.cpp index 73c7d21f0a0..d19f0fea824 100644 --- a/lldb/source/Plugins/Platform/FreeBSD/PlatformFreeBSD.cpp +++ b/lldb/source/Plugins/Platform/FreeBSD/PlatformFreeBSD.cpp @@ -32,8 +32,8 @@ #include "lldb/Utility/Status.h" #include "lldb/Utility/StreamString.h" -// Define these constants from FreeBSD mman.h for use when targeting -// remote FreeBSD systems even when host has different values. +// Define these constants from FreeBSD mman.h for use when targeting remote +// FreeBSD systems even when host has different values. #define MAP_PRIVATE 0x0002 #define MAP_ANON 0x1000 @@ -60,9 +60,8 @@ PlatformSP PlatformFreeBSD::CreateInstance(bool force, const ArchSpec *arch) { break; #if defined(__FreeBSD__) - // Only accept "unknown" for the OS if the host is BSD and - // it "unknown" wasn't specified (it was just returned because it - // was NOT specified) + // Only accept "unknown" for the OS if the host is BSD and it "unknown" + // wasn't specified (it was just returned because it was NOT specified) case llvm::Triple::OSType::UnknownOS: create = !arch->TripleOSWasSpecified(); break; @@ -143,7 +142,8 @@ bool PlatformFreeBSD::GetSupportedArchitectureAtIndex(uint32_t idx, arch = hostArch; return arch.IsValid(); } else if (idx == 1) { - // If the default host architecture is 64-bit, look for a 32-bit variant + // If the default host architecture is 64-bit, look for a 32-bit + // variant if (hostArch.IsValid() && hostArch.GetTriple().isArch64Bit()) { arch = HostInfo::GetArchitecture(HostInfo::eArchKind32); return arch.IsValid(); @@ -187,13 +187,10 @@ bool PlatformFreeBSD::GetSupportedArchitectureAtIndex(uint32_t idx, return false; } // Leave the vendor as "llvm::Triple:UnknownVendor" and don't specify the - // vendor by - // calling triple.SetVendorName("unknown") so that it is a "unspecified - // unknown". - // This means when someone calls triple.GetVendorName() it will return an - // empty string - // which indicates that the vendor can be set when two architectures are - // merged + // vendor by calling triple.SetVendorName("unknown") so that it is a + // "unspecified unknown". This means when someone calls + // triple.GetVendorName() it will return an empty string which indicates + // that the vendor can be set when two architectures are merged // Now set the triple into "arch" and return true arch.SetTriple(triple); @@ -286,9 +283,9 @@ lldb::ProcessSP PlatformFreeBSD::Attach(ProcessAttachInfo &attach_info, if (target && error.Success()) { debugger.GetTargetList().SetSelectedTarget(target); - // The freebsd always currently uses the GDB remote debugger plug-in - // so even when debugging locally we are debugging remotely! - // Just like the darwin plugin. + // The freebsd always currently uses the GDB remote debugger plug-in so + // even when debugging locally we are debugging remotely! Just like the + // darwin plugin. process_sp = target->CreateProcess( attach_info.GetListenerForProcess(debugger), "gdb-remote", NULL); diff --git a/lldb/source/Plugins/Platform/Linux/PlatformLinux.cpp b/lldb/source/Plugins/Platform/Linux/PlatformLinux.cpp index 8186eae0e8c..dbde91d7ab2 100644 --- a/lldb/source/Plugins/Platform/Linux/PlatformLinux.cpp +++ b/lldb/source/Plugins/Platform/Linux/PlatformLinux.cpp @@ -30,8 +30,8 @@ #include "lldb/Utility/Status.h" #include "lldb/Utility/StreamString.h" -// Define these constants from Linux mman.h for use when targeting -// remote linux systems even when host has different values. +// Define these constants from Linux mman.h for use when targeting remote linux +// systems even when host has different values. #define MAP_PRIVATE 2 #define MAP_ANON 0x20 @@ -58,9 +58,8 @@ PlatformSP PlatformLinux::CreateInstance(bool force, const ArchSpec *arch) { break; #if defined(__linux__) - // Only accept "unknown" for the OS if the host is linux and - // it "unknown" wasn't specified (it was just returned because it - // was NOT specified) + // Only accept "unknown" for the OS if the host is linux and it "unknown" + // wasn't specified (it was just returned because it was NOT specified) case llvm::Triple::OSType::UnknownOS: create = !arch->TripleOSWasSpecified(); break; @@ -142,7 +141,8 @@ bool PlatformLinux::GetSupportedArchitectureAtIndex(uint32_t idx, arch = hostArch; return arch.IsValid(); } else if (idx == 1) { - // If the default host architecture is 64-bit, look for a 32-bit variant + // If the default host architecture is 64-bit, look for a 32-bit + // variant if (hostArch.IsValid() && hostArch.GetTriple().isArch64Bit()) { arch = HostInfo::GetArchitecture(HostInfo::eArchKind32); return arch.IsValid(); @@ -192,13 +192,10 @@ bool PlatformLinux::GetSupportedArchitectureAtIndex(uint32_t idx, return false; } // Leave the vendor as "llvm::Triple:UnknownVendor" and don't specify the - // vendor by - // calling triple.SetVendorName("unknown") so that it is a "unspecified - // unknown". - // This means when someone calls triple.GetVendorName() it will return an - // empty string - // which indicates that the vendor can be set when two architectures are - // merged + // vendor by calling triple.SetVendorName("unknown") so that it is a + // "unspecified unknown". This means when someone calls + // triple.GetVendorName() it will return an empty string which indicates + // that the vendor can be set when two architectures are merged // Now set the triple into "arch" and return true arch.SetTriple(triple); @@ -212,8 +209,8 @@ void PlatformLinux::GetStatus(Stream &strm) { #ifndef LLDB_DISABLE_POSIX // Display local kernel information only when we are running in host mode. - // Otherwise, we would end up printing non-Linux information (when running - // on Mac OS for example). + // Otherwise, we would end up printing non-Linux information (when running on + // Mac OS for example). if (IsHost()) { struct utsname un; @@ -272,8 +269,8 @@ bool PlatformLinux::CanDebugProcess() { } // For local debugging, Linux will override the debug logic to use llgs-launch -// rather than lldb-launch, llgs-attach. This differs from current lldb-launch, -// debugserver-attach approach on MacOSX. +// rather than lldb-launch, llgs-attach. This differs from current lldb- +// launch, debugserver-attach approach on MacOSX. lldb::ProcessSP PlatformLinux::DebugProcess(ProcessLaunchInfo &launch_info, Debugger &debugger, Target *target, // Can be NULL, if NULL create a new @@ -297,8 +294,8 @@ PlatformLinux::DebugProcess(ProcessLaunchInfo &launch_info, Debugger &debugger, launch_info.GetFlags().Set(eLaunchFlagDebug); // We always launch the process we are going to debug in a separate process - // group, since then we can handle ^C interrupts ourselves w/o having to worry - // about the target getting them as well. + // group, since then we can handle ^C interrupts ourselves w/o having to + // worry about the target getting them as well. launch_info.SetLaunchInSeparateProcessGroup(true); // Ensure we have a target. diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformAppleSimulator.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformAppleSimulator.cpp index a216e3839dd..6852097117a 100644 --- a/lldb/source/Plugins/Platform/MacOSX/PlatformAppleSimulator.cpp +++ b/lldb/source/Plugins/Platform/MacOSX/PlatformAppleSimulator.cpp @@ -84,8 +84,8 @@ lldb_private::Status PlatformAppleSimulator::LaunchProcess( void PlatformAppleSimulator::GetStatus(Stream &strm) { #if defined(__APPLE__) - // This will get called by subclasses, so just output status on the - // current simulator + // This will get called by subclasses, so just output status on the current + // simulator PlatformAppleSimulator::LoadCoreSimulator(); CoreSimulatorSupport::DeviceSet devices = @@ -183,8 +183,8 @@ lldb::ProcessSP PlatformAppleSimulator::DebugProcess( // Make sure we stop at the entry point launch_info.GetFlags().Set(eLaunchFlagDebug); // We always launch the process we are going to debug in a separate process - // group, since then we can handle ^C interrupts ourselves w/o having to worry - // about the target getting them as well. + // group, since then we can handle ^C interrupts ourselves w/o having to + // worry about the target getting them as well. launch_info.SetLaunchInSeparateProcessGroup(true); error = LaunchProcess(launch_info); @@ -201,10 +201,10 @@ lldb::ProcessSP PlatformAppleSimulator::DebugProcess( // process if this happens. process_sp->SetShouldDetach(false); - // If we didn't have any file actions, the pseudo terminal might - // have been used where the slave side was given as the file to - // open for stdin/out/err after we have already opened the master - // so we can read/write stdin/out/err. + // If we didn't have any file actions, the pseudo terminal might have + // been used where the slave side was given as the file to open for + // stdin/out/err after we have already opened the master so we can + // read/write stdin/out/err. int pty_fd = launch_info.GetPTY().ReleaseMasterFileDescriptor(); if (pty_fd != PseudoTerminal::invalid_fd) { process_sp->SetSTDIOFileDescriptor(pty_fd); diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformAppleTVSimulator.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformAppleTVSimulator.cpp index e0558f8b200..2fcd22b0d41 100644 --- a/lldb/source/Plugins/Platform/MacOSX/PlatformAppleTVSimulator.cpp +++ b/lldb/source/Plugins/Platform/MacOSX/PlatformAppleTVSimulator.cpp @@ -90,9 +90,9 @@ PlatformSP PlatformAppleTVSimulator::CreateInstance(bool force, break; #if defined(__APPLE__) - // Only accept "unknown" for the vendor if the host is Apple and - // it "unknown" wasn't specified (it was just returned because it - // was NOT specified) + // Only accept "unknown" for the vendor if the host is Apple and it + // "unknown" wasn't specified (it was just returned because it was NOT + // specified) case llvm::Triple::UnknownArch: create = !arch->TripleVendorWasSpecified(); break; @@ -107,9 +107,9 @@ PlatformSP PlatformAppleTVSimulator::CreateInstance(bool force, break; #if defined(__APPLE__) - // Only accept "unknown" for the OS if the host is Apple and - // it "unknown" wasn't specified (it was just returned because it - // was NOT specified) + // Only accept "unknown" for the OS if the host is Apple and it + // "unknown" wasn't specified (it was just returned because it was NOT + // specified) case llvm::Triple::UnknownOS: create = !arch->TripleOSWasSpecified(); break; @@ -199,9 +199,9 @@ Status PlatformAppleTVSimulator::ResolveExecutable( return error; exe_module_sp.reset(); } - // No valid architecture was specified or the exact ARM slice wasn't - // found so ask the platform for the architectures that we should be - // using (in the correct order) and see if we can find a match that way + // No valid architecture was specified or the exact ARM slice wasn't found + // so ask the platform for the architectures that we should be using (in + // the correct order) and see if we can find a match that way StreamString arch_names; ArchSpec platform_arch; for (uint32_t idx = 0; GetSupportedArchitectureAtIndex( @@ -293,8 +293,8 @@ const char *PlatformAppleTVSimulator::GetSDKDirectoryAsCString() { m_sdk_directory.assign(1, '\0'); } - // We should have put a single NULL character into m_sdk_directory - // or it should have a valid path if the code gets here + // We should have put a single NULL character into m_sdk_directory or it + // should have a valid path if the code gets here assert(m_sdk_directory.empty() == false); if (m_sdk_directory[0]) return m_sdk_directory.c_str(); @@ -337,10 +337,9 @@ Status PlatformAppleTVSimulator::GetSharedModule( const ModuleSpec &module_spec, lldb_private::Process *process, ModuleSP &module_sp, const FileSpecList *module_search_paths_ptr, ModuleSP *old_module_sp_ptr, bool *did_create_ptr) { - // For AppleTV, the SDK files are all cached locally on the host - // system. So first we ask for the file in the cached SDK, - // then we attempt to get a shared module for the right architecture - // with the right UUID. + // For AppleTV, the SDK files are all cached locally on the host system. So + // first we ask for the file in the cached SDK, then we attempt to get a + // shared module for the right architecture with the right UUID. Status error; ModuleSpec platform_module_spec(module_spec); const FileSpec &platform_file = module_spec.GetFileSpec(); diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformAppleWatchSimulator.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformAppleWatchSimulator.cpp index 9b2608f6862..39bd2dc377d 100644 --- a/lldb/source/Plugins/Platform/MacOSX/PlatformAppleWatchSimulator.cpp +++ b/lldb/source/Plugins/Platform/MacOSX/PlatformAppleWatchSimulator.cpp @@ -89,9 +89,9 @@ PlatformSP PlatformAppleWatchSimulator::CreateInstance(bool force, break; #if defined(__APPLE__) - // Only accept "unknown" for the vendor if the host is Apple and - // it "unknown" wasn't specified (it was just returned because it - // was NOT specified) + // Only accept "unknown" for the vendor if the host is Apple and it + // "unknown" wasn't specified (it was just returned because it was NOT + // specified) case llvm::Triple::UnknownArch: create = !arch->TripleVendorWasSpecified(); break; @@ -106,9 +106,9 @@ PlatformSP PlatformAppleWatchSimulator::CreateInstance(bool force, break; #if defined(__APPLE__) - // Only accept "unknown" for the OS if the host is Apple and - // it "unknown" wasn't specified (it was just returned because it - // was NOT specified) + // Only accept "unknown" for the OS if the host is Apple and it + // "unknown" wasn't specified (it was just returned because it was NOT + // specified) case llvm::Triple::UnknownOS: create = !arch->TripleOSWasSpecified(); break; @@ -199,9 +199,9 @@ Status PlatformAppleWatchSimulator::ResolveExecutable( return error; exe_module_sp.reset(); } - // No valid architecture was specified or the exact ARM slice wasn't - // found so ask the platform for the architectures that we should be - // using (in the correct order) and see if we can find a match that way + // No valid architecture was specified or the exact ARM slice wasn't found + // so ask the platform for the architectures that we should be using (in + // the correct order) and see if we can find a match that way StreamString arch_names; ArchSpec platform_arch; for (uint32_t idx = 0; GetSupportedArchitectureAtIndex( @@ -293,8 +293,8 @@ const char *PlatformAppleWatchSimulator::GetSDKDirectoryAsCString() { m_sdk_directory.assign(1, '\0'); } - // We should have put a single NULL character into m_sdk_directory - // or it should have a valid path if the code gets here + // We should have put a single NULL character into m_sdk_directory or it + // should have a valid path if the code gets here assert(m_sdk_directory.empty() == false); if (m_sdk_directory[0]) return m_sdk_directory.c_str(); @@ -337,10 +337,9 @@ Status PlatformAppleWatchSimulator::GetSharedModule( const ModuleSpec &module_spec, lldb_private::Process *process, ModuleSP &module_sp, const FileSpecList *module_search_paths_ptr, ModuleSP *old_module_sp_ptr, bool *did_create_ptr) { - // For AppleWatch, the SDK files are all cached locally on the host - // system. So first we ask for the file in the cached SDK, - // then we attempt to get a shared module for the right architecture - // with the right UUID. + // For AppleWatch, the SDK files are all cached locally on the host system. + // So first we ask for the file in the cached SDK, then we attempt to get a + // shared module for the right architecture with the right UUID. Status error; ModuleSpec platform_module_spec(module_spec); const FileSpec &platform_file = module_spec.GetFileSpec(); diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp index 8e031680214..e6ed57ac716 100644 --- a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp +++ b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp @@ -73,10 +73,9 @@ FileSpecList PlatformDarwin::LocateExecutableScriptingResources( // NB some extensions might be meaningful and should not be stripped - // "this.binary.file" // should not lose ".file" but GetFileNameStrippingExtension() will do - // precisely that. - // Ideally, we should have a per-platform list of extensions (".exe", - // ".app", ".dSYM", ".framework") - // which should be stripped while leaving "this.binary.file" as-is. + // precisely that. Ideally, we should have a per-platform list of + // extensions (".exe", ".app", ".dSYM", ".framework") which should be + // stripped while leaving "this.binary.file" as-is. ScriptInterpreter *script_interpreter = target->GetDebugger().GetCommandInterpreter().GetScriptInterpreter(); @@ -101,14 +100,11 @@ FileSpecList PlatformDarwin::LocateExecutableScriptingResources( // FIXME: for Python, we cannot allow certain characters in // module // filenames we import. Theoretically, different scripting - // languages may - // have different sets of forbidden tokens in filenames, and - // that should - // be dealt with by each ScriptInterpreter. For now, we just - // replace dots - // with underscores, but if we ever support anything other than - // Python - // we will need to rework this + // languages may have different sets of forbidden tokens in + // filenames, and that should be dealt with by each + // ScriptInterpreter. For now, we just replace dots with + // underscores, but if we ever support anything other than + // Python we will need to rework this std::replace(module_basename.begin(), module_basename.end(), '.', '_'); std::replace(module_basename.begin(), module_basename.end(), @@ -125,9 +121,9 @@ FileSpecList PlatformDarwin::LocateExecutableScriptingResources( StreamString path_string; StreamString original_path_string; // for OSX we are going to be in - // .dSYM/Contents/Resources/DWARF/<basename> - // let us go to .dSYM/Contents/Resources/Python/<basename>.py - // and see if the file exists + // .dSYM/Contents/Resources/DWARF/<basename> let us go to + // .dSYM/Contents/Resources/Python/<basename>.py and see if the + // file exists path_string.Printf("%s/../Python/%s.py", symfile_spec.GetDirectory().GetCString(), module_basename.c_str()); @@ -140,9 +136,8 @@ FileSpecList PlatformDarwin::LocateExecutableScriptingResources( true); // if we did some replacements of reserved characters, and a - // file with the untampered name - // exists, then warn the user that the file as-is shall not be - // loaded + // file with the untampered name exists, then warn the user + // that the file as-is shall not be loaded if (feedback_stream) { if (module_basename != original_module_basename && orig_script_fspec.Exists()) { @@ -178,8 +173,8 @@ FileSpecList PlatformDarwin::LocateExecutableScriptingResources( break; } - // If we didn't find the python file, then keep - // stripping the extensions and try again + // If we didn't find the python file, then keep stripping the + // extensions and try again ConstString filename_no_extension( module_spec.GetFileNameStrippingExtension()); if (module_spec.GetFilename() == filename_no_extension) @@ -270,8 +265,8 @@ lldb_private::Status PlatformDarwin::GetSharedModuleWithLocalCache( FileSpec module_cache_spec(cache_path, false); // if rsync is supported, always bring in the file - rsync will be very - // efficient - // when files are the same on the local and remote end of the connection + // efficient when files are the same on the local and remote end of the + // connection if (this->GetSupportsRSync()) { err = BringInRemoteFile(this, module_spec, module_cache_spec); if (err.Fail()) @@ -370,8 +365,8 @@ Status PlatformDarwin::GetSharedModule( module_sp.reset(); if (IsRemote()) { - // If we have a remote platform always, let it try and locate - // the shared module first. + // If we have a remote platform always, let it try and locate the shared + // module first. if (m_remote_platform_sp) { error = m_remote_platform_sp->GetSharedModule( module_spec, process, module_sp, module_search_paths_ptr, @@ -453,8 +448,8 @@ PlatformDarwin::GetSoftwareBreakpointTrapOpcode(Target &target, switch (machine) { case llvm::Triple::aarch64: { // TODO: fix this with actual darwin breakpoint opcode for arm64. - // right now debugging uses the Z packets with GDB remote so this - // is not needed, but the size needs to be correct... + // right now debugging uses the Z packets with GDB remote so this is not + // needed, but the size needs to be correct... static const uint8_t g_arm64_breakpoint_opcode[] = {0xFE, 0xDE, 0xFF, 0xE7}; trap_opcode = g_arm64_breakpoint_opcode; trap_opcode_size = sizeof(g_arm64_breakpoint_opcode); @@ -548,8 +543,8 @@ bool PlatformDarwin::x86GetSupportedArchitectureAtIndex(uint32_t idx, HostInfo::GetArchitecture(HostInfo::eArchKind64)); if (platform_arch.IsExactMatch(platform_arch64)) { // This macosx platform supports both 32 and 64 bit. Since we already - // returned the 64 bit arch for idx == 0, return the 32 bit arch - // for idx == 1 + // returned the 64 bit arch for idx == 0, return the 32 bit arch for + // idx == 1 arch = HostInfo::GetArchitecture(HostInfo::eArchKind32); return arch.IsValid(); } @@ -558,9 +553,9 @@ bool PlatformDarwin::x86GetSupportedArchitectureAtIndex(uint32_t idx, return false; } -// The architecture selection rules for arm processors -// These cpu subtypes have distinct names (e.g. armv7f) but armv7 binaries run -// fine on an armv7f processor. +// The architecture selection rules for arm processors These cpu subtypes have +// distinct names (e.g. armv7f) but armv7 binaries run fine on an armv7f +// processor. bool PlatformDarwin::ARMGetSupportedArchitectureAtIndex(uint32_t idx, ArchSpec &arch) { @@ -1145,7 +1140,8 @@ const char *PlatformDarwin::GetDeveloperDirectory() { if (HostInfo::GetLLDBPath(ePathTypeLLDBShlibDir, temp_file_spec)) { if (temp_file_spec.GetPath(developer_dir_path, sizeof(developer_dir_path))) { - // e.g. /Applications/Xcode.app/Contents/SharedFrameworks/LLDB.framework + // e.g. + // /Applications/Xcode.app/Contents/SharedFrameworks/LLDB.framework char *shared_frameworks = strstr(developer_dir_path, "/SharedFrameworks/LLDB.framework"); if (shared_frameworks) { @@ -1153,7 +1149,8 @@ const char *PlatformDarwin::GetDeveloperDirectory() { strncat (developer_dir_path, "/Developer", sizeof (developer_dir_path) - 1); // add /Developer on developer_dir_path_valid = true; } else { - // e.g. /Applications/Xcode.app/Contents/Developer/Toolchains/iOS11.2.xctoolchain/System/Library/PrivateFrameworks/LLDB.framework + // e.g. + // /Applications/Xcode.app/Contents/Developer/Toolchains/iOS11.2.xctoolchain/System/Library/PrivateFrameworks/LLDB.framework char *developer_toolchains = strstr(developer_dir_path, "/Contents/Developer/Toolchains/"); if (developer_toolchains) { @@ -1230,8 +1227,8 @@ const char *PlatformDarwin::GetDeveloperDirectory() { m_developer_directory.assign(1, '\0'); } - // We should have put a single NULL character into m_developer_directory - // or it should have a valid path if the code gets here + // We should have put a single NULL character into m_developer_directory or + // it should have a valid path if the code gets here assert(m_developer_directory.empty() == false); if (m_developer_directory[0]) return m_developer_directory.c_str(); @@ -1279,9 +1276,9 @@ PlatformDarwin::GetResumeCountForLaunchInfo(ProcessLaunchInfo &launch_info) { shell_name++; if (strcmp(shell_name, "sh") == 0) { - // /bin/sh re-exec's itself as /bin/bash requiring another resume. - // But it only does this if the COMMAND_MODE environment variable - // is set to "legacy". + // /bin/sh re-exec's itself as /bin/bash requiring another resume. But it + // only does this if the COMMAND_MODE environment variable is set to + // "legacy". if (launch_info.GetEnvironment().lookup("COMMAND_MODE") == "legacy") return 2; return 1; @@ -1333,9 +1330,8 @@ static FileSpec GetXcodeContentsPath() { // First get the program file spec. If lldb.so or LLDB.framework is running // in a program and that program is Xcode, the path returned with be the - // path - // to Xcode.app/Contents/MacOS/Xcode, so this will be the correct Xcode to - // use. + // path to Xcode.app/Contents/MacOS/Xcode, so this will be the correct + // Xcode to use. fspec = HostInfo::GetProgramFileSpec(); if (fspec) { @@ -1679,10 +1675,8 @@ bool PlatformDarwin::GetOSVersion(uint32_t &major, uint32_t &minor, } } // For simulator platforms, do NOT call back through - // Platform::GetOSVersion() - // as it might call Process::GetHostOSVersion() which we don't want as it - // will be - // incorrect + // Platform::GetOSVersion() as it might call Process::GetHostOSVersion() + // which we don't want as it will be incorrect return false; } @@ -1695,8 +1689,8 @@ lldb_private::FileSpec PlatformDarwin::LocateExecutable(const char *basename) { // any executable directories that should be searched. static std::vector<FileSpec> g_executable_dirs; - // Find the global list of directories that we will search for - // executables once so we don't keep doing the work over and over. + // Find the global list of directories that we will search for executables + // once so we don't keep doing the work over and over. static llvm::once_flag g_once_flag; llvm::call_once(g_once_flag, []() { @@ -1730,19 +1724,18 @@ lldb_private::FileSpec PlatformDarwin::LocateExecutable(const char *basename) { lldb_private::Status PlatformDarwin::LaunchProcess(lldb_private::ProcessLaunchInfo &launch_info) { - // Starting in Fall 2016 OSes, NSLog messages only get mirrored to stderr - // if the OS_ACTIVITY_DT_MODE environment variable is set. (It doesn't - // require any specific value; rather, it just needs to exist). - // We will set it here as long as the IDE_DISABLED_OS_ACTIVITY_DT_MODE flag - // is not set. Xcode makes use of IDE_DISABLED_OS_ACTIVITY_DT_MODE to tell + // Starting in Fall 2016 OSes, NSLog messages only get mirrored to stderr if + // the OS_ACTIVITY_DT_MODE environment variable is set. (It doesn't require + // any specific value; rather, it just needs to exist). We will set it here + // as long as the IDE_DISABLED_OS_ACTIVITY_DT_MODE flag is not set. Xcode + // makes use of IDE_DISABLED_OS_ACTIVITY_DT_MODE to tell // LLDB *not* to muck with the OS_ACTIVITY_DT_MODE flag when they // specifically want it unset. const char *disable_env_var = "IDE_DISABLED_OS_ACTIVITY_DT_MODE"; auto &env_vars = launch_info.GetEnvironment(); if (!env_vars.count(disable_env_var)) { - // We want to make sure that OS_ACTIVITY_DT_MODE is set so that - // we get os_log and NSLog messages mirrored to the target process - // stderr. + // We want to make sure that OS_ACTIVITY_DT_MODE is set so that we get + // os_log and NSLog messages mirrored to the target process stderr. env_vars.try_emplace("OS_ACTIVITY_DT_MODE", "enable"); } @@ -1757,15 +1750,16 @@ PlatformDarwin::FindBundleBinaryInExecSearchPaths (const ModuleSpec &module_spec ModuleSP *old_module_sp_ptr, bool *did_create_ptr) { const FileSpec &platform_file = module_spec.GetFileSpec(); - // See if the file is present in any of the module_search_paths_ptr directories. + // See if the file is present in any of the module_search_paths_ptr + // directories. if (!module_sp && module_search_paths_ptr && platform_file) { - // create a vector of all the file / directory names in platform_file - // e.g. this might be + // create a vector of all the file / directory names in platform_file e.g. + // this might be // /System/Library/PrivateFrameworks/UIFoundation.framework/UIFoundation // - // We'll need to look in the module_search_paths_ptr directories for - // both "UIFoundation" and "UIFoundation.framework" -- most likely the - // latter will be the one we find there. + // We'll need to look in the module_search_paths_ptr directories for both + // "UIFoundation" and "UIFoundation.framework" -- most likely the latter + // will be the one we find there. FileSpec platform_pull_apart(platform_file); std::vector<std::string> path_parts; @@ -1784,25 +1778,24 @@ PlatformDarwin::FindBundleBinaryInExecSearchPaths (const ModuleSpec &module_spec Log *log_verbose = lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_HOST); if (log_verbose) log_verbose->Printf ("PlatformRemoteDarwinDevice::GetSharedModule searching for binary in search-path %s", module_search_paths_ptr->GetFileSpecAtIndex(i).GetPath().c_str()); - // Create a new FileSpec with this module_search_paths_ptr - // plus just the filename ("UIFoundation"), then the parent - // dir plus filename ("UIFoundation.framework/UIFoundation") - // etc - up to four names (to handle "Foo.framework/Contents/MacOS/Foo") + // Create a new FileSpec with this module_search_paths_ptr plus just the + // filename ("UIFoundation"), then the parent dir plus filename + // ("UIFoundation.framework/UIFoundation") etc - up to four names (to + // handle "Foo.framework/Contents/MacOS/Foo") for (size_t j = 0; j < 4 && j < path_parts_size - 1; ++j) { FileSpec path_to_try(module_search_paths_ptr->GetFileSpecAtIndex(i)); // Add the components backwards. For - // .../PrivateFrameworks/UIFoundation.framework/UIFoundation - // path_parts is + // .../PrivateFrameworks/UIFoundation.framework/UIFoundation path_parts + // is // [0] UIFoundation // [1] UIFoundation.framework // [2] PrivateFrameworks // // and if 'j' is 2, we want to append path_parts[1] and then - // path_parts[0], aka - // 'UIFoundation.framework/UIFoundation', to the module_search_paths_ptr - // path. + // path_parts[0], aka 'UIFoundation.framework/UIFoundation', to the + // module_search_paths_ptr path. for (int k = j; k >= 0; --k) { path_to_try.AppendPathComponent(path_parts[k]); diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwinKernel.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwinKernel.cpp index e5d27fc2894..f411ae59963 100644 --- a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwinKernel.cpp +++ b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwinKernel.cpp @@ -92,11 +92,9 @@ PlatformSP PlatformDarwinKernel::CreateInstance(bool force, } // This is a special plugin that we don't want to activate just based on an - // ArchSpec for normal - // userland debugging. It is only useful in kernel debug sessions and the - // DynamicLoaderDarwinPlugin - // (or a user doing 'platform select') will force the creation of this - // Platform plugin. + // ArchSpec for normal userland debugging. It is only useful in kernel debug + // sessions and the DynamicLoaderDarwinPlugin (or a user doing 'platform + // select') will force the creation of this Platform plugin. if (force == false) { if (log) log->Printf("PlatformDarwinKernel::%s() aborting creation of platform " @@ -115,9 +113,8 @@ PlatformSP PlatformDarwinKernel::CreateInstance(bool force, create = true; break; - // Only accept "unknown" for vendor if the host is Apple and - // it "unknown" wasn't specified (it was just returned because it - // was NOT specified) + // Only accept "unknown" for vendor if the host is Apple and it "unknown" + // wasn't specified (it was just returned because it was NOT specified) case llvm::Triple::UnknownArch: create = !arch->TripleVendorWasSpecified(); break; @@ -133,9 +130,8 @@ PlatformSP PlatformDarwinKernel::CreateInstance(bool force, case llvm::Triple::WatchOS: case llvm::Triple::TvOS: break; - // Only accept "vendor" for vendor if the host is Apple and - // it "unknown" wasn't specified (it was just returned because it - // was NOT specified) + // Only accept "vendor" for vendor if the host is Apple and it "unknown" + // wasn't specified (it was just returned because it was NOT specified) case llvm::Triple::UnknownOS: create = !arch->TripleOSWasSpecified(); break; @@ -341,11 +337,9 @@ void PlatformDarwinKernel::GetStatus(Stream &strm) { void PlatformDarwinKernel::CollectKextAndKernelDirectories() { // Differentiate between "ios debug session" and "mac debug session" so we - // don't index - // kext bundles that won't be used in this debug session. If this is an ios - // kext debug - // session, looking in /System/Library/Extensions is a waste of stat()s, for - // example. + // don't index kext bundles that won't be used in this debug session. If + // this is an ios kext debug session, looking in /System/Library/Extensions + // is a waste of stat()s, for example. // DeveloperDirectory is something like // "/Applications/Xcode.app/Contents/Developer" @@ -368,9 +362,8 @@ void PlatformDarwinKernel::CollectKextAndKernelDirectories() { AddSDKSubdirsToSearchPaths("/Volumes/KernelDebugKit"); AddSDKSubdirsToSearchPaths("/AppleInternal/Developer/KDKs"); - // The KDKs distributed from Apple installed on external - // developer systems may be in directories like - // /Library/Developer/KDKs/KDK_10.10_14A298i.kdk + // The KDKs distributed from Apple installed on external developer systems + // may be in directories like /Library/Developer/KDKs/KDK_10.10_14A298i.kdk AddSDKSubdirsToSearchPaths("/Library/Developer/KDKs"); if (m_ios_debug_session != eLazyBoolNo) { @@ -450,9 +443,8 @@ PlatformDarwinKernel::FindKDKandSDKDirectoriesInDirectory( return FileSpec::eEnumerateDirectoryResultNext; } -// Recursively search trough m_search_directories looking for -// kext and kernel binaries, adding files found to the appropriate -// lists. +// Recursively search trough m_search_directories looking for kext and kernel +// binaries, adding files found to the appropriate lists. void PlatformDarwinKernel::SearchForKextsAndKernelsRecursively() { const uint32_t num_dirs = m_search_directories.size(); for (uint32_t i = 0; i < num_dirs; i++) { @@ -476,13 +468,11 @@ void PlatformDarwinKernel::SearchForKextsAndKernelsRecursively() { } } -// We're only doing a filename match here. We won't try opening the file to see -// if it's really -// a kernel or not until we need to find a kernel of a given UUID. There's no -// cheap way to find -// the UUID of a file (or if it's a Mach-O binary at all) without creating a -// whole Module for -// the file and throwing it away if it's not wanted. +// We're only doing a filename match here. We won't try opening the file to +// see if it's really a kernel or not until we need to find a kernel of a given +// UUID. There's no cheap way to find the UUID of a file (or if it's a Mach-O +// binary at all) without creating a whole Module for the file and throwing it +// away if it's not wanted. // // Recurse into any subdirectories found. @@ -650,8 +640,8 @@ bool PlatformDarwinKernel::KextHasdSYMSibling( return false; } -// Given a FileSpec of /dir/dir/mach.development.t7004 -// Return true if a dSYM exists next to it: +// Given a FileSpec of /dir/dir/mach.development.t7004 Return true if a dSYM +// exists next to it: // /dir/dir/mach.development.t7004.dSYM bool PlatformDarwinKernel::KernelHasdSYMSibling(const FileSpec &kernel_binary) { FileSpec kernel_dsym = kernel_binary; @@ -694,8 +684,8 @@ Status PlatformDarwinKernel::GetSharedModule( } } - // Give the generic methods, including possibly calling into - // DebugSymbols framework on macOS systems, a chance. + // Give the generic methods, including possibly calling into DebugSymbols + // framework on macOS systems, a chance. error = PlatformDarwin::GetSharedModule(module_spec, process, module_sp, module_search_paths_ptr, old_module_sp_ptr, did_create_ptr); @@ -749,8 +739,8 @@ Status PlatformDarwinKernel::GetSharedModule( } } - // Give the generic methods, including possibly calling into - // DebugSymbols framework on macOS systems, a chance. + // Give the generic methods, including possibly calling into DebugSymbols + // framework on macOS systems, a chance. error = PlatformDarwin::GetSharedModule(module_spec, process, module_sp, module_search_paths_ptr, old_module_sp_ptr, did_create_ptr); @@ -803,11 +793,9 @@ Status PlatformDarwinKernel::ExamineKextForMatchingUUID( } // First try to create a ModuleSP with the file / arch and see if the UUID - // matches. - // If that fails (this exec file doesn't have the correct uuid), don't call - // GetSharedModule - // (which may call in to the DebugSymbols framework and therefore can be - // slow.) + // matches. If that fails (this exec file doesn't have the correct uuid), + // don't call GetSharedModule (which may call in to the DebugSymbols + // framework and therefore can be slow.) ModuleSP module_sp(new Module(exe_spec)); if (module_sp && module_sp->GetObjectFile() && module_sp->MatchesModuleSpec(exe_spec)) { @@ -851,17 +839,13 @@ void PlatformDarwinKernel::CalculateTrapHandlerSymbolNames() { #else // __APPLE__ -// Since DynamicLoaderDarwinKernel is compiled in for all systems, and relies on -// PlatformDarwinKernel for the plug-in name, we compile just the plug-in name -// in -// here to avoid issues. We are tracking an internal bug to resolve this issue -// by -// either not compiling in DynamicLoaderDarwinKernel for non-apple builds, or to -// make -// PlatformDarwinKernel build on all systems. PlatformDarwinKernel is currently -// not -// compiled on other platforms due to the use of the Mac-specific -// source/Host/macosx/cfcpp utilities. +// Since DynamicLoaderDarwinKernel is compiled in for all systems, and relies +// on PlatformDarwinKernel for the plug-in name, we compile just the plug-in +// name in here to avoid issues. We are tracking an internal bug to resolve +// this issue by either not compiling in DynamicLoaderDarwinKernel for non- +// apple builds, or to make PlatformDarwinKernel build on all systems. +// PlatformDarwinKernel is currently not compiled on other platforms due to the +// use of the Mac-specific source/Host/macosx/cfcpp utilities. lldb_private::ConstString PlatformDarwinKernel::GetPluginNameStatic() { static lldb_private::ConstString g_name("darwin-kernel"); diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformMacOSX.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformMacOSX.cpp index 43f4d8bbf02..e6311abfc04 100644 --- a/lldb/source/Plugins/Platform/MacOSX/PlatformMacOSX.cpp +++ b/lldb/source/Plugins/Platform/MacOSX/PlatformMacOSX.cpp @@ -91,9 +91,8 @@ PlatformSP PlatformMacOSX::CreateInstance(bool force, const ArchSpec *arch) { break; #if defined(__APPLE__) - // Only accept "unknown" for vendor if the host is Apple and - // it "unknown" wasn't specified (it was just returned because it - // was NOT specified) + // Only accept "unknown" for vendor if the host is Apple and it "unknown" + // wasn't specified (it was just returned because it was NOT specified) case llvm::Triple::UnknownArch: create = !arch->TripleVendorWasSpecified(); break; @@ -109,9 +108,8 @@ PlatformSP PlatformMacOSX::CreateInstance(bool force, const ArchSpec *arch) { case llvm::Triple::MacOSX: break; #if defined(__APPLE__) - // Only accept "vendor" for vendor if the host is Apple and - // it "unknown" wasn't specified (it was just returned because it - // was NOT specified) + // Only accept "vendor" for vendor if the host is Apple and it "unknown" + // wasn't specified (it was just returned because it was NOT specified) case llvm::Triple::UnknownOS: create = !arch->TripleOSWasSpecified(); break; diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleTV.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleTV.cpp index 1eef643d390..0d6278a5f1a 100644 --- a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleTV.cpp +++ b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleTV.cpp @@ -98,9 +98,9 @@ PlatformSP PlatformRemoteAppleTV::CreateInstance(bool force, break; #if defined(__APPLE__) - // Only accept "unknown" for the vendor if the host is Apple and - // it "unknown" wasn't specified (it was just returned because it - // was NOT specified) + // Only accept "unknown" for the vendor if the host is Apple and it + // "unknown" wasn't specified (it was just returned because it was NOT + // specified) case llvm::Triple::UnknownArch: create = !arch->TripleVendorWasSpecified(); break; diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleWatch.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleWatch.cpp index 17ae67bc28d..3260588d09c 100644 --- a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleWatch.cpp +++ b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteAppleWatch.cpp @@ -93,9 +93,9 @@ PlatformSP PlatformRemoteAppleWatch::CreateInstance(bool force, break; #if defined(__APPLE__) - // Only accept "unknown" for the vendor if the host is Apple and - // it "unknown" wasn't specified (it was just returned because it - // was NOT specified) + // Only accept "unknown" for the vendor if the host is Apple and it + // "unknown" wasn't specified (it was just returned because it was NOT + // specified) case llvm::Triple::UnknownArch: create = !arch->TripleVendorWasSpecified(); break; @@ -123,8 +123,8 @@ PlatformSP PlatformRemoteAppleWatch::CreateInstance(bool force, #if defined(__APPLE__) && \ (defined(__arm__) || defined(__arm64__) || defined(__aarch64__)) - // If lldb is running on a watch, this isn't a RemoteWatch environment; it's a - // local system environment. + // If lldb is running on a watch, this isn't a RemoteWatch environment; it's + // a local system environment. if (force == false) { create = false; } diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteDarwinDevice.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteDarwinDevice.cpp index cb064aad615..01a4c8858c7 100644 --- a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteDarwinDevice.cpp +++ b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteDarwinDevice.cpp @@ -97,9 +97,9 @@ Status PlatformRemoteDarwinDevice::ResolveExecutable( return error; exe_module_sp.reset(); } - // No valid architecture was specified or the exact ARM slice wasn't - // found so ask the platform for the architectures that we should be - // using (in the correct order) and see if we can find a match that way + // No valid architecture was specified or the exact ARM slice wasn't found + // so ask the platform for the architectures that we should be using (in + // the correct order) and see if we can find a match that way StreamString arch_names; for (uint32_t idx = 0; GetSupportedArchitectureAtIndex( idx, resolved_module_spec.GetArchitecture()); @@ -183,8 +183,8 @@ bool PlatformRemoteDarwinDevice::UpdateSDKDirectoryInfosIfNeeded() { &builtin_sdk_directory_infos); // Only add SDK directories that have symbols in them, some SDKs only - // contain - // developer disk images and no symbols, so they aren't useful to us. + // contain developer disk images and no symbols, so they aren't useful to + // us. FileSpec sdk_symbols_symlink_fspec; for (const auto &sdk_directory_info : builtin_sdk_directory_infos) { sdk_symbols_symlink_fspec = sdk_directory_info.directory; @@ -244,8 +244,8 @@ PlatformRemoteDarwinDevice::GetSDKDirectoryForCurrentOSVersion() { if (UpdateSDKDirectoryInfosIfNeeded()) { const uint32_t num_sdk_infos = m_sdk_directory_infos.size(); - // Check to see if the user specified a build string. If they did, then - // be sure to match it. + // Check to see if the user specified a build string. If they did, then be + // sure to match it. std::vector<bool> check_sdk_info(num_sdk_infos, true); ConstString build(m_sdk_build); if (build) { @@ -253,8 +253,8 @@ PlatformRemoteDarwinDevice::GetSDKDirectoryForCurrentOSVersion() { check_sdk_info[i] = m_sdk_directory_infos[i].build == build; } - // If we are connected we can find the version of the OS the platform - // us running on and select the right SDK + // If we are connected we can find the version of the OS the platform us + // running on and select the right SDK uint32_t major, minor, update; if (GetOSVersion(major, minor, update)) { if (UpdateSDKDirectoryInfosIfNeeded()) { @@ -366,8 +366,8 @@ const char *PlatformRemoteDarwinDevice::GetDeviceSupportDirectoryForOSVersion() } } // We should have put a single NULL character into - // m_device_support_directory_for_os_version - // or it should have a valid path if the code gets here + // m_device_support_directory_for_os_version or it should have a valid path + // if the code gets here assert(m_device_support_directory_for_os_version.empty() == false); if (m_device_support_directory_for_os_version[0]) return m_device_support_directory_for_os_version.c_str(); @@ -492,10 +492,9 @@ Status PlatformRemoteDarwinDevice::GetSharedModule( const ModuleSpec &module_spec, Process *process, ModuleSP &module_sp, const FileSpecList *module_search_paths_ptr, ModuleSP *old_module_sp_ptr, bool *did_create_ptr) { - // For iOS, the SDK files are all cached locally on the host - // system. So first we ask for the file in the cached SDK, - // then we attempt to get a shared module for the right architecture - // with the right UUID. + // For iOS, the SDK files are all cached locally on the host system. So first + // we ask for the file in the cached SDK, then we attempt to get a shared + // module for the right architecture with the right UUID. const FileSpec &platform_file = module_spec.GetFileSpec(); Log *log = lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_HOST); @@ -510,8 +509,7 @@ Status PlatformRemoteDarwinDevice::GetSharedModule( const uint32_t num_sdk_infos = m_sdk_directory_infos.size(); // If we are connected we migth be able to correctly deduce the SDK - // directory - // using the OS build. + // directory using the OS build. const uint32_t connected_sdk_idx = GetConnectedSDKIndex(); if (connected_sdk_idx < num_sdk_infos) { LLDB_LOGV(log, "Searching for {0} in sdk path {1}", platform_file, @@ -528,8 +526,8 @@ Status PlatformRemoteDarwinDevice::GetSharedModule( } } - // Try the last SDK index if it is set as most files from an SDK - // will tend to be valid in that same SDK. + // Try the last SDK index if it is set as most files from an SDK will tend + // to be valid in that same SDK. if (m_last_module_sdk_idx < num_sdk_infos) { LLDB_LOGV(log, "Searching for {0} in sdk path {1}", platform_file, m_sdk_directory_infos[m_last_module_sdk_idx].directory); @@ -544,9 +542,9 @@ Status PlatformRemoteDarwinDevice::GetSharedModule( } } - // First try for an exact match of major, minor and update: - // If a particalar SDK version was specified via --version or --build, look - // for a match on disk. + // First try for an exact match of major, minor and update: If a particalar + // SDK version was specified via --version or --build, look for a match on + // disk. const SDKDirectoryInfo *current_sdk_info = GetSDKDirectoryForCurrentOSVersion(); const uint32_t current_sdk_idx = @@ -570,8 +568,7 @@ Status PlatformRemoteDarwinDevice::GetSharedModule( // Second try all SDKs that were found. for (uint32_t sdk_idx = 0; sdk_idx < num_sdk_infos; ++sdk_idx) { if (m_last_module_sdk_idx == sdk_idx) { - // Skip the last module SDK index if we already searched - // it above + // Skip the last module SDK index if we already searched it above continue; } LLDB_LOGV(log, "Searching for {0} in sdk path {1}", platform_file, @@ -582,8 +579,8 @@ Status PlatformRemoteDarwinDevice::GetSharedModule( error = ResolveExecutable(platform_module_spec, module_sp, NULL); if (module_sp) { - // Remember the index of the last SDK that we found a file - // in in case the wrong SDK was selected. + // Remember the index of the last SDK that we found a file in in case + // the wrong SDK was selected. m_last_module_sdk_idx = sdk_idx; error.Clear(); return error; diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.cpp index 5bff792525b..c210271d6fd 100644 --- a/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.cpp +++ b/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.cpp @@ -88,9 +88,9 @@ PlatformSP PlatformRemoteiOS::CreateInstance(bool force, const ArchSpec *arch) { break; #if defined(__APPLE__) - // Only accept "unknown" for the vendor if the host is Apple and - // it "unknown" wasn't specified (it was just returned because it - // was NOT specified) + // Only accept "unknown" for the vendor if the host is Apple and it + // "unknown" wasn't specified (it was just returned because it was NOT + // specified) case llvm::Triple::UnknownArch: create = !arch->TripleVendorWasSpecified(); break; diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformiOSSimulator.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformiOSSimulator.cpp index ee1f90311e7..9cd294455e2 100644 --- a/lldb/source/Plugins/Platform/MacOSX/PlatformiOSSimulator.cpp +++ b/lldb/source/Plugins/Platform/MacOSX/PlatformiOSSimulator.cpp @@ -91,9 +91,9 @@ PlatformSP PlatformiOSSimulator::CreateInstance(bool force, break; #if defined(__APPLE__) - // Only accept "unknown" for the vendor if the host is Apple and - // it "unknown" wasn't specified (it was just returned because it - // was NOT specified) + // Only accept "unknown" for the vendor if the host is Apple and it + // "unknown" wasn't specified (it was just returned because it was NOT + // specified) case llvm::Triple::UnknownArch: create = !arch->TripleVendorWasSpecified(); break; @@ -112,9 +112,9 @@ PlatformSP PlatformiOSSimulator::CreateInstance(bool force, break; #if defined(__APPLE__) - // Only accept "unknown" for the OS if the host is Apple and - // it "unknown" wasn't specified (it was just returned because it - // was NOT specified) + // Only accept "unknown" for the OS if the host is Apple and it + // "unknown" wasn't specified (it was just returned because it was NOT + // specified) case llvm::Triple::UnknownOS: create = !arch->TripleOSWasSpecified(); break; @@ -205,9 +205,9 @@ Status PlatformiOSSimulator::ResolveExecutable( return error; exe_module_sp.reset(); } - // No valid architecture was specified or the exact ARM slice wasn't - // found so ask the platform for the architectures that we should be - // using (in the correct order) and see if we can find a match that way + // No valid architecture was specified or the exact ARM slice wasn't found + // so ask the platform for the architectures that we should be using (in + // the correct order) and see if we can find a match that way StreamString arch_names; ArchSpec platform_arch; for (uint32_t idx = 0; GetSupportedArchitectureAtIndex( @@ -298,8 +298,8 @@ const char *PlatformiOSSimulator::GetSDKDirectoryAsCString() { m_sdk_directory.assign(1, '\0'); } - // We should have put a single NULL character into m_sdk_directory - // or it should have a valid path if the code gets here + // We should have put a single NULL character into m_sdk_directory or it + // should have a valid path if the code gets here assert(m_sdk_directory.empty() == false); if (m_sdk_directory[0]) return m_sdk_directory.c_str(); @@ -342,10 +342,9 @@ Status PlatformiOSSimulator::GetSharedModule( const ModuleSpec &module_spec, Process *process, ModuleSP &module_sp, const FileSpecList *module_search_paths_ptr, ModuleSP *old_module_sp_ptr, bool *did_create_ptr) { - // For iOS, the SDK files are all cached locally on the host - // system. So first we ask for the file in the cached SDK, - // then we attempt to get a shared module for the right architecture - // with the right UUID. + // For iOS, the SDK files are all cached locally on the host system. So first + // we ask for the file in the cached SDK, then we attempt to get a shared + // module for the right architecture with the right UUID. Status error; ModuleSpec platform_module_spec(module_spec); const FileSpec &platform_file = module_spec.GetFileSpec(); @@ -409,14 +408,14 @@ bool PlatformiOSSimulator::GetSupportedArchitectureAtIndex(uint32_t idx, if (arch.IsValid()) { if (idx == 2) arch.GetTriple().setOS(llvm::Triple::IOS); - // 32/64: return "i386-apple-ios" for architecture 2 - // 32/64: return "i386-apple-macosx" for architecture 3 + // 32/64: return "i386-apple-ios" for architecture 2 32/64: return + // "i386-apple-macosx" for architecture 3 return true; } } } else if (idx == 1) { - // This macosx platform supports only 32 bit, so return the *-apple-macosx - // version + // This macosx platform supports only 32 bit, so return the *-apple- + // macosx version arch = platform_arch; return true; } diff --git a/lldb/source/Plugins/Platform/NetBSD/PlatformNetBSD.cpp b/lldb/source/Plugins/Platform/NetBSD/PlatformNetBSD.cpp index 3c78b46dce6..3aa8ecb4c22 100644 --- a/lldb/source/Plugins/Platform/NetBSD/PlatformNetBSD.cpp +++ b/lldb/source/Plugins/Platform/NetBSD/PlatformNetBSD.cpp @@ -30,8 +30,8 @@ #include "lldb/Utility/Status.h" #include "lldb/Utility/StreamString.h" -// Define these constants from NetBSD mman.h for use when targeting -// remote netbsd systems even when host has different values. +// Define these constants from NetBSD mman.h for use when targeting remote +// netbsd systems even when host has different values. #define MAP_PRIVATE 0x0002 #define MAP_ANON 0x1000 @@ -134,7 +134,8 @@ bool PlatformNetBSD::GetSupportedArchitectureAtIndex(uint32_t idx, arch = hostArch; return arch.IsValid(); } else if (idx == 1) { - // If the default host architecture is 64-bit, look for a 32-bit variant + // If the default host architecture is 64-bit, look for a 32-bit + // variant if (hostArch.IsValid() && hostArch.GetTriple().isArch64Bit()) { arch = HostInfo::GetArchitecture(HostInfo::eArchKind32); return arch.IsValid(); @@ -160,13 +161,10 @@ bool PlatformNetBSD::GetSupportedArchitectureAtIndex(uint32_t idx, return false; } // Leave the vendor as "llvm::Triple:UnknownVendor" and don't specify the - // vendor by - // calling triple.SetVendorName("unknown") so that it is a "unspecified - // unknown". - // This means when someone calls triple.GetVendorName() it will return an - // empty string - // which indicates that the vendor can be set when two architectures are - // merged + // vendor by calling triple.SetVendorName("unknown") so that it is a + // "unspecified unknown". This means when someone calls + // triple.GetVendorName() it will return an empty string which indicates + // that the vendor can be set when two architectures are merged // Now set the triple into "arch" and return true arch.SetTriple(triple); @@ -240,8 +238,8 @@ bool PlatformNetBSD::CanDebugProcess() { } // For local debugging, NetBSD will override the debug logic to use llgs-launch -// rather than lldb-launch, llgs-attach. This differs from current lldb-launch, -// debugserver-attach approach on MacOSX. +// rather than lldb-launch, llgs-attach. This differs from current lldb- +// launch, debugserver-attach approach on MacOSX. lldb::ProcessSP PlatformNetBSD::DebugProcess(ProcessLaunchInfo &launch_info, Debugger &debugger, Target *target, // Can be NULL, if NULL create a new @@ -265,8 +263,8 @@ PlatformNetBSD::DebugProcess(ProcessLaunchInfo &launch_info, Debugger &debugger, launch_info.GetFlags().Set(eLaunchFlagDebug); // We always launch the process we are going to debug in a separate process - // group, since then we can handle ^C interrupts ourselves w/o having to worry - // about the target getting them as well. + // group, since then we can handle ^C interrupts ourselves w/o having to + // worry about the target getting them as well. launch_info.SetLaunchInSeparateProcessGroup(true); // Ensure we have a target. diff --git a/lldb/source/Plugins/Platform/OpenBSD/PlatformOpenBSD.cpp b/lldb/source/Plugins/Platform/OpenBSD/PlatformOpenBSD.cpp index 050639aba7c..10ca8fbfbdd 100644 --- a/lldb/source/Plugins/Platform/OpenBSD/PlatformOpenBSD.cpp +++ b/lldb/source/Plugins/Platform/OpenBSD/PlatformOpenBSD.cpp @@ -30,8 +30,8 @@ #include "lldb/Utility/Status.h" #include "lldb/Utility/StreamString.h" -// Define these constants from OpenBSD mman.h for use when targeting -// remote openbsd systems even when host has different values. +// Define these constants from OpenBSD mman.h for use when targeting remote +// openbsd systems even when host has different values. #define MAP_PRIVATE 0x0002 #define MAP_ANON 0x1000 @@ -58,9 +58,8 @@ PlatformSP PlatformOpenBSD::CreateInstance(bool force, const ArchSpec *arch) { break; #if defined(__OpenBSD__) - // Only accept "unknown" for the OS if the host is BSD and - // it "unknown" wasn't specified (it was just returned because it - // was NOT specified) + // Only accept "unknown" for the OS if the host is BSD and it "unknown" + // wasn't specified (it was just returned because it was NOT specified) case llvm::Triple::OSType::UnknownOS: create = !arch->TripleOSWasSpecified(); break; @@ -167,13 +166,10 @@ bool PlatformOpenBSD::GetSupportedArchitectureAtIndex(uint32_t idx, return false; } // Leave the vendor as "llvm::Triple:UnknownVendor" and don't specify the - // vendor by - // calling triple.SetVendorName("unknown") so that it is a "unspecified - // unknown". - // This means when someone calls triple.GetVendorName() it will return an - // empty string - // which indicates that the vendor can be set when two architectures are - // merged + // vendor by calling triple.SetVendorName("unknown") so that it is a + // "unspecified unknown". This means when someone calls + // triple.GetVendorName() it will return an empty string which indicates + // that the vendor can be set when two architectures are merged // Now set the triple into "arch" and return true arch.SetTriple(triple); diff --git a/lldb/source/Plugins/Platform/POSIX/PlatformPOSIX.cpp b/lldb/source/Plugins/Platform/POSIX/PlatformPOSIX.cpp index 41345ec0982..c5b796d850d 100644 --- a/lldb/source/Plugins/Platform/POSIX/PlatformPOSIX.cpp +++ b/lldb/source/Plugins/Platform/POSIX/PlatformPOSIX.cpp @@ -129,8 +129,8 @@ PlatformPOSIX::ResolveExecutable(const ModuleSpec &module_spec, ModuleSpec resolved_module_spec(module_spec); if (IsHost()) { - // If we have "ls" as the exe_file, resolve the executable location based on - // the current path variables + // If we have "ls" as the exe_file, resolve the executable location based + // on the current path variables if (!resolved_module_spec.GetFileSpec().Exists()) { resolved_module_spec.GetFileSpec().GetPath(exe_path, sizeof(exe_path)); resolved_module_spec.GetFileSpec().SetFile(exe_path, true); @@ -215,9 +215,9 @@ PlatformPOSIX::ResolveExecutable(const ModuleSpec &module_spec, resolved_module_spec.GetArchitecture().GetArchitectureName()); } } else { - // No valid architecture was specified, ask the platform for - // the architectures that we should be using (in the correct order) - // and see if we can find a match that way + // No valid architecture was specified, ask the platform for the + // architectures that we should be using (in the correct order) and see + // if we can find a match that way StreamString arch_names; for (uint32_t idx = 0; GetSupportedArchitectureAtIndex( idx, resolved_module_spec.GetArchitecture()); @@ -524,8 +524,8 @@ lldb_private::Status PlatformPOSIX::GetFile( Host::RunShellCommand(command.GetData(), NULL, &retcode, NULL, NULL, 60); if (retcode == 0) return Status(); - // If we are here, rsync has failed - let's try the slow way before giving - // up + // If we are here, rsync has failed - let's try the slow way before + // giving up } // open src and dst // read/write, read/write, read/write, ... @@ -866,9 +866,8 @@ PlatformPOSIX::DebugProcess(ProcessLaunchInfo &launch_info, Debugger &debugger, if (IsHost()) { // We are going to hand this process off to debugserver which will be in - // charge of setting the exit status. - // We still need to reap it from lldb but if we let the monitor thread also - // set the exit status, we set up a + // charge of setting the exit status. We still need to reap it from lldb + // but if we let the monitor thread also set the exit status, we set up a // race between debugserver & us for who will find out about the debugged // process's death. launch_info.GetFlags().Set(eLaunchFlagDontSetExitStatus); @@ -932,10 +931,11 @@ UtilityFunction * PlatformPOSIX::MakeLoadImageUtilityFunction(ExecutionContext &exe_ctx, Status &error) { - // Remember to prepend this with the prefix from GetLibdlFunctionDeclarations. - // The returned values are all in __lldb_dlopen_result for consistency. - // The wrapper returns a void * but doesn't use it because - // UtilityFunctions don't work with void returns at present. + // Remember to prepend this with the prefix from + // GetLibdlFunctionDeclarations. The returned values are all in + // __lldb_dlopen_result for consistency. The wrapper returns a void * but + // doesn't use it because UtilityFunctions don't work with void returns at + // present. static const char *dlopen_wrapper_code = R"( struct __lldb_dlopen_result { void *image_ptr; @@ -1037,7 +1037,7 @@ uint32_t PlatformPOSIX::DoLoadImage(lldb_private::Process *process, Status utility_error; - // The UtilityFunction is held in the Process. Platforms don't track the + // The UtilityFunction is held in the Process. Platforms don't track the // lifespan of the Targets that use them, we can't put this in the Platform. UtilityFunction *dlopen_utility_func = process->GetLoadImageUtilityFunction(this); @@ -1059,8 +1059,8 @@ uint32_t PlatformPOSIX::DoLoadImage(lldb_private::Process *process, } arguments = do_dlopen_function->GetArgumentValues(); - // Now insert the path we are searching for and the result structure into - // the target. + // Now insert the path we are searching for and the result structure into the + // target. uint32_t permissions = ePermissionsReadable|ePermissionsWritable; size_t path_len = path.size() + 1; lldb::addr_t path_addr = process->AllocateMemory(path_len, @@ -1084,8 +1084,8 @@ uint32_t PlatformPOSIX::DoLoadImage(lldb_private::Process *process, return LLDB_INVALID_IMAGE_TOKEN; } - // Make space for our return structure. It is two pointers big: the token and - // the error string. + // Make space for our return structure. It is two pointers big: the token + // and the error string. const uint32_t addr_size = process->GetAddressByteSize(); lldb::addr_t return_addr = process->CallocateMemory(2*addr_size, permissions, diff --git a/lldb/source/Plugins/Platform/Windows/PlatformWindows.cpp b/lldb/source/Plugins/Platform/Windows/PlatformWindows.cpp index 6dd5e90b43d..fdbcd37baea 100644 --- a/lldb/source/Plugins/Platform/Windows/PlatformWindows.cpp +++ b/lldb/source/Plugins/Platform/Windows/PlatformWindows.cpp @@ -237,9 +237,9 @@ Status PlatformWindows::ResolveExecutable( resolved_module_spec.GetArchitecture().GetArchitectureName()); } } else { - // No valid architecture was specified, ask the platform for - // the architectures that we should be using (in the correct order) - // and see if we can find a match that way + // No valid architecture was specified, ask the platform for the + // architectures that we should be using (in the correct order) and see + // if we can find a match that way StreamString arch_names; for (uint32_t idx = 0; GetSupportedArchitectureAtIndex( idx, resolved_module_spec.GetArchitecture()); @@ -413,29 +413,23 @@ ProcessSP PlatformWindows::DebugProcess(ProcessLaunchInfo &launch_info, Debugger &debugger, Target *target, Status &error) { // Windows has special considerations that must be followed when launching or - // attaching to a process. The - // key requirement is that when launching or attaching to a process, you must - // do it from the same the thread - // that will go into a permanent loop which will then receive debug events - // from the process. In particular, - // this means we can't use any of LLDB's generic mechanisms to do it for us, - // because it doesn't have the - // special knowledge required for setting up the background thread or passing - // the right flags. + // attaching to a process. The key requirement is that when launching or + // attaching to a process, you must do it from the same the thread that will + // go into a permanent loop which will then receive debug events from the + // process. In particular, this means we can't use any of LLDB's generic + // mechanisms to do it for us, because it doesn't have the special knowledge + // required for setting up the background thread or passing the right flags. // // Another problem is that that LLDB's standard model for debugging a process - // is to first launch it, have - // it stop at the entry point, and then attach to it. In Windows this doesn't - // quite work, you have to - // specify as an argument to CreateProcess() that you're going to debug the - // process. So we override DebugProcess - // here to handle this. Launch operations go directly to the process plugin, - // and attach operations almost go - // directly to the process plugin (but we hijack the events first). In - // essence, we encapsulate all the logic - // of Launching and Attaching in the process plugin, and - // PlatformWindows::DebugProcess is just a pass-through - // to get to the process plugin. + // is to first launch it, have it stop at the entry point, and then attach to + // it. In Windows this doesn't quite work, you have to specify as an + // argument to CreateProcess() that you're going to debug the process. So we + // override DebugProcess here to handle this. Launch operations go directly + // to the process plugin, and attach operations almost go directly to the + // process plugin (but we hijack the events first). In essence, we + // encapsulate all the logic of Launching and Attaching in the process + // plugin, and PlatformWindows::DebugProcess is just a pass-through to get to + // the process plugin. if (launch_info.GetProcessID() != LLDB_INVALID_PROCESS_ID) { // This is a process attach. Don't need to launch anything. @@ -538,8 +532,8 @@ Status PlatformWindows::GetSharedModule( module_sp.reset(); if (IsRemote()) { - // If we have a remote platform always, let it try and locate - // the shared module first. + // If we have a remote platform always, let it try and locate the shared + // module first. if (m_remote_platform_sp) { error = m_remote_platform_sp->GetSharedModule( module_spec, process, module_sp, module_search_paths_ptr, diff --git a/lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp b/lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp index 6369435961b..a67980156f3 100644 --- a/lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp +++ b/lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp @@ -118,9 +118,9 @@ Status PlatformRemoteGDBServer::ResolveExecutable( return error; exe_module_sp.reset(); } - // No valid architecture was specified or the exact arch wasn't - // found so ask the platform for the architectures that we should be - // using (in the correct order) and see if we can find a match that way + // No valid architecture was specified or the exact arch wasn't found so + // ask the platform for the architectures that we should be using (in the + // correct order) and see if we can find a match that way StreamString arch_names; for (uint32_t idx = 0; GetSupportedArchitectureAtIndex( idx, resolved_module_spec.GetArchitecture()); @@ -277,8 +277,7 @@ bool PlatformRemoteGDBServer::SetRemoteWorkingDirectory( const FileSpec &working_dir) { if (IsConnected()) { // Clear the working directory it case it doesn't get set correctly. This - // will - // for use to re-read it + // will for use to re-read it Log *log = GetLogIfAnyCategoriesSet(LIBLLDB_LOG_PLATFORM); if (log) log->Printf("PlatformRemoteGDBServer::SetRemoteWorkingDirectory('%s')", @@ -540,9 +539,8 @@ bool PlatformRemoteGDBServer::LaunchGDBServer(lldb::pid_t &pid, bool launch_result = false; if (remote_triple.getVendor() == llvm::Triple::Apple && remote_triple.getOS() == llvm::Triple::IOS) { - // When remote debugging to iOS, we use a USB mux that always talks - // to localhost, so we will need the remote debugserver to accept - // connections + // When remote debugging to iOS, we use a USB mux that always talks to + // localhost, so we will need the remote debugserver to accept connections // only from localhost, no matter what our current hostname is launch_result = m_gdb_client.LaunchGDBServer("127.0.0.1", pid, port, socket_name); @@ -740,8 +738,8 @@ const UnixSignalsSP &PlatformRemoteGDBServer::GetRemoteUnixSignals() { if (m_remote_signals_sp) return m_remote_signals_sp; - // If packet not implemented or JSON failed to parse, - // we'll guess the signal set based on the remote architecture. + // If packet not implemented or JSON failed to parse, we'll guess the signal + // set based on the remote architecture. m_remote_signals_sp = UnixSignals::Create(GetRemoteSystemArchitecture()); StringExtractorGDBRemote response; diff --git a/lldb/source/Plugins/Process/Darwin/CFString.cpp b/lldb/source/Plugins/Process/Darwin/CFString.cpp index 84ad56774d7..b87afe99918 100644 --- a/lldb/source/Plugins/Process/Darwin/CFString.cpp +++ b/lldb/source/Plugins/Process/Darwin/CFString.cpp @@ -91,9 +91,8 @@ const char *CFString::UTF8(std::string &str) { return CFString::UTF8(get(), str); } -// Static function that puts a copy of the UTF8 contents of CF_STR into STR -// and returns the C string pointer that is contained in STR when successful, -// else +// Static function that puts a copy of the UTF8 contents of CF_STR into STR and +// returns the C string pointer that is contained in STR when successful, else // NULL is returned. This allows the std::string parameter to own the extracted // string, // and also allows that string to be returned as a C string pointer that can be @@ -120,9 +119,9 @@ const char *CFString::UTF8(CFStringRef cf_str, std::string &str) { // Static function that puts a copy of the file system representation of CF_STR // into STR and returns the C string pointer that is contained in STR when -// successful, else NULL is returned. This allows the std::string parameter -// to own the extracted string, and also allows that string to be returned as -// a C string pointer that can be used. +// successful, else NULL is returned. This allows the std::string parameter to +// own the extracted string, and also allows that string to be returned as a C +// string pointer that can be used. const char *CFString::FileSystemRepresentation(CFStringRef cf_str, std::string &str) { diff --git a/lldb/source/Plugins/Process/Darwin/DarwinProcessLauncher.cpp b/lldb/source/Plugins/Process/Darwin/DarwinProcessLauncher.cpp index 6b3d5f6c117..95659725ce2 100644 --- a/lldb/source/Plugins/Process/Darwin/DarwinProcessLauncher.cpp +++ b/lldb/source/Plugins/Process/Darwin/DarwinProcessLauncher.cpp @@ -142,8 +142,8 @@ static Status ForkChildForPTraceDebugging(const char *path, char const *argv[], } // Use a fork that ties the child process's stdin/out/err to a pseudo - // terminal so we can read it in our MachProcess::STDIOThread - // as unbuffered io. + // terminal so we can read it in our MachProcess::STDIOThread as unbuffered + // io. PseudoTerminal pty; char fork_error[256]; memset(fork_error, 0, sizeof(fork_error)); @@ -167,12 +167,12 @@ static Status ForkChildForPTraceDebugging(const char *path, char const *argv[], // Get BSD signals as mach exceptions. ::ptrace(PT_SIGEXC, 0, 0, 0); - // If our parent is setgid, lets make sure we don't inherit those - // extra powers due to nepotism. + // If our parent is setgid, lets make sure we don't inherit those extra + // powers due to nepotism. if (::setgid(getgid()) == 0) { - // Let the child have its own process group. We need to execute - // this call in both the child and parent to avoid a race - // condition between the two processes. + // Let the child have its own process group. We need to execute this call + // in both the child and parent to avoid a race condition between the two + // processes. // Set the child process group to match its pid. ::setpgid(0, 0); @@ -183,23 +183,22 @@ static Status ForkChildForPTraceDebugging(const char *path, char const *argv[], // Turn this process into the given executable. ::execv(path, (char *const *)argv); } - // Exit with error code. Child process should have taken - // over in above exec call and if the exec fails it will - // exit the child process below. + // Exit with error code. Child process should have taken over in above exec + // call and if the exec fails it will exit the child process below. ::exit(127); } else { //-------------------------------------------------------------- // Parent process //-------------------------------------------------------------- - // Let the child have its own process group. We need to execute - // this call in both the child and parent to avoid a race condition - // between the two processes. + // Let the child have its own process group. We need to execute this call + // in both the child and parent to avoid a race condition between the two + // processes. // Set the child process group to match its pid ::setpgid(*pid, *pid); if (pty_fd) { - // Release our master pty file descriptor so the pty class doesn't - // close it and so we can continue to use it in our STDIO thread + // Release our master pty file descriptor so the pty class doesn't close + // it and so we can continue to use it in our STDIO thread *pty_fd = pty.ReleaseMasterFileDescriptor(); } } @@ -302,8 +301,7 @@ static Status PosixSpawnChildForPTraceDebugging(const char *path, return error; } - // Ensure we clean up the spawnattr structure however we exit this - // function. + // Ensure we clean up the spawnattr structure however we exit this function. std::unique_ptr<posix_spawnattr_t, int (*)(posix_spawnattr_t *)> spawnattr_up( &attr, ::posix_spawnattr_destroy); @@ -332,9 +330,9 @@ static Status PosixSpawnChildForPTraceDebugging(const char *path, #if !defined(__arm__) - // We don't need to do this for ARM, and we really shouldn't now that we - // have multiple CPU subtypes and no posix_spawnattr call that allows us - // to set which CPU subtype to launch... + // We don't need to do this for ARM, and we really shouldn't now that we have + // multiple CPU subtypes and no posix_spawnattr call that allows us to set + // which CPU subtype to launch... cpu_type_t desired_cpu_type = launch_info.GetArchitecture().GetMachOCPUType(); if (desired_cpu_type != LLDB_INVALID_CPUTYPE) { size_t ocount = 0; @@ -374,10 +372,10 @@ static Status PosixSpawnChildForPTraceDebugging(const char *path, int (*)(posix_spawn_file_actions_t *)> file_actions_up(&file_actions, ::posix_spawn_file_actions_destroy); - // We assume the caller has setup the file actions appropriately. We - // are not in the business of figuring out what we really need here. - // lldb-server will have already called FinalizeFileActions() as well - // to button these up properly. + // We assume the caller has setup the file actions appropriately. We are not + // in the business of figuring out what we really need here. lldb-server will + // have already called FinalizeFileActions() as well to button these up + // properly. const size_t num_actions = launch_info.GetNumFileActions(); for (size_t action_index = 0; action_index < num_actions; ++action_index) { const FileAction *const action = @@ -533,8 +531,8 @@ Status LaunchInferior(ProcessLaunchInfo &launch_info, int *pty_master_fd, if (error.Success()) { launch_info.SetProcessID(static_cast<lldb::pid_t>(pid)); } else { - // Reset any variables that might have been set during a failed - // launch attempt. + // Reset any variables that might have been set during a failed launch + // attempt. if (pty_master_fd) *pty_master_fd = -1; @@ -616,8 +614,8 @@ Status LaunchInferior(ProcessLaunchInfo &launch_info, int *pty_master_fd, if (pty_master_fd) *pty_master_fd = launch_info.GetPTY().ReleaseMasterFileDescriptor(); } else { - // Reset any variables that might have been set during a failed - // launch attempt. + // Reset any variables that might have been set during a failed launch + // attempt. if (pty_master_fd) *pty_master_fd = -1; @@ -636,8 +634,8 @@ Status LaunchInferior(ProcessLaunchInfo &launch_info, int *pty_master_fd, } if (launch_info.GetProcessID() == LLDB_INVALID_PROCESS_ID) { - // If we don't have a valid process ID and no one has set the error, - // then return a generic error. + // If we don't have a valid process ID and no one has set the error, then + // return a generic error. if (error.Success()) error.SetErrorStringWithFormat("%s(): failed to launch, no reason " "specified", diff --git a/lldb/source/Plugins/Process/Darwin/MachException.cpp b/lldb/source/Plugins/Process/Darwin/MachException.cpp index d8a1b2187d0..353f2df3213 100644 --- a/lldb/source/Plugins/Process/Darwin/MachException.cpp +++ b/lldb/source/Plugins/Process/Darwin/MachException.cpp @@ -247,20 +247,19 @@ bool MachException::Message::CatchExceptionRaise(task_t task) { bool success = false; state.task_port = task; g_message = &state; - // The exc_server function is the MIG generated server handling function - // to handle messages from the kernel relating to the occurrence of an - // exception in a thread. Such messages are delivered to the exception port - // set via thread_set_exception_ports or task_set_exception_ports. When an - // exception occurs in a thread, the thread sends an exception message to - // its exception port, blocking in the kernel waiting for the receipt of a - // reply. The exc_server function performs all necessary argument handling - // for this kernel message and calls catch_exception_raise, - // catch_exception_raise_state or catch_exception_raise_state_identity, - // which should handle the exception. If the called routine returns - // KERN_SUCCESS, a reply message will be sent, allowing the thread to - // continue from the point of the exception; otherwise, no reply message - // is sent and the called routine must have dealt with the exception - // thread directly. + // The exc_server function is the MIG generated server handling function to + // handle messages from the kernel relating to the occurrence of an exception + // in a thread. Such messages are delivered to the exception port set via + // thread_set_exception_ports or task_set_exception_ports. When an exception + // occurs in a thread, the thread sends an exception message to its exception + // port, blocking in the kernel waiting for the receipt of a reply. The + // exc_server function performs all necessary argument handling for this + // kernel message and calls catch_exception_raise, + // catch_exception_raise_state or catch_exception_raise_state_identity, which + // should handle the exception. If the called routine returns KERN_SUCCESS, a + // reply message will be sent, allowing the thread to continue from the point + // of the exception; otherwise, no reply message is sent and the called + // routine must have dealt with the exception thread directly. if (mach_exc_server(&exc_msg.hdr, &reply_msg.hdr)) { success = true; } else { @@ -383,9 +382,9 @@ Status MachException::PortInfo::Save(task_t task) { log->Printf("MachException::PortInfo::%s(task = 0x%4.4x)", __FUNCTION__, task); - // Be careful to be able to have debugserver built on a newer OS than what - // it is currently running on by being able to start with all exceptions - // and back off to just what is supported on the current system + // Be careful to be able to have debugserver built on a newer OS than what it + // is currently running on by being able to start with all exceptions and + // back off to just what is supported on the current system mask = LLDB_EXC_MASK; count = (sizeof(ports) / sizeof(ports[0])); diff --git a/lldb/source/Plugins/Process/Darwin/NativeProcessDarwin.cpp b/lldb/source/Plugins/Process/Darwin/NativeProcessDarwin.cpp index 518f0d2da4f..3505443abcb 100644 --- a/lldb/source/Plugins/Process/Darwin/NativeProcessDarwin.cpp +++ b/lldb/source/Plugins/Process/Darwin/NativeProcessDarwin.cpp @@ -104,8 +104,8 @@ Status NativeProcessProtocol::Launch( return error; } - // Finalize the processing needed to debug the launched process with - // a NativeProcessDarwin instance. + // Finalize the processing needed to debug the launched process with a + // NativeProcessDarwin instance. error = np_darwin_sp->FinalizeLaunch(launch_flavor, mainloop); if (!error.Success()) { if (log) @@ -194,9 +194,9 @@ Status NativeProcessDarwin::FinalizeLaunch(LaunchFlavor launch_flavor, "mach exception port monitor thread: %s", __FUNCTION__, error.AsCString()); - // Terminate the inferior process. There's nothing meaningful we can - // do if we can't receive signals and exceptions. Since we launched - // the process, it's fair game for us to kill it. + // Terminate the inferior process. There's nothing meaningful we can do if + // we can't receive signals and exceptions. Since we launched the process, + // it's fair game for us to kill it. ::ptrace(PT_KILL, m_pid, 0, 0); SetState(eStateExited); @@ -243,9 +243,9 @@ Status NativeProcessDarwin::FinalizeLaunch(LaunchFlavor launch_flavor, } if (TaskPortForProcessID(error) == TASK_NULL) { - // We failed to get the task for our process ID which is bad. - // Kill our process; otherwise, it will be stopped at the entry - // point and get reparented to someone else and never go away. + // We failed to get the task for our process ID which is bad. Kill our + // process; otherwise, it will be stopped at the entry point and get + // reparented to someone else and never go away. if (log) log->Printf("NativeProcessDarwin::%s(): could not get task port " "for process, sending SIGKILL and exiting: %s", @@ -277,9 +277,9 @@ bool NativeProcessDarwin::ProcessUsingBackBoard() const { return false; } -// Called by the exception thread when an exception has been received from -// our process. The exception message is completely filled and the exception -// data has already been copied. +// Called by the exception thread when an exception has been received from our +// process. The exception message is completely filled and the exception data +// has already been copied. void NativeProcessDarwin::ExceptionMessageReceived( const MachException::Message &message) { Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_PROCESS | LIBLLDB_LOG_VERBOSE)); @@ -290,8 +290,8 @@ void NativeProcessDarwin::ExceptionMessageReceived( SuspendTask(); } - // Use a locker to automatically unlock our mutex in case of exceptions - // Add the exception to our internal exception stack + // Use a locker to automatically unlock our mutex in case of exceptions Add + // the exception to our internal exception stack m_exception_messages.push_back(message); if (log) @@ -324,13 +324,12 @@ void *NativeProcessDarwin::DoExceptionThread() { // Ensure we don't get CPU starved. MaybeRaiseThreadPriority(); - // We keep a count of the number of consecutive exceptions received so - // we know to grab all exceptions without a timeout. We do this to get a - // bunch of related exceptions on our exception port so we can process - // then together. When we have multiple threads, we can get an exception - // per thread and they will come in consecutively. The main loop in this - // thread can stop periodically if needed to service things related to this - // process. + // We keep a count of the number of consecutive exceptions received so we + // know to grab all exceptions without a timeout. We do this to get a bunch + // of related exceptions on our exception port so we can process then + // together. When we have multiple threads, we can get an exception per + // thread and they will come in consecutively. The main loop in this thread + // can stop periodically if needed to service things related to this process. // // [did we lose some words here?] // @@ -338,15 +337,15 @@ void *NativeProcessDarwin::DoExceptionThread() { // 0 our exception port. After we get one exception, we then will use the // MACH_RCV_TIMEOUT option with a zero timeout to grab all other current // exceptions for our process. After we have received the last pending - // exception, we will get a timeout which enables us to then notify - // our main thread that we have an exception bundle available. We then wait - // for the main thread to tell this exception thread to start trying to get + // exception, we will get a timeout which enables us to then notify our main + // thread that we have an exception bundle available. We then wait for the + // main thread to tell this exception thread to start trying to get // exceptions messages again and we start again with a mach_msg read with // infinite timeout. // // We choose to park a thread on this, rather than polling, because the - // polling is expensive. On devices, we need to minimize overhead caused - // by the process monitor. + // polling is expensive. On devices, we need to minimize overhead caused by + // the process monitor. uint32_t num_exceptions_received = 0; Status error; task_t task = m_task; @@ -359,8 +358,7 @@ void *NativeProcessDarwin::DoExceptionThread() { CFReleaser<SBSWatchdogAssertionRef> watchdog; if (process->ProcessUsingSpringBoard()) { - // Request a renewal for every 60 seconds if we attached using - // SpringBoard. + // Request a renewal for every 60 seconds if we attached using SpringBoard. watchdog.reset(::SBSWatchdogAssertionCreateForPID(nullptr, pid, 60)); if (log) log->Printf("::SBSWatchdogAssertionCreateForPID(NULL, %4.4x, 60) " @@ -401,18 +399,18 @@ void *NativeProcessDarwin::DoExceptionThread() { } #endif // #ifdef WITH_BKS - // Do we want to use a weak pointer to the NativeProcessDarwin here, in - // which case we can guarantee we don't whack the process monitor if we - // race between this thread and the main one on shutdown? + // Do we want to use a weak pointer to the NativeProcessDarwin here, in which + // case we can guarantee we don't whack the process monitor if we race + // between this thread and the main one on shutdown? while (IsExceptionPortValid()) { ::pthread_testcancel(); MachException::Message exception_message; if (num_exceptions_received > 0) { - // We don't want a timeout here, just receive as many exceptions as - // we can since we already have one. We want to get all currently - // available exceptions for this task at once. + // We don't want a timeout here, just receive as many exceptions as we + // can since we already have one. We want to get all currently available + // exceptions for this task at once. error = exception_message.Receive( GetExceptionPort(), MACH_RCV_MSG | MACH_RCV_INTERRUPT | MACH_RCV_TIMEOUT, 0); @@ -424,8 +422,8 @@ void *NativeProcessDarwin::DoExceptionThread() { MACH_RCV_TIMEOUT, periodic_timeout); } else { - // We don't need to parse all current exceptions or stop - // periodically, just wait for an exception forever. + // We don't need to parse all current exceptions or stop periodically, + // just wait for an exception forever. error = exception_message.Receive(GetExceptionPort(), MACH_RCV_MSG | MACH_RCV_INTERRUPT, 0); } @@ -462,8 +460,8 @@ void *NativeProcessDarwin::DoExceptionThread() { __FUNCTION__); continue; } else { - // The inferior task is no longer valid. Time to exit as - // the process has gone away. + // The inferior task is no longer valid. Time to exit as the process + // has gone away. if (log) log->Printf("NativeProcessDarwin::%s(): the inferior task " "has exited, and so will we...", @@ -476,18 +474,17 @@ void *NativeProcessDarwin::DoExceptionThread() { // We timed out when waiting for exceptions. if (num_exceptions_received > 0) { - // We were receiving all current exceptions with a timeout of - // zero. It is time to go back to our normal looping mode. + // We were receiving all current exceptions with a timeout of zero. + // It is time to go back to our normal looping mode. num_exceptions_received = 0; - // Notify our main thread we have a complete exception message - // bundle available. Get the possibly updated task port back - // from the process in case we exec'ed and our task port - // changed. + // Notify our main thread we have a complete exception message bundle + // available. Get the possibly updated task port back from the + // process in case we exec'ed and our task port changed. task = ExceptionMessageBundleComplete(); - // In case we use a timeout value when getting exceptions, - // make sure our task is still valid. + // In case we use a timeout value when getting exceptions, make sure + // our task is still valid. if (IsTaskValid(task)) { // Task is still ok. if (log) @@ -496,8 +493,8 @@ void *NativeProcessDarwin::DoExceptionThread() { __FUNCTION__); continue; } else { - // The inferior task is no longer valid. Time to exit as - // the process has gone away. + // The inferior task is no longer valid. Time to exit as the + // process has gone away. if (log) log->Printf("NativeProcessDarwin::%s(): the inferior " "task has exited, and so will we...", @@ -534,10 +531,8 @@ void *NativeProcessDarwin::DoExceptionThread() { // TODO: change SBSWatchdogAssertionRelease to SBSWatchdogAssertionCancel // when we // all are up and running on systems that support it. The SBS framework has - // a #define - // that will forward SBSWatchdogAssertionRelease to - // SBSWatchdogAssertionCancel for now - // so it should still build either way. + // a #define that will forward SBSWatchdogAssertionRelease to + // SBSWatchdogAssertionCancel for now so it should still build either way. DNBLogThreadedIf(LOG_TASK, "::SBSWatchdogAssertionRelease(%p)", watchdog.get()); ::SBSWatchdogAssertionRelease(watchdog.get()); @@ -728,8 +723,8 @@ task_t NativeProcessDarwin::ExceptionMessageBundleComplete() { const int signo = m_exception_messages[i].state.SoftSignal(); if (signo == SIGTRAP) { // SIGTRAP could mean that we exec'ed. We need to check the - // dyld all_image_infos.infoArray to see if it is NULL and if - // so, say that we exec'ed. + // dyld all_image_infos.infoArray to see if it is NULL and if so, say + // that we exec'ed. const addr_t aii_addr = GetDYLDAllImageInfosAddress(error); if (aii_addr == LLDB_INVALID_ADDRESS) break; @@ -744,12 +739,12 @@ task_t NativeProcessDarwin::ExceptionMessageBundleComplete() { bytes_read); // #bytes read if (read_error.Success() && (bytes_read == 4)) { if (info_array_count == 0) { - // We got the all infos address, and there are zero - // entries. We think we exec'd. + // We got the all infos address, and there are zero entries. We + // think we exec'd. m_did_exec = true; - // Force the task port to update itself in case the - // task port changed after exec + // Force the task port to update itself in case the task port + // changed after exec const task_t old_task = m_task; const bool force_update = true; const task_t new_task = TaskPortForProcessID(error, force_update); @@ -810,8 +805,7 @@ task_t NativeProcessDarwin::ExceptionMessageBundleComplete() { // 4 - We might need to resume if we stopped only with the // interrupt signal that we never handled. if (m_auto_resume_signo != 0) { - // Only auto_resume if we stopped with _only_ the interrupt - // signal. + // Only auto_resume if we stopped with _only_ the interrupt signal. if (num_task_exceptions == 1) { auto_resume = true; if (log) @@ -831,8 +825,8 @@ task_t NativeProcessDarwin::ExceptionMessageBundleComplete() { } } - // Let all threads recover from stopping and do any clean up based - // on the previous thread state (if any). + // Let all threads recover from stopping and do any clean up based on the + // previous thread state (if any). m_thread_list.ProcessDidStop(*this); // Let each thread know of any exceptions @@ -863,8 +857,8 @@ task_t NativeProcessDarwin::ExceptionMessageBundleComplete() { // TODO - need to hook up event system here. !!!! #if 0 // Wait for the eEventProcessRunningStateChanged event to be reset - // before changing state to stopped to avoid race condition with - // very fast start/stops. + // before changing state to stopped to avoid race condition with very + // fast start/stops. struct timespec timeout; //DNBTimer::OffsetTimeOfDay(&timeout, 0, 250 * 1000); // Wait for 250 ms @@ -889,12 +883,12 @@ Status NativeProcessDarwin::StartWaitpidThread(MainLoop &main_loop) { Status error; Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_PROCESS)); - // Strategy: create a thread that sits on waitpid(), waiting for the - // inferior process to die, reaping it in the process. Arrange for - // the thread to have a pipe file descriptor that it can send a byte - // over when the waitpid completes. Have the main loop have a read - // object for the other side of the pipe, and have the callback for - // the read do the process termination message sending. + // Strategy: create a thread that sits on waitpid(), waiting for the inferior + // process to die, reaping it in the process. Arrange for the thread to have + // a pipe file descriptor that it can send a byte over when the waitpid + // completes. Have the main loop have a read object for the other side of + // the pipe, and have the callback for the read do the process termination + // message sending. // Create a single-direction communication channel. const bool child_inherits = false; @@ -1025,8 +1019,8 @@ void *NativeProcessDarwin::DoWaitpidThread() { } } - // We should never exit as long as our child process is alive. If we - // get here, something completely unexpected went wrong and we should exit. + // We should never exit as long as our child process is alive. If we get + // here, something completely unexpected went wrong and we should exit. if (log) log->Printf( "NativeProcessDarwin::%s(): internal error: waitpid thread " @@ -1157,8 +1151,8 @@ task_t NativeProcessDarwin::TaskPortForProcessID(Status &error, ::usleep(usec_interval); } - // We failed to get the task for the inferior process. - // Ensure that it is cleared out. + // We failed to get the task for the inferior process. Ensure that it is + // cleared out. m_task = TASK_NULL; } return m_task; @@ -1196,9 +1190,9 @@ Status NativeProcessDarwin::PrivateResume() { } // bool stepOverBreakInstruction = step; - // Let the thread prepare to resume and see if any threads want us to - // step over a breakpoint instruction (ProcessWillResume will modify - // the value of stepOverBreakInstruction). + // Let the thread prepare to resume and see if any threads want us to step + // over a breakpoint instruction (ProcessWillResume will modify the value of + // stepOverBreakInstruction). m_thread_list.ProcessWillResume(*this, m_thread_actions); // Set our state accordingly @@ -1254,8 +1248,8 @@ Status NativeProcessDarwin::ReplyToAllExceptions() { error = message.Reply(m_pid, m_task, thread_reply_signal); if (error.Fail() && log) { - // We log any error here, but we don't stop the exception - // response handling. + // We log any error here, but we don't stop the exception response + // handling. log->Printf("NativeProcessDarwin::%s(): failed to reply to " "exception: %s", __FUNCTION__, error.AsCString()); @@ -1263,8 +1257,8 @@ Status NativeProcessDarwin::ReplyToAllExceptions() { } } - // Erase all exception message as we should have used and replied - // to them all already. + // Erase all exception message as we should have used and replied to them all + // already. m_exception_messages.clear(); return error; } @@ -1292,8 +1286,8 @@ Status NativeProcessDarwin::ResumeTask() { "0x%4.4x", __FUNCTION__, m_task); - // Get the BasicInfo struct to verify that we're suspended before we try - // to resume the task. + // Get the BasicInfo struct to verify that we're suspended before we try to + // resume the task. struct task_basic_info task_info; error = GetTaskBasicInfo(m_task, &task_info); if (error.Fail()) { @@ -1304,9 +1298,8 @@ Status NativeProcessDarwin::ResumeTask() { return error; } - // task_resume isn't counted like task_suspend calls are, so if the - // task is not suspended, don't try and resume it since it is already - // running + // task_resume isn't counted like task_suspend calls are, so if the task is + // not suspended, don't try and resume it since it is already running if (task_info.suspend_count > 0) { auto mach_err = ::task_resume(m_task); error.SetError(mach_err, eErrorTypeMachKernel); diff --git a/lldb/source/Plugins/Process/Darwin/NativeThreadDarwin.cpp b/lldb/source/Plugins/Process/Darwin/NativeThreadDarwin.cpp index 07398ab7b67..521c6d5c8fd 100644 --- a/lldb/source/Plugins/Process/Darwin/NativeThreadDarwin.cpp +++ b/lldb/source/Plugins/Process/Darwin/NativeThreadDarwin.cpp @@ -30,8 +30,8 @@ uint64_t NativeThreadDarwin::GetGloballyUniqueThreadIDForMachPortID( (thread_info_t)&tident, &tident_count); if (mach_err != KERN_SUCCESS) { // When we fail to get thread info for the supposed port, assume it is - // really a globally unique thread id already, or return the best thing - // we can, which is the thread port. + // really a globally unique thread id already, or return the best thing we + // can, which is the thread port. return mach_port_id; } return tident.thread_id; @@ -47,9 +47,9 @@ NativeThreadDarwin::NativeThreadDarwin(NativeProcessDarwin *process, bool NativeThreadDarwin::GetIdentifierInfo() { // Don't try to get the thread info once and cache it for the life of the - // thread. It changes over time, for instance - // if the thread name changes, then the thread_handle also changes... So you - // have to refetch it every time. + // thread. It changes over time, for instance if the thread name changes, + // then the thread_handle also changes... So you have to refetch it every + // time. mach_msg_type_number_t count = THREAD_IDENTIFIER_INFO_COUNT; kern_return_t kret = ::thread_info(m_mach_thread_port, THREAD_IDENTIFIER_INFO, (thread_info_t)&m_ident_info, &count); @@ -137,16 +137,16 @@ bool NativeThreadDarwin::NotifyException(MachException::Data &exc) { // TODO implement this. #if 0 // Allow the arch specific protocol to process (MachException::Data &)exc - // first before possible reassignment of m_stop_exception with exc. - // See also MachThread::GetStopException(). + // first before possible reassignment of m_stop_exception with exc. See + // also MachThread::GetStopException(). bool handled = m_arch_ap->NotifyException(exc); if (m_stop_exception.IsValid()) { // We may have more than one exception for a thread, but we need to - // only remember the one that we will say is the reason we stopped. - // We may have been single stepping and also gotten a signal exception, - // so just remember the most pertinent one. + // only remember the one that we will say is the reason we stopped. We + // may have been single stepping and also gotten a signal exception, so + // just remember the most pertinent one. if (m_stop_exception.IsBreakpoint()) m_stop_exception = exc; } @@ -170,8 +170,8 @@ bool NativeThreadDarwin::ShouldStop(bool &step_more) const { if (bp) { - // This thread is sitting at a breakpoint, ask the breakpoint - // if we should be stopping here. + // This thread is sitting at a breakpoint, ask the breakpoint if we + // should be stopping here. return true; } else @@ -181,11 +181,10 @@ bool NativeThreadDarwin::ShouldStop(bool &step_more) const { step_more = true; return false; } - // The thread state is used to let us know what the thread was - // trying to do. MachThread::ThreadWillResume() will set the - // thread state to various values depending if the thread was - // the current thread and if it was to be single stepped, or - // resumed. + // The thread state is used to let us know what the thread was trying + // to do. MachThread::ThreadWillResume() will set the thread state to + // various values depending if the thread was the current thread and if + // it was to be single stepped, or resumed. if (GetState() == eStateRunning) { // If our state is running, then we should continue as we are in @@ -194,8 +193,7 @@ bool NativeThreadDarwin::ShouldStop(bool &step_more) const { } else { - // Stop if we have any kind of valid exception for this - // thread. + // Stop if we have any kind of valid exception for this thread. if (GetStopException().IsValid()) return true; } @@ -209,17 +207,17 @@ bool NativeThreadDarwin::ShouldStop(bool &step_more) const { void NativeThreadDarwin::ThreadDidStop() { // TODO implement this. #if 0 - // This thread has existed prior to resuming under debug nub control, - // and has just been stopped. Do any cleanup that needs to be done - // after running. + // This thread has existed prior to resuming under debug nub control, and + // has just been stopped. Do any cleanup that needs to be done after + // running. - // The thread state and breakpoint will still have the same values - // as they had prior to resuming the thread, so it makes it easy to check - // if we were trying to step a thread, or we tried to resume while being - // at a breakpoint. + // The thread state and breakpoint will still have the same values as they + // had prior to resuming the thread, so it makes it easy to check if we + // were trying to step a thread, or we tried to resume while being at a + // breakpoint. - // When this method gets called, the process state is still in the - // state it was in while running so we can act accordingly. + // When this method gets called, the process state is still in the state it + // was in while running so we can act accordingly. m_arch_ap->ThreadDidStop(); diff --git a/lldb/source/Plugins/Process/Darwin/NativeThreadListDarwin.cpp b/lldb/source/Plugins/Process/Darwin/NativeThreadListDarwin.cpp index 7d44adeec37..4ff662e4209 100644 --- a/lldb/source/Plugins/Process/Darwin/NativeThreadListDarwin.cpp +++ b/lldb/source/Plugins/Process/Darwin/NativeThreadListDarwin.cpp @@ -308,8 +308,8 @@ uint32_t NativeThreadListDarwin::UpdateThreadList(NativeProcessDarwin &process, __FUNCTION__, process.GetID(), update, process.GetStopID()); if (process.GetStopID() == 0) { - // On our first stop, we'll record details like 32/64 bitness and - // select the proper architecture implementation. + // On our first stop, we'll record details like 32/64 bitness and select + // the proper architecture implementation. // int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_PID, (int)process.GetID()}; @@ -358,9 +358,9 @@ uint32_t NativeThreadListDarwin::UpdateThreadList(NativeProcessDarwin &process, if (thread_list_count > 0) { collection currThreads; size_t idx; - // Iterator through the current thread list and see which threads - // we already have in our list (keep them), which ones we don't - // (add them), and which ones are not around anymore (remove them). + // Iterator through the current thread list and see which threads we + // already have in our list (keep them), which ones we don't (add them), + // and which ones are not around anymore (remove them). for (idx = 0; idx < thread_list_count; ++idx) { // Get the Mach thread port. const ::thread_t mach_port_num = thread_list[idx]; @@ -373,18 +373,18 @@ uint32_t NativeThreadListDarwin::UpdateThreadList(NativeProcessDarwin &process, // Retrieve the thread if it exists. auto thread_sp = GetThreadByID(unique_thread_id); if (thread_sp) { - // We are already tracking it. Keep the existing native - // thread instance. + // We are already tracking it. Keep the existing native thread + // instance. currThreads.push_back(thread_sp); } else { - // We don't have a native thread instance for this thread. - // Create it now. + // We don't have a native thread instance for this thread. Create it + // now. thread_sp.reset(new NativeThreadDarwin( &process, m_is_64_bit, unique_thread_id, mach_port_num)); - // Add the new thread regardless of its is user ready state. - // Make sure the thread is ready to be displayed and shown - // to users before we add this thread to our list... + // Add the new thread regardless of its is user ready state. Make + // sure the thread is ready to be displayed and shown to users before + // we add this thread to our list... if (thread_sp->IsUserReady()) { if (new_threads) new_threads->push_back(thread_sp); @@ -417,9 +417,9 @@ NativeThreadListDarwin::CurrentThread (MachThreadSP& thread_sp) PTHREAD_MUTEX_LOCKER (locker, m_threads_mutex); if (m_current_thread.get() == NULL) { - // Figure out which thread is going to be our current thread. - // This is currently done by finding the first thread in the list - // that has a valid exception. + // Figure out which thread is going to be our current thread. This is + // currently done by finding the first thread in the list that has a + // valid exception. const size_t num_threads = m_threads.size(); for (uint32_t idx = 0; idx < num_threads; ++idx) { @@ -455,8 +455,8 @@ void NativeThreadListDarwin::ProcessWillResume( NativeProcessDarwin &process, const ResumeActionList &thread_actions) { std::lock_guard<std::recursive_mutex> locker(m_threads_mutex); - // Update our thread list, because sometimes libdispatch or the kernel - // will spawn threads while a task is suspended. + // Update our thread list, because sometimes libdispatch or the kernel will + // spawn threads while a task is suspended. NativeThreadListDarwin::collection new_threads; // TODO implement this. @@ -489,7 +489,8 @@ void NativeThreadListDarwin::ProcessWillResume( #if 0 DNBThreadResumeAction resume_new_threads = { -1U, eStateRunning, 0, INVALID_NUB_ADDRESS }; - // If we are planning to run only one thread, any new threads should be suspended. + // If we are planning to run only one thread, any new threads should be + // suspended. if (run_one_thread) resume_new_threads.state = eStateSuspended; @@ -549,11 +550,11 @@ uint32_t NativeThreadListDarwin::ProcessDidStop(NativeProcessDarwin &process) { } //---------------------------------------------------------------------- -// Check each thread in our thread list to see if we should notify our -// client of the current halt in execution. +// Check each thread in our thread list to see if we should notify our client +// of the current halt in execution. // -// Breakpoints can have callback functions associated with them than -// can return true to stop, or false to continue executing the inferior. +// Breakpoints can have callback functions associated with them than can return +// true to stop, or false to continue executing the inferior. // // RETURNS // true if we should stop and notify our clients @@ -607,8 +608,9 @@ NativeThreadListDarwin::DisableHardwareBreakpoint (const DNBBreakpoint* bp) cons return false; } -// DNBWatchpointSet() -> MachProcess::CreateWatchpoint() -> MachProcess::EnableWatchpoint() -// -> NativeThreadListDarwin::EnableHardwareWatchpoint(). +// DNBWatchpointSet() -> MachProcess::CreateWatchpoint() -> +// MachProcess::EnableWatchpoint() -> +// NativeThreadListDarwin::EnableHardwareWatchpoint(). uint32_t NativeThreadListDarwin::EnableHardwareWatchpoint (const DNBBreakpoint* wp) const { @@ -617,14 +619,16 @@ NativeThreadListDarwin::EnableHardwareWatchpoint (const DNBBreakpoint* wp) const { PTHREAD_MUTEX_LOCKER (locker, m_threads_mutex); const size_t num_threads = m_threads.size(); - // On Mac OS X we have to prime the control registers for new threads. We do this - // using the control register data for the first thread, for lack of a better way of choosing. + // On Mac OS X we have to prime the control registers for new threads. + // We do this using the control register data for the first thread, for + // lack of a better way of choosing. bool also_set_on_task = true; for (uint32_t idx = 0; idx < num_threads; ++idx) { if ((hw_index = m_threads[idx]->EnableHardwareWatchpoint(wp, also_set_on_task)) == INVALID_NUB_HW_INDEX) { - // We know that idx failed for some reason. Let's rollback the transaction for [0, idx). + // We know that idx failed for some reason. Let's rollback the + // transaction for [0, idx). for (uint32_t i = 0; i < idx; ++i) m_threads[i]->RollbackTransForHWP(); return INVALID_NUB_HW_INDEX; @@ -647,14 +651,16 @@ NativeThreadListDarwin::DisableHardwareWatchpoint (const DNBBreakpoint* wp) cons PTHREAD_MUTEX_LOCKER (locker, m_threads_mutex); const size_t num_threads = m_threads.size(); - // On Mac OS X we have to prime the control registers for new threads. We do this - // using the control register data for the first thread, for lack of a better way of choosing. + // On Mac OS X we have to prime the control registers for new threads. + // We do this using the control register data for the first thread, for + // lack of a better way of choosing. bool also_set_on_task = true; for (uint32_t idx = 0; idx < num_threads; ++idx) { if (!m_threads[idx]->DisableHardwareWatchpoint(wp, also_set_on_task)) { - // We know that idx failed for some reason. Let's rollback the transaction for [0, idx). + // We know that idx failed for some reason. Let's rollback the + // transaction for [0, idx). for (uint32_t i = 0; i < idx; ++i) m_threads[i]->RollbackTransForHWP(); return false; @@ -675,7 +681,8 @@ NativeThreadListDarwin::NumSupportedHardwareWatchpoints () const { PTHREAD_MUTEX_LOCKER (locker, m_threads_mutex); const size_t num_threads = m_threads.size(); - // Use an arbitrary thread to retrieve the number of supported hardware watchpoints. + // Use an arbitrary thread to retrieve the number of supported hardware + // watchpoints. if (num_threads) return m_threads[0]->NumSupportedHardwareWatchpoints(); return 0; diff --git a/lldb/source/Plugins/Process/FreeBSD/FreeBSDThread.cpp b/lldb/source/Plugins/Process/FreeBSD/FreeBSDThread.cpp index e6557c2d58e..4b0d640c6c2 100644 --- a/lldb/source/Plugins/Process/FreeBSD/FreeBSDThread.cpp +++ b/lldb/source/Plugins/Process/FreeBSD/FreeBSDThread.cpp @@ -69,15 +69,15 @@ FreeBSDThread::FreeBSDThread(Process &process, lldb::tid_t tid) for (uint32_t wp_idx = 0; wp_idx < wp_size; wp_idx++) { lldb::WatchpointSP wp = wp_list.GetByIndex(wp_idx); if (wp.get() && wp->IsEnabled()) { - // This watchpoint as been enabled; obviously this "new" thread - // has been created since that watchpoint was enabled. Since - // the POSIXBreakpointProtocol has yet to be initialized, its - // m_watchpoints_initialized member will be FALSE. Attempting to - // read the debug status register to determine if a watchpoint - // has been hit would result in the zeroing of that register. - // Since the active debug registers would have been cloned when - // this thread was created, simply force the m_watchpoints_initized - // member to TRUE and avoid resetting dr6 and dr7. + // This watchpoint as been enabled; obviously this "new" thread has been + // created since that watchpoint was enabled. Since the + // POSIXBreakpointProtocol has yet to be initialized, its + // m_watchpoints_initialized member will be FALSE. Attempting to read + // the debug status register to determine if a watchpoint has been hit + // would result in the zeroing of that register. Since the active debug + // registers would have been cloned when this thread was created, simply + // force the m_watchpoints_initized member to TRUE and avoid resetting + // dr6 and dr7. GetPOSIXBreakpointProtocol()->ForceWatchpointsInitialized(); } } @@ -98,9 +98,8 @@ void FreeBSDThread::RefreshStateAfterStop() { // context by the time this function gets called. The KDPRegisterContext // class has been made smart enough to detect when it needs to invalidate // which registers are valid by putting hooks in the register read and - // register supply functions where they check the process stop ID and do - // the right thing. - // if (StateIsStoppedState(GetState()) + // register supply functions where they check the process stop ID and do the + // right thing. if (StateIsStoppedState(GetState()) { const bool force = false; GetRegisterContext()->InvalidateIfNeeded(force); @@ -469,20 +468,17 @@ void FreeBSDThread::BreakNotify(const ProcessMessage &message) { GetProcess()->GetBreakpointSiteList().FindByAddress(pc)); // If the breakpoint is for this thread, then we'll report the hit, but if it - // is for another thread, - // we create a stop reason with should_stop=false. If there is no breakpoint - // location, then report - // an invalid stop reason. We don't need to worry about stepping over the - // breakpoint here, that will - // be taken care of when the thread resumes and notices that there's a + // is for another thread, we create a stop reason with should_stop=false. If + // there is no breakpoint location, then report an invalid stop reason. We + // don't need to worry about stepping over the breakpoint here, that will be + // taken care of when the thread resumes and notices that there's a // breakpoint under the pc. if (bp_site) { lldb::break_id_t bp_id = bp_site->GetID(); // If we have an operating system plug-in, we might have set a thread - // specific breakpoint using the - // operating system thread ID, so we can't make any assumptions about the - // thread ID so we must always - // report the breakpoint regardless of the thread. + // specific breakpoint using the operating system thread ID, so we can't + // make any assumptions about the thread ID so we must always report the + // breakpoint regardless of the thread. if (bp_site->ValidForThisThread(this) || GetProcess()->GetOperatingSystem() != NULL) SetStopInfo(StopInfo::CreateStopReasonWithBreakpointSiteID(*this, bp_id)); @@ -541,13 +537,12 @@ void FreeBSDThread::TraceNotify(const ProcessMessage &message) { lldb::BreakpointSiteSP bp_site( GetProcess()->GetBreakpointSiteList().FindByAddress(pc)); - // If the current pc is a breakpoint site then set the StopInfo to Breakpoint. - // Otherwise, set the StopInfo to Watchpoint or Trace. - // If we have an operating system plug-in, we might have set a thread specific - // breakpoint using the - // operating system thread ID, so we can't make any assumptions about the - // thread ID so we must always - // report the breakpoint regardless of the thread. + // If the current pc is a breakpoint site then set the StopInfo to + // Breakpoint. Otherwise, set the StopInfo to Watchpoint or Trace. If we have + // an operating system plug-in, we might have set a thread specific + // breakpoint using the operating system thread ID, so we can't make any + // assumptions about the thread ID so we must always report the breakpoint + // regardless of the thread. if (bp_site && (bp_site->ValidForThisThread(this) || GetProcess()->GetOperatingSystem() != NULL)) SetStopInfo(StopInfo::CreateStopReasonWithBreakpointSiteID( diff --git a/lldb/source/Plugins/Process/FreeBSD/ProcessFreeBSD.cpp b/lldb/source/Plugins/Process/FreeBSD/ProcessFreeBSD.cpp index ec33bf903d3..aa8464e9862 100644 --- a/lldb/source/Plugins/Process/FreeBSD/ProcessFreeBSD.cpp +++ b/lldb/source/Plugins/Process/FreeBSD/ProcessFreeBSD.cpp @@ -357,10 +357,10 @@ ProcessFreeBSD::GetFileSpec(const lldb_private::FileAction *file_action, if (file_action && file_action->GetAction() == FileAction::eFileActionOpen) { file_spec = file_action->GetFileSpec(); - // By default the stdio paths passed in will be pseudo-terminal - // (/dev/pts). If so, convert to using a different default path - // instead to redirect I/O to the debugger console. This should - // also handle user overrides to /dev/null or a different file. + // By default the stdio paths passed in will be pseudo-terminal (/dev/pts). + // If so, convert to using a different default path instead to redirect I/O + // to the debugger console. This should also handle user overrides to + // /dev/null or a different file. if (!file_spec || file_spec == dbg_pts_file_spec) file_spec = default_file_spec; } @@ -655,8 +655,8 @@ ProcessFreeBSD::GetSoftwareBreakpointTrapOpcode(BreakpointSite *bp_site) { break; case llvm::Triple::arm: { - // The ARM reference recommends the use of 0xe7fddefe and 0xdefe - // but the linux kernel does otherwise. + // The ARM reference recommends the use of 0xe7fddefe and 0xdefe but the + // linux kernel does otherwise. static const uint8_t g_arm_breakpoint_opcode[] = {0xf0, 0x01, 0xf0, 0xe7}; static const uint8_t g_thumb_breakpoint_opcode[] = {0x01, 0xde}; @@ -744,8 +744,8 @@ Status ProcessFreeBSD::EnableWatchpoint(Watchpoint *wp, bool notify) { wp->SetEnabled(true, notify); return error; } else { - // Watchpoint enabling failed on at least one - // of the threads so roll back all of them + // Watchpoint enabling failed on at least one of the threads so roll + // back all of them DisableWatchpoint(wp, false); error.SetErrorString("Setting hardware watchpoint failed"); } @@ -812,8 +812,8 @@ Status ProcessFreeBSD::GetWatchpointSupportInfo(uint32_t &num) { Status ProcessFreeBSD::GetWatchpointSupportInfo(uint32_t &num, bool &after) { Status error = GetWatchpointSupportInfo(num); - // Watchpoints trigger and halt the inferior after - // the corresponding instruction has been executed. + // Watchpoints trigger and halt the inferior after the corresponding + // instruction has been executed. after = true; return error; } @@ -1076,8 +1076,8 @@ Status ProcessFreeBSD::SetupSoftwareSingleStepping(lldb::tid_t tid) { "Emulation was successful but PC wasn't updated"); next_pc = pc_it->second.GetAsUInt64(); } else if (pc_it == baton.m_register_values.end()) { - // Emulate instruction failed and it haven't changed PC. Advance PC - // with the size of the current opcode because the emulation of all + // Emulate instruction failed and it haven't changed PC. Advance PC with + // the size of the current opcode because the emulation of all // PC modifying instruction should be successful. The failure most // likely caused by a not supported instruction which don't modify PC. next_pc = diff --git a/lldb/source/Plugins/Process/FreeBSD/ProcessMonitor.cpp b/lldb/source/Plugins/Process/FreeBSD/ProcessMonitor.cpp index feba3af8fcf..a498e559915 100644 --- a/lldb/source/Plugins/Process/FreeBSD/ProcessMonitor.cpp +++ b/lldb/source/Plugins/Process/FreeBSD/ProcessMonitor.cpp @@ -41,8 +41,8 @@ using namespace lldb; using namespace lldb_private; -// We disable the tracing of ptrace calls for integration builds to -// avoid the additional indirection and checks. +// We disable the tracing of ptrace calls for integration builds to avoid the +// additional indirection and checks. #ifndef LLDB_CONFIGURATION_BUILDANDINTEGRATION // Wrapper for ptrace to catch errors and log calls. @@ -61,9 +61,8 @@ const char *Get_PT_IO_OP(int op) { } } -// Wrapper for ptrace to catch errors and log calls. -// Note that ptrace sets errno on error because -1 is reserved as a valid -// result. +// Wrapper for ptrace to catch errors and log calls. Note that ptrace sets +// errno on error because -1 is reserved as a valid result. extern long PtraceWrapper(int req, lldb::pid_t pid, void *addr, int data, const char *reqName, const char *file, int line) { long int result; @@ -130,8 +129,8 @@ extern long PtraceWrapper(int req, lldb::pid_t pid, void *addr, int data, return result; } -// Wrapper for ptrace when logging is not required. -// Sets errno to 0 prior to calling ptrace. +// Wrapper for ptrace when logging is not required. Sets errno to 0 prior to +// calling ptrace. extern long PtraceWrapper(int req, lldb::pid_t pid, void *addr, int data) { long result = 0; errno = 0; @@ -875,9 +874,9 @@ bool ProcessMonitor::Launch(LaunchArgs *args) { if (PTRACE(PT_TRACE_ME, 0, NULL, 0) < 0) exit(ePtraceFailed); - // terminal has already dupped the tty descriptors to stdin/out/err. - // This closes original fd from which they were copied (and avoids - // leaking descriptors to the debugged process. + // terminal has already dupped the tty descriptors to stdin/out/err. This + // closes original fd from which they were copied (and avoids leaking + // descriptors to the debugged process. terminal.CloseSlaveFileDescriptor(); // Do not inherit setgid powers. @@ -1102,9 +1101,9 @@ ProcessMessage ProcessMonitor::MonitorSIGTRAP(ProcessMonitor *monitor, break; case (SIGTRAP /* | (PTRACE_EVENT_EXIT << 8) */): { - // The inferior process is about to exit. Maintain the process in a - // state of "limbo" until we are explicitly commanded to detach, - // destroy, resume, etc. + // The inferior process is about to exit. Maintain the process in a state + // of "limbo" until we are explicitly commanded to detach, destroy, resume, + // etc. unsigned long data = 0; if (!monitor->GetEventMessage(tid, &data)) data = -1; @@ -1159,8 +1158,8 @@ ProcessMessage ProcessMonitor::MonitorSignal(ProcessMonitor *monitor, Log *log(ProcessPOSIXLog::GetLogIfAllCategoriesSet(POSIX_LOG_PROCESS)); // POSIX says that process behaviour is undefined after it ignores a SIGFPE, - // SIGILL, SIGSEGV, or SIGBUS *unless* that signal was generated by a - // kill(2) or raise(3). Similarly for tgkill(2) on FreeBSD. + // SIGILL, SIGSEGV, or SIGBUS *unless* that signal was generated by a kill(2) + // or raise(3). Similarly for tgkill(2) on FreeBSD. // // IOW, user generated signals never generate what we consider to be a // "crash". @@ -1196,8 +1195,8 @@ ProcessMessage ProcessMonitor::MonitorSignal(ProcessMonitor *monitor, } // else; Use atleast si_signo info for other si_code } - // Everything else is "normal" and does not require any special action on - // our part. + // Everything else is "normal" and does not require any special action on our + // part. return ProcessMessage::Signal(tid, signo); } @@ -1423,14 +1422,14 @@ void ProcessMonitor::StopMonitor() { } // FIXME: On Linux, when a new thread is created, we receive to notifications, -// (1) a SIGTRAP|PTRACE_EVENT_CLONE from the main process thread with the -// child thread id as additional information, and (2) a SIGSTOP|SI_USER from -// the new child thread indicating that it has is stopped because we attached. -// We have no guarantee of the order in which these arrive, but we need both -// before we are ready to proceed. We currently keep a list of threads which -// have sent the initial SIGSTOP|SI_USER event. Then when we receive the -// SIGTRAP|PTRACE_EVENT_CLONE notification, if the initial stop has not occurred -// we call ProcessMonitor::WaitForInitialTIDStop() to wait for it. +// (1) a SIGTRAP|PTRACE_EVENT_CLONE from the main process thread with the child +// thread id as additional information, and (2) a SIGSTOP|SI_USER from the new +// child thread indicating that it has is stopped because we attached. We have +// no guarantee of the order in which these arrive, but we need both before we +// are ready to proceed. We currently keep a list of threads which have sent +// the initial SIGSTOP|SI_USER event. Then when we receive the +// SIGTRAP|PTRACE_EVENT_CLONE notification, if the initial stop has not +// occurred we call ProcessMonitor::WaitForInitialTIDStop() to wait for it. // // Right now, the above logic is in ProcessPOSIX, so we need a definition of // this function in the FreeBSD ProcessMonitor implementation even if it isn't diff --git a/lldb/source/Plugins/Process/FreeBSD/RegisterContextPOSIXProcessMonitor_mips64.cpp b/lldb/source/Plugins/Process/FreeBSD/RegisterContextPOSIXProcessMonitor_mips64.cpp index b911ee22201..734167e1fc9 100644 --- a/lldb/source/Plugins/Process/FreeBSD/RegisterContextPOSIXProcessMonitor_mips64.cpp +++ b/lldb/source/Plugins/Process/FreeBSD/RegisterContextPOSIXProcessMonitor_mips64.cpp @@ -130,14 +130,14 @@ bool RegisterContextPOSIXProcessMonitor_mips64::ReadRegister( bool success = ReadRegister(full_reg, value); if (success) { - // If our read was not aligned (for ah,bh,ch,dh), shift our returned value - // one byte to the right. + // If our read was not aligned (for ah,bh,ch,dh), shift our returned + // value one byte to the right. if (is_subreg && (reg_info->byte_offset & 0x1)) value.SetUInt64(value.GetAsUInt64() >> 8); // If our return byte size was greater than the return value reg size, - // then - // use the type specified by reg_info rather than the uint64_t default + // then use the type specified by reg_info rather than the uint64_t + // default if (value.GetByteSize() > reg_info->byte_size) value.SetType(reg_info); } diff --git a/lldb/source/Plugins/Process/FreeBSD/RegisterContextPOSIXProcessMonitor_powerpc.cpp b/lldb/source/Plugins/Process/FreeBSD/RegisterContextPOSIXProcessMonitor_powerpc.cpp index bc1d4df89fc..6736e5f5b80 100644 --- a/lldb/source/Plugins/Process/FreeBSD/RegisterContextPOSIXProcessMonitor_powerpc.cpp +++ b/lldb/source/Plugins/Process/FreeBSD/RegisterContextPOSIXProcessMonitor_powerpc.cpp @@ -140,8 +140,8 @@ bool RegisterContextPOSIXProcessMonitor_powerpc::ReadRegister( if (success) { // If our return byte size was greater than the return value reg size, - // then - // use the type specified by reg_info rather than the uint64_t default + // then use the type specified by reg_info rather than the uint64_t + // default if (value.GetByteSize() > reg_info->byte_size) value.SetType(reg_info); } diff --git a/lldb/source/Plugins/Process/FreeBSD/RegisterContextPOSIXProcessMonitor_x86.cpp b/lldb/source/Plugins/Process/FreeBSD/RegisterContextPOSIXProcessMonitor_x86.cpp index 4608520dba4..7db7f803b37 100644 --- a/lldb/source/Plugins/Process/FreeBSD/RegisterContextPOSIXProcessMonitor_x86.cpp +++ b/lldb/source/Plugins/Process/FreeBSD/RegisterContextPOSIXProcessMonitor_x86.cpp @@ -193,14 +193,14 @@ bool RegisterContextPOSIXProcessMonitor_x86_64::ReadRegister( bool success = ReadRegister(full_reg, value); if (success) { - // If our read was not aligned (for ah,bh,ch,dh), shift our returned value - // one byte to the right. + // If our read was not aligned (for ah,bh,ch,dh), shift our returned + // value one byte to the right. if (is_subreg && (reg_info->byte_offset & 0x1)) value.SetUInt64(value.GetAsUInt64() >> 8); // If our return byte size was greater than the return value reg size, - // then - // use the type specified by reg_info rather than the uint64_t default + // then use the type specified by reg_info rather than the uint64_t + // default if (value.GetByteSize() > reg_info->byte_size) value.SetType(reg_info); } @@ -221,7 +221,8 @@ bool RegisterContextPOSIXProcessMonitor_x86_64::ReadRegister( value.SetBytes(m_fpr.fxsave.xmm[reg - m_reg_info.first_xmm].bytes, reg_info->byte_size, byte_order); if (reg >= m_reg_info.first_ymm && reg <= m_reg_info.last_ymm) { - // Concatenate ymm using the register halves in xmm.bytes and ymmh.bytes + // Concatenate ymm using the register halves in xmm.bytes and + // ymmh.bytes if (GetFPRType() == eXSAVE && CopyXSTATEtoYMM(reg, byte_order)) value.SetBytes(m_ymm_set.ymm[reg - m_reg_info.first_ymm].bytes, reg_info->byte_size, byte_order); @@ -233,11 +234,10 @@ bool RegisterContextPOSIXProcessMonitor_x86_64::ReadRegister( return false; } - // Get pointer to m_fpr.fxsave variable and set the data from it. - // Byte offsets of all registers are calculated wrt 'UserArea' structure. - // However, ReadFPR() reads fpu registers {using ptrace(PT_GETFPREGS,..)} - // and stores them in 'm_fpr' (of type FPR structure). To extract values of - // fpu + // Get pointer to m_fpr.fxsave variable and set the data from it. Byte + // offsets of all registers are calculated wrt 'UserArea' structure. However, + // ReadFPR() reads fpu registers {using ptrace(PT_GETFPREGS,..)} and stores + // them in 'm_fpr' (of type FPR structure). To extract values of fpu // registers, m_fpr should be read at byte offsets calculated wrt to FPR // structure. @@ -299,12 +299,12 @@ bool RegisterContextPOSIXProcessMonitor_x86_64::WriteRegister( return false; } } else { - // Get pointer to m_fpr.fxsave variable and set the data to it. - // Byte offsets of all registers are calculated wrt 'UserArea' structure. - // However, WriteFPR() takes m_fpr (of type FPR structure) and writes only - // fpu - // registers using ptrace(PT_SETFPREGS,..) API. Hence fpu registers should - // be written in m_fpr at byte offsets calculated wrt FPR structure. + // Get pointer to m_fpr.fxsave variable and set the data to it. Byte + // offsets of all registers are calculated wrt 'UserArea' structure. + // However, WriteFPR() takes m_fpr (of type FPR structure) and writes + // only fpu registers using ptrace(PT_SETFPREGS,..) API. Hence fpu + // registers should be written in m_fpr at byte offsets calculated wrt + // FPR structure. // Since, FPR structure is also one of the member of UserArea structure. // byte_offset(fpu wrt FPR) = byte_offset(fpu wrt UserArea) - diff --git a/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp b/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp index 39059e6d703..f380835bf49 100644 --- a/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp +++ b/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp @@ -337,8 +337,8 @@ llvm::Expected<std::vector<::pid_t>> NativeProcessLinux::Attach(::pid_t pid) { // Attach to the requested process. // An attach will cause the thread to stop with a SIGSTOP. if ((status = PtraceWrapper(PTRACE_ATTACH, tid)).Fail()) { - // No such thread. The thread may have exited. - // More error handling may be needed. + // No such thread. The thread may have exited. More error handling + // may be needed. if (status.GetError() == ESRCH) { it = tids_to_attach.erase(it); continue; @@ -348,11 +348,11 @@ llvm::Expected<std::vector<::pid_t>> NativeProcessLinux::Attach(::pid_t pid) { int wpid = llvm::sys::RetryAfterSignal(-1, ::waitpid, tid, nullptr, __WALL); - // Need to use __WALL otherwise we receive an error with errno=ECHLD - // At this point we should have a thread stopped if waitpid succeeds. + // Need to use __WALL otherwise we receive an error with errno=ECHLD At + // this point we should have a thread stopped if waitpid succeeds. if (wpid < 0) { - // No such thread. The thread may have exited. - // More error handling may be needed. + // No such thread. The thread may have exited. More error handling + // may be needed. if (errno == ESRCH) { it = tids_to_attach.erase(it); continue; @@ -397,8 +397,8 @@ Status NativeProcessLinux::SetDefaultPtraceOpts(lldb::pid_t pid) { // appropriate ptrace flags here (PTRACE_O_TRACEFORK, PTRACE_O_TRACEVFORK) ptrace_opts |= PTRACE_O_TRACECLONE; - // Have the tracer notify us before execve returns - // (needed to disable legacy SIGTRAP generation) + // Have the tracer notify us before execve returns (needed to disable legacy + // SIGTRAP generation) ptrace_opts |= PTRACE_O_TRACEEXEC; return PtraceWrapper(PTRACE_SETOPTIONS, pid, nullptr, (void *)ptrace_opts); @@ -438,8 +438,8 @@ void NativeProcessLinux::MonitorCallback(lldb::pid_t pid, bool exited, auto thread_sp = GetThreadByID(pid); if (!thread_sp) { - // Normally, the only situation when we cannot find the thread is if we have - // just received a new thread notification. This is indicated by + // Normally, the only situation when we cannot find the thread is if we + // have just received a new thread notification. This is indicated by // GetSignalInfo() returning si_code == SI_USER and si_pid == 0 LLDB_LOG(log, "received notification about an unknown tid {0}.", pid); @@ -471,15 +471,15 @@ void NativeProcessLinux::MonitorCallback(lldb::pid_t pid, bool exited, MonitorSignal(info, *thread_sp, exited); } else { if (info_err.GetError() == EINVAL) { - // This is a group stop reception for this tid. - // We can reach here if we reinject SIGSTOP, SIGSTP, SIGTTIN or SIGTTOU - // into the tracee, triggering the group-stop mechanism. Normally - // receiving these would stop the process, pending a SIGCONT. Simulating - // this state in a debugger is hard and is generally not needed (one use - // case is debugging background task being managed by a shell). For - // general use, it is sufficient to stop the process in a signal-delivery - // stop which happens before the group stop. This done by MonitorSignal - // and works correctly for all signals. + // This is a group stop reception for this tid. We can reach here if we + // reinject SIGSTOP, SIGSTP, SIGTTIN or SIGTTOU into the tracee, + // triggering the group-stop mechanism. Normally receiving these would + // stop the process, pending a SIGCONT. Simulating this state in a + // debugger is hard and is generally not needed (one use case is + // debugging background task being managed by a shell). For general use, + // it is sufficient to stop the process in a signal-delivery stop which + // happens before the group stop. This done by MonitorSignal and works + // correctly for all signals. LLDB_LOG(log, "received a group stop for pid {0} tid {1}. Transparent " "handling of group stops not supported, resuming the " @@ -505,8 +505,8 @@ void NativeProcessLinux::MonitorCallback(lldb::pid_t pid, bool exited, if (is_main_thread) { // Notify the delegate - our process is not available but appears to - // have been killed outside - // our control. Is eStateExited the right exit state in this case? + // have been killed outside our control. Is eStateExited the right + // exit state in this case? SetExitStatus(status, true); SetState(StateType::eStateExited, true); } else { @@ -575,19 +575,14 @@ void NativeProcessLinux::MonitorSIGTRAP(const siginfo_t &info, switch (info.si_code) { // TODO: these two cases are required if we want to support tracing of the - // inferiors' children. We'd need this to debug a monitor. - // case (SIGTRAP | (PTRACE_EVENT_FORK << 8)): - // case (SIGTRAP | (PTRACE_EVENT_VFORK << 8)): + // inferiors' children. We'd need this to debug a monitor. case (SIGTRAP | + // (PTRACE_EVENT_FORK << 8)): case (SIGTRAP | (PTRACE_EVENT_VFORK << 8)): case (SIGTRAP | (PTRACE_EVENT_CLONE << 8)): { // This is the notification on the parent thread which informs us of new - // thread - // creation. - // We don't want to do anything with the parent thread so we just resume it. - // In case we - // want to implement "break on thread creation" functionality, we would need - // to stop - // here. + // thread creation. We don't want to do anything with the parent thread so + // we just resume it. In case we want to implement "break on thread + // creation" functionality, we would need to stop here. unsigned long event_message = 0; if (GetEventMessage(thread.GetID(), &event_message).Fail()) { @@ -637,10 +632,10 @@ void NativeProcessLinux::MonitorSIGTRAP(const siginfo_t &info, } case (SIGTRAP | (PTRACE_EVENT_EXIT << 8)): { - // The inferior process or one of its threads is about to exit. - // We don't want to do anything with the thread so we just resume it. In - // case we want to implement "break on thread exit" functionality, we would - // need to stop here. + // The inferior process or one of its threads is about to exit. We don't + // want to do anything with the thread so we just resume it. In case we + // want to implement "break on thread exit" functionality, we would need to + // stop here. unsigned long data = 0; if (GetEventMessage(thread.GetID(), &data).Fail()) @@ -658,8 +653,8 @@ void NativeProcessLinux::MonitorSIGTRAP(const siginfo_t &info, // Due to a kernel bug, we may sometimes get this stop after the inferior // gets a SIGKILL. This confuses our state tracking logic in // ResumeThread(), since normally, we should not be receiving any ptrace - // events while the inferior is stopped. This makes sure that the inferior - // is resumed and exits normally. + // events while the inferior is stopped. This makes sure that the + // inferior is resumed and exits normally. state = eStateRunning; } ResumeThread(thread, state, LLDB_INVALID_SIGNAL_NUMBER); @@ -705,8 +700,8 @@ void NativeProcessLinux::MonitorSIGTRAP(const siginfo_t &info, case SI_KERNEL: #if defined __mips__ - // For mips there is no special signal for watchpoint - // So we check for watchpoint in kernel trap + // For mips there is no special signal for watchpoint So we check for + // watchpoint in kernel trap { // If a watchpoint was hit, report it uint32_t wp_index; @@ -782,8 +777,8 @@ void NativeProcessLinux::MonitorWatchpoint(NativeThreadLinux &thread, LLDB_LOG(log, "received watchpoint event, pid = {0}, wp_index = {1}", thread.GetID(), wp_index); - // Mark the thread as stopped at watchpoint. - // The address is at (lldb::addr_t)info->si_addr if we need it. + // Mark the thread as stopped at watchpoint. The address is at + // (lldb::addr_t)info->si_addr if we need it. thread.SetStoppedByWatchpoint(wp_index); // We need to tell all other running threads before we notify the delegate @@ -799,8 +794,8 @@ void NativeProcessLinux::MonitorSignal(const siginfo_t &info, Log *log(ProcessPOSIXLog::GetLogIfAllCategoriesSet(POSIX_LOG_PROCESS)); // POSIX says that process behaviour is undefined after it ignores a SIGFPE, - // SIGILL, SIGSEGV, or SIGBUS *unless* that signal was generated by a - // kill(2) or raise(3). Similarly for tgkill(2) on Linux. + // SIGILL, SIGSEGV, or SIGBUS *unless* that signal was generated by a kill(2) + // or raise(3). Similarly for tgkill(2) on Linux. // // IOW, user generated signals never generate what we consider to be a // "crash". @@ -819,22 +814,22 @@ void NativeProcessLinux::MonitorSignal(const siginfo_t &info, // This is a tgkill()-based stop. LLDB_LOG(log, "pid {0} tid {1}, thread stopped", GetID(), thread.GetID()); - // Check that we're not already marked with a stop reason. - // Note this thread really shouldn't already be marked as stopped - if we - // were, that would imply that the kernel signaled us with the thread - // stopping which we handled and marked as stopped, and that, without an - // intervening resume, we received another stop. It is more likely that we - // are missing the marking of a run state somewhere if we find that the - // thread was marked as stopped. + // Check that we're not already marked with a stop reason. Note this thread + // really shouldn't already be marked as stopped - if we were, that would + // imply that the kernel signaled us with the thread stopping which we + // handled and marked as stopped, and that, without an intervening resume, + // we received another stop. It is more likely that we are missing the + // marking of a run state somewhere if we find that the thread was marked + // as stopped. const StateType thread_state = thread.GetState(); if (!StateIsStoppedState(thread_state, false)) { // An inferior thread has stopped because of a SIGSTOP we have sent it. // Generally, these are not important stops and we don't want to report // them as they are just used to stop other threads when one thread (the // one with the *real* stop reason) hits a breakpoint (watchpoint, - // etc...). However, in the case of an asynchronous Interrupt(), this *is* - // the real stop reason, so we leave the signal intact if this is the - // thread that was chosen as the triggering thread. + // etc...). However, in the case of an asynchronous Interrupt(), this + // *is* the real stop reason, so we leave the signal intact if this is + // the thread that was chosen as the triggering thread. if (m_pending_notification_tid != LLDB_INVALID_THREAD_ID) { if (m_pending_notification_tid == thread.GetID()) thread.SetStoppedBySignal(SIGSTOP, &info); @@ -863,8 +858,8 @@ void NativeProcessLinux::MonitorSignal(const siginfo_t &info, return; } - // Check if debugger should stop at this signal or just ignore it - // and resume the inferior. + // Check if debugger should stop at this signal or just ignore it and resume + // the inferior. if (m_signals_to_ignore.find(signo) != m_signals_to_ignore.end()) { ResumeThread(thread, thread.GetState(), signo); return; @@ -915,9 +910,9 @@ static bool ReadRegisterCallback(EmulateInstruction *instruction, void *baton, return true; } - // The emulator only fill in the dwarf regsiter numbers (and in some case - // the generic register numbers). Get the full register info from the - // register context based on the dwarf register numbers. + // The emulator only fill in the dwarf regsiter numbers (and in some case the + // generic register numbers). Get the full register info from the register + // context based on the dwarf register numbers. const RegisterInfo *full_reg_info = emulator_baton->m_reg_context.GetRegisterInfo( eRegisterKindDWARF, reg_info->kinds[eRegisterKindDWARF]); @@ -1001,8 +996,8 @@ NativeProcessLinux::SetupSoftwareSingleStepping(NativeThreadLinux &thread) { else next_flags = ReadFlags(register_context); } else if (pc_it == baton.m_register_values.end()) { - // Emulate instruction failed and it haven't changed PC. Advance PC - // with the size of the current opcode because the emulation of all + // Emulate instruction failed and it haven't changed PC. Advance PC with + // the size of the current opcode because the emulation of all // PC modifying instruction should be successful. The failure most // likely caused by a not supported instruction which don't modify PC. next_pc = register_context.GetPC() + emulator_ap->GetOpcode().GetByteSize(); @@ -1033,8 +1028,8 @@ NativeProcessLinux::SetupSoftwareSingleStepping(NativeThreadLinux &thread) { error = SetSoftwareBreakpoint(next_pc, 0); } - // If setting the breakpoint fails because next_pc is out of - // the address space, ignore it and let the debugee segfault. + // If setting the breakpoint fails because next_pc is out of the address + // space, ignore it and let the debugee segfault. if (error.GetError() == EIO || error.GetError() == EFAULT) { return Status(); } else if (error.Fail()) @@ -1165,8 +1160,8 @@ Status NativeProcessLinux::Signal(int signo) { } Status NativeProcessLinux::Interrupt() { - // Pick a running thread (or if none, a not-dead stopped thread) as - // the chosen thread that will be the stop-reason thread. + // Pick a running thread (or if none, a not-dead stopped thread) as the + // chosen thread that will be the stop-reason thread. Log *log(ProcessPOSIXLog::GetLogIfAllCategoriesSet(POSIX_LOG_PROCESS)); NativeThreadProtocol *running_thread = nullptr; @@ -1174,15 +1169,15 @@ Status NativeProcessLinux::Interrupt() { LLDB_LOG(log, "selecting running thread for interrupt target"); for (const auto &thread : m_threads) { - // If we have a running or stepping thread, we'll call that the - // target of the interrupt. + // If we have a running or stepping thread, we'll call that the target of + // the interrupt. const auto thread_state = thread->GetState(); if (thread_state == eStateRunning || thread_state == eStateStepping) { running_thread = thread.get(); break; } else if (!stopped_thread && StateIsStoppedState(thread_state, true)) { - // Remember the first non-dead stopped thread. We'll use that as a backup - // if there are no running threads. + // Remember the first non-dead stopped thread. We'll use that as a + // backup if there are no running threads. stopped_thread = thread.get(); } } @@ -1251,9 +1246,8 @@ ParseMemoryRegionInfoFromProcMapsLine(llvm::StringRef &maps_line, StringExtractor line_extractor(maps_line); // Format: {address_start_hex}-{address_end_hex} perms offset dev inode - // pathname - // perms: rwxp (letter is present if set, '-' if not, final character is - // p=private, s=shared). + // pathname perms: rwxp (letter is present if set, '-' if not, final + // character is p=private, s=shared). // Parse out the starting address lldb::addr_t start_address = line_extractor.GetHexMaxU64(false, 0); @@ -1334,8 +1328,8 @@ Status NativeProcessLinux::GetMemoryRegionInfo(lldb::addr_t load_addr, // the virtual address space, // with no perms if it is not mapped. - // Use an approach that reads memory regions from /proc/{pid}/maps. - // Assume proc maps entries are in ascending order. + // Use an approach that reads memory regions from /proc/{pid}/maps. Assume + // proc maps entries are in ascending order. // FIXME assert if we find differently. if (m_supports_mem_region == LazyBool::eLazyBoolNo) { @@ -1386,10 +1380,8 @@ Status NativeProcessLinux::GetMemoryRegionInfo(lldb::addr_t load_addr, } // If we made it here, we didn't find an entry that contained the given - // address. Return the - // load_addr as start and the amount of bytes betwwen load address and the end - // of the memory as - // size. + // address. Return the load_addr as start and the amount of bytes betwwen + // load address and the end of the memory as size. range_info.GetRange().SetRangeBase(load_addr); range_info.GetRange().SetRangeEnd(LLDB_INVALID_ADDRESS); range_info.SetReadable(MemoryRegionInfo::OptionalBool::eNo); @@ -1434,8 +1426,8 @@ Status NativeProcessLinux::PopulateMemoryRegionCache() { if (m_mem_region_cache.empty()) { // No entries after attempting to read them. This shouldn't happen if - // /proc/{pid}/maps is supported. Assume we don't support map entries - // via procfs. + // /proc/{pid}/maps is supported. Assume we don't support map entries via + // procfs. m_supports_mem_region = LazyBool::eLazyBoolNo; LLDB_LOG(log, "failed to find any procfs maps entries, assuming no support " @@ -1462,8 +1454,8 @@ void NativeProcessLinux::DoStopIDBumped(uint32_t newBumpId) { Status NativeProcessLinux::AllocateMemory(size_t size, uint32_t permissions, lldb::addr_t &addr) { // FIXME implementing this requires the equivalent of -// InferiorCallPOSIX::InferiorCallMmap, which depends on -// functional ThreadPlans working with Native*Protocol. +// InferiorCallPOSIX::InferiorCallMmap, which depends on functional ThreadPlans +// working with Native*Protocol. #if 1 return Status("not implemented yet"); #else @@ -1478,8 +1470,7 @@ Status NativeProcessLinux::AllocateMemory(size_t size, uint32_t permissions, prot |= eMmapProtExec; // TODO implement this directly in NativeProcessLinux - // (and lift to NativeProcessPOSIX if/when that class is - // refactored out). + // (and lift to NativeProcessPOSIX if/when that class is refactored out). if (InferiorCallMmap(this, addr, 0, size, prot, eMmapFlagsAnon | eMmapFlagsPrivate, -1, 0)) { m_addr_to_mmap_size[addr] = size; @@ -1505,10 +1496,9 @@ lldb::addr_t NativeProcessLinux::GetSharedLibraryInfoAddress() { } size_t NativeProcessLinux::UpdateThreads() { - // The NativeProcessLinux monitoring threads are always up to date - // with respect to thread state and they keep the thread list - // populated properly. All this method needs to do is return the - // thread count. + // The NativeProcessLinux monitoring threads are always up to date with + // respect to thread state and they keep the thread list populated properly. + // All this method needs to do is return the thread count. return m_threads.size(); } @@ -1647,9 +1637,9 @@ NativeProcessLinux::GetCrashReasonForSIGSEGV(const siginfo_t *info) assert(false && "unexpected si_code for SIGSEGV"); break; case SI_KERNEL: - // Linux will occasionally send spurious SI_KERNEL codes. - // (this is poorly documented in sigaction) - // One way to get this is via unaligned SIMD loads. + // Linux will occasionally send spurious SI_KERNEL codes. (this is + // poorly documented in sigaction) One way to get this is via unaligned + // SIMD loads. reason = ProcessMessage::eInvalidAddress; // for lack of anything better break; case SEGV_MAPERR: @@ -1785,8 +1775,7 @@ Status NativeProcessLinux::ReadMemory(lldb::addr_t addr, void *buf, size_t size, size_t &bytes_read) { if (ProcessVmReadvSupported()) { // The process_vm_readv path is about 50 times faster than ptrace api. We - // want to use - // this syscall if it is supported. + // want to use this syscall if it is supported. const ::pid_t pid = GetID(); @@ -2093,12 +2082,11 @@ Status NativeProcessLinux::ResumeThread(NativeThreadLinux &thread, Log *const log = ProcessPOSIXLog::GetLogIfAllCategoriesSet(POSIX_LOG_THREAD); LLDB_LOG(log, "tid: {0}", thread.GetID()); - // Before we do the resume below, first check if we have a pending - // stop notification that is currently waiting for - // all threads to stop. This is potentially a buggy situation since - // we're ostensibly waiting for threads to stop before we send out the - // pending notification, and here we are resuming one before we send - // out the pending stop notification. + // Before we do the resume below, first check if we have a pending stop + // notification that is currently waiting for all threads to stop. This is + // potentially a buggy situation since we're ostensibly waiting for threads + // to stop before we send out the pending notification, and here we are + // resuming one before we send out the pending stop notification. if (m_pending_notification_tid != LLDB_INVALID_THREAD_ID) { LLDB_LOG(log, "about to resume tid {0} per explicit request but we have a " @@ -2107,8 +2095,8 @@ Status NativeProcessLinux::ResumeThread(NativeThreadLinux &thread, thread.GetID(), m_pending_notification_tid); } - // Request a resume. We expect this to be synchronous and the system - // to reflect it is running after this completes. + // Request a resume. We expect this to be synchronous and the system to + // reflect it is running after this completes. switch (state) { case eStateRunning: { const auto resume_result = thread.Resume(signo); @@ -2137,8 +2125,8 @@ void NativeProcessLinux::StopRunningThreads(const lldb::tid_t triggering_tid) { m_pending_notification_tid = triggering_tid; - // Request a stop for all the thread stops that need to be stopped - // and are not already known to be stopped. + // Request a stop for all the thread stops that need to be stopped and are + // not already known to be stopped. for (const auto &thread : m_threads) { if (StateIsRunningState(thread->GetState())) static_cast<NativeThreadLinux *>(thread.get())->RequestStop(); @@ -2184,8 +2172,7 @@ void NativeProcessLinux::ThreadWasCreated(NativeThreadLinux &thread) { if (m_pending_notification_tid != LLDB_INVALID_THREAD_ID && StateIsRunningState(thread.GetState())) { // We will need to wait for this new thread to stop as well before firing - // the - // notification. + // the notification. thread.RequestStop(); } } @@ -2221,9 +2208,8 @@ void NativeProcessLinux::SigchldHandler() { } } -// Wrapper for ptrace to catch errors and log calls. -// Note that ptrace sets errno on error because -1 can be a valid result (i.e. -// for PTRACE_PEEK*) +// Wrapper for ptrace to catch errors and log calls. Note that ptrace sets +// errno on error because -1 can be a valid result (i.e. for PTRACE_PEEK*) Status NativeProcessLinux::PtraceWrapper(int req, lldb::pid_t pid, void *addr, void *data, size_t data_size, long *result) { @@ -2421,8 +2407,8 @@ Status NativeProcessLinux::StopTracingForThread(lldb::tid_t thread) { } if (iter->second->GetTraceID() == m_pt_proces_trace_id) { - // traceid maps to the whole process so we have to erase it from the - // thread group. + // traceid maps to the whole process so we have to erase it from the thread + // group. LLDB_LOG(log, "traceid maps to process"); m_pt_traced_thread_group.erase(thread); } @@ -2473,8 +2459,8 @@ Status NativeProcessLinux::StopProcessorTracingOnThread(lldb::user_id_t traceid, if (thread == LLDB_INVALID_THREAD_ID) { for (auto& iter : m_processor_trace_monitor) { if (iter.second->GetTraceID() == traceid) { - // Stopping a trace instance for an individual thread - // hence there will only be one traceid that can match. + // Stopping a trace instance for an individual thread hence there will + // only be one traceid that can match. m_processor_trace_monitor.erase(iter.first); return error; } @@ -2504,8 +2490,8 @@ Status NativeProcessLinux::StopProcessorTracingOnThread(lldb::user_id_t traceid, LLDB_LOG(log, "UID - {0} , Thread -{1}", traceid, thread); if (traceid == m_pt_proces_trace_id) { - // traceid maps to the whole process so we have to erase it from the - // thread group. + // traceid maps to the whole process so we have to erase it from the thread + // group. LLDB_LOG(log, "traceid maps to process"); m_pt_traced_thread_group.erase(thread); } diff --git a/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_arm.cpp b/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_arm.cpp index cb05416cb6c..74929168462 100644 --- a/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_arm.cpp +++ b/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_arm.cpp @@ -184,14 +184,14 @@ NativeRegisterContextLinux_arm::ReadRegister(const RegisterInfo *reg_info, error = ReadRegisterRaw(full_reg, reg_value); if (error.Success()) { - // If our read was not aligned (for ah,bh,ch,dh), shift our returned value - // one byte to the right. + // If our read was not aligned (for ah,bh,ch,dh), shift our returned + // value one byte to the right. if (is_subreg && (reg_info->byte_offset & 0x1)) reg_value.SetUInt64(reg_value.GetAsUInt64() >> 8); // If our return byte size was greater than the return value reg size, - // then - // use the type specified by reg_info rather than the uint64_t default + // then use the type specified by reg_info rather than the uint64_t + // default if (reg_value.GetByteSize() > reg_info->byte_size) reg_value.SetType(reg_info); } @@ -558,8 +558,8 @@ uint32_t NativeRegisterContextLinux_arm::SetHardwareWatchpoint( uint32_t control_value = 0, wp_index = 0, addr_word_offset = 0, byte_mask = 0; lldb::addr_t real_addr = addr; - // Check if we are setting watchpoint other than read/write/access - // Also update watchpoint flag to match Arm write-read bit configuration. + // Check if we are setting watchpoint other than read/write/access Also + // update watchpoint flag to match Arm write-read bit configuration. switch (watch_flags) { case 1: watch_flags = 2; @@ -579,9 +579,9 @@ uint32_t NativeRegisterContextLinux_arm::SetHardwareWatchpoint( if (size == 0 || size > 4) return LLDB_INVALID_INDEX32; - // Check 4-byte alignment for hardware watchpoint target address. - // Below is a hack to recalculate address and size in order to - // make sure we can watch non 4-byte alligned addresses as well. + // Check 4-byte alignment for hardware watchpoint target address. Below is a + // hack to recalculate address and size in order to make sure we can watch + // non 4-byte alligned addresses as well. if (addr & 0x03) { uint8_t watch_mask = (addr & 0x03) + size; @@ -874,12 +874,10 @@ Status NativeRegisterContextLinux_arm::DoReadRegisterValue( uint32_t offset, const char *reg_name, uint32_t size, RegisterValue &value) { // PTRACE_PEEKUSER don't work in the aarch64 linux kernel used on android - // devices (always return - // "Bad address"). To avoid using PTRACE_PEEKUSER we read out the full GPR - // register set instead. - // This approach is about 4 times slower but the performance overhead is - // negligible in - // comparision to processing time in lldb-server. + // devices (always return "Bad address"). To avoid using PTRACE_PEEKUSER we + // read out the full GPR register set instead. This approach is about 4 times + // slower but the performance overhead is negligible in comparision to + // processing time in lldb-server. assert(offset % 4 == 0 && "Try to write a register with unaligned offset"); if (offset + sizeof(uint32_t) > sizeof(m_gpr_arm)) return Status("Register isn't fit into the size of the GPR area"); @@ -895,13 +893,10 @@ Status NativeRegisterContextLinux_arm::DoReadRegisterValue( Status NativeRegisterContextLinux_arm::DoWriteRegisterValue( uint32_t offset, const char *reg_name, const RegisterValue &value) { // PTRACE_POKEUSER don't work in the aarch64 linux kernel used on android - // devices (always return - // "Bad address"). To avoid using PTRACE_POKEUSER we read out the full GPR - // register set, modify - // the requested register and write it back. This approach is about 4 times - // slower but the - // performance overhead is negligible in comparision to processing time in - // lldb-server. + // devices (always return "Bad address"). To avoid using PTRACE_POKEUSER we + // read out the full GPR register set, modify the requested register and + // write it back. This approach is about 4 times slower but the performance + // overhead is negligible in comparision to processing time in lldb-server. assert(offset % 4 == 0 && "Try to write a register with unaligned offset"); if (offset + sizeof(uint32_t) > sizeof(m_gpr_arm)) return Status("Register isn't fit into the size of the GPR area"); @@ -915,9 +910,8 @@ Status NativeRegisterContextLinux_arm::DoWriteRegisterValue( // will clear thumb bit of new PC if we are already in thumb mode; that is // CPSR thumb mode bit is set. if (offset / sizeof(uint32_t) == gpr_pc_arm) { - // Check if we are already in thumb mode and - // thumb bit of current PC is read out to be zero and - // thumb bit of next PC is read out to be one. + // Check if we are already in thumb mode and thumb bit of current PC is + // read out to be zero and thumb bit of next PC is read out to be one. if ((m_gpr_arm[gpr_cpsr_arm] & 0x20) && !(m_gpr_arm[gpr_pc_arm] & 0x01) && (value.GetAsUInt32() & 0x01)) { reg_value &= (~1ull); diff --git a/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_arm64.cpp b/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_arm64.cpp index c483260a5b2..41fe446f728 100644 --- a/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_arm64.cpp +++ b/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_arm64.cpp @@ -28,8 +28,7 @@ #include "Plugins/Process/Utility/RegisterInfoPOSIX_arm64.h" // System includes - They have to be included after framework includes because -// they define some -// macros which collide with variable names in other modules +// they define some macros which collide with variable names in other modules #include <sys/socket.h> // NT_PRSTATUS and NT_FPREGSET definition #include <elf.h> @@ -207,14 +206,14 @@ NativeRegisterContextLinux_arm64::ReadRegister(const RegisterInfo *reg_info, error = ReadRegisterRaw(full_reg, reg_value); if (error.Success()) { - // If our read was not aligned (for ah,bh,ch,dh), shift our returned value - // one byte to the right. + // If our read was not aligned (for ah,bh,ch,dh), shift our returned + // value one byte to the right. if (is_subreg && (reg_info->byte_offset & 0x1)) reg_value.SetUInt64(reg_value.GetAsUInt64() >> 8); // If our return byte size was greater than the return value reg size, - // then - // use the type specified by reg_info rather than the uint64_t default + // then use the type specified by reg_info rather than the uint64_t + // default if (reg_value.GetByteSize() > reg_info->byte_size) reg_value.SetType(reg_info); } @@ -562,8 +561,8 @@ uint32_t NativeRegisterContextLinux_arm64::SetHardwareWatchpoint( uint32_t control_value = 0, wp_index = 0; lldb::addr_t real_addr = addr; - // Check if we are setting watchpoint other than read/write/access - // Also update watchpoint flag to match AArch64 write-read bit configuration. + // Check if we are setting watchpoint other than read/write/access Also + // update watchpoint flag to match AArch64 write-read bit configuration. switch (watch_flags) { case 1: watch_flags = 2; @@ -581,9 +580,9 @@ uint32_t NativeRegisterContextLinux_arm64::SetHardwareWatchpoint( if (size != 1 && size != 2 && size != 4 && size != 8) return LLDB_INVALID_INDEX32; - // Check 8-byte alignment for hardware watchpoint target address. - // Below is a hack to recalculate address and size in order to - // make sure we can watch non 8-byte alligned addresses as well. + // Check 8-byte alignment for hardware watchpoint target address. Below is a + // hack to recalculate address and size in order to make sure we can watch + // non 8-byte alligned addresses as well. if (addr & 0x07) { uint8_t watch_mask = (addr & 0x07) + size; diff --git a/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_mips64.cpp b/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_mips64.cpp index 32c04a4374e..69194b3c066 100644 --- a/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_mips64.cpp +++ b/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_mips64.cpp @@ -140,9 +140,9 @@ NativeRegisterContextLinux_mips64::NativeRegisterContextLinux_mips64( break; } - // Initialize m_iovec to point to the buffer and buffer size - // using the conventions of Berkeley style UIO structures, as required - // by PTRACE extensions. + // Initialize m_iovec to point to the buffer and buffer size using the + // conventions of Berkeley style UIO structures, as required by PTRACE + // extensions. m_iovec.iov_base = &m_msa; m_iovec.iov_len = sizeof(MSA_linux_mips); @@ -337,7 +337,8 @@ lldb_private::Status NativeRegisterContextLinux_mips64::WriteRegister( uint8_t byte_size = reg_info->byte_size; lldbassert(reg_info->byte_offset < sizeof(UserArea)); - // Initialise the FP and MSA buffers by reading all co-processor 1 registers + // Initialise the FP and MSA buffers by reading all co-processor 1 + // registers ReadCP1(); if (IsFPR(reg_index)) { diff --git a/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_ppc64le.cpp b/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_ppc64le.cpp index 6b1d03b5d9c..6aa4af64ab5 100644 --- a/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_ppc64le.cpp +++ b/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_ppc64le.cpp @@ -26,8 +26,7 @@ #include "Plugins/Process/Utility/RegisterInfoPOSIX_ppc64le.h" // System includes - They have to be included after framework includes because -// they define some -// macros which collide with variable names in other modules +// they define some macros which collide with variable names in other modules #include <sys/socket.h> #include <elf.h> #include <asm/ptrace.h> @@ -569,8 +568,8 @@ uint32_t NativeRegisterContextLinux_ppc64le::SetHardwareWatchpoint( lldb::addr_t real_addr = addr; uint32_t rw_mode = 0; - // Check if we are setting watchpoint other than read/write/access - // Update watchpoint flag to match ppc64le write-read bit configuration. + // Check if we are setting watchpoint other than read/write/access Update + // watchpoint flag to match ppc64le write-read bit configuration. switch (watch_flags) { case eWatchpointKindWrite: rw_mode = PPC_BREAKPOINT_TRIGGER_WRITE; @@ -591,9 +590,9 @@ uint32_t NativeRegisterContextLinux_ppc64le::SetHardwareWatchpoint( if (size != 1 && size != 2 && size != 4 && size != 8) return LLDB_INVALID_INDEX32; - // Check 8-byte alignment for hardware watchpoint target address. - // Below is a hack to recalculate address and size in order to - // make sure we can watch non 8-byte alligned addresses as well. + // Check 8-byte alignment for hardware watchpoint target address. Below is a + // hack to recalculate address and size in order to make sure we can watch + // non 8-byte alligned addresses as well. if (addr & 0x07) { addr_t begin = llvm::alignDown(addr, 8); diff --git a/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_s390x.cpp b/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_s390x.cpp index 3406ee52d6f..36da2b00105 100644 --- a/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_s390x.cpp +++ b/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_s390x.cpp @@ -372,10 +372,10 @@ Status NativeRegisterContextLinux_s390x::ReadAllRegisterValues( DoReadRegisterSet(NT_S390_SYSTEM_CALL, dst, 4); dst += 4; - // To enable inferior function calls while the process is stopped in - // an interrupted system call, we need to clear the system call flag. - // It will be restored to its original value by WriteAllRegisterValues. - // Again we ignore error if the regset is unsupported. + // To enable inferior function calls while the process is stopped in an + // interrupted system call, we need to clear the system call flag. It will be + // restored to its original value by WriteAllRegisterValues. Again we ignore + // error if the regset is unsupported. uint32_t system_call = 0; DoWriteRegisterSet(NT_S390_SYSTEM_CALL, &system_call, 4); diff --git a/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_x86_64.cpp b/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_x86_64.cpp index 84ffe9b6e42..87f4b8da053 100644 --- a/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_x86_64.cpp +++ b/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_x86_64.cpp @@ -329,9 +329,9 @@ NativeRegisterContextLinux_x86_64::NativeRegisterContextLinux_x86_64( break; } - // Initialize m_iovec to point to the buffer and buffer size - // using the conventions of Berkeley style UIO structures, as required - // by PTRACE extensions. + // Initialize m_iovec to point to the buffer and buffer size using the + // conventions of Berkeley style UIO structures, as required by PTRACE + // extensions. m_iovec.iov_base = &m_fpr; m_iovec.iov_len = sizeof(m_fpr); @@ -420,14 +420,14 @@ NativeRegisterContextLinux_x86_64::ReadRegister(const RegisterInfo *reg_info, error = ReadRegisterRaw(full_reg, reg_value); if (error.Success()) { - // If our read was not aligned (for ah,bh,ch,dh), shift our returned value - // one byte to the right. + // If our read was not aligned (for ah,bh,ch,dh), shift our returned + // value one byte to the right. if (is_subreg && (reg_info->byte_offset & 0x1)) reg_value.SetUInt64(reg_value.GetAsUInt64() >> 8); // If our return byte size was greater than the return value reg size, - // then - // use the type specified by reg_info rather than the uint64_t default + // then use the type specified by reg_info rather than the uint64_t + // default if (reg_value.GetByteSize() > reg_info->byte_size) reg_value.SetType(reg_info); } @@ -448,7 +448,8 @@ NativeRegisterContextLinux_x86_64::ReadRegister(const RegisterInfo *reg_info, reg_value.SetBytes(m_fpr.fxsave.xmm[reg - m_reg_info.first_xmm].bytes, reg_info->byte_size, byte_order); if (reg >= m_reg_info.first_ymm && reg <= m_reg_info.last_ymm) { - // Concatenate ymm using the register halves in xmm.bytes and ymmh.bytes + // Concatenate ymm using the register halves in xmm.bytes and + // ymmh.bytes if (CopyXSTATEtoYMM(reg, byte_order)) reg_value.SetBytes(m_ymm_set.ymm[reg - m_reg_info.first_ymm].bytes, reg_info->byte_size, byte_order); @@ -492,8 +493,7 @@ NativeRegisterContextLinux_x86_64::ReadRegister(const RegisterInfo *reg_info, // Byte offsets of all registers are calculated wrt 'UserArea' structure. // However, ReadFPR() reads fpu registers {using ptrace(PTRACE_GETFPREGS,..)} // and stores them in 'm_fpr' (of type FPR structure). To extract values of - // fpu - // registers, m_fpr should be read at byte offsets calculated wrt to FPR + // fpu registers, m_fpr should be read at byte offsets calculated wrt to FPR // structure. // Since, FPR structure is also one of the member of UserArea structure. @@ -599,11 +599,10 @@ Status NativeRegisterContextLinux_x86_64::WriteRegister( // Get pointer to m_fpr.fxsave variable and set the data to it. // Byte offsets of all registers are calculated wrt 'UserArea' structure. - // However, WriteFPR() takes m_fpr (of type FPR structure) and writes only - // fpu - // registers using ptrace(PTRACE_SETFPREGS,..) API. Hence fpu registers - // should - // be written in m_fpr at byte offsets calculated wrt FPR structure. + // However, WriteFPR() takes m_fpr (of type FPR structure) and writes + // only fpu registers using ptrace(PTRACE_SETFPREGS,..) API. Hence fpu + // registers should be written in m_fpr at byte offsets calculated wrt + // FPR structure. // Since, FPR structure is also one of the member of UserArea structure. // byte_offset(fpu wrt FPR) = byte_offset(fpu wrt UserArea) - @@ -1093,8 +1092,7 @@ Status NativeRegisterContextLinux_x86_64::SetHardwareWatchpointWithIndex( if (error.Fail()) return error; - // for watchpoints 0, 1, 2, or 3, respectively, - // set bits 1, 3, 5, or 7 + // for watchpoints 0, 1, 2, or 3, respectively, set bits 1, 3, 5, or 7 uint64_t enable_bit = 1 << (2 * wp_index); // set bits 16-17, 20-21, 24-25, or 28-29 @@ -1132,8 +1130,8 @@ bool NativeRegisterContextLinux_x86_64::ClearHardwareWatchpoint( RegisterValue reg_value; - // for watchpoints 0, 1, 2, or 3, respectively, - // clear bits 0, 1, 2, or 3 of the debug status register (DR6) + // for watchpoints 0, 1, 2, or 3, respectively, clear bits 0, 1, 2, or 3 of + // the debug status register (DR6) Status error = ReadRegisterRaw(m_reg_info.first_dr + 6, reg_value); if (error.Fail()) return false; @@ -1143,9 +1141,9 @@ bool NativeRegisterContextLinux_x86_64::ClearHardwareWatchpoint( if (error.Fail()) return false; - // for watchpoints 0, 1, 2, or 3, respectively, - // clear bits {0-1,16-19}, {2-3,20-23}, {4-5,24-27}, or {6-7,28-31} - // of the debug control register (DR7) + // for watchpoints 0, 1, 2, or 3, respectively, clear bits {0-1,16-19}, + // {2-3,20-23}, {4-5,24-27}, or {6-7,28-31} of the debug control register + // (DR7) error = ReadRegisterRaw(m_reg_info.first_dr + 7, reg_value); if (error.Fail()) return false; diff --git a/lldb/source/Plugins/Process/Linux/NativeThreadLinux.cpp b/lldb/source/Plugins/Process/Linux/NativeThreadLinux.cpp index 0db3bd56b8e..4ab2a9ae624 100644 --- a/lldb/source/Plugins/Process/Linux/NativeThreadLinux.cpp +++ b/lldb/source/Plugins/Process/Linux/NativeThreadLinux.cpp @@ -211,8 +211,8 @@ Status NativeThreadLinux::Resume(uint32_t signo) { m_stop_info.reason = StopReason::eStopReasonNone; m_stop_description.clear(); - // If watchpoints have been set, but none on this thread, - // then this is a new thread. So set all existing watchpoints. + // If watchpoints have been set, but none on this thread, then this is a new + // thread. So set all existing watchpoints. if (m_watchpoint_index_map.empty()) { NativeProcessLinux &process = GetProcess(); @@ -263,8 +263,8 @@ Status NativeThreadLinux::SingleStep(uint32_t signo) { data = signo; // If hardware single-stepping is not supported, we just do a continue. The - // breakpoint on the - // next instruction has been setup in NativeProcessLinux::Resume. + // breakpoint on the next instruction has been setup in + // NativeProcessLinux::Resume. return NativeProcessLinux::PtraceWrapper( GetProcess().SupportHardwareSingleStepping() ? PTRACE_SINGLESTEP : PTRACE_CONT, diff --git a/lldb/source/Plugins/Process/Linux/SingleStepCheck.cpp b/lldb/source/Plugins/Process/Linux/SingleStepCheck.cpp index 251cb4b2f10..c57a2daf227 100644 --- a/lldb/source/Plugins/Process/Linux/SingleStepCheck.cpp +++ b/lldb/source/Plugins/Process/Linux/SingleStepCheck.cpp @@ -59,9 +59,9 @@ struct ChildDeleter { bool WorkaroundNeeded() { // We shall spawn a child, and use it to verify the debug capabilities of the - // cpu. We shall iterate through the cpus, bind the child to each one in turn, - // and verify that single-stepping works on that cpu. A workaround is needed - // if we find at least one broken cpu. + // cpu. We shall iterate through the cpus, bind the child to each one in + // turn, and verify that single-stepping works on that cpu. A workaround is + // needed if we find at least one broken cpu. Log *log = ProcessPOSIXLog::GetLogIfAllCategoriesSet(POSIX_LOG_THREAD); ::pid_t child_pid = fork(); diff --git a/lldb/source/Plugins/Process/MacOSX-Kernel/CommunicationKDP.cpp b/lldb/source/Plugins/Process/MacOSX-Kernel/CommunicationKDP.cpp index 1141b31ca1e..463e5f583c5 100644 --- a/lldb/source/Plugins/Process/MacOSX-Kernel/CommunicationKDP.cpp +++ b/lldb/source/Plugins/Process/MacOSX-Kernel/CommunicationKDP.cpp @@ -118,16 +118,14 @@ bool CommunicationKDP::SendRequestAndGetReply( } } else if (reply_sequence_id > request_sequence_id) { // Sequence ID was greater than the sequence ID of the packet we - // sent, something - // is really wrong... + // sent, something is really wrong... reply_packet.Clear(); return false; } else { - // The reply sequence ID was less than our current packet's sequence - // ID - // so we should keep trying to get a response because this was a - // response - // for a previous packet that we must have retried. + // The reply sequence ID was less than our current packet's + // sequence ID so we should keep trying to get a response because + // this was a response for a previous packet that we must have + // retried. } } else { // Break and retry sending the packet as we didn't get a response due @@ -315,9 +313,9 @@ bool CommunicationKDP::CheckForPacket(const uint8_t *src, size_t src_len, offset = 2; const uint16_t length = packet.GetU16(&offset); if (length <= bytes_available) { - // We have an entire packet ready, we need to copy the data - // bytes into a buffer that will be owned by the packet and - // erase the bytes from our communcation buffer "m_bytes" + // We have an entire packet ready, we need to copy the data bytes into + // a buffer that will be owned by the packet and erase the bytes from + // our communcation buffer "m_bytes" packet.SetData(DataBufferSP(new DataBufferHeap(&m_bytes[0], length))); m_bytes.erase(0, length); @@ -332,8 +330,8 @@ bool CommunicationKDP::CheckForPacket(const uint8_t *src, size_t src_len, } break; default: - // Unrecognized reply command byte, erase this byte and try to get back on - // track + // Unrecognized reply command byte, erase this byte and try to get back + // on track if (log) log->Printf("CommunicationKDP::%s: tossing junk byte: 0x%2.2x", __FUNCTION__, (uint8_t)m_bytes[0]); @@ -1208,8 +1206,8 @@ uint32_t CommunicationKDP::SendRequestReadRegisters(uint32_t cpu, if (src) { ::memcpy(dst, src, bytes_to_copy); error.Clear(); - // Return the number of bytes we could have returned regardless if - // we copied them or not, just so we know when things don't match up + // Return the number of bytes we could have returned regardless if we + // copied them or not, just so we know when things don't match up return src_len; } } diff --git a/lldb/source/Plugins/Process/MacOSX-Kernel/ProcessKDP.cpp b/lldb/source/Plugins/Process/MacOSX-Kernel/ProcessKDP.cpp index f01f1ace583..40bebfcf098 100644 --- a/lldb/source/Plugins/Process/MacOSX-Kernel/ProcessKDP.cpp +++ b/lldb/source/Plugins/Process/MacOSX-Kernel/ProcessKDP.cpp @@ -172,10 +172,10 @@ ProcessKDP::ProcessKDP(TargetSP target_sp, ListenerSP listener_sp) //---------------------------------------------------------------------- ProcessKDP::~ProcessKDP() { Clear(); - // We need to call finalize on the process before destroying ourselves - // to make sure all of the broadcaster cleanup goes as planned. If we - // destruct this class, then Process::~Process() might have problems - // trying to fully destroy the broadcaster. + // We need to call finalize on the process before destroying ourselves to + // make sure all of the broadcaster cleanup goes as planned. If we destruct + // this class, then Process::~Process() might have problems trying to fully + // destroy the broadcaster. Finalize(); } @@ -226,9 +226,9 @@ bool ProcessKDP::GetHostArchitecture(ArchSpec &arch) { Status ProcessKDP::DoConnectRemote(Stream *strm, llvm::StringRef remote_url) { Status error; - // Don't let any JIT happen when doing KDP as we can't allocate - // memory and we don't want to be mucking with threads that might - // already be handling exceptions + // Don't let any JIT happen when doing KDP as we can't allocate memory and we + // don't want to be mucking with threads that might already be handling + // exceptions SetCanJIT(false); if (remote_url.empty()) { @@ -282,16 +282,15 @@ Status ProcessKDP::DoConnectRemote(Stream *strm, llvm::StringRef remote_url) { if (m_comm.RemoteIsEFI()) { // Select an invalid plugin name for the dynamic loader so one - // doesn't get used - // since EFI does its own manual loading via python scripting + // doesn't get used since EFI does its own manual loading via + // python scripting static ConstString g_none_dynamic_loader("none"); m_dyld_plugin_name = g_none_dynamic_loader; if (kernel_uuid.IsValid()) { - // If EFI passed in a UUID= try to lookup UUID - // The slide will not be provided. But the UUID - // lookup will be used to launch EFI debug scripts - // from the dSYM, that can load all of the symbols. + // If EFI passed in a UUID= try to lookup UUID The slide will not + // be provided. But the UUID lookup will be used to launch EFI + // debug scripts from the dSYM, that can load all of the symbols. ModuleSpec module_spec; module_spec.GetUUID() = kernel_uuid; module_spec.GetArchitecture() = target.GetArchitecture(); @@ -443,8 +442,8 @@ Status ProcessKDP::DoResume() { StateAsCString(thread_resume_state)); switch (thread_resume_state) { case eStateSuspended: - // Nothing to do here when a thread will stay suspended - // we just leave the CPU mask bit set to zero for the thread + // Nothing to do here when a thread will stay suspended we just leave the + // CPU mask bit set to zero for the thread if (log) log->Printf("ProcessKDP::DoResume() = suspended???"); break; @@ -535,8 +534,8 @@ bool ProcessKDP::UpdateThreadList(ThreadList &old_thread_list, } void ProcessKDP::RefreshStateAfterStop() { - // Let all threads recover from stopping and do any clean up based - // on the previous thread state (if any). + // Let all threads recover from stopping and do any clean up based on the + // previous thread state (if any). m_thread_list.RefreshStateAfterStop(); } @@ -545,9 +544,9 @@ Status ProcessKDP::DoHalt(bool &caused_stop) { if (m_comm.IsRunning()) { if (m_destroy_in_process) { - // If we are attemping to destroy, we need to not return an error to - // Halt or DoDestroy won't get called. - // We are also currently running, so send a process stopped event + // If we are attemping to destroy, we need to not return an error to Halt + // or DoDestroy won't get called. We are also currently running, so send + // a process stopped event SetPrivateState(eStateStopped); } else { error.SetErrorString("KDP cannot interrupt a running kernel"); @@ -563,8 +562,8 @@ Status ProcessKDP::DoDetach(bool keep_stopped) { log->Printf("ProcessKDP::DoDetach(keep_stopped = %i)", keep_stopped); if (m_comm.IsRunning()) { - // We are running and we can't interrupt a running kernel, so we need - // to just close the connection to the kernel and hope for the best + // We are running and we can't interrupt a running kernel, so we need to + // just close the connection to the kernel and hope for the best } else { // If we are going to keep the target stopped, then don't send the // disconnect message. diff --git a/lldb/source/Plugins/Process/MacOSX-Kernel/ThreadKDP.cpp b/lldb/source/Plugins/Process/MacOSX-Kernel/ThreadKDP.cpp index 1902cc492ff..8aaacccf4c1 100644 --- a/lldb/source/Plugins/Process/MacOSX-Kernel/ThreadKDP.cpp +++ b/lldb/source/Plugins/Process/MacOSX-Kernel/ThreadKDP.cpp @@ -65,8 +65,8 @@ void ThreadKDP::RefreshStateAfterStop() { // context by the time this function gets called. The KDPRegisterContext // class has been made smart enough to detect when it needs to invalidate // which registers are valid by putting hooks in the register read and - // register supply functions where they check the process stop ID and do - // the right thing. + // register supply functions where they check the process stop ID and do the + // right thing. const bool force = false; lldb::RegisterContextSP reg_ctx_sp(GetRegisterContext()); if (reg_ctx_sp) @@ -151,8 +151,8 @@ void ThreadKDP::SetStopInfoFrom_KDP_EXCEPTION( const uint32_t exc_type = exc_reply_packet.GetU32(&offset); const uint32_t exc_code = exc_reply_packet.GetU32(&offset); const uint32_t exc_subcode = exc_reply_packet.GetU32(&offset); - // We have to make a copy of the stop info because the thread list - // will iterate through the threads and clear all stop infos.. + // We have to make a copy of the stop info because the thread list will + // iterate through the threads and clear all stop infos.. // Let the StopInfoMachException::CreateStopReasonWithMachException() // function update the PC if needed as we might hit a software breakpoint diff --git a/lldb/source/Plugins/Process/NetBSD/NativeProcessNetBSD.cpp b/lldb/source/Plugins/Process/NetBSD/NativeProcessNetBSD.cpp index dac2aa5d4dd..1a4cb21d000 100644 --- a/lldb/source/Plugins/Process/NetBSD/NativeProcessNetBSD.cpp +++ b/lldb/source/Plugins/Process/NetBSD/NativeProcessNetBSD.cpp @@ -24,8 +24,7 @@ #include "llvm/Support/Errno.h" // System includes - They have to be included after framework includes because -// they define some -// macros which collide with variable names in other modules +// they define some macros which collide with variable names in other modules // clang-format off #include <sys/types.h> #include <sys/ptrace.h> @@ -352,8 +351,8 @@ NativeProcessNetBSD::FixupBreakpointPCAsNeeded(NativeThreadNetBSD &thread) { return error; } else LLDB_LOG(log, "breakpoint size: {0}", breakpoint_size); - // First try probing for a breakpoint at a software breakpoint location: PC - // - breakpoint size. + // First try probing for a breakpoint at a software breakpoint location: PC - + // breakpoint size. const lldb::addr_t initial_pc_addr = context.GetPCfromBreakpointLocation(); lldb::addr_t breakpoint_addr = initial_pc_addr; @@ -562,8 +561,8 @@ Status NativeProcessNetBSD::GetMemoryRegionInfo(lldb::addr_t load_addr, "descending memory map entries detected, unexpected"); prev_base_address = proc_entry_info.GetRange().GetRangeBase(); UNUSED_IF_ASSERT_DISABLED(prev_base_address); - // If the target address comes before this entry, indicate distance to - // next region. + // If the target address comes before this entry, indicate distance to next + // region. if (load_addr < proc_entry_info.GetRange().GetRangeBase()) { range_info.GetRange().SetRangeBase(load_addr); range_info.GetRange().SetByteSize( @@ -582,9 +581,8 @@ Status NativeProcessNetBSD::GetMemoryRegionInfo(lldb::addr_t load_addr, // parsed. } // If we made it here, we didn't find an entry that contained the given - // address. Return the - // load_addr as start and the amount of bytes betwwen load address and the - // end of the memory as size. + // address. Return the load_addr as start and the amount of bytes betwwen + // load address and the end of the memory as size. range_info.GetRange().SetRangeBase(load_addr); range_info.GetRange().SetRangeEnd(LLDB_INVALID_ADDRESS); range_info.SetReadable(MemoryRegionInfo::OptionalBool::eNo); @@ -644,8 +642,8 @@ Status NativeProcessNetBSD::PopulateMemoryRegionCache() { free(vm); if (m_mem_region_cache.empty()) { - // No entries after attempting to read them. This shouldn't happen. - // Assume we don't support map entries. + // No entries after attempting to read them. This shouldn't happen. Assume + // we don't support map entries. LLDB_LOG(log, "failed to find any vmmap entries, assuming no support " "for memory region metadata retrieval"); m_supports_mem_region = LazyBool::eLazyBoolNo; @@ -781,8 +779,8 @@ Status NativeProcessNetBSD::Attach() { return status; int wstatus; - // Need to use WALLSIG otherwise we receive an error with errno=ECHLD - // At this point we should have a thread stopped if waitpid succeeds. + // Need to use WALLSIG otherwise we receive an error with errno=ECHLD At this + // point we should have a thread stopped if waitpid succeeds. if ((wstatus = waitpid(m_pid, NULL, WALLSIG)) < 0) return Status(errno, eErrorTypePOSIX); diff --git a/lldb/source/Plugins/Process/NetBSD/NativeRegisterContextNetBSD_x86_64.cpp b/lldb/source/Plugins/Process/NetBSD/NativeRegisterContextNetBSD_x86_64.cpp index 347c15ae5b2..16b6f2c52dd 100644 --- a/lldb/source/Plugins/Process/NetBSD/NativeRegisterContextNetBSD_x86_64.cpp +++ b/lldb/source/Plugins/Process/NetBSD/NativeRegisterContextNetBSD_x86_64.cpp @@ -161,8 +161,8 @@ static RegisterInfoInterface * CreateRegisterInfoInterface(const ArchSpec &target_arch) { assert((HostInfo::GetArchitecture().GetAddressByteSize() == 8) && "Register setting path assumes this is a 64-bit host"); - // X86_64 hosts know how to work with 64-bit and 32-bit EXEs using the - // x86_64 register context. + // X86_64 hosts know how to work with 64-bit and 32-bit EXEs using the x86_64 + // register context. return new RegisterContextNetBSD_x86_64(target_arch); } @@ -805,8 +805,7 @@ Status NativeRegisterContextNetBSD_x86_64::SetHardwareWatchpointWithIndex( if (error.Fail()) return error; - // for watchpoints 0, 1, 2, or 3, respectively, - // set bits 1, 3, 5, or 7 + // for watchpoints 0, 1, 2, or 3, respectively, set bits 1, 3, 5, or 7 uint64_t enable_bit = 1 << (2 * wp_index); // set bits 16-17, 20-21, 24-25, or 28-29 @@ -845,8 +844,8 @@ bool NativeRegisterContextNetBSD_x86_64::ClearHardwareWatchpoint( RegisterValue reg_value; - // for watchpoints 0, 1, 2, or 3, respectively, - // clear bits 0, 1, 2, or 3 of the debug status register (DR6) + // for watchpoints 0, 1, 2, or 3, respectively, clear bits 0, 1, 2, or 3 of + // the debug status register (DR6) const RegisterInfo *const reg_info_dr6 = GetRegisterInfoAtIndex(lldb_dr6_x86_64); Status error = ReadRegister(reg_info_dr6, reg_value); @@ -858,9 +857,9 @@ bool NativeRegisterContextNetBSD_x86_64::ClearHardwareWatchpoint( if (error.Fail()) return false; - // for watchpoints 0, 1, 2, or 3, respectively, - // clear bits {0-1,16-19}, {2-3,20-23}, {4-5,24-27}, or {6-7,28-31} - // of the debug control register (DR7) + // for watchpoints 0, 1, 2, or 3, respectively, clear bits {0-1,16-19}, + // {2-3,20-23}, {4-5,24-27}, or {6-7,28-31} of the debug control register + // (DR7) const RegisterInfo *const reg_info_dr7 = GetRegisterInfoAtIndex(lldb_dr7_x86_64); error = ReadRegister(reg_info_dr7, reg_value); diff --git a/lldb/source/Plugins/Process/POSIX/CrashReason.cpp b/lldb/source/Plugins/Process/POSIX/CrashReason.cpp index 864418c9003..4b24d31226a 100644 --- a/lldb/source/Plugins/Process/POSIX/CrashReason.cpp +++ b/lldb/source/Plugins/Process/POSIX/CrashReason.cpp @@ -47,8 +47,7 @@ CrashReason GetCrashReasonForSIGSEGV(const siginfo_t &info) { #ifdef SI_KERNEL case SI_KERNEL: // Some platforms will occasionally send nonstandard spurious SI_KERNEL - // codes. - // One way to get this is via unaligned SIMD loads. + // codes. One way to get this is via unaligned SIMD loads. return CrashReason::eInvalidAddress; // for lack of anything better #endif case SEGV_MAPERR: diff --git a/lldb/source/Plugins/Process/Utility/DynamicRegisterInfo.cpp b/lldb/source/Plugins/Process/Utility/DynamicRegisterInfo.cpp index 100ab13d3b2..f9ab48e970f 100644 --- a/lldb/source/Plugins/Process/Utility/DynamicRegisterInfo.cpp +++ b/lldb/source/Plugins/Process/Utility/DynamicRegisterInfo.cpp @@ -74,8 +74,8 @@ DynamicRegisterInfo::SetRegisterInfo(const StructuredData::Dictionary &dict, return 0; } - // { 'name':'rcx' , 'bitsize' : 64, 'offset' : 16, 'encoding':'uint' - // , 'format':'hex' , 'set': 0, 'ehframe' : 2, + // { 'name':'rcx' , 'bitsize' : 64, 'offset' : 16, + // 'encoding':'uint' , 'format':'hex' , 'set': 0, 'ehframe' : 2, // 'dwarf' : 2, 'generic':'arg4', 'alt-name':'arg4', }, RegisterInfo reg_info; std::vector<uint32_t> value_regs; @@ -100,14 +100,11 @@ DynamicRegisterInfo::SetRegisterInfo(const StructuredData::Dictionary &dict, const ByteOrder byte_order = arch.GetByteOrder(); if (reg_info.byte_offset == UINT32_MAX) { - // No offset for this register, see if the register has a value expression - // which indicates this register is part of another register. Value - // expressions - // are things like "rax[31:0]" which state that the current register's - // value - // is in a concrete register "rax" in bits 31:0. If there is a value - // expression - // we can calculate the offset + // No offset for this register, see if the register has a value + // expression which indicates this register is part of another register. + // Value expressions are things like "rax[31:0]" which state that the + // current register's value is in a concrete register "rax" in bits 31:0. + // If there is a value expression we can calculate the offset bool success = false; llvm::StringRef slice_str; if (reg_info_dict->GetValueForKeyAsString("slice", slice_str, nullptr)) { @@ -491,8 +488,7 @@ void DynamicRegisterInfo::Finalize(const ArchSpec &arch) { } // sort and unique all invalidate registers and make sure each is terminated - // with - // LLDB_INVALID_REGNUM + // with LLDB_INVALID_REGNUM for (reg_to_regs_map::iterator pos = m_invalidate_regs_map.begin(), end = m_invalidate_regs_map.end(); pos != end; ++pos) { @@ -516,8 +512,8 @@ void DynamicRegisterInfo::Finalize(const ArchSpec &arch) { m_regs[i].invalidate_regs = NULL; } - // Check if we need to automatically set the generic registers in case - // they weren't set + // Check if we need to automatically set the generic registers in case they + // weren't set bool generic_regs_specified = false; for (const auto ® : m_regs) { if (reg.kinds[eRegisterKindGeneric] != LLDB_INVALID_REGNUM) { @@ -732,8 +728,8 @@ void DynamicRegisterInfo::Dump() const { lldb_private::RegisterInfo *DynamicRegisterInfo::GetRegisterInfo( const lldb_private::ConstString ®_name) { for (auto ®_info : m_regs) { - // We can use pointer comparison since we used a ConstString to set - // the "name" member in AddRegister() + // We can use pointer comparison since we used a ConstString to set the + // "name" member in AddRegister() if (reg_info.name == reg_name.GetCString()) { return ®_info; } diff --git a/lldb/source/Plugins/Process/Utility/RegisterContextDarwin_arm.cpp b/lldb/source/Plugins/Process/Utility/RegisterContextDarwin_arm.cpp index 64a697ff53c..b07ad7fdaba 100644 --- a/lldb/source/Plugins/Process/Utility/RegisterContextDarwin_arm.cpp +++ b/lldb/source/Plugins/Process/Utility/RegisterContextDarwin_arm.cpp @@ -968,9 +968,9 @@ const size_t k_num_fpu_registers = llvm::array_lengthof(g_fpu_regnums); const size_t k_num_exc_registers = llvm::array_lengthof(g_exc_regnums); //---------------------------------------------------------------------- -// Register set definitions. The first definitions at register set index -// of zero is for all registers, followed by other registers sets. The -// register information for the all register set need not be filled in. +// Register set definitions. The first definitions at register set index of +// zero is for all registers, followed by other registers sets. The register +// information for the all register set need not be filled in. //---------------------------------------------------------------------- static const RegisterSet g_reg_sets[] = { { diff --git a/lldb/source/Plugins/Process/Utility/RegisterContextDarwin_arm64.cpp b/lldb/source/Plugins/Process/Utility/RegisterContextDarwin_arm64.cpp index 344c08965fa..f11cd7f5cb1 100644 --- a/lldb/source/Plugins/Process/Utility/RegisterContextDarwin_arm64.cpp +++ b/lldb/source/Plugins/Process/Utility/RegisterContextDarwin_arm64.cpp @@ -149,9 +149,9 @@ const size_t k_num_fpu_registers = llvm::array_lengthof(g_fpu_regnums); const size_t k_num_exc_registers = llvm::array_lengthof(g_exc_regnums); //---------------------------------------------------------------------- -// Register set definitions. The first definitions at register set index -// of zero is for all registers, followed by other registers sets. The -// register information for the all register set need not be filled in. +// Register set definitions. The first definitions at register set index of +// zero is for all registers, followed by other registers sets. The register +// information for the all register set need not be filled in. //---------------------------------------------------------------------- static const RegisterSet g_reg_sets[] = { { diff --git a/lldb/source/Plugins/Process/Utility/RegisterContextDarwin_i386.cpp b/lldb/source/Plugins/Process/Utility/RegisterContextDarwin_i386.cpp index c818fad9ac0..24414211d9a 100644 --- a/lldb/source/Plugins/Process/Utility/RegisterContextDarwin_i386.cpp +++ b/lldb/source/Plugins/Process/Utility/RegisterContextDarwin_i386.cpp @@ -147,9 +147,9 @@ enum { sizeof(RegisterContextDarwin_i386::FPU)) // These macros will auto define the register name, alt name, register size, -// register offset, encoding, format and native register. This ensures that -// the register state structures are defined correctly and have the correct -// sizes and offsets. +// register offset, encoding, format and native register. This ensures that the +// register state structures are defined correctly and have the correct sizes +// and offsets. #define DEFINE_GPR(reg, alt) \ #reg, alt, sizeof(((RegisterContextDarwin_i386::GPR *) NULL)->reg), \ GPR_OFFSET(reg), eEncodingUint, eFormatHex @@ -464,9 +464,9 @@ const size_t k_num_fpu_registers = llvm::array_lengthof(g_fpu_regnums); const size_t k_num_exc_registers = llvm::array_lengthof(g_exc_regnums); //---------------------------------------------------------------------- -// Register set definitions. The first definitions at register set index -// of zero is for all registers, followed by other registers sets. The -// register information for the all register set need not be filled in. +// Register set definitions. The first definitions at register set index of +// zero is for all registers, followed by other registers sets. The register +// information for the all register set need not be filled in. //---------------------------------------------------------------------- static const RegisterSet g_reg_sets[] = { { @@ -680,8 +680,7 @@ bool RegisterContextDarwin_i386::ReadRegister(const RegisterInfo *reg_info, case fpu_stmm6: case fpu_stmm7: // These values don't fit into scalar types, - // RegisterContext::ReadRegisterBytes() must be used for these - // registers + // RegisterContext::ReadRegisterBytes() must be used for these registers //::memcpy (reg_value.value.vector.uint8, fpu.stmm[reg - fpu_stmm0].bytes, //10); return false; @@ -695,8 +694,7 @@ bool RegisterContextDarwin_i386::ReadRegister(const RegisterInfo *reg_info, case fpu_xmm6: case fpu_xmm7: // These values don't fit into scalar types, - // RegisterContext::ReadRegisterBytes() - // must be used for these registers + // RegisterContext::ReadRegisterBytes() must be used for these registers //::memcpy (reg_value.value.vector.uint8, fpu.xmm[reg - fpu_xmm0].bytes, //16); return false; @@ -799,8 +797,7 @@ bool RegisterContextDarwin_i386::WriteRegister(const RegisterInfo *reg_info, case fpu_stmm6: case fpu_stmm7: // These values don't fit into scalar types, - // RegisterContext::ReadRegisterBytes() - // must be used for these registers + // RegisterContext::ReadRegisterBytes() must be used for these registers ::memcpy(fpu.stmm[reg - fpu_stmm0].bytes, value.GetBytes(), value.GetByteSize()); return false; @@ -814,8 +811,7 @@ bool RegisterContextDarwin_i386::WriteRegister(const RegisterInfo *reg_info, case fpu_xmm6: case fpu_xmm7: // These values don't fit into scalar types, - // RegisterContext::ReadRegisterBytes() - // must be used for these registers + // RegisterContext::ReadRegisterBytes() must be used for these registers ::memcpy(fpu.xmm[reg - fpu_xmm0].bytes, value.GetBytes(), value.GetByteSize()); return false; diff --git a/lldb/source/Plugins/Process/Utility/RegisterContextDarwin_x86_64.cpp b/lldb/source/Plugins/Process/Utility/RegisterContextDarwin_x86_64.cpp index 50e7292f86b..ecad8240b29 100644 --- a/lldb/source/Plugins/Process/Utility/RegisterContextDarwin_x86_64.cpp +++ b/lldb/source/Plugins/Process/Utility/RegisterContextDarwin_x86_64.cpp @@ -165,9 +165,9 @@ enum ehframe_dwarf_regnums { sizeof(RegisterContextDarwin_x86_64::FPU)) // These macros will auto define the register name, alt name, register size, -// register offset, encoding, format and native register. This ensures that -// the register state structures are defined correctly and have the correct -// sizes and offsets. +// register offset, encoding, format and native register. This ensures that the +// register state structures are defined correctly and have the correct sizes +// and offsets. #define DEFINE_GPR(reg, alt) \ #reg, alt, sizeof(((RegisterContextDarwin_x86_64::GPR *) NULL)->reg), \ GPR_OFFSET(reg), eEncodingUint, eFormatHex @@ -525,9 +525,9 @@ const size_t k_num_fpu_registers = llvm::array_lengthof(g_fpu_regnums); const size_t k_num_exc_registers = llvm::array_lengthof(g_exc_regnums); //---------------------------------------------------------------------- -// Register set definitions. The first definitions at register set index -// of zero is for all registers, followed by other registers sets. The -// register information for the all register set need not be filled in. +// Register set definitions. The first definitions at register set index of +// zero is for all registers, followed by other registers sets. The register +// information for the all register set need not be filled in. //---------------------------------------------------------------------- static const RegisterSet g_reg_sets[] = { { diff --git a/lldb/source/Plugins/Process/Utility/RegisterContextLLDB.cpp b/lldb/source/Plugins/Process/Utility/RegisterContextLLDB.cpp index 5435a02433a..ba9a8071bcf 100644 --- a/lldb/source/Plugins/Process/Utility/RegisterContextLLDB.cpp +++ b/lldb/source/Plugins/Process/Utility/RegisterContextLLDB.cpp @@ -104,8 +104,7 @@ bool RegisterContextLLDB::IsUnwindPlanValidForCurrentPC( } // Initialize a RegisterContextLLDB which is the first frame of a stack -- the -// zeroth frame or currently -// executing frame. +// zeroth frame or currently executing frame. void RegisterContextLLDB::InitializeZerothFrame() { Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_UNWIND)); @@ -131,25 +130,26 @@ void RegisterContextLLDB::InitializeZerothFrame() { // Let ABIs fixup code addresses to make sure they are valid. In ARM ABIs // this will strip bit zero in case we read a PC from memory or from the LR. // (which would be a no-op in frame 0 where we get it from the register set, - // but still a good idea to make the call here for other ABIs that may exist.) + // but still a good idea to make the call here for other ABIs that may + // exist.) ABI *abi = process->GetABI().get(); if (abi) current_pc = abi->FixCodeAddress(current_pc); - // Initialize m_current_pc, an Address object, based on current_pc, an addr_t. + // Initialize m_current_pc, an Address object, based on current_pc, an + // addr_t. m_current_pc.SetLoadAddress(current_pc, &process->GetTarget()); // If we don't have a Module for some reason, we're not going to find - // symbol/function information - just - // stick in some reasonable defaults and hope we can unwind past this frame. + // symbol/function information - just stick in some reasonable defaults and + // hope we can unwind past this frame. ModuleSP pc_module_sp(m_current_pc.GetModule()); if (!m_current_pc.IsValid() || !pc_module_sp) { UnwindLogMsg("using architectural default unwind method"); } // We require either a symbol or function in the symbols context to be - // successfully - // filled in or this context is of no use to us. + // successfully filled in or this context is of no use to us. const uint32_t resolve_scope = eSymbolContextFunction | eSymbolContextSymbol; if (pc_module_sp.get() && (pc_module_sp->ResolveSymbolContextForAddress( m_current_pc, resolve_scope, m_sym_ctx) & @@ -180,18 +180,17 @@ void RegisterContextLLDB::InitializeZerothFrame() { } // If we were able to find a symbol/function, set addr_range to the bounds of - // that symbol/function. - // else treat the current pc value as the start_pc and record no offset. + // that symbol/function. else treat the current pc value as the start_pc and + // record no offset. if (addr_range.GetBaseAddress().IsValid()) { m_start_pc = addr_range.GetBaseAddress(); if (m_current_pc.GetSection() == m_start_pc.GetSection()) { m_current_offset = m_current_pc.GetOffset() - m_start_pc.GetOffset(); } else if (m_current_pc.GetModule() == m_start_pc.GetModule()) { - // This means that whatever symbol we kicked up isn't really correct - // --- we should not cross section boundaries ... We really should NULL - // out - // the function/symbol in this case unless there is a bad assumption - // here due to inlined functions? + // This means that whatever symbol we kicked up isn't really correct --- + // we should not cross section boundaries ... We really should NULL out + // the function/symbol in this case unless there is a bad assumption here + // due to inlined functions? m_current_offset = m_current_pc.GetFileAddress() - m_start_pc.GetFileAddress(); } @@ -266,8 +265,7 @@ void RegisterContextLLDB::InitializeZerothFrame() { } // Initialize a RegisterContextLLDB for the non-zeroth frame -- rely on the -// RegisterContextLLDB "below" it -// to provide things like its current pc value. +// RegisterContextLLDB "below" it to provide things like its current pc value. void RegisterContextLLDB::InitializeNonZerothFrame() { Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_UNWIND)); @@ -333,8 +331,8 @@ void RegisterContextLLDB::InitializeNonZerothFrame() { m_current_pc.SetLoadAddress(pc, &process->GetTarget(), allow_section_end); // If we don't have a Module for some reason, we're not going to find - // symbol/function information - just - // stick in some reasonable defaults and hope we can unwind past this frame. + // symbol/function information - just stick in some reasonable defaults and + // hope we can unwind past this frame. ModuleSP pc_module_sp(m_current_pc.GetModule()); if (!m_current_pc.IsValid() || !pc_module_sp) { UnwindLogMsg("using architectural default unwind method"); @@ -345,12 +343,10 @@ void RegisterContextLLDB::InitializeNonZerothFrame() { if (process->GetLoadAddressPermissions(pc, permissions) && (permissions & ePermissionsExecutable) == 0) { // If this is the second frame off the stack, we may have unwound the - // first frame - // incorrectly. But using the architecture default unwind plan may get us - // back on - // track -- albeit possibly skipping a real frame. Give this frame a - // clearly-invalid - // pc and see if we can get any further. + // first frame incorrectly. But using the architecture default unwind + // plan may get us back on track -- albeit possibly skipping a real + // frame. Give this frame a clearly-invalid pc and see if we can get any + // further. if (GetNextFrame().get() && GetNextFrame()->IsValid() && GetNextFrame()->IsFrameZero()) { UnwindLogMsg("had a pc of 0x%" PRIx64 " which is not in executable " @@ -359,8 +355,8 @@ void RegisterContextLLDB::InitializeNonZerothFrame() { (uint64_t)pc); m_frame_type = eSkipFrame; } else { - // anywhere other than the second frame, a non-executable pc means we're - // off in the weeds -- stop now. + // anywhere other than the second frame, a non-executable pc means + // we're off in the weeds -- stop now. m_frame_type = eNotAValidFrame; UnwindLogMsg("pc is in a non-executable section of memory and this " "isn't the 2nd frame in the stack walk."); @@ -399,8 +395,7 @@ void RegisterContextLLDB::InitializeNonZerothFrame() { } // m_cfa should point into the stack memory; if we can query memory - // region permissions, - // see if the memory is allocated & readable. + // region permissions, see if the memory is allocated & readable. if (process->GetLoadAddressPermissions(m_cfa, permissions) && (permissions & ePermissionsReadable) == 0) { m_frame_type = eNotAValidFrame; @@ -435,19 +430,18 @@ void RegisterContextLLDB::InitializeNonZerothFrame() { bool resolve_tail_call_address = false; // m_current_pc can be one past the // address range of the function... - // If the saved pc does not point to a function/symbol because it is - // beyond the bounds of the correct function and there's no symbol there, - // we do *not* want ResolveSymbolContextForAddress to back up the pc by 1, - // because then we might not find the correct unwind information later. - // Instead, let ResolveSymbolContextForAddress fail, and handle the case - // via decr_pc_and_recompute_addr_range below. + // If the saved pc does not point to a function/symbol because it is beyond + // the bounds of the correct function and there's no symbol there, we do + // *not* want ResolveSymbolContextForAddress to back up the pc by 1, because + // then we might not find the correct unwind information later. Instead, let + // ResolveSymbolContextForAddress fail, and handle the case via + // decr_pc_and_recompute_addr_range below. const uint32_t resolve_scope = eSymbolContextFunction | eSymbolContextSymbol; uint32_t resolved_scope = pc_module_sp->ResolveSymbolContextForAddress( m_current_pc, resolve_scope, m_sym_ctx, resolve_tail_call_address); // We require either a symbol or function in the symbols context to be - // successfully - // filled in or this context is of no use to us. + // successfully filled in or this context is of no use to us. if (resolve_scope & resolved_scope) { m_sym_ctx_valid = true; } @@ -476,8 +470,7 @@ void RegisterContextLLDB::InitializeNonZerothFrame() { decr_pc_and_recompute_addr_range = true; // Or if we're in the middle of the stack (and not "above" an asynchronous - // event like sigtramp), - // and our "current" pc is the start of a function... + // event like sigtramp), and our "current" pc is the start of a function... if (GetNextFrame()->m_frame_type != eTrapHandlerFrame && GetNextFrame()->m_frame_type != eDebuggerFrame && (!m_sym_ctx_valid || @@ -488,9 +481,8 @@ void RegisterContextLLDB::InitializeNonZerothFrame() { } // We need to back up the pc by 1 byte and re-search for the Symbol to handle - // the case where the "saved pc" - // value is pointing to the next function, e.g. if a function ends with a CALL - // instruction. + // the case where the "saved pc" value is pointing to the next function, e.g. + // if a function ends with a CALL instruction. // FIXME this may need to be an architectural-dependent behavior; if so we'll // need to add a member function // to the ABI plugin and consult that. @@ -516,9 +508,9 @@ void RegisterContextLLDB::InitializeNonZerothFrame() { GetSymbolOrFunctionName(m_sym_ctx).AsCString("")); } - // If we were able to find a symbol/function, set addr_range_ptr to the bounds - // of that symbol/function. - // else treat the current pc value as the start_pc and record no offset. + // If we were able to find a symbol/function, set addr_range_ptr to the + // bounds of that symbol/function. else treat the current pc value as the + // start_pc and record no offset. if (addr_range.GetBaseAddress().IsValid()) { m_start_pc = addr_range.GetBaseAddress(); m_current_offset = pc - m_start_pc.GetLoadAddress(&process->GetTarget()); @@ -553,9 +545,8 @@ void RegisterContextLLDB::InitializeNonZerothFrame() { RegisterKind row_register_kind = eRegisterKindGeneric; // Try to get by with just the fast UnwindPlan if possible - the full - // UnwindPlan may be expensive to get - // (e.g. if we have to parse the entire eh_frame section of an ObjectFile for - // the first time.) + // UnwindPlan may be expensive to get (e.g. if we have to parse the entire + // eh_frame section of an ObjectFile for the first time.) if (m_fast_unwind_plan_sp && m_fast_unwind_plan_sp->PlanValidAtAddress(m_current_pc)) { @@ -616,16 +607,14 @@ void RegisterContextLLDB::InitializeNonZerothFrame() { bool RegisterContextLLDB::CheckIfLoopingStack() { // If we have a bad stack setup, we can get the same CFA value multiple times - // -- or even - // more devious, we can actually oscillate between two CFA values. Detect that - // here and - // break out to avoid a possible infinite loop in lldb trying to unwind the - // stack. - // To detect when we have the same CFA value multiple times, we compare the + // -- or even more devious, we can actually oscillate between two CFA values. + // Detect that here and break out to avoid a possible infinite loop in lldb + // trying to unwind the stack. To detect when we have the same CFA value + // multiple times, we compare the // CFA of the current // frame with the 2nd next frame because in some specail case (e.g. signal - // hanlders, hand - // written assembly without ABI compiance) we can have 2 frames with the same + // hanlders, hand written assembly without ABI compiance) we can have 2 + // frames with the same // CFA (in theory we // can have arbitrary number of frames with the same CFA, but more then 2 is // very very unlikely) @@ -734,15 +723,12 @@ UnwindPlanSP RegisterContextLLDB::GetFullUnwindPlanForFrame() { } // If we've done a jmp 0x0 / bl 0x0 (called through a null function pointer) - // so the pc is 0x0 - // in the zeroth frame, we need to use the "unwind at first instruction" arch - // default UnwindPlan - // Also, if this Process can report on memory region attributes, any - // non-executable region means - // we jumped through a bad function pointer - handle the same way as 0x0. - // Note, if we have a symbol context & a symbol, we don't want to follow this - // code path. This is - // for jumping to memory regions without any information available. + // so the pc is 0x0 in the zeroth frame, we need to use the "unwind at first + // instruction" arch default UnwindPlan Also, if this Process can report on + // memory region attributes, any non-executable region means we jumped + // through a bad function pointer - handle the same way as 0x0. Note, if we + // have a symbol context & a symbol, we don't want to follow this code path. + // This is for jumping to memory regions without any information available. if ((!m_sym_ctx_valid || (m_sym_ctx.function == NULL && m_sym_ctx.symbol == NULL)) && @@ -780,12 +766,10 @@ UnwindPlanSP RegisterContextLLDB::GetFullUnwindPlanForFrame() { } // No FuncUnwinders available for this pc (stripped function symbols, lldb - // could not augment its - // function table with another source, like LC_FUNCTION_STARTS or eh_frame in - // ObjectFileMachO). - // See if eh_frame or the .ARM.exidx tables have unwind information for this - // address, else fall - // back to the architectural default unwind. + // could not augment its function table with another source, like + // LC_FUNCTION_STARTS or eh_frame in ObjectFileMachO). See if eh_frame or the + // .ARM.exidx tables have unwind information for this address, else fall back + // to the architectural default unwind. if (!func_unwinders_sp) { m_frame_type = eNormalFrame; @@ -793,7 +777,8 @@ UnwindPlanSP RegisterContextLLDB::GetFullUnwindPlanForFrame() { !m_current_pc.IsValid()) return arch_default_unwind_plan_sp; - // Even with -fomit-frame-pointer, we can try eh_frame to get back on track. + // Even with -fomit-frame-pointer, we can try eh_frame to get back on + // track. DWARFCallFrameInfo *eh_frame = pc_module_sp->GetObjectFile()->GetUnwindTable().GetEHFrameInfo(); if (eh_frame) { @@ -819,11 +804,10 @@ UnwindPlanSP RegisterContextLLDB::GetFullUnwindPlanForFrame() { } // If we're in _sigtramp(), unwinding past this frame requires special - // knowledge. On Mac OS X this knowledge - // is properly encoded in the eh_frame section, so prefer that if available. - // On other platforms we may need to provide a platform-specific UnwindPlan - // which encodes the details of - // how to unwind out of sigtramp. + // knowledge. On Mac OS X this knowledge is properly encoded in the eh_frame + // section, so prefer that if available. On other platforms we may need to + // provide a platform-specific UnwindPlan which encodes the details of how to + // unwind out of sigtramp. if (m_frame_type == eTrapHandlerFrame && process) { m_fast_unwind_plan_sp.reset(); unwind_plan_sp = func_unwinders_sp->GetEHFrameUnwindPlan( @@ -835,24 +819,19 @@ UnwindPlanSP RegisterContextLLDB::GetFullUnwindPlanForFrame() { } // Ask the DynamicLoader if the eh_frame CFI should be trusted in this frame - // even when it's frame zero - // This comes up if we have hand-written functions in a Module and - // hand-written eh_frame. The assembly - // instruction inspection may fail and the eh_frame CFI were probably written - // with some care to do the - // right thing. It'd be nice if there was a way to ask the eh_frame directly - // if it is asynchronous - // (can be trusted at every instruction point) or synchronous (the normal case - // - only at call sites). + // even when it's frame zero This comes up if we have hand-written functions + // in a Module and hand-written eh_frame. The assembly instruction + // inspection may fail and the eh_frame CFI were probably written with some + // care to do the right thing. It'd be nice if there was a way to ask the + // eh_frame directly if it is asynchronous (can be trusted at every + // instruction point) or synchronous (the normal case - only at call sites). // But there is not. if (process && process->GetDynamicLoader() && process->GetDynamicLoader()->AlwaysRelyOnEHUnwindInfo(m_sym_ctx)) { // We must specifically call the GetEHFrameUnwindPlan() method here -- - // normally we would - // call GetUnwindPlanAtCallSite() -- because CallSite may return an unwind - // plan sourced from - // either eh_frame (that's what we intend) or compact unwind (this won't - // work) + // normally we would call GetUnwindPlanAtCallSite() -- because CallSite may + // return an unwind plan sourced from either eh_frame (that's what we + // intend) or compact unwind (this won't work) unwind_plan_sp = func_unwinders_sp->GetEHFrameUnwindPlan( process->GetTarget(), m_current_offset_backed_up_one); if (unwind_plan_sp && unwind_plan_sp->PlanValidAtAddress(m_current_pc)) { @@ -871,22 +850,16 @@ UnwindPlanSP RegisterContextLLDB::GetFullUnwindPlanForFrame() { if (unwind_plan_sp && unwind_plan_sp->PlanValidAtAddress(m_current_pc)) { if (unwind_plan_sp->GetSourcedFromCompiler() == eLazyBoolNo) { // We probably have an UnwindPlan created by inspecting assembly - // instructions. The - // assembly profilers work really well with compiler-generated functions - // but hand- - // written assembly can be problematic. We set the eh_frame based unwind - // plan as our - // fallback unwind plan if instruction emulation doesn't work out even - // for non call - // sites if it is available and use the architecture default unwind plan - // if it is + // instructions. The assembly profilers work really well with compiler- + // generated functions but hand- written assembly can be problematic. + // We set the eh_frame based unwind plan as our fallback unwind plan if + // instruction emulation doesn't work out even for non call sites if it + // is available and use the architecture default unwind plan if it is // not available. The eh_frame unwind plan is more reliable even on non - // call sites - // then the architecture default plan and for hand written assembly code - // it is often - // written in a way that it valid at all location what helps in the most - // common - // cases when the instruction emulation fails. + // call sites then the architecture default plan and for hand written + // assembly code it is often written in a way that it valid at all + // location what helps in the most common cases when the instruction + // emulation fails. UnwindPlanSP call_site_unwind_plan = func_unwinders_sp->GetUnwindPlanAtCallSite( process->GetTarget(), m_current_offset_backed_up_one); @@ -919,9 +892,8 @@ UnwindPlanSP RegisterContextLLDB::GetFullUnwindPlanForFrame() { } // We'd prefer to use an UnwindPlan intended for call sites when we're at a - // call site but if we've - // struck out on that, fall back to using the non-call-site assembly - // inspection UnwindPlan if possible. + // call site but if we've struck out on that, fall back to using the non- + // call-site assembly inspection UnwindPlan if possible. if (process) { unwind_plan_sp = func_unwinders_sp->GetUnwindPlanAtNonCallSite( process->GetTarget(), m_thread, m_current_offset_backed_up_one); @@ -929,19 +901,14 @@ UnwindPlanSP RegisterContextLLDB::GetFullUnwindPlanForFrame() { if (unwind_plan_sp && unwind_plan_sp->GetSourcedFromCompiler() == eLazyBoolNo) { // We probably have an UnwindPlan created by inspecting assembly - // instructions. The assembly - // profilers work really well with compiler-generated functions but hand- - // written assembly - // can be problematic. We set the eh_frame based unwind plan as our fallback - // unwind plan if + // instructions. The assembly profilers work really well with compiler- + // generated functions but hand- written assembly can be problematic. We + // set the eh_frame based unwind plan as our fallback unwind plan if // instruction emulation doesn't work out even for non call sites if it is - // available and use - // the architecture default unwind plan if it is not available. The eh_frame - // unwind plan is - // more reliable even on non call sites then the architecture default plan - // and for hand - // written assembly code it is often written in a way that it valid at all - // location what + // available and use the architecture default unwind plan if it is not + // available. The eh_frame unwind plan is more reliable even on non call + // sites then the architecture default plan and for hand written assembly + // code it is often written in a way that it valid at all location what // helps in the most common cases when the instruction emulation fails. UnwindPlanSP call_site_unwind_plan = func_unwinders_sp->GetUnwindPlanAtCallSite( @@ -963,8 +930,8 @@ UnwindPlanSP RegisterContextLLDB::GetFullUnwindPlanForFrame() { } // If we're on the first instruction of a function, and we have an - // architectural default UnwindPlan - // for the initial instruction of a function, use that. + // architectural default UnwindPlan for the initial instruction of a + // function, use that. if (m_current_offset_backed_up_one == 0) { unwind_plan_sp = func_unwinders_sp->GetUnwindPlanArchitectureDefaultAtFunctionEntry( @@ -1115,12 +1082,10 @@ bool RegisterContextLLDB::IsValid() const { } // After the final stack frame in a stack walk we'll get one invalid -// (eNotAValidFrame) stack frame -- -// one past the end of the stack walk. But higher-level code will need to tell -// the differnece between -// "the unwind plan below this frame failed" versus "we successfully completed -// the stack walk" so -// this method helps to disambiguate that. +// (eNotAValidFrame) stack frame -- one past the end of the stack walk. But +// higher-level code will need to tell the differnece between "the unwind plan +// below this frame failed" versus "we successfully completed the stack walk" +// so this method helps to disambiguate that. bool RegisterContextLLDB::IsTrapHandlerFrame() const { return m_frame_type == eTrapHandlerFrame; @@ -1129,12 +1094,10 @@ bool RegisterContextLLDB::IsTrapHandlerFrame() const { // A skip frame is a bogus frame on the stack -- but one where we're likely to // find a real frame farther // up the stack if we keep looking. It's always the second frame in an unwind -// (i.e. the first frame after -// frame zero) where unwinding can be the trickiest. Ideally we'll mark up this -// frame in some way so the -// user knows we're displaying bad data and we may have skipped one frame of -// their real program in the -// process of getting back on track. +// (i.e. the first frame after frame zero) where unwinding can be the +// trickiest. Ideally we'll mark up this frame in some way so the user knows +// we're displaying bad data and we may have skipped one frame of their real +// program in the process of getting back on track. bool RegisterContextLLDB::IsSkipFrame() const { return m_frame_type == eSkipFrame; @@ -1231,8 +1194,8 @@ RegisterContextLLDB::SavedLocationForRegister( RegisterNumber return_address_reg; // If we're fetching the saved pc and this UnwindPlan defines a - // ReturnAddress register (e.g. lr on arm), - // look for the return address register number in the UnwindPlan's row. + // ReturnAddress register (e.g. lr on arm), look for the return address + // register number in the UnwindPlan's row. if (pc_regnum.IsValid() && pc_regnum == regnum && m_full_unwind_plan_sp->GetReturnAddressRegister() != LLDB_INVALID_REGNUM) { @@ -1272,10 +1235,8 @@ RegisterContextLLDB::SavedLocationForRegister( } // This is frame 0 and we're retrieving the PC and it's saved in a Return - // Address register and - // it hasn't been saved anywhere yet -- that is, it's still live in the - // actual register. - // Handle this specially. + // Address register and it hasn't been saved anywhere yet -- that is, + // it's still live in the actual register. Handle this specially. if (have_unwindplan_regloc == false && return_address_reg.IsValid() && IsFrameZero()) { @@ -1298,22 +1259,18 @@ RegisterContextLLDB::SavedLocationForRegister( } // If this architecture stores the return address in a register (it - // defines a Return Address register) - // and we're on a non-zero stack frame and the Full UnwindPlan says that - // the pc is stored in the + // defines a Return Address register) and we're on a non-zero stack frame + // and the Full UnwindPlan says that the pc is stored in the // RA registers (e.g. lr on arm), then we know that the full unwindplan is // not trustworthy -- this // is an impossible situation and the instruction emulation code has - // likely been misled. - // If this stack frame meets those criteria, we need to throw away the - // Full UnwindPlan that the - // instruction emulation came up with and fall back to the architecture's - // Default UnwindPlan so - // the stack walk can get past this point. + // likely been misled. If this stack frame meets those criteria, we need + // to throw away the Full UnwindPlan that the instruction emulation came + // up with and fall back to the architecture's Default UnwindPlan so the + // stack walk can get past this point. // Special note: If the Full UnwindPlan was generated from the compiler, - // don't second-guess it - // when we're at a call site location. + // don't second-guess it when we're at a call site location. // arch_default_ra_regnum is the return address register # in the Full // UnwindPlan register numbering @@ -1376,11 +1333,10 @@ RegisterContextLLDB::SavedLocationForRegister( ExecutionContext exe_ctx(m_thread.shared_from_this()); Process *process = exe_ctx.GetProcessPtr(); if (have_unwindplan_regloc == false) { - // If the UnwindPlan failed to give us an unwind location for this register, - // we may be able to fall back - // to some ABI-defined default. For example, some ABIs allow to determine - // the caller's SP via the CFA. - // Also, the ABI may set volatile registers to the undefined state. + // If the UnwindPlan failed to give us an unwind location for this + // register, we may be able to fall back to some ABI-defined default. For + // example, some ABIs allow to determine the caller's SP via the CFA. Also, + // the ABI may set volatile registers to the undefined state. ABI *abi = process ? process->GetABI().get() : NULL; if (abi) { const RegisterInfo *reg_info = @@ -1558,24 +1514,19 @@ RegisterContextLLDB::SavedLocationForRegister( // TryFallbackUnwindPlan() -- this method is a little tricky. // // When this is called, the frame above -- the caller frame, the "previous" -// frame -- -// is invalid or bad. +// frame -- is invalid or bad. // -// Instead of stopping the stack walk here, we'll try a different UnwindPlan and -// see -// if we can get a valid frame above us. +// Instead of stopping the stack walk here, we'll try a different UnwindPlan +// and see if we can get a valid frame above us. // // This most often happens when an unwind plan based on assembly instruction -// inspection -// is not correct -- mostly with hand-written assembly functions or functions -// where the -// stack frame is set up "out of band", e.g. the kernel saved the register -// context and -// then called an asynchronous trap handler like _sigtramp. +// inspection is not correct -- mostly with hand-written assembly functions or +// functions where the stack frame is set up "out of band", e.g. the kernel +// saved the register context and then called an asynchronous trap handler like +// _sigtramp. // // Often in these cases, if we just do a dumb stack walk we'll get past this -// tricky -// frame and our usual techniques can continue to be used. +// tricky frame and our usual techniques can continue to be used. bool RegisterContextLLDB::TryFallbackUnwindPlan() { if (m_fallback_unwind_plan_sp.get() == nullptr) @@ -1591,15 +1542,13 @@ bool RegisterContextLLDB::TryFallbackUnwindPlan() { } // If a compiler generated unwind plan failed, trying the arch default - // unwindplan - // isn't going to do any better. + // unwindplan isn't going to do any better. if (m_full_unwind_plan_sp->GetSourcedFromCompiler() == eLazyBoolYes) return false; - // Get the caller's pc value and our own CFA value. - // Swap in the fallback unwind plan, re-fetch the caller's pc value and CFA - // value. - // If they're the same, then the fallback unwind plan provides no benefit. + // Get the caller's pc value and our own CFA value. Swap in the fallback + // unwind plan, re-fetch the caller's pc value and CFA value. If they're the + // same, then the fallback unwind plan provides no benefit. RegisterNumber pc_regnum(m_thread, eRegisterKindGeneric, LLDB_REGNUM_GENERIC_PC); @@ -1622,23 +1571,18 @@ bool RegisterContextLLDB::TryFallbackUnwindPlan() { } // This is a tricky wrinkle! If SavedLocationForRegister() detects a really - // impossible - // register location for the full unwind plan, it may call - // ForceSwitchToFallbackUnwindPlan() - // which in turn replaces the full unwindplan with the fallback... in short, - // we're done, - // we're using the fallback UnwindPlan. - // We checked if m_fallback_unwind_plan_sp was nullptr at the top -- the only - // way it - // became nullptr since then is via SavedLocationForRegister(). + // impossible register location for the full unwind plan, it may call + // ForceSwitchToFallbackUnwindPlan() which in turn replaces the full + // unwindplan with the fallback... in short, we're done, we're using the + // fallback UnwindPlan. We checked if m_fallback_unwind_plan_sp was nullptr + // at the top -- the only way it became nullptr since then is via + // SavedLocationForRegister(). if (m_fallback_unwind_plan_sp.get() == nullptr) return true; // Switch the full UnwindPlan to be the fallback UnwindPlan. If we decide - // this isn't - // working, we need to restore. - // We'll also need to save & restore the value of the m_cfa ivar. Save is - // down below a bit in 'old_cfa'. + // this isn't working, we need to restore. We'll also need to save & restore + // the value of the m_cfa ivar. Save is down below a bit in 'old_cfa'. UnwindPlanSP original_full_unwind_plan_sp = m_full_unwind_plan_sp; addr_t old_cfa = m_cfa; @@ -2049,10 +1993,9 @@ bool RegisterContextLLDB::ReadPC(addr_t &pc) { // A pc value of 0 or 1 is impossible in the middle of the stack -- it // indicates the end of a stack walk. // On the currently executing frame (or such a frame interrupted - // asynchronously by sigtramp et al) this may - // occur if code has jumped through a NULL pointer -- we want to be able to - // unwind past that frame to help - // find the bug. + // asynchronously by sigtramp et al) this may occur if code has jumped + // through a NULL pointer -- we want to be able to unwind past that frame + // to help find the bug. ProcessSP process_sp (m_thread.GetProcess()); if (process_sp) diff --git a/lldb/source/Plugins/Process/Utility/RegisterContextMacOSXFrameBackchain.cpp b/lldb/source/Plugins/Process/Utility/RegisterContextMacOSXFrameBackchain.cpp index bc84b4af364..77c1bea3485 100644 --- a/lldb/source/Plugins/Process/Utility/RegisterContextMacOSXFrameBackchain.cpp +++ b/lldb/source/Plugins/Process/Utility/RegisterContextMacOSXFrameBackchain.cpp @@ -139,8 +139,8 @@ bool RegisterContextMacOSXFrameBackchain::ReadRegister( bool RegisterContextMacOSXFrameBackchain::WriteRegister( const RegisterInfo *reg_info, const RegisterValue &value) { - // Not supported yet. We could easily add support for this by remembering - // the address of each entry (it would need to be part of the cursor) + // Not supported yet. We could easily add support for this by remembering the + // address of each entry (it would need to be part of the cursor) return false; } @@ -154,10 +154,10 @@ bool RegisterContextMacOSXFrameBackchain::ReadAllRegisterValues( bool RegisterContextMacOSXFrameBackchain::WriteAllRegisterValues( const lldb::DataBufferSP &data_sp) { - // Since this class doesn't respond to "ReadAllRegisterValues()", it must - // not have been the one that saved all the register values. So we just let - // the thread's register context (the register context for frame zero) do - // the writing. + // Since this class doesn't respond to "ReadAllRegisterValues()", it must not + // have been the one that saved all the register values. So we just let the + // thread's register context (the register context for frame zero) do the + // writing. return m_thread.GetRegisterContext()->WriteAllRegisterValues(data_sp); } diff --git a/lldb/source/Plugins/Process/Utility/RegisterContextMemory.cpp b/lldb/source/Plugins/Process/Utility/RegisterContextMemory.cpp index 8f0dfd2a5b5..76189ea781d 100644 --- a/lldb/source/Plugins/Process/Utility/RegisterContextMemory.cpp +++ b/lldb/source/Plugins/Process/Utility/RegisterContextMemory.cpp @@ -32,9 +32,9 @@ RegisterContextMemory::RegisterContextMemory(Thread &thread, addr_t reg_data_addr) : RegisterContext(thread, concrete_frame_idx), m_reg_infos(reg_infos), m_reg_valid(), m_reg_data(), m_reg_data_addr(reg_data_addr) { - // Resize our vector of bools to contain one bool for every register. - // We will use these boolean values to know when a register value - // is valid in m_reg_data. + // Resize our vector of bools to contain one bool for every register. We will + // use these boolean values to know when a register value is valid in + // m_reg_data. const size_t num_regs = reg_infos.GetNumRegisters(); assert(num_regs > 0); m_reg_valid.resize(num_regs); diff --git a/lldb/source/Plugins/Process/Utility/RegisterContextPOSIX_arm.cpp b/lldb/source/Plugins/Process/Utility/RegisterContextPOSIX_arm.cpp index bb3509330ee..c3fa8316895 100644 --- a/lldb/source/Plugins/Process/Utility/RegisterContextPOSIX_arm.cpp +++ b/lldb/source/Plugins/Process/Utility/RegisterContextPOSIX_arm.cpp @@ -142,8 +142,8 @@ size_t RegisterContextPOSIX_arm::GetGPRSize() { const lldb_private::RegisterInfo *RegisterContextPOSIX_arm::GetRegisterInfo() { // Commonly, this method is overridden and g_register_infos is copied and - // specialized. - // So, use GetRegisterInfo() rather than g_register_infos in this scope. + // specialized. So, use GetRegisterInfo() rather than g_register_infos in + // this scope. return m_register_info_ap->GetRegisterInfo(); } @@ -199,8 +199,8 @@ bool RegisterContextPOSIX_arm::IsRegisterSetAvailable(size_t set_index) { return set_index < k_num_register_sets; } -// Used when parsing DWARF and EH frame information and any other -// object file sections that contain register numbers in them. +// Used when parsing DWARF and EH frame information and any other object file +// sections that contain register numbers in them. uint32_t RegisterContextPOSIX_arm::ConvertRegisterKindToRegisterNumber( lldb::RegisterKind kind, uint32_t num) { const uint32_t num_regs = GetRegisterCount(); diff --git a/lldb/source/Plugins/Process/Utility/RegisterContextPOSIX_arm64.cpp b/lldb/source/Plugins/Process/Utility/RegisterContextPOSIX_arm64.cpp index 89384c8f519..192f06c3aa0 100644 --- a/lldb/source/Plugins/Process/Utility/RegisterContextPOSIX_arm64.cpp +++ b/lldb/source/Plugins/Process/Utility/RegisterContextPOSIX_arm64.cpp @@ -162,8 +162,8 @@ size_t RegisterContextPOSIX_arm64::GetGPRSize() { const lldb_private::RegisterInfo * RegisterContextPOSIX_arm64::GetRegisterInfo() { // Commonly, this method is overridden and g_register_infos is copied and - // specialized. - // So, use GetRegisterInfo() rather than g_register_infos in this scope. + // specialized. So, use GetRegisterInfo() rather than g_register_infos in + // this scope. return m_register_info_ap->GetRegisterInfo(); } @@ -219,8 +219,8 @@ bool RegisterContextPOSIX_arm64::IsRegisterSetAvailable(size_t set_index) { return set_index < k_num_register_sets; } -// Used when parsing DWARF and EH frame information and any other -// object file sections that contain register numbers in them. +// Used when parsing DWARF and EH frame information and any other object file +// sections that contain register numbers in them. uint32_t RegisterContextPOSIX_arm64::ConvertRegisterKindToRegisterNumber( lldb::RegisterKind kind, uint32_t num) { const uint32_t num_regs = GetRegisterCount(); diff --git a/lldb/source/Plugins/Process/Utility/RegisterContextPOSIX_mips64.cpp b/lldb/source/Plugins/Process/Utility/RegisterContextPOSIX_mips64.cpp index 6a55947ba5c..039ca028123 100644 --- a/lldb/source/Plugins/Process/Utility/RegisterContextPOSIX_mips64.cpp +++ b/lldb/source/Plugins/Process/Utility/RegisterContextPOSIX_mips64.cpp @@ -92,8 +92,8 @@ size_t RegisterContextPOSIX_mips64::GetGPRSize() { const RegisterInfo *RegisterContextPOSIX_mips64::GetRegisterInfo() { // Commonly, this method is overridden and g_register_infos is copied and - // specialized. - // So, use GetRegisterInfo() rather than g_register_infos in this scope. + // specialized. So, use GetRegisterInfo() rather than g_register_infos in + // this scope. return m_register_info_ap->GetRegisterInfo(); } @@ -172,8 +172,8 @@ bool RegisterContextPOSIX_mips64::IsRegisterSetAvailable(size_t set_index) { return (set_index < num_sets); } -// Used when parsing DWARF and EH frame information and any other -// object file sections that contain register numbers in them. +// Used when parsing DWARF and EH frame information and any other object file +// sections that contain register numbers in them. uint32_t RegisterContextPOSIX_mips64::ConvertRegisterKindToRegisterNumber( lldb::RegisterKind kind, uint32_t num) { const uint32_t num_regs = m_num_registers; diff --git a/lldb/source/Plugins/Process/Utility/RegisterContextPOSIX_powerpc.cpp b/lldb/source/Plugins/Process/Utility/RegisterContextPOSIX_powerpc.cpp index c2b73e22616..ad52a4d309f 100644 --- a/lldb/source/Plugins/Process/Utility/RegisterContextPOSIX_powerpc.cpp +++ b/lldb/source/Plugins/Process/Utility/RegisterContextPOSIX_powerpc.cpp @@ -129,8 +129,8 @@ size_t RegisterContextPOSIX_powerpc::GetGPRSize() { const RegisterInfo *RegisterContextPOSIX_powerpc::GetRegisterInfo() { // Commonly, this method is overridden and g_register_infos is copied and - // specialized. - // So, use GetRegisterInfo() rather than g_register_infos in this scope. + // specialized. So, use GetRegisterInfo() rather than g_register_infos in + // this scope. return m_register_info_ap->GetRegisterInfo(); } @@ -181,8 +181,8 @@ bool RegisterContextPOSIX_powerpc::IsRegisterSetAvailable(size_t set_index) { return (set_index < num_sets); } -// Used when parsing DWARF and EH frame information and any other -// object file sections that contain register numbers in them. +// Used when parsing DWARF and EH frame information and any other object file +// sections that contain register numbers in them. uint32_t RegisterContextPOSIX_powerpc::ConvertRegisterKindToRegisterNumber( lldb::RegisterKind kind, uint32_t num) { const uint32_t num_regs = GetRegisterCount(); diff --git a/lldb/source/Plugins/Process/Utility/RegisterContextPOSIX_ppc64le.cpp b/lldb/source/Plugins/Process/Utility/RegisterContextPOSIX_ppc64le.cpp index de410f063b5..44578d7c584 100644 --- a/lldb/source/Plugins/Process/Utility/RegisterContextPOSIX_ppc64le.cpp +++ b/lldb/source/Plugins/Process/Utility/RegisterContextPOSIX_ppc64le.cpp @@ -146,8 +146,8 @@ size_t RegisterContextPOSIX_ppc64le::GetGPRSize() { const RegisterInfo *RegisterContextPOSIX_ppc64le::GetRegisterInfo() { // Commonly, this method is overridden and g_register_infos is copied and - // specialized. - // So, use GetRegisterInfo() rather than g_register_infos in this scope. + // specialized. So, use GetRegisterInfo() rather than g_register_infos in + // this scope. return m_register_info_ap->GetRegisterInfo(); } @@ -198,8 +198,8 @@ bool RegisterContextPOSIX_ppc64le::IsRegisterSetAvailable(size_t set_index) { return (set_index < num_sets); } -// Used when parsing DWARF and EH frame information and any other -// object file sections that contain register numbers in them. +// Used when parsing DWARF and EH frame information and any other object file +// sections that contain register numbers in them. uint32_t RegisterContextPOSIX_ppc64le::ConvertRegisterKindToRegisterNumber( lldb::RegisterKind kind, uint32_t num) { const uint32_t num_regs = GetRegisterCount(); diff --git a/lldb/source/Plugins/Process/Utility/RegisterContextPOSIX_s390x.cpp b/lldb/source/Plugins/Process/Utility/RegisterContextPOSIX_s390x.cpp index b3365ee2f09..662ac38405e 100644 --- a/lldb/source/Plugins/Process/Utility/RegisterContextPOSIX_s390x.cpp +++ b/lldb/source/Plugins/Process/Utility/RegisterContextPOSIX_s390x.cpp @@ -174,8 +174,8 @@ lldb::ByteOrder RegisterContextPOSIX_s390x::GetByteOrder() { return byte_order; } -// Used when parsing DWARF and EH frame information and any other -// object file sections that contain register numbers in them. +// Used when parsing DWARF and EH frame information and any other object file +// sections that contain register numbers in them. uint32_t RegisterContextPOSIX_s390x::ConvertRegisterKindToRegisterNumber( lldb::RegisterKind kind, uint32_t num) { const uint32_t num_regs = GetRegisterCount(); diff --git a/lldb/source/Plugins/Process/Utility/RegisterContextPOSIX_x86.cpp b/lldb/source/Plugins/Process/Utility/RegisterContextPOSIX_x86.cpp index 41cec8add98..d2a06e1b789 100644 --- a/lldb/source/Plugins/Process/Utility/RegisterContextPOSIX_x86.cpp +++ b/lldb/source/Plugins/Process/Utility/RegisterContextPOSIX_x86.cpp @@ -414,8 +414,8 @@ size_t RegisterContextPOSIX_x86::GetFXSAVEOffset() { const RegisterInfo *RegisterContextPOSIX_x86::GetRegisterInfo() { // Commonly, this method is overridden and g_register_infos is copied and - // specialized. - // So, use GetRegisterInfo() rather than g_register_infos in this scope. + // specialized. So, use GetRegisterInfo() rather than g_register_infos in + // this scope. return m_register_info_ap->GetRegisterInfo(); } @@ -531,8 +531,8 @@ bool RegisterContextPOSIX_x86::IsRegisterSetAvailable(size_t set_index) { return (set_index < num_sets); } -// Used when parsing DWARF and EH frame information and any other -// object file sections that contain register numbers in them. +// Used when parsing DWARF and EH frame information and any other object file +// sections that contain register numbers in them. uint32_t RegisterContextPOSIX_x86::ConvertRegisterKindToRegisterNumber( lldb::RegisterKind kind, uint32_t num) { const uint32_t num_regs = GetRegisterCount(); diff --git a/lldb/source/Plugins/Process/Utility/StopInfoMachException.cpp b/lldb/source/Plugins/Process/Utility/StopInfoMachException.cpp index 3e860874183..3dbfe611e71 100644 --- a/lldb/source/Plugins/Process/Utility/StopInfoMachException.cpp +++ b/lldb/source/Plugins/Process/Utility/StopInfoMachException.cpp @@ -356,8 +356,8 @@ StopInfoSP StopInfoMachException::CreateStopReasonWithMachException( if (exc_code == 0x10003) // EXC_SOFT_SIGNAL { if (exc_sub_code == 5) { - // On MacOSX, a SIGTRAP can signify that a process has called - // exec, so we should check with our dynamic loader to verify. + // On MacOSX, a SIGTRAP can signify that a process has called exec, + // so we should check with our dynamic loader to verify. ProcessSP process_sp(thread.GetProcess()); if (process_sp) { DynamicLoader *dynamic_loader = process_sp->GetDynamicLoader(); @@ -403,10 +403,8 @@ StopInfoSP StopInfoMachException::CreateStopReasonWithMachException( if (!exc_sub_code) { // This looks like a plain trap. // Have to check if there is a breakpoint here as well. When you - // single-step onto a trap, - // the single step stops you not to trap. Since we also do that - // check below, let's just use - // that logic. + // single-step onto a trap, the single step stops you not to trap. + // Since we also do that check below, let's just use that logic. is_actual_breakpoint = true; is_trace_if_actual_breakpoint_missing = true; } else { @@ -419,8 +417,8 @@ StopInfoSP StopInfoMachException::CreateStopReasonWithMachException( (lldb::addr_t)exc_sub_code); if (wp_sp && wp_sp->IsEnabled()) { // Debugserver may piggyback the hardware index of the fired - // watchpoint in the exception data. - // Set the hardware index if that's the case. + // watchpoint in the exception data. Set the hardware index if + // that's the case. if (exc_data_count >= 3) wp_sp->SetHardwareIndex((uint32_t)exc_sub_sub_code); return StopInfo::CreateStopReasonWithWatchpointID(thread, @@ -450,16 +448,15 @@ StopInfoSP StopInfoMachException::CreateStopReasonWithMachException( if (exc_code == 0x102) // EXC_ARM_DA_DEBUG { // It's a watchpoint, then, if the exc_sub_code indicates a - // known/enabled - // data break address from our watchpoint list. + // known/enabled data break address from our watchpoint list. lldb::WatchpointSP wp_sp; if (target) wp_sp = target->GetWatchpointList().FindByAddress( (lldb::addr_t)exc_sub_code); if (wp_sp && wp_sp->IsEnabled()) { // Debugserver may piggyback the hardware index of the fired - // watchpoint in the exception data. - // Set the hardware index if that's the case. + // watchpoint in the exception data. Set the hardware index if + // that's the case. if (exc_data_count >= 3) wp_sp->SetHardwareIndex((uint32_t)exc_sub_sub_code); return StopInfo::CreateStopReasonWithWatchpointID(thread, @@ -473,9 +470,9 @@ StopInfoSP StopInfoMachException::CreateStopReasonWithMachException( is_actual_breakpoint = true; is_trace_if_actual_breakpoint_missing = true; } else if (exc_code == 0) // FIXME not EXC_ARM_BREAKPOINT but a kernel - // is currently returning this so accept it as - // indicating a breakpoint until the kernel is - // fixed + // is currently returning this so accept it + // as indicating a breakpoint until the + // kernel is fixed { is_actual_breakpoint = true; is_trace_if_actual_breakpoint_missing = true; @@ -493,16 +490,15 @@ StopInfoSP StopInfoMachException::CreateStopReasonWithMachException( if (exc_code == 0x102) // EXC_ARM_DA_DEBUG { // It's a watchpoint, then, if the exc_sub_code indicates a - // known/enabled - // data break address from our watchpoint list. + // known/enabled data break address from our watchpoint list. lldb::WatchpointSP wp_sp; if (target) wp_sp = target->GetWatchpointList().FindByAddress( (lldb::addr_t)exc_sub_code); if (wp_sp && wp_sp->IsEnabled()) { // Debugserver may piggyback the hardware index of the fired - // watchpoint in the exception data. - // Set the hardware index if that's the case. + // watchpoint in the exception data. Set the hardware index if + // that's the case. if (exc_data_count >= 3) wp_sp->SetHardwareIndex((uint32_t)exc_sub_sub_code); return StopInfo::CreateStopReasonWithWatchpointID(thread, @@ -514,8 +510,7 @@ StopInfoSP StopInfoMachException::CreateStopReasonWithMachException( return StopInfo::CreateStopReasonToTrace(thread); } // It looks like exc_sub_code has the 4 bytes of the instruction that - // triggered the - // exception, i.e. our breakpoint opcode + // triggered the exception, i.e. our breakpoint opcode is_actual_breakpoint = exc_code == 1; break; } @@ -534,23 +529,21 @@ StopInfoSP StopInfoMachException::CreateStopReasonWithMachException( if (process_sp) bp_site_sp = process_sp->GetBreakpointSiteList().FindByAddress(pc); if (bp_site_sp && bp_site_sp->IsEnabled()) { - // Update the PC if we were asked to do so, but only do - // so if we find a breakpoint that we know about cause - // this could be a trap instruction in the code + // Update the PC if we were asked to do so, but only do so if we find + // a breakpoint that we know about cause this could be a trap + // instruction in the code if (pc_decrement > 0 && adjust_pc_if_needed) reg_ctx_sp->SetPC(pc); // If the breakpoint is for this thread, then we'll report the hit, - // but if it is for another thread, - // we can just report no reason. We don't need to worry about - // stepping over the breakpoint here, that + // but if it is for another thread, we can just report no reason. We + // don't need to worry about stepping over the breakpoint here, that // will be taken care of when the thread resumes and notices that - // there's a breakpoint under the pc. - // If we have an operating system plug-in, we might have set a thread - // specific breakpoint using the + // there's a breakpoint under the pc. If we have an operating system + // plug-in, we might have set a thread specific breakpoint using the // operating system thread ID, so we can't make any assumptions about - // the thread ID so we must always - // report the breakpoint regardless of the thread. + // the thread ID so we must always report the breakpoint regardless + // of the thread. if (bp_site_sp->ValidForThisThread(&thread) || thread.GetProcess()->GetOperatingSystem() != NULL) return StopInfo::CreateStopReasonWithBreakpointSiteID( diff --git a/lldb/source/Plugins/Process/Utility/UnwindLLDB.cpp b/lldb/source/Plugins/Process/Utility/UnwindLLDB.cpp index 2b34bddd90b..55559f07f1e 100644 --- a/lldb/source/Plugins/Process/Utility/UnwindLLDB.cpp +++ b/lldb/source/Plugins/Process/Utility/UnwindLLDB.cpp @@ -132,16 +132,12 @@ UnwindLLDB::CursorSP UnwindLLDB::GetOneMoreFrame(ABI *abi) { // We want to detect an unwind that cycles erroneously and stop backtracing. // Don't want this maximum unwind limit to be too low -- if you have a - // backtrace - // with an "infinitely recursing" bug, it will crash when the stack blows out - // and the first 35,000 frames are uninteresting - it's the top most 5 frames - // that - // you actually care about. So you can't just cap the unwind at 10,000 or - // something. - // Realistically anything over around 200,000 is going to blow out the stack - // space. - // If we're still unwinding at that point, we're probably never going to - // finish. + // backtrace with an "infinitely recursing" bug, it will crash when the stack + // blows out and the first 35,000 frames are uninteresting - it's the top + // most 5 frames that you actually care about. So you can't just cap the + // unwind at 10,000 or something. Realistically anything over around 200,000 + // is going to blow out the stack space. If we're still unwinding at that + // point, we're probably never going to finish. if (cur_idx > 300000) { if (log) log->Printf("%*sFrame %d unwound too many frames, assuming unwind has " @@ -152,13 +148,12 @@ UnwindLLDB::CursorSP UnwindLLDB::GetOneMoreFrame(ABI *abi) { if (reg_ctx_sp.get() == NULL) { // If the RegisterContextLLDB has a fallback UnwindPlan, it will switch to - // that and return - // true. Subsequent calls to TryFallbackUnwindPlan() will return false. + // that and return true. Subsequent calls to TryFallbackUnwindPlan() will + // return false. if (prev_frame->reg_ctx_lldb_sp->TryFallbackUnwindPlan()) { // TryFallbackUnwindPlan for prev_frame succeeded and updated - // reg_ctx_lldb_sp field of - // prev_frame. However, cfa field of prev_frame still needs to be updated. - // Hence updating it. + // reg_ctx_lldb_sp field of prev_frame. However, cfa field of prev_frame + // still needs to be updated. Hence updating it. if (!(prev_frame->reg_ctx_lldb_sp->GetCFA(prev_frame->cfa))) return nullptr; @@ -172,15 +167,13 @@ UnwindLLDB::CursorSP UnwindLLDB::GetOneMoreFrame(ABI *abi) { } if (!reg_ctx_sp->IsValid()) { - // We failed to get a valid RegisterContext. - // See if the regctx below this on the stack has a fallback unwind plan it - // can use. - // Subsequent calls to TryFallbackUnwindPlan() will return false. + // We failed to get a valid RegisterContext. See if the regctx below this + // on the stack has a fallback unwind plan it can use. Subsequent calls to + // TryFallbackUnwindPlan() will return false. if (prev_frame->reg_ctx_lldb_sp->TryFallbackUnwindPlan()) { // TryFallbackUnwindPlan for prev_frame succeeded and updated - // reg_ctx_lldb_sp field of - // prev_frame. However, cfa field of prev_frame still needs to be updated. - // Hence updating it. + // reg_ctx_lldb_sp field of prev_frame. However, cfa field of prev_frame + // still needs to be updated. Hence updating it. if (!(prev_frame->reg_ctx_lldb_sp->GetCFA(prev_frame->cfa))) return nullptr; @@ -195,13 +188,12 @@ UnwindLLDB::CursorSP UnwindLLDB::GetOneMoreFrame(ABI *abi) { } if (!reg_ctx_sp->GetCFA(cursor_sp->cfa)) { // If the RegisterContextLLDB has a fallback UnwindPlan, it will switch to - // that and return - // true. Subsequent calls to TryFallbackUnwindPlan() will return false. + // that and return true. Subsequent calls to TryFallbackUnwindPlan() will + // return false. if (prev_frame->reg_ctx_lldb_sp->TryFallbackUnwindPlan()) { // TryFallbackUnwindPlan for prev_frame succeeded and updated - // reg_ctx_lldb_sp field of - // prev_frame. However, cfa field of prev_frame still needs to be updated. - // Hence updating it. + // reg_ctx_lldb_sp field of prev_frame. However, cfa field of prev_frame + // still needs to be updated. Hence updating it. if (!(prev_frame->reg_ctx_lldb_sp->GetCFA(prev_frame->cfa))) return nullptr; @@ -216,27 +208,21 @@ UnwindLLDB::CursorSP UnwindLLDB::GetOneMoreFrame(ABI *abi) { } if (abi && !abi->CallFrameAddressIsValid(cursor_sp->cfa)) { // On Mac OS X, the _sigtramp asynchronous signal trampoline frame may not - // have - // its (constructed) CFA aligned correctly -- don't do the abi alignment - // check for - // these. + // have its (constructed) CFA aligned correctly -- don't do the abi + // alignment check for these. if (reg_ctx_sp->IsTrapHandlerFrame() == false) { // See if we can find a fallback unwind plan for THIS frame. It may be // that the UnwindPlan we're using for THIS frame was bad and gave us a - // bad CFA. - // If that's not it, then see if we can change the UnwindPlan for the - // frame - // below us ("NEXT") -- see if using that other UnwindPlan gets us a - // better - // unwind state. + // bad CFA. If that's not it, then see if we can change the UnwindPlan + // for the frame below us ("NEXT") -- see if using that other UnwindPlan + // gets us a better unwind state. if (reg_ctx_sp->TryFallbackUnwindPlan() == false || reg_ctx_sp->GetCFA(cursor_sp->cfa) == false || abi->CallFrameAddressIsValid(cursor_sp->cfa) == false) { if (prev_frame->reg_ctx_lldb_sp->TryFallbackUnwindPlan()) { // TryFallbackUnwindPlan for prev_frame succeeded and updated - // reg_ctx_lldb_sp field of - // prev_frame. However, cfa field of prev_frame still needs to be - // updated. Hence updating it. + // reg_ctx_lldb_sp field of prev_frame. However, cfa field of + // prev_frame still needs to be updated. Hence updating it. if (!(prev_frame->reg_ctx_lldb_sp->GetCFA(prev_frame->cfa))) return nullptr; @@ -259,13 +245,12 @@ UnwindLLDB::CursorSP UnwindLLDB::GetOneMoreFrame(ABI *abi) { } if (!reg_ctx_sp->ReadPC(cursor_sp->start_pc)) { // If the RegisterContextLLDB has a fallback UnwindPlan, it will switch to - // that and return - // true. Subsequent calls to TryFallbackUnwindPlan() will return false. + // that and return true. Subsequent calls to TryFallbackUnwindPlan() will + // return false. if (prev_frame->reg_ctx_lldb_sp->TryFallbackUnwindPlan()) { // TryFallbackUnwindPlan for prev_frame succeeded and updated - // reg_ctx_lldb_sp field of - // prev_frame. However, cfa field of prev_frame still needs to be updated. - // Hence updating it. + // reg_ctx_lldb_sp field of prev_frame. However, cfa field of prev_frame + // still needs to be updated. Hence updating it. if (!(prev_frame->reg_ctx_lldb_sp->GetCFA(prev_frame->cfa))) return nullptr; @@ -280,13 +265,12 @@ UnwindLLDB::CursorSP UnwindLLDB::GetOneMoreFrame(ABI *abi) { } if (abi && !abi->CodeAddressIsValid(cursor_sp->start_pc)) { // If the RegisterContextLLDB has a fallback UnwindPlan, it will switch to - // that and return - // true. Subsequent calls to TryFallbackUnwindPlan() will return false. + // that and return true. Subsequent calls to TryFallbackUnwindPlan() will + // return false. if (prev_frame->reg_ctx_lldb_sp->TryFallbackUnwindPlan()) { // TryFallbackUnwindPlan for prev_frame succeeded and updated - // reg_ctx_lldb_sp field of - // prev_frame. However, cfa field of prev_frame still needs to be updated. - // Hence updating it. + // reg_ctx_lldb_sp field of prev_frame. However, cfa field of prev_frame + // still needs to be updated. Hence updating it. if (!(prev_frame->reg_ctx_lldb_sp->GetCFA(prev_frame->cfa))) return nullptr; @@ -320,13 +304,12 @@ void UnwindLLDB::UpdateUnwindPlanForFirstFrameIfInvalid(ABI *abi) { CursorSP old_m_candidate_frame = m_candidate_frame; // Try to unwind 2 more frames using the Unwinder. It uses Full UnwindPlan - // and if Full UnwindPlan fails, then uses FallBack UnwindPlan. Also - // update the cfa of Frame 0 (if required). + // and if Full UnwindPlan fails, then uses FallBack UnwindPlan. Also update + // the cfa of Frame 0 (if required). AddOneMoreFrame(abi); - // Remove all the frames added by above function as the purpose of - // using above function was just to check whether Unwinder of Frame 0 - // works or not. + // Remove all the frames added by above function as the purpose of using + // above function was just to check whether Unwinder of Frame 0 works or not. for (uint32_t i = 1; i < m_frames.size(); i++) m_frames.pop_back(); @@ -362,51 +345,44 @@ bool UnwindLLDB::AddOneMoreFrame(ABI *abi) { m_frames.push_back(new_frame); - // If we can get one more frame further then accept that we get back a correct - // frame. + // If we can get one more frame further then accept that we get back a + // correct frame. m_candidate_frame = GetOneMoreFrame(abi); if (m_candidate_frame) return true; // We can't go further from the frame returned by GetOneMore frame. Lets try - // to get a - // different frame with using the fallback unwind plan. + // to get a different frame with using the fallback unwind plan. if (!m_frames[m_frames.size() - 2] ->reg_ctx_lldb_sp->TryFallbackUnwindPlan()) { // We don't have a valid fallback unwind plan. Accept the frame as it is. - // This is a - // valid situation when we are at the bottom of the stack. + // This is a valid situation when we are at the bottom of the stack. return true; } // Remove the possibly incorrect frame from the frame list and try to add a - // different one with - // the newly selected fallback unwind plan. + // different one with the newly selected fallback unwind plan. m_frames.pop_back(); CursorSP new_frame_v2 = GetOneMoreFrame(abi); if (new_frame_v2 == nullptr) { // We haven't got a new frame from the fallback unwind plan. Accept the - // frame from the - // original unwind plan. This is a valid situation when we are at the bottom - // of the stack. + // frame from the original unwind plan. This is a valid situation when we + // are at the bottom of the stack. m_frames.push_back(new_frame); return true; } // Push the new frame to the list and try to continue from this frame. If we - // can get a new frame - // then accept it as the correct one. + // can get a new frame then accept it as the correct one. m_frames.push_back(new_frame_v2); m_candidate_frame = GetOneMoreFrame(abi); if (m_candidate_frame) { // If control reached here then TryFallbackUnwindPlan had succeeded for - // Cursor::m_frames[m_frames.size() - 2]. - // It also succeeded to Unwind next 2 frames i.e. m_frames[m_frames.size() - - // 1] and a frame after that. - // For Cursor::m_frames[m_frames.size() - 2], reg_ctx_lldb_sp field was - // already updated during TryFallbackUnwindPlan - // call above. However, cfa field still needs to be updated. Hence updating - // it here and then returning. + // Cursor::m_frames[m_frames.size() - 2]. It also succeeded to Unwind next + // 2 frames i.e. m_frames[m_frames.size() - 1] and a frame after that. For + // Cursor::m_frames[m_frames.size() - 2], reg_ctx_lldb_sp field was already + // updated during TryFallbackUnwindPlan call above. However, cfa field + // still needs to be updated. Hence updating it here and then returning. if (!(m_frames[m_frames.size() - 2]->reg_ctx_lldb_sp->GetCFA( m_frames[m_frames.size() - 2]->cfa))) return false; @@ -414,8 +390,7 @@ bool UnwindLLDB::AddOneMoreFrame(ABI *abi) { } // The new frame hasn't helped in unwinding. Fall back to the original one as - // the default unwind - // plan is usually more reliable then the fallback one. + // the default unwind plan is usually more reliable then the fallback one. m_frames.pop_back(); m_frames.push_back(new_frame); return true; @@ -486,10 +461,9 @@ bool UnwindLLDB::SearchForSavedLocationForRegister( if (static_cast<size_t>(frame_num) >= m_frames.size()) return false; - // Never interrogate more than one level while looking for the saved pc value. - // If the value - // isn't saved by frame_num, none of the frames lower on the stack will have a - // useful value. + // Never interrogate more than one level while looking for the saved pc + // value. If the value isn't saved by frame_num, none of the frames lower on + // the stack will have a useful value. if (pc_reg) { UnwindLLDB::RegisterSearchResult result; result = m_frames[frame_num]->reg_ctx_lldb_sp->SavedLocationForRegister( @@ -505,8 +479,7 @@ bool UnwindLLDB::SearchForSavedLocationForRegister( lldb_regnum, regloc); // We descended down to the live register context aka stack frame 0 and are - // reading the value - // out of a live register. + // reading the value out of a live register. if (result == UnwindLLDB::RegisterSearchResult::eRegisterFound && regloc.type == UnwindLLDB::RegisterLocation::eRegisterInLiveRegisterContext) { @@ -514,11 +487,9 @@ bool UnwindLLDB::SearchForSavedLocationForRegister( } // If we have unwind instructions saying that register N is saved in - // register M in the middle of - // the stack (and N can equal M here, meaning the register was not used in - // this function), then - // change the register number we're looking for to M and keep looking for a - // concrete location + // register M in the middle of the stack (and N can equal M here, meaning + // the register was not used in this function), then change the register + // number we're looking for to M and keep looking for a concrete location // down the stack, or an actual value from a live RegisterContext at frame // 0. if (result == UnwindLLDB::RegisterSearchResult::eRegisterFound && diff --git a/lldb/source/Plugins/Process/Utility/UnwindMacOSXFrameBackchain.cpp b/lldb/source/Plugins/Process/Utility/UnwindMacOSXFrameBackchain.cpp index d831011cb66..2115b4e179c 100644 --- a/lldb/source/Plugins/Process/Utility/UnwindMacOSXFrameBackchain.cpp +++ b/lldb/source/Plugins/Process/Utility/UnwindMacOSXFrameBackchain.cpp @@ -133,8 +133,8 @@ size_t UnwindMacOSXFrameBackchain::GetStackFrameData_i386( if (addr_range_ptr) { if (first_frame->GetFrameCodeAddress() == addr_range_ptr->GetBaseAddress()) { - // We are at the first instruction, so we can recover the - // previous PC by dereferencing the SP + // We are at the first instruction, so we can recover the previous PC + // by dereferencing the SP lldb::addr_t first_frame_sp = reg_ctx->GetSP(0); // Read the real second frame return address into frame.pc if (first_frame_sp && @@ -224,8 +224,8 @@ size_t UnwindMacOSXFrameBackchain::GetStackFrameData_x86_64( if (addr_range_ptr) { if (first_frame->GetFrameCodeAddress() == addr_range_ptr->GetBaseAddress()) { - // We are at the first instruction, so we can recover the - // previous PC by dereferencing the SP + // We are at the first instruction, so we can recover the previous PC + // by dereferencing the SP lldb::addr_t first_frame_sp = reg_ctx->GetSP(0); // Read the real second frame return address into frame.pc if (process->ReadMemory(first_frame_sp, &frame.pc, sizeof(frame.pc), diff --git a/lldb/source/Plugins/Process/Windows/Common/DebuggerThread.cpp b/lldb/source/Plugins/Process/Windows/Common/DebuggerThread.cpp index ac9e65c3c10..badab621925 100644 --- a/lldb/source/Plugins/Process/Windows/Common/DebuggerThread.cpp +++ b/lldb/source/Plugins/Process/Windows/Common/DebuggerThread.cpp @@ -112,8 +112,7 @@ lldb::thread_result_t DebuggerThread::DebuggerThreadAttachRoutine(void *data) { lldb::thread_result_t DebuggerThread::DebuggerThreadLaunchRoutine( const ProcessLaunchInfo &launch_info) { // Grab a shared_ptr reference to this so that we know it won't get deleted - // until after the - // thread routine has exited. + // until after the thread routine has exited. std::shared_ptr<DebuggerThread> this_ref(shared_from_this()); Log *log = ProcessWindowsLog::GetLogIfAny(WINDOWS_LOG_PROCESS); @@ -124,14 +123,11 @@ lldb::thread_result_t DebuggerThread::DebuggerThreadLaunchRoutine( ProcessLauncherWindows launcher; HostProcess process(launcher.LaunchProcess(launch_info, error)); // If we couldn't create the process, notify waiters immediately. Otherwise - // enter the debug - // loop and wait until we get the create process debug notification. Note - // that if the process - // was created successfully, we can throw away the process handle we got from - // CreateProcess - // because Windows will give us another (potentially more useful?) handle when - // it sends us the - // CREATE_PROCESS_DEBUG_EVENT. + // enter the debug loop and wait until we get the create process debug + // notification. Note that if the process was created successfully, we can + // throw away the process handle we got from CreateProcess because Windows + // will give us another (potentially more useful?) handle when it sends us + // the CREATE_PROCESS_DEBUG_EVENT. if (error.Success()) DebugLoop(); else @@ -143,8 +139,7 @@ lldb::thread_result_t DebuggerThread::DebuggerThreadLaunchRoutine( lldb::thread_result_t DebuggerThread::DebuggerThreadAttachRoutine( lldb::pid_t pid, const ProcessAttachInfo &attach_info) { // Grab a shared_ptr reference to this so that we know it won't get deleted - // until after the - // thread routine has exited. + // until after the thread routine has exited. std::shared_ptr<DebuggerThread> this_ref(shared_from_this()); Log *log = ProcessWindowsLog::GetLogIfAny(WINDOWS_LOG_PROCESS); @@ -157,11 +152,9 @@ lldb::thread_result_t DebuggerThread::DebuggerThreadAttachRoutine( return 0; } - // The attach was successful, enter the debug loop. From here on out, this is - // no different than - // a create process operation, so all the same comments in DebugLaunch should - // apply from this - // point out. + // The attach was successful, enter the debug loop. From here on out, this + // is no different than a create process operation, so all the same comments + // in DebugLaunch should apply from this point out. DebugLoop(); return 0; @@ -189,8 +182,8 @@ Status DebuggerThread::StopDebugging(bool terminate) { if (terminate) { // Initiate the termination before continuing the exception, so that the - // next debug - // event we get is the exit process event, and not some other event. + // next debug event we get is the exit process event, and not some other + // event. BOOL terminate_suceeded = TerminateProcess(handle, 0); LLDB_LOG(log, "calling TerminateProcess({0}, 0) (inferior={1}), success={2}", @@ -198,11 +191,9 @@ Status DebuggerThread::StopDebugging(bool terminate) { } // If we're stuck waiting for an exception to continue (e.g. the user is at a - // breakpoint - // messing around in the debugger), continue it now. But only AFTER calling - // TerminateProcess - // to make sure that the very next call to WaitForDebugEvent is an exit - // process event. + // breakpoint messing around in the debugger), continue it now. But only + // AFTER calling TerminateProcess to make sure that the very next call to + // WaitForDebugEvent is an exit process event. if (m_active_exception.get()) { LLDB_LOG(log, "masking active exception"); ContinueAsyncException(ExceptionResult::MaskException); @@ -355,8 +346,7 @@ DebuggerThread::HandleExceptionEvent(const EXCEPTION_DEBUG_INFO &info, } // Don't perform any blocking operations while we're shutting down. That - // will - // cause TerminateProcess -> WaitForSingleObject to time out. + // will cause TerminateProcess -> WaitForSingleObject to time out. return ExceptionResult::SendToApplication; } diff --git a/lldb/source/Plugins/Process/Windows/Common/ProcessWindows.cpp b/lldb/source/Plugins/Process/Windows/Common/ProcessWindows.cpp index a1c9cfaed41..ea919d5d98e 100644 --- a/lldb/source/Plugins/Process/Windows/Common/ProcessWindows.cpp +++ b/lldb/source/Plugins/Process/Windows/Common/ProcessWindows.cpp @@ -77,8 +77,8 @@ std::string GetProcessExecutableName(DWORD pid) { namespace lldb_private { // We store a pointer to this class in the ProcessWindows, so that we don't -// expose Windows-specific types and implementation details from a public header -// file. +// expose Windows-specific types and implementation details from a public +// header file. class ProcessWindowsData { public: ProcessWindowsData(bool stop_at_entry) : m_stop_at_entry(stop_at_entry) { @@ -186,9 +186,9 @@ Status ProcessWindows::DoDetach(bool keep_stopped) { StateType private_state; { // Acquire the lock only long enough to get the DebuggerThread. - // StopDebugging() will trigger a call back into ProcessWindows which - // will also acquire the lock. Thus we have to release the lock before - // calling StopDebugging(). + // StopDebugging() will trigger a call back into ProcessWindows which will + // also acquire the lock. Thus we have to release the lock before calling + // StopDebugging(). llvm::sys::ScopedLock lock(m_mutex); private_state = GetPrivateState(); @@ -228,11 +228,9 @@ Status ProcessWindows::DoDetach(bool keep_stopped) { Status ProcessWindows::DoLaunch(Module *exe_module, ProcessLaunchInfo &launch_info) { - // Even though m_session_data is accessed here, it is before a debugger thread - // has been - // kicked off. So there's no race conditions, and it shouldn't be necessary - // to acquire - // the mutex. + // Even though m_session_data is accessed here, it is before a debugger + // thread has been kicked off. So there's no race conditions, and it + // shouldn't be necessary to acquire the mutex. Log *log = ProcessWindowsLog::GetLogIfAny(WINDOWS_LOG_PROCESS); Status result; @@ -276,12 +274,10 @@ Status ProcessWindows::DoLaunch(Module *exe_module, launch_info.GetExecutableFile().GetPath()); // We've hit the initial stop. If eLaunchFlagsStopAtEntry was specified, the - // private state - // should already be set to eStateStopped as a result of hitting the initial - // breakpoint. If - // it was not set, the breakpoint should have already been resumed from and - // the private state - // should already be eStateRunning. + // private state should already be set to eStateStopped as a result of + // hitting the initial breakpoint. If it was not set, the breakpoint should + // have already been resumed from and the private state should already be + // eStateRunning. launch_info.SetProcessID(process.GetProcessId()); SetID(process.GetProcessId()); @@ -322,12 +318,10 @@ ProcessWindows::DoAttachToProcessWithID(lldb::pid_t pid, LLDB_LOG(log, "successfully attached to process with pid={0}", process_id); // We've hit the initial stop. If eLaunchFlagsStopAtEntry was specified, the - // private state - // should already be set to eStateStopped as a result of hitting the initial - // breakpoint. If - // it was not set, the breakpoint should have already been resumed from and - // the private state - // should already be eStateRunning. + // private state should already be set to eStateStopped as a result of + // hitting the initial breakpoint. If it was not set, the breakpoint should + // have already been resumed from and the private state should already be + // eStateRunning. SetID(process.GetProcessId()); return error; } @@ -346,9 +340,9 @@ Status ProcessWindows::DoResume() { ExceptionRecordSP active_exception = m_session_data->m_debugger->GetActiveException().lock(); if (active_exception) { - // Resume the process and continue processing debug events. Mask - // the exception so that from the process's view, there is no - // indication that anything happened. + // Resume the process and continue processing debug events. Mask the + // exception so that from the process's view, there is no indication that + // anything happened. m_session_data->m_debugger->ContinueAsyncException( ExceptionResult::MaskException); } @@ -376,10 +370,9 @@ Status ProcessWindows::DoDestroy() { StateType private_state; { // Acquire this lock inside an inner scope, only long enough to get the - // DebuggerThread. - // StopDebugging() will trigger a call back into ProcessWindows which will - // acquire the lock - // again, so we need to not deadlock. + // DebuggerThread. StopDebugging() will trigger a call back into + // ProcessWindows which will acquire the lock again, so we need to not + // deadlock. llvm::sys::ScopedLock lock(m_mutex); private_state = GetPrivateState(); @@ -558,8 +551,8 @@ bool ProcessWindows::CanDebug(lldb::TargetSP target_sp, ModuleSP exe_module_sp(target_sp->GetExecutableModule()); if (exe_module_sp.get()) return exe_module_sp->GetFileSpec().Exists(); - // However, if there is no executable module, we return true since we might be - // preparing to attach. + // However, if there is no executable module, we return true since we might + // be preparing to attach. return true; } @@ -589,8 +582,8 @@ bool ProcessWindows::UpdateThreadList(ThreadList &old_thread_list, } } - // Also add all the threads that are new since the last time we broke into the - // debugger. + // Also add all the threads that are new since the last time we broke into + // the debugger. for (const auto &thread_info : m_session_data->m_new_threads) { ThreadSP thread(new TargetThreadWindows(*this, thread_info.second)); thread->SetID(thread_info.first); @@ -699,11 +692,9 @@ Status ProcessWindows::GetMemoryRegionInfo(lldb::addr_t vm_addr, SIZE_T result = ::VirtualQueryEx(handle, addr, &mem_info, sizeof(mem_info)); if (result == 0) { if (::GetLastError() == ERROR_INVALID_PARAMETER) { - // ERROR_INVALID_PARAMETER is returned if VirtualQueryEx is called with an - // address - // past the highest accessible address. We should return a range from the - // vm_addr - // to LLDB_INVALID_ADDRESS + // ERROR_INVALID_PARAMETER is returned if VirtualQueryEx is called with + // an address past the highest accessible address. We should return a + // range from the vm_addr to LLDB_INVALID_ADDRESS info.GetRange().SetRangeBase(vm_addr); info.GetRange().SetRangeEnd(LLDB_INVALID_ADDRESS); info.SetReadable(MemoryRegionInfo::eNo); @@ -744,10 +735,8 @@ Status ProcessWindows::GetMemoryRegionInfo(lldb::addr_t vm_addr, info.SetMapped(MemoryRegionInfo::eYes); } else { // In the unmapped case we need to return the distance to the next block of - // memory. - // VirtualQueryEx nearly does that except that it gives the distance from - // the start - // of the page containing vm_addr. + // memory. VirtualQueryEx nearly does that except that it gives the + // distance from the start of the page containing vm_addr. SYSTEM_INFO data; GetSystemInfo(&data); DWORD page_offset = vm_addr % data.dwPageSize; @@ -825,10 +814,9 @@ void ProcessWindows::OnDebuggerConnected(lldb::addr_t image_base) { GetTarget().ModulesDidLoad(loaded_modules); // Add the main executable module to the list of pending module loads. We - // can't call - // GetTarget().ModulesDidLoad() here because we still haven't returned from - // DoLaunch() / DoAttach() yet - // so the target may not have set the process instance to `this` yet. + // can't call GetTarget().ModulesDidLoad() here because we still haven't + // returned from DoLaunch() / DoAttach() yet so the target may not have set + // the process instance to `this` yet. llvm::sys::ScopedLock lock(m_mutex); const HostThreadWindows &wmain_thread = debugger->GetMainThread().GetNativeThread(); @@ -845,12 +833,10 @@ ProcessWindows::OnDebugException(bool first_chance, // FIXME: Without this check, occasionally when running the test suite there // is // an issue where m_session_data can be null. It's not clear how this could - // happen - // but it only surfaces while running the test suite. In order to properly - // diagnose - // this, we probably need to first figure allow the test suite to print out - // full - // lldb logs, and then add logging to the process plugin. + // happen but it only surfaces while running the test suite. In order to + // properly diagnose this, we probably need to first figure allow the test + // suite to print out full lldb logs, and then add logging to the process + // plugin. if (!m_session_data) { LLDB_LOG(log, "Debugger thread reported exception {0:x} at address {1:x}, " "but there is no session.", @@ -929,9 +915,8 @@ void ProcessWindows::OnExitThread(lldb::tid_t thread_id, uint32_t exit_code) { void ProcessWindows::OnLoadDll(const ModuleSpec &module_spec, lldb::addr_t module_addr) { // Confusingly, there is no Target::AddSharedModule. Instead, calling - // GetSharedModule() with - // a new module will add it to the module list and return a corresponding - // ModuleSP. + // GetSharedModule() with a new module will add it to the module list and + // return a corresponding ModuleSP. Status error; ModuleSP module = GetTarget().GetSharedModule(module_spec, &error); bool load_addr_changed = false; @@ -961,17 +946,15 @@ void ProcessWindows::OnDebuggerError(const Status &error, uint32_t type) { Log *log = ProcessWindowsLog::GetLogIfAny(WINDOWS_LOG_PROCESS); if (m_session_data->m_initial_stop_received) { - // This happened while debugging. Do we shutdown the debugging session, try - // to continue, or do something else? + // This happened while debugging. Do we shutdown the debugging session, + // try to continue, or do something else? LLDB_LOG(log, "Error {0} occurred during debugging. Unexpected behavior " "may result. {1}", error.GetError(), error); } else { // If we haven't actually launched the process yet, this was an error - // launching the - // process. Set the internal error and signal the initial stop event so - // that the DoLaunch - // method wakes up and returns a failure. + // launching the process. Set the internal error and signal the initial + // stop event so that the DoLaunch method wakes up and returns a failure. m_session_data->m_launch_error = error; ::SetEvent(m_session_data->m_initial_stop_event); LLDB_LOG( @@ -1001,9 +984,9 @@ Status ProcessWindows::WaitForDebuggerConnection(DebuggerThreadSP debugger, } // The Windows page protection bits are NOT independent masks that can be -// bitwise-ORed together. For example, PAGE_EXECUTE_READ is not -// (PAGE_EXECUTE | PAGE_READ). To test for an access type, it's necessary to -// test for any of the bits that provide that access type. +// bitwise-ORed together. For example, PAGE_EXECUTE_READ is not (PAGE_EXECUTE +// | PAGE_READ). To test for an access type, it's necessary to test for any of +// the bits that provide that access type. bool ProcessWindows::IsPageReadable(uint32_t protect) { return (protect & PAGE_NOACCESS) == 0; } diff --git a/lldb/source/Plugins/Process/Windows/Common/x64/RegisterContextWindows_x64.cpp b/lldb/source/Plugins/Process/Windows/Common/x64/RegisterContextWindows_x64.cpp index e64bade5ff9..1b07ea8a938 100644 --- a/lldb/source/Plugins/Process/Windows/Common/x64/RegisterContextWindows_x64.cpp +++ b/lldb/source/Plugins/Process/Windows/Common/x64/RegisterContextWindows_x64.cpp @@ -29,14 +29,11 @@ using namespace lldb_private; namespace { // This enum defines the layout of the global RegisterInfo array. This is -// necessary because -// lldb register sets are defined in terms of indices into the register array. -// As such, the -// order of RegisterInfos defined in global registers array must match the order -// defined here. -// When defining the register set layouts, these values can appear in an -// arbitrary order, and that -// determines the order that register values are displayed in a dump. +// necessary because lldb register sets are defined in terms of indices into +// the register array. As such, the order of RegisterInfos defined in global +// registers array must match the order defined here. When defining the +// register set layouts, these values can appear in an arbitrary order, and +// that determines the order that register values are displayed in a dump. enum RegisterIndex { eRegisterIndexRax, eRegisterIndexRbx, @@ -270,11 +267,10 @@ bool RegisterContextWindows_x64::ReadRegister(const RegisterInfo *reg_info, bool RegisterContextWindows_x64::WriteRegister(const RegisterInfo *reg_info, const RegisterValue ®_value) { - // Since we cannot only write a single register value to the inferior, we need - // to make sure - // our cached copy of the register values are fresh. Otherwise when writing - // EAX, for example, - // we may also overwrite some other register with a stale value. + // Since we cannot only write a single register value to the inferior, we + // need to make sure our cached copy of the register values are fresh. + // Otherwise when writing EAX, for example, we may also overwrite some other + // register with a stale value. if (!CacheAllRegisterValues()) return false; diff --git a/lldb/source/Plugins/Process/Windows/Common/x86/RegisterContextWindows_x86.cpp b/lldb/source/Plugins/Process/Windows/Common/x86/RegisterContextWindows_x86.cpp index f56836de4a6..0e204c08cf5 100644 --- a/lldb/source/Plugins/Process/Windows/Common/x86/RegisterContextWindows_x86.cpp +++ b/lldb/source/Plugins/Process/Windows/Common/x86/RegisterContextWindows_x86.cpp @@ -30,14 +30,11 @@ using namespace lldb_private; namespace { // This enum defines the layout of the global RegisterInfo array. This is -// necessary because -// lldb register sets are defined in terms of indices into the register array. -// As such, the -// order of RegisterInfos defined in global registers array must match the order -// defined here. -// When defining the register set layouts, these values can appear in an -// arbitrary order, and that -// determines the order that register values are displayed in a dump. +// necessary because lldb register sets are defined in terms of indices into +// the register array. As such, the order of RegisterInfos defined in global +// registers array must match the order defined here. When defining the +// register set layouts, these values can appear in an arbitrary order, and +// that determines the order that register values are displayed in a dump. enum RegisterIndex { eRegisterIndexEax, eRegisterIndexEbx, @@ -212,11 +209,10 @@ bool RegisterContextWindows_x86::ReadRegister(const RegisterInfo *reg_info, bool RegisterContextWindows_x86::WriteRegister(const RegisterInfo *reg_info, const RegisterValue ®_value) { - // Since we cannot only write a single register value to the inferior, we need - // to make sure - // our cached copy of the register values are fresh. Otherwise when writing - // EAX, for example, - // we may also overwrite some other register with a stale value. + // Since we cannot only write a single register value to the inferior, we + // need to make sure our cached copy of the register values are fresh. + // Otherwise when writing EAX, for example, we may also overwrite some other + // register with a stale value. if (!CacheAllRegisterValues()) return false; diff --git a/lldb/source/Plugins/Process/elf-core/ProcessElfCore.cpp b/lldb/source/Plugins/Process/elf-core/ProcessElfCore.cpp index 7418c4f74ae..e68025bea79 100644 --- a/lldb/source/Plugins/Process/elf-core/ProcessElfCore.cpp +++ b/lldb/source/Plugins/Process/elf-core/ProcessElfCore.cpp @@ -56,9 +56,9 @@ lldb::ProcessSP ProcessElfCore::CreateInstance(lldb::TargetSP target_sp, const FileSpec *crash_file) { lldb::ProcessSP process_sp; if (crash_file) { - // Read enough data for a ELF32 header or ELF64 header - // Note: Here we care about e_type field only, so it is safe - // to ignore possible presence of the header extension. + // Read enough data for a ELF32 header or ELF64 header Note: Here we care + // about e_type field only, so it is safe to ignore possible presence of + // the header extension. const size_t header_size = sizeof(llvm::ELF::Elf64_Ehdr); auto data_sp = DataBufferLLVM::CreateSliceFromPath(crash_file->GetPath(), @@ -107,10 +107,10 @@ ProcessElfCore::ProcessElfCore(lldb::TargetSP target_sp, //---------------------------------------------------------------------- ProcessElfCore::~ProcessElfCore() { Clear(); - // We need to call finalize on the process before destroying ourselves - // to make sure all of the broadcaster cleanup goes as planned. If we - // destruct this class, then Process::~Process() might have problems - // trying to fully destroy the broadcaster. + // We need to call finalize on the process before destroying ourselves to + // make sure all of the broadcaster cleanup goes as planned. If we destruct + // this class, then Process::~Process() might have problems trying to fully + // destroy the broadcaster. Finalize(); } @@ -206,8 +206,8 @@ Status ProcessElfCore::DoLoadCore() { m_core_range_infos.Sort(); } - // Even if the architecture is set in the target, we need to override - // it to match the core file which is always single arch. + // Even if the architecture is set in the target, we need to override it to + // match the core file which is always single arch. ArchSpec arch(m_core_module_sp->GetArchitecture()); ArchSpec target_arch = GetTarget().GetArchitecture(); @@ -241,8 +241,7 @@ Status ProcessElfCore::DoLoadCore() { } // Core files are useless without the main executable. See if we can locate - // the main - // executable using data we found in the core file notes. + // the main executable using data we found in the core file notes. lldb::ModuleSP exe_module_sp = GetTarget().GetExecutableModule(); if (!exe_module_sp) { // The first entry in the NT_FILE might be our executable @@ -297,8 +296,8 @@ bool ProcessElfCore::IsAlive() { return true; } //------------------------------------------------------------------ size_t ProcessElfCore::ReadMemory(lldb::addr_t addr, void *buf, size_t size, Status &error) { - // Don't allow the caching that lldb_private::Process::ReadMemory does - // since in core files we have it all cached our our core file anyway. + // Don't allow the caching that lldb_private::Process::ReadMemory does since + // in core files we have it all cached our our core file anyway. return DoReadMemory(addr, buf, size, error); } @@ -368,17 +367,18 @@ size_t ProcessElfCore::DoReadMemory(lldb::addr_t addr, void *buf, size_t size, lldb::addr_t bytes_left = 0; // Number of bytes available in the core file from the given address - // Don't proceed if core file doesn't contain the actual data for this address range. + // Don't proceed if core file doesn't contain the actual data for this + // address range. if (file_start == file_end) return 0; - // Figure out how many on-disk bytes remain in this segment - // starting at the given offset + // Figure out how many on-disk bytes remain in this segment starting at the + // given offset if (file_end > file_start + offset) bytes_left = file_end - (file_start + offset); - // Figure out how many bytes we need to zero-fill if we are - // reading more bytes than available in the on-disk segment + // Figure out how many bytes we need to zero-fill if we are reading more + // bytes than available in the on-disk segment if (bytes_to_read > bytes_left) { zero_fill_size = bytes_to_read - bytes_left; bytes_to_read = bytes_left; @@ -551,8 +551,8 @@ llvm::Error ProcessElfCore::parseFreeBSDNotes(llvm::ArrayRef<CoreNote> notes) { llvm::Error ProcessElfCore::parseNetBSDNotes(llvm::ArrayRef<CoreNote> notes) { ThreadData thread_data; for (const auto ¬e : notes) { - // NetBSD per-thread information is stored in notes named - // "NetBSD-CORE@nnn" so match on the initial part of the string. + // NetBSD per-thread information is stored in notes named "NetBSD-CORE@nnn" + // so match on the initial part of the string. if (!llvm::StringRef(note.info.n_name).startswith("NetBSD-CORE")) continue; @@ -585,8 +585,8 @@ llvm::Error ProcessElfCore::parseNetBSDNotes(llvm::ArrayRef<CoreNote> notes) { llvm::Error ProcessElfCore::parseOpenBSDNotes(llvm::ArrayRef<CoreNote> notes) { ThreadData thread_data; for (const auto ¬e : notes) { - // OpenBSD per-thread information is stored in notes named - // "OpenBSD@nnn" so match on the initial part of the string. + // OpenBSD per-thread information is stored in notes named "OpenBSD@nnn" so + // match on the initial part of the string. if (!llvm::StringRef(note.info.n_name).startswith("OpenBSD")) continue; @@ -749,9 +749,9 @@ ArchSpec ProcessElfCore::GetArchitecture() { ArchSpec target_arch = GetTarget().GetArchitecture(); arch.MergeFrom(target_arch); - // On MIPS there is no way to differentiate betwenn 32bit and 64bit core files - // and this information can't be merged in from the target arch so we fail - // back to unconditionally returning the target arch in this config. + // On MIPS there is no way to differentiate betwenn 32bit and 64bit core + // files and this information can't be merged in from the target arch so we + // fail back to unconditionally returning the target arch in this config. if (target_arch.IsMIPS()) { return target_arch; } diff --git a/lldb/source/Plugins/Process/elf-core/RegisterContextPOSIXCore_mips64.cpp b/lldb/source/Plugins/Process/elf-core/RegisterContextPOSIXCore_mips64.cpp index e252b5a35e9..532a1f5c083 100644 --- a/lldb/source/Plugins/Process/elf-core/RegisterContextPOSIXCore_mips64.cpp +++ b/lldb/source/Plugins/Process/elf-core/RegisterContextPOSIXCore_mips64.cpp @@ -56,7 +56,7 @@ bool RegisterContextCorePOSIX_mips64::ReadRegister(const RegisterInfo *reg_info, if (IsGPR(reg_info->kinds[lldb::eRegisterKindLLDB])) { if (reg_info->byte_size == 4 && !(arch.GetMachine() == llvm::Triple::mips64el)) // In case of 32bit core file, the register data are placed at 4 byte - // offset. + // offset. offset = offset / 2; v = m_gpr.GetMaxU64(&offset, reg_info->byte_size); value = v; diff --git a/lldb/source/Plugins/Process/elf-core/RegisterContextPOSIXCore_x86_64.cpp b/lldb/source/Plugins/Process/elf-core/RegisterContextPOSIXCore_x86_64.cpp index a5c7ffda1da..a1f26d52444 100644 --- a/lldb/source/Plugins/Process/elf-core/RegisterContextPOSIXCore_x86_64.cpp +++ b/lldb/source/Plugins/Process/elf-core/RegisterContextPOSIXCore_x86_64.cpp @@ -60,8 +60,8 @@ bool RegisterContextCorePOSIX_x86_64::ReadRegister(const RegisterInfo *reg_info, const uint8_t *src; size_t offset; const size_t fxsave_offset = reg_info->byte_offset - GetFXSAVEOffset(); - // make the offset relative to the beginning of the FXSAVE structure - // because this is the data that we have (not the entire UserArea) + // make the offset relative to the beginning of the FXSAVE structure because + // this is the data that we have (not the entire UserArea) if (m_gpregset && reg_info->byte_offset < GetGPRSize()) { src = m_gpregset.get(); diff --git a/lldb/source/Plugins/Process/elf-core/ThreadElfCore.cpp b/lldb/source/Plugins/Process/elf-core/ThreadElfCore.cpp index 10c1ed288b2..c808a15cfc2 100644 --- a/lldb/source/Plugins/Process/elf-core/ThreadElfCore.cpp +++ b/lldb/source/Plugins/Process/elf-core/ThreadElfCore.cpp @@ -292,8 +292,8 @@ Status ELFLinuxPrStatus::Parse(const DataExtractor &data, return error; } - // Read field by field to correctly account for endianess - // of both the core dump and the platform running lldb. + // Read field by field to correctly account for endianess of both the core + // dump and the platform running lldb. offset_t offset = 0; si_signo = data.GetU32(&offset); si_code = data.GetU32(&offset); diff --git a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteClientBase.cpp b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteClientBase.cpp index 62b88456b9d..4e20b56fb11 100644 --- a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteClientBase.cpp +++ b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteClientBase.cpp @@ -109,16 +109,14 @@ StateType GDBRemoteClientBase::SendContinuePacketAndWaitForResponse( const bool should_stop = ShouldStop(signals, response); response.SetFilePos(0); - // The packet we should resume with. In the future - // we should check our thread list and "do the right thing" - // for new threads that show up while we stop and run async - // packets. Setting the packet to 'c' to continue all threads - // is the right thing to do 99.99% of the time because if a - // thread was single stepping, and we sent an interrupt, we - // will notice above that we didn't stop due to an interrupt - // but stopped due to stepping and we would _not_ continue. - // This packet may get modified by the async actions (e.g. to send a - // signal). + // The packet we should resume with. In the future we should check our + // thread list and "do the right thing" for new threads that show up + // while we stop and run async packets. Setting the packet to 'c' to + // continue all threads is the right thing to do 99.99% of the time + // because if a thread was single stepping, and we sent an interrupt, we + // will notice above that we didn't stop due to an interrupt but stopped + // due to stepping and we would _not_ continue. This packet may get + // modified by the async actions (e.g. to send a signal). m_continue_packet = 'c'; cont_lock.unlock(); @@ -263,19 +261,16 @@ bool GDBRemoteClientBase::ShouldStop(const UnixSignals &signals, if (m_async_count == 0) return true; // We were not interrupted. The process stopped on its own. - // Older debugserver stubs (before April 2016) can return two - // stop-reply packets in response to a ^C packet. - // Additionally, all debugservers still return two stop replies if - // the inferior stops due to some other reason before the remote - // stub manages to interrupt it. We need to wait for this - // additional packet to make sure the packet sequence does not get - // skewed. + // Older debugserver stubs (before April 2016) can return two stop-reply + // packets in response to a ^C packet. Additionally, all debugservers still + // return two stop replies if the inferior stops due to some other reason + // before the remote stub manages to interrupt it. We need to wait for this + // additional packet to make sure the packet sequence does not get skewed. StringExtractorGDBRemote extra_stop_reply_packet; ReadPacket(extra_stop_reply_packet, milliseconds(100), false); - // Interrupting is typically done using SIGSTOP or SIGINT, so if - // the process stops with some other signal, we definitely want to - // stop. + // Interrupting is typically done using SIGSTOP or SIGINT, so if the process + // stops with some other signal, we definitely want to stop. const uint8_t signo = response.GetHexU8(UINT8_MAX); if (signo != signals.GetSignalNumberFromName("SIGSTOP") && signo != signals.GetSignalNumberFromName("SIGINT")) diff --git a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunication.cpp b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunication.cpp index 13efa4bf7c5..c8b37a14d87 100644 --- a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunication.cpp +++ b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunication.cpp @@ -150,9 +150,8 @@ GDBRemoteCommunication::~GDBRemoteCommunication() { Disconnect(); } - // Stop the communications read thread which is used to parse all - // incoming packets. This function will block until the read - // thread returns. + // Stop the communications read thread which is used to parse all incoming + // packets. This function will block until the read thread returns. if (m_read_thread_enabled) StopReadThread(); } @@ -217,12 +216,10 @@ GDBRemoteCommunication::SendPacketNoLock(llvm::StringRef payload) { } } - // If logging was just enabled and we have history, then dump out what - // we have to the log so we get the historical context. The Dump() call - // that + // If logging was just enabled and we have history, then dump out what we + // have to the log so we get the historical context. The Dump() call that // logs all of the packet will set a boolean so that we don't dump this - // more - // than once + // more than once if (!m_history.DidDumpToLog()) m_history.Dump(log); @@ -303,8 +300,8 @@ GDBRemoteCommunication::ReadPacket(StringExtractorGDBRemote &response, // This function is called when a packet is requested. // A whole packet is popped from the packet queue and returned to the caller. -// Packets are placed into this queue from the communication read thread. -// See GDBRemoteCommunication::AppendBytesToCache. +// Packets are placed into this queue from the communication read thread. See +// GDBRemoteCommunication::AppendBytesToCache. GDBRemoteCommunication::PacketResult GDBRemoteCommunication::PopPacketFromQueue(StringExtractorGDBRemote &response, Timeout<std::micro> timeout) { @@ -424,11 +421,9 @@ GDBRemoteCommunication::WaitForPacketNoLock(StringExtractorGDBRemote &packet, break; } else if (successful_responses == 1) { // We got something else back as the first successful - // response, it probably is - // the response to the packet we actually wanted, so copy it - // over if this - // is the first success and continue to try to get the qEcho - // response + // response, it probably is the response to the packet we + // actually wanted, so copy it over if this is the first + // success and continue to try to get the qEcho response packet = echo_response; got_actual_response = true; } @@ -441,14 +436,13 @@ GDBRemoteCommunication::WaitForPacketNoLock(StringExtractorGDBRemote &packet, } // We weren't able to sync back up with the server, we must abort - // otherwise - // all responses might not be from the right packets... + // otherwise all responses might not be from the right packets... if (sync_success) { // We timed out, but were able to recover if (got_actual_response) { // We initially timed out, but we did get a response that came in - // before the successful - // reply to our qEcho packet, so lets say everything is fine... + // before the successful reply to our qEcho packet, so lets say + // everything is fine... return PacketResult::Success; } } else { @@ -490,10 +484,9 @@ bool GDBRemoteCommunication::DecompressPacket() { size_t pkt_size = m_bytes.size(); - // Smallest possible compressed packet is $N#00 - an uncompressed empty reply, - // most commonly indicating - // an unsupported packet. Anything less than 5 characters, it's definitely - // not a compressed packet. + // Smallest possible compressed packet is $N#00 - an uncompressed empty + // reply, most commonly indicating an unsupported packet. Anything less than + // 5 characters, it's definitely not a compressed packet. if (pkt_size < 5) return true; @@ -522,17 +515,15 @@ bool GDBRemoteCommunication::DecompressPacket() { 1; // The first character of the two hex checksum characters // Normally size_of_first_packet == m_bytes.size() but m_bytes may contain - // multiple packets. - // size_of_first_packet is the size of the initial packet which we'll replace - // with the decompressed - // version of, leaving the rest of m_bytes unmodified. + // multiple packets. size_of_first_packet is the size of the initial packet + // which we'll replace with the decompressed version of, leaving the rest of + // m_bytes unmodified. size_t size_of_first_packet = hash_mark_idx + 3; // Compressed packets ("$C") start with a base10 number which is the size of - // the uncompressed payload, - // then a : and then the compressed data. e.g. $C1024:<binary>#00 - // Update content_start and content_length to only include the <binary> part - // of the packet. + // the uncompressed payload, then a : and then the compressed data. e.g. + // $C1024:<binary>#00 Update content_start and content_length to only include + // the <binary> part of the packet. uint64_t decompressed_bufsize = ULONG_MAX; if (m_bytes[1] == 'C') { @@ -581,15 +572,14 @@ bool GDBRemoteCommunication::DecompressPacket() { } if (m_bytes[1] == 'N') { - // This packet was not compressed -- delete the 'N' character at the - // start and the packet may be processed as-is. + // This packet was not compressed -- delete the 'N' character at the start + // and the packet may be processed as-is. m_bytes.erase(1, 1); return true; } - // Reverse the gdb-remote binary escaping that was done to the compressed text - // to - // guard characters like '$', '#', '}', etc. + // Reverse the gdb-remote binary escaping that was done to the compressed + // text to guard characters like '$', '#', '}', etc. std::vector<uint8_t> unescaped_content; unescaped_content.reserve(content_length); size_t i = content_start; @@ -630,12 +620,10 @@ bool GDBRemoteCommunication::DecompressPacket() { else if (m_compression_type == CompressionType::LZMA) compression_type = COMPRESSION_LZMA; - // If we have the expected size of the decompressed payload, we can allocate - // the right-sized buffer and do it. If we don't have that information, - // we'll - // need to try decoding into a big buffer and if the buffer wasn't big - // enough, - // increase it and try again. + // If we have the expected size of the decompressed payload, we can + // allocate the right-sized buffer and do it. If we don't have that + // information, we'll need to try decoding into a big buffer and if the + // buffer wasn't big enough, increase it and try again. if (decompressed_bufsize != ULONG_MAX && decompressed_buffer != nullptr) { decompressed_bytes = compression_decode_buffer( @@ -723,9 +711,8 @@ GDBRemoteCommunication::CheckForPacket(const uint8_t *src, size_t src_len, // Parse up the packets into gdb remote packets if (!m_bytes.empty()) { - // end_idx must be one past the last valid packet byte. Start - // it off with an invalid value that is the same as the current - // index. + // end_idx must be one past the last valid packet byte. Start it off with + // an invalid value that is the same as the current index. size_t content_start = 0; size_t content_length = 0; size_t total_length = 0; @@ -760,7 +747,8 @@ GDBRemoteCommunication::CheckForPacket(const uint8_t *src, size_t src_len, checksum_idx = hash_pos + 1; // Skip the dollar sign content_start = 1; - // Don't include the # in the content or the $ in the content length + // Don't include the # in the content or the $ in the content + // length content_length = hash_pos - 1; total_length = @@ -774,11 +762,10 @@ GDBRemoteCommunication::CheckForPacket(const uint8_t *src, size_t src_len, break; default: { - // We have an unexpected byte and we need to flush all bad - // data that is in m_bytes, so we need to find the first - // byte that is a '+' (ACK), '-' (NACK), \x03 (CTRL+C interrupt), - // or '$' character (start of packet header) or of course, - // the end of the data in m_bytes... + // We have an unexpected byte and we need to flush all bad data that is + // in m_bytes, so we need to find the first byte that is a '+' (ACK), '-' + // (NACK), \x03 (CTRL+C interrupt), or '$' character (start of packet + // header) or of course, the end of the data in m_bytes... const size_t bytes_len = m_bytes.size(); bool done = false; uint32_t idx; @@ -819,16 +806,14 @@ GDBRemoteCommunication::CheckForPacket(const uint8_t *src, size_t src_len, if (log) { // If logging was just enabled and we have history, then dump out what // we have to the log so we get the historical context. The Dump() call - // that - // logs all of the packet will set a boolean so that we don't dump this - // more - // than once + // that logs all of the packet will set a boolean so that we don't dump + // this more than once if (!m_history.DidDumpToLog()) m_history.Dump(log); bool binary = false; - // Only detect binary for packets that start with a '$' and have a '#CC' - // checksum + // Only detect binary for packets that start with a '$' and have a + // '#CC' checksum if (m_bytes[0] == '$' && total_length > 4) { for (size_t i = 0; !binary && i < total_length; ++i) { unsigned char c = m_bytes[i]; @@ -851,8 +836,8 @@ GDBRemoteCommunication::CheckForPacket(const uint8_t *src, size_t src_len, // Remove binary escaped bytes when displaying the packet... const char ch = m_bytes[i]; if (ch == 0x7d) { - // 0x7d is the escape character. The next character is to - // be XOR'd with 0x20. + // 0x7d is the escape character. The next character is to be + // XOR'd with 0x20. const char escapee = m_bytes[++i] ^ 0x20; strm.Printf("%2.2x", escapee); } else { @@ -880,26 +865,25 @@ GDBRemoteCommunication::CheckForPacket(const uint8_t *src, size_t src_len, // Clear packet_str in case there is some existing data in it. packet_str.clear(); - // Copy the packet from m_bytes to packet_str expanding the - // run-length encoding in the process. - // Reserve enough byte for the most common case (no RLE used) + // Copy the packet from m_bytes to packet_str expanding the run-length + // encoding in the process. Reserve enough byte for the most common case + // (no RLE used) packet_str.reserve(m_bytes.length()); for (std::string::const_iterator c = m_bytes.begin() + content_start; c != m_bytes.begin() + content_end; ++c) { if (*c == '*') { - // '*' indicates RLE. Next character will give us the - // repeat count and previous character is what is to be - // repeated. + // '*' indicates RLE. Next character will give us the repeat count + // and previous character is what is to be repeated. char char_to_repeat = packet_str.back(); // Number of time the previous character is repeated int repeat_count = *++c + 3 - ' '; - // We have the char_to_repeat and repeat_count. Now push - // it in the packet. + // We have the char_to_repeat and repeat_count. Now push it in the + // packet. for (int i = 0; i < repeat_count; ++i) packet_str.push_back(char_to_repeat); } else if (*c == 0x7d) { - // 0x7d is the escape character. The next character is to - // be XOR'd with 0x20. + // 0x7d is the escape character. The next character is to be XOR'd + // with 0x20. char escapee = *++c ^ 0x20; packet_str.push_back(escapee); } else { @@ -1009,8 +993,8 @@ Status GDBRemoteCommunication::StartDebugserverProcess( char debugserver_path[PATH_MAX]; FileSpec &debugserver_file_spec = launch_info.GetExecutableFile(); - // Always check to see if we have an environment override for the path - // to the debugserver to use and use it if we do. + // Always check to see if we have an environment override for the path to the + // debugserver to use and use it if we do. const char *env_debugserver_path = getenv("LLDB_DEBUGSERVER_PATH"); if (env_debugserver_path) { debugserver_file_spec.SetFile(env_debugserver_path, false); @@ -1022,8 +1006,7 @@ Status GDBRemoteCommunication::StartDebugserverProcess( debugserver_file_spec = g_debugserver_file_spec; bool debugserver_exists = debugserver_file_spec.Exists(); if (!debugserver_exists) { - // The debugserver binary is in the LLDB.framework/Resources - // directory. + // The debugserver binary is in the LLDB.framework/Resources directory. if (HostInfo::GetLLDBPath(ePathTypeSupportExecutableDir, debugserver_file_spec)) { debugserver_file_spec.AppendPathComponent(DEBUGSERVER_BASENAME); @@ -1049,8 +1032,7 @@ Status GDBRemoteCommunication::StartDebugserverProcess( __FUNCTION__, debugserver_file_spec.GetPath().c_str()); } // Don't cache the platform specific GDB server binary as it could - // change - // from platform to platform + // change from platform to platform g_debugserver_file_spec.Clear(); } } @@ -1098,14 +1080,14 @@ Status GDBRemoteCommunication::StartDebugserverProcess( // once data is written to the pipe, debug server is up and running. Pipe socket_pipe; - // port is null when debug server should listen on domain socket - - // we're not interested in port value but rather waiting for debug server - // to become available. + // port is null when debug server should listen on domain socket - we're + // not interested in port value but rather waiting for debug server to + // become available. if (pass_comm_fd == -1) { if (url) { -// Create a temporary file to get the stdout/stderr and redirect the -// output of the command into this file. We will later read this file -// if all goes well and fill the data into "command_output_ptr" +// Create a temporary file to get the stdout/stderr and redirect the output of +// the command into this file. We will later read this file if all goes well +// and fill the data into "command_output_ptr" #if defined(__APPLE__) // Binding to port zero, we need to figure out what port it ends up // using using a named pipe... @@ -1138,8 +1120,7 @@ Status GDBRemoteCommunication::StartDebugserverProcess( #endif } else { // No host and port given, so lets listen on our end and make the - // debugserver - // connect to us.. + // debugserver connect to us.. error = StartListenThread("127.0.0.1", 0); if (error.Fail()) { if (log) @@ -1341,14 +1322,11 @@ GDBRemoteCommunication::ScopedTimeout::~ScopedTimeout() { } // This function is called via the Communications class read thread when bytes -// become available -// for this connection. This function will consume all incoming bytes and try to -// parse whole -// packets as they become available. Full packets are placed in a queue, so that -// all packet -// requests can simply pop from this queue. Async notification packets will be -// dispatched -// immediately to the ProcessGDBRemote Async thread via an event. +// become available for this connection. This function will consume all +// incoming bytes and try to parse whole packets as they become available. Full +// packets are placed in a queue, so that all packet requests can simply pop +// from this queue. Async notification packets will be dispatched immediately +// to the ProcessGDBRemote Async thread via an event. void GDBRemoteCommunication::AppendBytesToCache(const uint8_t *bytes, size_t len, bool broadcast, lldb::ConnectionStatus status) { @@ -1357,8 +1335,8 @@ void GDBRemoteCommunication::AppendBytesToCache(const uint8_t *bytes, while (true) { PacketType type = CheckForPacket(bytes, len, packet); - // scrub the data so we do not pass it back to CheckForPacket - // on future passes of the loop + // scrub the data so we do not pass it back to CheckForPacket on future + // passes of the loop bytes = nullptr; len = 0; @@ -1382,8 +1360,8 @@ void GDBRemoteCommunication::AppendBytesToCache(const uint8_t *bytes, // put this packet into an event const char *pdata = packet.GetStringRef().c_str(); - // as the communication class, we are a broadcaster and the - // async thread is tuned to listen to us + // as the communication class, we are a broadcaster and the async thread + // is tuned to listen to us BroadcastEvent(eBroadcastBitGdbReadThreadGotNotify, new EventDataBytes(pdata)); } diff --git a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp index 48d22e92a5c..231fa9043c4 100644 --- a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp +++ b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp @@ -119,8 +119,8 @@ GDBRemoteCommunicationClient::~GDBRemoteCommunicationClient() { bool GDBRemoteCommunicationClient::HandshakeWithServer(Status *error_ptr) { ResetDiscoverableSettings(false); - // Start the read thread after we send the handshake ack since if we - // fail to send the handshake ack, there is no reason to continue... + // Start the read thread after we send the handshake ack since if we fail to + // send the handshake ack, there is no reason to continue... if (SendAck()) { // Wait for any responses that might have been queued up in the remote // GDB server and flush them all @@ -130,9 +130,9 @@ bool GDBRemoteCommunicationClient::HandshakeWithServer(Status *error_ptr) { packet_result = ReadPacket(response, milliseconds(10), false); // The return value from QueryNoAckModeSupported() is true if the packet - // was sent and _any_ response (including UNIMPLEMENTED) was received), - // or false if no response was received. This quickly tells us if we have - // a live connection to a remote GDB server... + // was sent and _any_ response (including UNIMPLEMENTED) was received), or + // false if no response was received. This quickly tells us if we have a + // live connection to a remote GDB server... if (QueryNoAckModeSupported()) { return true; } else { @@ -215,9 +215,8 @@ bool GDBRemoteCommunicationClient::QueryNoAckModeSupported() { m_supports_not_sending_acks = eLazyBoolNo; // This is the first real packet that we'll send in a debug session and it - // may take a little - // longer than normal to receive a reply. Wait at least 6 seconds for a - // reply to this packet. + // may take a little longer than normal to receive a reply. Wait at least + // 6 seconds for a reply to this packet. ScopedTimeout timeout(*this, std::max(GetPacketTimeout(), seconds(6))); @@ -340,8 +339,8 @@ void GDBRemoteCommunicationClient::ResetDiscoverableSettings(bool did_exec) { m_supports_jModulesInfo = true; } - // These flags should be reset when we first connect to a GDB server - // and when our inferior process execs + // These flags should be reset when we first connect to a GDB server and when + // our inferior process execs m_qProcessInfo_is_valid = eLazyBoolCalculate; m_process_arch.Clear(); } @@ -373,8 +372,7 @@ void GDBRemoteCommunicationClient::GetRemoteQSupported() { const char *response_cstr = response.GetStringRef().c_str(); // Hang on to the qSupported packet, so that platforms can do custom - // configuration of the transport before attaching/launching the - // process. + // configuration of the transport before attaching/launching the process. m_qSupported_response = response_cstr; if (::strstr(response_cstr, "qXfer:auxv:read+")) @@ -393,7 +391,8 @@ void GDBRemoteCommunicationClient::GetRemoteQSupported() { m_supports_qXfer_memory_map_read = eLazyBoolYes; // Look for a list of compressions in the features list e.g. - // qXfer:features:read+;PacketSize=20000;qEcho+;SupportedCompressions=zlib-deflate,lzma + // qXfer:features:read+;PacketSize=20000;qEcho+;SupportedCompressions=zlib- + // deflate,lzma const char *features_list = ::strstr(response_cstr, "qXfer:features:"); if (features_list) { const char *compressions = @@ -557,9 +556,8 @@ GDBRemoteCommunicationClient::SendThreadSpecificPacketAndWaitForResponse( return SendPacketAndWaitForResponseNoLock(payload.GetString(), response); } -// Check if the target supports 'p' packet. It sends out a 'p' -// packet and checks the response. A normal packet will tell us -// that support is available. +// Check if the target supports 'p' packet. It sends out a 'p' packet and +// checks the response. A normal packet will tell us that support is available. // // Takes a valid thread ID because p needs to apply to a thread. bool GDBRemoteCommunicationClient::GetpPacketSupported(lldb::tid_t tid) { @@ -614,8 +612,8 @@ bool GDBRemoteCommunicationClient::GetThreadExtendedInfoSupported() { void GDBRemoteCommunicationClient::EnableErrorStringInPacket() { if (m_supports_error_string_reply == eLazyBoolCalculate) { StringExtractorGDBRemote response; - // We try to enable error strings in remote packets - // but if we fail, we just work in the older way. + // We try to enable error strings in remote packets but if we fail, we just + // work in the older way. m_supports_error_string_reply = eLazyBoolNo; if (SendPacketAndWaitForResponse("QEnableErrorStrings", response, false) == PacketResult::Success) { @@ -729,12 +727,10 @@ lldb::pid_t GDBRemoteCommunicationClient::GetCurrentProcessID(bool allow_lazy) { return m_curr_pid; } else { // If we don't get a response for qProcessInfo, check if $qC gives us a - // result. - // $qC only returns a real process id on older debugserver and lldb-platform - // stubs. - // The gdb remote protocol documents $qC as returning the thread id, which - // newer - // debugserver and lldb-gdbserver stubs return correctly. + // result. $qC only returns a real process id on older debugserver and + // lldb-platform stubs. The gdb remote protocol documents $qC as returning + // the thread id, which newer debugserver and lldb-gdbserver stubs return + // correctly. StringExtractorGDBRemote response; if (SendPacketAndWaitForResponse("qC", response, false) == PacketResult::Success) { @@ -789,8 +785,8 @@ bool GDBRemoteCommunicationClient::GetLaunchSuccess(std::string &error_str) { int GDBRemoteCommunicationClient::SendArgumentsPacket( const ProcessLaunchInfo &launch_info) { // Since we don't get the send argv0 separate from the executable path, we - // need to - // make sure to use the actual executable path found in the launch_info... + // need to make sure to use the actual executable path found in the + // launch_info... std::vector<const char *> argv; FileSpec exe_file = launch_info.GetExecutableFile(); std::string exe_path; @@ -1558,8 +1554,8 @@ Status GDBRemoteCommunicationClient::GetMemoryRegionInfo( Status qXfer_error = GetQXferMemoryMapRegionInfo(addr, qXfer_region_info); if (error.Fail()) { - // If qMemoryRegionInfo failed, but qXfer:memory-map:read succeeded, - // use the qXfer result as a fallback + // If qMemoryRegionInfo failed, but qXfer:memory-map:read succeeded, use + // the qXfer result as a fallback if (qXfer_error.Success()) { region_info = qXfer_region_info; error.Clear(); @@ -1568,8 +1564,8 @@ Status GDBRemoteCommunicationClient::GetMemoryRegionInfo( } } else if (qXfer_error.Success()) { // If both qMemoryRegionInfo and qXfer:memory-map:read succeeded, and if - // both regions are the same range, update the result to include the - // flash-memory information that is specific to the qXfer result. + // both regions are the same range, update the result to include the flash- + // memory information that is specific to the qXfer result. if (region_info.GetRange() == qXfer_region_info.GetRange()) { region_info.SetFlash(qXfer_region_info.GetFlash()); region_info.SetBlocksize(qXfer_region_info.GetBlocksize()); @@ -1735,13 +1731,13 @@ GDBRemoteCommunicationClient::GetWatchpointsTriggerAfterInstruction( Status error; llvm::Triple::ArchType atype = arch.GetMachine(); - // we assume watchpoints will happen after running the relevant opcode - // and we only want to override this behavior if we have explicitly - // received a qHostInfo telling us otherwise + // we assume watchpoints will happen after running the relevant opcode and we + // only want to override this behavior if we have explicitly received a + // qHostInfo telling us otherwise if (m_qHostInfo_is_valid != eLazyBoolYes) { // On targets like MIPS and ppc64le, watchpoint exceptions are always - // generated before the instruction is executed. The connected target - // may not support qHostInfo or qWatchpointSupportInfo packets. + // generated before the instruction is executed. The connected target may + // not support qHostInfo or qWatchpointSupportInfo packets. if (atype == llvm::Triple::mips || atype == llvm::Triple::mipsel || atype == llvm::Triple::mips64 || atype == llvm::Triple::mips64el || atype == llvm::Triple::ppc64le) @@ -1939,8 +1935,8 @@ bool GDBRemoteCommunicationClient::DecodeProcessInfoResponse( process_info.GetArchitecture().SetTriple(triple.c_str()); } else if (name.equals("name")) { StringExtractor extractor(value); - // The process name from ASCII hex bytes since we can't - // control the characters in a process name + // The process name from ASCII hex bytes since we can't control the + // characters in a process name std::string name; extractor.GetHexByteString(name); process_info.GetExecutableFile().SetFile(name, false); @@ -2196,8 +2192,8 @@ uint32_t GDBRemoteCommunicationClient::FindProcesses( } } StringExtractorGDBRemote response; - // Increase timeout as the first qfProcessInfo packet takes a long time - // on Android. The value of 1min was arrived at empirically. + // Increase timeout as the first qfProcessInfo packet takes a long time on + // Android. The value of 1min was arrived at empirically. ScopedTimeout timeout(*this, minutes(1)); if (SendPacketAndWaitForResponse(packet.GetString(), response, false) == PacketResult::Success) { @@ -2231,8 +2227,8 @@ bool GDBRemoteCommunicationClient::GetUserName(uint32_t uid, PacketResult::Success) { if (response.IsNormalResponse()) { // Make sure we parsed the right number of characters. The response is - // the hex encoded user name and should make up the entire packet. - // If there are any non-hex ASCII bytes, the length won't match below.. + // the hex encoded user name and should make up the entire packet. If + // there are any non-hex ASCII bytes, the length won't match below.. if (response.GetHexByteString(name) * 2 == response.GetStringRef().size()) return true; @@ -2258,8 +2254,8 @@ bool GDBRemoteCommunicationClient::GetGroupName(uint32_t gid, PacketResult::Success) { if (response.IsNormalResponse()) { // Make sure we parsed the right number of characters. The response is - // the hex encoded group name and should make up the entire packet. - // If there are any non-hex ASCII bytes, the length won't match below.. + // the hex encoded group name and should make up the entire packet. If + // there are any non-hex ASCII bytes, the length won't match below.. if (response.GetHexByteString(name) * 2 == response.GetStringRef().size()) return true; @@ -2485,8 +2481,8 @@ bool GDBRemoteCommunicationClient::LaunchGDBServer( // Make the GDB server we launch only accept connections from this host stream.Printf("host:%s;", hostname.c_str()); } else { - // Make the GDB server we launch accept connections from any host since we - // can't figure out the hostname + // Make the GDB server we launch accept connections from any host since + // we can't figure out the hostname stream.Printf("host:*;"); } } @@ -3275,9 +3271,8 @@ bool GDBRemoteCommunicationClient::SaveRegisterState(lldb::tid_t tid, bool GDBRemoteCommunicationClient::RestoreRegisterState(lldb::tid_t tid, uint32_t save_id) { // We use the "m_supports_QSaveRegisterState" variable here because the - // QSaveRegisterState and QRestoreRegisterState packets must both be supported - // in - // order to be useful + // QSaveRegisterState and QRestoreRegisterState packets must both be + // supported in order to be useful if (m_supports_QSaveRegisterState == eLazyBoolNo) return false; @@ -3673,8 +3668,8 @@ GDBRemoteCommunicationClient::GetModulesInfo( // query the target remote for extended information using the qXfer packet // -// example: object='features', annex='target.xml', out=<xml output> -// return: 'true' on success +// example: object='features', annex='target.xml', out=<xml output> return: +// 'true' on success // 'false' on failure (err set) bool GDBRemoteCommunicationClient::ReadExtFeature( const lldb_private::ConstString object, @@ -3781,10 +3776,9 @@ bool GDBRemoteCommunicationClient::ReadExtFeature( void GDBRemoteCommunicationClient::ServeSymbolLookups( lldb_private::Process *process) { - // Set to true once we've resolved a symbol to an address for the remote stub. - // If we get an 'OK' response after this, the remote stub doesn't need any - // more - // symbols and we can stop asking. + // Set to true once we've resolved a symbol to an address for the remote + // stub. If we get an 'OK' response after this, the remote stub doesn't need + // any more symbols and we can stop asking. bool symbol_response_provided = false; // Is this the initial qSymbol:: packet? @@ -3809,8 +3803,8 @@ void GDBRemoteCommunicationClient::ServeSymbolLookups( first_qsymbol_query = false; if (response.IsUnsupportedResponse()) { - // qSymbol is not supported by the current GDB server we are connected - // to + // qSymbol is not supported by the current GDB server we are + // connected to m_supports_qSymbol = false; return; } else { @@ -3875,10 +3869,8 @@ void GDBRemoteCommunicationClient::ServeSymbolLookups( } } // This is the normal path where our symbol lookup was successful - // and we want - // to send a packet with the new symbol value and see if another - // lookup needs to be - // done. + // and we want to send a packet with the new symbol value and see + // if another lookup needs to be done. // Change "packet" to contain the requested symbol value and name packet.Clear(); @@ -3913,8 +3905,7 @@ void GDBRemoteCommunicationClient::ServeSymbolLookups( StructuredData::Array * GDBRemoteCommunicationClient::GetSupportedStructuredDataPlugins() { if (!m_supported_async_json_packets_is_valid) { - // Query the server for the array of supported asynchronous JSON - // packets. + // Query the server for the array of supported asynchronous JSON packets. m_supported_async_json_packets_is_valid = true; Log *log(ProcessGDBRemoteLog::GetLogIfAllCategoriesSet(GDBR_LOG_PROCESS)); @@ -3928,8 +3919,8 @@ GDBRemoteCommunicationClient::GetSupportedStructuredDataPlugins() { StructuredData::ParseJSON(response.GetStringRef()); if (m_supported_async_json_packets_sp && !m_supported_async_json_packets_sp->GetAsArray()) { - // We were returned something other than a JSON array. This - // is invalid. Clear it out. + // We were returned something other than a JSON array. This is + // invalid. Clear it out. if (log) log->Printf("GDBRemoteCommunicationClient::%s(): " "QSupportedAsyncJSONPackets returned invalid " @@ -3987,8 +3978,7 @@ Status GDBRemoteCommunicationClient::ConfigureRemoteStructuredData( return error; } - // Build command: Configure{type_name}: serialized config - // data. + // Build command: Configure{type_name}: serialized config data. StreamGDBRemote stream; stream.PutCString("QConfigure"); stream.PutCString(type_name.AsCString()); diff --git a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerCommon.cpp b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerCommon.cpp index 2dd8046c188..47dca596eb4 100644 --- a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerCommon.cpp +++ b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerCommon.cpp @@ -299,9 +299,9 @@ GDBRemoteCommunicationServerCommon::Handle_qHostInfo( #if defined(__APPLE__) #if defined(__arm__) || defined(__arm64__) || defined(__aarch64__) - // For iOS devices, we are connected through a USB Mux so we never pretend - // to actually have a hostname as far as the remote lldb that is connecting - // to this lldb-platform is concerned + // For iOS devices, we are connected through a USB Mux so we never pretend to + // actually have a hostname as far as the remote lldb that is connecting to + // this lldb-platform is concerned response.PutCString("hostname:"); response.PutCStringAsRawHex8("127.0.0.1"); response.PutChar(';'); @@ -419,8 +419,8 @@ GDBRemoteCommunicationServerCommon::Handle_qfProcessInfo( } if (Host::FindProcesses(match_info, m_proc_infos)) { - // We found something, return the first item by calling the get - // subsequent process info packet handler... + // We found something, return the first item by calling the get subsequent + // process info packet handler... return Handle_qsProcessInfo(packet); } return SendErrorResponse(3); @@ -984,11 +984,11 @@ GDBRemoteCommunicationServerCommon::Handle_QLaunchArch( GDBRemoteCommunication::PacketResult GDBRemoteCommunicationServerCommon::Handle_A(StringExtractorGDBRemote &packet) { - // The 'A' packet is the most over designed packet ever here with - // redundant argument indexes, redundant argument lengths and needed hex - // encoded argument string values. Really all that is needed is a comma - // separated hex encoded argument value list, but we will stay true to the - // documented version of the 'A' packet here... + // The 'A' packet is the most over designed packet ever here with redundant + // argument indexes, redundant argument lengths and needed hex encoded + // argument string values. Really all that is needed is a comma separated hex + // encoded argument value list, but we will stay true to the documented + // version of the 'A' packet here... Log *log(GetLogIfAnyCategoriesSet(LIBLLDB_LOG_PROCESS)); int actual_arg_index = 0; @@ -996,8 +996,8 @@ GDBRemoteCommunicationServerCommon::Handle_A(StringExtractorGDBRemote &packet) { packet.SetFilePos(1); // Skip the 'A' bool success = true; while (success && packet.GetBytesLeft() > 0) { - // Decode the decimal argument string length. This length is the - // number of hex nibbles in the argument string value. + // Decode the decimal argument string length. This length is the number of + // hex nibbles in the argument string value. const uint32_t arg_len = packet.GetU32(UINT32_MAX); if (arg_len == UINT32_MAX) success = false; @@ -1006,8 +1006,8 @@ GDBRemoteCommunicationServerCommon::Handle_A(StringExtractorGDBRemote &packet) { if (packet.GetChar() != ',') success = false; else { - // Decode the argument index. We ignore this really because - // who would really send down the arguments in a random order??? + // Decode the argument index. We ignore this really because who would + // really send down the arguments in a random order??? const uint32_t arg_idx = packet.GetU32(UINT32_MAX); if (arg_idx == UINT32_MAX) success = false; @@ -1016,9 +1016,9 @@ GDBRemoteCommunicationServerCommon::Handle_A(StringExtractorGDBRemote &packet) { if (packet.GetChar() != ',') success = false; else { - // Decode the argument string value from hex bytes - // back into a UTF8 string and make sure the length - // matches the one supplied in the packet + // Decode the argument string value from hex bytes back into a UTF8 + // string and make sure the length matches the one supplied in the + // packet std::string arg; if (packet.GetHexByteStringFixedLength(arg, arg_len) != (arg_len / 2)) @@ -1257,8 +1257,8 @@ void GDBRemoteCommunicationServerCommon:: // Nothing. break; } - // In case of MIPS64, pointer size is depend on ELF ABI - // For N32 the pointer size is 4 and for N64 it is 8 + // In case of MIPS64, pointer size is depend on ELF ABI For N32 the pointer + // size is 4 and for N64 it is 8 std::string abi = proc_arch.GetTargetABI(); if (!abi.empty()) response.Printf("elf_abi:%s;", abi.c_str()); diff --git a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerLLGS.cpp b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerLLGS.cpp index 555f8229e8e..50392fa3895 100644 --- a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerLLGS.cpp +++ b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerLLGS.cpp @@ -236,16 +236,15 @@ Status GDBRemoteCommunicationServerLLGS::LaunchProcess() { m_debugged_process_up = std::move(*process_or); } - // Handle mirroring of inferior stdout/stderr over the gdb-remote protocol - // as needed. - // llgs local-process debugging may specify PTY paths, which will make these - // file actions non-null - // process launch -i/e/o will also make these file actions non-null - // nullptr means that the traffic is expected to flow over gdb-remote protocol + // Handle mirroring of inferior stdout/stderr over the gdb-remote protocol as + // needed. llgs local-process debugging may specify PTY paths, which will + // make these file actions non-null process launch -i/e/o will also make + // these file actions non-null nullptr means that the traffic is expected to + // flow over gdb-remote protocol if (should_forward_stdio) { // nullptr means it's not redirected to file or pty (in case of LLGS local) - // at least one of stdio will be transferred pty<->gdb-remote - // we need to give the pty master handle to this object to read and/or write + // at least one of stdio will be transferred pty<->gdb-remote we need to + // give the pty master handle to this object to read and/or write LLDB_LOG(log, "pid = {0}: setting up stdout/stderr redirection via $O " "gdb-remote commands", @@ -410,8 +409,8 @@ static JSONObject::SP GetRegistersAsJSON(NativeThreadProtocol &thread) { JSONObject::SP register_object_sp = std::make_shared<JSONObject>(); #ifdef LLDB_JTHREADSINFO_FULL_REGISTER_SET - // Expedite all registers in the first register set (i.e. should be GPRs) that - // are not contained in other registers. + // Expedite all registers in the first register set (i.e. should be GPRs) + // that are not contained in other registers. const RegisterSet *reg_set_p = reg_ctx_sp->GetRegisterSet(0); if (!reg_set_p) return nullptr; @@ -420,8 +419,7 @@ static JSONObject::SP GetRegistersAsJSON(NativeThreadProtocol &thread) { uint32_t reg_num = *reg_num_p; #else // Expedite only a couple of registers until we figure out why sending - // registers is - // expensive. + // registers is expensive. static const uint32_t k_expedited_registers[] = { LLDB_REGNUM_GENERIC_PC, LLDB_REGNUM_GENERIC_SP, LLDB_REGNUM_GENERIC_FP, LLDB_REGNUM_GENERIC_RA, LLDB_INVALID_REGNUM}; @@ -595,8 +593,7 @@ GDBRemoteCommunicationServerLLGS::SendStopReplyPacketForThread( return SendErrorResponse(52); // FIXME implement register handling for exec'd inferiors. - // if (tid_stop_info.reason == eStopReasonExec) - // { + // if (tid_stop_info.reason == eStopReasonExec) { // const bool force = true; // InitializeRegisters(force); // } @@ -633,14 +630,14 @@ GDBRemoteCommunicationServerLLGS::SendStopReplyPacketForThread( response.PutChar(';'); } - // If a 'QListThreadsInStopReply' was sent to enable this feature, we - // will send all thread IDs back in the "threads" key whose value is - // a list of hex thread IDs separated by commas: + // If a 'QListThreadsInStopReply' was sent to enable this feature, we will + // send all thread IDs back in the "threads" key whose value is a list of hex + // thread IDs separated by commas: // "threads:10a,10b,10c;" - // This will save the debugger from having to send a pair of qfThreadInfo - // and qsThreadInfo packets, but it also might take a lot of room in the - // stop reply packet, so it must be enabled only on systems where there - // are no limits on packet lengths. + // This will save the debugger from having to send a pair of qfThreadInfo and + // qsThreadInfo packets, but it also might take a lot of room in the stop + // reply packet, so it must be enabled only on systems where there are no + // limits on packet lengths. if (m_list_threads_in_stop_reply) { response.PutCString("threads:"); @@ -655,12 +652,11 @@ GDBRemoteCommunicationServerLLGS::SendStopReplyPacketForThread( } response.PutChar(';'); - // Include JSON info that describes the stop reason for any threads - // that actually have stop reasons. We use the new "jstopinfo" key - // whose values is hex ascii JSON that contains the thread IDs - // thread stop info only for threads that have stop reasons. Only send - // this if we have more than one thread otherwise this packet has all - // the info it needs. + // Include JSON info that describes the stop reason for any threads that + // actually have stop reasons. We use the new "jstopinfo" key whose values + // is hex ascii JSON that contains the thread IDs thread stop info only for + // threads that have stop reasons. Only send this if we have more than one + // thread otherwise this packet has all the info it needs. if (thread_index > 0) { const bool threads_with_valid_stop_info_only = true; JSONArray::SP threads_info_sp = GetJSONThreadsInfo( @@ -806,8 +802,8 @@ void GDBRemoteCommunicationServerLLGS::HandleInferiorState_Exited( __FUNCTION__, process->GetID()); } - // Close the pipe to the inferior terminal i/o if we launched it - // and set one up. + // Close the pipe to the inferior terminal i/o if we launched it and set one + // up. MaybeCloseInferiorTerminalConnection(); // We are ready to exit the debug monitor. @@ -823,8 +819,7 @@ void GDBRemoteCommunicationServerLLGS::HandleInferiorState_Stopped( if (log) log->Printf("GDBRemoteCommunicationServerLLGS::%s called", __FUNCTION__); - // Send the stop reason unless this is the stop after the - // launch or attach. + // Send the stop reason unless this is the stop after the launch or attach. switch (m_inferior_prev_state) { case eStateLaunching: case eStateAttaching: @@ -859,13 +854,11 @@ void GDBRemoteCommunicationServerLLGS::ProcessStateChanged( break; case StateType::eStateStopped: - // Make sure we get all of the pending stdout/stderr from the inferior - // and send it to the lldb host before we send the state change - // notification + // Make sure we get all of the pending stdout/stderr from the inferior and + // send it to the lldb host before we send the state change notification SendProcessOutput(); // Then stop the forwarding, so that any late output (see llvm.org/pr25652) - // does not - // interfere with our protocol. + // does not interfere with our protocol. StopSTDIOForwarding(); HandleInferiorState_Stopped(process); break; @@ -1287,8 +1280,8 @@ GDBRemoteCommunicationServerLLGS::Handle_qC(StringExtractorGDBRemote &packet) { (m_debugged_process_up->GetID() == LLDB_INVALID_PROCESS_ID)) return SendErrorResponse(68); - // Make sure we set the current thread so g and p packets return - // the data the gdb will expect. + // Make sure we set the current thread so g and p packets return the data the + // gdb will expect. lldb::tid_t tid = m_debugged_process_up->GetCurrentThreadID(); SetCurrentThreadID(tid); @@ -1397,10 +1390,9 @@ GDBRemoteCommunicationServerLLGS::Handle_C(StringExtractorGDBRemote &packet) { Status error; // We have two branches: what to do if a continue thread is specified (in - // which case we target - // sending the signal to that thread), or when we don't have a continue thread - // set (in which - // case we send a signal to the process). + // which case we target sending the signal to that thread), or when we don't + // have a continue thread set (in which case we send a signal to the + // process). // TODO discuss with Greg Clayton, make sure this makes sense. @@ -1639,8 +1631,8 @@ GDBRemoteCommunicationServerLLGS::SendStopReasonForState( case eStateStopped: case eStateCrashed: { lldb::tid_t tid = m_debugged_process_up->GetCurrentThreadID(); - // Make sure we set the current thread so g and p packets return - // the data the gdb will expect. + // Make sure we set the current thread so g and p packets return the data + // the gdb will expect. SetCurrentThreadID(tid); return SendStopReplyPacketForThread(tid); } @@ -2043,9 +2035,8 @@ GDBRemoteCommunicationServerLLGS::Handle_P(StringExtractorGDBRemote &packet) { return SendErrorResponse(0x47); } - // The dwarf expression are evaluate on host site - // which may cause register size to change - // Hence the reg_size may not be same as reg_info->bytes_size + // The dwarf expression are evaluate on host site which may cause register + // size to change Hence the reg_size may not be same as reg_info->bytes_size if ((reg_size != reg_info->byte_size) && !(reg_info->dynamic_size_dwarf_expr_bytes)) { return SendIllFormedResponse(packet, "P packet register size is incorrect"); @@ -2376,10 +2367,9 @@ GDBRemoteCommunicationServerLLGS::Handle_qMemoryRegionInfoSupported( Log *log(GetLogIfAnyCategoriesSet(LIBLLDB_LOG_PROCESS)); // Currently only the NativeProcessProtocol knows if it can handle a - // qMemoryRegionInfoSupported - // request, but we're not guaranteed to be attached to a process. For now - // we'll assume the - // client only asks this when a process is being debugged. + // qMemoryRegionInfoSupported request, but we're not guaranteed to be + // attached to a process. For now we'll assume the client only asks this + // when a process is being debugged. // Ensure we have a process running; otherwise, we can't figure this out // since we won't have a NativeProcessProtocol. @@ -2670,8 +2660,7 @@ GDBRemoteCommunicationServerLLGS::Handle_s(StringExtractorGDBRemote &packet) { } // We first try to use a continue thread id. If any one or any all set, use - // the current thread. - // Bail out if we don't have a thread id. + // the current thread. Bail out if we don't have a thread id. lldb::tid_t tid = GetContinueThreadID(); if (tid == 0 || tid == LLDB_INVALID_THREAD_ID) tid = GetCurrentThreadID(); @@ -3093,8 +3082,8 @@ GDBRemoteCommunicationServerLLGS::Handle_QPassSignals( std::vector<int> signals; packet.SetFilePos(strlen("QPassSignals:")); - // Read sequence of hex signal numbers divided by a semicolon and - // optionally spaces. + // Read sequence of hex signal numbers divided by a semicolon and optionally + // spaces. while (packet.GetBytesLeft() > 0) { int signal = packet.GetS32(-1, 16); if (signal < 0) @@ -3154,8 +3143,7 @@ NativeThreadProtocol *GDBRemoteCommunicationServerLLGS::GetThreadFromSuffix( return nullptr; // If the client hasn't asked for thread suffix support, there will not be a - // thread suffix. - // Use the current thread in that case. + // thread suffix. Use the current thread in that case. if (!m_thread_suffix_supported) { const lldb::tid_t current_tid = GetCurrentThreadID(); if (current_tid == LLDB_INVALID_THREAD_ID) @@ -3201,9 +3189,9 @@ NativeThreadProtocol *GDBRemoteCommunicationServerLLGS::GetThreadFromSuffix( lldb::tid_t GDBRemoteCommunicationServerLLGS::GetCurrentThreadID() const { if (m_current_tid == 0 || m_current_tid == LLDB_INVALID_THREAD_ID) { - // Use whatever the debug process says is the current thread id - // since the protocol either didn't specify or specified we want - // any/all threads marked as the current thread. + // Use whatever the debug process says is the current thread id since the + // protocol either didn't specify or specified we want any/all threads + // marked as the current thread. if (!m_debugged_process_up) return LLDB_INVALID_THREAD_ID; return m_debugged_process_up->GetCurrentThreadID(); diff --git a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerPlatform.cpp b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerPlatform.cpp index b3f2d3339fd..3e5cc56515b 100644 --- a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerPlatform.cpp +++ b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerPlatform.cpp @@ -102,11 +102,11 @@ Status GDBRemoteCommunicationServerPlatform::LaunchGDBServer( if (port == UINT16_MAX) port = GetNextAvailablePort(); - // Spawn a new thread to accept the port that gets bound after - // binding to port 0 (zero). + // Spawn a new thread to accept the port that gets bound after binding to + // port 0 (zero). - // ignore the hostname send from the remote end, just use the ip address - // that we're currently communicating with as the hostname + // ignore the hostname send from the remote end, just use the ip address that + // we're currently communicating with as the hostname // Spawn a debugserver and try to get the port it listens to. ProcessLaunchInfo debugserver_launch_info; @@ -117,8 +117,8 @@ Status GDBRemoteCommunicationServerPlatform::LaunchGDBServer( if (log) log->Printf("Launching debugserver with: %s:%u...", hostname.c_str(), port); - // Do not run in a new session so that it can not linger after the - // platform closes. + // Do not run in a new session so that it can not linger after the platform + // closes. debugserver_launch_info.SetLaunchInSeparateProcessGroup(false); debugserver_launch_info.SetMonitorProcessCallback( std::bind(&GDBRemoteCommunicationServerPlatform::DebugserverProcessReaped, @@ -171,8 +171,8 @@ GDBRemoteCommunicationServerPlatform::Handle_qLaunchGDBServer( #ifdef _WIN32 return SendErrorResponse(9); #else - // Spawn a local debugserver as a platform so we can then attach or launch - // a process... + // Spawn a local debugserver as a platform so we can then attach or launch a + // process... Log *log(GetLogIfAnyCategoriesSet(LIBLLDB_LOG_PLATFORM)); if (log) @@ -260,8 +260,7 @@ GDBRemoteCommunicationServerPlatform::Handle_qKillSpawnedProcess( lldb::pid_t pid = packet.GetU64(LLDB_INVALID_PROCESS_ID); - // verify that we know anything about this pid. - // Scope for locker + // verify that we know anything about this pid. Scope for locker { std::lock_guard<std::recursive_mutex> guard(m_spawned_pids_mutex); if (m_spawned_pids.find(pid) == m_spawned_pids.end()) { @@ -307,8 +306,8 @@ bool GDBRemoteCommunicationServerPlatform::KillSpawnedProcess(lldb::pid_t pid) { return true; } - // the launched process still lives. Now try killing it again, - // this time with an unblockable signal. + // the launched process still lives. Now try killing it again, this time + // with an unblockable signal. Host::Kill(pid, SIGKILL); for (size_t i = 0; i < 10; ++i) { @@ -322,8 +321,7 @@ bool GDBRemoteCommunicationServerPlatform::KillSpawnedProcess(lldb::pid_t pid) { usleep(10000); } - // check one more time after the final usleep - // Scope for locker + // check one more time after the final usleep Scope for locker { std::lock_guard<std::recursive_mutex> guard(m_spawned_pids_mutex); if (m_spawned_pids.find(pid) == m_spawned_pids.end()) @@ -390,14 +388,13 @@ GDBRemoteCommunicationServerPlatform::Handle_qC( StreamString response; response.Printf("QC%" PRIx64, pid); - // If we launch a process and this GDB server is acting as a platform, - // then we need to clear the process launch state so we can start - // launching another process. In order to launch a process a bunch or - // packets need to be sent: environment packets, working directory, - // disable ASLR, and many more settings. When we launch a process we - // then need to know when to clear this information. Currently we are - // selecting the 'qC' packet as that packet which seems to make the most - // sense. + // If we launch a process and this GDB server is acting as a platform, then + // we need to clear the process launch state so we can start launching + // another process. In order to launch a process a bunch or packets need to + // be sent: environment packets, working directory, disable ASLR, and many + // more settings. When we launch a process we then need to know when to clear + // this information. Currently we are selecting the 'qC' packet as that + // packet which seems to make the most sense. if (pid != LLDB_INVALID_PROCESS_ID) { m_process_launch_info.Clear(); } @@ -446,9 +443,8 @@ Status GDBRemoteCommunicationServerPlatform::LaunchProcess() { return Status("%s: no process command line specified to launch", __FUNCTION__); - // specify the process monitor if not already set. This should - // generally be what happens since we need to reap started - // processes. + // specify the process monitor if not already set. This should generally be + // what happens since we need to reap started processes. if (!m_process_launch_info.GetMonitorProcessCallback()) m_process_launch_info.SetMonitorProcessCallback( std::bind( @@ -467,8 +463,8 @@ Status GDBRemoteCommunicationServerPlatform::LaunchProcess() { m_process_launch_info.GetArguments().GetArgumentAtIndex(0), m_process_launch_info.GetProcessID()); - // add to list of spawned processes. On an lldb-gdbserver, we - // would expect there to be only one. + // add to list of spawned processes. On an lldb-gdbserver, we would expect + // there to be only one. const auto pid = m_process_launch_info.GetProcessID(); if (pid != LLDB_INVALID_PROCESS_ID) { // add to spawned pids diff --git a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteRegisterContext.cpp b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteRegisterContext.cpp index 54d7a92d48f..07dab751f4b 100644 --- a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteRegisterContext.cpp +++ b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteRegisterContext.cpp @@ -39,9 +39,9 @@ GDBRemoteRegisterContext::GDBRemoteRegisterContext( GDBRemoteDynamicRegisterInfo ®_info, bool read_all_at_once) : RegisterContext(thread, concrete_frame_idx), m_reg_info(reg_info), m_reg_valid(), m_reg_data(), m_read_all_at_once(read_all_at_once) { - // Resize our vector of bools to contain one bool for every register. - // We will use these boolean values to know when a register value - // is valid in m_reg_data. + // Resize our vector of bools to contain one bool for every register. We will + // use these boolean values to know when a register value is valid in + // m_reg_data. m_reg_valid.resize(reg_info.GetNumRegisters()); // Make a heap based buffer that is big enough to store all registers @@ -119,8 +119,8 @@ bool GDBRemoteRegisterContext::PrivateSetRegisterValue( if (success) { SetRegisterIsValid(reg, true); } else if (data.size() > 0) { - // Only set register is valid to false if we copied some bytes, else - // leave it as it was. + // Only set register is valid to false if we copied some bytes, else leave + // it as it was. SetRegisterIsValid(reg, false); } return success; @@ -133,11 +133,9 @@ bool GDBRemoteRegisterContext::PrivateSetRegisterValue(uint32_t reg, return false; // Early in process startup, we can get a thread that has an invalid byte - // order - // because the process hasn't been completely set up yet (see the ctor where - // the - // byte order is setfrom the process). If that's the case, we can't set the - // value here. + // order because the process hasn't been completely set up yet (see the ctor + // where the byte order is setfrom the process). If that's the case, we + // can't set the value here. if (m_reg_data.GetByteOrder() == eByteOrderInvalid) { return false; } @@ -149,8 +147,7 @@ bool GDBRemoteRegisterContext::PrivateSetRegisterValue(uint32_t reg, DataExtractor data(buffer_sp, endian::InlHostByteOrder(), sizeof(void *)); // If our register context and our register info disagree, which should never - // happen, don't - // overwrite past the end of the buffer. + // happen, don't overwrite past the end of the buffer. if (m_reg_data.GetByteSize() < reg_info->byte_offset + reg_info->byte_size) return false; @@ -219,8 +216,7 @@ bool GDBRemoteRegisterContext::ReadRegisterBytes(const RegisterInfo *reg_info, } if (reg_info->value_regs) { // Process this composite register request by delegating to the - // constituent - // primordial registers. + // constituent primordial registers. // Index of the primordial register. bool success = true; @@ -228,8 +224,8 @@ bool GDBRemoteRegisterContext::ReadRegisterBytes(const RegisterInfo *reg_info, const uint32_t prim_reg = reg_info->value_regs[idx]; if (prim_reg == LLDB_INVALID_REGNUM) break; - // We have a valid primordial register as our constituent. - // Grab the corresponding register info. + // We have a valid primordial register as our constituent. Grab the + // corresponding register info. const RegisterInfo *prim_reg_info = GetRegisterInfoAtIndex(prim_reg); if (prim_reg_info == NULL) success = false; @@ -242,8 +238,7 @@ bool GDBRemoteRegisterContext::ReadRegisterBytes(const RegisterInfo *reg_info, if (success) { // If we reach this point, all primordial register requests have - // succeeded. - // Validate this composite register. + // succeeded. Validate this composite register. SetRegisterIsValid(reg_info, true); } } else { @@ -262,16 +257,14 @@ bool GDBRemoteRegisterContext::ReadRegisterBytes(const RegisterInfo *reg_info, reg_info->byte_offset + reg_info->byte_size); #endif // If our register context and our register info disagree, which should - // never happen, don't - // read past the end of the buffer. + // never happen, don't read past the end of the buffer. if (m_reg_data.GetByteSize() < reg_info->byte_offset + reg_info->byte_size) return false; - // If we aren't extracting into our own buffer (which - // only happens when this function is called from - // ReadRegisterValue(uint32_t, Scalar&)) then - // we transfer bytes from our buffer into the data - // buffer that was passed in + // If we aren't extracting into our own buffer (which only happens when + // this function is called from ReadRegisterValue(uint32_t, Scalar&)) then + // we transfer bytes from our buffer into the data buffer that was passed + // in data.SetByteOrder(m_reg_data.GetByteOrder()); data.SetData(m_reg_data, reg_info->byte_offset, reg_info->byte_size); @@ -321,8 +314,7 @@ bool GDBRemoteRegisterContext::WriteRegisterBytes(const RegisterInfo *reg_info, #endif // If our register context and our register info disagree, which should never - // happen, don't - // overwrite past the end of the buffer. + // happen, don't overwrite past the end of the buffer. if (m_reg_data.GetByteSize() < reg_info->byte_offset + reg_info->byte_size) return false; @@ -358,12 +350,10 @@ bool GDBRemoteRegisterContext::WriteRegisterBytes(const RegisterInfo *reg_info, bool success = true; if (reg_info->value_regs) { - // This register is part of another register. In this case we read the - // actual - // register data for any "value_regs", and once all that data is read, - // we will - // have enough data in our register context bytes for the value of - // this register + // This register is part of another register. In this case we read + // the actual register data for any "value_regs", and once all that + // data is read, we will have enough data in our register context + // bytes for the value of this register // Invalidate this composite register first. @@ -371,8 +361,8 @@ bool GDBRemoteRegisterContext::WriteRegisterBytes(const RegisterInfo *reg_info, const uint32_t reg = reg_info->value_regs[idx]; if (reg == LLDB_INVALID_REGNUM) break; - // We have a valid primordial register as our constituent. - // Grab the corresponding register info. + // We have a valid primordial register as our constituent. Grab the + // corresponding register info. const RegisterInfo *value_reg_info = GetRegisterInfoAtIndex(reg); if (value_reg_info == NULL) success = false; @@ -385,8 +375,7 @@ bool GDBRemoteRegisterContext::WriteRegisterBytes(const RegisterInfo *reg_info, } // Check if writing this register will invalidate any other register - // values? - // If so, invalidate them + // values? If so, invalidate them if (reg_info->invalidate_regs) { for (uint32_t idx = 0, reg = reg_info->invalidate_regs[0]; reg != LLDB_INVALID_REGNUM; @@ -548,26 +537,22 @@ bool GDBRemoteRegisterContext::WriteAllRegisterValues( return true; uint32_t num_restored = 0; - // We need to manually go through all of the registers and - // restore them manually + // We need to manually go through all of the registers and restore them + // manually DataExtractor restore_data(data_sp, m_reg_data.GetByteOrder(), m_reg_data.GetAddressByteSize()); const RegisterInfo *reg_info; - // The g packet contents may either include the slice registers (registers - // defined in - // terms of other registers, e.g. eax is a subset of rax) or not. The - // slice registers - // should NOT be in the g packet, but some implementations may incorrectly - // include them. + // The g packet contents may either include the slice registers + // (registers defined in terms of other registers, e.g. eax is a subset + // of rax) or not. The slice registers should NOT be in the g packet, + // but some implementations may incorrectly include them. // // If the slice registers are included in the packet, we must step over - // the slice registers - // when parsing the packet -- relying on the RegisterInfo byte_offset - // field would be incorrect. - // If the slice registers are not included, then using the byte_offset - // values into the + // the slice registers when parsing the packet -- relying on the + // RegisterInfo byte_offset field would be incorrect. If the slice + // registers are not included, then using the byte_offset values into the // data buffer is the best way to find individual register values. uint64_t size_including_slice_registers = 0; @@ -591,21 +576,17 @@ bool GDBRemoteRegisterContext::WriteAllRegisterValues( } else if (size_not_including_slice_registers == restore_data.GetByteSize()) { // The size of the packet is the same as concatenating all of the - // registers sequentially, - // skipping the slice registers + // registers sequentially, skipping the slice registers use_byte_offset_into_buffer = true; } else if (size_including_slice_registers == restore_data.GetByteSize()) { // The slice registers are present in the packet (when they shouldn't - // be). - // Don't try to use the RegisterInfo byte_offset into the restore_data, - // it will - // point to the wrong place. + // be). Don't try to use the RegisterInfo byte_offset into the + // restore_data, it will point to the wrong place. use_byte_offset_into_buffer = false; } else { // None of our expected sizes match the actual g packet data we're - // looking at. - // The most conservative approach here is to use the running total byte - // offset. + // looking at. The most conservative approach here is to use the + // running total byte offset. use_byte_offset_into_buffer = false; } @@ -664,11 +645,9 @@ bool GDBRemoteRegisterContext::WriteAllRegisterValues( if (reg_info->value_regs) // skip registers that are slices of real // registers continue; - // Skip the fpsr and fpcr floating point status/control register writing - // to - // work around a bug in an older version of debugserver that would lead - // to - // register context corruption when writing fpsr/fpcr. + // Skip the fpsr and fpcr floating point status/control register + // writing to work around a bug in an older version of debugserver that + // would lead to register context corruption when writing fpsr/fpcr. if (arm64_debugserver && (strcmp(reg_info->name, "fpsr") == 0 || strcmp(reg_info->name, "fpcr") == 0)) { continue; @@ -752,8 +731,8 @@ void GDBRemoteDynamicRegisterInfo::HardcodeARMRegisters(bool from_scratch) { static uint32_t g_q14_regs[] = {71, 72, LLDB_INVALID_REGNUM}; // (d28, d29) static uint32_t g_q15_regs[] = {73, 74, LLDB_INVALID_REGNUM}; // (d30, d31) - // This is our array of composite registers, with each element coming from the - // above register mappings. + // This is our array of composite registers, with each element coming from + // the above register mappings. static uint32_t *g_composites[] = { g_d0_regs, g_d1_regs, g_d2_regs, g_d3_regs, g_d4_regs, g_d5_regs, g_d6_regs, g_d7_regs, g_d8_regs, g_d9_regs, g_d10_regs, g_d11_regs, @@ -884,21 +863,17 @@ void GDBRemoteDynamicRegisterInfo::HardcodeARMRegisters(bool from_scratch) { if (from_scratch) { // Calculate the offsets of the registers // Note that the layout of the "composite" registers (d0-d15 and q0-q15) - // which comes after the - // "primordial" registers is important. This enables us to calculate the - // offset of the composite - // register by using the offset of its first primordial register. For - // example, to calculate the - // offset of q0, use s0's offset. + // which comes after the "primordial" registers is important. This enables + // us to calculate the offset of the composite register by using the offset + // of its first primordial register. For example, to calculate the offset + // of q0, use s0's offset. if (g_register_infos[2].byte_offset == 0) { uint32_t byte_offset = 0; for (i = 0; i < num_registers; ++i) { // For primordial registers, increment the byte_offset by the byte_size - // to arrive at the - // byte_offset for the next register. Otherwise, we have a composite - // register whose - // offset can be calculated by consulting the offset of its first - // primordial register. + // to arrive at the byte_offset for the next register. Otherwise, we + // have a composite register whose offset can be calculated by + // consulting the offset of its first primordial register. if (!g_register_infos[i].value_regs) { g_register_infos[i].byte_offset = byte_offset; byte_offset += g_register_infos[i].byte_size; @@ -933,8 +908,8 @@ void GDBRemoteDynamicRegisterInfo::HardcodeARMRegisters(bool from_scratch) { RegisterInfo *g_comp_register_infos = g_register_infos + num_common_regs; // First we need to validate that all registers that we already have match - // the non composite regs. - // If so, then we can add the registers, else we need to bail + // the non composite regs. If so, then we can add the registers, else we + // need to bail bool match = true; if (num_dynamic_regs == num_common_regs) { for (i = 0; match && i < num_dynamic_regs; ++i) { @@ -970,9 +945,8 @@ void GDBRemoteDynamicRegisterInfo::HardcodeARMRegisters(bool from_scratch) { // Find a matching primordial register info entry. if (reg_info && reg_info->name && ::strcasecmp(reg_info->name, reg_name) == 0) { - // The name matches the existing primordial entry. - // Find and assign the offset, and then add this composite - // register entry. + // The name matches the existing primordial entry. Find and + // assign the offset, and then add this composite register entry. g_comp_register_infos[i].byte_offset = reg_info->byte_offset; name.SetCString(g_comp_register_infos[i].name); AddRegister(g_comp_register_infos[i], name, alt_name, diff --git a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp index eafc2eef5b7..be79ef9c805 100644 --- a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp +++ b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp @@ -94,11 +94,11 @@ using namespace lldb_private::process_gdb_remote; namespace lldb { // Provide a function that can easily dump the packet history if we know a -// ProcessGDBRemote * value (which we can get from logs or from debugging). -// We need the function in the lldb namespace so it makes it into the final +// ProcessGDBRemote * value (which we can get from logs or from debugging). We +// need the function in the lldb namespace so it makes it into the final // executable since the LLDB shared library only exports stuff in the lldb -// namespace. This allows you to attach with a debugger and call this -// function and get the packet history dumped to a file. +// namespace. This allows you to attach with a debugger and call this function +// and get the packet history dumped to a file. void DumpProcessGDBRemotePacketHistory(void *p, const char *path) { StreamFile strm; Status error(strm.GetFile().Open(path, File::eOpenOptionWrite | @@ -161,8 +161,8 @@ static const ProcessKDPPropertiesSP &GetGlobalPluginProperties() { } // anonymous namespace end // TODO Randomly assigning a port is unsafe. We should get an unused -// ephemeral port from the kernel and make sure we reserve it before passing -// it to debugserver. +// ephemeral port from the kernel and make sure we reserve it before passing it +// to debugserver. #if defined(__APPLE__) #define LOW_PORT (IPPORT_RESERVED) @@ -236,8 +236,8 @@ bool ProcessGDBRemote::CanDebug(lldb::TargetSP target_sp, } return exe_module->GetFileSpec().Exists(); } - // However, if there is no executable module, we return true since we might be - // preparing to attach. + // However, if there is no executable module, we return true since we might + // be preparing to attach. return true; } @@ -303,17 +303,16 @@ ProcessGDBRemote::ProcessGDBRemote(lldb::TargetSP target_sp, ProcessGDBRemote::~ProcessGDBRemote() { // m_mach_process.UnregisterNotificationCallbacks (this); Clear(); - // We need to call finalize on the process before destroying ourselves - // to make sure all of the broadcaster cleanup goes as planned. If we - // destruct this class, then Process::~Process() might have problems - // trying to fully destroy the broadcaster. + // We need to call finalize on the process before destroying ourselves to + // make sure all of the broadcaster cleanup goes as planned. If we destruct + // this class, then Process::~Process() might have problems trying to fully + // destroy the broadcaster. Finalize(); - // The general Finalize is going to try to destroy the process and that SHOULD - // shut down the async thread. However, if we don't kill it it will get - // stranded and - // its connection will go away so when it wakes up it will crash. So kill it - // for sure here. + // The general Finalize is going to try to destroy the process and that + // SHOULD shut down the async thread. However, if we don't kill it it will + // get stranded and its connection will go away so when it wakes up it will + // crash. So kill it for sure here. StopAsyncThread(); KillDebugserverProcess(); } @@ -372,8 +371,7 @@ bool ProcessGDBRemote::ParsePythonTargetDefinition( } // If the remote stub didn't give us eh_frame or DWARF register numbers for a -// register, -// see if the ABI can provide them. +// register, see if the ABI can provide them. // DWARF and eh_frame register numbers are defined as a part of the ABI. static void AugmentRegisterInfoViaABI(RegisterInfo ®_info, ConstString reg_name, ABISP abi_sp) { @@ -426,9 +424,9 @@ void ProcessGDBRemote::BuildDynamicRegisterInfo(bool force) { m_register_info.Clear(); - // Check if qHostInfo specified a specific packet timeout for this connection. - // If so then lets update our setting so the user knows what the timeout is - // and can see it. + // Check if qHostInfo specified a specific packet timeout for this + // connection. If so then lets update our setting so the user knows what the + // timeout is and can see it. const auto host_packet_timeout = m_gdb_comm.GetHostDefaultPacketTimeout(); if (host_packet_timeout > std::chrono::seconds(0)) { GetGlobalPluginProperties()->SetPacketTimeout(host_packet_timeout.count()); @@ -600,10 +598,8 @@ void ProcessGDBRemote::BuildDynamicRegisterInfo(bool force) { } // We have to make a temporary ABI here, and not use the GetABI because - // this code - // gets called in DidAttach, when the target architecture (and - // consequently the ABI we'll get from - // the process) may be wrong. + // this code gets called in DidAttach, when the target architecture + // (and consequently the ABI we'll get from the process) may be wrong. ABISP abi_to_use = ABI::FindPlugin(shared_from_this(), arch_to_use); AugmentRegisterInfoViaABI(reg_info, reg_name, abi_to_use); @@ -624,9 +620,9 @@ void ProcessGDBRemote::BuildDynamicRegisterInfo(bool force) { // We didn't get anything if the accumulated reg_num is zero. See if we are // debugging ARM and fill with a hard coded register set until we can get an - // updated debugserver down on the devices. - // On the other hand, if the accumulated reg_num is positive, see if we can - // add composite registers to the existing primordial ones. + // updated debugserver down on the devices. On the other hand, if the + // accumulated reg_num is positive, see if we can add composite registers to + // the existing primordial ones. bool from_scratch = (m_register_info.GetNumRegisters() == 0); if (!target_arch.IsValid()) { @@ -673,9 +669,8 @@ Status ProcessGDBRemote::DoConnectRemote(Stream *strm, lldb::pid_t pid = m_gdb_comm.GetCurrentProcessID(); if (pid == LLDB_INVALID_PROCESS_ID) { - // We don't have a valid process ID, so note that we are connected - // and could now request to launch or attach, or get remote process - // listings... + // We don't have a valid process ID, so note that we are connected and + // could now request to launch or attach, or get remote process listings... SetPrivateState(eStateConnected); } else { // We have a valid process @@ -725,7 +720,8 @@ Status ProcessGDBRemote::DoConnectRemote(Stream *strm, if (error.Success() && !GetTarget().GetArchitecture().IsValid() && m_gdb_comm.GetHostArchitecture().IsValid()) { - // Prefer the *process'* architecture over that of the *host*, if available. + // Prefer the *process'* architecture over that of the *host*, if + // available. if (m_gdb_comm.GetProcessArchitecture().IsValid()) GetTarget().SetArchitecture(m_gdb_comm.GetProcessArchitecture()); else @@ -804,8 +800,8 @@ Status ProcessGDBRemote::DoLaunch(Module *exe_module, const bool disable_stdio = (launch_flags & eLaunchFlagDisableSTDIO) != 0; if (stdin_file_spec || disable_stdio) { - // the inferior will be reading stdin from the specified file - // or stdio is completely disabled + // the inferior will be reading stdin from the specified file or stdio is + // completely disabled m_stdin_forward = false; } else { m_stdin_forward = true; @@ -999,16 +995,15 @@ Status ProcessGDBRemote::ConnectToDebugserver(llvm::StringRef connect_url) { return error; } - // Start the communications read thread so all incoming data can be - // parsed into packets and queued as they arrive. + // Start the communications read thread so all incoming data can be parsed + // into packets and queued as they arrive. if (GetTarget().GetNonStopModeEnabled()) m_gdb_comm.StartReadThread(); - // We always seem to be able to open a connection to a local port - // so we need to make sure we can then send data to it. If we can't - // then we aren't actually connected to anything, so try and do the - // handshake with the remote GDB server and make sure that goes - // alright. + // We always seem to be able to open a connection to a local port so we need + // to make sure we can then send data to it. If we can't then we aren't + // actually connected to anything, so try and do the handshake with the + // remote GDB server and make sure that goes alright. if (!m_gdb_comm.HandshakeWithServer(&error)) { m_gdb_comm.Disconnect(); if (error.Success()) @@ -1050,9 +1045,9 @@ void ProcessGDBRemote::DidLaunchOrAttach(ArchSpec &process_arch) { // See if the GDB server supports the qHostInfo information - // See if the GDB server supports the qProcessInfo packet, if so - // prefer that over the Host information as it will be more specific - // to our process. + // See if the GDB server supports the qProcessInfo packet, if so prefer + // that over the Host information as it will be more specific to our + // process. const ArchSpec &remote_process_arch = m_gdb_comm.GetProcessArchitecture(); if (remote_process_arch.IsValid()) { @@ -1097,9 +1092,8 @@ void ProcessGDBRemote::DidLaunchOrAttach(ArchSpec &process_arch) { // architectures. // You can have an armv6 executable, and if the host is armv7, then the // system will load the best possible architecture for all shared - // libraries - // it has, so we really need to take the remote host architecture as our - // defacto architecture in this case. + // libraries it has, so we really need to take the remote host + // architecture as our defacto architecture in this case. if ((process_arch.GetMachine() == llvm::Triple::arm || process_arch.GetMachine() == llvm::Triple::thumb) && @@ -1145,14 +1139,14 @@ void ProcessGDBRemote::DidLaunchOrAttach(ArchSpec &process_arch) { ? target_arch.GetTriple().getTriple().c_str() : "<null>"); } else { - // The target doesn't have a valid architecture yet, set it from - // the architecture we got from the remote GDB server + // The target doesn't have a valid architecture yet, set it from the + // architecture we got from the remote GDB server GetTarget().SetArchitecture(process_arch); } } - // Find out which StructuredDataPlugins are supported by the - // debug monitor. These plugins transmit data over async $J packets. + // Find out which StructuredDataPlugins are supported by the debug monitor. + // These plugins transmit data over async $J packets. auto supported_packets_array = m_gdb_comm.GetSupportedStructuredDataPlugins(); if (supported_packets_array) @@ -1360,9 +1354,9 @@ Status ProcessGDBRemote::DoResume() { continue_packet_error = true; if (continue_packet_error) { - // Either no vCont support, or we tried to use part of the vCont - // packet that wasn't supported by the remote GDB server. - // We need to try and make a simple packet that can do our continue + // Either no vCont support, or we tried to use part of the vCont packet + // that wasn't supported by the remote GDB server. We need to try and + // make a simple packet that can do our continue const size_t num_continue_c_tids = m_continue_c_tids.size(); const size_t num_continue_C_tids = m_continue_C_tids.size(); const size_t num_continue_s_tids = m_continue_s_tids.size(); @@ -1389,11 +1383,10 @@ Status ProcessGDBRemote::DoResume() { const int continue_signo = m_continue_C_tids.front().second; // Only one thread is continuing if (num_continue_C_tids > 1) { - // More that one thread with a signal, yet we don't have - // vCont support and we are being asked to resume each - // thread with a signal, we need to make sure they are - // all the same signal, or we can't issue the continue - // accurately with the current support... + // More that one thread with a signal, yet we don't have vCont + // support and we are being asked to resume each thread with a + // signal, we need to make sure they are all the same signal, or we + // can't issue the continue accurately with the current support... if (num_continue_C_tids > 1) { continue_packet_error = false; for (size_t i = 1; i < m_continue_C_tids.size(); ++i) { @@ -1670,9 +1663,8 @@ bool ProcessGDBRemote::UpdateThreadList(ThreadList &old_thread_list, } } - // Whatever that is left in old_thread_list_copy are not - // present in new_thread_list. Remove non-existent threads from internal id - // table. + // Whatever that is left in old_thread_list_copy are not present in + // new_thread_list. Remove non-existent threads from internal id table. size_t old_num_thread_ids = old_thread_list_copy.GetSize(false); for (size_t i = 0; i < old_num_thread_ids; i++) { ThreadSP old_thread_sp(old_thread_list_copy.GetThreadAtIndex(i, false)); @@ -1733,12 +1725,11 @@ bool ProcessGDBRemote::CalculateThreadStopInfo(ThreadGDBRemote *thread) { return true; // See if we got thread stop info for any threads valid stop info reasons - // threads - // via the "jstopinfo" packet stop reply packet key/value pair? + // threads via the "jstopinfo" packet stop reply packet key/value pair? if (m_jstopinfo_sp) { // If we have "jstopinfo" then we have stop descriptions for all threads - // that have stop reasons, and if there is no entry for a thread, then - // it has no stop reason. + // that have stop reasons, and if there is no entry for a thread, then it + // has no stop reason. thread->GetRegisterContext()->InvalidateIfNeeded(true); if (!GetThreadStopInfoFromJSON(thread, m_jstopinfo_sp)) { thread->SetStopInfo(StopInfoSP()); @@ -1766,9 +1757,8 @@ ThreadSP ProcessGDBRemote::SetThreadStopInfo( if (tid != LLDB_INVALID_THREAD_ID) { // Scope for "locker" below { - // m_thread_list_real does have its own mutex, but we need to - // hold onto the mutex between the call to - // m_thread_list_real.FindThreadByID(...) + // m_thread_list_real does have its own mutex, but we need to hold onto + // the mutex between the call to m_thread_list_real.FindThreadByID(...) // and the m_thread_list_real.AddThread(...) so it doesn't change on us std::lock_guard<std::recursive_mutex> guard( m_thread_list_real.GetMutex()); @@ -1846,9 +1836,9 @@ ThreadSP ProcessGDBRemote::SetThreadStopInfo( ->GetBreakpointSiteList() .FindByAddress(pc); - // If the current pc is a breakpoint site then the StopInfo should - // be set to Breakpoint - // Otherwise, it will be set to Trace. + // If the current pc is a breakpoint site then the StopInfo + // should be set to Breakpoint Otherwise, it will be set to + // Trace. if (bp_site_sp && bp_site_sp->ValidForThisThread(thread_sp.get())) { thread_sp->SetStopInfo( @@ -1865,11 +1855,10 @@ ThreadSP ProcessGDBRemote::SetThreadStopInfo( .FindByAddress(pc); if (bp_site_sp) { // If the breakpoint is for this thread, then we'll report the - // hit, but if it is for another thread, - // we can just report no reason. We don't need to worry about - // stepping over the breakpoint here, that - // will be taken care of when the thread resumes and notices - // that there's a breakpoint under the pc. + // hit, but if it is for another thread, we can just report no + // reason. We don't need to worry about stepping over the + // breakpoint here, that will be taken care of when the thread + // resumes and notices that there's a breakpoint under the pc. handled = true; if (bp_site_sp->ValidForThisThread(thread_sp.get())) { thread_sp->SetStopInfo( @@ -1931,13 +1920,10 @@ ThreadSP ProcessGDBRemote::SetThreadStopInfo( pc); // If the current pc is a breakpoint site then the StopInfo should - // be set to Breakpoint - // even though the remote stub did not set it as such. This can - // happen when - // the thread is involuntarily interrupted (e.g. due to stops on - // other - // threads) just as it is about to execute the breakpoint - // instruction. + // be set to Breakpoint even though the remote stub did not set it + // as such. This can happen when the thread is involuntarily + // interrupted (e.g. due to stops on other threads) just as it is + // about to execute the breakpoint instruction. if (bp_site_sp && bp_site_sp->ValidForThisThread(thread_sp.get())) { thread_sp->SetStopInfo( StopInfo::CreateStopReasonWithBreakpointSiteID( @@ -1959,11 +1945,10 @@ ThreadSP ProcessGDBRemote::SetThreadStopInfo( if (bp_site_sp) { // If the breakpoint is for this thread, then we'll report the - // hit, but if it is for another thread, - // we can just report no reason. We don't need to worry about - // stepping over the breakpoint here, that - // will be taken care of when the thread resumes and notices - // that there's a breakpoint under the pc. + // hit, but if it is for another thread, we can just report no + // reason. We don't need to worry about stepping over the + // breakpoint here, that will be taken care of when the thread + // resumes and notices that there's a breakpoint under the pc. if (bp_site_sp->ValidForThisThread(thread_sp.get())) { if (m_breakpoint_pc_offset != 0) thread_sp->GetRegisterContext()->SetPC(pc); @@ -1976,8 +1961,7 @@ ThreadSP ProcessGDBRemote::SetThreadStopInfo( } } else { // If we were stepping then assume the stop was the result of - // the trace. If we were - // not stepping then report the SIGTRAP. + // the trace. If we were not stepping then report the SIGTRAP. // FIXME: We are still missing the case where we single step // over a trap instruction. if (thread_sp->GetTemporaryResumeState() == eStateStepping) @@ -2172,15 +2156,15 @@ StateType ProcessGDBRemote::SetThreadStopInfo(StringExtractor &stop_packet) { switch (stop_type) { case 'T': case 'S': { - // This is a bit of a hack, but is is required. If we did exec, we - // need to clear our thread lists and also know to rebuild our dynamic - // register info before we lookup and threads and populate the expedited - // register values so we need to know this right away so we can cleanup - // and update our registers. + // This is a bit of a hack, but is is required. If we did exec, we need to + // clear our thread lists and also know to rebuild our dynamic register + // info before we lookup and threads and populate the expedited register + // values so we need to know this right away so we can cleanup and update + // our registers. const uint32_t stop_id = GetStopID(); if (stop_id == 0) { - // Our first stop, make sure we have a process ID, and also make - // sure we know about our registers + // Our first stop, make sure we have a process ID, and also make sure we + // know about our registers if (GetID() == LLDB_INVALID_PROCESS_ID) { lldb::pid_t pid = m_gdb_comm.GetCurrentProcessID(); if (pid != LLDB_INVALID_PROCESS_ID) @@ -2226,8 +2210,7 @@ StateType ProcessGDBRemote::SetThreadStopInfo(StringExtractor &stop_packet) { m_thread_ids.clear(); // A comma separated list of all threads in the current - // process that includes the thread for this stop reply - // packet + // process that includes the thread for this stop reply packet lldb::tid_t tid; while (!value.empty()) { llvm::StringRef tid_str; @@ -2239,8 +2222,7 @@ StateType ProcessGDBRemote::SetThreadStopInfo(StringExtractor &stop_packet) { } else if (key.compare("thread-pcs") == 0) { m_thread_pcs.clear(); // A comma separated list of all threads in the current - // process that includes the thread for this stop reply - // packet + // process that includes the thread for this stop reply packet lldb::addr_t pc; while (!value.empty()) { llvm::StringRef pc_str; @@ -2292,13 +2274,10 @@ StateType ProcessGDBRemote::SetThreadStopInfo(StringExtractor &stop_packet) { desc_extractor.GetHexByteString(description); } else if (key.compare("memory") == 0) { // Expedited memory. GDB servers can choose to send back expedited - // memory - // that can populate the L1 memory cache in the process so that things - // like - // the frame pointer backchain can be expedited. This will help stack - // backtracing be more efficient by not having to send as many memory - // read - // requests down the remote GDB server. + // memory that can populate the L1 memory cache in the process so that + // things like the frame pointer backchain can be expedited. This will + // help stack backtracing be more efficient by not having to send as + // many memory read requests down the remote GDB server. // Key/value pair format: memory:<addr>=<bytes>; // <addr> is a number whose base will be interpreted by the prefix: @@ -2350,7 +2329,8 @@ StateType ProcessGDBRemote::SetThreadStopInfo(StringExtractor &stop_packet) { if (tid == LLDB_INVALID_THREAD_ID) { // A thread id may be invalid if the response is old style 'S' packet // which does not provide the - // thread information. So update the thread list and choose the first one. + // thread information. So update the thread list and choose the first + // one. UpdateThreadIDList(); if (!m_thread_ids.empty()) { @@ -2383,9 +2363,9 @@ void ProcessGDBRemote::RefreshStateAfterStop() { m_thread_ids.clear(); m_thread_pcs.clear(); - // Set the thread stop info. It might have a "threads" key whose value is - // a list of all thread IDs in the current process, so m_thread_ids might - // get set. + // Set the thread stop info. It might have a "threads" key whose value is a + // list of all thread IDs in the current process, so m_thread_ids might get + // set. // Scope for the lock { @@ -2416,8 +2396,8 @@ void ProcessGDBRemote::RefreshStateAfterStop() { m_initial_tid = LLDB_INVALID_THREAD_ID; } - // Let all threads recover from stopping and do any clean up based - // on the previous thread state (if any). + // Let all threads recover from stopping and do any clean up based on the + // previous thread state (if any). m_thread_list_real.RefreshStateAfterStop(); } @@ -2425,8 +2405,8 @@ Status ProcessGDBRemote::DoHalt(bool &caused_stop) { Status error; if (m_public_state.GetValue() == eStateAttaching) { - // We are being asked to halt during an attach. We need to just close - // our file handle and debugserver will go away, and we can be done... + // We are being asked to halt during an attach. We need to just close our + // file handle and debugserver will go away, and we can be done... m_gdb_comm.Disconnect(); } else caused_stop = m_gdb_comm.Interrupt(); @@ -2469,31 +2449,24 @@ Status ProcessGDBRemote::DoDestroy() { log->Printf("ProcessGDBRemote::DoDestroy()"); // There is a bug in older iOS debugservers where they don't shut down the - // process - // they are debugging properly. If the process is sitting at a breakpoint or - // an exception, - // this can cause problems with restarting. So we check to see if any of our - // threads are stopped - // at a breakpoint, and if so we remove all the breakpoints, resume the - // process, and THEN - // destroy it again. + // process they are debugging properly. If the process is sitting at a + // breakpoint or an exception, this can cause problems with restarting. So + // we check to see if any of our threads are stopped at a breakpoint, and if + // so we remove all the breakpoints, resume the process, and THEN destroy it + // again. // // Note, we don't have a good way to test the version of debugserver, but I - // happen to know that - // the set of all the iOS debugservers which don't support - // GetThreadSuffixSupported() and that of - // the debugservers with this bug are equal. There really should be a better - // way to test this! + // happen to know that the set of all the iOS debugservers which don't + // support GetThreadSuffixSupported() and that of the debugservers with this + // bug are equal. There really should be a better way to test this! // // We also use m_destroy_tried_resuming to make sure we only do this once, if - // we resume and then halt and - // get called here to destroy again and we're still at a breakpoint or - // exception, then we should - // just do the straight-forward kill. + // we resume and then halt and get called here to destroy again and we're + // still at a breakpoint or exception, then we should just do the straight- + // forward kill. // // And of course, if we weren't able to stop the process by the time we get - // here, it isn't - // necessary (or helpful) to do any of this. + // here, it isn't necessary (or helpful) to do any of this. if (!m_gdb_comm.GetThreadSuffixSupported() && m_public_state.GetValue() != eStateRunning) { @@ -2508,9 +2481,8 @@ Status ProcessGDBRemote::DoDestroy() { "destroy once already, not doing it again."); } else { // At present, the plans are discarded and the breakpoints disabled - // Process::Destroy, - // but we really need it to happen here and it doesn't matter if we do - // it twice. + // Process::Destroy, but we really need it to happen here and it + // doesn't matter if we do it twice. m_thread_list.DiscardThreadPlans(); DisableAllBreakpointSites(); @@ -2547,12 +2519,11 @@ Status ProcessGDBRemote::DoDestroy() { m_destroy_tried_resuming = true; // If we are going to run again before killing, it would be good to - // suspend all the threads - // before resuming so they won't get into more trouble. Sadly, for - // the threads stopped with - // the breakpoint or exception, the exception doesn't get cleared if - // it is suspended, so we do - // have to run the risk of letting those threads proceed a bit. + // suspend all the threads before resuming so they won't get into + // more trouble. Sadly, for the threads stopped with the breakpoint + // or exception, the exception doesn't get cleared if it is + // suspended, so we do have to run the risk of letting those threads + // proceed a bit. { std::lock_guard<std::recursive_mutex> guard(threads.GetMutex()); @@ -2599,17 +2570,14 @@ Status ProcessGDBRemote::DoDestroy() { if (packet_cmd == 'W' || packet_cmd == 'X') { #if defined(__APPLE__) // For Native processes on Mac OS X, we launch through the Host - // Platform, then hand the process off - // to debugserver, which becomes the parent process through - // "PT_ATTACH". Then when we go to kill - // the process on Mac OS X we call ptrace(PT_KILL) to kill it, then we - // call waitpid which returns - // with no error and the correct status. But amusingly enough that - // doesn't seem to actually reap + // Platform, then hand the process off to debugserver, which becomes + // the parent process through "PT_ATTACH". Then when we go to kill + // the process on Mac OS X we call ptrace(PT_KILL) to kill it, then + // we call waitpid which returns with no error and the correct + // status. But amusingly enough that doesn't seem to actually reap // the process, but instead it is left around as a Zombie. Probably - // the kernel is in the process of - // switching ownership back to lldb which was the original parent, and - // gets confused in the handoff. + // the kernel is in the process of switching ownership back to lldb + // which was the original parent, and gets confused in the handoff. // Anyway, so call waitpid here to finally reap it. PlatformSP platform_sp(GetTarget().GetPlatform()); if (platform_sp && platform_sp->IsHost()) { @@ -2681,9 +2649,8 @@ void ProcessGDBRemote::SetLastStopPacket( if (GetTarget().GetNonStopModeEnabled() == false) m_stop_packet_stack.clear(); - // Add this stop packet to the stop packet stack - // This stack will get popped and examined when we switch to the - // Stopped state + // Add this stop packet to the stop packet stack This stack will get popped + // and examined when we switch to the Stopped state m_stop_packet_stack.push_back(response); } } @@ -2715,12 +2682,11 @@ addr_t ProcessGDBRemote::GetImageInfoAddress() { } void ProcessGDBRemote::WillPublicStop() { - // See if the GDB remote client supports the JSON threads info. - // If so, we gather stop info for all threads, expedited registers, - // expedited memory, runtime queue information (iOS and MacOSX only), - // and more. Expediting memory will help stack backtracing be much - // faster. Expediting registers will make sure we don't have to read - // the thread registers for GPRs. + // See if the GDB remote client supports the JSON threads info. If so, we + // gather stop info for all threads, expedited registers, expedited memory, + // runtime queue information (iOS and MacOSX only), and more. Expediting + // memory will help stack backtracing be much faster. Expediting registers + // will make sure we don't have to read the thread registers for GPRs. m_jthreadsinfo_sp = m_gdb_comm.GetThreadsInfo(); if (m_jthreadsinfo_sp) { @@ -2770,14 +2736,13 @@ size_t ProcessGDBRemote::DoReadMemory(addr_t addr, void *buf, size_t size, error.Clear(); if (binary_memory_read) { // The lower level GDBRemoteCommunication packet receive layer has - // already de-quoted any - // 0x7d character escaping that was present in the packet + // already de-quoted any 0x7d character escaping that was present in + // the packet size_t data_received_size = response.GetBytesLeft(); if (data_received_size > size) { // Don't write past the end of BUF if the remote debug server gave us - // too - // much data for some reason. + // too much data for some reason. data_received_size = size; } memcpy(buf, response.GetStringRef().data(), data_received_size); @@ -2816,10 +2781,10 @@ Status ProcessGDBRemote::WriteObjectFile( if (error.Success()) error = FlashDone(); else - // Even though some of the writing failed, try to send a flash done if - // some of the writing succeeded so the flash state is reset to normal, - // but don't stomp on the error status that was set in the write failure - // since that's the one we want to report back. + // Even though some of the writing failed, try to send a flash done if some + // of the writing succeeded so the flash state is reset to normal, but + // don't stomp on the error status that was set in the write failure since + // that's the one we want to report back. FlashDone(); m_allow_flash_writes = false; return error; @@ -2869,17 +2834,17 @@ Status ProcessGDBRemote::FlashErase(lldb::addr_t addr, size_t size) { return status; // We haven't erased the entire range, but we may have erased part of it. - // (e.g., block A is already erased and range starts in A and ends in B). - // So, adjust range if necessary to exclude already erased blocks. + // (e.g., block A is already erased and range starts in A and ends in B). So, + // adjust range if necessary to exclude already erased blocks. if (!m_erased_flash_ranges.IsEmpty()) { // Assuming that writes and erasures are done in increasing addr order, - // because that is a requirement of the vFlashWrite command. Therefore, - // we only need to look at the last range in the list for overlap. + // because that is a requirement of the vFlashWrite command. Therefore, we + // only need to look at the last range in the list for overlap. const auto &last_range = *m_erased_flash_ranges.Back(); if (range.GetRangeBase() < last_range.GetRangeEnd()) { auto overlap = last_range.GetRangeEnd() - range.GetRangeBase(); - // overlap will be less than range.GetByteSize() or else HasErased() would - // have been true + // overlap will be less than range.GetByteSize() or else HasErased() + // would have been true range.SetByteSize(range.GetByteSize() - overlap); range.SetRangeBase(range.GetRangeBase() + overlap); } @@ -3074,8 +3039,8 @@ Status ProcessGDBRemote::DoDeallocateMemory(lldb::addr_t addr) { switch (supported) { case eLazyBoolCalculate: - // We should never be deallocating memory without allocating memory - // first so we should never get eLazyBoolCalculate + // We should never be deallocating memory without allocating memory first + // so we should never get eLazyBoolCalculate error.SetErrorString( "tried to deallocate memory without ever allocating memory"); break; @@ -3147,18 +3112,14 @@ Status ProcessGDBRemote::EnableBreakpointSite(BreakpointSite *bp_site) { const size_t bp_op_size = GetSoftwareBreakpointTrapOpcode(bp_site); // SupportsGDBStoppointPacket() simply checks a boolean, indicating if this - // breakpoint type - // is supported by the remote stub. These are set to true by default, and - // later set to false - // only after we receive an unimplemented response when sending a breakpoint - // packet. This means - // initially that unless we were specifically instructed to use a hardware - // breakpoint, LLDB will - // attempt to set a software breakpoint. HardwareRequired() also queries a - // boolean variable which - // indicates if the user specifically asked for hardware breakpoints. If true - // then we will - // skip over software breakpoints. + // breakpoint type is supported by the remote stub. These are set to true by + // default, and later set to false only after we receive an unimplemented + // response when sending a breakpoint packet. This means initially that + // unless we were specifically instructed to use a hardware breakpoint, LLDB + // will attempt to set a software breakpoint. HardwareRequired() also queries + // a boolean variable which indicates if the user specifically asked for + // hardware breakpoints. If true then we will skip over software + // breakpoints. if (m_gdb_comm.SupportsGDBStoppointPacket(eBreakpointSoftware) && (!bp_site->HardwareRequired())) { // Try to send off a software breakpoint packet ($Z0) @@ -3171,19 +3132,14 @@ Status ProcessGDBRemote::EnableBreakpointSite(BreakpointSite *bp_site) { return error; } - // SendGDBStoppointTypePacket() will return an error if it was unable to set - // this - // breakpoint. We need to differentiate between a error specific to placing - // this breakpoint - // or if we have learned that this breakpoint type is unsupported. To do - // this, we - // must test the support boolean for this breakpoint type to see if it now - // indicates that - // this breakpoint type is unsupported. If they are still supported then we - // should return + // SendGDBStoppointTypePacket() will return an error if it was unable to + // set this breakpoint. We need to differentiate between a error specific + // to placing this breakpoint or if we have learned that this breakpoint + // type is unsupported. To do this, we must test the support boolean for + // this breakpoint type to see if it now indicates that this breakpoint + // type is unsupported. If they are still supported then we should return // with the error code. If they are now unsupported, then we would like to - // fall through - // and try another form of breakpoint. + // fall through and try another form of breakpoint. if (m_gdb_comm.SupportsGDBStoppointPacket(eBreakpointSoftware)) { if (error_no != UINT8_MAX) error.SetErrorStringWithFormat( @@ -3194,21 +3150,18 @@ Status ProcessGDBRemote::EnableBreakpointSite(BreakpointSite *bp_site) { } // We reach here when software breakpoints have been found to be - // unsupported. For future - // calls to set a breakpoint, we will not attempt to set a breakpoint with a - // type that is - // known not to be supported. + // unsupported. For future calls to set a breakpoint, we will not attempt + // to set a breakpoint with a type that is known not to be supported. if (log) log->Printf("Software breakpoints are unsupported"); // So we will fall through and try a hardware breakpoint } - // The process of setting a hardware breakpoint is much the same as above. We - // check the - // supported boolean for this breakpoint type, and if it is thought to be - // supported then we - // will try to set this breakpoint with a hardware breakpoint. + // The process of setting a hardware breakpoint is much the same as above. + // We check the supported boolean for this breakpoint type, and if it is + // thought to be supported then we will try to set this breakpoint with a + // hardware breakpoint. if (m_gdb_comm.SupportsGDBStoppointPacket(eBreakpointHardware)) { // Try to send off a hardware breakpoint packet ($Z1) uint8_t error_no = m_gdb_comm.SendGDBStoppointTypePacket( @@ -3250,8 +3203,8 @@ Status ProcessGDBRemote::EnableBreakpointSite(BreakpointSite *bp_site) { return error; } - // As a last resort we want to place a manual breakpoint. An instruction - // is placed into the process memory using memory write packets. + // As a last resort we want to place a manual breakpoint. An instruction is + // placed into the process memory using memory write packets. return EnableSoftwareBreakpoint(bp_site); } @@ -3381,10 +3334,9 @@ Status ProcessGDBRemote::DisableWatchpoint(Watchpoint *wp, bool notify) { log->Printf("ProcessGDBRemote::DisableWatchpoint (watchID = %" PRIu64 ") addr = 0x%8.8" PRIx64 " -- SUCCESS (already disabled)", watchID, (uint64_t)addr); - // See also 'class WatchpointSentry' within StopInfo.cpp. - // This disabling attempt might come from the user-supplied actions, we'll - // route it in order for - // the watchpoint object to intelligently process this action. + // See also 'class WatchpointSentry' within StopInfo.cpp. This disabling + // attempt might come from the user-supplied actions, we'll route it in + // order for the watchpoint object to intelligently process this action. wp->SetEnabled(false, notify); return error; } @@ -3469,8 +3421,8 @@ Status ProcessGDBRemote::LaunchAndConnectToDebugserver( static FileSpec g_debugserver_file_spec; ProcessLaunchInfo debugserver_launch_info; - // Make debugserver run in its own session so signals generated by - // special terminal key sequences (^C) don't affect debugserver. + // Make debugserver run in its own session so signals generated by special + // terminal key sequences (^C) don't affect debugserver. debugserver_launch_info.SetLaunchInSeparateProcessGroup(true); const std::weak_ptr<ProcessGDBRemote> this_wp = @@ -3510,8 +3462,8 @@ Status ProcessGDBRemote::LaunchAndConnectToDebugserver( if (m_debugserver_pid != LLDB_INVALID_PROCESS_ID) { #ifdef USE_SOCKETPAIR_FOR_LOCAL_CONNECTION - // Our process spawned correctly, we can now set our connection to use our - // end of the socket pair + // Our process spawned correctly, we can now set our connection to use + // our end of the socket pair cleanup_our.disable(); m_gdb_comm.SetConnection(new ConnectionFileDescriptor(our_socket, true)); #endif @@ -3528,8 +3480,8 @@ Status ProcessGDBRemote::LaunchAndConnectToDebugserver( } if (m_gdb_comm.IsConnected()) { - // Finish the connection process by doing the handshake without connecting - // (send NULL URL) + // Finish the connection process by doing the handshake without + // connecting (send NULL URL) ConnectToDebugserver(""); } else { error.SetErrorString("connection failed"); @@ -3544,8 +3496,8 @@ bool ProcessGDBRemote::MonitorDebugserverProcess( int signo, // Zero for no signal int exit_status // Exit value of process if signal is zero ) { - // "debugserver_pid" argument passed in is the process ID for - // debugserver that we are tracking... + // "debugserver_pid" argument passed in is the process ID for debugserver + // that we are tracking... Log *log(ProcessGDBRemoteLog::GetLogIfAllCategoriesSet(GDBR_LOG_PROCESS)); const bool handled = true; @@ -3561,12 +3513,12 @@ bool ProcessGDBRemote::MonitorDebugserverProcess( if (!process_sp || process_sp->m_debugserver_pid != debugserver_pid) return handled; - // Sleep for a half a second to make sure our inferior process has - // time to set its exit status before we set it incorrectly when - // both the debugserver and the inferior process shut down. + // Sleep for a half a second to make sure our inferior process has time to + // set its exit status before we set it incorrectly when both the debugserver + // and the inferior process shut down. usleep(500000); - // If our process hasn't yet exited, debugserver might have died. - // If the process did exit, then we are reaping it. + // If our process hasn't yet exited, debugserver might have died. If the + // process did exit, then we are reaping it. const StateType state = process_sp->GetState(); if (state != eStateInvalid && state != eStateUnloaded && @@ -3589,8 +3541,8 @@ bool ProcessGDBRemote::MonitorDebugserverProcess( process_sp->SetExitStatus(-1, error_str); } - // Debugserver has exited we need to let our ProcessGDBRemote - // know that it no longer has a debugserver instance + // Debugserver has exited we need to let our ProcessGDBRemote know that it no + // longer has a debugserver instance process_sp->m_debugserver_pid = LLDB_INVALID_PROCESS_ID; return handled; } @@ -3680,10 +3632,9 @@ bool ProcessGDBRemote::HandleNotifyPacket(StringExtractorGDBRemote &packet) { // check for more stop reasons HandleStopReplySequence(); - // if the process is stopped then we need to fake a resume - // so that we can stop properly with the new break. This - // is possible due to SetPrivateState() broadcasting the - // state change as a side effect. + // if the process is stopped then we need to fake a resume so that we can + // stop properly with the new break. This is possible due to + // SetPrivateState() broadcasting the state change as a side effect. if (GetPrivateState() == lldb::StateType::eStateStopped) { SetPrivateState(lldb::StateType::eStateRunning); } @@ -3756,12 +3707,11 @@ thread_result_t ProcessGDBRemote::AsyncThread(void *arg) { response); // We need to immediately clear the thread ID list so we are sure - // to get a valid list of threads. - // The thread ID list might be contained within the "response", or - // the stop reply packet that + // to get a valid list of threads. The thread ID list might be + // contained within the "response", or the stop reply packet that // caused the stop. So clear it now before we give the stop reply - // packet to the process - // using the process->SetLastStopPacket()... + // packet to the process using the + // process->SetLastStopPacket()... process->ClearThreadIDList(); switch (stop_state) { @@ -3798,8 +3748,7 @@ thread_result_t ProcessGDBRemote::AsyncThread(void *arg) { // Check to see if we were trying to attach and if we got back // the "E87" error code from debugserver -- this indicates that // the process is not debuggable. Return a slightly more - // helpful - // error message about why the attach failed. + // helpful error message about why the attach failed. if (::strstr(continue_cstr, "vAttach") != NULL && response.GetError() == 0x87) { process->SetExitStatus(-1, "cannot attach to process due to " @@ -3918,8 +3867,8 @@ Status ProcessGDBRemote::UpdateAutomaticSignalFiltering() { Log *log(ProcessGDBRemoteLog::GetLogIfAllCategoriesSet(GDBR_LOG_PROCESS)); LLDB_LOG(log, "Check if need to update ignored signals"); - // QPassSignals package is not supported by the server, - // there is no way we can ignore any signals on server side. + // QPassSignals package is not supported by the server, there is no way we + // can ignore any signals on server side. if (!m_gdb_comm.GetQPassSignalsSupported()) return Status(); @@ -4043,9 +3992,9 @@ ProcessGDBRemote::GetExtendedInfoForThread(lldb::tid_t tid) { // FIXME the final character of a JSON dictionary, '}', is the escape // character in gdb-remote binary mode. lldb currently doesn't escape - // these characters in its packet output -- so we add the quoted version - // of the } character here manually in case we talk to a debugserver which - // un-escapes the characters at packet read time. + // these characters in its packet output -- so we add the quoted version of + // the } character here manually in case we talk to a debugserver which un- + // escapes the characters at packet read time. packet << (char)(0x7d ^ 0x20); StringExtractorGDBRemote response; @@ -4115,9 +4064,9 @@ ProcessGDBRemote::GetLoadedDynamicLibrariesInfos_sender( // FIXME the final character of a JSON dictionary, '}', is the escape // character in gdb-remote binary mode. lldb currently doesn't escape - // these characters in its packet output -- so we add the quoted version - // of the } character here manually in case we talk to a debugserver which - // un-escapes the characters at packet read time. + // these characters in its packet output -- so we add the quoted version of + // the } character here manually in case we talk to a debugserver which un- + // escapes the characters at packet read time. packet << (char)(0x7d ^ 0x20); StringExtractorGDBRemote response; @@ -4148,9 +4097,9 @@ StructuredData::ObjectSP ProcessGDBRemote::GetSharedCacheInfo() { // FIXME the final character of a JSON dictionary, '}', is the escape // character in gdb-remote binary mode. lldb currently doesn't escape - // these characters in its packet output -- so we add the quoted version - // of the } character here manually in case we talk to a debugserver which - // un-escapes the characters at packet read time. + // these characters in its packet output -- so we add the quoted version of + // the } character here manually in case we talk to a debugserver which un- + // escapes the characters at packet read time. packet << (char)(0x7d ^ 0x20); StringExtractorGDBRemote response; @@ -4175,14 +4124,14 @@ Status ProcessGDBRemote::ConfigureStructuredData( return m_gdb_comm.ConfigureRemoteStructuredData(type_name, config_sp); } -// Establish the largest memory read/write payloads we should use. -// If the remote stub has a max packet size, stay under that size. +// Establish the largest memory read/write payloads we should use. If the +// remote stub has a max packet size, stay under that size. // -// If the remote stub's max packet size is crazy large, use a -// reasonable largeish default. +// If the remote stub's max packet size is crazy large, use a reasonable +// largeish default. // -// If the remote stub doesn't advertise a max packet size, use a -// conservative default. +// If the remote stub doesn't advertise a max packet size, use a conservative +// default. void ProcessGDBRemote::GetMaxMemorySize() { const uint64_t reasonable_largeish_default = 128 * 1024; @@ -4194,15 +4143,15 @@ void ProcessGDBRemote::GetMaxMemorySize() { // Save the stub's claimed maximum packet size m_remote_stub_max_memory_size = stub_max_size; - // Even if the stub says it can support ginormous packets, - // don't exceed our reasonable largeish default packet size. + // Even if the stub says it can support ginormous packets, don't exceed + // our reasonable largeish default packet size. if (stub_max_size > reasonable_largeish_default) { stub_max_size = reasonable_largeish_default; } - // Memory packet have other overheads too like Maddr,size:#NN - // Instead of calculating the bytes taken by size and addr every - // time, we take a maximum guess here. + // Memory packet have other overheads too like Maddr,size:#NN Instead of + // calculating the bytes taken by size and addr every time, we take a + // maximum guess here. if (stub_max_size > 70) stub_max_size -= 32 + 32 + 6; else { @@ -4293,8 +4242,8 @@ bool ProcessGDBRemote::GetHostOSVersion(uint32_t &major, uint32_t &minor, uint32_t &update) { if (m_gdb_comm.GetOSVersion(major, minor, update)) return true; - // We failed to get the host OS version, defer to the base - // implementation to correctly invalidate the arguments. + // We failed to get the host OS version, defer to the base implementation to + // correctly invalidate the arguments. return Process::GetHostOSVersion(major, minor, update); } @@ -4460,8 +4409,8 @@ bool ParseRegisters(XMLNode feature_node, GdbServerTargetInfo &target_info, } // Only update the register set name if we didn't get a "reg_set" + // attribute. "set_name" will be empty if we didn't have a "reg_set" // attribute. - // "set_name" will be empty if we didn't have a "reg_set" attribute. if (!set_name && !gdb_group.empty()) set_name.SetCString(gdb_group.c_str()); @@ -4488,8 +4437,8 @@ bool ParseRegisters(XMLNode feature_node, GdbServerTargetInfo &target_info, } // namespace {} -// query the target of gdb-remote for extended target information -// return: 'true' on success +// query the target of gdb-remote for extended target information return: +// 'true' on success // 'false' on failure bool ProcessGDBRemote::GetGDBServerRegisterInfo(ArchSpec &arch_to_use) { // Make sure LLDB has an XML parser it can use first @@ -4576,10 +4525,9 @@ bool ProcessGDBRemote::GetGDBServerRegisterInfo(ArchSpec &arch_to_use) { uint32_t cur_reg_num = 0; uint32_t reg_offset = 0; - // Don't use Process::GetABI, this code gets called from DidAttach, and in - // that context we haven't - // set the Target's architecture yet, so the ABI is also potentially - // incorrect. + // Don't use Process::GetABI, this code gets called from DidAttach, and + // in that context we haven't set the Target's architecture yet, so the + // ABI is also potentially incorrect. ABISP abi_to_use_sp = ABI::FindPlugin(shared_from_this(), arch_to_use); for (auto &feature_node : feature_nodes) { ParseRegisters(feature_node, target_info, this->m_register_info, @@ -4920,8 +4868,8 @@ void ProcessGDBRemote::ModulesDidLoad(ModuleList &module_list) { // do anything Process::ModulesDidLoad(module_list); - // After loading shared libraries, we can ask our remote GDB server if - // it needs any symbols. + // After loading shared libraries, we can ask our remote GDB server if it + // needs any symbols. m_gdb_comm.ServeSymbolLookups(this); } @@ -4979,8 +4927,8 @@ std::string ProcessGDBRemote::HarmonizeThreadIdsForProfileData( has_used_usec = true; usec_value.getAsInteger(0, curr_used_usec); } else { - // We didn't find what we want, it is probably - // an older version. Bail out. + // We didn't find what we want, it is probably an older version. Bail + // out. profileDataExtractor.SetFilePos(input_file_pos); } } @@ -5002,8 +4950,8 @@ std::string ProcessGDBRemote::HarmonizeThreadIdsForProfileData( ((real_used_usec > 0) || (HasAssignedIndexIDToThread(thread_id))); if (good_first_time || good_subsequent_time) { - // We try to avoid doing too many index id reservation, - // resulting in fast increase of index ids. + // We try to avoid doing too many index id reservation, resulting in + // fast increase of index ids. output_stream << name << ":"; int32_t index_id = AssignIndexIDToThread(thread_id); @@ -5063,8 +5011,7 @@ ParseStructuredDataPacket(llvm::StringRef packet) { return StructuredData::ObjectSP(); } - // This is an asynchronous JSON packet, destined for a - // StructuredDataPlugin. + // This is an asynchronous JSON packet, destined for a StructuredDataPlugin. StructuredData::ObjectSP json_sp = StructuredData::ParseJSON(packet); if (log) { if (json_sp) { diff --git a/lldb/source/Plugins/Process/gdb-remote/ThreadGDBRemote.cpp b/lldb/source/Plugins/Process/gdb-remote/ThreadGDBRemote.cpp index 909de80f79e..87b78ae1f64 100644 --- a/lldb/source/Plugins/Process/gdb-remote/ThreadGDBRemote.cpp +++ b/lldb/source/Plugins/Process/gdb-remote/ThreadGDBRemote.cpp @@ -80,10 +80,9 @@ void ThreadGDBRemote::SetQueueInfo(std::string &&queue_name, const char *ThreadGDBRemote::GetQueueName() { // If our cached queue info is valid, then someone called - // ThreadGDBRemote::SetQueueInfo(...) - // with valid information that was gleaned from the stop reply packet. In this - // case we trust - // that the info is valid in m_dispatch_queue_name without refetching it + // ThreadGDBRemote::SetQueueInfo(...) with valid information that was gleaned + // from the stop reply packet. In this case we trust that the info is valid + // in m_dispatch_queue_name without refetching it if (CachedQueueInfoIsValid()) { if (m_dispatch_queue_name.empty()) return nullptr; @@ -115,10 +114,9 @@ const char *ThreadGDBRemote::GetQueueName() { QueueKind ThreadGDBRemote::GetQueueKind() { // If our cached queue info is valid, then someone called - // ThreadGDBRemote::SetQueueInfo(...) - // with valid information that was gleaned from the stop reply packet. In this - // case we trust - // that the info is valid in m_dispatch_queue_name without refetching it + // ThreadGDBRemote::SetQueueInfo(...) with valid information that was gleaned + // from the stop reply packet. In this case we trust that the info is valid + // in m_dispatch_queue_name without refetching it if (CachedQueueInfoIsValid()) { return m_queue_kind; } @@ -141,10 +139,9 @@ QueueKind ThreadGDBRemote::GetQueueKind() { queue_id_t ThreadGDBRemote::GetQueueID() { // If our cached queue info is valid, then someone called - // ThreadGDBRemote::SetQueueInfo(...) - // with valid information that was gleaned from the stop reply packet. In this - // case we trust - // that the info is valid in m_dispatch_queue_name without refetching it + // ThreadGDBRemote::SetQueueInfo(...) with valid information that was gleaned + // from the stop reply packet. In this case we trust that the info is valid + // in m_dispatch_queue_name without refetching it if (CachedQueueInfoIsValid()) return m_queue_serial_number; @@ -275,11 +272,11 @@ void ThreadGDBRemote::RefreshStateAfterStop() { // Invalidate all registers in our register context. We don't set "force" to // true because the stop reply packet might have had some register values // that were expedited and these will already be copied into the register - // context by the time this function gets called. The GDBRemoteRegisterContext - // class has been made smart enough to detect when it needs to invalidate - // which registers are valid by putting hooks in the register read and - // register supply functions where they check the process stop ID and do - // the right thing. + // context by the time this function gets called. The + // GDBRemoteRegisterContext class has been made smart enough to detect when + // it needs to invalidate which registers are valid by putting hooks in the + // register read and register supply functions where they check the process + // stop ID and do the right thing. const bool force = false; GetRegisterContext()->InvalidateIfNeeded(force); } @@ -310,7 +307,8 @@ ThreadGDBRemote::CreateRegisterContextForFrame(StackFrame *frame) { if (process_sp) { ProcessGDBRemote *gdb_process = static_cast<ProcessGDBRemote *>(process_sp.get()); - // read_all_registers_at_once will be true if 'p' packet is not supported. + // read_all_registers_at_once will be true if 'p' packet is not + // supported. bool read_all_registers_at_once = !gdb_process->GetGDBRemote().GetpPacketSupported(GetID()); reg_ctx_sp.reset(new GDBRemoteRegisterContext( diff --git a/lldb/source/Plugins/Process/mach-core/ProcessMachCore.cpp b/lldb/source/Plugins/Process/mach-core/ProcessMachCore.cpp index d21651b77ee..dd623f1d8bf 100644 --- a/lldb/source/Plugins/Process/mach-core/ProcessMachCore.cpp +++ b/lldb/source/Plugins/Process/mach-core/ProcessMachCore.cpp @@ -91,11 +91,10 @@ bool ProcessMachCore::CanDebug(lldb::TargetSP target_sp, // For now we are just making sure the file exists for a given module if (!m_core_module_sp && m_core_file.Exists()) { - // Don't add the Target's architecture to the ModuleSpec - we may be working - // with a core file that doesn't have the correct cpusubtype in the header - // but we should still try to use it - - // ModuleSpecList::FindMatchingModuleSpec - // enforces a strict arch mach. + // Don't add the Target's architecture to the ModuleSpec - we may be + // working with a core file that doesn't have the correct cpusubtype in the + // header but we should still try to use it - + // ModuleSpecList::FindMatchingModuleSpec enforces a strict arch mach. ModuleSpec core_module_spec(m_core_file); Status error(ModuleList::GetSharedModule(core_module_spec, m_core_module_sp, NULL, NULL, NULL)); @@ -125,10 +124,10 @@ ProcessMachCore::ProcessMachCore(lldb::TargetSP target_sp, //---------------------------------------------------------------------- ProcessMachCore::~ProcessMachCore() { Clear(); - // We need to call finalize on the process before destroying ourselves - // to make sure all of the broadcaster cleanup goes as planned. If we - // destruct this class, then Process::~Process() might have problems - // trying to fully destroy the broadcaster. + // We need to call finalize on the process before destroying ourselves to + // make sure all of the broadcaster cleanup goes as planned. If we destruct + // this class, then Process::~Process() might have problems trying to fully + // destroy the broadcaster. Finalize(); } @@ -162,11 +161,10 @@ bool ProcessMachCore::GetDynamicLoaderAddress(lldb::addr_t addr) { // header.magic, header.filetype); if (header.magic == llvm::MachO::MH_MAGIC || header.magic == llvm::MachO::MH_MAGIC_64) { - // Check MH_EXECUTABLE to see if we can find the mach image - // that contains the shared library list. The dynamic loader - // (dyld) is what contains the list for user applications, - // and the mach kernel contains a global that has the list - // of kexts to load + // Check MH_EXECUTABLE to see if we can find the mach image that contains + // the shared library list. The dynamic loader (dyld) is what contains the + // list for user applications, and the mach kernel contains a global that + // has the list of kexts to load switch (header.filetype) { case llvm::MachO::MH_DYLINKER: // printf("0x%16.16" PRIx64 ": file_type = MH_DYLINKER\n", vaddr); @@ -272,13 +270,10 @@ Status ProcessMachCore::DoLoadCore() { } else { m_core_aranges.Append(range_entry); } - // Some core files don't fill in the permissions correctly. If that is the - // case - // assume read + execute so clients don't think the memory is not - // readable, - // or executable. The memory isn't writable since this plug-in doesn't - // implement - // DoWriteMemory. + // Some core files don't fill in the permissions correctly. If that is + // the case assume read + execute so clients don't think the memory is + // not readable, or executable. The memory isn't writable since this + // plug-in doesn't implement DoWriteMemory. uint32_t permissions = section->GetPermissions(); if (permissions == 0) permissions = lldb::ePermissionsReadable | lldb::ePermissionsExecutable; @@ -309,8 +304,8 @@ Status ProcessMachCore::DoLoadCore() { } // This checks for the presence of an LC_IDENT string in a core file; - // LC_IDENT is very obsolete and should not be used in new code, but - // if the load command is present, let's use the contents. + // LC_IDENT is very obsolete and should not be used in new code, but if the + // load command is present, let's use the contents. std::string corefile_identifier = core_objfile->GetIdentifierString(); if (found_main_binary_definitively == false && corefile_identifier.find("Darwin Kernel") != std::string::npos) { @@ -342,16 +337,12 @@ Status ProcessMachCore::DoLoadCore() { if (found_main_binary_definitively == false && (m_dyld_addr == LLDB_INVALID_ADDRESS || m_mach_kernel_addr == LLDB_INVALID_ADDRESS)) { - // We need to locate the main executable in the memory ranges - // we have in the core file. We need to search for both a user-process dyld - // binary + // We need to locate the main executable in the memory ranges we have in + // the core file. We need to search for both a user-process dyld binary // and a kernel binary in memory; we must look at all the pages in the - // binary so - // we don't miss one or the other. Step through all memory segments - // searching for - // a kernel binary and for a user process dyld -- we'll decide which to - // prefer - // later if both are present. + // binary so we don't miss one or the other. Step through all memory + // segments searching for a kernel binary and for a user process dyld -- + // we'll decide which to prefer later if both are present. const size_t num_core_aranges = m_core_aranges.GetSize(); for (size_t i = 0; i < num_core_aranges; ++i) { @@ -369,13 +360,10 @@ Status ProcessMachCore::DoLoadCore() { if (found_main_binary_definitively == false && m_mach_kernel_addr != LLDB_INVALID_ADDRESS) { // In the case of multiple kernel images found in the core file via - // exhaustive - // search, we may not pick the correct one. See if the - // DynamicLoaderDarwinKernel's - // search heuristics might identify the correct one. - // Most of the time, I expect the address from SearchForDarwinKernel() will - // be the - // same as the address we found via exhaustive search. + // exhaustive search, we may not pick the correct one. See if the + // DynamicLoaderDarwinKernel's search heuristics might identify the correct + // one. Most of the time, I expect the address from SearchForDarwinKernel() + // will be the same as the address we found via exhaustive search. if (GetTarget().GetArchitecture().IsValid() == false && m_core_module_sp.get()) { @@ -383,13 +371,11 @@ Status ProcessMachCore::DoLoadCore() { } // SearchForDarwinKernel will end up calling back into this this class in - // the GetImageInfoAddress - // method which will give it the m_mach_kernel_addr/m_dyld_addr it already - // has. Save that aside - // and set m_mach_kernel_addr/m_dyld_addr to an invalid address temporarily - // so - // DynamicLoaderDarwinKernel does a real search for the kernel using its own - // heuristics. + // the GetImageInfoAddress method which will give it the + // m_mach_kernel_addr/m_dyld_addr it already has. Save that aside and set + // m_mach_kernel_addr/m_dyld_addr to an invalid address temporarily so + // DynamicLoaderDarwinKernel does a real search for the kernel using its + // own heuristics. addr_t saved_mach_kernel_addr = m_mach_kernel_addr; addr_t saved_user_dyld_addr = m_dyld_addr; @@ -410,8 +396,8 @@ Status ProcessMachCore::DoLoadCore() { } } - // If we found both a user-process dyld and a kernel binary, we need to decide - // which to prefer. + // If we found both a user-process dyld and a kernel binary, we need to + // decide which to prefer. if (GetCorefilePreference() == eKernelCorefile) { if (m_mach_kernel_addr != LLDB_INVALID_ADDRESS) { if (log) @@ -444,18 +430,13 @@ Status ProcessMachCore::DoLoadCore() { if (m_dyld_plugin_name != DynamicLoaderMacOSXDYLD::GetPluginNameStatic()) { // For non-user process core files, the permissions on the core file - // segments are usually - // meaningless, they may be just "read", because we're dealing with kernel - // coredumps or - // early startup coredumps and the dumper is grabbing pages of memory - // without knowing - // what they are. If they aren't marked as "exeuctable", that can break the - // unwinder - // which will check a pc value to see if it is in an executable segment and - // stop the + // segments are usually meaningless, they may be just "read", because we're + // dealing with kernel coredumps or early startup coredumps and the dumper + // is grabbing pages of memory without knowing what they are. If they + // aren't marked as "exeuctable", that can break the unwinder which will + // check a pc value to see if it is in an executable segment and stop the // backtrace early if it is not ("executable" and "unknown" would both be - // fine, but - // "not executable" will break the unwinder). + // fine, but "not executable" will break the unwinder). size_t core_range_infos_size = m_core_range_infos.GetSize(); for (size_t i = 0; i < core_range_infos_size; i++) { VMRangeToPermissions::Entry *ent = @@ -464,8 +445,8 @@ Status ProcessMachCore::DoLoadCore() { } } - // Even if the architecture is set in the target, we need to override - // it to match the core file which is always single arch. + // Even if the architecture is set in the target, we need to override it to + // match the core file which is always single arch. ArchSpec arch(m_core_module_sp->GetArchitecture()); if (arch.GetCore() == ArchSpec::eCore_x86_32_i486) { arch = Platform::GetAugmentedArchSpec(GetTarget().GetPlatform().get(), "i386"); @@ -488,8 +469,7 @@ bool ProcessMachCore::UpdateThreadList(ThreadList &old_thread_list, ThreadList &new_thread_list) { if (old_thread_list.GetSize(false) == 0) { // Make up the thread the first time this is called so we can setup our one - // and only - // core thread state. + // and only core thread state. ObjectFile *core_objfile = m_core_module_sp->GetObjectFile(); if (core_objfile) { @@ -508,8 +488,8 @@ bool ProcessMachCore::UpdateThreadList(ThreadList &old_thread_list, } void ProcessMachCore::RefreshStateAfterStop() { - // Let all threads recover from stopping and do any clean up based - // on the previous thread state (if any). + // Let all threads recover from stopping and do any clean up based on the + // previous thread state (if any). m_thread_list.RefreshStateAfterStop(); // SetThreadStopInfo (m_last_stop_packet); } @@ -529,8 +509,8 @@ bool ProcessMachCore::WarnBeforeDetach() const { return false; } //------------------------------------------------------------------ size_t ProcessMachCore::ReadMemory(addr_t addr, void *buf, size_t size, Status &error) { - // Don't allow the caching that lldb_private::Process::ReadMemory does - // since in core files we have it all cached our our core file anyway. + // Don't allow the caching that lldb_private::Process::ReadMemory does since + // in core files we have it all cached our our core file anyway. return DoReadMemory(addr, buf, size, error); } @@ -546,19 +526,17 @@ size_t ProcessMachCore::DoReadMemory(addr_t addr, void *buf, size_t size, // Address Size File off File size // ---------- ---------- ---------- ---------- // LC_SEGMENT 0x000f6000 0x00001000 0x1d509ee8 0x00001000 --- --- 0 - // 0x00000000 __TEXT - // LC_SEGMENT 0x0f600000 0x00100000 0x1d50aee8 0x00100000 --- --- 0 - // 0x00000000 __TEXT - // LC_SEGMENT 0x000f7000 0x00001000 0x1d60aee8 0x00001000 --- --- 0 - // 0x00000000 __TEXT + // 0x00000000 __TEXT LC_SEGMENT 0x0f600000 0x00100000 0x1d50aee8 0x00100000 + // --- --- 0 0x00000000 __TEXT LC_SEGMENT 0x000f7000 0x00001000 + // 0x1d60aee8 0x00001000 --- --- 0 0x00000000 __TEXT // // Any if the user executes the following command: // // (lldb) mem read 0xf6ff0 // - // We would attempt to read 32 bytes from 0xf6ff0 but would only - // get 16 unless we loop through consecutive memory ranges that are - // contiguous in the address space, but not in the file data. + // We would attempt to read 32 bytes from 0xf6ff0 but would only get 16 + // unless we loop through consecutive memory ranges that are contiguous in + // the address space, but not in the file data. //---------------------------------------------------------------------- while (bytes_read < size) { const addr_t curr_addr = addr + bytes_read; @@ -641,8 +619,8 @@ void ProcessMachCore::Initialize() { } addr_t ProcessMachCore::GetImageInfoAddress() { - // If we found both a user-process dyld and a kernel binary, we need to decide - // which to prefer. + // If we found both a user-process dyld and a kernel binary, we need to + // decide which to prefer. if (GetCorefilePreference() == eKernelCorefile) { if (m_mach_kernel_addr != LLDB_INVALID_ADDRESS) { return m_mach_kernel_addr; diff --git a/lldb/source/Plugins/Process/mach-core/ThreadMachCore.cpp b/lldb/source/Plugins/Process/mach-core/ThreadMachCore.cpp index 2b44105c13b..4538ce5bcb1 100644 --- a/lldb/source/Plugins/Process/mach-core/ThreadMachCore.cpp +++ b/lldb/source/Plugins/Process/mach-core/ThreadMachCore.cpp @@ -54,8 +54,8 @@ void ThreadMachCore::RefreshStateAfterStop() { // context by the time this function gets called. The KDPRegisterContext // class has been made smart enough to detect when it needs to invalidate // which registers are valid by putting hooks in the register read and - // register supply functions where they check the process stop ID and do - // the right thing. + // register supply functions where they check the process stop ID and do the + // right thing. const bool force = false; GetRegisterContext()->InvalidateIfNeeded(force); } diff --git a/lldb/source/Plugins/Process/minidump/MinidumpParser.cpp b/lldb/source/Plugins/Process/minidump/MinidumpParser.cpp index 36350fdb639..5aa04e3e123 100644 --- a/lldb/source/Plugins/Process/minidump/MinidumpParser.cpp +++ b/lldb/source/Plugins/Process/minidump/MinidumpParser.cpp @@ -115,12 +115,12 @@ MinidumpParser::GetThreadContext(const MinidumpThread &td) { llvm::ArrayRef<uint8_t> MinidumpParser::GetThreadContextWow64(const MinidumpThread &td) { - // On Windows, a 32-bit process can run on a 64-bit machine under - // WOW64. If the minidump was captured with a 64-bit debugger, then - // the CONTEXT we just grabbed from the mini_dump_thread is the one - // for the 64-bit "native" process rather than the 32-bit "guest" - // process we care about. In this case, we can get the 32-bit CONTEXT - // from the TEB (Thread Environment Block) of the 64-bit process. + // On Windows, a 32-bit process can run on a 64-bit machine under WOW64. If + // the minidump was captured with a 64-bit debugger, then the CONTEXT we just + // grabbed from the mini_dump_thread is the one for the 64-bit "native" + // process rather than the 32-bit "guest" process we care about. In this + // case, we can get the 32-bit CONTEXT from the TEB (Thread Environment + // Block) of the 64-bit process. auto teb_mem = GetMemory(td.teb, sizeof(TEB64)); if (teb_mem.empty()) return {}; @@ -130,9 +130,9 @@ MinidumpParser::GetThreadContextWow64(const MinidumpThread &td) { if (error.Fail()) return {}; - // Slot 1 of the thread-local storage in the 64-bit TEB points to a - // structure that includes the 32-bit CONTEXT (after a ULONG). - // See: https://msdn.microsoft.com/en-us/library/ms681670.aspx + // Slot 1 of the thread-local storage in the 64-bit TEB points to a structure + // that includes the 32-bit CONTEXT (after a ULONG). See: + // https://msdn.microsoft.com/en-us/library/ms681670.aspx auto context = GetMemory(wow64teb->tls_slots[1] + 4, sizeof(MinidumpContext_x86_32)); if (context.size() < sizeof(MinidumpContext_x86_32)) @@ -334,10 +334,10 @@ MinidumpParser::FindMemoryRange(lldb::addr_t addr) { } } - // Some Minidumps have a Memory64ListStream that captures all the heap - // memory (full-memory Minidumps). We can't exactly use the same loop as - // above, because the Minidump uses slightly different data structures to - // describe those + // Some Minidumps have a Memory64ListStream that captures all the heap memory + // (full-memory Minidumps). We can't exactly use the same loop as above, + // because the Minidump uses slightly different data structures to describe + // those if (!data64.empty()) { llvm::ArrayRef<MinidumpMemoryDescriptor64> memory64_list; @@ -377,8 +377,8 @@ llvm::ArrayRef<uint8_t> MinidumpParser::GetMemory(lldb::addr_t addr, return {}; // There's at least some overlap between the beginning of the desired range - // (addr) and the current range. Figure out where the overlap begins and - // how much overlap there is. + // (addr) and the current range. Figure out where the overlap begins and how + // much overlap there is. const size_t offset = addr - range->start; diff --git a/lldb/source/Plugins/Process/minidump/MinidumpTypes.cpp b/lldb/source/Plugins/Process/minidump/MinidumpTypes.cpp index 394a1ee7d2a..371049f74d6 100644 --- a/lldb/source/Plugins/Process/minidump/MinidumpTypes.cpp +++ b/lldb/source/Plugins/Process/minidump/MinidumpTypes.cpp @@ -55,10 +55,9 @@ lldb_private::minidump::parseMinidumpString(llvm::ArrayRef<uint8_t> &data) { return llvm::None; auto source_start = reinterpret_cast<const llvm::UTF16 *>(data.data()); - // source_length is the length of the string in bytes - // we need the length of the string in UTF-16 characters/code points (16 bits - // per char) - // that's why it's divided by 2 + // source_length is the length of the string in bytes we need the length of + // the string in UTF-16 characters/code points (16 bits per char) that's why + // it's divided by 2 const auto source_end = source_start + source_length / 2; // resize to worst case length result.resize(UNI_MAX_UTF8_BYTES_PER_CODE_POINT * source_length / 2); diff --git a/lldb/source/Plugins/Process/minidump/ProcessMinidump.cpp b/lldb/source/Plugins/Process/minidump/ProcessMinidump.cpp index 44efc57c9a6..0f4f1236c4b 100644 --- a/lldb/source/Plugins/Process/minidump/ProcessMinidump.cpp +++ b/lldb/source/Plugins/Process/minidump/ProcessMinidump.cpp @@ -49,8 +49,8 @@ public: PlaceholderModule(const FileSpec &file_spec, const ArchSpec &arch) : Module(file_spec, arch) {} - // Creates a synthetic module section covering the whole module image - // (and sets the section load address as well) + // Creates a synthetic module section covering the whole module image (and + // sets the section load address as well) void CreateImageSection(const MinidumpModule *module, Target& target) { const ConstString section_name(".module_image"); lldb::SectionSP section_sp(new Section( @@ -137,10 +137,10 @@ ProcessMinidump::ProcessMinidump(lldb::TargetSP target_sp, ProcessMinidump::~ProcessMinidump() { Clear(); - // We need to call finalize on the process before destroying ourselves - // to make sure all of the broadcaster cleanup goes as planned. If we - // destruct this class, then Process::~Process() might have problems - // trying to fully destroy the broadcaster. + // We need to call finalize on the process before destroying ourselves to + // make sure all of the broadcaster cleanup goes as planned. If we destruct + // this class, then Process::~Process() might have problems trying to fully + // destroy the broadcaster. Finalize(); } @@ -230,8 +230,8 @@ bool ProcessMinidump::WarnBeforeDetach() const { return false; } size_t ProcessMinidump::ReadMemory(lldb::addr_t addr, void *buf, size_t size, Status &error) { - // Don't allow the caching that lldb_private::Process::ReadMemory does - // since we have it all cached in our dump file anyway. + // Don't allow the caching that lldb_private::Process::ReadMemory does since + // we have it all cached in our dump file anyway. return DoReadMemory(addr, buf, size, error); } @@ -327,9 +327,9 @@ void ProcessMinidump::ReadModuleList() { Status error; lldb::ModuleSP module_sp = GetTarget().GetSharedModule(module_spec, &error); if (!module_sp || error.Fail()) { - // We failed to locate a matching local object file. Fortunately, - // the minidump format encodes enough information about each module's - // memory range to allow us to create placeholder modules. + // We failed to locate a matching local object file. Fortunately, the + // minidump format encodes enough information about each module's memory + // range to allow us to create placeholder modules. // // This enables most LLDB functionality involving address-to-module // translations (ex. identifing the module for a stack frame PC) and diff --git a/lldb/source/Plugins/ScriptInterpreter/Python/PythonDataObjects.cpp b/lldb/source/Plugins/ScriptInterpreter/Python/PythonDataObjects.cpp index 966bdff3ad9..f528dcf21be 100644 --- a/lldb/source/Plugins/ScriptInterpreter/Python/PythonDataObjects.cpp +++ b/lldb/source/Plugins/ScriptInterpreter/Python/PythonDataObjects.cpp @@ -123,21 +123,20 @@ PythonObject::ResolveNameWithDictionary(llvm::StringRef name, } PythonObject PythonObject::ResolveName(llvm::StringRef name) const { - // Resolve the name in the context of the specified object. If, - // for example, `this` refers to a PyModule, then this will look for - // `name` in this module. If `this` refers to a PyType, then it will - // resolve `name` as an attribute of that type. If `this` refers to - // an instance of an object, then it will resolve `name` as the value - // of the specified field. + // Resolve the name in the context of the specified object. If, for example, + // `this` refers to a PyModule, then this will look for `name` in this + // module. If `this` refers to a PyType, then it will resolve `name` as an + // attribute of that type. If `this` refers to an instance of an object, + // then it will resolve `name` as the value of the specified field. // // This function handles dotted names so that, for example, if `m_py_obj` - // refers to the `sys` module, and `name` == "path.append", then it - // will find the function `sys.path.append`. + // refers to the `sys` module, and `name` == "path.append", then it will find + // the function `sys.path.append`. size_t dot_pos = name.find_first_of('.'); if (dot_pos == llvm::StringRef::npos) { - // No dots in the name, we should be able to find the value immediately - // as an attribute of `m_py_obj`. + // No dots in the name, we should be able to find the value immediately as + // an attribute of `m_py_obj`. return GetAttributeValue(name); } @@ -230,8 +229,8 @@ bool PythonBytes::Check(PyObject *py_obj) { } void PythonBytes::Reset(PyRefType type, PyObject *py_obj) { - // Grab the desired reference type so that if we end up rejecting - // `py_obj` it still gets decremented if necessary. + // Grab the desired reference type so that if we end up rejecting `py_obj` it + // still gets decremented if necessary. PythonObject result(type, py_obj); if (!PythonBytes::Check(py_obj)) { @@ -240,8 +239,7 @@ void PythonBytes::Reset(PyRefType type, PyObject *py_obj) { } // Calling PythonObject::Reset(const PythonObject&) will lead to stack - // overflow since it calls - // back into the virtual implementation. + // overflow since it calls back into the virtual implementation. PythonObject::Reset(PyRefType::Borrowed, result.get()); } @@ -303,8 +301,8 @@ bool PythonByteArray::Check(PyObject *py_obj) { } void PythonByteArray::Reset(PyRefType type, PyObject *py_obj) { - // Grab the desired reference type so that if we end up rejecting - // `py_obj` it still gets decremented if necessary. + // Grab the desired reference type so that if we end up rejecting `py_obj` it + // still gets decremented if necessary. PythonObject result(type, py_obj); if (!PythonByteArray::Check(py_obj)) { @@ -313,8 +311,7 @@ void PythonByteArray::Reset(PyRefType type, PyObject *py_obj) { } // Calling PythonObject::Reset(const PythonObject&) will lead to stack - // overflow since it calls - // back into the virtual implementation. + // overflow since it calls back into the virtual implementation. PythonObject::Reset(PyRefType::Borrowed, result.get()); } @@ -378,8 +375,8 @@ bool PythonString::Check(PyObject *py_obj) { } void PythonString::Reset(PyRefType type, PyObject *py_obj) { - // Grab the desired reference type so that if we end up rejecting - // `py_obj` it still gets decremented if necessary. + // Grab the desired reference type so that if we end up rejecting `py_obj` it + // still gets decremented if necessary. PythonObject result(type, py_obj); if (!PythonString::Check(py_obj)) { @@ -394,8 +391,7 @@ void PythonString::Reset(PyRefType type, PyObject *py_obj) { result.Reset(PyRefType::Owned, PyUnicode_AsUTF8String(result.get())); #endif // Calling PythonObject::Reset(const PythonObject&) will lead to stack - // overflow since it calls - // back into the virtual implementation. + // overflow since it calls back into the virtual implementation. PythonObject::Reset(PyRefType::Borrowed, result.get()); } @@ -466,8 +462,8 @@ bool PythonInteger::Check(PyObject *py_obj) { return false; #if PY_MAJOR_VERSION >= 3 - // Python 3 does not have PyInt_Check. There is only one type of - // integral value, long. + // Python 3 does not have PyInt_Check. There is only one type of integral + // value, long. return PyLong_Check(py_obj); #else return PyLong_Check(py_obj) || PyInt_Check(py_obj); @@ -475,8 +471,8 @@ bool PythonInteger::Check(PyObject *py_obj) { } void PythonInteger::Reset(PyRefType type, PyObject *py_obj) { - // Grab the desired reference type so that if we end up rejecting - // `py_obj` it still gets decremented if necessary. + // Grab the desired reference type so that if we end up rejecting `py_obj` it + // still gets decremented if necessary. PythonObject result(type, py_obj); if (!PythonInteger::Check(py_obj)) { @@ -485,13 +481,13 @@ void PythonInteger::Reset(PyRefType type, PyObject *py_obj) { } #if PY_MAJOR_VERSION < 3 - // Always store this as a PyLong, which makes interoperability between - // Python 2.x and Python 3.x easier. This is only necessary in 2.x, - // since 3.x doesn't even have a PyInt. + // Always store this as a PyLong, which makes interoperability between Python + // 2.x and Python 3.x easier. This is only necessary in 2.x, since 3.x + // doesn't even have a PyInt. if (PyInt_Check(py_obj)) { // Since we converted the original object to a different type, the new - // object is an owned object regardless of the ownership semantics requested - // by the user. + // object is an owned object regardless of the ownership semantics + // requested by the user. result.Reset(PyRefType::Owned, PyLong_FromLongLong(PyInt_AsLong(py_obj))); } #endif @@ -500,8 +496,7 @@ void PythonInteger::Reset(PyRefType type, PyObject *py_obj) { "Couldn't get a PyLong from this PyObject"); // Calling PythonObject::Reset(const PythonObject&) will lead to stack - // overflow since it calls - // back into the virtual implementation. + // overflow since it calls back into the virtual implementation. PythonObject::Reset(PyRefType::Borrowed, result.get()); } @@ -513,10 +508,9 @@ int64_t PythonInteger::GetInteger() const { int overflow = 0; int64_t result = PyLong_AsLongLongAndOverflow(m_py_obj, &overflow); if (overflow != 0) { - // We got an integer that overflows, like 18446744072853913392L - // we can't use PyLong_AsLongLong() as it will return - // 0xffffffffffffffff. If we use the unsigned long long - // it will work as expected. + // We got an integer that overflows, like 18446744072853913392L we can't + // use PyLong_AsLongLong() as it will return 0xffffffffffffffff. If we + // use the unsigned long long it will work as expected. const uint64_t uval = PyLong_AsUnsignedLongLong(m_py_obj); result = static_cast<int64_t>(uval); } @@ -563,8 +557,8 @@ bool PythonList::Check(PyObject *py_obj) { } void PythonList::Reset(PyRefType type, PyObject *py_obj) { - // Grab the desired reference type so that if we end up rejecting - // `py_obj` it still gets decremented if necessary. + // Grab the desired reference type so that if we end up rejecting `py_obj` it + // still gets decremented if necessary. PythonObject result(type, py_obj); if (!PythonList::Check(py_obj)) { @@ -573,8 +567,7 @@ void PythonList::Reset(PyRefType type, PyObject *py_obj) { } // Calling PythonObject::Reset(const PythonObject&) will lead to stack - // overflow since it calls - // back into the virtual implementation. + // overflow since it calls back into the virtual implementation. PythonObject::Reset(PyRefType::Borrowed, result.get()); } @@ -668,8 +661,8 @@ bool PythonTuple::Check(PyObject *py_obj) { } void PythonTuple::Reset(PyRefType type, PyObject *py_obj) { - // Grab the desired reference type so that if we end up rejecting - // `py_obj` it still gets decremented if necessary. + // Grab the desired reference type so that if we end up rejecting `py_obj` it + // still gets decremented if necessary. PythonObject result(type, py_obj); if (!PythonTuple::Check(py_obj)) { @@ -678,8 +671,7 @@ void PythonTuple::Reset(PyRefType type, PyObject *py_obj) { } // Calling PythonObject::Reset(const PythonObject&) will lead to stack - // overflow since it calls - // back into the virtual implementation. + // overflow since it calls back into the virtual implementation. PythonObject::Reset(PyRefType::Borrowed, result.get()); } @@ -741,8 +733,8 @@ bool PythonDictionary::Check(PyObject *py_obj) { } void PythonDictionary::Reset(PyRefType type, PyObject *py_obj) { - // Grab the desired reference type so that if we end up rejecting - // `py_obj` it still gets decremented if necessary. + // Grab the desired reference type so that if we end up rejecting `py_obj` it + // still gets decremented if necessary. PythonObject result(type, py_obj); if (!PythonDictionary::Check(py_obj)) { @@ -751,8 +743,7 @@ void PythonDictionary::Reset(PyRefType type, PyObject *py_obj) { } // Calling PythonObject::Reset(const PythonObject&) will lead to stack - // overflow since it calls - // back into the virtual implementation. + // overflow since it calls back into the virtual implementation. PythonObject::Reset(PyRefType::Borrowed, result.get()); } @@ -833,8 +824,8 @@ bool PythonModule::Check(PyObject *py_obj) { } void PythonModule::Reset(PyRefType type, PyObject *py_obj) { - // Grab the desired reference type so that if we end up rejecting - // `py_obj` it still gets decremented if necessary. + // Grab the desired reference type so that if we end up rejecting `py_obj` it + // still gets decremented if necessary. PythonObject result(type, py_obj); if (!PythonModule::Check(py_obj)) { @@ -843,8 +834,7 @@ void PythonModule::Reset(PyRefType type, PyObject *py_obj) { } // Calling PythonObject::Reset(const PythonObject&) will lead to stack - // overflow since it calls - // back into the virtual implementation. + // overflow since it calls back into the virtual implementation. PythonObject::Reset(PyRefType::Borrowed, result.get()); } @@ -871,8 +861,8 @@ bool PythonCallable::Check(PyObject *py_obj) { } void PythonCallable::Reset(PyRefType type, PyObject *py_obj) { - // Grab the desired reference type so that if we end up rejecting - // `py_obj` it still gets decremented if necessary. + // Grab the desired reference type so that if we end up rejecting `py_obj` it + // still gets decremented if necessary. PythonObject result(type, py_obj); if (!PythonCallable::Check(py_obj)) { @@ -881,8 +871,7 @@ void PythonCallable::Reset(PyRefType type, PyObject *py_obj) { } // Calling PythonObject::Reset(const PythonObject&) will lead to stack - // overflow since it calls - // back into the virtual implementation. + // overflow since it calls back into the virtual implementation. PythonObject::Reset(PyRefType::Borrowed, result.get()); } @@ -963,9 +952,9 @@ bool PythonFile::Check(PyObject *py_obj) { #else // In Python 3, there is no `PyFile_Check`, and in fact PyFile is not even a // first-class object type anymore. `PyFile_FromFd` is just a thin wrapper - // over `io.open()`, which returns some object derived from `io.IOBase`. - // As a result, the only way to detect a file in Python 3 is to check whether - // it inherits from `io.IOBase`. Since it is possible for non-files to also + // over `io.open()`, which returns some object derived from `io.IOBase`. As a + // result, the only way to detect a file in Python 3 is to check whether it + // inherits from `io.IOBase`. Since it is possible for non-files to also // inherit from `io.IOBase`, we additionally verify that it has the `fileno` // attribute, which should guarantee that it is backed by the file system. PythonObject io_module(PyRefType::Owned, PyImport_ImportModule("io")); @@ -985,8 +974,8 @@ bool PythonFile::Check(PyObject *py_obj) { } void PythonFile::Reset(PyRefType type, PyObject *py_obj) { - // Grab the desired reference type so that if we end up rejecting - // `py_obj` it still gets decremented if necessary. + // Grab the desired reference type so that if we end up rejecting `py_obj` it + // still gets decremented if necessary. PythonObject result(type, py_obj); if (!PythonFile::Check(py_obj)) { diff --git a/lldb/source/Plugins/ScriptInterpreter/Python/PythonExceptionState.cpp b/lldb/source/Plugins/ScriptInterpreter/Python/PythonExceptionState.cpp index 4d956d5dbe1..d28a8033820 100644 --- a/lldb/source/Plugins/ScriptInterpreter/Python/PythonExceptionState.cpp +++ b/lldb/source/Plugins/ScriptInterpreter/Python/PythonExceptionState.cpp @@ -30,9 +30,9 @@ PythonExceptionState::~PythonExceptionState() { } void PythonExceptionState::Acquire(bool restore_on_exit) { - // If a state is already acquired, the user needs to decide whether they - // want to discard or restore it. Don't allow the potential silent - // loss of a valid state. + // If a state is already acquired, the user needs to decide whether they want + // to discard or restore it. Don't allow the potential silent loss of a + // valid state. assert(!IsError()); if (!HasErrorOccurred()) @@ -45,8 +45,7 @@ void PythonExceptionState::Acquire(bool restore_on_exit) { // PyErr_Fetch clears the error flag. assert(!HasErrorOccurred()); - // Ownership of the objects returned by `PyErr_Fetch` is transferred - // to us. + // Ownership of the objects returned by `PyErr_Fetch` is transferred to us. m_type.Reset(PyRefType::Owned, py_type); m_value.Reset(PyRefType::Owned, py_value); m_traceback.Reset(PyRefType::Owned, py_traceback); @@ -56,14 +55,14 @@ void PythonExceptionState::Acquire(bool restore_on_exit) { void PythonExceptionState::Restore() { if (m_type.IsValid()) { // The documentation for PyErr_Restore says "Do not pass a null type and - // non-null value or traceback. So only restore if type was non-null - // to begin with. In this case we're passing ownership back to Python - // so release them all. + // non-null value or traceback. So only restore if type was non-null to + // begin with. In this case we're passing ownership back to Python so + // release them all. PyErr_Restore(m_type.release(), m_value.release(), m_traceback.release()); } - // After we restore, we should not hold onto the exception state. Demand that - // it be re-acquired. + // After we restore, we should not hold onto the exception state. Demand + // that it be re-acquired. Discard(); } @@ -100,10 +99,10 @@ std::string PythonExceptionState::Format() const { if (!IsError()) return std::string(); - // It's possible that ReadPythonBacktrace generated another exception. - // If this happens we have to clear the exception, because otherwise - // PyObject_Str() will assert below. That's why we needed to do the - // save / restore at the beginning of this function. + // It's possible that ReadPythonBacktrace generated another exception. If + // this happens we have to clear the exception, because otherwise + // PyObject_Str() will assert below. That's why we needed to do the save / + // restore at the beginning of this function. PythonExceptionState bt_error_state(false); std::string error_string; @@ -114,8 +113,8 @@ std::string PythonExceptionState::Format() const { // If we were able to read the backtrace, just append it. error_stream << backtrace << "\n"; } else { - // Otherwise, append some information about why we were unable to - // obtain the backtrace. + // Otherwise, append some information about why we were unable to obtain + // the backtrace. PythonString bt_error = bt_error_state.GetValue().Str(); error_stream << "An error occurred while retrieving the backtrace: " << bt_error.GetString() << "\n"; diff --git a/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp b/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp index 6c39690268c..5bb6e17c5f4 100644 --- a/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp +++ b/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp @@ -112,13 +112,12 @@ static bool g_initialized = false; namespace { -// Initializing Python is not a straightforward process. We cannot control what -// external code may have done before getting to this point in LLDB, including -// potentially having already initialized Python, so we need to do a lot of work -// to ensure that the existing state of the system is maintained across our -// initialization. We do this by using an RAII pattern where we save off -// initial -// state at the beginning, and restore it at the end +// Initializing Python is not a straightforward process. We cannot control +// what external code may have done before getting to this point in LLDB, +// including potentially having already initialized Python, so we need to do a +// lot of work to ensure that the existing state of the system is maintained +// across our initialization. We do this by using an RAII pattern where we +// save off initial state at the beginning, and restore it at the end struct InitializePythonRAII { public: InitializePythonRAII() @@ -210,12 +209,11 @@ bool ScriptInterpreterPython::Locker::DoAcquireLock() { LLDB_LOGV(log, "Ensured PyGILState. Previous state = {0}locked", m_GILState == PyGILState_UNLOCKED ? "un" : ""); - // we need to save the thread state when we first start the command - // because we might decide to interrupt it while some action is taking - // place outside of Python (e.g. printing to screen, waiting for the network, - // ...) - // in that case, _PyThreadState_Current will be NULL - and we would be unable - // to set the asynchronous exception - not a desirable situation + // we need to save the thread state when we first start the command because + // we might decide to interrupt it while some action is taking place outside + // of Python (e.g. printing to screen, waiting for the network, ...) in that + // case, _PyThreadState_Current will be NULL - and we would be unable to set + // the asynchronous exception - not a desirable situation m_python_interpreter->SetThreadState(PyThreadState_Get()); m_python_interpreter->IncrementLockCount(); return true; @@ -281,17 +279,16 @@ ScriptInterpreterPython::ScriptInterpreterPython( PyRun_SimpleString(run_string.GetData()); // Reloading modules requires a different syntax in Python 2 and Python 3. - // This provides - // a consistent syntax no matter what version of Python. + // This provides a consistent syntax no matter what version of Python. run_string.Clear(); run_string.Printf("run_one_line (%s, 'from six.moves import reload_module')", m_dictionary_name.c_str()); PyRun_SimpleString(run_string.GetData()); // WARNING: temporary code that loads Cocoa formatters - this should be done - // on a per-platform basis rather than loading the whole set - // and letting the individual formatter classes exploit APIs to check whether - // they can/cannot do their task + // on a per-platform basis rather than loading the whole set and letting the + // individual formatter classes exploit APIs to check whether they can/cannot + // do their task run_string.Clear(); run_string.Printf( "run_one_line (%s, 'import lldb.formatters, lldb.formatters.cpp, pydoc')", @@ -314,13 +311,11 @@ ScriptInterpreterPython::ScriptInterpreterPython( } ScriptInterpreterPython::~ScriptInterpreterPython() { - // the session dictionary may hold objects with complex state - // which means that they may need to be torn down with some level of smarts - // and that, in turn, requires a valid thread state - // force Python to procure itself such a thread state, nuke the session - // dictionary - // and then release it for others to use and proceed with the rest of the - // shutdown + // the session dictionary may hold objects with complex state which means + // that they may need to be torn down with some level of smarts and that, in + // turn, requires a valid thread state force Python to procure itself such a + // thread state, nuke the session dictionary and then release it for others + // to use and proceed with the rest of the shutdown auto gil_state = PyGILState_Ensure(); m_session_dict.Reset(); PyGILState_Release(gil_state); @@ -452,16 +447,16 @@ void ScriptInterpreterPython::ResetOutputFileHandle(FILE *fh) {} void ScriptInterpreterPython::SaveTerminalState(int fd) { // Python mucks with the terminal state of STDIN. If we can possibly avoid // this by setting the file handles up correctly prior to entering the - // interpreter we should. For now we save and restore the terminal state - // on the input file handle. + // interpreter we should. For now we save and restore the terminal state on + // the input file handle. m_terminal_state.Save(fd, false); } void ScriptInterpreterPython::RestoreTerminalState() { // Python mucks with the terminal state of STDIN. If we can possibly avoid // this by setting the file handles up correctly prior to entering the - // interpreter we should. For now we save and restore the terminal state - // on the input file handle. + // interpreter we should. For now we save and restore the terminal state on + // the input file handle. m_terminal_state.Restore(); } @@ -470,14 +465,11 @@ void ScriptInterpreterPython::LeaveSession() { if (log) log->PutCString("ScriptInterpreterPython::LeaveSession()"); - // checking that we have a valid thread state - since we use our own threading - // and locking - // in some (rare) cases during cleanup Python may end up believing we have no - // thread state - // and PyImport_AddModule will crash if that is the case - since that seems to - // only happen - // when destroying the SBDebugger, we can make do without clearing up stdout - // and stderr + // checking that we have a valid thread state - since we use our own + // threading and locking in some (rare) cases during cleanup Python may end + // up believing we have no thread state and PyImport_AddModule will crash if + // that is the case - since that seems to only happen when destroying the + // SBDebugger, we can make do without clearing up stdout and stderr // rdar://problem/11292882 // When the current thread state is NULL, PyThreadState_Get() issues a fatal @@ -526,8 +518,7 @@ bool ScriptInterpreterPython::SetStdHandle(File &file, const char *py_name, bool ScriptInterpreterPython::EnterSession(uint16_t on_entry_flags, FILE *in, FILE *out, FILE *err) { // If we have already entered the session, without having officially 'left' - // it, then there is no need to - // 'enter' it again. + // it, then there is no need to 'enter' it again. Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_SCRIPT)); if (m_session_is_active) { if (log) @@ -560,8 +551,8 @@ bool ScriptInterpreterPython::EnterSession(uint16_t on_entry_flags, FILE *in, run_string.PutCString("; lldb.frame = lldb.thread.GetSelectedFrame ()"); run_string.PutCString("')"); } else { - // If we aren't initing the globals, we should still always set the debugger - // (since that is always unique.) + // If we aren't initing the globals, we should still always set the + // debugger (since that is always unique.) run_string.Printf("run_one_line (%s, 'lldb.debugger_unique_id = %" PRIu64, m_dictionary_name.c_str(), GetCommandInterpreter().GetDebugger().GetID()); @@ -702,12 +693,11 @@ bool ScriptInterpreterPython::ExecuteOneLine( if (command && command[0]) { // We want to call run_one_line, passing in the dictionary and the command - // string. We cannot do this through - // PyRun_SimpleString here because the command string may contain escaped - // characters, and putting it inside + // string. We cannot do this through PyRun_SimpleString here because the + // command string may contain escaped characters, and putting it inside // another string to pass to PyRun_SimpleString messes up the escaping. So - // we use the following more complicated - // method to pass the command string directly down to Python. + // we use the following more complicated method to pass the command string + // directly down to Python. Debugger &debugger = m_interpreter.GetDebugger(); StreamFileSP input_file_sp; @@ -773,17 +763,14 @@ bool ScriptInterpreterPython::ExecuteOneLine( FILE *err_file = error_file_sp->GetFile().GetStream(); bool success = false; { - // WARNING! It's imperative that this RAII scope be as tight as possible. - // In particular, the - // scope must end *before* we try to join the read thread. The reason for - // this is that a - // pre-requisite for joining the read thread is that we close the write - // handle (to break the - // pipe and cause it to wake up and exit). But acquiring the GIL as below - // will redirect Python's - // stdio to use this same handle. If we close the handle while Python is - // still using it, bad - // things will happen. + // WARNING! It's imperative that this RAII scope be as tight as + // possible. In particular, the scope must end *before* we try to join + // the read thread. The reason for this is that a pre-requisite for + // joining the read thread is that we close the write handle (to break + // the pipe and cause it to wake up and exit). But acquiring the GIL as + // below will redirect Python's stdio to use this same handle. If we + // close the handle while Python is still using it, bad things will + // happen. Locker locker( this, ScriptInterpreterPython::Locker::AcquireLock | @@ -827,12 +814,12 @@ bool ScriptInterpreterPython::ExecuteOneLine( } if (join_read_thread) { - // Close the write end of the pipe since we are done with our - // one line script. This should cause the read thread that - // output_comm is using to exit + // Close the write end of the pipe since we are done with our one line + // script. This should cause the read thread that output_comm is using to + // exit output_file_sp->GetFile().Close(); - // The close above should cause this thread to exit when it gets - // to the end of file, so let it get all its data + // The close above should cause this thread to exit when it gets to the + // end of file, so let it get all its data output_comm.JoinReadThread(); // Now we can close the read end of the pipe output_comm.Disconnect(); @@ -889,21 +876,18 @@ public: ScriptInterpreterPython::Locker::FreeAcquiredLock | ScriptInterpreterPython::Locker::TearDownSession); - // The following call drops into the embedded interpreter loop and stays - // there until the - // user chooses to exit from the Python interpreter. - // This embedded interpreter will, as any Python code that performs I/O, - // unlock the GIL before - // a system call that can hang, and lock it when the syscall has - // returned. + // The following call drops into the embedded interpreter loop and + // stays there until the user chooses to exit from the Python + // interpreter. This embedded interpreter will, as any Python code that + // performs I/O, unlock the GIL before a system call that can hang, and + // lock it when the syscall has returned. // We need to surround the call to the embedded interpreter with calls - // to PyGILState_Ensure and - // PyGILState_Release (using the Locker above). This is because Python - // has a global lock which must be held whenever we want - // to touch any Python objects. Otherwise, if the user calls Python - // code, the interpreter state will be off, - // and things could hang (it's happened before). + // to PyGILState_Ensure and PyGILState_Release (using the Locker + // above). This is because Python has a global lock which must be held + // whenever we want to touch any Python objects. Otherwise, if the user + // calls Python code, the interpreter state will be off, and things + // could hang (it's happened before). StreamString run_string; run_string.Printf("run_python_interpreter (%s)", @@ -934,12 +918,10 @@ void ScriptInterpreterPython::ExecuteInterpreterLoop() { Debugger &debugger = GetCommandInterpreter().GetDebugger(); // At the moment, the only time the debugger does not have an input file - // handle is when this is called - // directly from Python, in which case it is both dangerous and unnecessary - // (not to mention confusing) to - // try to embed a running interpreter loop inside the already running Python - // interpreter loop, so we won't - // do it. + // handle is when this is called directly from Python, in which case it is + // both dangerous and unnecessary (not to mention confusing) to try to embed + // a running interpreter loop inside the already running Python interpreter + // loop, so we won't do it. if (!debugger.GetInputFile()->GetFile().IsValid()) return; @@ -1174,10 +1156,8 @@ Status ScriptInterpreterPython::ExecuteMultipleLines( if (code_object.IsValid()) { // In Python 2.x, PyEval_EvalCode takes a PyCodeObject, but in Python 3.x, it -// takes -// a PyObject. They are convertible (hence the function -// PyCode_Check(PyObject*), so -// we have to do the cast for Python 2.x +// takes a PyObject. They are convertible (hence the function +// PyCode_Check(PyObject*), so we have to do the cast for Python 2.x #if PY_MAJOR_VERSION >= 3 PyObject *py_code_obj = code_object.get(); #else @@ -1243,10 +1223,9 @@ Status ScriptInterpreterPython::SetBreakpointCommandCallback( auto data_ap = llvm::make_unique<CommandDataPython>(); // Split the command_body_text into lines, and pass that to - // GenerateBreakpointCommandCallbackData. That will - // wrap the body in an auto-generated function, and return the function name - // in script_source. That is what - // the callback will actually invoke. + // GenerateBreakpointCommandCallbackData. That will wrap the body in an + // auto-generated function, and return the function name in script_source. + // That is what the callback will actually invoke. data_ap->user_source.SplitIntoLines(command_body_text); Status error = GenerateBreakpointCommandCallbackData(data_ap->user_source, @@ -1268,9 +1247,8 @@ void ScriptInterpreterPython::SetWatchpointCommandCallback( // It's necessary to set both user_source and script_source to the oneliner. // The former is used to generate callback description (as in watchpoint - // command list) - // while the latter is used for Python to interpret during the actual - // callback. + // command list) while the latter is used for Python to interpret during the + // actual callback. data_ap->user_source.AppendString(oneliner); data_ap->script_source.assign(oneliner); @@ -1365,8 +1343,7 @@ bool ScriptInterpreterPython::GenerateTypeScriptFunction( return false; // Take what the user wrote, wrap it all up inside one big auto-generated - // Python function, passing in the - // ValueObject as parameter to the function. + // Python function, passing in the ValueObject as parameter to the function. std::string auto_generated_function_name( GenerateUniqueName("lldb_autogen_python_type_print_func", @@ -1430,8 +1407,8 @@ bool ScriptInterpreterPython::GenerateTypeSynthClass(StringList &user_input, sstr.Printf("class %s:", auto_generated_class_name.c_str()); auto_generated_class.AppendString(sstr.GetString()); - // Wrap everything up inside the class, increasing the indentation. - // we don't need to play any fancy indentation tricks here because there is no + // Wrap everything up inside the class, increasing the indentation. we don't + // need to play any fancy indentation tricks here because there is no // surrounding code whose indentation we need to honor for (int i = 0; i < num_lines; ++i) { sstr.Clear(); @@ -1439,9 +1416,8 @@ bool ScriptInterpreterPython::GenerateTypeSynthClass(StringList &user_input, auto_generated_class.AppendString(sstr.GetString()); } - // Verify that the results are valid Python. - // (even though the method is ExportFunctionDefinitionToInterpreter, a class - // will actually be exported) + // Verify that the results are valid Python. (even though the method is + // ExportFunctionDefinitionToInterpreter, a class will actually be exported) // (TODO: rename that method to ExportDefinitionToInterpreter) if (!ExportFunctionDefinitionToInterpreter(auto_generated_class).Success()) return false; @@ -1585,8 +1561,8 @@ StructuredData::ArraySP ScriptInterpreterPython::OSPlugin_ThreadsInfo( // GetPythonValueFormatString provides a system independent type safe way to // convert a variable's type into a python value format. Python value formats -// are defined in terms of builtin C types and could change from system to -// as the underlying typedef for uint* types, size_t, off_t and other values +// are defined in terms of builtin C types and could change from system to as +// the underlying typedef for uint* types, size_t, off_t and other values // change. template <typename T> const char *GetPythonValueFormatString(T t); @@ -2044,8 +2020,7 @@ void ScriptInterpreterPython::Clear() { ScriptInterpreterPython::Locker::FreeAcquiredLock); // This may be called as part of Py_Finalize. In that case the modules are - // destroyed in random - // order and we can't guarantee that we can access these. + // destroyed in random order and we can't guarantee that we can access these. if (Py_IsInitialized()) PyRun_SimpleString("lldb.debugger = None; lldb.target = None; lldb.process " "= None; lldb.thread = None; lldb.frame = None"); @@ -2629,9 +2604,8 @@ bool ScriptInterpreterPython::LoadScriptingModule( command_stream.Clear(); command_stream.Printf("sys.modules.__contains__('%s')", basename.c_str()); bool does_contain = false; - // this call will succeed if the module was ever imported in any Debugger in - // the lifetime of the process - // in which this LLDB framework is living + // this call will succeed if the module was ever imported in any Debugger + // in the lifetime of the process in which this LLDB framework is living bool was_imported_globally = (ExecuteOneLineWithReturn( command_stream.GetData(), @@ -2705,8 +2679,8 @@ bool ScriptInterpreterPython::IsReservedWord(const char *word) { llvm::StringRef word_sr(word); - // filter out a few characters that would just confuse us - // and that are clearly not keyword material anyway + // filter out a few characters that would just confuse us and that are + // clearly not keyword material anyway if (word_sr.find_first_of("'\"") != llvm::StringRef::npos) return false; @@ -2834,9 +2808,9 @@ bool ScriptInterpreterPython::RunScriptBasedCommand( return ret_val; } -// in Python, a special attribute __doc__ contains the docstring -// for an object (function, method, class, ...) if any is defined -// Otherwise, the attribute's value is None +// in Python, a special attribute __doc__ contains the docstring for an object +// (function, method, class, ...) if any is defined Otherwise, the attribute's +// value is None bool ScriptInterpreterPython::GetDocumentationForItem(const char *item, std::string &dest) { dest.clear(); @@ -3106,10 +3080,9 @@ void ScriptInterpreterPython::InitializePrivate() { Timer scoped_timer(func_cat, LLVM_PRETTY_FUNCTION); // RAII-based initialization which correctly handles multiple-initialization, - // version- - // specific differences among Python 2 and Python 3, and saving and restoring - // various - // other pieces of state that can get mucked with during initialization. + // version- specific differences among Python 2 and Python 3, and saving and + // restoring various other pieces of state that can get mucked with during + // initialization. InitializePythonRAII initialize_guard; if (g_swig_init_callback) @@ -3123,12 +3096,9 @@ void ScriptInterpreterPython::InitializePrivate() { FileSpec file_spec; // Don't denormalize paths when calling file_spec.GetPath(). On platforms - // that use - // a backslash as the path separator, this will result in executing python - // code containing - // paths with unescaped backslashes. But Python also accepts forward slashes, - // so to make - // life easier we just use that. + // that use a backslash as the path separator, this will result in executing + // python code containing paths with unescaped backslashes. But Python also + // accepts forward slashes, so to make life easier we just use that. if (HostInfo::GetLLDBPath(ePathTypePythonDir, file_spec)) AddToSysPath(AddLocation::Beginning, file_spec.GetPath(false)); if (HostInfo::GetLLDBPath(ePathTypeLLDBShlibDir, file_spec)) diff --git a/lldb/source/Plugins/StructuredData/DarwinLog/StructuredDataDarwinLog.cpp b/lldb/source/Plugins/StructuredData/DarwinLog/StructuredDataDarwinLog.cpp index 5ba4e70c8ca..cebd226b7a7 100644 --- a/lldb/source/Plugins/StructuredData/DarwinLog/StructuredDataDarwinLog.cpp +++ b/lldb/source/Plugins/StructuredData/DarwinLog/StructuredDataDarwinLog.cpp @@ -186,9 +186,9 @@ const char *const s_filter_attributes[] = { "subsystem" // subsystem of the log message // Consider impelmenting this action as it would be cheaper to filter. - // "message" requires always formatting the message, which is a waste - // of cycles if it ends up being rejected. - // "format", // format string used to format message text + // "message" requires always formatting the message, which is a waste of + // cycles if it ends up being rejected. "format", // format string + // used to format message text }; static const ConstString &GetDarwinLogTypeName() { @@ -239,11 +239,10 @@ public: // Indicate whether this is an accept or reject rule. dict_p->AddBooleanItem("accept", m_accept); - // Indicate which attribute of the message this filter references. - // This can drop into the rule-specific DoSerialization if we get - // to the point where not all FilterRule derived classes work on - // an attribute. (e.g. logical and/or and other compound - // operations). + // Indicate which attribute of the message this filter references. This can + // drop into the rule-specific DoSerialization if we get to the point where + // not all FilterRule derived classes work on an attribute. (e.g. logical + // and/or and other compound operations). dict_p->AddStringItem("attribute", s_filter_attributes[m_attribute_index]); // Indicate the type of the rule. @@ -404,9 +403,9 @@ static void RegisterFilterOperations() { // ------------------------------------------------------------------------- static OptionDefinition g_enable_option_table[] = { - // Source stream include/exclude options (the first-level filter). - // This one should be made as small as possible as everything that - // goes through here must be processed by the process monitor. + // Source stream include/exclude options (the first-level filter). This one + // should be made as small as possible as everything that goes through here + // must be processed by the process monitor. {LLDB_OPT_SET_ALL, false, "any-process", 'a', OptionParser::eNoArgument, nullptr, nullptr, 0, eArgTypeNone, "Specifies log messages from other related processes should be " @@ -420,10 +419,10 @@ static OptionDefinition g_enable_option_table[] = { "Specifies info-level log messages should be included."}, {LLDB_OPT_SET_ALL, false, "filter", 'f', OptionParser::eRequiredArgument, nullptr, nullptr, 0, eArgRawInput, - // There doesn't appear to be a great way for me to have these - // multi-line, formatted tables in help. This looks mostly right - // but there are extra linefeeds added at seemingly random spots, - // and indentation isn't handled properly on those lines. + // There doesn't appear to be a great way for me to have these multi-line, + // formatted tables in help. This looks mostly right but there are extra + // linefeeds added at seemingly random spots, and indentation isn't + // handled properly on those lines. "Appends a filter rule to the log message filter chain. Multiple " "rules may be added by specifying this option multiple times, " "once per filter rule. Filter rules are processed in the order " @@ -786,12 +785,11 @@ protected: if (!source_name) return; - // Check if we're *not* using strict sources. If not, - // then the user is going to get debug-level info - // anyways, probably not what they're expecting. - // Unfortunately we can only fix this by adding an - // env var, which would have had to have happened - // already. Thus, a warning is the best we can do here. + // Check if we're *not* using strict sources. If not, then the user is + // going to get debug-level info anyways, probably not what they're + // expecting. Unfortunately we can only fix this by adding an env var, + // which would have had to have happened already. Thus, a warning is the + // best we can do here. StreamString stream; stream.Printf("darwin-log source settings specify to exclude " "%s messages, but setting " @@ -805,24 +803,22 @@ protected: } bool DoExecute(Args &command, CommandReturnObject &result) override { - // First off, set the global sticky state of enable/disable - // based on this command execution. + // First off, set the global sticky state of enable/disable based on this + // command execution. s_is_explicitly_enabled = m_enable; - // Next, if this is an enable, save off the option data. - // We will need it later if a process hasn't been launched or - // attached yet. + // Next, if this is an enable, save off the option data. We will need it + // later if a process hasn't been launched or attached yet. if (m_enable) { - // Save off enabled configuration so we can apply these parsed - // options the next time an attach or launch occurs. + // Save off enabled configuration so we can apply these parsed options + // the next time an attach or launch occurs. DebuggerSP debugger_sp = GetCommandInterpreter().GetDebugger().shared_from_this(); SetGlobalEnableOptions(debugger_sp, m_options_sp); } - // Now check if we have a running process. If so, we should - // instruct the process monitor to enable/disable DarwinLog support - // now. + // Now check if we have a running process. If so, we should instruct the + // process monitor to enable/disable DarwinLog support now. Target *target = GetSelectedOrDummyTarget(); if (!target) { // No target, so there is nothing more to do right now. @@ -833,14 +829,13 @@ protected: // Grab the active process. auto process_sp = target->GetProcessSP(); if (!process_sp) { - // No active process, so there is nothing more to do right - // now. + // No active process, so there is nothing more to do right now. result.SetStatus(eReturnStatusSuccessFinishNoResult); return true; } - // If the process is no longer alive, we can't do this now. - // We'll catch it the next time the process is started up. + // If the process is no longer alive, we can't do this now. We'll catch it + // the next time the process is started up. if (!process_sp->IsAlive()) { result.SetStatus(eReturnStatusSuccessFinishNoResult); return true; @@ -859,19 +854,17 @@ protected: *static_cast<StructuredDataDarwinLog *>(plugin_sp.get()); if (m_enable) { - // Hook up the breakpoint for the process that detects when - // libtrace has been sufficiently initialized to really start - // the os_log stream. This is insurance to assure us that - // logging is really enabled. Requesting that logging be - // enabled for a process before libtrace is initialized - // results in a scenario where no errors occur, but no logging - // is captured, either. This step is to eliminate that - // possibility. + // Hook up the breakpoint for the process that detects when libtrace has + // been sufficiently initialized to really start the os_log stream. This + // is insurance to assure us that logging is really enabled. Requesting + // that logging be enabled for a process before libtrace is initialized + // results in a scenario where no errors occur, but no logging is + // captured, either. This step is to eliminate that possibility. plugin.AddInitCompletionHook(*process_sp.get()); } - // Send configuration to the feature by way of the process. - // Construct the options we will use. + // Send configuration to the feature by way of the process. Construct the + // options we will use. auto config_sp = m_options_sp->BuildConfigurationData(m_enable); const Status error = process_sp->ConfigureStructuredData(GetDarwinLogTypeName(), config_sp); @@ -884,8 +877,8 @@ protected: plugin.SetEnabled(false); } else { result.SetStatus(eReturnStatusSuccessFinishNoResult); - // Our configuration succeeeded, so we're enabled/disabled - // per whichever one this command is setup to do. + // Our configuration succeeeded, so we're enabled/disabled per whichever + // one this command is setup to do. plugin.SetEnabled(m_enable); } return result.Succeeded(); @@ -916,8 +909,8 @@ protected: bool DoExecute(Args &command, CommandReturnObject &result) override { auto &stream = result.GetOutputStream(); - // Figure out if we've got a process. If so, we can tell if - // DarwinLog is available for that process. + // Figure out if we've got a process. If so, we can tell if DarwinLog is + // available for that process. Target *target = GetSelectedOrDummyTarget(); auto process_sp = target ? target->GetProcessSP() : ProcessSP(); if (!target || !process_sp) { @@ -1016,13 +1009,12 @@ public: EnableOptionsSP ParseAutoEnableOptions(Status &error, Debugger &debugger) { Log *log = GetLogIfAllCategoriesSet(LIBLLDB_LOG_PROCESS); - // We are abusing the options data model here so that we can parse - // options without requiring the Debugger instance. + // We are abusing the options data model here so that we can parse options + // without requiring the Debugger instance. - // We have an empty execution context at this point. We only want - // to parse options, and we don't need any context to do this here. - // In fact, we want to be able to parse the enable options before having - // any context. + // We have an empty execution context at this point. We only want to parse + // options, and we don't need any context to do this here. In fact, we want + // to be able to parse the enable options before having any context. ExecutionContext exe_ctx; EnableOptionsSP options_sp(new EnableOptions()); @@ -1047,8 +1039,8 @@ EnableOptionsSP ParseAutoEnableOptions(Status &error, Debugger &debugger) { options_property_sp->GetAsString()->GetCurrentValue(); Args args(enable_options); if (args.GetArgumentCount() > 0) { - // Eliminate the initial '--' that would be required to set the - // settings that themselves include '-' and/or '--'. + // Eliminate the initial '--' that would be required to set the settings + // that themselves include '-' and/or '--'. const char *first_arg = args.GetArgumentAtIndex(0); if (first_arg && (strcmp(first_arg, "--") == 0)) args.Shift(); @@ -1172,9 +1164,9 @@ void StructuredDataDarwinLog::HandleArrivalOfStructuredData( return; } - // Broadcast the structured data event if we have that enabled. - // This is the way that the outside world (all clients) get access - // to this data. This plugin sets policy as to whether we do that. + // Broadcast the structured data event if we have that enabled. This is the + // way that the outside world (all clients) get access to this data. This + // plugin sets policy as to whether we do that. DebuggerSP debugger_sp = process.GetTarget().GetDebugger().shared_from_this(); auto options_sp = GetGlobalEnableOptions(debugger_sp); if (options_sp && options_sp->GetBroadcastEvents()) { @@ -1184,8 +1176,8 @@ void StructuredDataDarwinLog::HandleArrivalOfStructuredData( process.BroadcastStructuredData(object_sp, shared_from_this()); } - // Later, hang on to a configurable amount of these and allow commands - // to inspect, including showing backtraces. + // Later, hang on to a configurable amount of these and allow commands to + // inspect, including showing backtraces. } static void SetErrorWithJSON(Status &error, const char *message, @@ -1261,8 +1253,8 @@ Status StructuredDataDarwinLog::GetDescription( return false; } - // If we haven't already grabbed the first timestamp - // value, do that now. + // If we haven't already grabbed the first timestamp value, do that + // now. if (!m_recorded_first_timestamp) { uint64_t timestamp = 0; if (event->GetValueForKeyAsInteger("timestamp", timestamp)) { @@ -1300,8 +1292,8 @@ void StructuredDataDarwinLog::ModulesDidLoad(Process &process, // Check if we should enable the darwin log support on startup/attach. if (!GetGlobalProperties()->GetEnableOnStartup() && !s_is_explicitly_enabled) { - // We're neither auto-enabled or explicitly enabled, so we shouldn't - // try to enable here. + // We're neither auto-enabled or explicitly enabled, so we shouldn't try to + // enable here. if (log) log->Printf("StructuredDataDarwinLog::%s not applicable, we're not " "enabled (process uid %u)", @@ -1321,9 +1313,9 @@ void StructuredDataDarwinLog::ModulesDidLoad(Process &process, } } - // The logging support module name, specifies the name of - // the image name that must be loaded into the debugged process before - // we can try to enable logging. + // The logging support module name, specifies the name of the image name that + // must be loaded into the debugged process before we can try to enable + // logging. const char *logging_module_cstr = GetGlobalProperties()->GetLoggingModuleName(); if (!logging_module_cstr || (logging_module_cstr[0] == 0)) { @@ -1363,8 +1355,8 @@ void StructuredDataDarwinLog::ModulesDidLoad(Process &process, return; } - // Time to enqueue the breakpoint so we can wait for logging support - // to be initialized before we try to tap the libtrace stream. + // Time to enqueue the breakpoint so we can wait for logging support to be + // initialized before we try to tap the libtrace stream. AddInitCompletionHook(process); if (log) log->Printf("StructuredDataDarwinLog::%s post-init hook breakpoint " @@ -1372,13 +1364,13 @@ void StructuredDataDarwinLog::ModulesDidLoad(Process &process, __FUNCTION__, logging_module_name.AsCString(), process.GetUniqueID()); - // We need to try the enable here as well, which will succeed - // in the event that we're attaching to (rather than launching) the - // process and the process is already past initialization time. In that - // case, the completion breakpoint will never get hit and therefore won't - // start that way. It doesn't hurt much beyond a bit of bandwidth - // if we end up doing this twice. It hurts much more if we don't get - // the logging enabled when the user expects it. + // We need to try the enable here as well, which will succeed in the event + // that we're attaching to (rather than launching) the process and the + // process is already past initialization time. In that case, the completion + // breakpoint will never get hit and therefore won't start that way. It + // doesn't hurt much beyond a bit of bandwidth if we end up doing this twice. + // It hurts much more if we don't get the logging enabled when the user + // expects it. EnableNow(); } @@ -1415,8 +1407,7 @@ StructuredDataDarwinLog::StructuredDataDarwinLog(const ProcessWP &process_wp) StructuredDataPluginSP StructuredDataDarwinLog::CreateInstance(Process &process) { - // Currently only Apple targets support the os_log/os_activity - // protocol. + // Currently only Apple targets support the os_log/os_activity protocol. if (process.GetTarget().GetArchitecture().GetTriple().getVendor() == llvm::Triple::VendorType::Apple) { auto process_wp = ProcessWP(process.shared_from_this()); @@ -1463,20 +1454,20 @@ Status StructuredDataDarwinLog::FilterLaunchInfo(ProcessLaunchInfo &launch_info, Target *target) { Status error; - // If we're not debugging this launched process, there's nothing for us - // to do here. + // If we're not debugging this launched process, there's nothing for us to do + // here. if (!launch_info.GetFlags().AnySet(eLaunchFlagDebug)) return error; // Darwin os_log() support automatically adds debug-level and info-level // messages when a debugger is attached to a process. However, with - // integrated suppport for debugging built into the command-line LLDB, - // the user may specifically set to *not* include debug-level and info-level - // content. When the user is using the integrated log support, we want - // to put the kabosh on that automatic adding of info and debug level. - // This is done by adding an environment variable to the process on launch. - // (This also means it is not possible to suppress this behavior if - // attaching to an already-running app). + // integrated suppport for debugging built into the command-line LLDB, the + // user may specifically set to *not* include debug-level and info-level + // content. When the user is using the integrated log support, we want to + // put the kabosh on that automatic adding of info and debug level. This is + // done by adding an environment variable to the process on launch. (This + // also means it is not possible to suppress this behavior if attaching to an + // already-running app). // Log *log(GetLogIfAnyCategoriesSet(LIBLLDB_LOG_PLATFORM)); // If the target architecture is not one that supports DarwinLog, we have @@ -1487,20 +1478,19 @@ Status StructuredDataDarwinLog::FilterLaunchInfo(ProcessLaunchInfo &launch_info, return error; } - // If DarwinLog is not enabled (either by explicit user command or via - // the auto-enable option), then we have nothing to do. + // If DarwinLog is not enabled (either by explicit user command or via the + // auto-enable option), then we have nothing to do. if (!GetGlobalProperties()->GetEnableOnStartup() && !s_is_explicitly_enabled) { // Nothing to do, DarwinLog is not enabled. return error; } - // If we don't have parsed configuration info, that implies we have - // enable-on-startup set up, but we haven't yet attempted to run the - // enable command. + // If we don't have parsed configuration info, that implies we have enable- + // on-startup set up, but we haven't yet attempted to run the enable command. if (!target) { - // We really can't do this without a target. We need to be able - // to get to the debugger to get the proper options to do this right. + // We really can't do this without a target. We need to be able to get to + // the debugger to get the proper options to do this right. // TODO log. error.SetErrorString("requires a target to auto-enable DarwinLog."); return error; @@ -1513,28 +1503,28 @@ Status StructuredDataDarwinLog::FilterLaunchInfo(ProcessLaunchInfo &launch_info, if (!options_sp || !error.Success()) return error; - // We already parsed the options, save them now so we don't generate - // them again until the user runs the command manually. + // We already parsed the options, save them now so we don't generate them + // again until the user runs the command manually. SetGlobalEnableOptions(debugger_sp, options_sp); } if (!options_sp->GetEchoToStdErr()) { - // The user doesn't want to see os_log/NSLog messages echo to stderr. - // That mechanism is entirely separate from the DarwinLog support. - // By default we don't want to get it via stderr, because that would - // be in duplicate of the explicit log support here. + // The user doesn't want to see os_log/NSLog messages echo to stderr. That + // mechanism is entirely separate from the DarwinLog support. By default we + // don't want to get it via stderr, because that would be in duplicate of + // the explicit log support here. // Here we need to strip out any OS_ACTIVITY_DT_MODE setting to prevent // echoing of os_log()/NSLog() to stderr in the target program. launch_info.GetEnvironment().erase("OS_ACTIVITY_DT_MODE"); - // We will also set the env var that tells any downstream launcher - // from adding OS_ACTIVITY_DT_MODE. + // We will also set the env var that tells any downstream launcher from + // adding OS_ACTIVITY_DT_MODE. launch_info.GetEnvironment()["IDE_DISABLED_OS_ACTIVITY_DT_MODE"] = "1"; } - // Set the OS_ACTIVITY_MODE env var appropriately to enable/disable - // debug and info level messages. + // Set the OS_ACTIVITY_MODE env var appropriately to enable/disable debug and + // info level messages. const char *env_var_value; if (options_sp->GetIncludeDebugLevel()) env_var_value = "debug"; @@ -1553,8 +1543,8 @@ bool StructuredDataDarwinLog::InitCompletionHookCallback( lldb::user_id_t break_loc_id) { // We hit the init function. We now want to enqueue our new thread plan, // which will in turn enqueue a StepOut thread plan. When the StepOut - // finishes and control returns to our new thread plan, that is the time - // when we can execute our logic to enable the logging support. + // finishes and control returns to our new thread plan, that is the time when + // we can execute our logic to enable the logging support. Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_PROCESS)); if (log) @@ -1613,8 +1603,8 @@ bool StructuredDataDarwinLog::InitCompletionHookCallback( process_uid); return; } - // Make sure we only call it once, just in case the - // thread plan hits the breakpoint twice. + // Make sure we only call it once, just in case the thread plan hits + // the breakpoint twice. if (!called_enable_method) { if (log) log->Printf("StructuredDataDarwinLog::post-init callback: " @@ -1624,8 +1614,8 @@ bool StructuredDataDarwinLog::InitCompletionHookCallback( ->EnableNow(); called_enable_method = true; } else { - // Our breakpoint was hit more than once. Unexpected but - // no harm done. Log it. + // Our breakpoint was hit more than once. Unexpected but no harm + // done. Log it. if (log) log->Printf("StructuredDataDarwinLog::post-init callback: " "skipping EnableNow(), already called by " @@ -1682,8 +1672,8 @@ void StructuredDataDarwinLog::AddInitCompletionHook(Process &process) { m_added_breakpoint = true; } - // Set a breakpoint for the process that will kick in when libtrace - // has finished its initialization. + // Set a breakpoint for the process that will kick in when libtrace has + // finished its initialization. Target &target = process.GetTarget(); // Build up the module list. @@ -1788,8 +1778,8 @@ StructuredDataDarwinLog::DumpHeader(Stream &output_stream, if (header_count > 0) stream.PutChar(','); - // Display the activity chain, from parent-most to child-most - // activity, separated by a colon (:). + // Display the activity chain, from parent-most to child-most activity, + // separated by a colon (:). stream.PutCString("activity-chain="); stream.PutCString(activity_chain); ++header_count; @@ -1831,8 +1821,8 @@ size_t StructuredDataDarwinLog::HandleDisplayOfEvent( // Check the type of the event. ConstString event_type; if (!event.GetValueForKeyAsString("type", event_type)) { - // Hmm, we expected to get events that describe - // what they are. Continue anyway. + // Hmm, we expected to get events that describe what they are. Continue + // anyway. return 0; } @@ -1880,10 +1870,10 @@ void StructuredDataDarwinLog::EnableNow() { log->Printf("StructuredDataDarwinLog::%s() call is for process uid %u", __FUNCTION__, process_sp->GetUniqueID()); - // If we have configuration data, we can directly enable it now. - // Otherwise, we need to run through the command interpreter to parse - // the auto-run options (which is the only way we get here without having - // already-parsed configuration data). + // If we have configuration data, we can directly enable it now. Otherwise, + // we need to run through the command interpreter to parse the auto-run + // options (which is the only way we get here without having already-parsed + // configuration data). DebuggerSP debugger_sp = process_sp->GetTarget().GetDebugger().shared_from_this(); if (!debugger_sp) { @@ -1896,8 +1886,8 @@ void StructuredDataDarwinLog::EnableNow() { auto options_sp = GetGlobalEnableOptions(debugger_sp); if (!options_sp) { - // We haven't run the enable command yet. Just do that now, it'll - // take care of the rest. + // We haven't run the enable command yet. Just do that now, it'll take + // care of the rest. auto &interpreter = debugger_sp->GetCommandInterpreter(); const bool success = RunEnableCommand(interpreter); if (log) { @@ -1920,8 +1910,8 @@ void StructuredDataDarwinLog::EnableNow() { return; } - // We've previously been enabled. We will re-enable now with the - // previously specified options. + // We've previously been enabled. We will re-enable now with the previously + // specified options. auto config_sp = options_sp->BuildConfigurationData(true); if (!config_sp) { if (log) diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp index d9636aef5de..21c795ed7e6 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp @@ -106,9 +106,9 @@ struct BitfieldInfo { bool NextBitfieldOffsetIsValid(const uint64_t next_bit_offset) const { if (IsValid()) { - // This bitfield info is valid, so any subsequent bitfields - // must not overlap and must be at a higher bit offset than - // any previous bitfield + size. + // This bitfield info is valid, so any subsequent bitfields must not + // overlap and must be at a higher bit offset than any previous bitfield + // + size. return (bit_size + bit_offset) <= next_bit_offset; } else { // If the this BitfieldInfo is not valid, then any offset isOK @@ -152,8 +152,8 @@ TypeSP DWARFASTParserClang::ParseTypeFromDWO(const DWARFDIE &die, Log *log) { if (!isClangModuleFwdDecl(die)) return TypeSP(); - // Since this this type is defined in one of the Clang modules - // imported by this symbol file, search all of them. + // Since this this type is defined in one of the Clang modules imported by + // this symbol file, search all of them. auto *SymFile = die.GetCU()->GetSymbolFileDWARF(); for (const auto &NameModule : SymFile->getExternalTypeModules()) { if (!NameModule.second) @@ -168,9 +168,8 @@ TypeSP DWARFASTParserClang::ParseTypeFromDWO(const DWARFDIE &die, Log *log) { if (num_dwo_types != 1) return TypeSP(); - // We found a real definition for this type in the Clang module, so - // lets use it and cache the fact that we found a complete type for - // this die. + // We found a real definition for this type in the Clang module, so lets use + // it and cache the fact that we found a complete type for this die. TypeSP dwo_type_sp = dwo_types.GetTypeAtIndex(0); if (!dwo_type_sp) return TypeSP(); @@ -211,8 +210,7 @@ static void CompleteExternalTagDeclType(ClangASTImporter &ast_importer, if (!tag_decl_ctx) return; - // If this type was not imported from an external AST, there's - // nothing to do. + // If this type was not imported from an external AST, there's nothing to do. CompilerType type = ClangASTContext::GetTypeForDecl(tag_decl_ctx); if (!type || !ast_importer.CanImport(type)) return; @@ -223,8 +221,8 @@ static void CompleteExternalTagDeclType(ClangASTImporter &ast_importer, "Unable to complete the Decl context for DIE '%s' at offset " "0x%8.8x.\nPlease file a bug report.", type_name_cstr ? type_name_cstr : "", die.GetOffset()); - // We need to make the type look complete otherwise, we - // might crash in Clang when adding children. + // We need to make the type look complete otherwise, we might crash in + // Clang when adding children. if (ClangASTContext::StartTagDeclarationDefinition(type)) ClangASTContext::CompleteTagDeclarationDefinition(type); } @@ -312,8 +310,7 @@ TypeSP DWARFASTParserClang::ParseTypeFromDWARF(const SymbolContext &sc, type_name_cstr = form_value.AsCString(); // Work around a bug in llvm-gcc where they give a name to a - // reference type which doesn't - // include the "&"... + // reference type which doesn't include the "&"... if (tag == DW_TAG_reference_type) { if (strchr(type_name_cstr, '&') == NULL) type_name_cstr = NULL; @@ -339,32 +336,32 @@ TypeSP DWARFASTParserClang::ParseTypeFromDWARF(const SymbolContext &sc, } if (tag == DW_TAG_typedef && encoding_uid.IsValid()) { - // Try to parse a typedef from the DWO file first as modules - // can contain typedef'ed structures that have no names like: + // Try to parse a typedef from the DWO file first as modules can + // contain typedef'ed structures that have no names like: // // typedef struct { int a; } Foo; // - // In this case we will have a structure with no name and a - // typedef named "Foo" that points to this unnamed structure. - // The name in the typedef is the only identifier for the struct, - // so always try to get typedefs from DWO files if possible. + // In this case we will have a structure with no name and a typedef + // named "Foo" that points to this unnamed structure. The name in the + // typedef is the only identifier for the struct, so always try to + // get typedefs from DWO files if possible. // - // The type_sp returned will be empty if the typedef doesn't exist - // in a DWO file, so it is cheap to call this function just to check. + // The type_sp returned will be empty if the typedef doesn't exist in + // a DWO file, so it is cheap to call this function just to check. // - // If we don't do this we end up creating a TypeSP that says this - // is a typedef to type 0x123 (the DW_AT_type value would be 0x123 - // in the DW_TAG_typedef), and this is the unnamed structure type. - // We will have a hard time tracking down an unnammed structure - // type in the module DWO file, so we make sure we don't get into - // this situation by always resolving typedefs from the DWO file. + // If we don't do this we end up creating a TypeSP that says this is + // a typedef to type 0x123 (the DW_AT_type value would be 0x123 in + // the DW_TAG_typedef), and this is the unnamed structure type. We + // will have a hard time tracking down an unnammed structure type in + // the module DWO file, so we make sure we don't get into this + // situation by always resolving typedefs from the DWO file. const DWARFDIE encoding_die = dwarf->GetDIE(DIERef(encoding_uid)); - // First make sure that the die that this is typedef'ed to _is_ - // just a declaration (DW_AT_declaration == 1), not a full definition + // First make sure that the die that this is typedef'ed to _is_ just + // a declaration (DW_AT_declaration == 1), not a full definition // since template types can't be represented in modules since only - // concrete instances of templates are ever emitted and modules - // won't contain those + // concrete instances of templates are ever emitted and modules won't + // contain those if (encoding_die && encoding_die.GetAttributeValueAsUnsigned(DW_AT_declaration, 0) == 1) { @@ -563,10 +560,9 @@ TypeSP DWARFASTParserClang::ParseTypeFromDWARF(const SymbolContext &sc, case DW_AT_decl_file: if (die.GetCU()->DW_AT_decl_file_attributes_are_invalid()) { // llvm-gcc outputs invalid DW_AT_decl_file attributes that - // always - // point to the compile unit file, so we clear this invalid - // value - // so that we can still unique types efficiently. + // always point to the compile unit file, so we clear this + // invalid value so that we can still unique types + // efficiently. decl.SetFile(FileSpec("<invalid>", false)); } else decl.SetFile( @@ -625,10 +621,10 @@ TypeSP DWARFASTParserClang::ParseTypeFromDWARF(const SymbolContext &sc, } } - // UniqueDWARFASTType is large, so don't create a local variables on the - // stack, put it on the heap. This function is often called recursively - // and clang isn't good and sharing the stack space for variables in - // different blocks. + // UniqueDWARFASTType is large, so don't create a local variables on + // the stack, put it on the heap. This function is often called + // recursively and clang isn't good and sharing the stack space for + // variables in different blocks. std::unique_ptr<UniqueDWARFASTType> unique_ast_entry_ap( new UniqueDWARFASTType()); @@ -639,10 +635,8 @@ TypeSP DWARFASTParserClang::ParseTypeFromDWARF(const SymbolContext &sc, LanguageType die_language = die.GetLanguage(); if (Language::LanguageIsCPlusPlus(die_language)) { // For C++, we rely solely upon the one definition rule that says - // only - // one thing can exist at a given decl context. We ignore the file - // and - // line that things are declared on. + // only one thing can exist at a given decl context. We ignore the + // file and line that things are declared on. std::string qualified_name; if (die.GetQualifiedName(qualified_name)) unique_typename = ConstString(qualified_name); @@ -679,17 +673,16 @@ TypeSP DWARFASTParserClang::ParseTypeFromDWARF(const SymbolContext &sc, if (byte_size_valid && byte_size == 0 && type_name_cstr && die.HasChildren() == false && sc.comp_unit->GetLanguage() == eLanguageTypeObjC) { - // Work around an issue with clang at the moment where - // forward declarations for objective C classes are emitted - // as: + // Work around an issue with clang at the moment where forward + // declarations for objective C classes are emitted as: // DW_TAG_structure_type [2] // DW_AT_name( "ForwardObjcClass" ) // DW_AT_byte_size( 0x00 ) // DW_AT_decl_file( "..." ) // DW_AT_decl_line( 1 ) // - // Note that there is no DW_AT_declaration and there are - // no children, and the byte size is zero. + // Note that there is no DW_AT_declaration and there are no children, + // and the byte size is zero. is_forward_declaration = true; } @@ -697,11 +690,11 @@ TypeSP DWARFASTParserClang::ParseTypeFromDWARF(const SymbolContext &sc, class_language == eLanguageTypeObjC_plus_plus) { if (!is_complete_objc_class && die.Supports_DW_AT_APPLE_objc_complete_type()) { - // We have a valid eSymbolTypeObjCClass class symbol whose - // name matches the current objective C class that we - // are trying to find and this DIE isn't the complete - // definition (we checked is_complete_objc_class above and - // know it is false), so the real definition is in here somewhere + // We have a valid eSymbolTypeObjCClass class symbol whose name + // matches the current objective C class that we are trying to find + // and this DIE isn't the complete definition (we checked + // is_complete_objc_class above and know it is false), so the real + // definition is in here somewhere type_sp = dwarf->FindCompleteObjCDefinitionTypeForDIE( die, type_name_const_str, true); @@ -709,9 +702,8 @@ TypeSP DWARFASTParserClang::ParseTypeFromDWARF(const SymbolContext &sc, SymbolFileDWARFDebugMap *debug_map_symfile = dwarf->GetDebugMapSymfile(); if (debug_map_symfile) { - // We weren't able to find a full declaration in - // this DWARF, see if we have a declaration anywhere - // else... + // We weren't able to find a full declaration in this DWARF, + // see if we have a declaration anywhere else... type_sp = debug_map_symfile->FindCompleteObjCDefinitionTypeForDIE( die, type_name_const_str, true); @@ -728,9 +720,9 @@ TypeSP DWARFASTParserClang::ParseTypeFromDWARF(const SymbolContext &sc, type_sp->GetID()); } - // We found a real definition for this type elsewhere - // so lets use it and cache the fact that we found - // a complete type for this die + // We found a real definition for this type elsewhere so lets use + // it and cache the fact that we found a complete type for this + // die dwarf->GetDIEToType()[die.GetDIE()] = type_sp.get(); return type_sp; } @@ -738,11 +730,11 @@ TypeSP DWARFASTParserClang::ParseTypeFromDWARF(const SymbolContext &sc, } if (is_forward_declaration) { - // We have a forward declaration to a type and we need - // to try and find a full declaration. We look in the - // current type index just in case we have a forward - // declaration followed by an actual declarations in the - // DWARF. If this fails, we need to look elsewhere... + // We have a forward declaration to a type and we need to try and + // find a full declaration. We look in the current type index just in + // case we have a forward declaration followed by an actual + // declarations in the DWARF. If this fails, we need to look + // elsewhere... if (log) { dwarf->GetObjectFile()->GetModule()->LogMessage( log, "SymbolFileDWARF(%p) - 0x%8.8x: %s type \"%s\" is a " @@ -768,9 +760,8 @@ TypeSP DWARFASTParserClang::ParseTypeFromDWARF(const SymbolContext &sc, SymbolFileDWARFDebugMap *debug_map_symfile = dwarf->GetDebugMapSymfile(); if (debug_map_symfile) { - // We weren't able to find a full declaration in - // this DWARF, see if we have a declaration anywhere - // else... + // We weren't able to find a full declaration in this DWARF, see + // if we have a declaration anywhere else... type_sp = debug_map_symfile->FindDefinitionTypeForDWARFDeclContext( die_decl_ctx); @@ -786,9 +777,8 @@ TypeSP DWARFASTParserClang::ParseTypeFromDWARF(const SymbolContext &sc, DW_TAG_value_to_name(tag), type_name_cstr, type_sp->GetID()); } - // We found a real definition for this type elsewhere - // so lets use it and cache the fact that we found - // a complete type for this die + // We found a real definition for this type elsewhere so lets use + // it and cache the fact that we found a complete type for this die dwarf->GetDIEToType()[die.GetDIE()] = type_sp.get(); clang::DeclContext *defn_decl_ctx = GetCachedClangDeclContextForDIE( dwarf->DebugInfo()->GetDIE(DIERef(type_sp->GetID(), dwarf))); @@ -805,18 +795,17 @@ TypeSP DWARFASTParserClang::ParseTypeFromDWARF(const SymbolContext &sc, clang::DeclContext *decl_ctx = GetClangDeclContextContainingDIE(die, nullptr); - // If your decl context is a record that was imported from - // another AST context (in the gmodules case), we need to - // make sure the type backing the Decl is complete before - // adding children to it. This is not an issue in the - // non-gmodules case because the debug info will always contain - // a full definition of parent types in that case. + // If your decl context is a record that was imported from another + // AST context (in the gmodules case), we need to make sure the type + // backing the Decl is complete before adding children to it. This is + // not an issue in the non-gmodules case because the debug info will + // always contain a full definition of parent types in that case. CompleteExternalTagDeclType(GetClangASTImporter(), decl_ctx, die, type_name_cstr); if (accessibility == eAccessNone && decl_ctx) { - // Check the decl context that contains this class/struct/union. - // If it is a class we must give it an accessibility. + // Check the decl context that contains this class/struct/union. If + // it is a class we must give it an accessibility. const clang::Decl::Kind containing_decl_kind = decl_ctx->getDeclKind(); if (DeclKindIsCXXClass(containing_decl_kind)) @@ -868,8 +857,8 @@ TypeSP DWARFASTParserClang::ParseTypeFromDWARF(const SymbolContext &sc, } // Store a forward declaration to this class type in case any - // parameters in any class methods need it for the clang - // types for function prototypes. + // parameters in any class methods need it for the clang types for + // function prototypes. LinkDeclContextToDIE(m_ast.GetDeclContextForType(clang_type), die); type_sp.reset(new Type(die.GetID(), dwarf, type_name_const_str, byte_size, NULL, LLDB_INVALID_UID, @@ -878,9 +867,9 @@ TypeSP DWARFASTParserClang::ParseTypeFromDWARF(const SymbolContext &sc, type_sp->SetIsCompleteObjCClass(is_complete_objc_class); - // Add our type to the unique type map so we don't - // end up creating many copies of the same type over - // and over in the ASTContext for our module + // Add our type to the unique type map so we don't end up creating many + // copies of the same type over and over in the ASTContext for our + // module unique_ast_entry_ap->m_type_sp = type_sp; unique_ast_entry_ap->m_die = die; unique_ast_entry_ap->m_declaration = unique_decl; @@ -892,8 +881,7 @@ TypeSP DWARFASTParserClang::ParseTypeFromDWARF(const SymbolContext &sc, // Check to see if the DIE actually has a definition, some version of // GCC will // emit DIEs with DW_AT_declaration set to true, but yet still have - // subprogram, - // members, or inheritance, so we can't trust it + // subprogram, members, or inheritance, so we can't trust it DWARFDIE child_die = die.GetFirstChild(); while (child_die) { switch (child_die.Tag()) { @@ -917,10 +905,10 @@ TypeSP DWARFASTParserClang::ParseTypeFromDWARF(const SymbolContext &sc, } if (!is_forward_declaration) { - // Always start the definition for a class type so that - // if the class has child classes or types that require - // the class to be created for use as their decl contexts - // the class will be ready to accept these child definitions. + // Always start the definition for a class type so that if the class + // has child classes or types that require the class to be created + // for use as their decl contexts the class will be ready to accept + // these child definitions. if (die.HasChildren() == false) { // No children for this struct/union/class, lets finish it if (ClangASTContext::StartTagDeclarationDefinition(clang_type)) { @@ -944,33 +932,30 @@ TypeSP DWARFASTParserClang::ParseTypeFromDWARF(const SymbolContext &sc, } } } else if (clang_type_was_created) { - // Start the definition if the class is not objective C since - // the underlying decls respond to isCompleteDefinition(). Objective + // Start the definition if the class is not objective C since the + // underlying decls respond to isCompleteDefinition(). Objective // C decls don't respond to isCompleteDefinition() so we can't // start the declaration definition right away. For C++ - // class/union/structs - // we want to start the definition in case the class is needed as - // the - // declaration context for a contained class or type without the - // need - // to complete that type.. + // class/union/structs we want to start the definition in case the + // class is needed as the declaration context for a contained class + // or type without the need to complete that type.. if (class_language != eLanguageTypeObjC && class_language != eLanguageTypeObjC_plus_plus) ClangASTContext::StartTagDeclarationDefinition(clang_type); - // Leave this as a forward declaration until we need - // to know the details of the type. lldb_private::Type - // will automatically call the SymbolFile virtual function - // "SymbolFileDWARF::CompleteType(Type *)" - // When the definition needs to be defined. + // Leave this as a forward declaration until we need to know the + // details of the type. lldb_private::Type will automatically call + // the SymbolFile virtual function + // "SymbolFileDWARF::CompleteType(Type *)" When the definition + // needs to be defined. assert(!dwarf->GetForwardDeclClangTypeToDie().count( ClangUtil::RemoveFastQualifiers(clang_type) .GetOpaqueQualType()) && "Type already in the forward declaration map!"); - // Can't assume m_ast.GetSymbolFile() is actually a SymbolFileDWARF, - // it can be a - // SymbolFileDWARFDebugMap for Apple binaries. + // Can't assume m_ast.GetSymbolFile() is actually a + // SymbolFileDWARF, it can be a SymbolFileDWARFDebugMap for Apple + // binaries. dwarf->GetForwardDeclDieToClangType()[die.GetDIE()] = clang_type.GetOpaqueQualType(); dwarf->GetForwardDeclClangTypeToDie() @@ -980,11 +965,10 @@ TypeSP DWARFASTParserClang::ParseTypeFromDWARF(const SymbolContext &sc, } } - // If we made a clang type, set the trivial abi if applicable: - // We only do this for pass by value - which implies the Trivial ABI. - // There isn't a way to assert that something that would normally be - // pass by value is pass by reference, so we ignore that attribute if - // set. + // If we made a clang type, set the trivial abi if applicable: We only + // do this for pass by value - which implies the Trivial ABI. There + // isn't a way to assert that something that would normally be pass by + // value is pass by reference, so we ignore that attribute if set. if (calling_convention == llvm::dwarf::DW_CC_pass_by_value) { clang::CXXRecordDecl *record_decl = m_ast.GetAsCXXRecordDecl(clang_type.GetOpaqueQualType()); @@ -1070,9 +1054,8 @@ TypeSP DWARFASTParserClang::ParseTypeFromDWARF(const SymbolContext &sc, SymbolFileDWARFDebugMap *debug_map_symfile = dwarf->GetDebugMapSymfile(); if (debug_map_symfile) { - // We weren't able to find a full declaration in - // this DWARF, see if we have a declaration anywhere - // else... + // We weren't able to find a full declaration in this DWARF, + // see if we have a declaration anywhere else... type_sp = debug_map_symfile->FindDefinitionTypeForDWARFDeclContext( die_decl_ctx); @@ -1089,9 +1072,9 @@ TypeSP DWARFASTParserClang::ParseTypeFromDWARF(const SymbolContext &sc, type_sp->GetID()); } - // We found a real definition for this type elsewhere - // so lets use it and cache the fact that we found - // a complete type for this die + // We found a real definition for this type elsewhere so lets use + // it and cache the fact that we found a complete type for this + // die dwarf->GetDIEToType()[die.GetDIE()] = type_sp.get(); clang::DeclContext *defn_decl_ctx = GetCachedClangDeclContextForDIE(dwarf->DebugInfo()->GetDIE( @@ -1317,8 +1300,8 @@ TypeSP DWARFASTParserClang::ParseTypeFromDWARF(const SymbolContext &sc, bool is_cxx_method = DeclKindIsCXXClass(containing_decl_kind); // Start off static. This will be set to false in - // ParseChildParameters(...) - // if we find a "this" parameters as the first parameter + // ParseChildParameters(...) if we find a "this" parameters as the + // first parameter if (is_cxx_method) { is_static = true; } @@ -1333,25 +1316,22 @@ TypeSP DWARFASTParserClang::ParseTypeFromDWARF(const SymbolContext &sc, bool ignore_containing_context = false; // Check for templatized class member functions. If we had any - // DW_TAG_template_type_parameter - // or DW_TAG_template_value_parameter the DW_TAG_subprogram DIE, then we - // can't let this become - // a method in a class. Why? Because templatized functions are only - // emitted if one of the - // templatized methods is used in the current compile unit and we will - // end up with classes - // that may or may not include these member functions and this means one - // class won't match another - // class definition and it affects our ability to use a class in the - // clang expression parser. So - // for the greater good, we currently must not allow any template member - // functions in a class definition. + // DW_TAG_template_type_parameter or DW_TAG_template_value_parameter + // the DW_TAG_subprogram DIE, then we can't let this become a method in + // a class. Why? Because templatized functions are only emitted if one + // of the templatized methods is used in the current compile unit and + // we will end up with classes that may or may not include these member + // functions and this means one class won't match another class + // definition and it affects our ability to use a class in the clang + // expression parser. So for the greater good, we currently must not + // allow any template member functions in a class definition. if (is_cxx_method && has_template_params) { ignore_containing_context = true; is_cxx_method = false; } - // clang_type will get the function prototype clang type after this call + // clang_type will get the function prototype clang type after this + // call clang_type = m_ast.CreateFunctionType( return_clang_type, function_param_types.data(), function_param_types.size(), is_variadic, type_quals); @@ -1379,8 +1359,7 @@ TypeSP DWARFASTParserClang::ParseTypeFromDWARF(const SymbolContext &sc, if (class_opaque_type) { // If accessibility isn't set to anything valid, assume public - // for - // now... + // for now... if (accessibility == eAccessNone) accessibility = eAccessPublic; @@ -1402,9 +1381,8 @@ TypeSP DWARFASTParserClang::ParseTypeFromDWARF(const SymbolContext &sc, } } } else if (is_cxx_method) { - // Look at the parent of this DIE and see if is is - // a class or struct and see if this is actually a - // C++ method + // Look at the parent of this DIE and see if is is a class or + // struct and see if this is actually a C++ method Type *class_type = dwarf->ResolveType(decl_ctx_die); if (class_type) { bool alternate_defn = false; @@ -1413,10 +1391,8 @@ TypeSP DWARFASTParserClang::ParseTypeFromDWARF(const SymbolContext &sc, alternate_defn = true; // We uniqued the parent class of this function to another - // class - // so we now need to associate all dies under "decl_ctx_die" - // to - // DIEs in the DIE for "class_type"... + // class so we now need to associate all dies under + // "decl_ctx_die" to DIEs in the DIE for "class_type"... SymbolFileDWARF *class_symfile = NULL; DWARFDIE class_type_die; @@ -1442,10 +1418,8 @@ TypeSP DWARFASTParserClang::ParseTypeFromDWARF(const SymbolContext &sc, // FIXME do something with these failures that's smarter // than // just dropping them on the ground. Unfortunately classes - // don't - // like having stuff added to them after their definitions - // are - // complete... + // don't like having stuff added to them after their + // definitions are complete... type_ptr = dwarf->GetDIEToType()[die.GetDIE()]; if (type_ptr && type_ptr != DIE_IS_BEING_PARSED) { @@ -1457,16 +1431,13 @@ TypeSP DWARFASTParserClang::ParseTypeFromDWARF(const SymbolContext &sc, if (specification_die_form.IsValid()) { // We have a specification which we are going to base our - // function - // prototype off of, so we need this type to be completed so - // that the - // m_die_to_decl_ctx for the method in the specification has a - // valid - // clang decl context. + // function prototype off of, so we need this type to be + // completed so that the m_die_to_decl_ctx for the method in + // the specification has a valid clang decl context. class_type->GetForwardCompilerType(); // If we have a specification, then the function type should - // have been - // made with the specification and not with this die. + // have been made with the specification and not with this + // die. DWARFDIE spec_die = dwarf->DebugInfo()->GetDIE( DIERef(specification_die_form)); clang::DeclContext *spec_clang_decl_ctx = @@ -1482,12 +1453,9 @@ TypeSP DWARFASTParserClang::ParseTypeFromDWARF(const SymbolContext &sc, type_handled = true; } else if (abstract_origin_die_form.IsValid()) { // We have a specification which we are going to base our - // function - // prototype off of, so we need this type to be completed so - // that the - // m_die_to_decl_ctx for the method in the abstract origin has - // a valid - // clang decl context. + // function prototype off of, so we need this type to be + // completed so that the m_die_to_decl_ctx for the method in + // the abstract origin has a valid clang decl context. class_type->GetForwardCompilerType(); DWARFDIE abs_die = dwarf->DebugInfo()->GetDIE( @@ -1510,17 +1478,16 @@ TypeSP DWARFASTParserClang::ParseTypeFromDWARF(const SymbolContext &sc, if (class_opaque_type.IsBeingDefined() || alternate_defn) { if (!is_static && !die.HasChildren()) { // We have a C++ member function with no children (this - // pointer!) - // and clang will get mad if we try and make a function - // that isn't - // well formed in the DWARF, so we will just skip it... + // pointer!) and clang will get mad if we try and make + // a function that isn't well formed in the DWARF, so + // we will just skip it... type_handled = true; } else { bool add_method = true; if (alternate_defn) { // If an alternate definition for the class exists, - // then add the method only if an - // equivalent is not already present. + // then add the method only if an equivalent is not + // already present. clang::CXXRecordDecl *record_decl = m_ast.GetAsCXXRecordDecl( class_opaque_type.GetOpaqueQualType()); @@ -1560,9 +1527,8 @@ TypeSP DWARFASTParserClang::ParseTypeFromDWARF(const SymbolContext &sc, const bool is_attr_used = false; // Neither GCC 4.2 nor clang++ currently set a valid - // accessibility - // in the DWARF for C++ methods... Default to public - // for now... + // accessibility in the DWARF for C++ methods... + // Default to public for now... if (accessibility == eAccessNone) accessibility = eAccessPublic; @@ -1603,25 +1569,21 @@ TypeSP DWARFASTParserClang::ParseTypeFromDWARF(const SymbolContext &sc, } } else { // We were asked to parse the type for a method in a - // class, yet the - // class hasn't been asked to complete itself through the - // clang::ExternalASTSource protocol, so we need to just - // have the - // class complete itself and do things the right way, then - // our + // class, yet the class hasn't been asked to complete + // itself through the clang::ExternalASTSource protocol, + // so we need to just have the class complete itself and + // do things the right way, then our // DIE should then have an entry in the // dwarf->GetDIEToType() map. First // we need to modify the dwarf->GetDIEToType() so it - // doesn't think we are - // trying to parse this DIE anymore... + // doesn't think we are trying to parse this DIE + // anymore... dwarf->GetDIEToType()[die.GetDIE()] = NULL; // Now we get the full type to force our class type to - // complete itself - // using the clang::ExternalASTSource protocol which will - // parse all - // base classes and all methods (including the method for - // this DIE). + // complete itself using the clang::ExternalASTSource + // protocol which will parse all base classes and all + // methods (including the method for this DIE). class_type->GetFullCompilerType(); // The type for this DIE should have been filled in the @@ -1635,8 +1597,7 @@ TypeSP DWARFASTParserClang::ParseTypeFromDWARF(const SymbolContext &sc, // FIXME This is fixing some even uglier behavior but we // really need to // uniq the methods of each class as well as the class - // itself. - // <rdar://problem/11240464> + // itself. <rdar://problem/11240464> type_handled = true; } } @@ -1821,11 +1782,10 @@ TypeSP DWARFASTParserClang::ParseTypeFromDWARF(const SymbolContext &sc, } // We have no choice other than to pretend that the element class - // type - // is complete. If we don't do this, clang will crash when trying - // to layout the class. Since we provide layout assistance, all - // ivars in this class and other classes will be fine, this is - // the best we can do short of crashing. + // type is complete. If we don't do this, clang will crash when + // trying to layout the class. Since we provide layout + // assistance, all ivars in this class and other classes will be + // fine, this is the best we can do short of crashing. if (ClangASTContext::StartTagDeclarationDefinition( array_element_type)) { ClangASTContext::CompleteTagDeclarationDefinition( @@ -2148,9 +2108,9 @@ bool DWARFASTParserClang::ParseTemplateParameterInfos( return template_param_infos.args.size() == template_param_infos.names.size(); } -// Checks whether m1 is an overload of m2 (as opposed to an override). -// This is called by addOverridesForMethod to distinguish overrides (which share -// a vtable entry) from overloads (which require distinct entries). +// Checks whether m1 is an overload of m2 (as opposed to an override). This is +// called by addOverridesForMethod to distinguish overrides (which share a +// vtable entry) from overloads (which require distinct entries). static bool isOverload(clang::CXXMethodDecl *m1, clang::CXXMethodDecl *m2) { // FIXME: This should detect covariant return types, but currently doesn't. lldbassert(&m1->getASTContext() == &m2->getASTContext() && @@ -2179,8 +2139,8 @@ static bool isOverload(clang::CXXMethodDecl *m1, clang::CXXMethodDecl *m2) { } // If decl is a virtual method, walk the base classes looking for methods that -// decl overrides. This table of overridden methods is used by IRGen to determine -// the vtable layout for decl's parent class. +// decl overrides. This table of overridden methods is used by IRGen to +// determine the vtable layout for decl's parent class. static void addOverridesForMethod(clang::CXXMethodDecl *decl) { if (!decl->isVirtual()) return; @@ -2254,10 +2214,10 @@ bool DWARFASTParserClang::CompleteTypeFromDWARF(const DWARFDIE &die, #if defined LLDB_CONFIGURATION_DEBUG //---------------------------------------------------------------------- - // For debugging purposes, the LLDB_DWARF_DONT_COMPLETE_TYPENAMES - // environment variable can be set with one or more typenames separated - // by ';' characters. This will cause this function to not complete any - // types whose names match. + // For debugging purposes, the LLDB_DWARF_DONT_COMPLETE_TYPENAMES environment + // variable can be set with one or more typenames separated by ';' + // characters. This will cause this function to not complete any types whose + // names match. // // Examples of setting this environment variable: // @@ -2308,8 +2268,8 @@ bool DWARFASTParserClang::CompleteTypeFromDWARF(const DWARFDIE &die, LanguageType class_language = eLanguageTypeUnknown; if (ClangASTContext::IsObjCObjectOrInterfaceType(clang_type)) { class_language = eLanguageTypeObjC; - // For objective C we don't start the definition when - // the class is created. + // For objective C we don't start the definition when the class is + // created. ClangASTContext::StartTagDeclarationDefinition(clang_type); } @@ -2381,29 +2341,27 @@ bool DWARFASTParserClang::CompleteTypeFromDWARF(const DWARFDIE &die, clang::TTK_Class); } - // Since DW_TAG_structure_type gets used for both classes - // and structures, we may need to set any DW_TAG_member - // fields to have a "private" access if none was specified. - // When we parsed the child members we tracked that actual - // accessibility value for each DW_TAG_member in the - // "member_accessibilities" array. If the value for the - // member is zero, then it was set to the "default_accessibility" - // which for structs was "public". Below we correct this - // by setting any fields to "private" that weren't correctly - // set. + // Since DW_TAG_structure_type gets used for both classes and + // structures, we may need to set any DW_TAG_member fields to have a + // "private" access if none was specified. When we parsed the child + // members we tracked that actual accessibility value for each + // DW_TAG_member in the "member_accessibilities" array. If the value + // for the member is zero, then it was set to the + // "default_accessibility" which for structs was "public". Below we + // correct this by setting any fields to "private" that weren't + // correctly set. if (is_a_class && !member_accessibilities.empty()) { - // This is a class and all members that didn't have - // their access specified are private. + // This is a class and all members that didn't have their access + // specified are private. m_ast.SetDefaultAccessForRecordFields( m_ast.GetAsRecordDecl(clang_type), eAccessPrivate, &member_accessibilities.front(), member_accessibilities.size()); } if (!base_classes.empty()) { - // Make sure all base classes refer to complete types and not - // forward declarations. If we don't do this, clang will crash - // with an assertion in the call to - // clang_type.SetBaseClassesForClassType() + // Make sure all base classes refer to complete types and not forward + // declarations. If we don't do this, clang will crash with an + // assertion in the call to clang_type.SetBaseClassesForClassType() for (auto &base_class : base_classes) { clang::TypeSourceInfo *type_source_info = base_class->getTypeSourceInfo(); @@ -2423,11 +2381,10 @@ bool DWARFASTParserClang::CompleteTypeFromDWARF(const DWARFDIE &die, // We have no choice other than to pretend that the base class // is complete. If we don't do this, clang will crash when we // call setBases() inside of - // "clang_type.SetBaseClassesForClassType()" - // below. Since we provide layout assistance, all ivars in this - // class and other classes will be fine, this is the best we can - // do - // short of crashing. + // "clang_type.SetBaseClassesForClassType()" below. Since we + // provide layout assistance, all ivars in this class and other + // classes will be fine, this is the best we can do short of + // crashing. if (ClangASTContext::StartTagDeclarationDefinition( base_class_type)) { ClangASTContext::CompleteTagDeclarationDefinition( @@ -2440,8 +2397,8 @@ bool DWARFASTParserClang::CompleteTypeFromDWARF(const DWARFDIE &die, &base_classes.front(), base_classes.size()); - // Clang will copy each CXXBaseSpecifier in "base_classes" - // so we have to free them all. + // Clang will copy each CXXBaseSpecifier in "base_classes" so we have + // to free them all. ClangASTContext::DeleteBaseClassSpecifiers(&base_classes.front(), base_classes.size()); } @@ -2751,10 +2708,8 @@ Function *DWARFASTParserClang::ParseFunctionFromDWARF(const SymbolContext &sc, Language::LanguageIsCPlusPlus(die.GetLanguage()) && name && strcmp(name, "main") != 0) { // If the mangled name is not present in the DWARF, generate the - // demangled name - // using the decl context. We skip if the function is "main" as its name - // is - // never mangled. + // demangled name using the decl context. We skip if the function is + // "main" as its name is never mangled. bool is_static = false; bool is_variadic = false; bool has_template_params = false; @@ -2928,8 +2883,8 @@ bool DWARFASTParserClang::ParseChildMembers( } } else { // With DWARF 3 and later, if the value is an integer constant, - // this form value is the offset in bytes from the beginning - // of the containing entity. + // this form value is the offset in bytes from the beginning of + // the containing entity. member_byte_offset = form_value.Unsigned(); } break; @@ -2971,8 +2926,8 @@ bool DWARFASTParserClang::ParseChildMembers( ConstString fixed_getter; ConstString fixed_setter; - // Check if the property getter/setter were provided as full - // names. We want basenames, so we extract them. + // Check if the property getter/setter were provided as full names. + // We want basenames, so we extract them. if (prop_getter_name && prop_getter_name[0] == '-') { ObjCLanguage::MethodName prop_getter_method(prop_getter_name, true); @@ -2984,8 +2939,7 @@ bool DWARFASTParserClang::ParseChildMembers( prop_setter_name = prop_setter_method.GetSelector().GetCString(); } - // If the names haven't been provided, they need to be - // filled in. + // If the names haven't been provided, they need to be filled in. if (!prop_getter_name) { prop_getter_name = prop_name; @@ -3001,19 +2955,18 @@ bool DWARFASTParserClang::ParseChildMembers( } } - // Clang has a DWARF generation bug where sometimes it - // represents fields that are references with bad byte size - // and bit size/offset information such as: + // Clang has a DWARF generation bug where sometimes it represents + // fields that are references with bad byte size and bit size/offset + // information such as: // // DW_AT_byte_size( 0x00 ) // DW_AT_bit_size( 0x40 ) // DW_AT_bit_offset( 0xffffffffffffffc0 ) // - // So check the bit offset to make sure it is sane, and if - // the values are not sane, remove them. If we don't do this - // then we will end up with a crash if we try to use this - // type in an expression when clang becomes unhappy with its - // recycled debug info. + // So check the bit offset to make sure it is sane, and if the values + // are not sane, remove them. If we don't do this then we will end up + // with a crash if we try to use this type in an expression when clang + // becomes unhappy with its recycled debug info. if (byte_size == 0 && bit_offset < 0) { bit_size = 0; @@ -3027,12 +2980,10 @@ bool DWARFASTParserClang::ParseChildMembers( if (member_idx == 0 && !is_artificial && name && (strstr(name, "_vptr$") == name)) { - // Not all compilers will mark the vtable pointer - // member as artificial (llvm-gcc). We can't have - // the virtual members in our classes otherwise it - // throws off all child offsets since we end up - // having and extra pointer sized member in our - // class layouts. + // Not all compilers will mark the vtable pointer member as + // artificial (llvm-gcc). We can't have the virtual members in our + // classes otherwise it throws off all child offsets since we end up + // having and extra pointer sized member in our class layouts. is_artificial = true; } @@ -3072,15 +3023,15 @@ bool DWARFASTParserClang::ParseChildMembers( ///////////////////////////////////////////////////////////// // How to locate a field given the DWARF debug information // - // AT_byte_size indicates the size of the word in which the - // bit offset must be interpreted. + // AT_byte_size indicates the size of the word in which the bit + // offset must be interpreted. // // AT_data_member_location indicates the byte offset of the // word from the base address of the structure. // // AT_bit_offset indicates how many bits into the word - // (according to the host endianness) the low-order bit of - // the field starts. AT_bit_offset can be negative. + // (according to the host endianness) the low-order bit of the + // field starts. AT_bit_offset can be negative. // // AT_bit_size indicates the size of the field in bits. ///////////////////////////////////////////////////////////// @@ -3121,12 +3072,9 @@ bool DWARFASTParserClang::ParseChildMembers( field_bit_offset = this_field_info.bit_offset; // If the member to be emitted did not start on a character - // boundary and there is - // empty space between the last field and this one, then we need - // to emit an - // anonymous member filling up the space up to its start. There - // are three cases - // here: + // boundary and there is empty space between the last field and + // this one, then we need to emit an anonymous member filling + // up the space up to its start. There are three cases here: // // 1 If the previous member ended on a character boundary, then // we can emit an @@ -3151,10 +3099,8 @@ bool DWARFASTParserClang::ParseChildMembers( const uint64_t word_width = 32; // Objective-C has invalid DW_AT_bit_offset values in older - // versions - // of clang, so we have to be careful and only insert unnamed - // bitfields - // if we have a new enough clang. + // versions of clang, so we have to be careful and only insert + // unnamed bitfields if we have a new enough clang. bool detect_unnamed_bitfields = true; if (class_language == eLanguageTypeObjC || @@ -3217,10 +3163,10 @@ bool DWARFASTParserClang::ParseChildMembers( { // Older versions of clang emit array[0] and array[1] in the - // same way (<rdar://problem/12566646>). - // If the current field is at the end of the structure, then - // there is definitely no room for extra - // elements and we override the type to array[0]. + // same way (<rdar://problem/12566646>). If the current field + // is at the end of the structure, then there is definitely no + // room for extra elements and we override the type to + // array[0]. CompilerType member_array_element_type; uint64_t member_array_size; @@ -3272,12 +3218,11 @@ bool DWARFASTParserClang::ParseChildMembers( die.GetOffset(), name, sc.comp_unit ? sc.comp_unit->GetPath().c_str() : "the source file"); - // We have no choice other than to pretend that the member class - // is complete. If we don't do this, clang will crash when - // trying - // to layout the class. Since we provide layout assistance, all - // ivars in this class and other classes will be fine, this is - // the best we can do short of crashing. + // We have no choice other than to pretend that the member + // class is complete. If we don't do this, clang will crash + // when trying to layout the class. Since we provide layout + // assistance, all ivars in this class and other classes will + // be fine, this is the best we can do short of crashing. if (ClangASTContext::StartTagDeclarationDefinition( member_clang_type)) { ClangASTContext::CompleteTagDeclarationDefinition( @@ -3399,8 +3344,8 @@ bool DWARFASTParserClang::ParseChildMembers( } } else { // With DWARF 3 and later, if the value is an integer constant, - // this form value is the offset in bytes from the beginning - // of the containing entity. + // this form value is the offset in bytes from the beginning of + // the containing entity. member_byte_offset = form_value.Unsigned(); } break; @@ -3446,18 +3391,16 @@ bool DWARFASTParserClang::ParseChildMembers( if (is_virtual) { // Do not specify any offset for virtual inheritance. The DWARF - // produced by clang doesn't - // give us a constant offset, but gives us a DWARF expressions that - // requires an actual object - // in memory. the DW_AT_data_member_location for a virtual base - // class looks like: + // produced by clang doesn't give us a constant offset, but gives + // us a DWARF expressions that requires an actual object in memory. + // the DW_AT_data_member_location for a virtual base class looks + // like: // DW_AT_data_member_location( DW_OP_dup, DW_OP_deref, // DW_OP_constu(0x00000018), DW_OP_minus, DW_OP_deref, // DW_OP_plus ) // Given this, there is really no valid response we can give to - // clang for virtual base - // class offsets, and this should eventually be removed from - // LayoutRecordType() in the external + // clang for virtual base class offsets, and this should eventually + // be removed from LayoutRecordType() in the external // AST source in clang. } else { layout_info.base_offsets.insert(std::make_pair( @@ -3547,14 +3490,13 @@ size_t DWARFASTParserClang::ParseChildParameters( bool skip = false; if (skip_artificial) { if (is_artificial) { - // In order to determine if a C++ member function is - // "const" we have to look at the const-ness of "this"... - // Ugly, but that + // In order to determine if a C++ member function is "const" we + // have to look at the const-ness of "this"... Ugly, but that if (arg_idx == 0) { if (DeclKindIsCXXClass(containing_decl_ctx->getDeclKind())) { // Often times compilers omit the "this" name for the - // specification DIEs, so we can't rely upon the name - // being in the formal parameter DIE... + // specification DIEs, so we can't rely upon the name being in + // the formal parameter DIE... if (name == NULL || ::strcmp(name, "this") == 0) { Type *this_type = die.ResolveTypeUID(DIERef(param_type_die_form)); @@ -3618,10 +3560,10 @@ size_t DWARFASTParserClang::ParseChildParameters( case DW_TAG_template_type_parameter: case DW_TAG_template_value_parameter: case DW_TAG_GNU_template_parameter_pack: - // The one caller of this was never using the template_param_infos, - // and the local variable was taking up a large amount of stack space - // in SymbolFileDWARF::ParseType() so this was removed. If we ever need - // the template params back, we can add them back. + // The one caller of this was never using the template_param_infos, and + // the local variable was taking up a large amount of stack space in + // SymbolFileDWARF::ParseType() so this was removed. If we ever need the + // template params back, we can add them back. // ParseTemplateDIE (dwarf_cu, die, template_param_infos); has_template_params = true; break; @@ -4157,8 +4099,8 @@ bool DWARFASTParserClang::CopyUniqueClassMethodTypes( // Now do the work of linking the DeclContexts and Types. if (fast_path) { - // We can do this quickly. Just run across the tables index-for-index since - // we know each node has matching names and tags. + // We can do this quickly. Just run across the tables index-for-index + // since we know each node has matching names and tags. for (idx = 0; idx < src_size; ++idx) { src_die = src_name_to_die.GetValueAtIndexUnchecked(idx); dst_die = dst_name_to_die.GetValueAtIndexUnchecked(idx); @@ -4195,9 +4137,9 @@ bool DWARFASTParserClang::CopyUniqueClassMethodTypes( } } } else { - // We must do this slowly. For each member of the destination, look - // up a member in the source with the same name, check its tag, and - // unique them if everything matches up. Report failures. + // We must do this slowly. For each member of the destination, look up a + // member in the source with the same name, check its tag, and unique them + // if everything matches up. Report failures. if (!src_name_to_die.IsEmpty() && !dst_name_to_die.IsEmpty()) { src_name_to_die.Sort(); diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserGo.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserGo.cpp index 631e40f4423..28a93805547 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserGo.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserGo.cpp @@ -157,7 +157,8 @@ TypeSP DWARFASTParserGo::ParseTypeFromDWARF( Type *type = dwarf->ResolveTypeUID(encoding_uid); if (type) { if (go_kind == 0 && type->GetName() == type_name_const_str) { - // Go emits extra typedefs as a forward declaration. Ignore these. + // Go emits extra typedefs as a forward declaration. Ignore + // these. dwarf->m_die_to_type[die.GetDIE()] = type; return type->shared_from_this(); } @@ -212,10 +213,10 @@ TypeSP DWARFASTParserGo::ParseTypeFromDWARF( // TODO(ribrdb): Do we need this? - // UniqueDWARFASTType is large, so don't create a local variables on the - // stack, put it on the heap. This function is often called recursively - // and clang isn't good and sharing the stack space for variables in - // different blocks. + // UniqueDWARFASTType is large, so don't create a local variables on + // the stack, put it on the heap. This function is often called + // recursively and clang isn't good and sharing the stack space for + // variables in different blocks. std::unique_ptr<UniqueDWARFASTType> unique_ast_entry_ap( new UniqueDWARFASTType()); @@ -224,11 +225,10 @@ TypeSP DWARFASTParserGo::ParseTypeFromDWARF( dwarf->GetUniqueDWARFASTTypeMap().Find( type_name_const_str, die, decl, byte_size_valid ? byte_size : -1, *unique_ast_entry_ap)) { - // We have already parsed this type or from another - // compile unit. GCC loves to use the "one definition - // rule" which can result in multiple definitions - // of the same class over and over in each compile - // unit. + // We have already parsed this type or from another compile unit. GCC + // loves to use the "one definition rule" which can result in + // multiple definitions of the same class over and over in each + // compile unit. type_sp = unique_ast_entry_ap->m_type_sp; if (type_sp) { dwarf->m_die_to_type[die.GetDIE()] = type_sp.get(); @@ -254,9 +254,9 @@ TypeSP DWARFASTParserGo::ParseTypeFromDWARF( Type::eEncodingIsUID, &decl, compiler_type, Type::eResolveStateForward)); - // Add our type to the unique type map so we don't - // end up creating many copies of the same type over - // and over in the ASTContext for our module + // Add our type to the unique type map so we don't end up creating many + // copies of the same type over and over in the ASTContext for our + // module unique_ast_entry_ap->m_type_sp = type_sp; unique_ast_entry_ap->m_die = die; unique_ast_entry_ap->m_declaration = decl; @@ -265,19 +265,19 @@ TypeSP DWARFASTParserGo::ParseTypeFromDWARF( *unique_ast_entry_ap); if (!is_forward_declaration) { - // Always start the definition for a class type so that - // if the class has child classes or types that require - // the class to be created for use as their decl contexts - // the class will be ready to accept these child definitions. + // Always start the definition for a class type so that if the class + // has child classes or types that require the class to be created + // for use as their decl contexts the class will be ready to accept + // these child definitions. if (die.HasChildren() == false) { // No children for this struct/union/class, lets finish it m_ast.CompleteStructType(compiler_type); } else if (compiler_type_was_created) { - // Leave this as a forward declaration until we need - // to know the details of the type. lldb_private::Type - // will automatically call the SymbolFile virtual function - // "SymbolFileDWARF::CompleteType(Type *)" - // When the definition needs to be defined. + // Leave this as a forward declaration until we need to know the + // details of the type. lldb_private::Type will automatically call + // the SymbolFile virtual function + // "SymbolFileDWARF::CompleteType(Type *)" When the definition + // needs to be defined. dwarf->m_forward_decl_die_to_clang_type[die.GetDIE()] = compiler_type.GetOpaqueQualType(); dwarf->m_forward_decl_clang_type_to_die[compiler_type @@ -670,8 +670,8 @@ size_t DWARFASTParserGo::ParseChildMembers(const SymbolContext &sc, } } else { // With DWARF 3 and later, if the value is an integer constant, - // this form value is the offset in bytes from the beginning - // of the containing entity. + // this form value is the offset in bytes from the beginning of + // the containing entity. member_byte_offset = form_value.Unsigned(); } break; diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugAbbrev.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugAbbrev.cpp index 1cf0e7eeeb6..affe4b85bda 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugAbbrev.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugAbbrev.cpp @@ -80,8 +80,8 @@ DWARFAbbreviationDeclarationSet::GetAbbreviationDeclaration( //---------------------------------------------------------------------- // DWARFAbbreviationDeclarationSet::AppendAbbrevDeclSequential() // -// Append an abbreviation declaration with a sequential code for O(n) -// lookups. Handy when creating an DWARFAbbreviationDeclarationSet. +// Append an abbreviation declaration with a sequential code for O(n) lookups. +// Handy when creating an DWARFAbbreviationDeclarationSet. //---------------------------------------------------------------------- dw_uleb128_t DWARFAbbreviationDeclarationSet::AppendAbbrevDeclSequential( const DWARFAbbreviationDeclaration &abbrevDecl) { @@ -115,9 +115,9 @@ void DWARFAbbreviationDeclarationSet::GetUnsupportedForms( //---------------------------------------------------------------------- // Encode // -// Encode the abbreviation table onto the end of the buffer provided -// into a byte representation as would be found in a ".debug_abbrev" -// debug information section. +// Encode the abbreviation table onto the end of the buffer provided into a +// byte representation as would be found in a ".debug_abbrev" debug information +// section. //---------------------------------------------------------------------- // void // DWARFAbbreviationDeclarationSet::Encode(BinaryStreamBuf& debug_abbrev_buf) diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugArangeSet.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugArangeSet.cpp index cecb69c8fb4..00265361f86 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugArangeSet.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugArangeSet.cpp @@ -46,19 +46,17 @@ void DWARFDebugArangeSet::Compact() { if (m_arange_descriptors.empty()) return; - // Iterate through all arange descriptors and combine any ranges that - // overlap or have matching boundaries. The m_arange_descriptors are assumed - // to be in ascending order after being built by adding descriptors - // using the AddDescriptor method. + // Iterate through all arange descriptors and combine any ranges that overlap + // or have matching boundaries. The m_arange_descriptors are assumed to be in + // ascending order after being built by adding descriptors using the + // AddDescriptor method. uint32_t i = 0; while (i + 1 < m_arange_descriptors.size()) { if (m_arange_descriptors[i].end_address() >= m_arange_descriptors[i + 1].address) { // The current range ends at or exceeds the start of the next address - // range. - // Compute the max end address between the two and use that to make the - // new - // length. + // range. Compute the max end address between the two and use that to + // make the new length. const dw_addr_t max_end_addr = std::max(m_arange_descriptors[i].end_address(), m_arange_descriptors[i + 1].end_address()); @@ -82,8 +80,8 @@ static bool DescriptorLessThan(const DWARFDebugArangeSet::Descriptor &range1, } //---------------------------------------------------------------------- -// Add a range descriptor and keep things sorted so we can easily -// compact the ranges before being saved or used. +// Add a range descriptor and keep things sorted so we can easily compact the +// ranges before being saved or used. //---------------------------------------------------------------------- void DWARFDebugArangeSet::AddDescriptor( const DWARFDebugArangeSet::Descriptor &range) { @@ -103,15 +101,14 @@ void DWARFDebugArangeSet::AddDescriptor( // Non-contiguous entries, add this one before the found entry m_arange_descriptors.insert(pos, range); } else if (range_end_addr == pos->address) { - // The top end of 'range' is the lower end of the entry - // pointed to by 'pos'. We can combine range with the - // entry we found by setting the starting address and - // increasing the length since they don't overlap. + // The top end of 'range' is the lower end of the entry pointed to by + // 'pos'. We can combine range with the entry we found by setting the + // starting address and increasing the length since they don't overlap. pos->address = range.address; pos->length += range.length; } else { - // We can combine these two and make sure the largest end - // address is used to make end address. + // We can combine these two and make sure the largest end address is + // used to make end address. pos->address = range.address; pos->length = std::max(found_end_addr, range_end_addr) - pos->address; } @@ -142,18 +139,18 @@ bool DWARFDebugArangeSet::Extract(const DWARFDataExtractor &data, // 7.20 Address Range Table // - // Each set of entries in the table of address ranges contained in - // the .debug_aranges section begins with a header consisting of: a - // 4-byte length containing the length of the set of entries for this - // compilation unit, not including the length field itself; a 2-byte - // version identifier containing the value 2 for DWARF Version 2; a - // 4-byte offset into the.debug_infosection; a 1-byte unsigned integer - // containing the size in bytes of an address (or the offset portion of - // an address for segmented addressing) on the target system; and a - // 1-byte unsigned integer containing the size in bytes of a segment - // descriptor on the target system. This header is followed by a series - // of tuples. Each tuple consists of an address and a length, each in - // the size appropriate for an address on the target architecture. + // Each set of entries in the table of address ranges contained in the + // .debug_aranges section begins with a header consisting of: a 4-byte + // length containing the length of the set of entries for this compilation + // unit, not including the length field itself; a 2-byte version identifier + // containing the value 2 for DWARF Version 2; a 4-byte offset into + // the.debug_infosection; a 1-byte unsigned integer containing the size in + // bytes of an address (or the offset portion of an address for segmented + // addressing) on the target system; and a 1-byte unsigned integer + // containing the size in bytes of a segment descriptor on the target + // system. This header is followed by a series of tuples. Each tuple + // consists of an address and a length, each in the size appropriate for an + // address on the target architecture. m_header.length = data.GetDWARFInitialLength(offset_ptr); m_header.version = data.GetU16(offset_ptr); m_header.cu_offset = data.GetDWARFOffset(offset_ptr); @@ -195,8 +192,8 @@ bool DWARFDebugArangeSet::Extract(const DWARFDataExtractor &data, arangeDescriptor.length = data.GetMaxU64(offset_ptr, m_header.addr_size); - // Each set of tuples is terminated by a 0 for the address and 0 - // for the length. + // Each set of tuples is terminated by a 0 for the address and 0 for + // the length. if (arangeDescriptor.address || arangeDescriptor.length) m_arange_descriptors.push_back(arangeDescriptor); else diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfo.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfo.cpp index fc7140003f7..f365d224f49 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfo.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfo.cpp @@ -120,8 +120,8 @@ DWARFUnit *DWARFDebugInfo::GetCompileUnitAtIndex(uint32_t idx) { } bool DWARFDebugInfo::ContainsCompileUnit(const DWARFUnit *cu) const { - // Not a verify efficient function, but it is handy for use in assertions - // to make sure that a compile unit comes from a debug information file. + // Not a verify efficient function, but it is handy for use in assertions to + // make sure that a compile unit comes from a debug information file. CompileUnitColl::const_iterator end_pos = m_compile_units.end(); CompileUnitColl::const_iterator pos; @@ -227,12 +227,12 @@ DWARFDebugInfo::GetDIE(const DIERef &die_ref) { //---------------------------------------------------------------------- // Parse // -// Parses the .debug_info section and uses the .debug_abbrev section -// and various other sections in the SymbolFileDWARF class and calls the -// supplied callback function each time a compile unit header, or debug -// information entry is successfully parsed. This function can be used -// for different tasks such as parsing the file contents into a -// structured data, dumping, verifying and much more. +// Parses the .debug_info section and uses the .debug_abbrev section and +// various other sections in the SymbolFileDWARF class and calls the supplied +// callback function each time a compile unit header, or debug information +// entry is successfully parsed. This function can be used for different tasks +// such as parsing the file contents into a structured data, dumping, verifying +// and much more. //---------------------------------------------------------------------- void DWARFDebugInfo::Parse(SymbolFileDWARF *dwarf2Data, Callback callback, void *userData) { @@ -252,8 +252,8 @@ void DWARFDebugInfo::Parse(SymbolFileDWARF *dwarf2Data, Callback callback, // Make sure we are within our compile unit if (offset < next_cu_offset) { - // We are in our compile unit, parse starting at the offset - // we were told to parse + // We are in our compile unit, parse starting at the offset we were + // told to parse bool done = false; while (!done && die.Extract(dwarf2Data, cu.get(), &offset)) { // Call the callback function with DIE pointer that falls within the @@ -301,11 +301,11 @@ typedef struct DumpInfo { // DumpCallback // // A callback function for the static DWARFDebugInfo::Parse() function -// that gets called each time a compile unit header or debug information -// entry is successfully parsed. +// that gets called each time a compile unit header or debug information entry +// is successfully parsed. // -// This function dump DWARF information and obey recurse depth and -// whether a single DIE is to be dumped (or all of the data). +// This function dump DWARF information and obey recurse depth and whether a +// single DIE is to be dumped (or all of the data). //---------------------------------------------------------------------- static dw_offset_t DumpCallback(SymbolFileDWARF *dwarf2Data, DWARFUnit *cu, DWARFDebugInfoEntry *die, @@ -403,8 +403,8 @@ static dw_offset_t DumpCallback(SymbolFileDWARF *dwarf2Data, dumpInfo->ancestors.resize(1); } - // We are dumping only a single DIE possibly with it's children and - // we must find it's compile unit before we can dump it properly + // We are dumping only a single DIE possibly with it's children and we + // must find it's compile unit before we can dump it properly if (cu && dumpInfo->die_offset < cu->GetFirstDIEOffset()) { // Not found, maybe the DIE offset provided wasn't correct? // *ostrm_ptr << "DIE at offset " << HEX32 << dumpInfo->die_offset << " @@ -436,14 +436,13 @@ static dw_offset_t DumpCallback(SymbolFileDWARF *dwarf2Data, //---------------------------------------------------------------------- // Dump // -// Dump the information in the .debug_info section to the specified -// ostream. If die_offset is valid, a single DIE will be dumped. If the -// die_offset is invalid, all the DWARF information will be dumped. Both -// cases will obey a "recurse_depth" or how deep to traverse into the -// children of each DIE entry. A recurse_depth of zero will dump all -// compile unit headers. A recurse_depth of 1 will dump all compile unit -// headers and the DW_TAG_compile unit tags. A depth of 2 will also -// dump all types and functions. +// Dump the information in the .debug_info section to the specified ostream. If +// die_offset is valid, a single DIE will be dumped. If the die_offset is +// invalid, all the DWARF information will be dumped. Both cases will obey a +// "recurse_depth" or how deep to traverse into the children of each DIE entry. +// A recurse_depth of zero will dump all compile unit headers. A recurse_depth +// of 1 will dump all compile unit headers and the DW_TAG_compile unit tags. A +// depth of 2 will also dump all types and functions. //---------------------------------------------------------------------- void DWARFDebugInfo::Dump(Stream *s, SymbolFileDWARF *dwarf2Data, const uint32_t die_offset, @@ -469,8 +468,8 @@ void DWARFDebugInfo::Dump(Stream *s, SymbolFileDWARF *dwarf2Data, //---------------------------------------------------------------------- // Dump // -// Dump the contents of this DWARFDebugInfo object as has been parsed -// and/or modified after it has been parsed. +// Dump the contents of this DWARFDebugInfo object as has been parsed and/or +// modified after it has been parsed. //---------------------------------------------------------------------- void DWARFDebugInfo::Dump(Stream *s, const uint32_t die_offset, const uint32_t recurse_depth) { diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp index 2498cd7a72a..da8efbd9b7f 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp @@ -189,9 +189,9 @@ bool DWARFDebugInfoEntry::FastExtract( //---------------------------------------------------------------------- // Extract // -// Extract a debug info entry for a given compile unit from the -// .debug_info and .debug_abbrev data within the SymbolFileDWARF class -// starting at the given offset +// Extract a debug info entry for a given compile unit from the .debug_info and +// .debug_abbrev data within the SymbolFileDWARF class starting at the given +// offset //---------------------------------------------------------------------- bool DWARFDebugInfoEntry::Extract(SymbolFileDWARF *dwarf2Data, const DWARFUnit *cu, @@ -246,8 +246,7 @@ bool DWARFDebugInfoEntry::Extract(SymbolFileDWARF *dwarf2Data, uint32_t form_size = 0; switch (form) { // Blocks if inlined data that have a length field and the data - // bytes - // inlined in the .debug_info + // bytes inlined in the .debug_info case DW_FORM_exprloc: case DW_FORM_block: form_size = debug_info_data.GetULEB128(&offset); @@ -357,8 +356,8 @@ bool DWARFDebugInfoEntry::Extract(SymbolFileDWARF *dwarf2Data, //---------------------------------------------------------------------- // DumpAncestry // -// Dumps all of a debug information entries parents up until oldest and -// all of it's attributes to the specified stream. +// Dumps all of a debug information entries parents up until oldest and all of +// it's attributes to the specified stream. //---------------------------------------------------------------------- void DWARFDebugInfoEntry::DumpAncestry(SymbolFileDWARF *dwarf2Data, const DWARFUnit *cu, @@ -375,8 +374,7 @@ void DWARFDebugInfoEntry::DumpAncestry(SymbolFileDWARF *dwarf2Data, // GetDIENamesAndRanges // // Gets the valid address ranges for a given DIE by looking for a -// DW_AT_low_pc/DW_AT_high_pc pair, DW_AT_entry_pc, or DW_AT_ranges -// attributes. +// DW_AT_low_pc/DW_AT_high_pc pair, DW_AT_entry_pc, or DW_AT_ranges attributes. //---------------------------------------------------------------------- bool DWARFDebugInfoEntry::GetDIENamesAndRanges( SymbolFileDWARF *dwarf2Data, const DWARFUnit *cu, const char *&name, @@ -452,9 +450,9 @@ bool DWARFDebugInfoEntry::GetDIENamesAndRanges( const DWARFDebugRanges *debug_ranges = dwarf2Data->DebugRanges(); if (debug_ranges) { debug_ranges->FindRanges(cu->GetRangesBase(), form_value.Unsigned(), ranges); - // All DW_AT_ranges are relative to the base address of the - // compile unit. We add the compile unit base address to make - // sure all the addresses are properly fixed up. + // All DW_AT_ranges are relative to the base address of the compile + // unit. We add the compile unit base address to make sure all the + // addresses are properly fixed up. ranges.Slide(cu->GetBaseAddress()); } else { cu->GetSymbolFileDWARF()->GetObjectFile()->GetModule()->ReportError( @@ -583,8 +581,8 @@ bool DWARFDebugInfoEntry::GetDIENamesAndRanges( //---------------------------------------------------------------------- // Dump // -// Dumps a debug information entry and all of it's attributes to the -// specified stream. +// Dumps a debug information entry and all of it's attributes to the specified +// stream. //---------------------------------------------------------------------- void DWARFDebugInfoEntry::Dump(SymbolFileDWARF *dwarf2Data, const DWARFUnit *cu, Stream &s, @@ -659,9 +657,9 @@ void DWARFDebugInfoEntry::DumpLocation(SymbolFileDWARF *dwarf2Data, //---------------------------------------------------------------------- // DumpAttribute // -// Dumps a debug information entry attribute along with it's form. Any -// special display of attributes is done (disassemble location lists, -// show enumeration values for attributes, etc). +// Dumps a debug information entry attribute along with it's form. Any special +// display of attributes is done (disassemble location lists, show enumeration +// values for attributes, etc). //---------------------------------------------------------------------- void DWARFDebugInfoEntry::DumpAttribute( SymbolFileDWARF *dwarf2Data, const DWARFUnit *cu, @@ -717,9 +715,8 @@ void DWARFDebugInfoEntry::DumpAttribute( DWARFExpression::PrintDWARFExpression( s, locationData, DWARFUnit::GetAddressByteSize(cu), 4, false); } else { - // We have a location list offset as the value that is - // the offset into the .debug_loc section that describes - // the value over it's lifetime + // We have a location list offset as the value that is the offset into + // the .debug_loc section that describes the value over it's lifetime uint64_t debug_loc_offset = form_value.Unsigned(); if (dwarf2Data) { DWARFExpression::PrintDWARFLocationList( @@ -760,9 +757,9 @@ void DWARFDebugInfoEntry::DumpAttribute( //---------------------------------------------------------------------- // Get all attribute values for a given DIE, including following any -// specification or abstract origin attributes and including those in -// the results. Any duplicate attributes will have the first instance -// take precedence (this can happen for declaration attributes). +// specification or abstract origin attributes and including those in the +// results. Any duplicate attributes will have the first instance take +// precedence (this can happen for declaration attributes). //---------------------------------------------------------------------- size_t DWARFDebugInfoEntry::GetAttributes( const DWARFUnit *cu, DWARFFormValue::FixedFormSizes fixed_form_sizes, @@ -804,9 +801,9 @@ size_t DWARFDebugInfoEntry::GetAttributes( case DW_AT_sibling: case DW_AT_declaration: if (curr_depth > 0) { - // This attribute doesn't make sense when combined with - // the DIE that references this DIE. We know a DIE is - // referencing this DIE because curr_depth is not zero + // This attribute doesn't make sense when combined with the DIE that + // references this DIE. We know a DIE is referencing this DIE because + // curr_depth is not zero break; } LLVM_FALLTHROUGH; @@ -842,9 +839,9 @@ size_t DWARFDebugInfoEntry::GetAttributes( // GetAttributeValue // // Get the value of an attribute and return the .debug_info offset of the -// attribute if it was properly extracted into form_value, or zero -// if we fail since an offset of zero is invalid for an attribute (it -// would be a compile unit header). +// attribute if it was properly extracted into form_value, or zero if we fail +// since an offset of zero is invalid for an attribute (it would be a compile +// unit header). //---------------------------------------------------------------------- dw_offset_t DWARFDebugInfoEntry::GetAttributeValue( SymbolFileDWARF *dwarf2Data, const DWARFUnit *cu, @@ -930,10 +927,10 @@ dw_offset_t DWARFDebugInfoEntry::GetAttributeValue( //---------------------------------------------------------------------- // GetAttributeValueAsString // -// Get the value of an attribute as a string return it. The resulting -// pointer to the string data exists within the supplied SymbolFileDWARF -// and will only be available as long as the SymbolFileDWARF is still around -// and it's content doesn't change. +// Get the value of an attribute as a string return it. The resulting pointer +// to the string data exists within the supplied SymbolFileDWARF and will only +// be available as long as the SymbolFileDWARF is still around and it's content +// doesn't change. //---------------------------------------------------------------------- const char *DWARFDebugInfoEntry::GetAttributeValueAsString( SymbolFileDWARF *dwarf2Data, const DWARFUnit *cu, @@ -981,8 +978,8 @@ int64_t DWARFDebugInfoEntry::GetAttributeValueAsSigned( //---------------------------------------------------------------------- // GetAttributeValueAsReference // -// Get the value of an attribute as reference and fix up and compile -// unit relative offsets as needed. +// Get the value of an attribute as reference and fix up and compile unit +// relative offsets as needed. //---------------------------------------------------------------------- uint64_t DWARFDebugInfoEntry::GetAttributeValueAsReference( SymbolFileDWARF *dwarf2Data, const DWARFUnit *cu, @@ -1009,8 +1006,8 @@ uint64_t DWARFDebugInfoEntry::GetAttributeValueAsAddress( //---------------------------------------------------------------------- // GetAttributeHighPC // -// Get the hi_pc, adding hi_pc to lo_pc when specified -// as an <offset-from-low-pc>. +// Get the hi_pc, adding hi_pc to lo_pc when specified as an <offset-from-low- +// pc>. // // Returns the hi_pc or fail_value. //---------------------------------------------------------------------- @@ -1033,8 +1030,8 @@ dw_addr_t DWARFDebugInfoEntry::GetAttributeHighPC( //---------------------------------------------------------------------- // GetAttributeAddressRange // -// Get the lo_pc and hi_pc, adding hi_pc to lo_pc when specified -// as an <offset-from-low-pc>. +// Get the lo_pc and hi_pc, adding hi_pc to lo_pc when specified as an <offset- +// from-low-pc>. // // Returns true or sets lo_pc and hi_pc to fail_value. //---------------------------------------------------------------------- @@ -1085,8 +1082,8 @@ size_t DWARFDebugInfoEntry::GetAttributeAddressRanges( //---------------------------------------------------------------------- // GetName // -// Get value of the DW_AT_name attribute and return it if one exists, -// else return NULL. +// Get value of the DW_AT_name attribute and return it if one exists, else +// return NULL. //---------------------------------------------------------------------- const char *DWARFDebugInfoEntry::GetName(SymbolFileDWARF *dwarf2Data, const DWARFUnit *cu) const { @@ -1096,8 +1093,8 @@ const char *DWARFDebugInfoEntry::GetName(SymbolFileDWARF *dwarf2Data, //---------------------------------------------------------------------- // GetMangledName // -// Get value of the DW_AT_MIPS_linkage_name attribute and return it if -// one exists, else return the value of the DW_AT_name attribute +// Get value of the DW_AT_MIPS_linkage_name attribute and return it if one +// exists, else return the value of the DW_AT_name attribute //---------------------------------------------------------------------- const char * DWARFDebugInfoEntry::GetMangledName(SymbolFileDWARF *dwarf2Data, @@ -1125,8 +1122,8 @@ DWARFDebugInfoEntry::GetMangledName(SymbolFileDWARF *dwarf2Data, //---------------------------------------------------------------------- // GetPubname // -// Get value the name for a DIE as it should appear for a -// .debug_pubnames or .debug_pubtypes section. +// Get value the name for a DIE as it should appear for a .debug_pubnames or +// .debug_pubtypes section. //---------------------------------------------------------------------- const char *DWARFDebugInfoEntry::GetPubname(SymbolFileDWARF *dwarf2Data, const DWARFUnit *cu) const { @@ -1151,11 +1148,10 @@ const char *DWARFDebugInfoEntry::GetPubname(SymbolFileDWARF *dwarf2Data, //---------------------------------------------------------------------- // GetName // -// Get value of the DW_AT_name attribute for a debug information entry -// that exists at offset "die_offset" and place that value into the -// supplied stream object. If the DIE is a NULL object "NULL" is placed -// into the stream, and if no DW_AT_name attribute exists for the DIE -// then nothing is printed. +// Get value of the DW_AT_name attribute for a debug information entry that +// exists at offset "die_offset" and place that value into the supplied stream +// object. If the DIE is a NULL object "NULL" is placed into the stream, and if +// no DW_AT_name attribute exists for the DIE then nothing is printed. //---------------------------------------------------------------------- bool DWARFDebugInfoEntry::GetName(SymbolFileDWARF *dwarf2Data, const DWARFUnit *cu, @@ -1186,10 +1182,9 @@ bool DWARFDebugInfoEntry::GetName(SymbolFileDWARF *dwarf2Data, //---------------------------------------------------------------------- // AppendTypeName // -// Follows the type name definition down through all needed tags to -// end up with a fully qualified type name and dump the results to -// the supplied stream. This is used to show the name of types given -// a type identifier. +// Follows the type name definition down through all needed tags to end up with +// a fully qualified type name and dump the results to the supplied stream. +// This is used to show the name of types given a type identifier. //---------------------------------------------------------------------- bool DWARFDebugInfoEntry::AppendTypeName(SymbolFileDWARF *dwarf2Data, const DWARFUnit *cu, @@ -1345,10 +1340,10 @@ void DWARFDebugInfoEntry::BuildAddressRangeTable( //---------------------------------------------------------------------- // BuildFunctionAddressRangeTable // -// This function is very similar to the BuildAddressRangeTable function -// except that the actual DIE offset for the function is placed in the -// table instead of the compile unit offset (which is the way the -// standard .debug_aranges section does it). +// This function is very similar to the BuildAddressRangeTable function except +// that the actual DIE offset for the function is placed in the table instead +// of the compile unit offset (which is the way the standard .debug_aranges +// section does it). //---------------------------------------------------------------------- void DWARFDebugInfoEntry::BuildFunctionAddressRangeTable( SymbolFileDWARF *dwarf2Data, const DWARFUnit *cu, @@ -1421,9 +1416,9 @@ DWARFDebugInfoEntry::GetParentDeclContextDIE( DWARFDIE die(cu, const_cast<DWARFDebugInfoEntry *>(this)); while (die) { - // If this is the original DIE that we are searching for a declaration - // for, then don't look in the cache as we don't want our own decl - // context to be our decl context... + // If this is the original DIE that we are searching for a declaration for, + // then don't look in the cache as we don't want our own decl context to be + // our decl context... if (die.GetDIE() != this) { switch (die.Tag()) { case DW_TAG_compile_unit: @@ -1712,9 +1707,10 @@ bool DWARFDebugInfoEntry::LookupAddress(const dw_addr_t address, break; } } - } else { // compile units may not have a valid high/low pc when there + } else { + // Compile units may not have a valid high/low pc when there // are address gaps in subroutines so we must always search - // if there is no valid high and low PC + // if there is no valid high and low PC. check_children = (m_tag == DW_TAG_compile_unit || m_tag == DW_TAG_partial_unit) && ((function_die != NULL) || (block_die != NULL)); @@ -1726,9 +1722,9 @@ bool DWARFDebugInfoEntry::LookupAddress(const dw_addr_t address, DWARFRangeList ranges; DWARFDebugRanges *debug_ranges = dwarf2Data->DebugRanges(); debug_ranges->FindRanges(cu->GetRangesBase(), debug_ranges_offset, ranges); - // All DW_AT_ranges are relative to the base address of the - // compile unit. We add the compile unit base address to make - // sure all the addresses are properly fixed up. + // All DW_AT_ranges are relative to the base address of the compile + // unit. We add the compile unit base address to make sure all the + // addresses are properly fixed up. ranges.Slide(cu->GetBaseAddress()); if (ranges.FindEntryThatContains(address)) { found_address = true; @@ -1790,8 +1786,8 @@ DWARFDebugInfoEntry::GetAbbreviationDeclarationPtr( const DWARFAbbreviationDeclaration *abbrev_decl = abbrev_set->GetAbbreviationDeclaration(m_abbr_idx); if (abbrev_decl) { - // Make sure the abbreviation code still matches. If it doesn't and - // the DWARF data was mmap'ed, the backing file might have been modified + // Make sure the abbreviation code still matches. If it doesn't and the + // DWARF data was mmap'ed, the backing file might have been modified // which is bad news. const uint64_t abbrev_code = dwarf2Data->get_debug_info_data().GetULEB128(&offset); diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugLine.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugLine.cpp index 8016d0257bf..1f66d8a23d8 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugLine.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugLine.cpp @@ -242,8 +242,8 @@ dw_offset_t DWARFDebugLine::DumpStatementOpcodes( log->Printf("0x%8.8x: DW_LNE_??? (%2.2x) - Skipping unknown upcode", op_offset, opcode); // Length doesn't include the zero opcode byte or the length itself, - // but - // it does include the sub_opcode, so we have to adjust for that below + // but it does include the sub_opcode, so we have to adjust for that + // below offset += arg_size; break; } @@ -324,9 +324,9 @@ dw_offset_t DWARFDebugLine::DumpStatementOpcodes( // Special Opcodes default: if (opcode < prologue.opcode_base) { - // We have an opcode that this parser doesn't know about, skip - // the number of ULEB128 numbers that is says to skip in the - // prologue's standard_opcode_lengths array + // We have an opcode that this parser doesn't know about, skip the + // number of ULEB128 numbers that is says to skip in the prologue's + // standard_opcode_lengths array uint8_t n = prologue.standard_opcode_lengths[opcode - 1]; log->Printf("0x%8.8x: Special : Unknown skipping %u ULEB128 values.", op_offset, n); @@ -357,9 +357,9 @@ dw_offset_t DWARFDebugLine::DumpStatementOpcodes( //---------------------------------------------------------------------- // Parse // -// Parse the entire line table contents calling callback each time a -// new prologue is parsed and every time a new row is to be added to -// the line table. +// Parse the entire line table contents calling callback each time a new +// prologue is parsed and every time a new row is to be added to the line +// table. //---------------------------------------------------------------------- void DWARFDebugLine::Parse(const DWARFDataExtractor &debug_line_data, DWARFDebugLine::State::Callback callback, @@ -472,9 +472,9 @@ bool DWARFDebugLine::ParseSupportFiles( //---------------------------------------------------------------------- // ParseStatementTable // -// Parse a single line table (prologue and all rows) and call the -// callback function once for the prologue (row in state will be zero) -// and each time a row is to be added to the line table. +// Parse a single line table (prologue and all rows) and call the callback +// function once for the prologue (row in state will be zero) and each time a +// row is to be added to the line table. //---------------------------------------------------------------------- bool DWARFDebugLine::ParseStatementTable( const DWARFDataExtractor &debug_line_data, lldb::offset_t *offset_ptr, @@ -511,8 +511,8 @@ bool DWARFDebugLine::ParseStatementTable( uint8_t opcode = debug_line_data.GetU8(offset_ptr); if (opcode == 0) { - // Extended Opcodes always start with a zero opcode followed by - // a uleb128 length so you can skip ones you don't know about + // Extended Opcodes always start with a zero opcode followed by a uleb128 + // length so you can skip ones you don't know about lldb::offset_t ext_offset = *offset_ptr; dw_uleb128_t len = debug_line_data.GetULEB128(offset_ptr); dw_offset_t arg_size = len - (*offset_ptr - ext_offset); @@ -522,12 +522,12 @@ bool DWARFDebugLine::ParseStatementTable( switch (sub_opcode) { case DW_LNE_end_sequence: // Set the end_sequence register of the state machine to true and - // append a row to the matrix using the current values of the - // state-machine registers. Then reset the registers to the initial - // values specified above. Every statement program sequence must end - // with a DW_LNE_end_sequence instruction which creates a row whose - // address is that of the byte after the last target machine instruction - // of the sequence. + // append a row to the matrix using the current values of the state- + // machine registers. Then reset the registers to the initial values + // specified above. Every statement program sequence must end with a + // DW_LNE_end_sequence instruction which creates a row whose address is + // that of the byte after the last target machine instruction of the + // sequence. state.end_sequence = true; state.AppendRowToMatrix(*offset_ptr); state.Reset(); @@ -537,8 +537,8 @@ bool DWARFDebugLine::ParseStatementTable( // Takes a single relocatable address as an operand. The size of the // operand is the size appropriate to hold an address on the target // machine. Set the address register to the value given by the - // relocatable address. All of the other statement program opcodes - // that affect the address register add a delta to it. This instruction + // relocatable address. All of the other statement program opcodes that + // affect the address register add a delta to it. This instruction // stores a relocatable value into it instead. if (arg_size == 4) state.address = debug_line_data.GetU32(offset_ptr); @@ -549,24 +549,24 @@ bool DWARFDebugLine::ParseStatementTable( case DW_LNE_define_file: // Takes 4 arguments. The first is a null terminated string containing // a source file name. The second is an unsigned LEB128 number - // representing - // the directory index of the directory in which the file was found. The - // third is an unsigned LEB128 number representing the time of last - // modification of the file. The fourth is an unsigned LEB128 number - // representing the length in bytes of the file. The time and length - // fields may contain LEB128(0) if the information is not available. + // representing the directory index of the directory in which the file + // was found. The third is an unsigned LEB128 number representing the + // time of last modification of the file. The fourth is an unsigned + // LEB128 number representing the length in bytes of the file. The time + // and length fields may contain LEB128(0) if the information is not + // available. // // The directory index represents an entry in the include_directories - // section of the statement program prologue. The index is LEB128(0) - // if the file was found in the current directory of the compilation, + // section of the statement program prologue. The index is LEB128(0) if + // the file was found in the current directory of the compilation, // LEB128(1) if it was found in the first directory in the // include_directories section, and so on. The directory index is // ignored for file names that represent full path names. // // The files are numbered, starting at 1, in the order in which they - // appear; the names in the prologue come before names defined by - // the DW_LNE_define_file instruction. These numbers are used in the - // file register of the state machine. + // appear; the names in the prologue come before names defined by the + // DW_LNE_define_file instruction. These numbers are used in the file + // register of the state machine. { FileNameEntry fileEntry; fileEntry.name = debug_line_data.GetCStr(offset_ptr); @@ -578,8 +578,9 @@ bool DWARFDebugLine::ParseStatementTable( break; default: - // Length doesn't include the zero opcode byte or the length itself, but - // it does include the sub_opcode, so we have to adjust for that below + // Length doesn't include the zero opcode byte or the length itself, + // but it does include the sub_opcode, so we have to adjust for that + // below (*offset_ptr) += arg_size; break; } @@ -587,23 +588,23 @@ bool DWARFDebugLine::ParseStatementTable( switch (opcode) { // Standard Opcodes case DW_LNS_copy: - // Takes no arguments. Append a row to the matrix using the - // current values of the state-machine registers. Then set - // the basic_block register to false. + // Takes no arguments. Append a row to the matrix using the current + // values of the state-machine registers. Then set the basic_block + // register to false. state.AppendRowToMatrix(*offset_ptr); break; case DW_LNS_advance_pc: // Takes a single unsigned LEB128 operand, multiplies it by the - // min_inst_length field of the prologue, and adds the - // result to the address register of the state machine. + // min_inst_length field of the prologue, and adds the result to the + // address register of the state machine. state.address += debug_line_data.GetULEB128(offset_ptr) * prologue->min_inst_length; break; case DW_LNS_advance_line: - // Takes a single signed LEB128 operand and adds that value to - // the line register of the state machine. + // Takes a single signed LEB128 operand and adds that value to the line + // register of the state machine. state.line += debug_line_data.GetSLEB128(offset_ptr); break; @@ -614,35 +615,35 @@ bool DWARFDebugLine::ParseStatementTable( break; case DW_LNS_set_column: - // Takes a single unsigned LEB128 operand and stores it in the - // column register of the state machine. + // Takes a single unsigned LEB128 operand and stores it in the column + // register of the state machine. state.column = debug_line_data.GetULEB128(offset_ptr); break; case DW_LNS_negate_stmt: - // Takes no arguments. Set the is_stmt register of the state - // machine to the logical negation of its current value. + // Takes no arguments. Set the is_stmt register of the state machine to + // the logical negation of its current value. state.is_stmt = !state.is_stmt; break; case DW_LNS_set_basic_block: - // Takes no arguments. Set the basic_block register of the - // state machine to true + // Takes no arguments. Set the basic_block register of the state + // machine to true state.basic_block = true; break; case DW_LNS_const_add_pc: - // Takes no arguments. Add to the address register of the state - // machine the address increment value corresponding to special - // opcode 255. The motivation for DW_LNS_const_add_pc is this: - // when the statement program needs to advance the address by a - // small amount, it can use a single special opcode, which occupies - // a single byte. When it needs to advance the address by up to - // twice the range of the last special opcode, it can use - // DW_LNS_const_add_pc followed by a special opcode, for a total - // of two bytes. Only if it needs to advance the address by more - // than twice that range will it need to use both DW_LNS_advance_pc - // and a special opcode, requiring three or more bytes. + // Takes no arguments. Add to the address register of the state machine + // the address increment value corresponding to special opcode 255. The + // motivation for DW_LNS_const_add_pc is this: when the statement + // program needs to advance the address by a small amount, it can use a + // single special opcode, which occupies a single byte. When it needs + // to advance the address by up to twice the range of the last special + // opcode, it can use DW_LNS_const_add_pc followed by a special opcode, + // for a total of two bytes. Only if it needs to advance the address by + // more than twice that range will it need to use both + // DW_LNS_advance_pc and a special opcode, requiring three or more + // bytes. { uint8_t adjust_opcode = 255 - prologue->opcode_base; dw_addr_t addr_offset = (adjust_opcode / prologue->line_range) * @@ -652,40 +653,40 @@ bool DWARFDebugLine::ParseStatementTable( break; case DW_LNS_fixed_advance_pc: - // Takes a single uhalf operand. Add to the address register of - // the state machine the value of the (unencoded) operand. This - // is the only extended opcode that takes an argument that is not - // a variable length number. The motivation for DW_LNS_fixed_advance_pc - // is this: existing assemblers cannot emit DW_LNS_advance_pc or - // special opcodes because they cannot encode LEB128 numbers or - // judge when the computation of a special opcode overflows and - // requires the use of DW_LNS_advance_pc. Such assemblers, however, - // can use DW_LNS_fixed_advance_pc instead, sacrificing compression. + // Takes a single uhalf operand. Add to the address register of the + // state machine the value of the (unencoded) operand. This is the only + // extended opcode that takes an argument that is not a variable length + // number. The motivation for DW_LNS_fixed_advance_pc is this: existing + // assemblers cannot emit DW_LNS_advance_pc or special opcodes because + // they cannot encode LEB128 numbers or judge when the computation of a + // special opcode overflows and requires the use of DW_LNS_advance_pc. + // Such assemblers, however, can use DW_LNS_fixed_advance_pc instead, + // sacrificing compression. state.address += debug_line_data.GetU16(offset_ptr); break; case DW_LNS_set_prologue_end: - // Takes no arguments. Set the prologue_end register of the - // state machine to true + // Takes no arguments. Set the prologue_end register of the state + // machine to true state.prologue_end = true; break; case DW_LNS_set_epilogue_begin: - // Takes no arguments. Set the basic_block register of the - // state machine to true + // Takes no arguments. Set the basic_block register of the state + // machine to true state.epilogue_begin = true; break; case DW_LNS_set_isa: - // Takes a single unsigned LEB128 operand and stores it in the - // column register of the state machine. + // Takes a single unsigned LEB128 operand and stores it in the column + // register of the state machine. state.isa = debug_line_data.GetULEB128(offset_ptr); break; default: - // Handle any unknown standard opcodes here. We know the lengths - // of such opcodes because they are specified in the prologue - // as a multiple of LEB128 operands for each opcode. + // Handle any unknown standard opcodes here. We know the lengths of + // such opcodes because they are specified in the prologue as a + // multiple of LEB128 operands for each opcode. { uint8_t i; assert(static_cast<size_t>(opcode - 1) < @@ -702,32 +703,32 @@ bool DWARFDebugLine::ParseStatementTable( // A special opcode value is chosen based on the amount that needs // to be added to the line and address registers. The maximum line - // increment for a special opcode is the value of the line_base - // field in the header, plus the value of the line_range field, - // minus 1 (line base + line range - 1). If the desired line - // increment is greater than the maximum line increment, a standard - // opcode must be used instead of a special opcode. The "address - // advance" is calculated by dividing the desired address increment - // by the minimum_instruction_length field from the header. The - // special opcode is then calculated using the following formula: + // increment for a special opcode is the value of the line_base field in + // the header, plus the value of the line_range field, minus 1 (line base + // + line range - 1). If the desired line increment is greater than the + // maximum line increment, a standard opcode must be used instead of a + // special opcode. The "address advance" is calculated by dividing the + // desired address increment by the minimum_instruction_length field from + // the header. The special opcode is then calculated using the following + // formula: // // opcode = (desired line increment - line_base) + (line_range * address // advance) + opcode_base // - // If the resulting opcode is greater than 255, a standard opcode - // must be used instead. + // If the resulting opcode is greater than 255, a standard opcode must be + // used instead. // - // To decode a special opcode, subtract the opcode_base from the - // opcode itself to give the adjusted opcode. The amount to - // increment the address register is the result of the adjusted - // opcode divided by the line_range multiplied by the - // minimum_instruction_length field from the header. That is: + // To decode a special opcode, subtract the opcode_base from the opcode + // itself to give the adjusted opcode. The amount to increment the + // address register is the result of the adjusted opcode divided by the + // line_range multiplied by the minimum_instruction_length field from the + // header. That is: // // address increment = (adjusted opcode / line_range) * // minimum_instruction_length // - // The amount to increment the line register is the line_base plus - // the result of the adjusted opcode modulo the line_range. That is: + // The amount to increment the line register is the line_base plus the + // result of the adjusted opcode modulo the line_range. That is: // // line increment = line_base + (adjusted opcode % line_range) @@ -755,8 +756,8 @@ static void ParseStatementTableCallback(dw_offset_t offset, void *userData) { DWARFDebugLine::LineTable *line_table = (DWARFDebugLine::LineTable *)userData; if (state.row == DWARFDebugLine::State::StartParsingLineTable) { - // Just started parsing the line table, so lets keep a reference to - // the prologue using the supplied shared pointer + // Just started parsing the line table, so lets keep a reference to the + // prologue using the supplied shared pointer line_table->prologue = state.prologue; } else if (state.row == DWARFDebugLine::State::DoneParsingLineTable) { // Done parsing line table, nothing to do for the cleanup @@ -769,8 +770,8 @@ static void ParseStatementTableCallback(dw_offset_t offset, //---------------------------------------------------------------------- // ParseStatementTable // -// Parse a line table at offset and populate the LineTable class with -// the prologue and all rows. +// Parse a line table at offset and populate the LineTable class with the +// prologue and all rows. //---------------------------------------------------------------------- bool DWARFDebugLine::ParseStatementTable( const DWARFDataExtractor &debug_line_data, lldb::offset_t *offset_ptr, @@ -936,11 +937,10 @@ uint32_t DWARFDebugLine::LineTable::LookupAddress(dw_addr_t address, if (address < cu_high_pc) return rows.size() - 1; } else { - // Rely on fact that we are using a std::vector and we can do - // pointer arithmetic to find the row index (which will be one less - // that what we found since it will find the first position after - // the current address) since std::vector iterators are just - // pointers to the container type. + // Rely on fact that we are using a std::vector and we can do pointer + // arithmetic to find the row index (which will be one less that what we + // found since it will find the first position after the current address) + // since std::vector iterators are just pointers to the container type. index = pos - begin_pos; if (pos->address > address) { if (index > 0) @@ -1005,9 +1005,9 @@ static bool AddressLessThan(const DWARFDebugLine::Row &a, return a.address < b.address; } -// Insert a row at the correct address if the addresses can be out of -// order which can only happen when we are linking a line table that -// may have had it's contents rearranged. +// Insert a row at the correct address if the addresses can be out of order +// which can only happen when we are linking a line table that may have had +// it's contents rearranged. void DWARFDebugLine::Row::Insert(Row::collection &state_coll, const Row &state) { // If we don't have anything yet, or if the address of the last state in our @@ -1020,12 +1020,12 @@ void DWARFDebugLine::Row::Insert(Row::collection &state_coll, state_coll.begin(), state_coll.end(), state, AddressLessThan)); // If the addresses are equal, we can safely replace the previous entry - // with the current one if the one it is replacing is an end_sequence entry. - // We currently always place an extra end sequence when ever we exit a valid - // address range for a function in case the functions get rearranged by - // optimizations or by order specifications. These extra end sequences will - // disappear by getting replaced with valid consecutive entries within a - // compile unit if there are no gaps. + // with the current one if the one it is replacing is an end_sequence + // entry. We currently always place an extra end sequence when ever we exit + // a valid address range for a function in case the functions get + // rearranged by optimizations or by order specifications. These extra end + // sequences will disappear by getting replaced with valid consecutive + // entries within a compile unit if there are no gaps. if (range.first == range.second) { state_coll.insert(range.first, state); } else { @@ -1065,10 +1065,9 @@ void DWARFDebugLine::State::Reset() { Row::Reset(prologue->default_is_stmt); } // DWARFDebugLine::State::AppendRowToMatrix //---------------------------------------------------------------------- void DWARFDebugLine::State::AppendRowToMatrix(dw_offset_t offset) { - // Each time we are to add an entry into the line table matrix - // call the callback function so that someone can do something with - // the current state of the state machine (like build a line table - // or dump the line table!) + // Each time we are to add an entry into the line table matrix call the + // callback function so that someone can do something with the current state + // of the state machine (like build a line table or dump the line table!) if (log) { if (row == 0) { log->PutCString("Address Line Column File ISA Flags"); @@ -1088,8 +1087,8 @@ void DWARFDebugLine::State::AppendRowToMatrix(dw_offset_t offset) { // DWARFDebugLine::State::Finalize //---------------------------------------------------------------------- void DWARFDebugLine::State::Finalize(dw_offset_t offset) { - // Call the callback with a special row state when we are done parsing a - // line table + // Call the callback with a special row state when we are done parsing a line + // table row = DoneParsingLineTable; if (callback) callback(offset, *this, callbackUserData); diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugRanges.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugRanges.cpp index a8c48b7f2f8..89e27efb3cc 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugRanges.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugRanges.cpp @@ -89,8 +89,8 @@ void DWARFDebugRanges::Dump(Stream &s, debug_ranges_data.ValidOffsetForDataOfSize(*offset_ptr, 2 * addr_size)) { dw_addr_t begin = debug_ranges_data.GetMaxU64(offset_ptr, addr_size); dw_addr_t end = debug_ranges_data.GetMaxU64(offset_ptr, addr_size); - // Extend 4 byte addresses that consists of 32 bits of 1's to be 64 bits - // of ones + // Extend 4 byte addresses that consists of 32 bits of 1's to be 64 bits of + // ones if (begin == 0xFFFFFFFFull && addr_size == 4) begin = LLDB_INVALID_ADDRESS; diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDeclContext.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDeclContext.cpp index 79f2f221696..dbaf0b0ed12 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDeclContext.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDeclContext.cpp @@ -67,8 +67,8 @@ bool DWARFDeclContext::operator==(const DWARFDeclContext &rhs) const { // First compare the tags before we do expensive name compares for (pos = begin, rhs_pos = rhs_begin; pos != end; ++pos, ++rhs_pos) { if (pos->tag != rhs_pos->tag) { - // Check for DW_TAG_structure_type and DW_TAG_class_type as they are often - // used interchangeably in GCC + // Check for DW_TAG_structure_type and DW_TAG_class_type as they are + // often used interchangeably in GCC if (pos->tag == DW_TAG_structure_type && rhs_pos->tag == DW_TAG_class_type) continue; diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFFormValue.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFFormValue.cpp index 579c6d61ab8..4fde5748d3f 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFFormValue.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFFormValue.cpp @@ -299,8 +299,8 @@ bool DWARFFormValue::SkipValue(dw_form_t form, const DWARFUnit *cu) { uint8_t ref_addr_size; switch (form) { - // Blocks if inlined data that have a length field and the data bytes - // inlined in the .debug_info + // Blocks if inlined data that have a length field and the data bytes inlined + // in the .debug_info case DW_FORM_exprloc: case DW_FORM_block: { dw_uleb128_t size = debug_info_data.GetULEB128(offset_ptr); diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp index 18590fab270..754ffed6ae3 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp @@ -38,8 +38,7 @@ DWARFUnit::~DWARFUnit() {} //---------------------------------------------------------------------- // ParseCompileUnitDIEsIfNeeded // -// Parses a compile unit and indexes its DIEs if it hasn't already been -// done. +// Parses a compile unit and indexes its DIEs if it hasn't already been done. //---------------------------------------------------------------------- size_t DWARFUnit::ExtractDIEsIfNeeded(bool cu_die_only) { const size_t initial_die_array_size = m_die_array.size(); @@ -71,8 +70,8 @@ size_t DWARFUnit::ExtractDIEsIfNeeded(bool cu_die_only) { } uint32_t depth = 0; - // We are in our compile unit, parse starting at the offset - // we were told to parse + // We are in our compile unit, parse starting at the offset we were told to + // parse const DWARFDataExtractor &debug_info_data = m_dwarf->get_debug_info_data(); std::vector<uint32_t> die_index_stack; die_index_stack.reserve(32); @@ -105,11 +104,10 @@ size_t DWARFUnit::ExtractDIEsIfNeeded(bool cu_die_only) { } else { if (null_die) { if (prev_die_had_children) { - // This will only happen if a DIE says is has children - // but all it contains is a NULL tag. Since we are removing - // the NULL DIEs from the list (saves up to 25% in C++ code), - // we need a way to let the DIE know that it actually doesn't - // have children. + // This will only happen if a DIE says is has children but all it + // contains is a NULL tag. Since we are removing the NULL DIEs from + // the list (saves up to 25% in C++ code), we need a way to let the + // DIE know that it actually doesn't have children. if (!m_die_array.empty()) m_die_array.back().SetEmptyChildren(true); } @@ -148,9 +146,9 @@ size_t DWARFUnit::ExtractDIEsIfNeeded(bool cu_die_only) { } } - // Give a little bit of info if we encounter corrupt DWARF (our offset - // should always terminate at or before the start of the next compilation - // unit header). + // Give a little bit of info if we encounter corrupt DWARF (our offset should + // always terminate at or before the start of the next compilation unit + // header). if (offset > next_cu_offset) { m_dwarf->GetObjectFile()->GetModule()->ReportWarning( "DWARF compile unit extends beyond its bounds cu 0x%8.8x at " @@ -158,10 +156,9 @@ size_t DWARFUnit::ExtractDIEsIfNeeded(bool cu_die_only) { GetOffset(), offset); } - // Since std::vector objects will double their size, we really need to - // make a new array with the perfect size so we don't end up wasting - // space. So here we copy and swap to make sure we don't have any extra - // memory taken up. + // Since std::vector objects will double their size, we really need to make a + // new array with the perfect size so we don't end up wasting space. So here + // we copy and swap to make sure we don't have any extra memory taken up. if (m_die_array.size() < m_die_array.capacity()) { DWARFDebugInfoEntry::collection exact_size_die_array(m_die_array.begin(), @@ -196,8 +193,8 @@ void DWARFUnit::AddUnitDIE(DWARFDebugInfoEntry &die) { // Only reserve the memory if we are adding children of the main compile unit // DIE. The compile unit DIE is always the first entry, so if our size is 1, - // then we are adding the first compile unit child DIE and should reserve - // the memory. + // then we are adding the first compile unit child DIE and should reserve the + // memory. m_die_array.reserve(GetDebugInfoSize() / 24); m_die_array.push_back(die); @@ -307,13 +304,12 @@ void DWARFUnit::SetAddrBase(dw_addr_t addr_base, void DWARFUnit::ClearDIEs(bool keep_compile_unit_die) { if (m_die_array.size() > 1) { - // std::vectors never get any smaller when resized to a smaller size, - // or when clear() or erase() are called, the size will report that it - // is smaller, but the memory allocated remains intact (call capacity() - // to see this). So we need to create a temporary vector and swap the - // contents which will cause just the internal pointers to be swapped - // so that when "tmp_array" goes out of scope, it will destroy the - // contents. + // std::vectors never get any smaller when resized to a smaller size, or + // when clear() or erase() are called, the size will report that it is + // smaller, but the memory allocated remains intact (call capacity() to see + // this). So we need to create a temporary vector and swap the contents + // which will cause just the internal pointers to be swapped so that when + // "tmp_array" goes out of scope, it will destroy the contents. // Save at least the compile unit DIE DWARFDebugInfoEntry::collection tmp_array; @@ -328,9 +324,9 @@ void DWARFUnit::ClearDIEs(bool keep_compile_unit_die) { void DWARFUnit::BuildAddressRangeTable(SymbolFileDWARF *dwarf, DWARFDebugAranges *debug_aranges) { - // This function is usually called if there in no .debug_aranges section - // in order to produce a compile unit level set of address ranges that - // is accurate. + // This function is usually called if there in no .debug_aranges section in + // order to produce a compile unit level set of address ranges that is + // accurate. size_t num_debug_aranges = debug_aranges->GetNumRanges(); @@ -343,10 +339,10 @@ void DWARFUnit::BuildAddressRangeTable(SymbolFileDWARF *dwarf, const size_t num_ranges = die->GetAttributeAddressRanges(dwarf, this, ranges, false); if (num_ranges > 0) { - // This compile unit has DW_AT_ranges, assume this is correct if it - // is present since clang no longer makes .debug_aranges by default - // and it emits DW_AT_ranges for DW_TAG_compile_units. GCC also does - // this with recent GCC builds. + // This compile unit has DW_AT_ranges, assume this is correct if it is + // present since clang no longer makes .debug_aranges by default and it + // emits DW_AT_ranges for DW_TAG_compile_units. GCC also does this with + // recent GCC builds. for (size_t i = 0; i < num_ranges; ++i) { const DWARFRangeList::Entry &range = ranges.GetEntryRef(i); debug_aranges->AppendRange(cu_offset, range.GetRangeBase(), @@ -359,9 +355,8 @@ void DWARFUnit::BuildAddressRangeTable(SymbolFileDWARF *dwarf, // We don't have a DW_AT_ranges attribute, so we need to parse the DWARF // If the DIEs weren't parsed, then we don't want all dies for all compile - // units - // to stay loaded when they weren't needed. So we can end up parsing the DWARF - // and then throwing them all away to keep memory usage down. + // units to stay loaded when they weren't needed. So we can end up parsing + // the DWARF and then throwing them all away to keep memory usage down. const bool clear_dies = ExtractDIEsIfNeeded(false) > 1; die = DIEPtr(); @@ -419,8 +414,8 @@ void DWARFUnit::BuildAddressRangeTable(SymbolFileDWARF *dwarf, } } - // Keep memory down by clearing DIEs if this generate function - // caused them to be parsed + // Keep memory down by clearing DIEs if this generate function caused them to + // be parsed if (clear_dies) ClearDIEs(true); } @@ -456,10 +451,9 @@ static bool CompareDIEOffset(const DWARFDebugInfoEntry &die, //---------------------------------------------------------------------- // GetDIE() // -// Get the DIE (Debug Information Entry) with the specified offset by -// first checking if the DIE is contained within this compile unit and -// grabbing the DIE from this compile unit. Otherwise we grab the DIE -// from the DWARF file. +// Get the DIE (Debug Information Entry) with the specified offset by first +// checking if the DIE is contained within this compile unit and grabbing the +// DIE from this compile unit. Otherwise we grab the DIE from the DWARF file. //---------------------------------------------------------------------- DWARFDIE DWARFUnit::GetDIE(dw_offset_t die_offset) { @@ -515,8 +509,8 @@ bool DWARFUnit::Supports_DW_AT_APPLE_objc_complete_type() { } bool DWARFUnit::DW_AT_decl_file_attributes_are_invalid() { - // llvm-gcc makes completely invalid decl file attributes and won't ever - // be fixed, so we need to know to ignore these. + // llvm-gcc makes completely invalid decl file attributes and won't ever be + // fixed, so we need to know to ignore these. return GetProducer() == eProducerLLVMGCC; } @@ -602,8 +596,8 @@ uint32_t DWARFUnit::GetProducerVersionUpdate() { return m_producer_version_update; } LanguageType DWARFUnit::LanguageTypeFromDWARF(uint64_t val) { - // Note: user languages between lo_user and hi_user - // must be handled explicitly here. + // Note: user languages between lo_user and hi_user must be handled + // explicitly here. switch (val) { case DW_LANG_Mips_Assembler: return eLanguageTypeMipsAssembler; @@ -851,8 +845,8 @@ void DWARFUnit::IndexPrivate( func_fullnames.Insert(objc_fullname_no_category_name, DIERef(cu_offset, die.GetOffset())); } - // If we have a mangled name, then the DW_AT_name attribute - // is usually the method name without the class or any parameters + // If we have a mangled name, then the DW_AT_name attribute is + // usually the method name without the class or any parameters const DWARFDebugInfoEntry *parent = die.GetParent(); bool is_method = false; if (parent) { @@ -883,10 +877,10 @@ void DWARFUnit::IndexPrivate( DIERef(cu_offset, die.GetOffset())); } if (mangled_cstr) { - // Make sure our mangled name isn't the same string table entry - // as our name. If it starts with '_', then it is ok, else compare - // the string to make sure it isn't the same and we don't end up - // with duplicate entries + // Make sure our mangled name isn't the same string table entry as + // our name. If it starts with '_', then it is ok, else compare the + // string to make sure it isn't the same and we don't end up with + // duplicate entries if (name && name != mangled_cstr && ((mangled_cstr[0] == '_') || (::strcmp(name, mangled_cstr) != 0))) { @@ -908,10 +902,10 @@ void DWARFUnit::IndexPrivate( func_basenames.Insert(ConstString(name), DIERef(cu_offset, die.GetOffset())); if (mangled_cstr) { - // Make sure our mangled name isn't the same string table entry - // as our name. If it starts with '_', then it is ok, else compare - // the string to make sure it isn't the same and we don't end up - // with duplicate entries + // Make sure our mangled name isn't the same string table entry as + // our name. If it starts with '_', then it is ok, else compare the + // string to make sure it isn't the same and we don't end up with + // duplicate entries if (name && name != mangled_cstr && ((mangled_cstr[0] == '_') || (::strcmp(name, mangled_cstr) != 0))) { @@ -956,15 +950,15 @@ void DWARFUnit::IndexPrivate( case DW_TAG_variable: if (name && has_location_or_const_value && is_global_or_static_variable) { globals.Insert(ConstString(name), DIERef(cu_offset, die.GetOffset())); - // Be sure to include variables by their mangled and demangled - // names if they have any since a variable can have a basename - // "i", a mangled named "_ZN12_GLOBAL__N_11iE" and a demangled - // mangled name "(anonymous namespace)::i"... - - // Make sure our mangled name isn't the same string table entry - // as our name. If it starts with '_', then it is ok, else compare - // the string to make sure it isn't the same and we don't end up - // with duplicate entries + // Be sure to include variables by their mangled and demangled names if + // they have any since a variable can have a basename "i", a mangled + // named "_ZN12_GLOBAL__N_11iE" and a demangled mangled name + // "(anonymous namespace)::i"... + + // Make sure our mangled name isn't the same string table entry as our + // name. If it starts with '_', then it is ok, else compare the string + // to make sure it isn't the same and we don't end up with duplicate + // entries if (mangled_cstr && name != mangled_cstr && ((mangled_cstr[0] == '_') || (::strcmp(name, mangled_cstr) != 0))) { Mangled mangled(ConstString(mangled_cstr), true); diff --git a/lldb/source/Plugins/SymbolFile/DWARF/HashedNameToDIE.cpp b/lldb/source/Plugins/SymbolFile/DWARF/HashedNameToDIE.cpp index 629ae8b0a6a..36211a08557 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/HashedNameToDIE.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/HashedNameToDIE.cpp @@ -75,15 +75,14 @@ void DWARFMappedHash::ExtractClassOrStructDIEArray( die_tag == DW_TAG_structure_type) { if (die_info_array[i].type_flags & eTypeFlagClassIsImplementation) { if (return_implementation_only_if_available) { - // We found the one true definition for this class, so - // only return that + // We found the one true definition for this class, so only return + // that die_offsets.clear(); die_offsets.emplace_back(die_info_array[i].cu_offset, die_info_array[i].offset); return; } else { - // Put the one true definition as the first entry so it - // matches first + // Put the one true definition as the first entry so it matches first die_offsets.emplace(die_offsets.begin(), die_info_array[i].cu_offset, die_info_array[i].offset); } @@ -137,9 +136,8 @@ DWARFMappedHash::DIEInfo::DIEInfo(dw_offset_t c, dw_offset_t o, dw_tag_t t, DWARFMappedHash::Prologue::Prologue(dw_offset_t _die_base_offset) : die_base_offset(_die_base_offset), atoms(), atom_mask(0), min_hash_data_byte_size(0), hash_data_has_fixed_byte_size(true) { - // Define an array of DIE offsets by first defining an array, - // and then define the atom type for the array, in this case - // we have an array of DIE offsets + // Define an array of DIE offsets by first defining an array, and then define + // the atom type for the array, in this case we have an array of DIE offsets AppendAtom(eAtomTypeDIEOffset, DW_FORM_data4); } @@ -239,8 +237,7 @@ DWARFMappedHash::Prologue::Read(const lldb_private::DataExtractor &data, size_t DWARFMappedHash::Prologue::GetByteSize() const { // Add an extra count to the atoms size for the zero termination Atom that - // gets - // written to disk + // gets written to disk return sizeof(die_base_offset) + sizeof(uint32_t) + atoms.size() * sizeof(Atom); } @@ -384,13 +381,13 @@ DWARFMappedHash::MemoryTable::GetHashDataForName( pair.key = m_data.GetU32(hash_data_offset_ptr); pair.value.clear(); - // If the key is zero, this terminates our chain of HashData objects - // for this hash value. + // If the key is zero, this terminates our chain of HashData objects for this + // hash value. if (pair.key == 0) return eResultEndOfHashData; - // There definitely should be a string for this string offset, if - // there isn't, there is something wrong, return and error + // There definitely should be a string for this string offset, if there + // isn't, there is something wrong, return and error const char *strp_cstr = m_string_table.PeekCStr(pair.key); if (strp_cstr == NULL) { *hash_data_offset_ptr = UINT32_MAX; @@ -403,22 +400,21 @@ DWARFMappedHash::MemoryTable::GetHashDataForName( if (count > 0 && m_data.ValidOffsetForDataOfSize(*hash_data_offset_ptr, min_total_hash_data_size)) { - // We have at least one HashData entry, and we have enough - // data to parse at least "count" HashData entries. + // We have at least one HashData entry, and we have enough data to parse at + // least "count" HashData entries. // First make sure the entire C string matches... const bool match = name == strp_cstr; if (!match && m_header.header_data.HashDataHasFixedByteSize()) { - // If the string doesn't match and we have fixed size data, - // we can just add the total byte size of all HashData objects - // to the hash data offset and be done... + // If the string doesn't match and we have fixed size data, we can just + // add the total byte size of all HashData objects to the hash data + // offset and be done... *hash_data_offset_ptr += min_total_hash_data_size; } else { - // If the string does match, or we don't have fixed size data - // then we need to read the hash data as a stream. If the - // string matches we also append all HashData objects to the - // value array. + // If the string does match, or we don't have fixed size data then we + // need to read the hash data as a stream. If the string matches we also + // append all HashData objects to the value array. for (uint32_t i = 0; i < count; ++i) { DIEInfo die_info; if (m_header.Read(m_data, hash_data_offset_ptr, die_info)) { @@ -432,16 +428,15 @@ DWARFMappedHash::MemoryTable::GetHashDataForName( } } } - // Return the correct response depending on if the string matched - // or not... + // Return the correct response depending on if the string matched or not... if (match) return eResultKeyMatch; // The key (cstring) matches and we have lookup // results! else return eResultKeyMismatch; // The key doesn't match, this function will // get called - // again for the next key/value or the key terminator - // which in our case is a zero .debug_str offset. + // again for the next key/value or the key terminator which in our case is + // a zero .debug_str offset. } else { *hash_data_offset_ptr = UINT32_MAX; return eResultError; @@ -453,13 +448,13 @@ DWARFMappedHash::MemoryTable::AppendHashDataForRegularExpression( const lldb_private::RegularExpression ®ex, lldb::offset_t *hash_data_offset_ptr, Pair &pair) const { pair.key = m_data.GetU32(hash_data_offset_ptr); - // If the key is zero, this terminates our chain of HashData objects - // for this hash value. + // If the key is zero, this terminates our chain of HashData objects for this + // hash value. if (pair.key == 0) return eResultEndOfHashData; - // There definitely should be a string for this string offset, if - // there isn't, there is something wrong, return and error + // There definitely should be a string for this string offset, if there + // isn't, there is something wrong, return and error const char *strp_cstr = m_string_table.PeekCStr(pair.key); if (strp_cstr == NULL) return eResultError; @@ -473,15 +468,14 @@ DWARFMappedHash::MemoryTable::AppendHashDataForRegularExpression( const bool match = regex.Execute(llvm::StringRef(strp_cstr)); if (!match && m_header.header_data.HashDataHasFixedByteSize()) { - // If the regex doesn't match and we have fixed size data, - // we can just add the total byte size of all HashData objects - // to the hash data offset and be done... + // If the regex doesn't match and we have fixed size data, we can just + // add the total byte size of all HashData objects to the hash data + // offset and be done... *hash_data_offset_ptr += min_total_hash_data_size; } else { - // If the string does match, or we don't have fixed size data - // then we need to read the hash data as a stream. If the - // string matches we also append all HashData objects to the - // value array. + // If the string does match, or we don't have fixed size data then we + // need to read the hash data as a stream. If the string matches we also + // append all HashData objects to the value array. for (uint32_t i = 0; i < count; ++i) { DIEInfo die_info; if (m_header.Read(m_data, hash_data_offset_ptr, die_info)) { @@ -495,16 +489,15 @@ DWARFMappedHash::MemoryTable::AppendHashDataForRegularExpression( } } } - // Return the correct response depending on if the string matched - // or not... + // Return the correct response depending on if the string matched or not... if (match) return eResultKeyMatch; // The key (cstring) matches and we have lookup // results! else return eResultKeyMismatch; // The key doesn't match, this function will // get called - // again for the next key/value or the key terminator - // which in our case is a zero .debug_str offset. + // again for the next key/value or the key terminator which in our case is + // a zero .debug_str offset. } else { *hash_data_offset_ptr = UINT32_MAX; return eResultError; @@ -529,8 +522,7 @@ size_t DWARFMappedHash::MemoryTable::AppendAllDIEsThatMatchingRegex( switch (hash_result) { case eResultKeyMatch: case eResultKeyMismatch: - // Whether we matches or not, it doesn't matter, we - // keep looking. + // Whether we matches or not, it doesn't matter, we keep looking. break; case eResultEndOfHashData: @@ -553,8 +545,8 @@ size_t DWARFMappedHash::MemoryTable::AppendAllDIEsInRange( lldb::offset_t hash_data_offset = GetHashDataOffset(offset_idx); while (!done && hash_data_offset != UINT32_MAX) { KeyType key = m_data.GetU32(&hash_data_offset); - // If the key is zero, this terminates our chain of HashData objects - // for this hash value. + // If the key is zero, this terminates our chain of HashData objects for + // this hash value. if (key == 0) break; @@ -610,17 +602,16 @@ size_t DWARFMappedHash::MemoryTable::FindCompleteObjCClassByName( if (FindByName(name, die_info_array)) { if (must_be_implementation && GetHeader().header_data.ContainsAtom(eAtomTypeTypeFlags)) { - // If we have two atoms, then we have the DIE offset and - // the type flags so we can find the objective C class - // efficiently. + // If we have two atoms, then we have the DIE offset and the type flags + // so we can find the objective C class efficiently. DWARFMappedHash::ExtractTypesFromDIEArray(die_info_array, UINT32_MAX, eTypeFlagClassIsImplementation, die_offsets); } else { - // We don't only want the one true definition, so try and see - // what we can find, and only return class or struct DIEs. - // If we do have the full implementation, then return it alone, - // else return all possible matches. + // We don't only want the one true definition, so try and see what we can + // find, and only return class or struct DIEs. If we do have the full + // implementation, then return it alone, else return all possible + // matches. const bool return_implementation_only_if_available = true; DWARFMappedHash::ExtractClassOrStructDIEArray( die_info_array, return_implementation_only_if_available, die_offsets); diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp index a8b55b415d4..27606ac9ec8 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp @@ -164,8 +164,8 @@ static const char *removeHostnameFromPathname(const char *path_from_dwarf) { return path_from_dwarf; } - // check whether we have a windows path, and so the first character - // is a drive-letter not a hostname. + // check whether we have a windows path, and so the first character is a + // drive-letter not a hostname. if (colon_pos == path_from_dwarf + 1 && isalpha(*path_from_dwarf) && strlen(path_from_dwarf) > 2 && '\\' == path_from_dwarf[2]) { return path_from_dwarf; @@ -503,15 +503,14 @@ uint32_t SymbolFileDWARF::CalculateAbilities() { if (section_list == NULL) return 0; - // On non Apple platforms we might have .debug_types debug info that - // is created by using "-fdebug-types-section". LLDB currently will try - // to load this debug info, but it causes crashes during debugging when - // types are missing since it doesn't know how to parse the info in - // the .debug_types type units. This causes all complex debug info - // types to be unresolved. Because this causes LLDB to crash and since - // it really doesn't provide a solid debuggiung experience, we should - // disable trying to debug this kind of DWARF until support gets - // added or deprecated. + // On non Apple platforms we might have .debug_types debug info that is + // created by using "-fdebug-types-section". LLDB currently will try to + // load this debug info, but it causes crashes during debugging when types + // are missing since it doesn't know how to parse the info in the + // .debug_types type units. This causes all complex debug info types to be + // unresolved. Because this causes LLDB to crash and since it really + // doesn't provide a solid debuggiung experience, we should disable trying + // to debug this kind of DWARF until support gets added or deprecated. if (section_list->FindSectionByName(ConstString(".debug_types"))) { m_obj_file->GetModule()->ReportWarning( "lldb doesn’t support .debug_types debug info"); @@ -563,10 +562,10 @@ uint32_t SymbolFileDWARF::CalculateAbilities() { if (symfile_dir_cstr) { if (strcasestr(symfile_dir_cstr, ".dsym")) { if (m_obj_file->GetType() == ObjectFile::eTypeDebugInfo) { - // We have a dSYM file that didn't have a any debug info. - // If the string table has a size of 1, then it was made from - // an executable with no debug info, or from an executable that - // was stripped. + // We have a dSYM file that didn't have a any debug info. If the + // string table has a size of 1, then it was made from an + // executable with no debug info, or from an executable that was + // stripped. section = section_list->FindSectionByType(eSectionTypeDWARFDebugStr, true) .get(); @@ -730,8 +729,8 @@ SymbolFileDWARF::GetDWARFCompileUnit(lldb_private::CompileUnit *comp_unit) { DWARFDebugInfo *info = DebugInfo(); if (info) { - // Just a normal DWARF file whose user ID for the compile unit is - // the DWARF offset itself + // Just a normal DWARF file whose user ID for the compile unit is the DWARF + // offset itself DWARFUnit *dwarf_cu = info->GetCompileUnit((dw_offset_t)comp_unit->GetID()); @@ -784,8 +783,8 @@ lldb::CompUnitSP SymbolFileDWARF::ParseCompileUnit(DWARFUnit *dwarf_cu, FileSpec cu_file_spec{cu_die.GetName(), false}; if (cu_file_spec) { // If we have a full path to the compile unit, we don't need to - // resolve - // the file. This can be expensive e.g. when the source files are + // resolve the file. This can be expensive e.g. when the source + // files are // NFS mounted. if (cu_file_spec.IsRelative()) { const char *cu_comp_dir{ @@ -808,10 +807,8 @@ lldb::CompUnitSP SymbolFileDWARF::ParseCompileUnit(DWARFUnit *dwarf_cu, cu_language, is_optimized ? eLazyBoolYes : eLazyBoolNo)); if (cu_sp) { // If we just created a compile unit with an invalid file spec, - // try and get the - // first entry in the supports files from the line table as that - // should be the - // compile unit. + // try and get the first entry in the supports files from the + // line table as that should be the compile unit. if (!cu_file_spec) { cu_file_spec = cu_sp->GetSupportFiles().GetFileSpecAtIndex(1); if (cu_file_spec) { @@ -1005,8 +1002,7 @@ static void ParseDWARFLineTableCallback(dw_offset_t offset, (ParseDWARFLineTableCallbackInfo *)userData; LineTable *line_table = info->line_table; - // If this is our first time here, we need to create a - // sequence container. + // If this is our first time here, we need to create a sequence container. if (!info->sequence_ap.get()) { info->sequence_ap.reset(line_table->CreateLineSequenceContainer()); assert(info->sequence_ap.get()); @@ -1070,10 +1066,10 @@ bool SymbolFileDWARF::ParseCompileUnitLineTable(const SymbolContext &sc) { &info); SymbolFileDWARFDebugMap *debug_map_symfile = GetDebugMapSymfile(); if (debug_map_symfile) { - // We have an object file that has a line table with addresses - // that are not linked. We need to link the line table and convert - // the addresses that are relative to the .o file into addresses - // for the main executable. + // We have an object file that has a line table with addresses that + // are not linked. We need to link the line table and convert the + // addresses that are relative to the .o file into addresses for + // the main executable. sc.comp_unit->SetLineTable( debug_map_symfile->LinkOSOLineTable(this, line_table_ap.get())); } else { @@ -1149,9 +1145,9 @@ size_t SymbolFileDWARF::ParseFunctionBlocks(const SymbolContext &sc, case DW_TAG_lexical_block: { Block *block = NULL; if (tag == DW_TAG_subprogram) { - // Skip any DW_TAG_subprogram DIEs that are inside - // of a normal or inlined functions. These will be - // parsed on their own as separate entities. + // Skip any DW_TAG_subprogram DIEs that are inside of a normal or + // inlined functions. These will be parsed on their own as separate + // entities. if (depth > 0) break; @@ -1179,18 +1175,14 @@ size_t SymbolFileDWARF::ParseFunctionBlocks(const SymbolContext &sc, assert(subprogram_low_pc == LLDB_INVALID_ADDRESS); subprogram_low_pc = ranges.GetMinRangeBase(0); } else if (tag == DW_TAG_inlined_subroutine) { - // We get called here for inlined subroutines in two ways. - // The first time is when we are making the Function object - // for this inlined concrete instance. Since we're creating a top - // level block at + // We get called here for inlined subroutines in two ways. The first + // time is when we are making the Function object for this inlined + // concrete instance. Since we're creating a top level block at // here, the subprogram_low_pc will be LLDB_INVALID_ADDRESS. So we - // need to - // adjust the containing address. - // The second time is when we are parsing the blocks inside the - // function that contains - // the inlined concrete instance. Since these will be blocks inside - // the containing "real" - // function the offset will be for that function. + // need to adjust the containing address. The second time is when we + // are parsing the blocks inside the function that contains the + // inlined concrete instance. Since these will be blocks inside the + // containing "real" function the offset will be for that function. if (subprogram_low_pc == LLDB_INVALID_ADDRESS) { subprogram_low_pc = ranges.GetMinRangeBase(0); } @@ -1245,9 +1237,9 @@ size_t SymbolFileDWARF::ParseFunctionBlocks(const SymbolContext &sc, break; } - // Only parse siblings of the block if we are not at depth zero. A depth - // of zero indicates we are currently parsing the top level - // DW_TAG_subprogram DIE + // Only parse siblings of the block if we are not at depth zero. A depth of + // zero indicates we are currently parsing the top level DW_TAG_subprogram + // DIE if (depth == 0) die.Clear(); @@ -1293,12 +1285,12 @@ void SymbolFileDWARF::ParseDeclsForContext(CompilerDeclContext decl_ctx) { } SymbolFileDWARF *SymbolFileDWARF::GetDWARFForUID(lldb::user_id_t uid) { - // Anytime we get a "lldb::user_id_t" from an lldb_private::SymbolFile API - // we must make sure we use the correct DWARF file when resolving things. - // On MacOSX, when using SymbolFileDWARFDebugMap, we will use multiple - // SymbolFileDWARF classes, one for each .o file. We can often end up - // with references to other DWARF objects and we must be ready to receive - // a "lldb::user_id_t" that specifies a DIE from another SymbolFileDWARF + // Anytime we get a "lldb::user_id_t" from an lldb_private::SymbolFile API we + // must make sure we use the correct DWARF file when resolving things. On + // MacOSX, when using SymbolFileDWARFDebugMap, we will use multiple + // SymbolFileDWARF classes, one for each .o file. We can often end up with + // references to other DWARF objects and we must be ready to receive a + // "lldb::user_id_t" that specifies a DIE from another SymbolFileDWARF // instance. SymbolFileDWARFDebugMap *debug_map = GetDebugMapSymfile(); if (debug_map) @@ -1309,12 +1301,12 @@ SymbolFileDWARF *SymbolFileDWARF::GetDWARFForUID(lldb::user_id_t uid) { DWARFDIE SymbolFileDWARF::GetDIEFromUID(lldb::user_id_t uid) { - // Anytime we get a "lldb::user_id_t" from an lldb_private::SymbolFile API - // we must make sure we use the correct DWARF file when resolving things. - // On MacOSX, when using SymbolFileDWARFDebugMap, we will use multiple - // SymbolFileDWARF classes, one for each .o file. We can often end up - // with references to other DWARF objects and we must be ready to receive - // a "lldb::user_id_t" that specifies a DIE from another SymbolFileDWARF + // Anytime we get a "lldb::user_id_t" from an lldb_private::SymbolFile API we + // must make sure we use the correct DWARF file when resolving things. On + // MacOSX, when using SymbolFileDWARFDebugMap, we will use multiple + // SymbolFileDWARF classes, one for each .o file. We can often end up with + // references to other DWARF objects and we must be ready to receive a + // "lldb::user_id_t" that specifies a DIE from another SymbolFileDWARF // instance. SymbolFileDWARF *dwarf = GetDWARFForUID(uid); if (dwarf) @@ -1323,9 +1315,9 @@ SymbolFileDWARF::GetDIEFromUID(lldb::user_id_t uid) { } CompilerDecl SymbolFileDWARF::GetDeclForUID(lldb::user_id_t type_uid) { - // Anytime we have a lldb::user_id_t, we must get the DIE by - // calling SymbolFileDWARF::GetDIEFromUID(). See comments inside - // the SymbolFileDWARF::GetDIEFromUID() for details. + // Anytime we have a lldb::user_id_t, we must get the DIE by calling + // SymbolFileDWARF::GetDIEFromUID(). See comments inside the + // SymbolFileDWARF::GetDIEFromUID() for details. DWARFDIE die = GetDIEFromUID(type_uid); if (die) return die.GetDecl(); @@ -1334,9 +1326,9 @@ CompilerDecl SymbolFileDWARF::GetDeclForUID(lldb::user_id_t type_uid) { CompilerDeclContext SymbolFileDWARF::GetDeclContextForUID(lldb::user_id_t type_uid) { - // Anytime we have a lldb::user_id_t, we must get the DIE by - // calling SymbolFileDWARF::GetDIEFromUID(). See comments inside - // the SymbolFileDWARF::GetDIEFromUID() for details. + // Anytime we have a lldb::user_id_t, we must get the DIE by calling + // SymbolFileDWARF::GetDIEFromUID(). See comments inside the + // SymbolFileDWARF::GetDIEFromUID() for details. DWARFDIE die = GetDIEFromUID(type_uid); if (die) return die.GetDeclContext(); @@ -1345,9 +1337,9 @@ SymbolFileDWARF::GetDeclContextForUID(lldb::user_id_t type_uid) { CompilerDeclContext SymbolFileDWARF::GetDeclContextContainingUID(lldb::user_id_t type_uid) { - // Anytime we have a lldb::user_id_t, we must get the DIE by - // calling SymbolFileDWARF::GetDIEFromUID(). See comments inside - // the SymbolFileDWARF::GetDIEFromUID() for details. + // Anytime we have a lldb::user_id_t, we must get the DIE by calling + // SymbolFileDWARF::GetDIEFromUID(). See comments inside the + // SymbolFileDWARF::GetDIEFromUID() for details. DWARFDIE die = GetDIEFromUID(type_uid); if (die) return die.GetContainingDeclContext(); @@ -1355,9 +1347,9 @@ SymbolFileDWARF::GetDeclContextContainingUID(lldb::user_id_t type_uid) { } Type *SymbolFileDWARF::ResolveTypeUID(lldb::user_id_t type_uid) { - // Anytime we have a lldb::user_id_t, we must get the DIE by - // calling SymbolFileDWARF::GetDIEFromUID(). See comments inside - // the SymbolFileDWARF::GetDIEFromUID() for details. + // Anytime we have a lldb::user_id_t, we must get the DIE by calling + // SymbolFileDWARF::GetDIEFromUID(). See comments inside the + // SymbolFileDWARF::GetDIEFromUID() for details. DWARFDIE type_die = GetDIEFromUID(type_uid); if (type_die) return type_die.ResolveType(); @@ -1378,9 +1370,9 @@ Type *SymbolFileDWARF::ResolveTypeUID(const DWARFDIE &die, log, "SymbolFileDWARF::ResolveTypeUID (die = 0x%8.8x) %s '%s'", die.GetOffset(), die.GetTagAsCString(), die.GetName()); - // We might be coming in in the middle of a type tree (a class - // within a class, an enum within a class), so parse any needed - // parent DIEs before we get to this one... + // We might be coming in in the middle of a type tree (a class within a + // class, an enum within a class), so parse any needed parent DIEs before + // we get to this one... DWARFDIE decl_ctx_die = GetDeclContextDIEContainingDIE(die); if (decl_ctx_die) { if (log) { @@ -1408,8 +1400,8 @@ Type *SymbolFileDWARF::ResolveTypeUID(const DWARFDIE &die, } // This function is used when SymbolFileDWARFDebugMap owns a bunch of -// SymbolFileDWARF objects to detect if this DWARF file is the one that -// can resolve a compiler_type. +// SymbolFileDWARF objects to detect if this DWARF file is the one that can +// resolve a compiler_type. bool SymbolFileDWARF::HasForwardDeclForClangType( const CompilerType &compiler_type) { CompilerType compiler_type_no_qualifiers = @@ -1455,12 +1447,10 @@ bool SymbolFileDWARF::CompleteType(CompilerType &compiler_type) { DWARFDIE dwarf_die = GetDIE(die_it->getSecond()); if (dwarf_die) { - // Once we start resolving this type, remove it from the forward declaration - // map in case anyone child members or other types require this type to get - // resolved. - // The type will get resolved when all of the calls to - // SymbolFileDWARF::ResolveClangOpaqueTypeDefinition - // are done. + // Once we start resolving this type, remove it from the forward + // declaration map in case anyone child members or other types require this + // type to get resolved. The type will get resolved when all of the calls + // to SymbolFileDWARF::ResolveClangOpaqueTypeDefinition are done. GetForwardDeclClangTypeToDie().erase(die_it); Type *type = GetDIEToType().lookup(dwarf_die.GetDIE()); @@ -1505,8 +1495,8 @@ SymbolFileDWARF::GetCompUnitForDWARFCompUnit(DWARFUnit *dwarf_cu, uint32_t cu_idx) { // Check if the symbol vendor already knows about this compile unit? if (dwarf_cu->GetUserData() == NULL) { - // The symbol vendor doesn't know about this compile unit, we - // need to parse and add it to the symbol vendor object. + // The symbol vendor doesn't know about this compile unit, we need to parse + // and add it to the symbol vendor object. return ParseCompileUnit(dwarf_cu, cu_idx).get(); } return (CompileUnit *)dwarf_cu->GetUserData(); @@ -1652,20 +1642,18 @@ void SymbolFileDWARF::UpdateExternalModuleListIfNeeded() { dwo_module_spec.GetArchitecture() = m_obj_file->GetModule()->GetArchitecture(); - // When LLDB loads "external" modules it looks at the - // presence of DW_AT_GNU_dwo_name. - // However, when the already created module - // (corresponding to .dwo itself) is being processed, - // it will see the presence of DW_AT_GNU_dwo_name - // (which contains the name of dwo file) and - // will try to call ModuleList::GetSharedModule again. - // In some cases (i.e. for empty files) Clang 4.0 - // generates a *.dwo file which has DW_AT_GNU_dwo_name, - // but no DW_AT_comp_dir. In this case the method - // ModuleList::GetSharedModule will fail and - // the warning will be printed. However, as one can notice - // in this case we don't actually need to try to load the already - // loaded module (corresponding to .dwo) so we simply skip it. + // When LLDB loads "external" modules it looks at the presence of + // DW_AT_GNU_dwo_name. However, when the already created module + // (corresponding to .dwo itself) is being processed, it will see + // the presence of DW_AT_GNU_dwo_name (which contains the name of + // dwo file) and will try to call ModuleList::GetSharedModule + // again. In some cases (i.e. for empty files) Clang 4.0 generates + // a *.dwo file which has DW_AT_GNU_dwo_name, but no + // DW_AT_comp_dir. In this case the method + // ModuleList::GetSharedModule will fail and the warning will be + // printed. However, as one can notice in this case we don't + // actually need to try to load the already loaded module + // (corresponding to .dwo) so we simply skip it. if (m_obj_file->GetFileSpec() .GetFileNameExtension() .GetStringRef() == "dwo" && @@ -1759,13 +1747,11 @@ uint32_t SymbolFileDWARF::ResolveSymbolContext(const Address &so_addr, const dw_offset_t cu_offset = debug_info->GetCompileUnitAranges().FindAddress(file_vm_addr); if (cu_offset == DW_INVALID_OFFSET) { - // Global variables are not in the compile unit address ranges. The only - // way to - // currently find global variables is to iterate over the - // .debug_pubnames or the - // __apple_names table and find all items in there that point to - // DW_TAG_variable - // DIEs and then find the address that matches. + // Global variables are not in the compile unit address ranges. The + // only way to currently find global variables is to iterate over the + // .debug_pubnames or the __apple_names table and find all items in + // there that point to DW_TAG_variable DIEs and then find the address + // that matches. if (resolve_scope & eSymbolContextVariable) { GlobalVariableMap &map = GetGlobalAranges(); const GlobalVariableMap::Entry *entry = @@ -1833,13 +1819,10 @@ uint32_t SymbolFileDWARF::ResolveSymbolContext(const Address &so_addr, LineTable *line_table = sc.comp_unit->GetLineTable(); if (line_table != NULL) { // And address that makes it into this function should be in - // terms - // of this debug file if there is no debug map, or it will be an - // address in the .o file which needs to be fixed up to be in - // terms - // of the debug map executable. Either way, calling - // FixupAddress() - // will work for us. + // terms of this debug file if there is no debug map, or it + // will be an address in the .o file which needs to be fixed up + // to be in terms of the debug map executable. Either way, + // calling FixupAddress() will work for us. Address exe_so_addr(so_addr); if (FixupAddress(exe_so_addr)) { if (line_table->FindLineEntryByAddress(exe_so_addr, @@ -1853,11 +1836,11 @@ uint32_t SymbolFileDWARF::ResolveSymbolContext(const Address &so_addr, if (force_check_line_table && !(resolved & eSymbolContextLineEntry)) { // We might have had a compile unit that had discontiguous - // address ranges where the gaps are symbols that don't have - // any debug info. Discontiguous compile unit address ranges - // should only happen when there aren't other functions from - // other compile units in these gaps. This helps keep the size - // of the aranges down. + // address ranges where the gaps are symbols that don't have any + // debug info. Discontiguous compile unit address ranges should + // only happen when there aren't other functions from other + // compile units in these gaps. This helps keep the size of the + // aranges down. sc.comp_unit = NULL; resolved &= ~eSymbolContextCompUnit; } @@ -1899,8 +1882,8 @@ uint32_t SymbolFileDWARF::ResolveSymbolContext(const FileSpec &file_spec, if (sc.comp_unit) { uint32_t file_idx = UINT32_MAX; - // If we are looking for inline functions only and we don't - // find it in the support files, we are done. + // If we are looking for inline functions only and we don't find it + // in the support files, we are done. if (check_inlines) { file_idx = sc.comp_unit->GetSupportFiles().FindFileIndex( 1, file_spec, true); @@ -1912,8 +1895,8 @@ uint32_t SymbolFileDWARF::ResolveSymbolContext(const FileSpec &file_spec, LineTable *line_table = sc.comp_unit->GetLineTable(); if (line_table != NULL && line != 0) { - // We will have already looked up the file index if - // we are searching for inline entries. + // We will have already looked up the file index if we are + // searching for inline entries. if (!check_inlines) file_idx = sc.comp_unit->GetSupportFiles().FindFileIndex( 1, file_spec, true); @@ -1970,16 +1953,14 @@ uint32_t SymbolFileDWARF::ResolveSymbolContext(const FileSpec &file_spec, } } else if (file_spec_matches_cu_file_spec && !check_inlines) { // only append the context if we aren't looking for inline call - // sites - // by file and line and if the file spec matches that of the - // compile unit + // sites by file and line and if the file spec matches that of + // the compile unit sc_list.Append(sc); } } else if (file_spec_matches_cu_file_spec && !check_inlines) { // only append the context if we aren't looking for inline call - // sites - // by file and line and if the file spec matches that of the - // compile unit + // sites by file and line and if the file spec matches that of + // the compile unit sc_list.Append(sc); } @@ -2044,8 +2025,8 @@ void SymbolFileDWARF::Index() { auto extract_fn = [debug_info, &clear_cu_dies](size_t cu_idx) { DWARFUnit *dwarf_cu = debug_info->GetCompileUnitAtIndex(cu_idx); if (dwarf_cu) { - // dwarf_cu->ExtractDIEsIfNeeded(false) will return zero if the - // DIEs for a compile unit have already been parsed. + // dwarf_cu->ExtractDIEsIfNeeded(false) will return zero if the DIEs + // for a compile unit have already been parsed. if (dwarf_cu->ExtractDIEsIfNeeded(false) > 1) clear_cu_dies[cu_idx] = true; } @@ -2056,17 +2037,15 @@ void SymbolFileDWARF::Index() { //---------------------------------------------------------------------- // First figure out which compile units didn't have their DIEs already // parsed and remember this. If no DIEs were parsed prior to this index - // function call, we are going to want to clear the CU dies after we - // are done indexing to make sure we don't pull in all DWARF dies, but - // we need to wait until all compile units have been indexed in case - // a DIE in one compile unit refers to another and the indexes accesses - // those DIEs. + // function call, we are going to want to clear the CU dies after we are + // done indexing to make sure we don't pull in all DWARF dies, but we need + // to wait until all compile units have been indexed in case a DIE in one + // compile unit refers to another and the indexes accesses those DIEs. //---------------------------------------------------------------------- TaskMapOverInt(0, num_compile_units, extract_fn); // Now create a task runner that can index each DWARF compile unit in a - // separate - // thread so we can index quickly. + // separate thread so we can index quickly. TaskMapOverInt(0, num_compile_units, parser_fn); @@ -2130,9 +2109,9 @@ void SymbolFileDWARF::Index() { bool SymbolFileDWARF::DeclContextMatchesThisSymbolFile( const lldb_private::CompilerDeclContext *decl_ctx) { if (decl_ctx == nullptr || !decl_ctx->IsValid()) { - // Invalid namespace decl which means we aren't matching only things - // in this symbol file, so return true to indicate it matches this - // symbol file. + // Invalid namespace decl which means we aren't matching only things in + // this symbol file, so return true to indicate it matches this symbol + // file. return true; } @@ -2175,8 +2154,8 @@ uint32_t SymbolFileDWARF::FindGlobalVariables( if (!append) variables.Clear(); - // Remember how many variables are in the list before we search in case - // we are appending the results to a variable list. + // Remember how many variables are in the list before we search in case we + // are appending the results to a variable list. const uint32_t original_size = variables.GetSize(); DIEArray die_offsets; @@ -2285,8 +2264,8 @@ uint32_t SymbolFileDWARF::FindGlobalVariables(const RegularExpression ®ex, if (!append) variables.Clear(); - // Remember how many variables are in the list before we search in case - // we are appending the results to a variable list. + // Remember how many variables are in the list before we search in case we + // are appending the results to a variable list. const uint32_t original_size = variables.GetSize(); DIEArray die_offsets; @@ -2443,9 +2422,8 @@ void SymbolFileDWARF::ParseFunctions(const DIEArray &die_offsets, bool SymbolFileDWARF::DIEInDeclContext(const CompilerDeclContext *decl_ctx, const DWARFDIE &die) { // If we have no parent decl context to match this DIE matches, and if the - // parent - // decl context isn't valid, we aren't trying to look for any particular decl - // context so any die matches. + // parent decl context isn't valid, we aren't trying to look for any + // particular decl context so any die matches. if (decl_ctx == nullptr || !decl_ctx->IsValid()) return true; @@ -2494,8 +2472,8 @@ SymbolFileDWARF::FindFunctions(const ConstString &name, if (name.IsEmpty()) return 0; - // Remember how many sc_list are in the list before we search in case - // we are appending the results to a variable list. + // Remember how many sc_list are in the list before we search in case we are + // appending the results to a variable list. const uint32_t original_size = sc_list.GetSize(); @@ -2513,10 +2491,8 @@ SymbolFileDWARF::FindFunctions(const ConstString &name, if (name_type_mask & eFunctionNameTypeFull) { // If they asked for the full name, match what they typed. At some - // point we may - // want to canonicalize this (strip double spaces, etc. For now, we - // just add all the - // dies that we find by exact match. + // point we may want to canonicalize this (strip double spaces, etc. + // For now, we just add all the dies that we find by exact match. num_matches = m_apple_names_ap->FindByName(name.GetStringRef(), die_offsets); for (uint32_t i = 0; i < num_matches; i++) { @@ -2546,8 +2522,8 @@ SymbolFileDWARF::FindFunctions(const ConstString &name, num_matches = m_apple_names_ap->FindByName(name.GetStringRef(), die_offsets); // Now make sure these are actually ObjC methods. In this case we can - // simply look up the name, - // and if it is an ObjC method name, we're good. + // simply look up the name, and if it is an ObjC method name, we're + // good. for (uint32_t i = 0; i < num_matches; i++) { const DIERef &die_ref = die_offsets[i]; @@ -2573,10 +2549,9 @@ SymbolFileDWARF::FindFunctions(const ConstString &name, if (((name_type_mask & eFunctionNameTypeMethod) && !parent_decl_ctx) || name_type_mask & eFunctionNameTypeBase) { // The apple_names table stores just the "base name" of C++ methods in - // the table. So we have to - // extract the base name, look that up, and if there is any other - // information in the name we were - // passed in we have to post-filter based on that. + // the table. So we have to extract the base name, look that up, and + // if there is any other information in the name we were passed in we + // have to post-filter based on that. // FIXME: Arrange the logic above so that we don't calculate the base // name twice: @@ -2597,8 +2572,8 @@ SymbolFileDWARF::FindFunctions(const ConstString &name, if ((name_type_mask & (eFunctionNameTypeBase | eFunctionNameTypeMethod)) != (eFunctionNameTypeBase | eFunctionNameTypeMethod)) { - // We are looking for either basenames or methods, so we need to - // trim out the ones we won't want by looking at the type + // We are looking for either basenames or methods, so we need + // to trim out the ones we won't want by looking at the type SymbolContext sc; if (sc_list.GetLastContext(sc)) { if (sc.block) { @@ -2651,14 +2626,13 @@ SymbolFileDWARF::FindFunctions(const ConstString &name, FindFunctions(name, m_function_fullname_index, include_inlines, sc_list); // FIXME Temporary workaround for global/anonymous namespace - // functions debugging FreeBSD and Linux binaries. - // If we didn't find any functions in the global namespace try - // looking in the basename index but ignore any returned - // functions that have a namespace but keep functions which - // have an anonymous namespace + // functions debugging FreeBSD and Linux binaries. If we didn't find any + // functions in the global namespace try looking in the basename index + // but ignore any returned functions that have a namespace but keep + // functions which have an anonymous namespace // TODO: The arch in the object file isn't correct for MSVC - // binaries on windows, we should find a way to make it - // correct and handle those symbols as well. + // binaries on windows, we should find a way to make it correct and + // handle those symbols as well. if (sc_list.GetSize() == original_size) { ArchSpec arch; if (!parent_decl_ctx && GetObjectFile()->GetArchitecture(arch) && @@ -2764,8 +2738,8 @@ uint32_t SymbolFileDWARF::FindFunctions(const RegularExpression ®ex, if (!append) sc_list.Clear(); - // Remember how many sc_list are in the list before we search in case - // we are appending the results to a variable list. + // Remember how many sc_list are in the list before we search in case we are + // appending the results to a variable list. uint32_t original_size = sc_list.GetSize(); if (m_using_apple_tables) { @@ -3016,8 +2990,8 @@ SymbolFileDWARF::FindNamespace(const SymbolContext &sc, const ConstString &name, if (info) { DIEArray die_offsets; - // Index if we already haven't to make sure the compile units - // get indexed and make their global DIE index list + // Index if we already haven't to make sure the compile units get indexed + // and make their global DIE index list if (m_using_apple_tables) { if (m_apple_namespaces_ap.get()) { m_apple_namespaces_ap->FindByName(name.GetStringRef(), die_offsets); @@ -3166,12 +3140,10 @@ SymbolFileDWARF::GetObjCClassSymbol(const ConstString &objc_class_name) { } // Some compilers don't emit the DW_AT_APPLE_objc_complete_type attribute. If -// they don't -// then we can end up looking through all class types for a complete type and -// never find -// the full definition. We need to know if this attribute is supported, so we -// determine -// this here and cache th result. We also need to worry about the debug map +// they don't then we can end up looking through all class types for a complete +// type and never find the full definition. We need to know if this attribute +// is supported, so we determine this here and cache th result. We also need to +// worry about the debug map // DWARF file // if we are doing darwin DWARF in .o file debugging. bool SymbolFileDWARF::Supports_DW_AT_APPLE_objc_complete_type( @@ -3234,7 +3206,8 @@ TypeSP SymbolFileDWARF::FindCompleteObjCDefinitionTypeForDIE( if (type_die) { bool try_resolving_type = false; - // Don't try and resolve the DIE we are looking for with the DIE itself! + // Don't try and resolve the DIE we are looking for with the DIE + // itself! if (type_die != die) { switch (type_die.Tag()) { case DW_TAG_class_type: @@ -3283,16 +3256,15 @@ TypeSP SymbolFileDWARF::FindCompleteObjCDefinitionTypeForDIE( } //---------------------------------------------------------------------- -// This function helps to ensure that the declaration contexts match for -// two different DIEs. Often times debug information will refer to a -// forward declaration of a type (the equivalent of "struct my_struct;". -// There will often be a declaration of that type elsewhere that has the -// full definition. When we go looking for the full type "my_struct", we -// will find one or more matches in the accelerator tables and we will -// then need to make sure the type was in the same declaration context -// as the original DIE. This function can efficiently compare two DIEs -// and will return true when the declaration context matches, and false -// when they don't. +// This function helps to ensure that the declaration contexts match for two +// different DIEs. Often times debug information will refer to a forward +// declaration of a type (the equivalent of "struct my_struct;". There will +// often be a declaration of that type elsewhere that has the full definition. +// When we go looking for the full type "my_struct", we will find one or more +// matches in the accelerator tables and we will then need to make sure the +// type was in the same declaration context as the original DIE. This function +// can efficiently compare two DIEs and will return true when the declaration +// context matches, and false when they don't. //---------------------------------------------------------------------- bool SymbolFileDWARF::DIEDeclContextsMatch(const DWARFDIE &die1, const DWARFDIE &die2) { @@ -3301,32 +3273,31 @@ bool SymbolFileDWARF::DIEDeclContextsMatch(const DWARFDIE &die1, DWARFDIECollection decl_ctx_1; DWARFDIECollection decl_ctx_2; - // The declaration DIE stack is a stack of the declaration context - // DIEs all the way back to the compile unit. If a type "T" is - // declared inside a class "B", and class "B" is declared inside - // a class "A" and class "A" is in a namespace "lldb", and the - // namespace is in a compile unit, there will be a stack of DIEs: + // The declaration DIE stack is a stack of the declaration context DIEs all + // the way back to the compile unit. If a type "T" is declared inside a class + // "B", and class "B" is declared inside a class "A" and class "A" is in a + // namespace "lldb", and the namespace is in a compile unit, there will be a + // stack of DIEs: // // [0] DW_TAG_class_type for "B" // [1] DW_TAG_class_type for "A" // [2] DW_TAG_namespace for "lldb" // [3] DW_TAG_compile_unit or DW_TAG_partial_unit for the source file. // - // We grab both contexts and make sure that everything matches - // all the way back to the compiler unit. + // We grab both contexts and make sure that everything matches all the way + // back to the compiler unit. // First lets grab the decl contexts for both DIEs die1.GetDeclContextDIEs(decl_ctx_1); die2.GetDeclContextDIEs(decl_ctx_2); - // Make sure the context arrays have the same size, otherwise - // we are done + // Make sure the context arrays have the same size, otherwise we are done const size_t count1 = decl_ctx_1.Size(); const size_t count2 = decl_ctx_2.Size(); if (count1 != count2) return false; - // Make sure the DW_TAG values match all the way back up the - // compile unit. If they don't, then we are done. + // Make sure the DW_TAG values match all the way back up the compile unit. If + // they don't, then we are done. DWARFDIE decl_ctx_die1; DWARFDIE decl_ctx_die2; size_t i; @@ -3339,27 +3310,28 @@ bool SymbolFileDWARF::DIEDeclContextsMatch(const DWARFDIE &die1, #if defined LLDB_CONFIGURATION_DEBUG // Make sure the top item in the decl context die array is always - // DW_TAG_compile_unit or DW_TAG_partial_unit. If it isn't then something - // went wrong in the DWARFDIE::GetDeclContextDIEs() function... + // DW_TAG_compile_unit or DW_TAG_partial_unit. If it isn't then + // something went wrong in the DWARFDIE::GetDeclContextDIEs() + // function. dw_tag_t cu_tag = decl_ctx_1.GetDIEAtIndex(count1 - 1).Tag(); UNUSED_IF_ASSERT_DISABLED(cu_tag); assert(cu_tag == DW_TAG_compile_unit || cu_tag == DW_TAG_partial_unit); #endif - // Always skip the compile unit when comparing by only iterating up to - // "count - 1". Here we compare the names as we go. + // Always skip the compile unit when comparing by only iterating up to "count + // - 1". Here we compare the names as we go. for (i = 0; i < count1 - 1; i++) { decl_ctx_die1 = decl_ctx_1.GetDIEAtIndex(i); decl_ctx_die2 = decl_ctx_2.GetDIEAtIndex(i); const char *name1 = decl_ctx_die1.GetName(); const char *name2 = decl_ctx_die2.GetName(); - // If the string was from a DW_FORM_strp, then the pointer will often - // be the same! + // If the string was from a DW_FORM_strp, then the pointer will often be + // the same! if (name1 == name2) continue; - // Name pointers are not equal, so only compare the strings - // if both are not NULL. + // Name pointers are not equal, so only compare the strings if both are not + // NULL. if (name1 && name2) { // If the strings don't compare, we are done... if (strcmp(name1, name2) != 0) @@ -3369,8 +3341,8 @@ bool SymbolFileDWARF::DIEDeclContextsMatch(const DWARFDIE &die1, return false; } } - // We made it through all of the checks and the declaration contexts - // are equal. + // We made it through all of the checks and the declaration contexts are + // equal. return true; } @@ -3432,10 +3404,9 @@ TypeSP SymbolFileDWARF::FindDefinitionTypeForDWARFDeclContext( const size_t num_matches = die_offsets.size(); - // Get the type system that we are looking to find a type for. We will use - // this - // to ensure any matches we find are in a language that this type system - // supports + // Get the type system that we are looking to find a type for. We will + // use this to ensure any matches we find are in a language that this + // type system supports const LanguageType language = dwarf_decl_ctx.GetLanguage(); TypeSystem *type_system = (language == eLanguageTypeUnknown) ? nullptr @@ -3448,10 +3419,8 @@ TypeSP SymbolFileDWARF::FindDefinitionTypeForDWARFDeclContext( if (type_die) { // Make sure type_die's langauge matches the type system we are - // looking for. - // We don't want to find a "Foo" type from Java if we are looking - // for a "Foo" - // type for C, C++, ObjC, or ObjC++. + // looking for. We don't want to find a "Foo" type from Java if we + // are looking for a "Foo" type for C, C++, ObjC, or ObjC++. if (type_system && !type_system->SupportsLanguage(type_die.GetLanguage())) continue; @@ -3465,24 +3434,23 @@ TypeSP SymbolFileDWARF::FindDefinitionTypeForDWARFDeclContext( // The tags match, lets try resolving this type try_resolving_type = true; } else { - // The tags don't match, but we need to watch our for a - // forward declaration for a struct and ("struct foo") - // ends up being a class ("class foo { ... };") or - // vice versa. + // The tags don't match, but we need to watch our for a forward + // declaration for a struct and ("struct foo") ends up being a + // class ("class foo { ... };") or vice versa. switch (type_tag) { case DW_TAG_class_type: - // We had a "class foo", see if we ended up with a "struct foo { - // ... };" + // We had a "class foo", see if we ended up with a "struct foo + // { ... };" try_resolving_type = (tag == DW_TAG_structure_type); break; case DW_TAG_structure_type: - // We had a "struct foo", see if we ended up with a "class foo { - // ... };" + // We had a "struct foo", see if we ended up with a "class foo + // { ... };" try_resolving_type = (tag == DW_TAG_class_type); break; default: - // Tags don't match, don't event try to resolve - // using this type whose name matches.... + // Tags don't match, don't event try to resolve using this type + // whose name matches.... break; } } @@ -3693,8 +3661,8 @@ size_t SymbolFileDWARF::ParseVariablesForContext(const SymbolContext &sc) { } } } else { - // Index if we already haven't to make sure the compile units - // get indexed and make their global DIE index list + // Index if we already haven't to make sure the compile units get + // indexed and make their global DIE index list if (!m_indexed) Index(); @@ -3910,10 +3878,9 @@ VariableSP SymbolFileDWARF::ParseVariableDIE(const SymbolContext &sc, // TODO: Handle the case when DW_AT_start_scope have form // constant. The // dwarf spec is a bit ambiguous about what is the expected - // behavior in - // case the enclosing block have a non coninious address range and - // the - // DW_AT_start_scope entry have a form constant. + // behavior in case the enclosing block have a non coninious + // address range and the DW_AT_start_scope entry have a form + // constant. GetObjectFile()->GetModule()->ReportWarning( "0x%8.8" PRIx64 ": DW_AT_start_scope has unsupported form type (0x%x)\n", @@ -3958,16 +3925,15 @@ VariableSP SymbolFileDWARF::ParseVariableDIE(const SymbolContext &sc, bool has_explicit_mangled = mangled != nullptr; if (!mangled) { // LLDB relies on the mangled name (DW_TAG_linkage_name or - // DW_AT_MIPS_linkage_name) to - // generate fully qualified names of global variables with commands like - // "frame var j". - // For example, if j were an int variable holding a value 4 and declared - // in a namespace - // B which in turn is contained in a namespace A, the command "frame var - // j" returns - // "(int) A::B::j = 4". If the compiler does not emit a linkage name, we - // should be able - // to generate a fully qualified name from the declaration context. + // DW_AT_MIPS_linkage_name) to generate fully qualified names + // of global variables with commands like "frame var j". For + // example, if j were an int variable holding a value 4 and + // declared in a namespace B which in turn is contained in a + // namespace A, the command "frame var j" returns + // "(int) A::B::j = 4". + // If the compiler does not emit a linkage name, we should be + // able to generate a fully qualified name from the + // declaration context. if ((parent_tag == DW_TAG_compile_unit || parent_tag == DW_TAG_partial_unit) && Language::LanguageIsCPlusPlus(die.GetLanguage())) { @@ -4017,24 +3983,21 @@ VariableSP SymbolFileDWARF::ParseVariableDIE(const SymbolContext &sc, scope = eValueTypeVariableStatic; if (debug_map_symfile) { - // When leaving the DWARF in the .o files on darwin, - // when we have a global variable that wasn't initialized, - // the .o file might not have allocated a virtual - // address for the global variable. In this case it will - // have created a symbol for the global variable - // that is undefined/data and external and the value will - // be the byte size of the variable. When we do the - // address map in SymbolFileDWARFDebugMap we rely on - // having an address, we need to do some magic here - // so we can get the correct address for our global - // variable. The address for all of these entries - // will be zero, and there will be an undefined symbol - // in this object file, and the executable will have - // a matching symbol with a good address. So here we - // dig up the correct address and replace it in the - // location for the variable, and set the variable's - // symbol context scope to be that of the main executable - // so the file address will resolve correctly. + // When leaving the DWARF in the .o files on darwin, when we have a + // global variable that wasn't initialized, the .o file might not + // have allocated a virtual address for the global variable. In + // this case it will have created a symbol for the global variable + // that is undefined/data and external and the value will be the + // byte size of the variable. When we do the address map in + // SymbolFileDWARFDebugMap we rely on having an address, we need to + // do some magic here so we can get the correct address for our + // global variable. The address for all of these entries will be + // zero, and there will be an undefined symbol in this object file, + // and the executable will have a matching symbol with a good + // address. So here we dig up the correct address and replace it in + // the location for the variable, and set the variable's symbol + // context scope to be that of the main executable so the file + // address will resolve correctly. bool linked_oso_file_addr = false; if (is_external && location_DW_OP_addr == 0) { // we have a possible uninitialized extern global @@ -4066,8 +4029,7 @@ VariableSP SymbolFileDWARF::ParseVariableDIE(const SymbolContext &sc, if (!linked_oso_file_addr) { // The DW_OP_addr is not zero, but it contains a .o file address - // which - // needs to be linked up correctly. + // which needs to be linked up correctly. const lldb::addr_t exe_file_addr = debug_map_symfile->LinkOSOFileAddress(this, location_DW_OP_addr); @@ -4137,16 +4099,16 @@ VariableSP SymbolFileDWARF::ParseVariableDIE(const SymbolContext &sc, var_sp->SetLocationIsConstantValueData(location_is_const_value_data); } else { - // Not ready to parse this variable yet. It might be a global - // or static variable that is in a function scope and the function - // in the symbol context wasn't filled in yet + // Not ready to parse this variable yet. It might be a global or static + // variable that is in a function scope and the function in the symbol + // context wasn't filled in yet return var_sp; } } - // Cache var_sp even if NULL (the variable was just a specification or - // was missing vital information to be able to be displayed in the debugger - // (missing location due to optimization, etc)) so we don't re-parse - // this DIE over and over later... + // Cache var_sp even if NULL (the variable was just a specification or was + // missing vital information to be able to be displayed in the debugger + // (missing location due to optimization, etc)) so we don't re-parse this + // DIE over and over later... GetDIEToVariable()[die.GetDIE()] = var_sp; if (spec_die) GetDIEToVariable()[spec_die.GetDIE()] = var_sp; @@ -4254,8 +4216,8 @@ size_t SymbolFileDWARF::ParseVariables(const SymbolContext &sc, Block *block = sc.function->GetBlock(true).FindBlockByID( sc_parent_die.GetID()); if (block == NULL) { - // This must be a specification or abstract origin with - // a concrete block counterpart in the current function. We need + // This must be a specification or abstract origin with a + // concrete block counterpart in the current function. We need // to find the concrete block so we can correctly add the // variable to it const DWARFDIE concrete_block_die = diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.cpp b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.cpp index eabff86a542..0d7fd321ed0 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.cpp @@ -44,10 +44,8 @@ using namespace lldb; using namespace lldb_private; // Subclass lldb_private::Module so we can intercept the -// "Module::GetObjectFile()" -// (so we can fixup the object file sections) and also for -// "Module::GetSymbolVendor()" -// (so we can fixup the symbol file id. +// "Module::GetObjectFile()" (so we can fixup the object file sections) and +// also for "Module::GetSymbolVendor()" (so we can fixup the symbol file id. const SymbolFileDWARFDebugMap::FileRangeMap & SymbolFileDWARFDebugMap::CompileUnitInfo::GetFileRangeMap( @@ -84,8 +82,8 @@ SymbolFileDWARFDebugMap::CompileUnitInfo::GetFileRangeMap( /// const uint32_t fun_resolve_flags = SymbolContext::Module | /// eSymbolContextCompUnit | eSymbolContextFunction; // SectionList *oso_sections = oso_objfile->Sections(); - // Now we need to make sections that map from zero based object - // file addresses to where things ended up in the main executable. + // Now we need to make sections that map from zero based object file + // addresses to where things ended up in the main executable. assert(comp_unit_info->first_symbol_index != UINT32_MAX); // End index is one past the last valid symbol index @@ -104,9 +102,9 @@ SymbolFileDWARFDebugMap::CompileUnitInfo::GetFileRangeMap( break; case eSymbolTypeCode: { - // For each N_FUN, or function that we run into in the debug map - // we make a new section that we add to the sections found in the - // .o file. This new section has the file address set to what the + // For each N_FUN, or function that we run into in the debug map we + // make a new section that we add to the sections found in the .o + // file. This new section has the file address set to what the // addresses are in the .o file, and the load address is adjusted // to match where it ended up in the final executable! We do this // before we parse any dwarf info so that when it goes get parsed @@ -129,21 +127,21 @@ SymbolFileDWARFDebugMap::CompileUnitInfo::GetFileRangeMap( } break; case eSymbolTypeData: { - // For each N_GSYM we remap the address for the global by making - // a new section that we add to the sections found in the .o file. - // This new section has the file address set to what the - // addresses are in the .o file, and the load address is adjusted - // to match where it ended up in the final executable! We do this - // before we parse any dwarf info so that when it goes get parsed - // all section/offset addresses that get registered will resolve + // For each N_GSYM we remap the address for the global by making a + // new section that we add to the sections found in the .o file. + // This new section has the file address set to what the addresses + // are in the .o file, and the load address is adjusted to match + // where it ended up in the final executable! We do this before we + // parse any dwarf info so that when it goes get parsed all + // section/offset addresses that get registered will resolve // correctly to the new addresses in the main executable. We // initially set the section size to be 1 byte, but will need to // fix up these addresses further after all globals have been // parsed to span the gaps, or we can find the global variable // sizes from the DWARF info as we are parsing. - // Next we find the non-stab entry that corresponds to the N_GSYM in - // the .o file + // Next we find the non-stab entry that corresponds to the N_GSYM + // in the .o file Symbol *oso_gsym_symbol = oso_symtab->FindFirstSymbolWithNameAndType( exe_symbol->GetMangled().GetName(lldb::eLanguageTypeUnknown, @@ -198,9 +196,9 @@ public: SymbolVendor *symbol_vendor = Module::GetSymbolVendor(can_create, feedback_strm); if (symbol_vendor) { - // Set a pointer to this class to set our OSO DWARF file know - // that the DWARF is being used along with a debug map and that - // it will have the remapped sections that we do below. + // Set a pointer to this class to set our OSO DWARF file know that + // the DWARF is being used along with a debug map and that it will + // have the remapped sections that we do below. SymbolFileDWARF *oso_symfile = SymbolFileDWARFDebugMap::GetSymbolFileAsSymbolFileDWARF( symbol_vendor->GetSymbolFile()); @@ -292,8 +290,8 @@ void SymbolFileDWARFDebugMap::InitOSO() { // In order to get the abilities of this plug-in, we look at the list of // N_OSO entries (object files) from the symbol table and make sure that - // these files exist and also contain valid DWARF. If we get any of that - // then we return the abilities of the first N_OSO's DWARF. + // these files exist and also contain valid DWARF. If we get any of that then + // we return the abilities of the first N_OSO's DWARF. Symtab *symtab = m_obj_file->GetSymtab(); if (symtab) { @@ -303,10 +301,10 @@ void SymbolFileDWARFDebugMap::InitOSO() { // When a mach-o symbol is encoded, the n_type field is encoded in bits // 23:16, and the n_desc field is encoded in bits 15:0. // - // To find all N_OSO entries that are part of the DWARF + debug map - // we find only object file symbols with the flags value as follows: - // bits 23:16 == 0x66 (N_OSO) - // bits 15: 0 == 0x0001 (specifies this is a debug map object file) + // To find all N_OSO entries that are part of the DWARF + debug map we find + // only object file symbols with the flags value as follows: bits 23:16 == + // 0x66 (N_OSO) bits 15: 0 == 0x0001 (specifies this is a debug map object + // file) const uint32_t k_oso_symbol_flags_value = 0x660001u; const uint32_t oso_index_count = @@ -443,16 +441,15 @@ Module *SymbolFileDWARFDebugMap::GetModuleByCompUnitInfo( return NULL; } } - // Always create a new module for .o files. Why? Because we - // use the debug map, to add new sections to each .o file and - // even though a .o file might not have changed, the sections - // that get added to the .o file can change. + // Always create a new module for .o files. Why? Because we use the debug + // map, to add new sections to each .o file and even though a .o file + // might not have changed, the sections that get added to the .o file can + // change. ArchSpec oso_arch; // Only adopt the architecture from the module (not the vendor or OS) - // since .o files for "i386-apple-ios" will historically show up as - // "i386-apple-macosx" - // due to the lack of a LC_VERSION_MIN_MACOSX or LC_VERSION_MIN_IPHONEOS - // load command... + // since .o files for "i386-apple-ios" will historically show up as "i386 + // -apple-macosx" due to the lack of a LC_VERSION_MIN_MACOSX or + // LC_VERSION_MIN_IPHONEOS load command... oso_arch.SetTriple(m_obj_file->GetModule() ->GetArchitecture() .GetTriple() @@ -546,8 +543,8 @@ SymbolFileDWARF *SymbolFileDWARFDebugMap::GetSymbolFileByCompUnitInfo( uint32_t SymbolFileDWARFDebugMap::CalculateAbilities() { // In order to get the abilities of this plug-in, we look at the list of // N_OSO entries (object files) from the symbol table and make sure that - // these files exist and also contain valid DWARF. If we get any of that - // then we return the abilities of the first N_OSO's DWARF. + // these files exist and also contain valid DWARF. If we get any of that then + // we return the abilities of the first N_OSO's DWARF. const uint32_t oso_index_count = GetNumCompileUnits(); if (oso_index_count > 0) { @@ -576,9 +573,8 @@ CompUnitSP SymbolFileDWARFDebugMap::ParseCompileUnitAtIndex(uint32_t cu_idx) { if (oso_module) { FileSpec so_file_spec; if (GetFileSpecForSO(cu_idx, so_file_spec)) { - // User zero as the ID to match the compile unit at offset - // zero in each .o file since each .o file can only have - // one compile unit for now. + // User zero as the ID to match the compile unit at offset zero in each + // .o file since each .o file can only have one compile unit for now. lldb::user_id_t cu_id = 0; m_compile_unit_infos[cu_idx].compile_unit_sp.reset( new CompileUnit(m_obj_file->GetModule(), NULL, so_file_spec, cu_id, @@ -767,8 +763,8 @@ uint32_t SymbolFileDWARFDebugMap::ResolveSymbolContext( const uint32_t cu_count = GetNumCompileUnits(); for (uint32_t i = 0; i < cu_count; ++i) { - // If we are checking for inlines, then we need to look through all - // compile units no matter if "file_spec" matches. + // If we are checking for inlines, then we need to look through all compile + // units no matter if "file_spec" matches. bool resolve = check_inlines; if (!resolve) { @@ -823,8 +819,8 @@ uint32_t SymbolFileDWARFDebugMap::FindGlobalVariables( if (!append) variables.Clear(); - // Remember how many variables are in the list before we search in case - // we are appending the results to a variable list. + // Remember how many variables are in the list before we search in case we + // are appending the results to a variable list. const uint32_t original_size = variables.GetSize(); uint32_t total_matches = 0; @@ -843,8 +839,8 @@ uint32_t SymbolFileDWARFDebugMap::FindGlobalVariables( if (max_matches >= total_matches) return true; - // Update the max matches for any subsequent calls to find globals - // in any other object files with DWARF + // Update the max matches for any subsequent calls to find globals in any + // other object files with DWARF max_matches -= oso_matches; } @@ -863,8 +859,8 @@ SymbolFileDWARFDebugMap::FindGlobalVariables(const RegularExpression ®ex, if (!append) variables.Clear(); - // Remember how many variables are in the list before we search in case - // we are appending the results to a variable list. + // Remember how many variables are in the list before we search in case we + // are appending the results to a variable list. const uint32_t original_size = variables.GetSize(); uint32_t total_matches = 0; @@ -882,8 +878,8 @@ SymbolFileDWARFDebugMap::FindGlobalVariables(const RegularExpression ®ex, if (max_matches >= total_matches) return true; - // Update the max matches for any subsequent calls to find globals - // in any other object files with DWARF + // Update the max matches for any subsequent calls to find globals in any + // other object files with DWARF max_matches -= oso_matches; } @@ -965,12 +961,12 @@ SymbolFileDWARFDebugMap::GetCompileUnitInfoForSymbolWithID( static void RemoveFunctionsWithModuleNotEqualTo(const ModuleSP &module_sp, SymbolContextList &sc_list, uint32_t start_idx) { - // We found functions in .o files. Not all functions in the .o files - // will have made it into the final output file. The ones that did - // make it into the final output file will have a section whose module - // matches the module from the ObjectFile for this SymbolFile. When - // the modules don't match, then we have something that was in a - // .o file, but doesn't map to anything in the final executable. + // We found functions in .o files. Not all functions in the .o files will + // have made it into the final output file. The ones that did make it into + // the final output file will have a section whose module matches the module + // from the ObjectFile for this SymbolFile. When the modules don't match, + // then we have something that was in a .o file, but doesn't map to anything + // in the final executable. uint32_t i = start_idx; while (i < sc_list.GetSize()) { SymbolContext sc; @@ -1105,8 +1101,8 @@ TypeSP SymbolFileDWARFDebugMap::FindCompleteObjCDefinitionTypeForDIE( // the type name and whose type is eSymbolTypeObjCClass. If we can find that // symbol and find its containing parent, we can locate the .o file that will // contain the implementation definition since it will be scoped inside the - // N_SO - // and we can then locate the SymbolFileDWARF that corresponds to that N_SO. + // N_SO and we can then locate the SymbolFileDWARF that corresponds to that + // N_SO. SymbolFileDWARF *oso_dwarf = NULL; TypeSP type_sp; ObjectFile *module_objfile = m_obj_file->GetModule()->GetObjectFile(); @@ -1118,8 +1114,7 @@ TypeSP SymbolFileDWARFDebugMap::FindCompleteObjCDefinitionTypeForDIE( Symtab::eVisibilityAny); if (objc_class_symbol) { // Get the N_SO symbol that contains the objective C class symbol as - // this - // should be the .o file that contains the real definition... + // this should be the .o file that contains the real definition... const Symbol *source_file_symbol = symtab->GetParent(objc_class_symbol); if (source_file_symbol && @@ -1147,10 +1142,8 @@ TypeSP SymbolFileDWARFDebugMap::FindCompleteObjCDefinitionTypeForDIE( } // Only search all .o files for the definition if we don't need the - // implementation - // because otherwise, with a valid debug map we should have the ObjC class - // symbol and - // the code above should have found it. + // implementation because otherwise, with a valid debug map we should have + // the ObjC class symbol and the code above should have found it. if (must_be_implementation == false) { TypeSP type_sp; diff --git a/lldb/source/Plugins/SymbolFile/DWARF/UniqueDWARFASTType.cpp b/lldb/source/Plugins/SymbolFile/DWARF/UniqueDWARFASTType.cpp index 77fa92d2574..8273d975e57 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/UniqueDWARFASTType.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/UniqueDWARFASTType.cpp @@ -27,8 +27,8 @@ bool UniqueDWARFASTTypeList::Find(const DWARFDIE &die, udt.m_byte_size == byte_size) { // Make sure the file and line match if (udt.m_declaration == decl) { - // The type has the same name, and was defined on the same - // file and line. Now verify all of the parent DIEs match. + // The type has the same name, and was defined on the same file and + // line. Now verify all of the parent DIEs match. DWARFDIE parent_arg_die = die.GetParent(); DWARFDIE parent_pos_die = udt.m_die.GetParent(); bool match = true; diff --git a/lldb/source/Plugins/SymbolFile/PDB/PDBASTParser.cpp b/lldb/source/Plugins/SymbolFile/PDB/PDBASTParser.cpp index e9d10d0934f..e00cc5b7197 100644 --- a/lldb/source/Plugins/SymbolFile/PDB/PDBASTParser.cpp +++ b/lldb/source/Plugins/SymbolFile/PDB/PDBASTParser.cpp @@ -137,8 +137,8 @@ GetBuiltinTypeForPDBEncodingAndBitSize(ClangASTContext &clang_ast, // represented by the one generated for `double`. break; } - // If there is no match on PDB_BuiltinType, fall back to default search - // by encoding and width only + // If there is no match on PDB_BuiltinType, fall back to default search by + // encoding and width only return clang_ast.GetBuiltinTypeForEncodingAndBitSize(encoding, width); } @@ -208,9 +208,9 @@ PDBASTParser::~PDBASTParser() {} lldb::TypeSP PDBASTParser::CreateLLDBTypeFromPDBType(const PDBSymbol &type) { // PDB doesn't maintain enough information to robustly rebuild the entire - // tree, and this is most problematic when it comes to figure out the - // right DeclContext to put a type in. So for now, everything goes in - // the translation unit decl as a fully qualified type. + // tree, and this is most problematic when it comes to figure out the right + // DeclContext to put a type in. So for now, everything goes in the + // translation unit decl as a fully qualified type. clang::DeclContext *tu_decl_ctx = m_ast.GetTranslationUnitDecl(); Declaration decl; diff --git a/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp b/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp index b1dd67c2c3f..409ba0570a4 100644 --- a/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp +++ b/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp @@ -182,13 +182,13 @@ uint32_t SymbolFilePDB::GetNumCompileUnits() { return 0; // The linker could link *.dll (compiland language = LINK), or import - // *.dll. For example, a compiland with name `Import:KERNEL32.dll` - // could be found as a child of the global scope (PDB executable). - // Usually, such compilands contain `thunk` symbols in which we are not - // interested for now. However we still count them in the compiland list. - // If we perform any compiland related activity, like finding symbols - // through llvm::pdb::IPDBSession methods, such compilands will all be - // searched automatically no matter whether we include them or not. + // *.dll. For example, a compiland with name `Import:KERNEL32.dll` could be + // found as a child of the global scope (PDB executable). Usually, such + // compilands contain `thunk` symbols in which we are not interested for + // now. However we still count them in the compiland list. If we perform + // any compiland related activity, like finding symbols through + // llvm::pdb::IPDBSession methods, such compilands will all be searched + // automatically no matter whether we include them or not. m_cached_compile_unit_count = compilands->getChildCount(); // The linker can inject an additional "dummy" compilation unit into the @@ -470,8 +470,8 @@ size_t SymbolFilePDB::ParseTypes(const lldb_private::SymbolContext &sc) { ParseTypesByTagFn(*compiland); // Also parse global types particularly coming from this compiland. - // Unfortunately, PDB has no compiland information for each global type. - // We have to parse them all. But ensure we only do this once. + // Unfortunately, PDB has no compiland information for each global type. We + // have to parse them all. But ensure we only do this once. static bool parse_all_global_types = false; if (!parse_all_global_types) { ParseTypesByTagFn(*m_global_scope_up); @@ -622,10 +622,10 @@ uint32_t SymbolFilePDB::ResolveSymbolContext( // For each one, either find its previously parsed data or parse it afresh // and add it to the symbol context list. while (auto compiland = compilands->getNext()) { - // If we're not checking inlines, then don't add line information for this - // file unless the FileSpec matches. - // For inline functions, we don't have to match the FileSpec since they - // could be defined in headers other than file specified in FileSpec. + // If we're not checking inlines, then don't add line information for + // this file unless the FileSpec matches. For inline functions, we don't + // have to match the FileSpec since they could be defined in headers + // other than file specified in FileSpec. if (!check_inlines) { std::string source_file = compiland->getSourceFileFullPath(); if (source_file.empty()) @@ -651,7 +651,8 @@ uint32_t SymbolFilePDB::ResolveSymbolContext( if ((resolve_scope & eSymbolContextLineEntry) && !has_line_table) { // The query asks for line entries, but we can't get them for the - // compile unit. This is not normal for `line` = 0. So just assert it. + // compile unit. This is not normal for `line` = 0. So just assert + // it. assert(line && "Couldn't get all line entries!\n"); // Current compiland does not have the requested line. Search next. @@ -669,8 +670,8 @@ uint32_t SymbolFilePDB::ResolveSymbolContext( // Skip the terminal line entry. --num_line_entries; - // If `line `!= 0, see if we can resolve function for each line - // entry in the line table. + // If `line `!= 0, see if we can resolve function for each line entry + // in the line table. for (uint32_t line_idx = 0; line && line_idx < num_line_entries; ++line_idx) { if (!line_table->GetLineEntryAtIndex(line_idx, sc.line_entry)) @@ -779,10 +780,10 @@ void SymbolFilePDB::CacheFunctionNames() { ConstString cstr_name(name); - // To search a method name, like NS::Class:MemberFunc, LLDB searches its - // base name, i.e. MemberFunc by default. Since PDBSymbolFunc does not - // have inforamtion of this, we extract base names and cache them by our - // own effort. + // To search a method name, like NS::Class:MemberFunc, LLDB searches + // its base name, i.e. MemberFunc by default. Since PDBSymbolFunc does + // not have inforamtion of this, we extract base names and cache them + // by our own effort. llvm::StringRef basename; CPlusPlusLanguage::MethodName cpp_method(cstr_name); if (cpp_method.IsValid()) { @@ -1040,8 +1041,8 @@ void SymbolFilePDB::FindTypesByName(const std::string &name, case PDB_SymType::Typedef: break; default: - // We're looking only for types that have names. Skip symbols, as well as - // unnamed types such as arrays, pointers, etc. + // We're looking only for types that have names. Skip symbols, as well + // as unnamed types such as arrays, pointers, etc. continue; } @@ -1228,8 +1229,8 @@ bool SymbolFilePDB::ParseCompileUnitLineTable( // LineEntry needs the *index* of the file into the list of support files // returned by ParseCompileUnitSupportFiles. But the underlying SDK gives us - // a globally unique idenfitifier in the namespace of the PDB. So, we have to - // do a mapping so that we can hand out indices. + // a globally unique idenfitifier in the namespace of the PDB. So, we have + // to do a mapping so that we can hand out indices. llvm::DenseMap<uint32_t, uint32_t> index_map; BuildSupportFileIdToSupportFileIndexMap(*compiland_up, index_map); auto line_table = llvm::make_unique<LineTable>(sc.comp_unit); @@ -1240,8 +1241,8 @@ bool SymbolFilePDB::ParseCompileUnitLineTable( if (!files) return false; - // For each source and header file, create a LineSequence for contributions to - // the compiland from that file, and add the sequence. + // For each source and header file, create a LineSequence for contributions + // to the compiland from that file, and add the sequence. while (auto file = files->getNext()) { std::unique_ptr<LineSequence> sequence( line_table->CreateLineSequenceContainer()); @@ -1265,8 +1266,8 @@ bool SymbolFilePDB::ParseCompileUnitLineTable( uint32_t col = line->getColumnNumber(); uint32_t source_idx = index_map[source_id]; - // There was a gap between the current entry and the previous entry if the - // addresses don't perfectly line up. + // There was a gap between the current entry and the previous entry if + // the addresses don't perfectly line up. bool is_gap = (i > 0) && (prev_addr + prev_length < addr); // Before inserting the current entry, insert a terminal entry at the end @@ -1325,8 +1326,8 @@ bool SymbolFilePDB::ParseCompileUnitLineTable( void SymbolFilePDB::BuildSupportFileIdToSupportFileIndexMap( const PDBSymbolCompiland &compiland, llvm::DenseMap<uint32_t, uint32_t> &index_map) const { - // This is a hack, but we need to convert the source id into an index into the - // support files array. We don't want to do path comparisons to avoid + // This is a hack, but we need to convert the source id into an index into + // the support files array. We don't want to do path comparisons to avoid // basename / full path issues that may or may not even be a problem, so we // use the globally unique source file identifiers. Ideally we could use the // global identifiers everywhere, but LineEntry currently assumes indices. @@ -1400,12 +1401,12 @@ SymbolFilePDB::GetMangledForPDBFunc(const llvm::pdb::PDBSymbolFunc &pdb_func) { // For MSVC, format of C funciton's decorated name depends on calling // conventon. Unfortunately none of the format is recognized by current // LLDB. For example, `_purecall` is a __cdecl C function. From PDB, - // `__purecall` is retrieved as both its decorated and - // undecorated name (using PDBSymbolFunc::getUndecoratedName method). - // However `__purecall` string is not treated as mangled in LLDB - // (neither `?` nor `_Z` prefix). Mangled::GetDemangledName method - // will fail internally and caches an empty string as its undecorated - // name. So we will face a contradition here for the same symbol: + // `__purecall` is retrieved as both its decorated and undecorated name + // (using PDBSymbolFunc::getUndecoratedName method). However `__purecall` + // string is not treated as mangled in LLDB (neither `?` nor `_Z` prefix). + // Mangled::GetDemangledName method will fail internally and caches an + // empty string as its undecorated name. So we will face a contradition + // here for the same symbol: // non-empty undecorated name from PDB // empty undecorated name from LLDB if (!func_undecorated_name.empty() && @@ -1413,8 +1414,8 @@ SymbolFilePDB::GetMangledForPDBFunc(const llvm::pdb::PDBSymbolFunc &pdb_func) { mangled.SetDemangledName(ConstString(func_undecorated_name)); // LLDB uses several flags to control how a C++ decorated name is - // undecorated for MSVC. See `safeUndecorateName` in Class Mangled. - // So the yielded name could be different from what we retrieve from + // undecorated for MSVC. See `safeUndecorateName` in Class Mangled. So the + // yielded name could be different from what we retrieve from // PDB source unless we also apply same flags in getting undecorated // name through PDBSymbolFunc::getUndecoratedNameEx method. if (!func_undecorated_name.empty() && diff --git a/lldb/source/Plugins/SymbolFile/Symtab/SymbolFileSymtab.cpp b/lldb/source/Plugins/SymbolFile/Symtab/SymbolFileSymtab.cpp index dbc1b9ee547..64e2daf60ee 100644 --- a/lldb/source/Plugins/SymbolFile/Symtab/SymbolFileSymtab.cpp +++ b/lldb/source/Plugins/SymbolFile/Symtab/SymbolFileSymtab.cpp @@ -63,9 +63,9 @@ uint32_t SymbolFileSymtab::CalculateAbilities() { const Symtab *symtab = m_obj_file->GetSymtab(); if (symtab) { //---------------------------------------------------------------------- - // The snippet of code below will get the indexes the module symbol - // table entries that are code, data, or function related (debug info), - // sort them by value (address) and dump the sorted symbols. + // The snippet of code below will get the indexes the module symbol table + // entries that are code, data, or function related (debug info), sort + // them by value (address) and dump the sorted symbols. //---------------------------------------------------------------------- if (symtab->AppendSymbolIndexesWithType(eSymbolTypeSourceFile, m_source_indexes)) { @@ -105,24 +105,21 @@ uint32_t SymbolFileSymtab::CalculateAbilities() { } uint32_t SymbolFileSymtab::GetNumCompileUnits() { - // If we don't have any source file symbols we will just have one compile unit - // for - // the entire object file + // If we don't have any source file symbols we will just have one compile + // unit for the entire object file if (m_source_indexes.empty()) return 0; // If we have any source file symbols we will logically organize the object - // symbols - // using these. + // symbols using these. return m_source_indexes.size(); } CompUnitSP SymbolFileSymtab::ParseCompileUnitAtIndex(uint32_t idx) { CompUnitSP cu_sp; - // If we don't have any source file symbols we will just have one compile unit - // for - // the entire object file + // If we don't have any source file symbols we will just have one compile + // unit for the entire object file if (idx < m_source_indexes.size()) { const Symbol *cu_symbol = m_obj_file->GetSymtab()->SymbolAtIndex(m_source_indexes[idx]); @@ -152,13 +149,12 @@ size_t SymbolFileSymtab::ParseCompileUnitFunctions(const SymbolContext &sc) { // // const uint32_t prefix_len = strlen(prefix); - // If we don't have any source file symbols we will just have one compile unit - // for - // the entire object file + // If we don't have any source file symbols we will just have one compile + // unit for the entire object file if (m_source_indexes.empty()) { - // The only time we will have a user ID of zero is when we don't have - // and source file symbols and we declare one compile unit for the - // entire object file + // The only time we will have a user ID of zero is when we don't have and + // source file symbols and we declare one compile unit for the entire + // object file if (!m_func_indexes.empty()) { } diff --git a/lldb/source/Plugins/SymbolVendor/ELF/SymbolVendorELF.cpp b/lldb/source/Plugins/SymbolVendor/ELF/SymbolVendorELF.cpp index d2fadd833bb..d2451096687 100644 --- a/lldb/source/Plugins/SymbolVendor/ELF/SymbolVendorELF.cpp +++ b/lldb/source/Plugins/SymbolVendor/ELF/SymbolVendorELF.cpp @@ -57,9 +57,9 @@ const char *SymbolVendorELF::GetPluginDescriptionStatic() { //---------------------------------------------------------------------- // CreateInstance // -// Platforms can register a callback to use when creating symbol -// vendors to allow for complex debug information file setups, and to -// also allow for finding separate debug information files. +// Platforms can register a callback to use when creating symbol vendors to +// allow for complex debug information file setups, and to also allow for +// finding separate debug information files. //---------------------------------------------------------------------- SymbolVendor * SymbolVendorELF::CreateInstance(const lldb::ModuleSP &module_sp, @@ -112,11 +112,9 @@ SymbolVendorELF::CreateInstance(const lldb::ModuleSP &module_sp, module_sp, &dsym_fspec, 0, dsym_fspec.GetByteSize(), dsym_file_data_sp, dsym_file_data_offset); if (dsym_objfile_sp) { - // This objfile is for debugging purposes. Sadly, ObjectFileELF won't be - // able - // to figure this out consistently as the symbol file may not have - // stripped the - // code sections, etc. + // This objfile is for debugging purposes. Sadly, ObjectFileELF won't + // be able to figure this out consistently as the symbol file may not + // have stripped the code sections, etc. dsym_objfile_sp->SetType(ObjectFile::eTypeDebugInfo); SymbolVendorELF *symbol_vendor = new SymbolVendorELF(module_sp); diff --git a/lldb/source/Plugins/SymbolVendor/MacOSX/SymbolVendorMacOSX.cpp b/lldb/source/Plugins/SymbolVendor/MacOSX/SymbolVendorMacOSX.cpp index 22a9195f8b4..ec8516b39f6 100644 --- a/lldb/source/Plugins/SymbolVendor/MacOSX/SymbolVendorMacOSX.cpp +++ b/lldb/source/Plugins/SymbolVendor/MacOSX/SymbolVendorMacOSX.cpp @@ -94,9 +94,9 @@ const char *SymbolVendorMacOSX::GetPluginDescriptionStatic() { //---------------------------------------------------------------------- // CreateInstance // -// Platforms can register a callback to use when creating symbol -// vendors to allow for complex debug information file setups, and to -// also allow for finding separate debug information files. +// Platforms can register a callback to use when creating symbol vendors to +// allow for complex debug information file setups, and to also allow for +// finding separate debug information files. //---------------------------------------------------------------------- SymbolVendor * SymbolVendorMacOSX::CreateInstance(const lldb::ModuleSP &module_sp, @@ -130,14 +130,14 @@ SymbolVendorMacOSX::CreateInstance(const lldb::ModuleSP &module_sp, "SymbolVendorMacOSX::CreateInstance (module = %s) locate dSYM", module_sp->GetFileSpec().GetPath().c_str()); - // First check to see if the module has a symbol file in mind already. - // If it does, then we MUST use that. + // First check to see if the module has a symbol file in mind already. If + // it does, then we MUST use that. FileSpec dsym_fspec(module_sp->GetSymbolFileFileSpec()); ObjectFileSP dsym_objfile_sp; if (!dsym_fspec) { - // No symbol file was specified in the module, lets try and find - // one ourselves. + // No symbol file was specified in the module, lets try and find one + // ourselves. FileSpec file_spec = obj_file->GetFileSpec(); if (!file_spec) file_spec = module_sp->GetFileSpec(); @@ -180,8 +180,7 @@ SymbolVendorMacOSX::CreateInstance(const lldb::ModuleSP &module_sp, std::string DBGSourcePath; // DBGSourcePathRemapping is a dictionary in the plist - // with - // keys which are DBGBuildSourcePath file paths and + // with keys which are DBGBuildSourcePath file paths and // values which are DBGSourcePath file paths StructuredData::ObjectSP plist_sp = @@ -194,16 +193,15 @@ SymbolVendorMacOSX::CreateInstance(const lldb::ModuleSP &module_sp, ->GetAsDictionary()) { // In an early version of DBGSourcePathRemapping, the - // DBGSourcePath - // values were incorrect. If we have a newer style - // DBGSourcePathRemapping, there will be a DBGVersion - // key in the plist with version 2 or higher. + // DBGSourcePath values were incorrect. If we have a + // newer style DBGSourcePathRemapping, there will be a + // DBGVersion key in the plist with version 2 or + // higher. // // If this is an old style DBGSourcePathRemapping, - // ignore the - // value half of the key-value remappings and use reuse - // the original - // gloal DBGSourcePath string. + // ignore the value half of the key-value remappings + // and use reuse the original gloal DBGSourcePath + // string. bool new_style_source_remapping_dictionary = false; bool do_truncate_remapping_names = false; std::string original_DBGSourcePath_value = @@ -253,10 +251,12 @@ SymbolVendorMacOSX::CreateInstance(const lldb::ModuleSP &module_sp, } module_sp->GetSourceMappingList().Append( key, ConstString(DBGSourcePath), true); - // With version 2 of DBGSourcePathRemapping, we can chop off the - // last two filename parts from the source remapping and get a - // more general source remapping that still works. Add this as - // another option in addition to the full source path remap. + // With version 2 of DBGSourcePathRemapping, we + // can chop off the last two filename parts + // from the source remapping and get a more + // general source remapping that still works. + // Add this as another option in addition to + // the full source path remap. if (do_truncate_remapping_names) { FileSpec build_path(key.AsCString(), false); FileSpec source_path(DBGSourcePath.c_str(), false); @@ -303,9 +303,9 @@ SymbolVendorMacOSX::CreateInstance(const lldb::ModuleSP &module_sp, } } - // Just create our symbol vendor using the current objfile as this is either - // an executable with no dSYM (that we could locate), an executable with - // a dSYM that has a UUID that doesn't match. + // Just create our symbol vendor using the current objfile as this is + // either an executable with no dSYM (that we could locate), an executable + // with a dSYM that has a UUID that doesn't match. symbol_vendor->AddSymbolFileRepresentation(obj_file->shared_from_this()); } return symbol_vendor; diff --git a/lldb/source/Plugins/SystemRuntime/MacOSX/AppleGetItemInfoHandler.cpp b/lldb/source/Plugins/SystemRuntime/MacOSX/AppleGetItemInfoHandler.cpp index 3f0c7db676f..007a59378fc 100644 --- a/lldb/source/Plugins/SystemRuntime/MacOSX/AppleGetItemInfoHandler.cpp +++ b/lldb/source/Plugins/SystemRuntime/MacOSX/AppleGetItemInfoHandler.cpp @@ -119,20 +119,18 @@ void AppleGetItemInfoHandler::Detach() { } // Compile our __lldb_backtrace_recording_get_item_info() function (from the -// source above in g_get_item_info_function_code) if we don't find that function -// in the inferior -// already with USE_BUILTIN_FUNCTION defined. (e.g. this would be the case for -// testing.) +// source above in g_get_item_info_function_code) if we don't find that +// function in the inferior already with USE_BUILTIN_FUNCTION defined. (e.g. +// this would be the case for testing.) // -// Insert the __lldb_backtrace_recording_get_item_info into the inferior process -// if needed. +// Insert the __lldb_backtrace_recording_get_item_info into the inferior +// process if needed. // // Write the get_item_info_arglist into the inferior's memory space to prepare // for the call. // // Returns the address of the arguments written down in the inferior process, -// which can be used to -// make the function call. +// which can be used to make the function call. lldb::addr_t AppleGetItemInfoHandler::SetupGetItemInfoFunction( Thread &thread, ValueList &get_item_info_arglist) { @@ -146,7 +144,8 @@ lldb::addr_t AppleGetItemInfoHandler::SetupGetItemInfoFunction( { std::lock_guard<std::mutex> guard(m_get_item_info_function_mutex); - // First stage is to make the UtilityFunction to hold our injected function: + // First stage is to make the UtilityFunction to hold our injected + // function: if (!m_get_item_info_impl_code.get()) { if (g_get_item_info_function_code != NULL) { @@ -209,10 +208,9 @@ lldb::addr_t AppleGetItemInfoHandler::SetupGetItemInfoFunction( diagnostics.Clear(); // Now write down the argument values for this particular call. This looks - // like it might be a race condition - // if other threads were calling into here, but actually it isn't because we - // allocate a new args structure for - // this call by passing args_addr = LLDB_INVALID_ADDRESS... + // like it might be a race condition if other threads were calling into here, + // but actually it isn't because we allocate a new args structure for this + // call by passing args_addr = LLDB_INVALID_ADDRESS... if (!get_item_info_caller->WriteFunctionArguments( exe_ctx, args_addr, get_item_info_arglist, diagnostics)) { @@ -272,8 +270,7 @@ AppleGetItemInfoHandler::GetItemInfo(Thread &thread, uint64_t item, // uint64_t page_to_free_size) // Where the return_buffer argument points to a 24 byte region of memory - // already allocated by lldb in - // the inferior process. + // already allocated by lldb in the inferior process. CompilerType clang_void_ptr_type = clang_ast_context->GetBasicType(eBasicTypeVoid).GetPointerType(); diff --git a/lldb/source/Plugins/SystemRuntime/MacOSX/AppleGetPendingItemsHandler.cpp b/lldb/source/Plugins/SystemRuntime/MacOSX/AppleGetPendingItemsHandler.cpp index e3d03a6f948..0de32bf1141 100644 --- a/lldb/source/Plugins/SystemRuntime/MacOSX/AppleGetPendingItemsHandler.cpp +++ b/lldb/source/Plugins/SystemRuntime/MacOSX/AppleGetPendingItemsHandler.cpp @@ -121,11 +121,10 @@ void AppleGetPendingItemsHandler::Detach() { } } -// Compile our __lldb_backtrace_recording_get_pending_items() function (from the -// source above in g_get_pending_items_function_code) if we don't find that -// function in the inferior -// already with USE_BUILTIN_FUNCTION defined. (e.g. this would be the case for -// testing.) +// Compile our __lldb_backtrace_recording_get_pending_items() function (from +// the source above in g_get_pending_items_function_code) if we don't find that +// function in the inferior already with USE_BUILTIN_FUNCTION defined. (e.g. +// this would be the case for testing.) // // Insert the __lldb_backtrace_recording_get_pending_items into the inferior // process if needed. @@ -134,8 +133,7 @@ void AppleGetPendingItemsHandler::Detach() { // prepare for the call. // // Returns the address of the arguments written down in the inferior process, -// which can be used to -// make the function call. +// which can be used to make the function call. lldb::addr_t AppleGetPendingItemsHandler::SetupGetPendingItemsFunction( Thread &thread, ValueList &get_pending_items_arglist) { @@ -212,10 +210,9 @@ lldb::addr_t AppleGetPendingItemsHandler::SetupGetPendingItemsFunction( } // Now write down the argument values for this particular call. This looks - // like it might be a race condition - // if other threads were calling into here, but actually it isn't because we - // allocate a new args structure for - // this call by passing args_addr = LLDB_INVALID_ADDRESS... + // like it might be a race condition if other threads were calling into here, + // but actually it isn't because we allocate a new args structure for this + // call by passing args_addr = LLDB_INVALID_ADDRESS... if (!get_pending_items_caller->WriteFunctionArguments( exe_ctx, args_addr, get_pending_items_arglist, diagnostics)) { @@ -279,8 +276,7 @@ AppleGetPendingItemsHandler::GetPendingItems(Thread &thread, addr_t queue, // uint64_t page_to_free_size) // Where the return_buffer argument points to a 24 byte region of memory - // already allocated by lldb in - // the inferior process. + // already allocated by lldb in the inferior process. CompilerType clang_void_ptr_type = clang_ast_context->GetBasicType(eBasicTypeVoid).GetPointerType(); diff --git a/lldb/source/Plugins/SystemRuntime/MacOSX/AppleGetQueuesHandler.cpp b/lldb/source/Plugins/SystemRuntime/MacOSX/AppleGetQueuesHandler.cpp index c1654eb62cc..7855b3603a3 100644 --- a/lldb/source/Plugins/SystemRuntime/MacOSX/AppleGetQueuesHandler.cpp +++ b/lldb/source/Plugins/SystemRuntime/MacOSX/AppleGetQueuesHandler.cpp @@ -118,9 +118,9 @@ void AppleGetQueuesHandler::Detach() { } // Construct a CompilerType for the structure that -// g_get_current_queues_function_code will return by value -// so we can extract the fields after performing the function call. -// i.e. we are getting this struct returned to us: +// g_get_current_queues_function_code will return by value so we can extract +// the fields after performing the function call. i.e. we are getting this +// struct returned to us: // // struct get_current_queues_return_values // { @@ -130,11 +130,9 @@ void AppleGetQueuesHandler::Detach() { // }; // Compile our __lldb_backtrace_recording_get_current_queues() function (from -// the -// source above in g_get_current_queues_function_code) if we don't find that -// function in the inferior -// already with USE_BUILTIN_FUNCTION defined. (e.g. this would be the case for -// testing.) +// the source above in g_get_current_queues_function_code) if we don't find +// that function in the inferior already with USE_BUILTIN_FUNCTION defined. +// (e.g. this would be the case for testing.) // // Insert the __lldb_backtrace_recording_get_current_queues into the inferior // process if needed. @@ -143,8 +141,7 @@ void AppleGetQueuesHandler::Detach() { // the call. // // Returns the address of the arguments written down in the inferior process, -// which can be used to -// make the function call. +// which can be used to make the function call. lldb::addr_t AppleGetQueuesHandler::SetupGetQueuesFunction(Thread &thread, @@ -217,10 +214,9 @@ AppleGetQueuesHandler::SetupGetQueuesFunction(Thread &thread, diagnostics.Clear(); // Now write down the argument values for this particular call. This looks - // like it might be a race condition - // if other threads were calling into here, but actually it isn't because we - // allocate a new args structure for - // this call by passing args_addr = LLDB_INVALID_ADDRESS... + // like it might be a race condition if other threads were calling into here, + // but actually it isn't because we allocate a new args structure for this + // call by passing args_addr = LLDB_INVALID_ADDRESS... if (!get_queues_caller->WriteFunctionArguments( exe_ctx, args_addr, get_queues_arglist, diagnostics)) { @@ -280,8 +276,7 @@ AppleGetQueuesHandler::GetCurrentQueues(Thread &thread, addr_t page_to_free, // uint64_t page_to_free_size); // Where the return_buffer argument points to a 24 byte region of memory - // already allocated by lldb in - // the inferior process. + // already allocated by lldb in the inferior process. CompilerType clang_void_ptr_type = clang_ast_context->GetBasicType(eBasicTypeVoid).GetPointerType(); diff --git a/lldb/source/Plugins/SystemRuntime/MacOSX/AppleGetThreadItemInfoHandler.cpp b/lldb/source/Plugins/SystemRuntime/MacOSX/AppleGetThreadItemInfoHandler.cpp index 8d83922af1e..09ab6600a9f 100644 --- a/lldb/source/Plugins/SystemRuntime/MacOSX/AppleGetThreadItemInfoHandler.cpp +++ b/lldb/source/Plugins/SystemRuntime/MacOSX/AppleGetThreadItemInfoHandler.cpp @@ -128,11 +128,9 @@ void AppleGetThreadItemInfoHandler::Detach() { } // Compile our __lldb_backtrace_recording_get_thread_item_info() function (from -// the -// source above in g_get_thread_item_info_function_code) if we don't find that -// function in the inferior -// already with USE_BUILTIN_FUNCTION defined. (e.g. this would be the case for -// testing.) +// the source above in g_get_thread_item_info_function_code) if we don't find +// that function in the inferior already with USE_BUILTIN_FUNCTION defined. +// (e.g. this would be the case for testing.) // // Insert the __lldb_backtrace_recording_get_thread_item_info into the inferior // process if needed. @@ -141,8 +139,7 @@ void AppleGetThreadItemInfoHandler::Detach() { // prepare for the call. // // Returns the address of the arguments written down in the inferior process, -// which can be used to -// make the function call. +// which can be used to make the function call. lldb::addr_t AppleGetThreadItemInfoHandler::SetupGetThreadItemInfoFunction( Thread &thread, ValueList &get_thread_item_info_arglist) { @@ -221,10 +218,9 @@ lldb::addr_t AppleGetThreadItemInfoHandler::SetupGetThreadItemInfoFunction( diagnostics.Clear(); // Now write down the argument values for this particular call. This looks - // like it might be a race condition - // if other threads were calling into here, but actually it isn't because we - // allocate a new args structure for - // this call by passing args_addr = LLDB_INVALID_ADDRESS... + // like it might be a race condition if other threads were calling into here, + // but actually it isn't because we allocate a new args structure for this + // call by passing args_addr = LLDB_INVALID_ADDRESS... if (!get_thread_item_info_caller->WriteFunctionArguments( exe_ctx, args_addr, get_thread_item_info_arglist, diagnostics)) { @@ -266,8 +262,7 @@ AppleGetThreadItemInfoHandler::GetThreadItemInfo(Thread &thread, // Set up the arguments for a call to - // struct get_thread_item_info_return_values - // { + // struct get_thread_item_info_return_values { // uint64_t item_info_buffer_ptr; /* the address of the items buffer // from libBacktraceRecording */ // uint64_t item_info_buffer_size; /* the size of the items buffer from @@ -283,8 +278,7 @@ AppleGetThreadItemInfoHandler::GetThreadItemInfo(Thread &thread, // uint64_t page_to_free_size) // Where the return_buffer argument points to a 24 byte region of memory - // already allocated by lldb in - // the inferior process. + // already allocated by lldb in the inferior process. CompilerType clang_void_ptr_type = clang_ast_context->GetBasicType(eBasicTypeVoid).GetPointerType(); diff --git a/lldb/source/Plugins/SystemRuntime/MacOSX/SystemRuntimeMacOSX.cpp b/lldb/source/Plugins/SystemRuntime/MacOSX/SystemRuntimeMacOSX.cpp index 1a538b236c1..4748d5e8622 100644 --- a/lldb/source/Plugins/SystemRuntime/MacOSX/SystemRuntimeMacOSX.cpp +++ b/lldb/source/Plugins/SystemRuntime/MacOSX/SystemRuntimeMacOSX.cpp @@ -34,9 +34,9 @@ using namespace lldb; using namespace lldb_private; //---------------------------------------------------------------------- -// Create an instance of this class. This function is filled into -// the plugin info class that gets handed out by the plugin factory and -// allows the lldb to instantiate an instance of this class. +// Create an instance of this class. This function is filled into the plugin +// info class that gets handed out by the plugin factory and allows the lldb to +// instantiate an instance of this class. //---------------------------------------------------------------------- SystemRuntime *SystemRuntimeMacOSX::CreateInstance(Process *process) { bool create = false; @@ -125,17 +125,15 @@ SystemRuntimeMacOSX::GetQueueNameFromThreadQAddress(addr_t dispatch_qaddr) { ReadLibdispatchOffsets(); if (m_libdispatch_offsets.IsValid()) { // dispatch_qaddr is from a thread_info(THREAD_IDENTIFIER_INFO) call for a - // thread - - // deref it to get the address of the dispatch_queue_t structure for this - // thread's - // queue. + // thread - deref it to get the address of the dispatch_queue_t structure + // for this thread's queue. Status error; addr_t dispatch_queue_addr = m_process->ReadPointerFromMemory(dispatch_qaddr, error); if (error.Success()) { if (m_libdispatch_offsets.dqo_version >= 4) { - // libdispatch versions 4+, pointer to dispatch name is in the - // queue structure. + // libdispatch versions 4+, pointer to dispatch name is in the queue + // structure. addr_t pointer_to_label_address = dispatch_queue_addr + m_libdispatch_offsets.dqo_label; addr_t label_addr = @@ -248,10 +246,8 @@ SystemRuntimeMacOSX::GetQueueIDFromThreadQAddress(lldb::addr_t dispatch_qaddr) { ReadLibdispatchOffsets(); if (m_libdispatch_offsets.IsValid()) { // dispatch_qaddr is from a thread_info(THREAD_IDENTIFIER_INFO) call for a - // thread - - // deref it to get the address of the dispatch_queue_t structure for this - // thread's - // queue. + // thread - deref it to get the address of the dispatch_queue_t structure + // for this thread's queue. Status error; uint64_t dispatch_queue_addr = m_process->ReadPointerFromMemory(dispatch_qaddr, error); @@ -287,8 +283,8 @@ void SystemRuntimeMacOSX::ReadLibdispatchOffsetsAddress() { dispatch_queue_offsets_symbol = module_sp->FindFirstSymbolWithNameAndType( g_dispatch_queue_offsets_symbol_name, eSymbolTypeData); - // libdispatch symbols are in their own dylib as of Mac OS X 10.7 ("Lion") and - // later + // libdispatch symbols are in their own dylib as of Mac OS X 10.7 ("Lion") + // and later if (dispatch_queue_offsets_symbol == NULL) { ModuleSpec libdispatch_module_spec(FileSpec("libdispatch.dylib", false)); module_sp = m_process->GetTarget().GetImages().FindFirstModule( @@ -320,8 +316,7 @@ void SystemRuntimeMacOSX::ReadLibdispatchOffsets() { lldb::offset_t data_offset = 0; // The struct LibdispatchOffsets is a series of uint16_t's - extract them - // all - // in one big go. + // all in one big go. data.GetU16(&data_offset, &m_libdispatch_offsets.dqo_version, sizeof(struct LibdispatchOffsets) / sizeof(uint16_t)); } @@ -368,8 +363,7 @@ void SystemRuntimeMacOSX::ReadLibpthreadOffsets() { lldb::offset_t data_offset = 0; // The struct LibpthreadOffsets is a series of uint16_t's - extract them - // all - // in one big go. + // all in one big go. data.GetU16(&data_offset, &m_libpthread_offsets.plo_version, sizeof(struct LibpthreadOffsets) / sizeof(uint16_t)); } @@ -407,10 +401,8 @@ void SystemRuntimeMacOSX::ReadLibdispatchTSDIndexes() { if (m_dispatch_tsd_indexes_addr != LLDB_INVALID_ADDRESS) { // We don't need to check the version number right now, it will be at least 2, -// but -// keep this code around to fetch just the version # for the future where we -// need -// to fetch alternate versions of the struct. +// but keep this code around to fetch just the version # for the future where +// we need to fetch alternate versions of the struct. #if 0 uint16_t dti_version = 2; Address dti_struct_addr; @@ -473,12 +465,9 @@ ThreadSP SystemRuntimeMacOSX::GetExtendedBacktraceThread(ThreadSP real_thread, Status error; // real_thread is either an actual, live thread (in which case we need to - // call into - // libBacktraceRecording to find its originator) or it is an extended - // backtrace itself, - // in which case we get the token from it and call into - // libBacktraceRecording to find - // the originator of that token. + // call into libBacktraceRecording to find its originator) or it is an + // extended backtrace itself, in which case we get the token from it and + // call into libBacktraceRecording to find the originator of that token. if (real_thread->GetExtendedBacktraceToken() != LLDB_INVALID_ADDRESS) { originating_thread_sp = GetExtendedBacktraceFromItemRef( @@ -735,13 +724,11 @@ void SystemRuntimeMacOSX::PopulateQueueList( } // We either didn't have libBacktraceRecording (and need to create the queues - // list based on threads) - // or we did get the queues list from libBacktraceRecording but some special - // queues may not be - // included in its information. This is needed because libBacktraceRecording - // will only list queues with pending or running items by default - but the - // magic com.apple.main-thread - // queue on thread 1 is always around. + // list based on threads) or we did get the queues list from + // libBacktraceRecording but some special queues may not be included in its + // information. This is needed because libBacktraceRecording will only list + // queues with pending or running items by default - but the magic com.apple + // .main-thread queue on thread 1 is always around. for (ThreadSP thread_sp : m_process->Threads()) { if (thread_sp->GetAssociatedWithLibdispatchQueue() != eLazyBoolNo) { @@ -769,12 +756,10 @@ void SystemRuntimeMacOSX::PopulateQueueList( } // Returns either an array of introspection_dispatch_item_info_ref's for the -// pending items on -// a queue or an array introspection_dispatch_item_info_ref's and code addresses -// for the -// pending items on a queue. The information about each of these pending items -// then needs to -// be fetched individually by passing the ref to libBacktraceRecording. +// pending items on a queue or an array introspection_dispatch_item_info_ref's +// and code addresses for the pending items on a queue. The information about +// each of these pending items then needs to be fetched individually by passing +// the ref to libBacktraceRecording. SystemRuntimeMacOSX::PendingItemsForQueue SystemRuntimeMacOSX::GetPendingItemRefsForQueue(lldb::addr_t queue) { @@ -927,8 +912,8 @@ void SystemRuntimeMacOSX::PopulateQueuesUsingLibBTR( offset_t offset = 0; uint64_t queues_read = 0; - // The information about the queues is stored in this format (v1): - // typedef struct introspection_dispatch_queue_info_s { + // The information about the queues is stored in this format (v1): typedef + // struct introspection_dispatch_queue_info_s { // uint32_t offset_to_next; // dispatch_queue_t queue; // uint64_t serialnum; // queue's serialnum in the process, as diff --git a/lldb/source/Plugins/UnwindAssembly/InstEmulation/UnwindAssemblyInstEmulation.cpp b/lldb/source/Plugins/UnwindAssembly/InstEmulation/UnwindAssemblyInstEmulation.cpp index f8aca4d1283..a8872533981 100644 --- a/lldb/source/Plugins/UnwindAssembly/InstEmulation/UnwindAssemblyInstEmulation.cpp +++ b/lldb/source/Plugins/UnwindAssembly/InstEmulation/UnwindAssemblyInstEmulation.cpp @@ -58,8 +58,8 @@ bool UnwindAssemblyInstEmulation::GetNonCallSiteUnwindPlanFromAssembly( if (range.GetByteSize() > 0 && range.GetBaseAddress().IsValid() && m_inst_emulator_ap.get()) { - // The instruction emulation subclass setup the unwind plan for the - // first instruction. + // The instruction emulation subclass setup the unwind plan for the first + // instruction. m_inst_emulator_ap->CreateFunctionEntryUnwind(unwind_plan); // CreateFunctionEntryUnwind should have created the first row. If it @@ -90,9 +90,9 @@ bool UnwindAssemblyInstEmulation::GetNonCallSiteUnwindPlanFromAssembly( m_register_values.clear(); m_pushed_regs.clear(); - // Initialize the CFA with a known value. In the 32 bit case - // it will be 0x80000000, and in the 64 bit case 0x8000000000000000. - // We use the address byte size to be safe for any future address sizes + // Initialize the CFA with a known value. In the 32 bit case it will be + // 0x80000000, and in the 64 bit case 0x8000000000000000. We use the + // address byte size to be safe for any future address sizes m_initial_sp = (1ull << ((addr_byte_size * 8) - 1)); RegisterValue cfa_reg_value; cfa_reg_value.SetUInt(m_initial_sp, m_cfa_reg_info.byte_size); @@ -105,14 +105,12 @@ bool UnwindAssemblyInstEmulation::GetNonCallSiteUnwindPlanFromAssembly( Instruction *inst = inst_list.GetInstructionAtIndex(0).get(); const lldb::addr_t base_addr = inst->GetAddress().GetFileAddress(); - // Map for storing the unwind plan row and the value of the registers at - // a given offset. - // When we see a forward branch we add a new entry to this map with the - // actual unwind plan - // row and register context for the target address of the branch as the - // current data have - // to be valid for the target address of the branch too if we are in the - // same function. + // Map for storing the unwind plan row and the value of the registers + // at a given offset. When we see a forward branch we add a new entry + // to this map with the actual unwind plan row and register context for + // the target address of the branch as the current data have to be + // valid for the target address of the branch too if we are in the same + // function. std::map<lldb::addr_t, std::pair<UnwindPlan::RowSP, RegisterValueMap>> saved_unwind_states; @@ -128,15 +126,14 @@ bool UnwindAssemblyInstEmulation::GetNonCallSiteUnwindPlanFromAssembly( saved_unwind_states.insert({0, {last_row, m_register_values}}); // cache the pc register number (in whatever register numbering this - // UnwindPlan uses) for - // quick reference during instruction parsing. + // UnwindPlan uses) for quick reference during instruction parsing. RegisterInfo pc_reg_info; m_inst_emulator_ap->GetRegisterInfo( eRegisterKindGeneric, LLDB_REGNUM_GENERIC_PC, pc_reg_info); // cache the return address register number (in whatever register - // numbering this UnwindPlan uses) for - // quick reference during instruction parsing. + // numbering this UnwindPlan uses) for quick reference during + // instruction parsing. RegisterInfo ra_reg_info; m_inst_emulator_ap->GetRegisterInfo( eRegisterKindGeneric, LLDB_REGNUM_GENERIC_RA, ra_reg_info); @@ -160,12 +157,11 @@ bool UnwindAssemblyInstEmulation::GetNonCallSiteUnwindPlanFromAssembly( "Unwind row for the function entry missing"); --it; // Move it to the row corresponding to the current offset - // If the offset of m_curr_row don't match with the offset we see in - // saved_unwind_states - // then we have to update m_curr_row and m_register_values based on - // the saved values. It - // is happenning after we processed an epilogue and a return to - // caller instruction. + // If the offset of m_curr_row don't match with the offset we see + // in saved_unwind_states then we have to update m_curr_row and + // m_register_values based on the saved values. It is happenning + // after we processed an epilogue and a return to caller + // instruction. if (it->second.first->GetOffset() != m_curr_row->GetOffset()) { UnwindPlan::Row *newrow = new UnwindPlan::Row; *newrow = *it->second.first; @@ -181,10 +177,9 @@ bool UnwindAssemblyInstEmulation::GetNonCallSiteUnwindPlanFromAssembly( if (m_inst_emulator_ap->GetInstructionCondition() != EmulateInstruction::UnconditionalCondition && saved_unwind_states.count(current_offset) == 0) { - // If we don't have a saved row for the current offset then save - // our - // current state because we will have to restore it after the - // conditional block. + // If we don't have a saved row for the current offset then + // save our current state because we will have to restore it + // after the conditional block. auto new_row = std::make_shared<UnwindPlan::Row>(*m_curr_row.get()); saved_unwind_states.insert( @@ -192,8 +187,8 @@ bool UnwindAssemblyInstEmulation::GetNonCallSiteUnwindPlanFromAssembly( } // If the last instruction was conditional with a different - // condition - // then the then current condition then restore the condition. + // condition then the then current condition then restore the + // condition. if (last_condition != EmulateInstruction::UnconditionalCondition) { const auto &saved_state = @@ -230,8 +225,7 @@ bool UnwindAssemblyInstEmulation::GetNonCallSiteUnwindPlanFromAssembly( eEmulateInstructionOptionIgnoreConditions); // If the current instruction is a branch forward then save the - // current CFI information - // for the offset where we are branching. + // current CFI information for the offset where we are branching. if (m_forward_branch_offset != 0 && range.ContainsFileAddress(inst->GetAddress().GetFileAddress() + m_forward_branch_offset)) { @@ -247,8 +241,8 @@ bool UnwindAssemblyInstEmulation::GetNonCallSiteUnwindPlanFromAssembly( // Were there any changes to the CFI while evaluating this // instruction? if (m_curr_row_modified) { - // Save the modified row if we don't already have a CFI row in the - // currennt address + // Save the modified row if we don't already have a CFI row in + // the currennt address if (saved_unwind_states.count( current_offset + inst->GetOpcode().GetByteSize()) == 0) { m_curr_row->SetOffset(current_offset + diff --git a/lldb/source/Plugins/UnwindAssembly/x86/UnwindAssembly-x86.cpp b/lldb/source/Plugins/UnwindAssembly/x86/UnwindAssembly-x86.cpp index b8dcd99a53e..327d0b0e4f7 100644 --- a/lldb/source/Plugins/UnwindAssembly/x86/UnwindAssembly-x86.cpp +++ b/lldb/source/Plugins/UnwindAssembly/x86/UnwindAssembly-x86.cpp @@ -86,12 +86,10 @@ bool UnwindAssembly_x86::AugmentUnwindPlanFromCallSite( LLDB_REGNUM_GENERIC_PC); // Does this UnwindPlan describe the prologue? I want to see that the CFA is - // set - // in terms of the stack pointer plus an offset, and I want to see that rip is - // retrieved at the CFA-wordsize. - // If there is no description of the prologue, don't try to augment this - // eh_frame - // unwinder code, fall back to assembly parsing instead. + // set in terms of the stack pointer plus an offset, and I want to see that + // rip is retrieved at the CFA-wordsize. If there is no description of the + // prologue, don't try to augment this eh_frame unwinder code, fall back to + // assembly parsing instead. if (first_row->GetCFAValue().GetValueType() != UnwindPlan::Row::CFAValue::isRegisterPlusOffset || @@ -110,14 +108,13 @@ bool UnwindAssembly_x86::AugmentUnwindPlanFromCallSite( return false; } - // It looks like the prologue is described. - // Is the epilogue described? If it is, no need to do any augmentation. + // It looks like the prologue is described. Is the epilogue described? If it + // is, no need to do any augmentation. if (first_row != last_row && first_row->GetOffset() != last_row->GetOffset()) { - // The first & last row have the same CFA register - // and the same CFA offset value - // and the CFA register is esp/rsp (the stack pointer). + // The first & last row have the same CFA register and the same CFA offset + // value and the CFA register is esp/rsp (the stack pointer). // We're checking that both of them have an unwind rule like "CFA=esp+4" or // CFA+rsp+8". @@ -128,8 +125,8 @@ bool UnwindAssembly_x86::AugmentUnwindPlanFromCallSite( last_row->GetCFAValue().GetRegisterNumber() && first_row->GetCFAValue().GetOffset() == last_row->GetCFAValue().GetOffset()) { - // Get the register locations for eip/rip from the first & last rows. - // Are they both CFA plus an offset? Is it the same offset? + // Get the register locations for eip/rip from the first & last rows. Are + // they both CFA plus an offset? Is it the same offset? UnwindPlan::Row::RegisterLocation last_row_pc_loc; if (last_row->GetRegisterInfo( @@ -139,12 +136,10 @@ bool UnwindAssembly_x86::AugmentUnwindPlanFromCallSite( first_row_pc_loc.GetOffset() == last_row_pc_loc.GetOffset()) { // One last sanity check: Is the unwind rule for getting the caller - // pc value - // "deref the CFA-4" or "deref the CFA-8"? + // pc value "deref the CFA-4" or "deref the CFA-8"? // If so, we have an UnwindPlan that already describes the epilogue - // and we don't need - // to modify it at all. + // and we don't need to modify it at all. if (first_row_pc_loc.GetOffset() == -wordsize) { do_augment_unwindplan = false; diff --git a/lldb/source/Plugins/UnwindAssembly/x86/x86AssemblyInspectionEngine.cpp b/lldb/source/Plugins/UnwindAssembly/x86/x86AssemblyInspectionEngine.cpp index aa15063ac0d..10a56980594 100644 --- a/lldb/source/Plugins/UnwindAssembly/x86/x86AssemblyInspectionEngine.cpp +++ b/lldb/source/Plugins/UnwindAssembly/x86/x86AssemblyInspectionEngine.cpp @@ -246,8 +246,7 @@ void x86AssemblyInspectionEngine::Initialize( } // This function expects an x86 native register number (i.e. the bits stripped -// out of the -// actual instruction), not an lldb register number. +// out of the actual instruction), not an lldb register number. // // FIXME: This is ABI dependent, it shouldn't be hardcoded here. @@ -321,15 +320,14 @@ bool x86AssemblyInspectionEngine::push_imm_pattern_p() { // pushl imm8(%esp) // -// e.g. 0xff 0x74 0x24 0x20 - 'pushl 0x20(%esp)' -// (same byte pattern for 'pushq 0x20(%rsp)' in an x86_64 program) +// e.g. 0xff 0x74 0x24 0x20 - 'pushl 0x20(%esp)' (same byte pattern for 'pushq +// 0x20(%rsp)' in an x86_64 program) // -// 0xff (with opcode bits '6' in next byte, PUSH r/m32) -// 0x74 (ModR/M byte with three bits used to specify the opcode) +// 0xff (with opcode bits '6' in next byte, PUSH r/m32) 0x74 (ModR/M byte with +// three bits used to specify the opcode) // mod == b01, opcode == b110, R/M == b100 // "+disp8" -// 0x24 (SIB byte - scaled index = 0, r32 == esp) -// 0x20 imm8 value +// 0x24 (SIB byte - scaled index = 0, r32 == esp) 0x20 imm8 value bool x86AssemblyInspectionEngine::push_extended_pattern_p() { if (*m_cur_insn == 0xff) { @@ -337,9 +335,8 @@ bool x86AssemblyInspectionEngine::push_extended_pattern_p() { uint8_t opcode = (*(m_cur_insn + 1) >> 3) & 7; if (opcode == 6) { // I'm only looking for 0xff /6 here - I - // don't really care what value is being pushed, - // just that we're pushing a 32/64 bit value on - // to the stack is enough. + // don't really care what value is being pushed, just that we're pushing + // a 32/64 bit value on to the stack is enough. return true; } } @@ -377,8 +374,8 @@ bool x86AssemblyInspectionEngine::push_reg_p(int ®no) { return false; } -// movq %rsp, %rbp [0x48 0x8b 0xec] or [0x48 0x89 0xe5] -// movl %esp, %ebp [0x8b 0xec] or [0x89 0xe5] +// movq %rsp, %rbp [0x48 0x8b 0xec] or [0x48 0x89 0xe5] movl %esp, %ebp [0x8b +// 0xec] or [0x89 0xe5] bool x86AssemblyInspectionEngine::mov_rsp_rbp_pattern_p() { uint8_t *p = m_cur_insn; if (m_wordsize == 8 && *p == 0x48) @@ -529,16 +526,16 @@ bool x86AssemblyInspectionEngine::call_next_insn_pattern_p() { (*(p + 3) == 0x0) && (*(p + 4) == 0x0); } -// Look for an instruction sequence storing a nonvolatile register -// on to the stack frame. +// Look for an instruction sequence storing a nonvolatile register on to the +// stack frame. // movq %rax, -0x10(%rbp) [0x48 0x89 0x45 0xf0] // movl %eax, -0xc(%ebp) [0x89 0x45 0xf4] -// The offset value returned in rbp_offset will be positive -- -// but it must be subtraced from the frame base register to get -// the actual location. The positive value returned for the offset -// is a convention used elsewhere for CFA offsets et al. +// The offset value returned in rbp_offset will be positive -- but it must be +// subtraced from the frame base register to get the actual location. The +// positive value returned for the offset is a convention used elsewhere for +// CFA offsets et al. bool x86AssemblyInspectionEngine::mov_reg_to_local_stack_frame_p( int ®no, int &rbp_offset) { @@ -550,8 +547,8 @@ bool x86AssemblyInspectionEngine::mov_reg_to_local_stack_frame_p( src_reg_prefix_bit = REX_W_SRCREG(*p) << 3; target_reg_prefix_bit = REX_W_DSTREG(*p) << 3; if (target_reg_prefix_bit == 1) { - // rbp/ebp don't need a prefix bit - we know this isn't the - // reg we care about. + // rbp/ebp don't need a prefix bit - we know this isn't the reg we care + // about. return false; } p++; @@ -671,18 +668,16 @@ bool x86AssemblyInspectionEngine::GetNonCallSiteUnwindPlanFromAssembly( *newrow = *row.get(); row.reset(newrow); - // Track which registers have been saved so far in the prologue. - // If we see another push of that register, it's not part of the prologue. - // The register numbers used here are the machine register #'s - // (i386_register_numbers, x86_64_register_numbers). + // Track which registers have been saved so far in the prologue. If we see + // another push of that register, it's not part of the prologue. The register + // numbers used here are the machine register #'s (i386_register_numbers, + // x86_64_register_numbers). std::vector<bool> saved_registers(32, false); // Once the prologue has completed we'll save a copy of the unwind - // instructions - // If there is an epilogue in the middle of the function, after that epilogue - // we'll reinstate - // the unwind setup -- we assume that some code path jumps over the - // mid-function epilogue + // instructions If there is an epilogue in the middle of the function, after + // that epilogue we'll reinstate the unwind setup -- we assume that some code + // path jumps over the mid-function epilogue UnwindPlan::RowSP prologue_completed_row; // copy of prologue row of CFI int prologue_completed_sp_bytes_offset_from_cfa; // The sp value before the @@ -723,9 +718,8 @@ bool x86AssemblyInspectionEngine::GetNonCallSiteUnwindPlanFromAssembly( } // This is the start() function (or a pthread equivalent), it starts with a - // pushl $0x0 which puts the - // saved pc value of 0 on the stack. In this case we want to pretend we - // didn't see a stack movement at all -- + // pushl $0x0 which puts the saved pc value of 0 on the stack. In this + // case we want to pretend we didn't see a stack movement at all -- // normally the saved pc value is already on the stack by the time the // function starts executing. else if (push_0_pattern_p()) { @@ -733,9 +727,9 @@ bool x86AssemblyInspectionEngine::GetNonCallSiteUnwindPlanFromAssembly( else if (push_reg_p(machine_regno)) { current_sp_bytes_offset_from_cfa += m_wordsize; - // the PUSH instruction has moved the stack pointer - if the CFA is set in - // terms of the stack pointer, - // we need to add a new row of instructions. + // the PUSH instruction has moved the stack pointer - if the CFA is set + // in terms of the stack pointer, we need to add a new row of + // instructions. if (row->GetCFAValue().GetRegisterNumber() == m_lldb_sp_regnum) { row->GetCFAValue().SetOffset(current_sp_bytes_offset_from_cfa); row_updated = true; @@ -772,8 +766,7 @@ bool x86AssemblyInspectionEngine::GetNonCallSiteUnwindPlanFromAssembly( } // the POP instruction has moved the stack pointer - if the CFA is set in - // terms of the stack pointer, - // we need to add a new row of instructions. + // terms of the stack pointer, we need to add a new row of instructions. if (row->GetCFAValue().GetRegisterNumber() == m_lldb_sp_regnum) { row->GetCFAValue().SetIsRegisterPlusOffset( m_lldb_sp_regnum, current_sp_bytes_offset_from_cfa); @@ -790,13 +783,13 @@ bool x86AssemblyInspectionEngine::GetNonCallSiteUnwindPlanFromAssembly( } } - // The LEAVE instruction moves the value from rbp into rsp and pops - // a value off the stack into rbp (restoring the caller's rbp value). - // It is the opposite of ENTER, or 'push rbp, mov rsp rbp'. + // The LEAVE instruction moves the value from rbp into rsp and pops a value + // off the stack into rbp (restoring the caller's rbp value). It is the + // opposite of ENTER, or 'push rbp, mov rsp rbp'. else if (leave_pattern_p()) { // We're going to copy the value in rbp into rsp, so re-set the sp offset - // based on the CFAValue. Also, adjust it to recognize that we're popping - // the saved rbp value off the stack. + // based on the CFAValue. Also, adjust it to recognize that we're + // popping the saved rbp value off the stack. current_sp_bytes_offset_from_cfa = row->GetCFAValue().GetOffset(); current_sp_bytes_offset_from_cfa -= m_wordsize; row->GetCFAValue().SetOffset(current_sp_bytes_offset_from_cfa); @@ -822,12 +815,11 @@ bool x86AssemblyInspectionEngine::GetNonCallSiteUnwindPlanFromAssembly( UnwindPlan::Row::RegisterLocation regloc; - // stack_offset for 'movq %r15, -80(%rbp)' will be 80. - // In the Row, we want to express this as the offset from the CFA. If the - // frame base - // is rbp (like the above instruction), the CFA offset for rbp is probably - // 16. So we - // want to say that the value is stored at the CFA address - 96. + // stack_offset for 'movq %r15, -80(%rbp)' will be 80. In the Row, we + // want to express this as the offset from the CFA. If the frame base is + // rbp (like the above instruction), the CFA offset for rbp is probably + // 16. So we want to say that the value is stored at the CFA address - + // 96. regloc.SetAtCFAPlusOffset( -(stack_offset + row->GetCFAValue().GetOffset())); @@ -879,8 +871,8 @@ bool x86AssemblyInspectionEngine::GetNonCallSiteUnwindPlanFromAssembly( } else if (ret_pattern_p() && prologue_completed_row.get()) { - // Reinstate the saved prologue setup for any instructions - // that come after the ret instruction + // Reinstate the saved prologue setup for any instructions that come + // after the ret instruction UnwindPlan::Row *newrow = new UnwindPlan::Row; *newrow = *prologue_completed_row.get(); @@ -960,16 +952,15 @@ bool x86AssemblyInspectionEngine::AugmentUnwindPlanFromCallSite( if (!addr_start.IsValid()) return false; - // We either need a live RegisterContext, or we need the UnwindPlan to already - // be in the lldb register numbering scheme. + // We either need a live RegisterContext, or we need the UnwindPlan to + // already be in the lldb register numbering scheme. if (reg_ctx.get() == nullptr && unwind_plan.GetRegisterKind() != eRegisterKindLLDB) return false; // Is original unwind_plan valid? - // unwind_plan should have at least one row which is ABI-default (CFA register - // is sp), - // and another row in mid-function. + // unwind_plan should have at least one row which is ABI-default (CFA + // register is sp), and another row in mid-function. if (unwind_plan.GetRowCount() < 2) return false; @@ -994,11 +985,9 @@ bool x86AssemblyInspectionEngine::AugmentUnwindPlanFromCallSite( UnwindPlan::RowSP row(new UnwindPlan::Row(*first_row)); m_cur_insn = data + offset; - // After a mid-function epilogue we will need to re-insert the original unwind - // rules - // so unwinds work for the remainder of the function. These aren't common - // with clang/gcc - // on x86 but it is possible. + // After a mid-function epilogue we will need to re-insert the original + // unwind rules so unwinds work for the remainder of the function. These + // aren't common with clang/gcc on x86 but it is possible. bool reinstate_unwind_state = false; while (offset < size) { @@ -1015,8 +1004,7 @@ bool x86AssemblyInspectionEngine::AugmentUnwindPlanFromCallSite( offset += insn_len; m_cur_insn = data + offset; - // offset is pointing beyond the bounds of the - // function; stop looping. + // offset is pointing beyond the bounds of the function; stop looping. if (offset >= size) continue; @@ -1044,9 +1032,8 @@ bool x86AssemblyInspectionEngine::AugmentUnwindPlanFromCallSite( } if (row_id == 0) { - // If we are here, compiler didn't generate CFI for prologue. - // This won't happen to GCC or clang. - // In this case, bail out directly. + // If we are here, compiler didn't generate CFI for prologue. This won't + // happen to GCC or clang. In this case, bail out directly. return false; } @@ -1086,10 +1073,9 @@ bool x86AssemblyInspectionEngine::AugmentUnwindPlanFromCallSite( } if (pop_reg_p(regno)) { // Technically, this might be a nonvolatile register recover in - // epilogue. - // We should reset RegisterInfo for the register. - // But in practice, previous rule for the register is still valid... - // So we ignore this case. + // epilogue. We should reset RegisterInfo for the register. But in + // practice, previous rule for the register is still valid... So we + // ignore this case. row->SetOffset(offset); row->GetCFAValue().IncOffset(-m_wordsize); |