| //===- Memory.cpp ---------------------------------------------------------===// | |
| // | |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | |
| // See https://llvm.org/LICENSE.txt for license information. | |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | |
| // | |
| //===----------------------------------------------------------------------===// | |
| #include "lld/Common/Memory.h" | |
| #include "lld/Common/CommonLinkerContext.h" | |
| using namespace llvm; | |
| using namespace lld; | |
| SpecificAllocBase * | |
| lld::SpecificAllocBase::getOrCreate(void *tag, size_t size, size_t align, | |
| SpecificAllocBase *(&creator)(void *)) { | |
| auto &instances = context().instances; | |
| auto &instance = instances[tag]; | |
| if (instance == nullptr) { | |
| void *storage = context().bAlloc.Allocate(size, align); | |
| instance = creator(storage); | |
| } | |
| return instance; | |
| } |