//===- 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; }