> On Sep 9, 2015, at 2:47 PM, Ryan Brown <rib...@google.com> wrote: > > > On Tue, Sep 8, 2015 at 3:10 PM Enrico Granata via lldb-commits > <lldb-commits@lists.llvm.org <mailto:lldb-commits@lists.llvm.org>> wrote: > Author: enrico > Date: Tue Sep 8 17:09:19 2015 > New Revision: 247082 > > URL: http://llvm.org/viewvc/llvm-project?rev=247082&view=rev > <http://llvm.org/viewvc/llvm-project?rev=247082&view=rev> > Log: > Implement a Target::GetTypeSystemForLanguage API, as well as provide helpers > on the TypeSystem to get numeric types of specific sizes and signedness > > Modified: > lldb/trunk/include/lldb/Symbol/ClangASTContext.h > lldb/trunk/include/lldb/Symbol/TypeSystem.h > lldb/trunk/include/lldb/Target/Target.h > lldb/trunk/source/DataFormatters/CoreMedia.cpp > lldb/trunk/source/DataFormatters/VectorType.cpp > lldb/trunk/source/Target/Target.cpp > > Modified: lldb/trunk/include/lldb/Symbol/ClangASTContext.h > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/ClangASTContext.h?rev=247082&r1=247081&r2=247082&view=diff > > <http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/ClangASTContext.h?rev=247082&r1=247081&r2=247082&view=diff> > ============================================================================== > --- lldb/trunk/include/lldb/Symbol/ClangASTContext.h (original) > +++ lldb/trunk/include/lldb/Symbol/ClangASTContext.h Tue Sep 8 17:09:19 2015 > @@ -454,7 +454,7 @@ public: > //------------------------------------------------------------------ > > CompilerType > - GetIntTypeFromBitSize (size_t bit_size, bool is_signed) > + GetIntTypeFromBitSize (size_t bit_size, bool is_signed) override > { > return GetIntTypeFromBitSize (getASTContext(), bit_size, is_signed); > } > @@ -477,7 +477,7 @@ public: > //------------------------------------------------------------------ > > CompilerType > - GetFloatTypeFromBitSize (size_t bit_size) > + GetFloatTypeFromBitSize (size_t bit_size) override > { > return GetFloatTypeFromBitSize (getASTContext(), bit_size); > } > > Modified: lldb/trunk/include/lldb/Symbol/TypeSystem.h > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/TypeSystem.h?rev=247082&r1=247081&r2=247082&view=diff > > <http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/TypeSystem.h?rev=247082&r1=247081&r2=247082&view=diff> > ============================================================================== > --- lldb/trunk/include/lldb/Symbol/TypeSystem.h (original) > +++ lldb/trunk/include/lldb/Symbol/TypeSystem.h Tue Sep 8 17:09:19 2015 > @@ -400,6 +400,12 @@ public: > virtual CompilerType > GetBasicTypeFromAST (lldb::BasicType basic_type) = 0; > > + virtual CompilerType > + GetIntTypeFromBitSize (size_t bit_size, bool is_signed) = 0; > + > + virtual CompilerType > + GetFloatTypeFromBitSize (size_t bit_size) = 0; > + > > Why do these need to be here?
They are convenient to have when you are not transacting in terms of “int” or “float” but in terms of “I want a type that can represent a 32-bit unsigned integer value" > It seems like everything using these is clang specific. That might be because at the moment open-source LLDB does not have fully-baked type systems for non-clang languages I suspect that most languages have a notion of numeric types of a certain bit-size and signedness, so the API itself is not clang-specific whatsoever > > virtual bool > IsBeingDefined (void *type) = 0; > > > Modified: lldb/trunk/include/lldb/Target/Target.h > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Target/Target.h?rev=247082&r1=247081&r2=247082&view=diff > > <http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Target/Target.h?rev=247082&r1=247081&r2=247082&view=diff> > ============================================================================== > --- lldb/trunk/include/lldb/Target/Target.h (original) > +++ lldb/trunk/include/lldb/Target/Target.h Tue Sep 8 17:09:19 2015 > @@ -1230,6 +1230,14 @@ public: > ClangASTContext * > GetScratchClangASTContext(bool create_on_demand=true); > > + TypeSystem* > + GetTypeSystemForLanguage (lldb::LanguageType language); > + > + CompilerType > + GetBasicType (lldb::LanguageType language, > + lldb::BasicType basic_type, > + size_t size = 0); > + I am not sure the latter API (Target::GetBasicType) even needs to be there - my bad for checking that in The former one (Target::GetTypeSystemForLanguage) is what I truly meant to introduce > > Again, I'm not sure why this needs to be here when all uses are clang > specific. Same argument, the API has nothing clang-specific about it. The existing implementation/users are, but that is to be expected since clang is currently the only compiler that llvm.org LLDB is integrated with > If it needs to be here, can you add some documentation? Sure thing. Do you have any suggestions as to how to phrase it? > When writing a new TypeSystem, does it need to be added to > GetTypeSystemForLanguage? Seems about right > How would it be used? Do types from this "scratch" type system need to > interact with types from a real, symbol file backed type system? Define “interact" > What if the sizes of basic types aren't standardized and need to be lookup up > in the debug info? I assume this remark is for Target::GetBasicType(), and thus a moot point since I didn’t mean to check that declaration at all, and will remove it soon > > > > ClangASTImporter * > GetClangASTImporter(); > > > Modified: lldb/trunk/source/DataFormatters/CoreMedia.cpp > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/source/DataFormatters/CoreMedia.cpp?rev=247082&r1=247081&r2=247082&view=diff > > <http://llvm.org/viewvc/llvm-project/lldb/trunk/source/DataFormatters/CoreMedia.cpp?rev=247082&r1=247081&r2=247082&view=diff> > ============================================================================== > --- lldb/trunk/source/DataFormatters/CoreMedia.cpp (original) > +++ lldb/trunk/source/DataFormatters/CoreMedia.cpp Tue Sep 8 17:09:19 2015 > @@ -10,7 +10,7 @@ > #include "lldb/DataFormatters/CoreMedia.h" > > #include "lldb/Core/Flags.h" > -#include "lldb/Symbol/ClangASTContext.h" > +#include "lldb/Symbol/TypeSystem.h" > #include "lldb/Target/Target.h" > #include <inttypes.h> > > @@ -25,13 +25,13 @@ lldb_private::formatters::CMTimeSummaryP > if (!type.IsValid()) > return false; > > - ClangASTContext *ast_ctx = > valobj.GetExecutionContextRef().GetTargetSP()->GetScratchClangASTContext(); > - if (!ast_ctx) > + TypeSystem *type_system = > valobj.GetExecutionContextRef().GetTargetSP()->GetTypeSystemForLanguage(lldb::eLanguageTypeC); > + if (!type_system) > return false; > > // fetch children by offset to compensate for potential lack of debug > info > - auto int64_ty = ast_ctx->GetIntTypeFromBitSize(64, true); > - auto int32_ty = ast_ctx->GetIntTypeFromBitSize(32, true); > + auto int64_ty = type_system->GetIntTypeFromBitSize(64, true); > + auto int32_ty = type_system->GetIntTypeFromBitSize(32, true); > > auto value_sp(valobj.GetSyntheticChildAtOffset(0, int64_ty, true)); > auto timescale_sp(valobj.GetSyntheticChildAtOffset(8, int32_ty, true)); > > Modified: lldb/trunk/source/DataFormatters/VectorType.cpp > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/source/DataFormatters/VectorType.cpp?rev=247082&r1=247081&r2=247082&view=diff > > <http://llvm.org/viewvc/llvm-project/lldb/trunk/source/DataFormatters/VectorType.cpp?rev=247082&r1=247081&r2=247082&view=diff> > ============================================================================== > --- lldb/trunk/source/DataFormatters/VectorType.cpp (original) > +++ lldb/trunk/source/DataFormatters/VectorType.cpp Tue Sep 8 17:09:19 2015 > @@ -11,8 +11,8 @@ > > #include "lldb/Core/ValueObject.h" > #include "lldb/DataFormatters/FormattersHelpers.h" > -#include "lldb/Symbol/ClangASTContext.h" > #include "lldb/Symbol/CompilerType.h" > +#include "lldb/Symbol/TypeSystem.h" > > #include "lldb/Utility/LLDBAssert.h" > > @@ -22,85 +22,85 @@ using namespace lldb_private::formatters > > static CompilerType > GetCompilerTypeForFormat (lldb::Format format, > - CompilerType element_type, > - ClangASTContext *ast_ctx) > + CompilerType element_type, > + TypeSystem *type_system) > { > - lldbassert(ast_ctx && "ast_ctx needs to be not NULL"); > + lldbassert(type_system && "type_system needs to be not NULL"); > > switch (format) > { > case lldb::eFormatAddressInfo: > case lldb::eFormatPointer: > - return ast_ctx->GetPointerSizedIntType(false); > + return > type_system->GetIntTypeFromBitSize(8*type_system->GetPointerByteSize(), > false); > > case lldb::eFormatBoolean: > - return ast_ctx->GetBasicType(lldb::eBasicTypeBool); > + return type_system->GetBasicTypeFromAST(lldb::eBasicTypeBool); > > case lldb::eFormatBytes: > case lldb::eFormatBytesWithASCII: > case lldb::eFormatChar: > case lldb::eFormatCharArray: > case lldb::eFormatCharPrintable: > - return ast_ctx->GetBasicType(lldb::eBasicTypeChar); > + return type_system->GetBasicTypeFromAST(lldb::eBasicTypeChar); > > case lldb::eFormatComplex /* lldb::eFormatComplexFloat */: > - return ast_ctx->GetBasicType(lldb::eBasicTypeFloatComplex); > + return > type_system->GetBasicTypeFromAST(lldb::eBasicTypeFloatComplex); > > case lldb::eFormatCString: > - return > ast_ctx->GetBasicType(lldb::eBasicTypeChar).GetPointerType(); > + return > type_system->GetBasicTypeFromAST(lldb::eBasicTypeChar).GetPointerType(); > > case lldb::eFormatFloat: > - return ast_ctx->GetBasicType(lldb::eBasicTypeFloat); > + return type_system->GetBasicTypeFromAST(lldb::eBasicTypeFloat); > > case lldb::eFormatHex: > case lldb::eFormatHexUppercase: > case lldb::eFormatOctal: > - return ast_ctx->GetBasicType(lldb::eBasicTypeInt); > + return type_system->GetBasicTypeFromAST(lldb::eBasicTypeInt); > > case lldb::eFormatHexFloat: > - return ast_ctx->GetBasicType(lldb::eBasicTypeFloat); > + return type_system->GetBasicTypeFromAST(lldb::eBasicTypeFloat); > > case lldb::eFormatUnicode16: > case lldb::eFormatUnicode32: > > case lldb::eFormatUnsigned: > - return ast_ctx->GetBasicType(lldb::eBasicTypeUnsignedInt); > + return > type_system->GetBasicTypeFromAST(lldb::eBasicTypeUnsignedInt); > > case lldb::eFormatVectorOfChar: > - return ast_ctx->GetBasicType(lldb::eBasicTypeChar); > + return type_system->GetBasicTypeFromAST(lldb::eBasicTypeChar); > > case lldb::eFormatVectorOfFloat32: > - return ast_ctx->GetFloatTypeFromBitSize(32); > + return type_system->GetFloatTypeFromBitSize(32); > > case lldb::eFormatVectorOfFloat64: > - return ast_ctx->GetFloatTypeFromBitSize(64); > + return type_system->GetFloatTypeFromBitSize(64); > > case lldb::eFormatVectorOfSInt16: > - return ast_ctx->GetIntTypeFromBitSize(16, true); > + return type_system->GetIntTypeFromBitSize(16, true); > > case lldb::eFormatVectorOfSInt32: > - return ast_ctx->GetIntTypeFromBitSize(32, true); > + return type_system->GetIntTypeFromBitSize(32, true); > > case lldb::eFormatVectorOfSInt64: > - return ast_ctx->GetIntTypeFromBitSize(64, true); > + return type_system->GetIntTypeFromBitSize(64, true); > > case lldb::eFormatVectorOfSInt8: > - return ast_ctx->GetIntTypeFromBitSize(8, true); > + return type_system->GetIntTypeFromBitSize(8, true); > > case lldb::eFormatVectorOfUInt128: > - return ast_ctx->GetIntTypeFromBitSize(128, false); > + return type_system->GetIntTypeFromBitSize(128, false); > > case lldb::eFormatVectorOfUInt16: > - return ast_ctx->GetIntTypeFromBitSize(16, false); > + return type_system->GetIntTypeFromBitSize(16, false); > > case lldb::eFormatVectorOfUInt32: > - return ast_ctx->GetIntTypeFromBitSize(32, false); > + return type_system->GetIntTypeFromBitSize(32, false); > > case lldb::eFormatVectorOfUInt64: > - return ast_ctx->GetIntTypeFromBitSize(64, false); > + return type_system->GetIntTypeFromBitSize(64, false); > > case lldb::eFormatVectorOfUInt8: > - return ast_ctx->GetIntTypeFromBitSize(8, false); > + return type_system->GetIntTypeFromBitSize(8, false); > > case lldb::eFormatDefault: > return element_type; > @@ -113,7 +113,7 @@ GetCompilerTypeForFormat (lldb::Format f > case lldb::eFormatOSType: > case lldb::eFormatVoid: > default: > - return ast_ctx->GetIntTypeFromBitSize(8, false); > + return type_system->GetIntTypeFromBitSize(8, false); > } > } > > @@ -232,7 +232,10 @@ namespace lldb_private { > CompilerType parent_type(m_backend.GetCompilerType()); > CompilerType element_type; > parent_type.IsVectorType(&element_type, nullptr); > - m_child_type = ::GetCompilerTypeForFormat(m_parent_format, > element_type, > llvm::dyn_cast_or_null<ClangASTContext>(parent_type.GetTypeSystem())); > + TargetSP target_sp(m_backend.GetTargetSP()); > + m_child_type = ::GetCompilerTypeForFormat(m_parent_format, > + element_type, > + target_sp ? > target_sp->GetTypeSystemForLanguage(lldb::eLanguageTypeC) : nullptr); > m_num_children = ::CalculateNumChildren(parent_type, > m_child_type); > m_item_format = GetItemFormatForFormat(m_parent_format, > > Modified: lldb/trunk/source/Target/Target.cpp > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/Target.cpp?rev=247082&r1=247081&r2=247082&view=diff > > <http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/Target.cpp?rev=247082&r1=247081&r2=247082&view=diff> > ============================================================================== > --- lldb/trunk/source/Target/Target.cpp (original) > +++ lldb/trunk/source/Target/Target.cpp Tue Sep 8 17:09:19 2015 > @@ -1906,6 +1906,27 @@ Target::GetScratchClangASTContext(bool c > return m_scratch_ast_context_ap.get(); > } > > +TypeSystem* > +Target::GetTypeSystemForLanguage (lldb::LanguageType language) > +{ > + switch (language) > + { > + case lldb::eLanguageTypeC: > + case lldb::eLanguageTypeC11: > + case lldb::eLanguageTypeC89: > + case lldb::eLanguageTypeC99: > + case lldb::eLanguageTypeC_plus_plus: > + case lldb::eLanguageTypeC_plus_plus_03: > + case lldb::eLanguageTypeC_plus_plus_11: > + case lldb::eLanguageTypeC_plus_plus_14: > + case lldb::eLanguageTypeObjC: > + case lldb::eLanguageTypeObjC_plus_plus: > + return GetScratchClangASTContext(true); > + default: > + return nullptr; > + } > +} > + > ClangASTImporter * > Target::GetClangASTImporter() > { > > > _______________________________________________ > lldb-commits mailing list > lldb-commits@lists.llvm.org <mailto:lldb-commits@lists.llvm.org> > http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits > <http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits> Thanks, - Enrico 📩 egranata@.com ☎️ 27683
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits