
## Purpose Export a small number of private LLVM symbols so that unit tests can still build/run when LLVM is built as a Windows DLL or a shared library with default hidden symbol visibility. ## Background The effort to build LLVM as a WIndows DLL is tracked in #109483. Additional context is provided in [this discourse](https://discourse.llvm.org/t/psa-annotating-llvm-public-interface/85307). Some LLVM unit tests use internal/private symbols that are not part of LLVM's public interface. When building LLVM as a DLL or shared library with default hidden symbol visibility, the symbols are not available when the unit test links against the DLL or shared library. This problem can be solved in one of two ways: 1. Export the private symbols from the DLL. 2. Link the unit tests against the intermediate static libraries instead of the final LLVM DLL. This PR applies option 1. Based on the discussion of option 2 in #145448, this option is preferable. ## Overview * Adds a new `LLVM_ABI_FOR_TEST` export macro, which is currently just an alias for `LLVM_ABI`. * Annotates the sub-set of symbols under `llvm/lib` that are required to get unit tests building using the new macro.
70 lines
2.3 KiB
C++
70 lines
2.3 KiB
C++
//===- llvm/CodeGen/DwarfStringPool.h - Dwarf Debug Framework ---*- C++ -*-===//
|
|
//
|
|
// 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
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_LIB_CODEGEN_ASMPRINTER_DWARFSTRINGPOOL_H
|
|
#define LLVM_LIB_CODEGEN_ASMPRINTER_DWARFSTRINGPOOL_H
|
|
|
|
#include "llvm/ADT/StringMap.h"
|
|
#include "llvm/ADT/StringRef.h"
|
|
#include "llvm/CodeGen/DwarfStringPoolEntry.h"
|
|
#include "llvm/Support/Allocator.h"
|
|
#include "llvm/Support/Compiler.h"
|
|
|
|
namespace llvm {
|
|
|
|
class AsmPrinter;
|
|
class MCSection;
|
|
class MCSymbol;
|
|
|
|
// Collection of strings for this unit and assorted symbols.
|
|
// A String->Symbol mapping of strings used by indirect
|
|
// references.
|
|
class DwarfStringPool {
|
|
using EntryTy = DwarfStringPoolEntry;
|
|
|
|
StringMap<EntryTy, BumpPtrAllocator &> Pool;
|
|
StringRef Prefix;
|
|
uint64_t NumBytes = 0;
|
|
unsigned NumIndexedStrings = 0;
|
|
bool ShouldCreateSymbols;
|
|
|
|
StringMapEntry<EntryTy> &getEntryImpl(AsmPrinter &Asm, StringRef Str);
|
|
|
|
public:
|
|
using EntryRef = DwarfStringPoolEntryRef;
|
|
|
|
LLVM_ABI_FOR_TEST DwarfStringPool(BumpPtrAllocator &A, AsmPrinter &Asm,
|
|
StringRef Prefix);
|
|
|
|
LLVM_ABI_FOR_TEST void emitStringOffsetsTableHeader(AsmPrinter &Asm,
|
|
MCSection *OffsetSection,
|
|
MCSymbol *StartSym);
|
|
|
|
LLVM_ABI_FOR_TEST void emit(AsmPrinter &Asm, MCSection *StrSection,
|
|
MCSection *OffsetSection = nullptr,
|
|
bool UseRelativeOffsets = false);
|
|
|
|
bool empty() const { return Pool.empty(); }
|
|
|
|
unsigned size() const { return Pool.size(); }
|
|
|
|
unsigned getNumIndexedStrings() const { return NumIndexedStrings; }
|
|
|
|
/// Get a reference to an entry in the string pool.
|
|
LLVM_ABI_FOR_TEST EntryRef getEntry(AsmPrinter &Asm, StringRef Str);
|
|
|
|
/// Same as getEntry, except that you can use EntryRef::getIndex to obtain a
|
|
/// unique ID of this entry (e.g., for use in indexed forms like
|
|
/// DW_FORM_strx).
|
|
LLVM_ABI_FOR_TEST EntryRef getIndexedEntry(AsmPrinter &Asm, StringRef Str);
|
|
};
|
|
|
|
} // end namespace llvm
|
|
|
|
#endif // LLVM_LIB_CODEGEN_ASMPRINTER_DWARFSTRINGPOOL_H
|