mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-28 02:46:06 +00:00

This patch creates skeleton implementation for the DWARFLinkerParallel. It also integrates DWARFLinkerParallel into dsymutil and llvm-dwarfutil, so that empty DWARFLinker::link() can be called. To do this new command line option is added "--linker apple/llvm". Additionally it changes existing DWARFLinker interfaces/implementations to be compatible: use Error for error reporting for the DWARFStreamer, make DWARFFile to owner of referenced resources, other small refactorings. Differential Revision: https://reviews.llvm.org/D147952
68 lines
2.2 KiB
C++
68 lines
2.2 KiB
C++
//===- OutputSections.h -----------------------------------------*- 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_DWARFLINKERPARALLEL_OUTPUTSECTIONS_H
|
|
#define LLVM_LIB_DWARFLINKERPARALLEL_OUTPUTSECTIONS_H
|
|
|
|
#include "llvm/ADT/StringRef.h"
|
|
#include <array>
|
|
#include <cstdint>
|
|
|
|
namespace llvm {
|
|
namespace dwarflinker_parallel {
|
|
|
|
/// This class keeps offsets to the debug sections. Any object which is
|
|
/// supposed to be emitted into the debug section should use this class to
|
|
/// track debug sections offsets.
|
|
class OutputSections {
|
|
public:
|
|
/// List of tracked debug sections.
|
|
enum class DebugSectionKind : uint8_t {
|
|
DebugInfo = 0,
|
|
DebugLine,
|
|
DebugFrame,
|
|
DebugRange,
|
|
DebugRngLists,
|
|
DebugLoc,
|
|
DebugLocLists,
|
|
DebugARanges,
|
|
DebugAbbrev,
|
|
DebugMacinfo,
|
|
DebugMacro,
|
|
};
|
|
constexpr static size_t SectionKindsNum = 11;
|
|
|
|
/// Recognise the section name and match it with the DebugSectionKind.
|
|
static std::optional<DebugSectionKind> parseDebugSectionName(StringRef Name);
|
|
|
|
/// When objects(f.e. compile units) are glued into the single file,
|
|
/// the debug sections corresponding to the concrete object are assigned
|
|
/// with offsets inside the whole file. This method returns offset
|
|
/// to the \p SectionKind debug section, corresponding to this object.
|
|
uint64_t getStartOffset(DebugSectionKind SectionKind) const {
|
|
return Offsets[static_cast<
|
|
typename std::underlying_type<DebugSectionKind>::type>(SectionKind)];
|
|
}
|
|
|
|
/// Set offset to the start of specified \p SectionKind debug section,
|
|
/// corresponding to this object.
|
|
void setStartOffset(DebugSectionKind SectionKind, uint64_t Offset) {
|
|
Offsets[static_cast<typename std::underlying_type<DebugSectionKind>::type>(
|
|
SectionKind)] = Offset;
|
|
}
|
|
|
|
protected:
|
|
/// Offsets to the debug sections composing this object.
|
|
std::array<uint64_t, SectionKindsNum> Offsets = {0};
|
|
};
|
|
|
|
} // end of namespace dwarflinker_parallel
|
|
} // end namespace llvm
|
|
|
|
#endif // LLVM_LIB_DWARFLINKERPARALLEL_OUTPUTSECTIONS_H
|