Debugger: DwarfImageDebugInfo cleanups.

- For simply looking up a type, we need neither the register map, nor
  the target interface, as those are only necessary for resolution of
  values and/or locations.
- Fix memory leak. A reference to the target interface was acquired in
  the type context's ctor, but not correspondingly released in the dtor.
This commit is contained in:
Rene Gollent
2014-12-11 22:17:31 -05:00
parent 5a4887a0db
commit 1b7af39a61
2 changed files with 6 additions and 25 deletions
@@ -430,27 +430,6 @@ DwarfImageDebugInfo::GetType(GlobalTypeCache* cache,
const BString& name, const TypeLookupConstraints& constraints,
Type*& _type)
{
int32 registerCount = fArchitecture->CountRegisters();
const Register* registers = fArchitecture->Registers();
// get the DWARF -> architecture register map
RegisterMap* fromDwarfMap;
status_t error = fArchitecture->GetDwarfRegisterMaps(NULL, &fromDwarfMap);
if (error != B_OK)
return error;
BReference<RegisterMap> fromDwarfMapReference(fromDwarfMap, true);
// create the target interface
BasicTargetInterface *inputInterface
= new(std::nothrow) BasicTargetInterface(registers, registerCount,
fromDwarfMap, fArchitecture, fDebuggerInterface);
if (inputInterface == NULL)
return B_NO_MEMORY;
BReference<BasicTargetInterface> inputInterfaceReference(inputInterface,
true);
// iterate through all compilation units
for (int32 i = 0; CompilationUnit* unit = fFile->CompilationUnitAt(i);
i++) {
@@ -489,8 +468,7 @@ DwarfImageDebugInfo::GetType(GlobalTypeCache* cache,
if (typeContext == NULL) {
typeContext = new(std::nothrow)
DwarfTypeContext(fArchitecture, fImageInfo.ImageID(), fFile,
unit, NULL, 0, 0, fRelocationDelta, inputInterface,
fromDwarfMap);
unit, NULL, 0, 0, fRelocationDelta, NULL, NULL);
if (typeContext == NULL)
return B_NO_MEMORY;
typeContextReference.SetTo(typeContext, true);
@@ -499,7 +477,7 @@ DwarfImageDebugInfo::GetType(GlobalTypeCache* cache,
// create the type
DwarfType* type;
DwarfTypeFactory typeFactory(typeContext, fTypeLookup, cache);
error = typeFactory.CreateType(typeEntry, type);
status_t error = typeFactory.CreateType(typeEntry, type);
if (error != B_OK)
continue;
+4 -1
View File
@@ -152,7 +152,8 @@ DwarfTypeContext::DwarfTypeContext(Architecture* architecture, image_id imageID,
{
fArchitecture->AcquireReference();
fFile->AcquireReference();
fTargetInterface->AcquireReference();
if (fTargetInterface != NULL)
fTargetInterface->AcquireReference();
}
@@ -160,6 +161,8 @@ DwarfTypeContext::~DwarfTypeContext()
{
fArchitecture->ReleaseReference();
fFile->ReleaseReference();
if (fTargetInterface != NULL)
fTargetInterface->ReleaseReference();
}