Register ARMAlgorithm::DoCleanup() to be called on exit to free the memory

occuplied by the cached ARMAlgorithm objects.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@100258 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Johnny Chen 2010-04-03 01:09:47 +00:00
parent d3a5fa8e96
commit b35ae7f7d6
2 changed files with 13 additions and 1 deletions

View File

@ -3130,6 +3130,13 @@ static const DisassembleFP FuncPtrs[] = {
/// Algorithms - Algorithms stores a map from Format to ARMAlgorithm*.
static std::vector<ARMAlgorithm*> Algorithms;
/// DoCleanup - Do cleanup of Algorithms upon exit.
void ARMAlgorithm::DoCleanup() {
for (unsigned i = 0; i < array_lengthof(FuncPtrs); ++i)
if (Algorithms[i])
delete Algorithms[i];
}
/// GetInstance - GetInstance returns an instance of ARMAlgorithm given the
/// encoding Format. API clients should not free up the returned instance.
ARMAlgorithm *ARMAlgorithm::GetInstance(ARMFormat Format) {
@ -3141,11 +3148,13 @@ ARMAlgorithm *ARMAlgorithm::GetInstance(ARMFormat Format) {
Algorithms[i] = new ARMAlgorithm(FuncPtrs[i]);
else
Algorithms[i] = NULL;
// Register cleanup routine.
atexit(DoCleanup);
}
return Algorithms[Format];
}
/// BuildIt - BuildIt performs the build step for this ARM Basic MC Builder.
/// The general idea is to set the Opcode for the MCInst, followed by adding
/// the appropriate MCOperands to the MCInst. ARM Basic MC Builder delegates

View File

@ -181,6 +181,9 @@ public:
/// encoding Format. API clients should not free up the returned instance.
static ARMAlgorithm *GetInstance(ARMFormat Format);
/// DoCleanup - DoCleanup is meant to be called upon exit as an exit handler.
static void DoCleanup();
/// Return true if this algorithm successfully disassembles the instruction.
/// NumOpsAdded is updated to reflect the number of operands added by the
/// algorithm. NumOpsAdded may be less than NumOps, in which case, there are