[llvm-commits] [llvm] r100258 - in /llvm/trunk/lib/Target/ARM/Disassembler: ARMDisassemblerCore.cpp ARMDisassemblerCore.h
Chris Lattner
clattner at apple.com
Fri Apr 2 18:38:16 PDT 2010
On Apr 2, 2010, at 6:09 PM, Johnny Chen wrote:
> Author: johnny
> Date: Fri Apr 2 20:09:47 2010
> New Revision: 100258
>
> URL: http://llvm.org/viewvc/llvm-project?rev=100258&view=rev
> Log:
> Register ARMAlgorithm::DoCleanup() to be called on exit to free the memory
> occuplied by the cached ARMAlgorithm objects.
Hi Johnny,
An atexit handler isn't a great way to handle this. Can't the memory be owned by the ARMAlgorithm object? Having a static vector also adds a static constructor and breaks threaded operation. Can it move into some other object?
-Chris
>
> Modified:
> llvm/trunk/lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp
> llvm/trunk/lib/Target/ARM/Disassembler/ARMDisassemblerCore.h
>
> Modified: llvm/trunk/lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp?rev=100258&r1=100257&r2=100258&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp (original)
> +++ llvm/trunk/lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp Fri Apr 2 20:09:47 2010
> @@ -3130,6 +3130,13 @@
> /// 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 @@
> 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
>
> Modified: llvm/trunk/lib/Target/ARM/Disassembler/ARMDisassemblerCore.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/Disassembler/ARMDisassemblerCore.h?rev=100258&r1=100257&r2=100258&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/ARM/Disassembler/ARMDisassemblerCore.h (original)
> +++ llvm/trunk/lib/Target/ARM/Disassembler/ARMDisassemblerCore.h Fri Apr 2 20:09:47 2010
> @@ -181,6 +181,9 @@
> /// 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
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list