LLVM integrated assembler: Improving sections and symbols
In my previous post,
Sections
1 |
class MCSection { |
Previously, the MCSection
class used an enum calledSectionVariant
to differentiate between various object fileformats, such as ELF, Mach-O, and COFF. These subclasses are used incontexts where the section type is known at compile-time, such as inMCStreamer
and MCObjectTargetWriter
. Thischange eliminates the need for runtime type information (RTTI) checks,simplifying the codebase and improving efficiency.
Additionally, the storage for fragments' fixups (adjustments toaddresses and offsets) has been moved into the MCSection
class.
Symbols
1 |
class MCSymbol { |
Similar to sections, the MCSymbol
class also used adiscriminator enum, SymbolKind, to distinguish between object fileformats. This enum has also been removed.
Furthermore, the MCSymbol
class had anenum Contents
to specify the kind of symbol. This name wasa bit confusing, so it has been renamed to enum Kind
forclarity.
- regular symbol
- equated symbol
- common symbol
A special enumerator, SymContentsTargetCommon
, which wasused by AMDGPU for a specific type of common symbol, has also beenremoved. The functionality it provided is now handled by updatingELFObjectWriter
to respect the symbol's section index(SHN_AMDGPU_LDS
for this special AMDGPU symbol).
The previous blog post
- The
MCSymbol::IsUsed
flag was a workaround fordetecting a subset of invalid reassignments and isremoved. - The
MCSymbol::IsResolving
flag is added to detectcyclic dependencies of equated symbols.