mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 04:02:41 +01:00
Register ARMAlgorithm::DoCleanup() to be called on exit to free the memory
occuplied by the cached ARMAlgorithm objects. llvm-svn: 100258
This commit is contained in:
parent
6fb3f169c8
commit
313183d079
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user