summaryrefslogtreecommitdiffstats
path: root/lld/ELF/Memory.h
diff options
context:
space:
mode:
authorRui Ueyama <ruiu@google.com>2017-11-28 20:39:17 +0000
committerRui Ueyama <ruiu@google.com>2017-11-28 20:39:17 +0000
commit2017d52b54c181f2236e6c94d43f4aa43c30583f (patch)
tree9c6f4a2dab676e0725580e905e9a1d01be4287ac /lld/ELF/Memory.h
parent7b361b50d88fd142cada51b3545ae6c0803c44a5 (diff)
downloadbcm5719-llvm-2017d52b54c181f2236e6c94d43f4aa43c30583f.tar.gz
bcm5719-llvm-2017d52b54c181f2236e6c94d43f4aa43c30583f.zip
Move Memory.{h,cpp} to Common.
Differential Revision: https://reviews.llvm.org/D40571 llvm-svn: 319221
Diffstat (limited to 'lld/ELF/Memory.h')
-rw-r--r--lld/ELF/Memory.h67
1 files changed, 0 insertions, 67 deletions
diff --git a/lld/ELF/Memory.h b/lld/ELF/Memory.h
deleted file mode 100644
index 4000f2f9f1c..00000000000
--- a/lld/ELF/Memory.h
+++ /dev/null
@@ -1,67 +0,0 @@
-//===- Memory.h -------------------------------------------------*- C++ -*-===//
-//
-// The LLVM Linker
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file defines arena allocators.
-//
-// Almost all large objects, such as files, sections or symbols, are
-// used for the entire lifetime of the linker once they are created.
-// This usage characteristic makes arena allocator an attractive choice
-// where the entire linker is one arena. With an arena, newly created
-// objects belong to the arena and freed all at once when everything is done.
-// Arena allocators are efficient and easy to understand.
-// Most objects are allocated using the arena allocators defined by this file.
-//
-// If you edit this file, please edit COFF/Memory.h too.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLD_ELF_MEMORY_H
-#define LLD_ELF_MEMORY_H
-
-#include "llvm/Support/Allocator.h"
-#include "llvm/Support/StringSaver.h"
-#include <vector>
-
-namespace lld {
-namespace elf {
-
-// Use this arena if your object doesn't have a destructor.
-extern llvm::BumpPtrAllocator BAlloc;
-extern llvm::StringSaver Saver;
-
-// These two classes are hack to keep track of all
-// SpecificBumpPtrAllocator instances.
-struct SpecificAllocBase {
- SpecificAllocBase() { Instances.push_back(this); }
- virtual ~SpecificAllocBase() = default;
- virtual void reset() = 0;
- static std::vector<SpecificAllocBase *> Instances;
-};
-
-template <class T> struct SpecificAlloc : public SpecificAllocBase {
- void reset() override { Alloc.DestroyAll(); }
- llvm::SpecificBumpPtrAllocator<T> Alloc;
-};
-
-// Use this arena if your object has a destructor.
-// Your destructor will be invoked from freeArena().
-template <typename T, typename... U> T *make(U &&... Args) {
- static SpecificAlloc<T> Alloc;
- return new (Alloc.Alloc.Allocate()) T(std::forward<U>(Args)...);
-}
-
-inline void freeArena() {
- for (SpecificAllocBase *Alloc : SpecificAllocBase::Instances)
- Alloc->reset();
- BAlloc.Reset();
-}
-} // namespace elf
-} // namespace lld
-
-#endif
OpenPOWER on IntegriCloud