[Lldb-commits] [lldb] r138988 - in /lldb/trunk: include/lldb/Expression/DWARFExpression.h include/lldb/Symbol/DWARFCallFrameInfo.h include/lldb/Symbol/UnwindPlan.h source/Core/ValueObject.cpp source/Expression/DWARFExpression.cpp source/Plugins/Process/Utility/RegisterContextLLDB.cpp source/Plugins/SymbolFile/DWARF/NameToDIE.cpp source/Symbol/DWARFCallFrameInfo.cpp source/Symbol/Variable.cpp
Greg Clayton
gclayton at apple.com
Thu Sep 1 18:15:17 PDT 2011
Author: gclayton
Date: Thu Sep 1 20:15:17 2011
New Revision: 138988
URL: http://llvm.org/viewvc/llvm-project?rev=138988&view=rev
Log:
Added the ability for DWARF locations to use the ABI plug-ins to resolve
register names when dumping variable locations and location lists. Also did
some cleanup where "int" types were being used for "lldb::RegisterKind"
values.
Modified:
lldb/trunk/include/lldb/Expression/DWARFExpression.h
lldb/trunk/include/lldb/Symbol/DWARFCallFrameInfo.h
lldb/trunk/include/lldb/Symbol/UnwindPlan.h
lldb/trunk/source/Core/ValueObject.cpp
lldb/trunk/source/Expression/DWARFExpression.cpp
lldb/trunk/source/Plugins/Process/Utility/RegisterContextLLDB.cpp
lldb/trunk/source/Plugins/SymbolFile/DWARF/NameToDIE.cpp
lldb/trunk/source/Symbol/DWARFCallFrameInfo.cpp
lldb/trunk/source/Symbol/Variable.cpp
Modified: lldb/trunk/include/lldb/Expression/DWARFExpression.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Expression/DWARFExpression.h?rev=138988&r1=138987&r2=138988&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Expression/DWARFExpression.h (original)
+++ lldb/trunk/include/lldb/Expression/DWARFExpression.h Thu Sep 1 20:15:17 2011
@@ -88,11 +88,16 @@
/// different from the DWARF version of the location list base
/// address which is compile unit relative. This base address
/// is the address of the object that owns the location list.
+ ///
+ /// @param[in] abi
+ /// An optional ABI plug-in that can be used to resolve register
+ /// names.
//------------------------------------------------------------------
void
GetDescription (Stream *s,
lldb::DescriptionLevel level,
- lldb::addr_t location_list_base_addr) const;
+ lldb::addr_t location_list_base_addr,
+ ABI *abi) const;
//------------------------------------------------------------------
/// Return true if the location expression contains data
@@ -179,7 +184,7 @@
/// The register kind.
//------------------------------------------------------------------
void
- SetRegisterKind (int reg_kind);
+ SetRegisterKind (lldb::RegisterKind reg_kind);
//------------------------------------------------------------------
/// Wrapper for the static evaluate function that accepts an
@@ -315,7 +320,8 @@
DumpLocationForAddress (Stream *s,
lldb::DescriptionLevel level,
lldb::addr_t loclist_base_load_addr,
- lldb::addr_t address);
+ lldb::addr_t address,
+ ABI *abi);
protected:
//------------------------------------------------------------------
@@ -332,12 +338,17 @@
///
/// @param[in] level
/// The level of detail to use in pretty-printing.
+ ///
+ /// @param[in] abi
+ /// An optional ABI plug-in that can be used to resolve register
+ /// names.
//------------------------------------------------------------------
void
DumpLocation(Stream *s,
uint32_t offset,
uint32_t length,
- lldb::DescriptionLevel level) const;
+ lldb::DescriptionLevel level,
+ ABI *abi) const;
bool
GetLocation (lldb::addr_t base_addr,
@@ -350,7 +361,7 @@
//------------------------------------------------------------------
DataExtractor m_data; ///< A data extractor capable of reading opcode bytes
- int m_reg_kind; ///< One of the defines that starts with LLDB_REGKIND_
+ lldb::RegisterKind m_reg_kind; ///< One of the defines that starts with LLDB_REGKIND_
lldb::addr_t m_loclist_slide; ///< A value used to slide the location list offsets so that
///< they are relative to the object that owns the location list
///< (the function for frame base and variable location lists)
Modified: lldb/trunk/include/lldb/Symbol/DWARFCallFrameInfo.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/DWARFCallFrameInfo.h?rev=138988&r1=138987&r2=138988&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Symbol/DWARFCallFrameInfo.h (original)
+++ lldb/trunk/include/lldb/Symbol/DWARFCallFrameInfo.h Thu Sep 1 20:15:17 2011
@@ -34,7 +34,10 @@
{
public:
- DWARFCallFrameInfo (ObjectFile& objfile, lldb::SectionSP& section, uint32_t reg_kind, bool is_eh_frame);
+ DWARFCallFrameInfo (ObjectFile& objfile,
+ lldb::SectionSP& section,
+ lldb::RegisterKind reg_kind,
+ bool is_eh_frame);
~DWARFCallFrameInfo();
@@ -113,7 +116,7 @@
ObjectFile& m_objfile;
lldb::SectionSP m_section;
- uint32_t m_reg_kind;
+ lldb::RegisterKind m_reg_kind;
Flags m_flags;
cie_map_t m_cie_map;
Modified: lldb/trunk/include/lldb/Symbol/UnwindPlan.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/UnwindPlan.h?rev=138988&r1=138987&r2=138988&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Symbol/UnwindPlan.h (original)
+++ lldb/trunk/include/lldb/Symbol/UnwindPlan.h Thu Sep 1 20:15:17 2011
@@ -360,7 +360,7 @@
public:
- UnwindPlan (uint32_t reg_kind) :
+ UnwindPlan (lldb::RegisterKind reg_kind) :
m_row_list (),
m_plan_valid_address_range (),
m_register_kind (reg_kind),
@@ -385,14 +385,14 @@
const Row*
GetRowForFunctionOffset (int offset) const;
- uint32_t
+ lldb::RegisterKind
GetRegisterKind () const
{
return m_register_kind;
}
void
- SetRegisterKind (uint32_t kind)
+ SetRegisterKind (lldb::RegisterKind kind)
{
m_register_kind = kind;
}
@@ -456,7 +456,7 @@
typedef std::vector<Row> collection;
collection m_row_list;
AddressRange m_plan_valid_address_range;
- uint32_t m_register_kind; // The RegisterKind these register numbers are in terms of - will need to be
+ lldb::RegisterKind m_register_kind; // The RegisterKind these register numbers are in terms of - will need to be
// translated to lldb native reg nums at unwind time
lldb_private::ConstString m_source_name; // for logging, where this UnwindPlan originated from
}; // class UnwindPlan
Modified: lldb/trunk/source/Core/ValueObject.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/ValueObject.cpp?rev=138988&r1=138987&r2=138988&view=diff
==============================================================================
--- lldb/trunk/source/Core/ValueObject.cpp (original)
+++ lldb/trunk/source/Core/ValueObject.cpp Thu Sep 1 20:15:17 2011
@@ -53,7 +53,7 @@
using namespace lldb_private;
using namespace lldb_utility;
-static lldb::user_id_t g_value_obj_uid = 0;
+static user_id_t g_value_obj_uid = 0;
//----------------------------------------------------------------------
// ValueObject constructor
@@ -125,7 +125,7 @@
m_deref_valobj(NULL),
m_format (eFormatDefault),
m_last_format_mgr_revision(0),
- m_last_format_mgr_dynamic(lldb::eNoDynamicValues),
+ m_last_format_mgr_dynamic(eNoDynamicValues),
m_last_summary_format(),
m_forced_summary_format(),
m_last_value_format(),
@@ -162,7 +162,7 @@
}
bool
-ValueObject::UpdateValueIfNeeded (lldb::DynamicValueType use_dynamic, bool update_format)
+ValueObject::UpdateValueIfNeeded (DynamicValueType use_dynamic, bool update_format)
{
if (update_format)
@@ -217,7 +217,7 @@
}
void
-ValueObject::UpdateFormatsIfNeeded(lldb::DynamicValueType use_dynamic)
+ValueObject::UpdateFormatsIfNeeded(DynamicValueType use_dynamic)
{
LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_TYPES));
if (log)
@@ -242,7 +242,7 @@
m_synthetic_value = NULL;
- DataVisualization::ValueFormats::Get(*this, lldb::eNoDynamicValues, m_last_value_format);
+ DataVisualization::ValueFormats::Get(*this, eNoDynamicValues, m_last_value_format);
DataVisualization::GetSummaryFormat(*this, use_dynamic, m_last_summary_format);
DataVisualization::GetSyntheticChildren(*this, use_dynamic, m_last_synthetic_filter);
@@ -578,7 +578,7 @@
if (ClangASTContext::IsFunctionPointerType (clang_type))
{
AddressType func_ptr_address_type = eAddressTypeInvalid;
- lldb::addr_t func_ptr_address = GetPointerValue (func_ptr_address_type, true);
+ addr_t func_ptr_address = GetPointerValue (func_ptr_address_type, true);
if (func_ptr_address != 0 && func_ptr_address != LLDB_INVALID_ADDRESS)
{
@@ -641,7 +641,7 @@
return true;
if (type_flags.Test(ClangASTContext::eTypeIsArray))
return true;
- lldb::addr_t cstr_address = LLDB_INVALID_ADDRESS;
+ addr_t cstr_address = LLDB_INVALID_ADDRESS;
AddressType cstr_address_type = eAddressTypeInvalid;
cstr_address = GetAddressOf (cstr_address_type, true);
return (cstr_address != LLDB_INVALID_ADDRESS);
@@ -652,7 +652,7 @@
Error& error,
uint32_t max_length,
bool honor_array,
- lldb::Format item_format)
+ Format item_format)
{
if (max_length == 0)
@@ -676,7 +676,7 @@
}
else
{
- lldb::addr_t cstr_address = LLDB_INVALID_ADDRESS;
+ addr_t cstr_address = LLDB_INVALID_ADDRESS;
AddressType cstr_address_type = eAddressTypeInvalid;
size_t cstr_len = 0;
@@ -711,7 +711,7 @@
if (cstr_len > 0 && honor_array)
{
data_buffer.resize(cstr_len);
- data.SetData (&data_buffer.front(), data_buffer.size(), lldb::endian::InlHostByteOrder());
+ data.SetData (&data_buffer.front(), data_buffer.size(), endian::InlHostByteOrder());
bytes_read = target->ReadMemory (cstr_so_addr,
prefer_file_cache,
&data_buffer.front(),
@@ -821,7 +821,7 @@
StreamString s;
- lldb::LanguageType language = GetObjectRuntimeLanguage();
+ LanguageType language = GetObjectRuntimeLanguage();
LanguageRuntime *runtime = process->GetLanguageRuntime(language);
if (runtime == NULL)
@@ -834,7 +834,7 @@
if (ClangASTContext::IsIntegerType (opaque_qual_type, is_signed)
|| ClangASTContext::IsPointerType (opaque_qual_type))
{
- runtime = process->GetLanguageRuntime(lldb::eLanguageTypeObjC);
+ runtime = process->GetLanguageRuntime(eLanguageTypeObjC);
}
}
}
@@ -953,12 +953,12 @@
bool
ValueObject::GetPrintableRepresentation(Stream& s,
ValueObjectRepresentationStyle val_obj_display,
- lldb::Format custom_format)
+ Format custom_format)
{
RefCounter ref(&m_dump_printable_counter);
- if (custom_format != lldb::eFormatInvalid)
+ if (custom_format != eFormatInvalid)
SetFormat(custom_format);
const char * return_value;
@@ -1046,7 +1046,7 @@
// to checking this call result before trying to display special cases
bool
ValueObject::HasSpecialCasesForPrintableRepresentation(ValueObjectRepresentationStyle val_obj_display,
- lldb::Format custom_format)
+ Format custom_format)
{
clang_type_t elem_or_pointee_type;
Flags flags(ClangASTContext::GetTypeInfo(GetClangType(), GetClangAST(), &elem_or_pointee_type));
@@ -1055,30 +1055,30 @@
&& val_obj_display == ValueObject::eDisplayValue)
{
if (IsCStringContainer(true) &&
- (custom_format == lldb::eFormatCString ||
- custom_format == lldb::eFormatCharArray ||
- custom_format == lldb::eFormatChar ||
- custom_format == lldb::eFormatVectorOfChar))
+ (custom_format == eFormatCString ||
+ custom_format == eFormatCharArray ||
+ custom_format == eFormatChar ||
+ custom_format == eFormatVectorOfChar))
return true;
if (flags.Test(ClangASTContext::eTypeIsArray))
{
- if ((custom_format == lldb::eFormatBytes) ||
- (custom_format == lldb::eFormatBytesWithASCII))
+ if ((custom_format == eFormatBytes) ||
+ (custom_format == eFormatBytesWithASCII))
return true;
- if ((custom_format == lldb::eFormatVectorOfChar) ||
- (custom_format == lldb::eFormatVectorOfFloat32) ||
- (custom_format == lldb::eFormatVectorOfFloat64) ||
- (custom_format == lldb::eFormatVectorOfSInt16) ||
- (custom_format == lldb::eFormatVectorOfSInt32) ||
- (custom_format == lldb::eFormatVectorOfSInt64) ||
- (custom_format == lldb::eFormatVectorOfSInt8) ||
- (custom_format == lldb::eFormatVectorOfUInt128) ||
- (custom_format == lldb::eFormatVectorOfUInt16) ||
- (custom_format == lldb::eFormatVectorOfUInt32) ||
- (custom_format == lldb::eFormatVectorOfUInt64) ||
- (custom_format == lldb::eFormatVectorOfUInt8))
+ if ((custom_format == eFormatVectorOfChar) ||
+ (custom_format == eFormatVectorOfFloat32) ||
+ (custom_format == eFormatVectorOfFloat64) ||
+ (custom_format == eFormatVectorOfSInt16) ||
+ (custom_format == eFormatVectorOfSInt32) ||
+ (custom_format == eFormatVectorOfSInt64) ||
+ (custom_format == eFormatVectorOfSInt8) ||
+ (custom_format == eFormatVectorOfUInt128) ||
+ (custom_format == eFormatVectorOfUInt16) ||
+ (custom_format == eFormatVectorOfUInt32) ||
+ (custom_format == eFormatVectorOfUInt64) ||
+ (custom_format == eFormatVectorOfUInt8))
return true;
}
}
@@ -1088,7 +1088,7 @@
bool
ValueObject::DumpPrintableRepresentation(Stream& s,
ValueObjectRepresentationStyle val_obj_display,
- lldb::Format custom_format,
+ Format custom_format,
bool only_special)
{
@@ -1102,29 +1102,29 @@
// try to "do the right thing"
if (IsCStringContainer(true) &&
- (custom_format == lldb::eFormatCString ||
- custom_format == lldb::eFormatCharArray ||
- custom_format == lldb::eFormatChar ||
- custom_format == lldb::eFormatVectorOfChar)) // print char[] & char* directly
+ (custom_format == eFormatCString ||
+ custom_format == eFormatCharArray ||
+ custom_format == eFormatChar ||
+ custom_format == eFormatVectorOfChar)) // print char[] & char* directly
{
Error error;
ReadPointedString(s,
error,
0,
- (custom_format == lldb::eFormatVectorOfChar) ||
- (custom_format == lldb::eFormatCharArray));
+ (custom_format == eFormatVectorOfChar) ||
+ (custom_format == eFormatCharArray));
return !error.Fail();
}
- if (custom_format == lldb::eFormatEnum)
+ if (custom_format == eFormatEnum)
return false;
// this only works for arrays, because I have no way to know when
// the pointed memory ends, and no special \0 end of data marker
if (flags.Test(ClangASTContext::eTypeIsArray))
{
- if ((custom_format == lldb::eFormatBytes) ||
- (custom_format == lldb::eFormatBytesWithASCII))
+ if ((custom_format == eFormatBytes) ||
+ (custom_format == eFormatBytesWithASCII))
{
uint32_t count = GetNumChildren();
@@ -1149,22 +1149,22 @@
return true;
}
- if ((custom_format == lldb::eFormatVectorOfChar) ||
- (custom_format == lldb::eFormatVectorOfFloat32) ||
- (custom_format == lldb::eFormatVectorOfFloat64) ||
- (custom_format == lldb::eFormatVectorOfSInt16) ||
- (custom_format == lldb::eFormatVectorOfSInt32) ||
- (custom_format == lldb::eFormatVectorOfSInt64) ||
- (custom_format == lldb::eFormatVectorOfSInt8) ||
- (custom_format == lldb::eFormatVectorOfUInt128) ||
- (custom_format == lldb::eFormatVectorOfUInt16) ||
- (custom_format == lldb::eFormatVectorOfUInt32) ||
- (custom_format == lldb::eFormatVectorOfUInt64) ||
- (custom_format == lldb::eFormatVectorOfUInt8)) // arrays of bytes, bytes with ASCII or any vector format should be printed directly
+ if ((custom_format == eFormatVectorOfChar) ||
+ (custom_format == eFormatVectorOfFloat32) ||
+ (custom_format == eFormatVectorOfFloat64) ||
+ (custom_format == eFormatVectorOfSInt16) ||
+ (custom_format == eFormatVectorOfSInt32) ||
+ (custom_format == eFormatVectorOfSInt64) ||
+ (custom_format == eFormatVectorOfSInt8) ||
+ (custom_format == eFormatVectorOfUInt128) ||
+ (custom_format == eFormatVectorOfUInt16) ||
+ (custom_format == eFormatVectorOfUInt32) ||
+ (custom_format == eFormatVectorOfUInt64) ||
+ (custom_format == eFormatVectorOfUInt8)) // arrays of bytes, bytes with ASCII or any vector format should be printed directly
{
uint32_t count = GetNumChildren();
- lldb::Format format = FormatManager::GetSingleItemFormat(custom_format);
+ Format format = FormatManager::GetSingleItemFormat(custom_format);
s << '[';
for (uint32_t low = 0; low < count; low++)
@@ -1188,23 +1188,23 @@
}
}
- if ((custom_format == lldb::eFormatBoolean) ||
- (custom_format == lldb::eFormatBinary) ||
- (custom_format == lldb::eFormatChar) ||
- (custom_format == lldb::eFormatCharPrintable) ||
- (custom_format == lldb::eFormatComplexFloat) ||
- (custom_format == lldb::eFormatDecimal) ||
- (custom_format == lldb::eFormatHex) ||
- (custom_format == lldb::eFormatFloat) ||
- (custom_format == lldb::eFormatOctal) ||
- (custom_format == lldb::eFormatOSType) ||
- (custom_format == lldb::eFormatUnicode16) ||
- (custom_format == lldb::eFormatUnicode32) ||
- (custom_format == lldb::eFormatUnsigned) ||
- (custom_format == lldb::eFormatPointer) ||
- (custom_format == lldb::eFormatComplexInteger) ||
- (custom_format == lldb::eFormatComplex) ||
- (custom_format == lldb::eFormatDefault)) // use the [] operator
+ if ((custom_format == eFormatBoolean) ||
+ (custom_format == eFormatBinary) ||
+ (custom_format == eFormatChar) ||
+ (custom_format == eFormatCharPrintable) ||
+ (custom_format == eFormatComplexFloat) ||
+ (custom_format == eFormatDecimal) ||
+ (custom_format == eFormatHex) ||
+ (custom_format == eFormatFloat) ||
+ (custom_format == eFormatOctal) ||
+ (custom_format == eFormatOSType) ||
+ (custom_format == eFormatUnicode16) ||
+ (custom_format == eFormatUnicode32) ||
+ (custom_format == eFormatUnsigned) ||
+ (custom_format == eFormatPointer) ||
+ (custom_format == eFormatComplexInteger) ||
+ (custom_format == eFormatComplex) ||
+ (custom_format == eFormatDefault)) // use the [] operator
return false;
}
@@ -1249,7 +1249,7 @@
addr_t
ValueObject::GetPointerValue (AddressType &address_type, bool scalar_is_load_address)
{
- lldb::addr_t address = LLDB_INVALID_ADDRESS;
+ addr_t address = LLDB_INVALID_ADDRESS;
address_type = eAddressTypeInvalid;
if (!UpdateValueIfNeeded(false))
@@ -1293,7 +1293,7 @@
return false;
uint32_t count = 0;
- lldb::Encoding encoding = ClangASTType::GetEncoding (GetClangType(), count);
+ Encoding encoding = ClangASTType::GetEncoding (GetClangType(), count);
const size_t byte_size = GetByteSize();
@@ -1322,7 +1322,7 @@
ProcessSP process_sp = GetUpdatePoint().GetProcessSP();
if (process_sp)
{
- lldb::addr_t target_addr = m_value.GetScalar().GetRawBits64(LLDB_INVALID_ADDRESS);
+ addr_t target_addr = m_value.GetScalar().GetRawBits64(LLDB_INVALID_ADDRESS);
size_t bytes_written = process_sp->WriteScalarToMemory (target_addr,
new_scalar,
byte_size,
@@ -1374,7 +1374,7 @@
return true;
}
-lldb::LanguageType
+LanguageType
ValueObject::GetObjectRuntimeLanguage ()
{
return ClangASTType::GetMinimumLanguage (GetClangAST(),
@@ -1439,7 +1439,7 @@
return ClangASTContext::IsPossibleDynamicType (GetClangAST (), GetClangType());
}
-lldb::ValueObjectSP
+ValueObjectSP
ValueObject::GetSyntheticArrayMember (int32_t index, bool can_create)
{
if (IsArrayType())
@@ -1568,7 +1568,7 @@
return synthetic_child_sp;
}
-lldb::ValueObjectSP
+ValueObjectSP
ValueObject::GetSyntheticArrayRangeChild (uint32_t from, uint32_t to, bool can_create)
{
ValueObjectSP synthetic_child_sp;
@@ -1604,7 +1604,7 @@
return synthetic_child_sp;
}
-lldb::ValueObjectSP
+ValueObjectSP
ValueObject::GetSyntheticChildAtOffset(uint32_t offset, const ClangASTType& type, bool can_create)
{
@@ -1622,7 +1622,7 @@
return synthetic_child_sp;
if (!can_create)
- return lldb::ValueObjectSP();
+ return ValueObjectSP();
ValueObjectChild *synthetic_child = new ValueObjectChild(*this,
type.GetASTContext(),
@@ -1661,7 +1661,7 @@
return expression;
}
-lldb::ValueObjectSP
+ValueObjectSP
ValueObject::GetSyntheticExpressionPathChild(const char* expression, bool can_create)
{
ValueObjectSP synthetic_child_sp;
@@ -1687,9 +1687,9 @@
}
void
-ValueObject::CalculateSyntheticValue (lldb::SyntheticValueType use_synthetic)
+ValueObject::CalculateSyntheticValue (SyntheticValueType use_synthetic)
{
- if (use_synthetic == lldb::eNoSyntheticFilter)
+ if (use_synthetic == eNoSyntheticFilter)
return;
UpdateFormatsIfNeeded(m_last_format_mgr_dynamic);
@@ -1703,9 +1703,9 @@
}
void
-ValueObject::CalculateDynamicValue (lldb::DynamicValueType use_dynamic)
+ValueObject::CalculateDynamicValue (DynamicValueType use_dynamic)
{
- if (use_dynamic == lldb::eNoDynamicValues)
+ if (use_dynamic == eNoDynamicValues)
return;
if (!m_dynamic_value && !IsDynamic())
@@ -1716,8 +1716,8 @@
// FIXME: Process should have some kind of "map over Runtimes" so we don't have to
// hard code this everywhere.
- lldb::LanguageType known_type = GetObjectRuntimeLanguage();
- if (known_type != lldb::eLanguageTypeUnknown && known_type != lldb::eLanguageTypeC)
+ LanguageType known_type = GetObjectRuntimeLanguage();
+ if (known_type != eLanguageTypeUnknown && known_type != eLanguageTypeC)
{
LanguageRuntime *runtime = process->GetLanguageRuntime (known_type);
if (runtime)
@@ -1725,13 +1725,13 @@
}
else
{
- LanguageRuntime *cpp_runtime = process->GetLanguageRuntime (lldb::eLanguageTypeC_plus_plus);
+ LanguageRuntime *cpp_runtime = process->GetLanguageRuntime (eLanguageTypeC_plus_plus);
if (cpp_runtime)
worth_having_dynamic_value = cpp_runtime->CouldHaveDynamicValue(*this);
if (!worth_having_dynamic_value)
{
- LanguageRuntime *objc_runtime = process->GetLanguageRuntime (lldb::eLanguageTypeObjC);
+ LanguageRuntime *objc_runtime = process->GetLanguageRuntime (eLanguageTypeObjC);
if (objc_runtime)
worth_having_dynamic_value = objc_runtime->CouldHaveDynamicValue(*this);
}
@@ -1749,7 +1749,7 @@
ValueObjectSP
ValueObject::GetDynamicValue (DynamicValueType use_dynamic)
{
- if (use_dynamic == lldb::eNoDynamicValues)
+ if (use_dynamic == eNoDynamicValues)
return ValueObjectSP();
if (!IsDynamic() && m_dynamic_value == NULL)
@@ -1769,7 +1769,7 @@
ValueObjectSP
ValueObject::GetSyntheticValue (SyntheticValueType use_synthetic)
{
- if (use_synthetic == lldb::eNoSyntheticFilter)
+ if (use_synthetic == eNoSyntheticFilter)
return GetSP();
UpdateFormatsIfNeeded(m_last_format_mgr_dynamic);
@@ -1793,7 +1793,7 @@
if (m_last_synthetic_filter.get() == NULL)
return false;
- CalculateSyntheticValue(lldb::eUseSyntheticFilter);
+ CalculateSyntheticValue(eUseSyntheticFilter);
if (m_synthetic_value)
return true;
@@ -1909,7 +1909,7 @@
}
}
-lldb::ValueObjectSP
+ValueObjectSP
ValueObject::GetValueForExpressionPath(const char* expression,
const char** first_unparsed,
ExpressionPathScanEndReason* reason_to_stop,
@@ -1974,7 +1974,7 @@
int
ValueObject::GetValuesForExpressionPath(const char* expression,
- lldb::ValueObjectListSP& list,
+ ValueObjectListSP& list,
const char** first_unparsed,
ExpressionPathScanEndReason* reason_to_stop,
ExpressionPathEndResultType* final_value_type,
@@ -2058,7 +2058,7 @@
return 1;
}
-lldb::ValueObjectSP
+ValueObjectSP
ValueObject::GetValueForExpressionPath_Impl(const char* expression_cstr,
const char** first_unparsed,
ExpressionPathScanEndReason* reason_to_stop,
@@ -2078,8 +2078,8 @@
const char* expression_cstr = *first_unparsed; // hide the top level expression_cstr
- lldb::clang_type_t root_clang_type = root->GetClangType();
- lldb::clang_type_t pointee_clang_type;
+ clang_type_t root_clang_type = root->GetClangType();
+ clang_type_t pointee_clang_type;
Flags root_clang_type_info,pointee_clang_type_info;
root_clang_type_info = Flags(ClangASTContext::GetTypeInfo(root_clang_type, GetClangAST(), &pointee_clang_type));
@@ -2149,7 +2149,7 @@
}
else if (options.m_no_synthetic_children == false) // let's try with synthetic children
{
- child_valobj_sp = root->GetSyntheticValue(lldb::eUseSyntheticFilter)->GetChildMemberWithName(child_name, true);
+ child_valobj_sp = root->GetSyntheticValue(eUseSyntheticFilter)->GetChildMemberWithName(child_name, true);
}
// if we are here and options.m_no_synthetic_children is true, child_valobj_sp is going to be a NULL SP,
@@ -2182,7 +2182,7 @@
}
else if (options.m_no_synthetic_children == false) // let's try with synthetic children
{
- child_valobj_sp = root->GetSyntheticValue(lldb::eUseSyntheticFilter)->GetChildMemberWithName(child_name, true);
+ child_valobj_sp = root->GetSyntheticValue(eUseSyntheticFilter)->GetChildMemberWithName(child_name, true);
}
// if we are here and options.m_no_synthetic_children is true, child_valobj_sp is going to be a NULL SP,
@@ -2287,8 +2287,8 @@
if (!child_valobj_sp)
child_valobj_sp = root->GetSyntheticArrayMemberFromArray(index, true);
if (!child_valobj_sp)
- if (root->HasSyntheticValue() && root->GetSyntheticValue(lldb::eUseSyntheticFilter)->GetNumChildren() > index)
- child_valobj_sp = root->GetSyntheticValue(lldb::eUseSyntheticFilter)->GetChildAtIndex(index, true);
+ if (root->HasSyntheticValue() && root->GetSyntheticValue(eUseSyntheticFilter)->GetNumChildren() > index)
+ child_valobj_sp = root->GetSyntheticValue(eUseSyntheticFilter)->GetChildAtIndex(index, true);
if (child_valobj_sp)
{
root = child_valobj_sp;
@@ -2327,7 +2327,7 @@
else
{
if (ClangASTType::GetMinimumLanguage(root->GetClangAST(),
- root->GetClangType()) == lldb::eLanguageTypeObjC
+ root->GetClangType()) == eLanguageTypeObjC
&&
ClangASTContext::IsPointerType(ClangASTType::GetPointeeType(root->GetClangType())) == false
&&
@@ -2335,7 +2335,7 @@
&&
options.m_no_synthetic_children == false)
{
- root = root->GetSyntheticValue(lldb::eUseSyntheticFilter)->GetChildAtIndex(index, true);
+ root = root->GetSyntheticValue(eUseSyntheticFilter)->GetChildAtIndex(index, true);
}
else
root = root->GetSyntheticArrayMemberFromPointer(index, true);
@@ -2374,7 +2374,7 @@
}
else if (root->HasSyntheticValue() && options.m_no_synthetic_children == false)
{
- root = root->GetSyntheticValue(lldb::eUseSyntheticFilter)->GetChildAtIndex(index, true);
+ root = root->GetSyntheticValue(eUseSyntheticFilter)->GetChildAtIndex(index, true);
if (!root.get())
{
*first_unparsed = expression_cstr;
@@ -2484,8 +2484,8 @@
int
ValueObject::ExpandArraySliceExpression(const char* expression_cstr,
const char** first_unparsed,
- lldb::ValueObjectSP root,
- lldb::ValueObjectListSP& list,
+ ValueObjectSP root,
+ ValueObjectListSP& list,
ExpressionPathScanEndReason* reason_to_stop,
ExpressionPathEndResultType* final_result,
const GetValueForExpressionPathOptions& options,
@@ -2501,8 +2501,8 @@
const char* expression_cstr = *first_unparsed; // hide the top level expression_cstr
- lldb::clang_type_t root_clang_type = root->GetClangType();
- lldb::clang_type_t pointee_clang_type;
+ clang_type_t root_clang_type = root->GetClangType();
+ clang_type_t pointee_clang_type;
Flags root_clang_type_info,pointee_clang_type_info;
root_clang_type_info = Flags(ClangASTContext::GetTypeInfo(root_clang_type, GetClangAST(), &pointee_clang_type));
@@ -2789,7 +2789,7 @@
bool show_types,
bool show_location,
bool use_objc,
- lldb::DynamicValueType use_dynamic,
+ DynamicValueType use_dynamic,
bool use_synth,
bool scope_already_checked,
bool flat_output,
@@ -2801,7 +2801,7 @@
{
bool update_success = valobj->UpdateValueIfNeeded (use_dynamic, true);
- if (update_success && use_dynamic != lldb::eNoDynamicValues)
+ if (update_success && use_dynamic != eNoDynamicValues)
{
ValueObject *dynamic_value = valobj->GetDynamicValue(use_dynamic).get();
if (dynamic_value)
@@ -2832,9 +2832,9 @@
const char* typeName = valobj->GetTypeName().AsCString("<invalid type>");
s.Printf("(%s", typeName);
// only show dynamic types if the user really wants to see types
- if (show_types && use_dynamic != lldb::eNoDynamicValues &&
+ if (show_types && use_dynamic != eNoDynamicValues &&
(/*strstr(typeName, "id") == typeName ||*/
- ClangASTType::GetMinimumLanguage(valobj->GetClangAST(), valobj->GetClangType()) == lldb::eLanguageTypeObjC))
+ ClangASTType::GetMinimumLanguage(valobj->GetClangAST(), valobj->GetClangType()) == eLanguageTypeObjC))
{
Process* process = valobj->GetUpdatePoint().GetProcessSP().get();
if (process == NULL)
@@ -2969,8 +2969,8 @@
if (print_children && (!entry || entry->DoesPrintChildren() || !sum_cstr))
{
ValueObjectSP synth_valobj = valobj->GetSyntheticValue(use_synth ?
- lldb::eUseSyntheticFilter :
- lldb::eNoSyntheticFilter);
+ eUseSyntheticFilter :
+ eNoSyntheticFilter);
uint32_t num_children = synth_valobj->GetNumChildren();
bool print_dotdotdot = false;
if (num_children)
@@ -3095,7 +3095,7 @@
return valobj_sp;
}
-lldb::ValueObjectSP
+ValueObjectSP
ValueObject::Dereference (Error &error)
{
if (m_deref_valobj)
@@ -3174,7 +3174,7 @@
}
}
-lldb::ValueObjectSP
+ValueObjectSP
ValueObject::AddressOf (Error &error)
{
if (m_addr_of_valobj_sp)
@@ -3182,7 +3182,7 @@
AddressType address_type = eAddressTypeInvalid;
const bool scalar_is_load_address = false;
- lldb::addr_t addr = GetAddressOf (address_type, scalar_is_load_address);
+ addr_t addr = GetAddressOf (address_type, scalar_is_load_address);
error.Clear();
if (addr != LLDB_INVALID_ADDRESS)
{
@@ -3223,13 +3223,13 @@
}
-lldb::ValueObjectSP
+ValueObjectSP
ValueObject::CastPointerType (const char *name, ClangASTType &clang_ast_type)
{
- lldb::ValueObjectSP valobj_sp;
+ ValueObjectSP valobj_sp;
AddressType address_type;
const bool scalar_is_load_address = true;
- lldb::addr_t ptr_value = GetPointerValue (address_type, scalar_is_load_address);
+ addr_t ptr_value = GetPointerValue (address_type, scalar_is_load_address);
if (ptr_value != LLDB_INVALID_ADDRESS)
{
@@ -3243,13 +3243,13 @@
return valobj_sp;
}
-lldb::ValueObjectSP
+ValueObjectSP
ValueObject::CastPointerType (const char *name, TypeSP &type_sp)
{
- lldb::ValueObjectSP valobj_sp;
+ ValueObjectSP valobj_sp;
AddressType address_type;
const bool scalar_is_load_address = true;
- lldb::addr_t ptr_value = GetPointerValue (address_type, scalar_is_load_address);
+ addr_t ptr_value = GetPointerValue (address_type, scalar_is_load_address);
if (ptr_value != LLDB_INVALID_ADDRESS)
{
@@ -3465,7 +3465,7 @@
Thread *thread = exe_scope->CalculateThread();
if (thread != NULL)
{
- lldb::user_id_t new_thread_index = thread->GetIndexID();
+ user_id_t new_thread_index = thread->GetIndexID();
if (new_thread_index != m_thread_id)
{
needs_update = true;
Modified: lldb/trunk/source/Expression/DWARFExpression.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Expression/DWARFExpression.cpp?rev=138988&r1=138987&r2=138988&view=diff
==============================================================================
--- lldb/trunk/source/Expression/DWARFExpression.cpp (original)
+++ lldb/trunk/source/Expression/DWARFExpression.cpp Thu Sep 1 20:15:17 2011
@@ -30,6 +30,7 @@
#include "lldb/Symbol/ClangASTContext.h"
#include "lldb/Symbol/Type.h"
+#include "lldb/Target/ABI.h"
#include "lldb/Target/ExecutionContext.h"
#include "lldb/Target/Process.h"
#include "lldb/Target/RegisterContext.h"
@@ -264,7 +265,7 @@
}
void
-DWARFExpression::DumpLocation (Stream *s, uint32_t offset, uint32_t length, lldb::DescriptionLevel level) const
+DWARFExpression::DumpLocation (Stream *s, uint32_t offset, uint32_t length, lldb::DescriptionLevel level, ABI *abi) const
{
if (!m_data.ValidOffsetForDataOfSize(offset, length))
return;
@@ -409,7 +410,29 @@
case DW_OP_reg28: // 0x6C
case DW_OP_reg29: // 0x6D
case DW_OP_reg30: // 0x6E
- case DW_OP_reg31: s->Printf("DW_OP_reg%i", op - DW_OP_reg0); break; // 0x6f
+ case DW_OP_reg31: // 0x6F
+ {
+ uint32_t reg_num = op - DW_OP_reg0;
+ if (abi)
+ {
+ RegisterInfo reg_info;
+ if (abi->GetRegisterInfoByKind(m_reg_kind, reg_num, reg_info))
+ {
+ if (reg_info.name)
+ {
+ s->PutCString (reg_info.name);
+ break;
+ }
+ else if (reg_info.alt_name)
+ {
+ s->PutCString (reg_info.alt_name);
+ break;
+ }
+ }
+ }
+ s->Printf("DW_OP_reg%u", reg_num); break;
+ }
+ break;
case DW_OP_breg0:
case DW_OP_breg1:
@@ -442,16 +465,80 @@
case DW_OP_breg28:
case DW_OP_breg29:
case DW_OP_breg30:
- case DW_OP_breg31: s->Printf("DW_OP_breg%i(0x%x)", op - DW_OP_breg0, m_data.GetULEB128(&offset)); break;
+ case DW_OP_breg31:
+ {
+ uint32_t reg_num = op - DW_OP_breg0;
+ int64_t reg_offset = m_data.GetSLEB128(&offset);
+ if (abi)
+ {
+ RegisterInfo reg_info;
+ if (abi->GetRegisterInfoByKind(m_reg_kind, reg_num, reg_info))
+ {
+ if (reg_info.name)
+ {
+ s->Printf("[%s%+lli]", reg_info.name, reg_offset);
+ break;
+ }
+ else if (reg_info.alt_name)
+ {
+ s->Printf("[%s%+lli]", reg_info.alt_name, reg_offset);
+ break;
+ }
+ }
+ }
+ s->Printf("DW_OP_breg%i(0x%llx)", reg_num, reg_offset);
+ }
+ break;
case DW_OP_regx: // 0x90 1 ULEB128 register
- s->Printf("DW_OP_regx(0x%x)", m_data.GetULEB128(&offset));
+ {
+ uint64_t reg_num = m_data.GetULEB128(&offset);
+ if (abi)
+ {
+ RegisterInfo reg_info;
+ if (abi->GetRegisterInfoByKind(m_reg_kind, reg_num, reg_info))
+ {
+ if (reg_info.name)
+ {
+ s->PutCString (reg_info.name);
+ break;
+ }
+ else if (reg_info.alt_name)
+ {
+ s->PutCString (reg_info.alt_name);
+ break;
+ }
+ }
+ }
+ s->Printf("DW_OP_regx(%llu)", reg_num); break;
+ }
break;
case DW_OP_fbreg: // 0x91 1 SLEB128 offset
- s->Printf("DW_OP_fbreg(0x%x)",m_data.GetSLEB128(&offset));
+ s->Printf("DW_OP_fbreg(%lli)",m_data.GetSLEB128(&offset));
break;
case DW_OP_bregx: // 0x92 2 ULEB128 register followed by SLEB128 offset
- s->Printf("DW_OP_bregx(0x%x, 0x%x)", m_data.GetULEB128(&offset), m_data.GetSLEB128(&offset));
+ {
+ uint32_t reg_num = m_data.GetULEB128(&offset);
+ int64_t reg_offset = m_data.GetSLEB128(&offset);
+ if (abi)
+ {
+ RegisterInfo reg_info;
+ if (abi->GetRegisterInfoByKind(m_reg_kind, reg_num, reg_info))
+ {
+ if (reg_info.name)
+ {
+ s->Printf("[%s%+lli]", reg_info.name, reg_offset);
+ break;
+ }
+ else if (reg_info.alt_name)
+ {
+ s->Printf("[%s%+lli]", reg_info.alt_name, reg_offset);
+ break;
+ }
+ }
+ }
+ s->Printf("DW_OP_bregx(reg=%u,offset=%lli)", reg_num, reg_offset);
+ }
break;
case DW_OP_piece: // 0x93 1 ULEB128 size of piece addressed
s->Printf("DW_OP_piece(0x%x)", m_data.GetULEB128(&offset));
@@ -546,7 +633,7 @@
}
void
-DWARFExpression::SetRegisterKind (int reg_kind)
+DWARFExpression::SetRegisterKind (RegisterKind reg_kind)
{
m_reg_kind = reg_kind;
}
@@ -558,7 +645,7 @@
}
void
-DWARFExpression::GetDescription (Stream *s, lldb::DescriptionLevel level, addr_t location_list_base_addr) const
+DWARFExpression::GetDescription (Stream *s, lldb::DescriptionLevel level, addr_t location_list_base_addr, ABI *abi) const
{
if (IsLocationList())
{
@@ -578,7 +665,7 @@
addr_range.Dump(s, 0, 8);
s->PutChar('{');
uint32_t location_length = m_data.GetU16(&offset);
- DumpLocation (s, offset, location_length, level);
+ DumpLocation (s, offset, location_length, level, abi);
s->PutChar('}');
offset += location_length;
}
@@ -606,7 +693,7 @@
else
{
// We have a normal location that contains DW_OP location opcodes
- DumpLocation (s, 0, m_data.GetByteSize(), level);
+ DumpLocation (s, 0, m_data.GetByteSize(), level, abi);
}
}
@@ -791,7 +878,8 @@
DWARFExpression::DumpLocationForAddress (Stream *s,
lldb::DescriptionLevel level,
addr_t base_addr,
- addr_t address)
+ addr_t address,
+ ABI *abi)
{
uint32_t offset = 0;
uint32_t length = 0;
@@ -800,7 +888,7 @@
{
if (length > 0)
{
- DumpLocation(s, offset, length, level);
+ DumpLocation(s, offset, length, level, abi);
return true;
}
}
Modified: lldb/trunk/source/Plugins/Process/Utility/RegisterContextLLDB.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/Utility/RegisterContextLLDB.cpp?rev=138988&r1=138987&r2=138988&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Process/Utility/RegisterContextLLDB.cpp (original)
+++ lldb/trunk/source/Plugins/Process/Utility/RegisterContextLLDB.cpp Thu Sep 1 20:15:17 2011
@@ -815,7 +815,7 @@
UnwindPlan::Row::RegisterLocation unwindplan_regloc;
bool have_unwindplan_regloc = false;
- int unwindplan_registerkind = -1;
+ RegisterKind unwindplan_registerkind = (RegisterKind)-1;
if (m_fast_unwind_plan_sp)
{
Modified: lldb/trunk/source/Plugins/SymbolFile/DWARF/NameToDIE.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolFile/DWARF/NameToDIE.cpp?rev=138988&r1=138987&r2=138988&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/SymbolFile/DWARF/NameToDIE.cpp (original)
+++ lldb/trunk/source/Plugins/SymbolFile/DWARF/NameToDIE.cpp Thu Sep 1 20:15:17 2011
@@ -174,172 +174,184 @@
void
NameToDIE::Hash (Stream *s, SymbolFileDWARF *dwarf)
{
- if (m_collection.empty())
- return;
-
- typedef std::vector<HashEntryType> hash_collection;
- hash_collection hash_entries;
- collection::const_iterator pos, end = m_collection.end();
- for (pos = m_collection.begin(); pos != end; ++pos)
- {
- HashEntry entry = { dl_new_hash (pos->first), pos->second.cu_idx, pos->second.die_idx, pos->first };
- hash_entries.push_back (entry);
- }
-
-// const DataExtractor &debug_str_data = dwarf->get_debug_str_data();
-
- const uint32_t hash_entries_size = hash_entries.size();
-
- uint32_t i;
- DWARFDebugInfo *debug_info = dwarf->DebugInfo();
-
- uint32_t num_buckets;
- if (hash_entries_size > 1024)
- num_buckets = closest_power_2_less_than_n (hash_entries_size/16);
- else if (hash_entries_size > 128)
- num_buckets = closest_power_2_less_than_n (hash_entries_size/8);
- else
- num_buckets = closest_power_2_less_than_n (hash_entries_size/4);
- if (num_buckets == 0)
- num_buckets = 1;
-
- //for (uint32_t power_2 = 0x10; power_2 <= hash_entries_size; power_2 <<= 1)
- {
-// if (num_buckets > 0x10 && num_buckets > hash_entries_size)
-// break;
-
- typedef std::vector<uint32_t> uint32_array;
- typedef std::map<uint32_t, HashBucketEntryCStr> HashBucketEntryMap;
- std::vector<HashBucketEntryMap> hash_buckets;
- hash_buckets.resize(num_buckets);
-
- uint32_t bucket_entry_empties = 0;
- uint32_t bucket_entry_single = 0;
- uint32_t bucket_entry_collisions = 0;
- uint32_t names_entry_single = 0;
- uint32_t names_entry_collisions = 0;
- //StreamString hash_file_data(Stream::eBinary, dwarf->GetObjectFile()->GetAddressByteSize(), dwarf->GetObjectFile()->GetByteSize());
-
- // Write hash table header
-// hash_file_data.PutHex32 (1); // Version
-// hash_file_data.PutHex32 (4); // Sizeof bucket data
-// hash_file_data.PutHex32 (num_buckets);
-// hash_file_data.PutHex32 (0); // Flags
-
- s->Printf("HashHeader = { version = %u, bucket_info_size = %u, bucket_count = %u, flags = 0x%8.8x }\n", 1, (uint32_t)sizeof(HashBucketInfo), num_buckets, 0);
-
- for (i=0; i<hash_entries_size; ++i)
- {
- uint32_t hash = hash_entries[i].hash;
- uint32_t bucket_idx = hash_entries[i].hash % num_buckets;
- DWARFCompileUnit *cu = debug_info->GetCompileUnitAtIndex (hash_entries[i].cu_idx);
- cu->ExtractDIEsIfNeeded(false);
- DWARFDebugInfoEntry *die = cu->GetDIEAtIndexUnchecked(hash_entries[i].die_idx);
- hash_buckets[bucket_idx][hash].name_to_die[hash_entries[i].name].push_back(die->GetOffset());
- }
- uint32_t byte_size = sizeof(HashHeader); // Header
- uint32_t data_offset = 0;
- uint32_t num_bucket_entries;
- uint32_t bucket_data_size;
- // Now for each bucket we write the offset to the data for each bucket
- // The offset is currently a zero based offset from the end of this table
- // which is header.num_buckets * sizeof(uint32_t) long.
- for (i=0; i<num_buckets; ++i)
- {
- byte_size += sizeof(HashBucketInfo);
- HashBucketEntryMap &bucket_entry = hash_buckets[i];
- bucket_data_size = 0;
- HashBucketEntryMap::const_iterator pos, end = bucket_entry.end();
- for (pos = bucket_entry.begin(); pos != end; ++pos)
- {
- bucket_data_size += sizeof(pos->first) + pos->second.GetByteSize();
- }
- if (bucket_data_size > 0)
- {
- // Offset to bucket data
-// hash_file_data.PutHex32 (data_offset);
- s->Printf("bucket[%u] {0x%8.8x}\n", i, data_offset);
- data_offset += bucket_data_size;
- }
- else
- {
- // Invalid offset that indicates an empty bucket
-// hash_file_data.PutHex32 (UINT32_MAX);
- s->Printf("bucket[%u] {0xFFFFFFFF}\n", i);
- ++bucket_entry_empties;
- }
- }
-
- // Now we write the bucket data for each bucket that corresponds to each bucket
- // offset from above.
- data_offset = 0;
- uint32_t total_num_name_entries = 0;
- uint32_t total_num_bucket_entries = 0;
- uint32_t total_non_empty_buckets = 0;
- for (i=0; i<num_buckets; ++i)
- {
- HashBucketEntryMap &bucket_entry = hash_buckets[i];
- bucket_data_size = 0;
- if (bucket_entry.empty())
- continue;
-
- ++total_non_empty_buckets;
-
- s->Printf("0x%8.8x: BucketEntry:\n", data_offset, num_bucket_entries);
- bucket_data_size = 0;
- uint32_t num_bucket_entries = 0;
- HashBucketEntryMap::const_iterator pos, end = bucket_entry.end();
- for (pos = bucket_entry.begin(); pos != end; ++pos)
- {
- ++num_bucket_entries;
- uint32_t hash_data_len = pos->second.GetByteSize();
- s->Printf(" hash = 0x%8.8x, length = 0x%8.8x:\n", pos->first, hash_data_len);
-// hash_file_data.PutHex32 (pos->first); // Write the hash
-// hash_file_data.PutHex32 (hash_data_len); // The length of the data for this hash not including the length itself
-
- const HashBucketEntryCStr &hash_entry = pos->second;
- uint32_t num_name_entries = 0;
- NameToDIEArrayMap::const_iterator name_pos, name_end = hash_entry.name_to_die.end();
- for (name_pos = hash_entry.name_to_die.begin(); name_pos != name_end; ++name_pos)
- {
- ++num_name_entries;
- ++total_num_name_entries;
- s->Printf(" name = %p '%s'\n", name_pos->first, name_pos->first);
-// hash_file_data.PutHex32 (pos->first); // Write the hash
-// hash_file_data.PutHex32 (hash_data_len); // The length of the data for this hash not including the length itself
-
-
- const uint32_t num_dies = name_pos->second.size();
- s->Printf(" dies[%u] = { ", num_dies);
- for (uint32_t j=0; j < num_dies; ++j)
- s->Printf("0x%8.8x ", name_pos->second[j]);
- s->PutCString("}\n");
- }
- if (num_name_entries == 1)
- ++names_entry_single;
- else if (num_name_entries > 1)
- ++names_entry_collisions;
- bucket_data_size += sizeof(pos->first) + hash_data_len;
- }
- data_offset += bucket_data_size;
- byte_size += bucket_data_size;
- total_num_bucket_entries += num_bucket_entries;
- if (num_bucket_entries == 1)
- ++bucket_entry_single;
- else if (num_bucket_entries > 1)
- ++bucket_entry_collisions;
- }
-
- s->Printf ("Trying size of %u buckets, %u items:\n", num_buckets, hash_entries_size);
- s->Printf ("buckets: empty = %u (%%%f)\n", bucket_entry_empties, ((float)bucket_entry_empties/(float)num_buckets) * 100.0f);
- s->Printf ("buckets: single = %u\n", bucket_entry_single);
- s->Printf ("buckets: multiple = %u (avg = %f entries/bucket, avg = %f entries/non-empty bucket)\n",
- bucket_entry_collisions,
- (float)total_num_bucket_entries / (float)num_buckets,
- (float)total_num_bucket_entries / (float)total_non_empty_buckets);
- s->Printf ("names : single = %u of %u\n", names_entry_single, total_num_name_entries);
- s->Printf ("names : multiple = %u of %u\n", names_entry_collisions, total_num_name_entries);
- s->Printf ("total byte size = %u\n", byte_size);
- s->PutCString ("\n----------------------------------------------------------------------\n\n");
- }
+// if (m_collection.empty())
+// return;
+//
+// typedef std::vector<HashEntryType> hash_collection;
+// hash_collection hash_entries;
+// collection::const_iterator pos, end = m_collection.end();
+// for (pos = m_collection.begin(); pos != end; ++pos)
+// {
+// HashEntry entry = { dl_new_hash (pos->first), pos->second.cu_idx, pos->second.die_idx, pos->first };
+// hash_entries.push_back (entry);
+// }
+//
+//// const DataExtractor &debug_str_data = dwarf->get_debug_str_data();
+//
+//// uint32_t collisions = 0;
+//// for (i=1; i<hash_entries_size; ++i)
+//// {
+//// if (hash_entries[i-1].hash == hash_entries[i].hash &&
+//// hash_entries[i-1].name != hash_entries[i].name)
+//// ++collisions;
+//// }
+//// s->Printf("count = %u, collisions = %u\n", hash_entries_size, collisions);
+//
+//// for (i=0; i<hash_entries_size; ++i)
+//// s->Printf("0x%8.8x: cu = %8u, die = %8u, name = '%s'\n",
+//// hash_entries[i].hash,
+//// hash_entries[i].cu_idx,
+//// hash_entries[i].die_idx,
+//// hash_entries[i].name);
+// DWARFDebugInfo *debug_info = dwarf->DebugInfo();
+//
+// uint32_t num_buckets;
+// if (hash_entries_size > 1024)
+// num_buckets = closest_power_2_less_than_n (hash_entries_size/16);
+// else if (hash_entries_size > 128)
+// num_buckets = closest_power_2_less_than_n (hash_entries_size/8);
+// else
+// num_buckets = closest_power_2_less_than_n (hash_entries_size/4);
+// if (num_buckets == 0)
+// num_buckets = 1;
+//
+// //for (uint32_t power_2 = 0x10; power_2 <= hash_entries_size; power_2 <<= 1)
+// {
+//// if (num_buckets > 0x10 && num_buckets > hash_entries_size)
+//// break;
+//
+// typedef std::vector<uint32_t> uint32_array;
+// typedef std::map<uint32_t, HashBucketEntryCStr> HashBucketEntryMap;
+// std::vector<HashBucketEntryMap> hash_buckets;
+// hash_buckets.resize(num_buckets);
+//
+// uint32_t bucket_entry_empties = 0;
+// uint32_t bucket_entry_single = 0;
+// uint32_t bucket_entry_collisions = 0;
+// uint32_t names_entry_single = 0;
+// uint32_t names_entry_collisions = 0;
+// //StreamString hash_file_data(Stream::eBinary, dwarf->GetObjectFile()->GetAddressByteSize(), dwarf->GetObjectFile()->GetByteSize());
+//
+// // Write hash table header
+//// hash_file_data.PutHex32 (1); // Version
+//// hash_file_data.PutHex32 (4); // Sizeof bucket data
+//// hash_file_data.PutHex32 (num_buckets);
+//// hash_file_data.PutHex32 (0); // Flags
+//
+// s->Printf("HashHeader = { version = %u, bucket_info_size = %u, bucket_count = %u, flags = 0x%8.8x }\n", 1, (uint32_t)sizeof(HashBucketInfo), num_buckets, 0);
+//
+// for (i=0; i<hash_entries_size; ++i)
+// {
+// uint32_t hash = hash_entries[i].hash;
+// uint32_t bucket_idx = hash_entries[i].hash % num_buckets;
+// DWARFCompileUnit *cu = debug_info->GetCompileUnitAtIndex (hash_entries[i].cu_idx);
+// cu->ExtractDIEsIfNeeded(false);
+// DWARFDebugInfoEntry *die = cu->GetDIEAtIndexUnchecked(hash_entries[i].die_idx);
+// hash_buckets[bucket_idx][hash].name_to_die[hash_entries[i].name].push_back(die->GetOffset());
+// }
+// uint32_t byte_size = sizeof(HashHeader); // Header
+// uint32_t data_offset = 0;
+// uint32_t num_bucket_entries;
+// uint32_t bucket_data_size;
+// // Now for each bucket we write the offset to the data for each bucket
+// // The offset is currently a zero based offset from the end of this table
+// // which is header.num_buckets * sizeof(uint32_t) long.
+// for (i=0; i<num_buckets; ++i)
+// {
+// byte_size += sizeof(HashBucketInfo);
+// HashBucketEntryMap &bucket_entry = hash_buckets[i];
+// bucket_data_size = 0;
+// HashBucketEntryMap::const_iterator pos, end = bucket_entry.end();
+// for (pos = bucket_entry.begin(); pos != end; ++pos)
+// {
+// bucket_data_size += sizeof(pos->first) + pos->second.GetByteSize();
+// }
+// if (bucket_data_size > 0)
+// {
+// // Offset to bucket data
+//// hash_file_data.PutHex32 (data_offset);
+// s->Printf("bucket[%u] {0x%8.8x}\n", i, data_offset);
+// data_offset += bucket_data_size;
+// }
+// else
+// {
+// // Invalid offset that indicates an empty bucket
+//// hash_file_data.PutHex32 (UINT32_MAX);
+// s->Printf("bucket[%u] {0xFFFFFFFF}\n", i);
+// ++bucket_entry_empties;
+// }
+// }
+//
+// // Now we write the bucket data for each bucket that corresponds to each bucket
+// // offset from above.
+// data_offset = 0;
+// uint32_t total_num_name_entries = 0;
+// uint32_t total_num_bucket_entries = 0;
+// uint32_t total_non_empty_buckets = 0;
+// for (i=0; i<num_buckets; ++i)
+// {
+// HashBucketEntryMap &bucket_entry = hash_buckets[i];
+// bucket_data_size = 0;
+// if (bucket_entry.empty())
+// continue;
+//
+// ++total_non_empty_buckets;
+//
+// s->Printf("0x%8.8x: BucketEntry:\n", data_offset, num_bucket_entries);
+// bucket_data_size = 0;
+// uint32_t num_bucket_entries = 0;
+// HashBucketEntryMap::const_iterator pos, end = bucket_entry.end();
+// for (pos = bucket_entry.begin(); pos != end; ++pos)
+// {
+// ++num_bucket_entries;
+// uint32_t hash_data_len = pos->second.GetByteSize();
+// s->Printf(" hash = 0x%8.8x, length = 0x%8.8x:\n", pos->first, hash_data_len);
+//// hash_file_data.PutHex32 (pos->first); // Write the hash
+//// hash_file_data.PutHex32 (hash_data_len); // The length of the data for this hash not including the length itself
+//
+// const HashBucketEntryCStr &hash_entry = pos->second;
+// uint32_t num_name_entries = 0;
+// NameToDIEArrayMap::const_iterator name_pos, name_end = hash_entry.name_to_die.end();
+// for (name_pos = hash_entry.name_to_die.begin(); name_pos != name_end; ++name_pos)
+// {
+// ++num_name_entries;
+// ++total_num_name_entries;
+// s->Printf(" name = %p '%s'\n", name_pos->first, name_pos->first);
+//// hash_file_data.PutHex32 (pos->first); // Write the hash
+//// hash_file_data.PutHex32 (hash_data_len); // The length of the data for this hash not including the length itself
+//
+//
+// const uint32_t num_dies = name_pos->second.size();
+// s->Printf(" dies[%u] = { ", num_dies);
+// for (uint32_t j=0; j < num_dies; ++j)
+// s->Printf("0x%8.8x ", name_pos->second[j]);
+// s->PutCString("}\n");
+// }
+// if (num_name_entries == 1)
+// ++names_entry_single;
+// else if (num_name_entries > 1)
+// ++names_entry_collisions;
+// bucket_data_size += sizeof(pos->first) + hash_data_len;
+// }
+// data_offset += bucket_data_size;
+// byte_size += bucket_data_size;
+// total_num_bucket_entries += num_bucket_entries;
+// if (num_bucket_entries == 1)
+// ++bucket_entry_single;
+// else if (num_bucket_entries > 1)
+// ++bucket_entry_collisions;
+// }
+//
+// s->Printf ("Trying size of %u buckets, %u items:\n", num_buckets, hash_entries_size);
+// s->Printf ("buckets: empty = %u (%%%f)\n", bucket_entry_empties, ((float)bucket_entry_empties/(float)num_buckets) * 100.0f);
+// s->Printf ("buckets: single = %u\n", bucket_entry_single);
+// s->Printf ("buckets: multiple = %u (avg = %f entries/bucket, avg = %f entries/non-empty bucket)\n",
+// bucket_entry_collisions,
+// (float)total_num_bucket_entries / (float)num_buckets,
+// (float)total_num_bucket_entries / (float)total_non_empty_buckets);
+// s->Printf ("names : single = %u of %u\n", names_entry_single, total_num_name_entries);
+// s->Printf ("names : multiple = %u of %u\n", names_entry_collisions, total_num_name_entries);
+// s->Printf ("total byte size = %u\n", byte_size);
+// s->PutCString ("\n----------------------------------------------------------------------\n\n");
+// }
}
Modified: lldb/trunk/source/Symbol/DWARFCallFrameInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Symbol/DWARFCallFrameInfo.cpp?rev=138988&r1=138987&r2=138988&view=diff
==============================================================================
--- lldb/trunk/source/Symbol/DWARFCallFrameInfo.cpp (original)
+++ lldb/trunk/source/Symbol/DWARFCallFrameInfo.cpp Thu Sep 1 20:15:17 2011
@@ -26,7 +26,7 @@
using namespace lldb;
using namespace lldb_private;
-DWARFCallFrameInfo::DWARFCallFrameInfo(ObjectFile& objfile, SectionSP& section, uint32_t reg_kind, bool is_eh_frame) :
+DWARFCallFrameInfo::DWARFCallFrameInfo(ObjectFile& objfile, SectionSP& section, lldb::RegisterKind reg_kind, bool is_eh_frame) :
m_objfile (objfile),
m_section (section),
m_reg_kind (reg_kind), // The flavor of registers that the CFI data uses (enum RegisterKind)
Modified: lldb/trunk/source/Symbol/Variable.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Symbol/Variable.cpp?rev=138988&r1=138987&r2=138988&view=diff
==============================================================================
--- lldb/trunk/source/Symbol/Variable.cpp (original)
+++ lldb/trunk/source/Symbol/Variable.cpp Thu Sep 1 20:15:17 2011
@@ -18,6 +18,7 @@
#include "lldb/Symbol/SymbolContext.h"
#include "lldb/Symbol/Type.h"
#include "lldb/Symbol/VariableList.h"
+#include "lldb/Target/ABI.h"
#include "lldb/Target/Process.h"
#include "lldb/Target/RegisterContext.h"
#include "lldb/Target/StackFrame.h"
@@ -130,7 +131,13 @@
if (variable_sc.function)
loclist_base_addr = variable_sc.function->GetAddressRange().GetBaseAddress().GetFileAddress();
}
- m_location.GetDescription(s, lldb::eDescriptionLevelBrief, loclist_base_addr);
+ ABI *abi = NULL;
+ if (m_owner_scope)
+ {
+ Module *module = m_owner_scope->CalculateSymbolContextModule();
+ abi = ABI::FindPlugin (module->GetArchitecture()).get();
+ }
+ m_location.GetDescription(s, lldb::eDescriptionLevelBrief, loclist_base_addr, abi);
}
if (m_external)
@@ -463,6 +470,13 @@
CalculateSymbolContext(&sc);
if (sc.module_sp.get() == address.GetModule())
{
+ ABI *abi = NULL;
+ if (m_owner_scope)
+ {
+ Module *module = m_owner_scope->CalculateSymbolContextModule();
+ abi = ABI::FindPlugin (module->GetArchitecture()).get();
+ }
+
const addr_t file_addr = address.GetFileAddress();
if (sc.function)
{
@@ -474,14 +488,15 @@
return m_location.DumpLocationForAddress (s,
eDescriptionLevelBrief,
loclist_base_file_addr,
- file_addr);
+ file_addr,
+ abi);
}
}
return m_location.DumpLocationForAddress (s,
eDescriptionLevelBrief,
LLDB_INVALID_ADDRESS,
- file_addr);
-
+ file_addr,
+ abi);
}
}
return false;
More information about the lldb-commits
mailing list