| //===- 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" |
| 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); |