1//===- Memory.cpp ---------------------------------------------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#include "lld/Common/Memory.h"
10#include "lld/Common/CommonLinkerContext.h"
11
12using namespace llvm;
13using namespace lld;
14
15SpecificAllocBase *
16lld::SpecificAllocBase::getOrCreate(void *tag, size_t size, size_t align,
17 SpecificAllocBase *(&creator)(void *)) {
18 auto &instances = context().instances;
19 auto &instance = instances[tag];
20 if (instance == nullptr) {
21 void *storage = context().bAlloc.Allocate(Size: size, Alignment: align);
22 instance = creator(storage);
23 }
24 return instance;
25}
26