mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-10-10 04:44:53 +00:00
Fix a few typos in lld/ELF to cycle bots
This commit is contained in:
parent
1a74645a70
commit
5976a3f5aa
@ -61,7 +61,7 @@ static bool isADRP(uint32_t instr) {
|
||||
// Instructions appear in order of appearance starting from table in
|
||||
// C4.1.3 Loads and Stores.
|
||||
|
||||
// All loads and stores have 1 (at bit postion 27), (0 at bit position 25).
|
||||
// All loads and stores have 1 (at bit position 27), (0 at bit position 25).
|
||||
// | op0 x op1 (2) | 1 op2 0 op3 (2) | x | op4 (5) | xxxx | op5 (2) | x (10) |
|
||||
static bool isLoadStoreClass(uint32_t instr) {
|
||||
return (instr & 0x0a000000) == 0x08000000;
|
||||
@ -619,7 +619,7 @@ AArch64Err843419Patcher::patchInputSectionDescription(
|
||||
//
|
||||
// PostConditions:
|
||||
// Returns true if at least one patch was added. The addresses of the
|
||||
// Ouptut and Input Sections may have been changed.
|
||||
// Output and Input Sections may have been changed.
|
||||
// Returns false if no patches were required and no changes were made.
|
||||
bool AArch64Err843419Patcher::createFixes() {
|
||||
if (!initialized)
|
||||
|
@ -97,7 +97,7 @@ public:
|
||||
|
||||
// Return true if the half-word, when taken as the first of a pair of halfwords
|
||||
// is the first half of a 32-bit instruction.
|
||||
// Reference from ARM Architecure Reference Manual ARMv7-A and ARMv7-R edition
|
||||
// Reference from ARM Architecture Reference Manual ARMv7-A and ARMv7-R edition
|
||||
// section A6.3: 32-bit Thumb instruction encoding
|
||||
// | HW1 | HW2 |
|
||||
// | 1 1 1 | op1 (2) | op2 (7) | x (4) |op| x (15) |
|
||||
@ -108,7 +108,7 @@ static bool is32bitInstruction(uint16_t hw) {
|
||||
return (hw & 0xe000) == 0xe000 && (hw & 0x1800) != 0x0000;
|
||||
}
|
||||
|
||||
// Reference from ARM Architecure Reference Manual ARMv7-A and ARMv7-R edition
|
||||
// Reference from ARM Architecture Reference Manual ARMv7-A and ARMv7-R edition
|
||||
// section A6.3.4 Branches and miscellaneous control.
|
||||
// | HW1 | HW2 |
|
||||
// | 1 1 1 | 1 0 | op (7) | x (4) | 1 | op1 (3) | op2 (4) | imm8 (8) |
|
||||
|
@ -827,7 +827,7 @@ void PPC64::relocateOne(uint8_t *loc, RelType type, uint64_t val) const {
|
||||
case R_PPC64_ADDR16_LO:
|
||||
case R_PPC64_REL16_LO:
|
||||
case R_PPC64_TPREL16_LO:
|
||||
// When the high-adjusted part of a toc relocation evalutes to 0, it is
|
||||
// When the high-adjusted part of a toc relocation evaluates to 0, it is
|
||||
// changed into a nop. The lo part then needs to be updated to use the
|
||||
// toc-pointer register r2, as the base register.
|
||||
if (config->tocOptimize && shouldTocOptimize && ha(val) == 0) {
|
||||
@ -849,7 +849,7 @@ void PPC64::relocateOne(uint8_t *loc, RelType type, uint64_t val) const {
|
||||
uint16_t mask = isDQFormInstruction(insn) ? 0xf : 0x3;
|
||||
checkAlignment(loc, lo(val), mask + 1, originalType);
|
||||
if (config->tocOptimize && shouldTocOptimize && ha(val) == 0) {
|
||||
// When the high-adjusted part of a toc relocation evalutes to 0, it is
|
||||
// When the high-adjusted part of a toc relocation evaluates to 0, it is
|
||||
// changed into a nop. The lo part then needs to be updated to use the toc
|
||||
// pointer register r2, as the base register.
|
||||
if (isInstructionUpdateForm(insn))
|
||||
@ -990,7 +990,7 @@ void PPC64::relaxTlsGdToIe(uint8_t *loc, RelType type, uint64_t val) const {
|
||||
// The prologue for a split-stack function is expected to look roughly
|
||||
// like this:
|
||||
// .Lglobal_entry_point:
|
||||
// # TOC pointer initalization.
|
||||
// # TOC pointer initialization.
|
||||
// ...
|
||||
// .Llocal_entry_point:
|
||||
// # load the __private_ss member of the threads tcbhead.
|
||||
|
@ -16,9 +16,9 @@
|
||||
///
|
||||
/// Definitions:
|
||||
/// * Cluster
|
||||
/// * An ordered list of input sections which are layed out as a unit. At the
|
||||
/// * An ordered list of input sections which are laid out as a unit. At the
|
||||
/// beginning of the algorithm each input section has its own cluster and
|
||||
/// the weight of the cluster is the sum of the weight of all incomming
|
||||
/// the weight of the cluster is the sum of the weight of all incoming
|
||||
/// edges.
|
||||
/// * Call-Chain Clustering (C³) Heuristic
|
||||
/// * Defines when and how clusters are combined. Pick the highest weighted
|
||||
@ -26,7 +26,7 @@
|
||||
/// penalize it too much.
|
||||
/// * Density
|
||||
/// * The weight of the cluster divided by the size of the cluster. This is a
|
||||
/// proxy for the ammount of execution time spent per byte of the cluster.
|
||||
/// proxy for the amount of execution time spent per byte of the cluster.
|
||||
///
|
||||
/// It does so given a call graph profile by the following:
|
||||
/// * Build a weighted call graph from the call graph profile
|
||||
@ -86,7 +86,7 @@ private:
|
||||
std::vector<const InputSectionBase *> sections;
|
||||
};
|
||||
|
||||
// Maximum ammount the combined cluster density can be worse than the original
|
||||
// Maximum amount the combined cluster density can be worse than the original
|
||||
// cluster to consider merging.
|
||||
constexpr int MAX_DENSITY_DEGRADATION = 8;
|
||||
|
||||
|
@ -239,7 +239,7 @@ struct Configuration {
|
||||
int32_t splitStackAdjustSize;
|
||||
|
||||
// The following config options do not directly correspond to any
|
||||
// particualr command line options.
|
||||
// particular command line options.
|
||||
|
||||
// True if we need to pass through relocations in input files to the
|
||||
// output file. Usually false because we consume relocations.
|
||||
|
@ -1370,7 +1370,7 @@ static void handleUndefined(Symbol *sym) {
|
||||
sym->fetch();
|
||||
}
|
||||
|
||||
// As an extention to GNU linkers, lld supports a variant of `-u`
|
||||
// As an extension to GNU linkers, lld supports a variant of `-u`
|
||||
// which accepts wildcard patterns. All symbols that match a given
|
||||
// pattern are handled as if they were given by `-u`.
|
||||
static void handleUndefinedGlob(StringRef arg) {
|
||||
|
@ -741,7 +741,7 @@ static uint32_t readAndFeatures(ObjFile<ELFT> *obj, ArrayRef<uint8_t> data) {
|
||||
|
||||
if (type == featureAndType) {
|
||||
// We found a FEATURE_1_AND field. There may be more than one of these
|
||||
// in a .note.gnu.propery section, for a relocatable object we
|
||||
// in a .note.gnu.property section, for a relocatable object we
|
||||
// accumulate the bits set.
|
||||
featuresSet |= read32le(desc.data() + 8);
|
||||
}
|
||||
|
@ -72,7 +72,7 @@ InputSectionBase::InputSectionBase(InputFile *file, uint64_t flags,
|
||||
areRelocsRela = false;
|
||||
|
||||
// The ELF spec states that a value of 0 means the section has
|
||||
// no alignment constraits.
|
||||
// no alignment constraints.
|
||||
uint32_t v = std::max<uint32_t>(alignment, 1);
|
||||
if (!isPowerOf2_64(v))
|
||||
fatal(toString(this) + ": sh_addralign is not a power of 2");
|
||||
@ -469,7 +469,7 @@ void InputSection::copyRelocations(uint8_t *buf, ArrayRef<RelTy> rels) {
|
||||
target->getRelExpr(type, sym, bufLoc) == R_MIPS_GOTREL) {
|
||||
// Some MIPS relocations depend on "gp" value. By default,
|
||||
// this value has 0x7ff0 offset from a .got section. But
|
||||
// relocatable files produced by a complier or a linker
|
||||
// relocatable files produced by a compiler or a linker
|
||||
// might redefine this default value and we must use it
|
||||
// for a calculation of the relocation result. When we
|
||||
// generate EXE or DSO it's trivial. Generating a relocatable
|
||||
@ -757,7 +757,7 @@ static uint64_t getRelocTargetVA(const InputFile *file, RelType type, int64_t a,
|
||||
case R_PPC32_PLTREL:
|
||||
// R_PPC_PLTREL24 uses the addend (usually 0 or 0x8000) to indicate r30
|
||||
// stores _GLOBAL_OFFSET_TABLE_ or .got2+0x8000. The addend is ignored for
|
||||
// target VA compuation.
|
||||
// target VA computation.
|
||||
return sym.getPltVA() - p;
|
||||
case R_PPC64_CALL: {
|
||||
uint64_t symVA = sym.getVA(a);
|
||||
|
@ -116,7 +116,7 @@ struct SymbolAssignment : BaseCommand {
|
||||
unsigned size;
|
||||
};
|
||||
|
||||
// Linker scripts allow additional constraints to be put on ouput sections.
|
||||
// Linker scripts allow additional constraints to be put on output sections.
|
||||
// If an output section is marked as ONLY_IF_RO, the section is created
|
||||
// only if its input sections are read-only. Likewise, an output section
|
||||
// with ONLY_IF_RW is created if all input sections are RW.
|
||||
|
@ -332,7 +332,7 @@ template <class ELFT> void markLive() {
|
||||
return;
|
||||
}
|
||||
|
||||
// Otheriwse, do mark-sweep GC.
|
||||
// Otherwise, do mark-sweep GC.
|
||||
//
|
||||
// The -gc-sections option works only for SHF_ALLOC sections
|
||||
// (sections that are memory-mapped at runtime). So we can
|
||||
|
@ -298,7 +298,7 @@ defm print_icf_sections: B<"print-icf-sections",
|
||||
"Do not list identical folded sections (default)">;
|
||||
|
||||
defm print_symbol_order: Eq<"print-symbol-order",
|
||||
"Print a symbol order specified by --call-graph-ordering-file into the speficied file">;
|
||||
"Print a symbol order specified by --call-graph-ordering-file into the specified file">;
|
||||
|
||||
def pop_state: F<"pop-state">,
|
||||
HelpText<"Undo the effect of -push-state">;
|
||||
@ -420,7 +420,7 @@ def z: JoinedOrSeparate<["-"], "z">, MetaVarName<"<option>">,
|
||||
HelpText<"Linker option extensions">;
|
||||
|
||||
def visual_studio_diagnostics_format : F<"vs-diagnostics">,
|
||||
HelpText<"Format diagnostics for Visual Studio compatiblity">;
|
||||
HelpText<"Format diagnostics for Visual Studio compatibility">;
|
||||
|
||||
// Aliases
|
||||
def: Separate<["-"], "f">, Alias<auxiliary>, HelpText<"Alias for --auxiliary">;
|
||||
@ -478,7 +478,7 @@ def lto_O: J<"lto-O">, MetaVarName<"<opt-level>">,
|
||||
def lto_partitions: J<"lto-partitions=">,
|
||||
HelpText<"Number of LTO codegen partitions">;
|
||||
def lto_cs_profile_generate: F<"lto-cs-profile-generate">,
|
||||
HelpText<"Perform context senstive PGO instrumentation">;
|
||||
HelpText<"Perform context sensitive PGO instrumentation">;
|
||||
def lto_cs_profile_file: J<"lto-cs-profile-file=">,
|
||||
HelpText<"Context sensitive profile file path">;
|
||||
def lto_obj_path_eq: J<"lto-obj-path=">;
|
||||
|
@ -297,7 +297,7 @@ template <class ELFT> void OutputSection::writeTo(uint8_t *buf) {
|
||||
if (type == SHT_NOBITS)
|
||||
return;
|
||||
|
||||
// If -compress-debug-section is specified and if this is a debug seciton,
|
||||
// If -compress-debug-section is specified and if this is a debug section,
|
||||
// we've already compressed section contents. If that's the case,
|
||||
// just write it down.
|
||||
if (!compressedData.empty()) {
|
||||
|
@ -538,7 +538,7 @@ static void replaceWithDefined(Symbol &sym, SectionBase *sec, uint64_t value,
|
||||
//
|
||||
// As you can see in this function, we create a copy relocation for the
|
||||
// dynamic linker, and the relocation contains not only symbol name but
|
||||
// various other informtion about the symbol. So, such attributes become a
|
||||
// various other information about the symbol. So, such attributes become a
|
||||
// part of the ABI.
|
||||
//
|
||||
// Note for application developers: I can give you a piece of advice if
|
||||
@ -553,7 +553,7 @@ static void replaceWithDefined(Symbol &sym, SectionBase *sec, uint64_t value,
|
||||
// reserved in .bss unless you recompile the main program. That means they
|
||||
// are likely to overlap with other data that happens to be laid out next
|
||||
// to the variable in .bss. This kind of issue is sometimes very hard to
|
||||
// debug. What's a solution? Instead of exporting a varaible V from a DSO,
|
||||
// debug. What's a solution? Instead of exporting a variable V from a DSO,
|
||||
// define an accessor getV().
|
||||
template <class ELFT> static void addCopyRelSymbol(SharedSymbol &ss) {
|
||||
// Copy relocation against zero-sized symbol doesn't make sense.
|
||||
@ -1222,9 +1222,9 @@ static void scanReloc(InputSectionBase &sec, OffsetGetter &getOffset, RelTy *&i,
|
||||
//
|
||||
// If we know that a PLT entry will be resolved within the same ELF module, we
|
||||
// can skip PLT access and directly jump to the destination function. For
|
||||
// example, if we are linking a main exectuable, all dynamic symbols that can
|
||||
// example, if we are linking a main executable, all dynamic symbols that can
|
||||
// be resolved within the executable will actually be resolved that way at
|
||||
// runtime, because the main exectuable is always at the beginning of a search
|
||||
// runtime, because the main executable is always at the beginning of a search
|
||||
// list. We can leverage that fact.
|
||||
if (!sym.isPreemptible && (!sym.isGnuIFunc() || config->zIfuncNoplt)) {
|
||||
if (expr == R_GOT_PC && !isAbsoluteValue(sym)) {
|
||||
|
@ -215,7 +215,7 @@ void SymbolTable::assignExactVersion(SymbolVersion ver, uint16_t versionId,
|
||||
}
|
||||
|
||||
void SymbolTable::assignWildcardVersion(SymbolVersion ver, uint16_t versionId) {
|
||||
// Exact matching takes precendence over fuzzy matching,
|
||||
// Exact matching takes precedence over fuzzy matching,
|
||||
// so we set a version to a symbol only if no version has been assigned
|
||||
// to the symbol. This behavior is compatible with GNU.
|
||||
for (Symbol *sym : findAllByVersion(ver))
|
||||
|
@ -310,7 +310,7 @@ public:
|
||||
// definitions for this particular case.
|
||||
//
|
||||
// Common symbols represent variable definitions without initializations.
|
||||
// The compiler creates common symbols when it sees varaible definitions
|
||||
// The compiler creates common symbols when it sees variable definitions
|
||||
// without initialization (you can suppress this behavior and let the
|
||||
// compiler create a regular defined symbol by -fno-common).
|
||||
//
|
||||
|
@ -893,7 +893,7 @@ void MipsGotSection::build() {
|
||||
std::swap(gots, mergedGots);
|
||||
|
||||
// Reduce number of "reloc-only" entries in the primary GOT
|
||||
// by substracting "global" entries exist in the primary GOT.
|
||||
// by subtracting "global" entries in the primary GOT.
|
||||
primGot = &gots.front();
|
||||
primGot->relocs.remove_if([&](const std::pair<Symbol *, size_t> &p) {
|
||||
return primGot->global.count(p.first);
|
||||
@ -1079,7 +1079,7 @@ void MipsGotSection::writeTo(uint8_t *buf) {
|
||||
// On PowerPC the .plt section is used to hold the table of function addresses
|
||||
// instead of the .got.plt, and the type is SHT_NOBITS similar to a .bss
|
||||
// section. I don't know why we have a BSS style type for the section but it is
|
||||
// consitent across both 64-bit PowerPC ABIs as well as the 32-bit PowerPC ABI.
|
||||
// consistent across both 64-bit PowerPC ABIs as well as the 32-bit PowerPC ABI.
|
||||
GotPltSection::GotPltSection()
|
||||
: SyntheticSection(SHF_ALLOC | SHF_WRITE, SHT_PROGBITS, config->wordsize,
|
||||
".got.plt") {
|
||||
@ -1333,7 +1333,7 @@ template <class ELFT> void DynamicSection<ELFT>::finalizeContents() {
|
||||
if (dtFlags1)
|
||||
addInt(DT_FLAGS_1, dtFlags1);
|
||||
|
||||
// DT_DEBUG is a pointer to debug informaion used by debuggers at runtime. We
|
||||
// DT_DEBUG is a pointer to debug information used by debuggers at runtime. We
|
||||
// need it for each process, so we don't write it for DSOs. The loader writes
|
||||
// the pointer into this entry.
|
||||
//
|
||||
@ -1378,7 +1378,7 @@ template <class ELFT> void DynamicSection<ELFT>::finalizeContents() {
|
||||
// iplt relocations. It is possible to have only iplt relocations in the
|
||||
// output. In that case relaPlt is empty and have zero offset, the same offset
|
||||
// as relaIplt has. And we still want to emit proper dynamic tags for that
|
||||
// case, so here we always use relaPlt as marker for the begining of
|
||||
// case, so here we always use relaPlt as marker for the beginning of
|
||||
// .rel[a].plt section.
|
||||
if (isMain && (in.relaPlt->isNeeded() || in.relaIplt->isNeeded())) {
|
||||
addInSec(DT_JMPREL, in.relaPlt);
|
||||
@ -2265,7 +2265,7 @@ size_t SymtabShndxSection::getSize() const {
|
||||
// .gnu.hash has a bloom filter in addition to a hash table to skip
|
||||
// DSOs very quickly. If you are sure that your dynamic linker knows
|
||||
// about .gnu.hash, you want to specify -hash-style=gnu. Otherwise, a
|
||||
// safe bet is to specify -hash-style=both for backward compatibilty.
|
||||
// safe bet is to specify -hash-style=both for backward compatibility.
|
||||
GnuHashTableSection::GnuHashTableSection()
|
||||
: SyntheticSection(SHF_ALLOC, SHT_GNU_HASH, config->wordsize, ".gnu.hash") {
|
||||
}
|
||||
@ -3460,7 +3460,7 @@ bool PPC64LongBranchTargetSection::isNeeded() const {
|
||||
// is too early to determine if this section will be empty or not. We need
|
||||
// Finalized to keep the section alive until after thunk creation. Finalized
|
||||
// only gets set to true once `finalizeSections()` is called after thunk
|
||||
// creation. Becuase of this, if we don't create any long-branch thunks we end
|
||||
// creation. Because of this, if we don't create any long-branch thunks we end
|
||||
// up with an empty .branch_lt section in the binary.
|
||||
return !finalized || !entries.empty();
|
||||
}
|
||||
|
@ -1055,9 +1055,9 @@ public:
|
||||
};
|
||||
|
||||
// This section is used to store the addresses of functions that are called
|
||||
// in range-extending thunks on PowerPC64. When producing position dependant
|
||||
// in range-extending thunks on PowerPC64. When producing position dependent
|
||||
// code the addresses are link-time constants and the table is written out to
|
||||
// the binary. When producing position-dependant code the table is allocated and
|
||||
// the binary. When producing position-dependent code the table is allocated and
|
||||
// filled in by the dynamic linker.
|
||||
class PPC64LongBranchTargetSection final : public SyntheticSection {
|
||||
public:
|
||||
|
@ -265,7 +265,7 @@ private:
|
||||
// 2) Loading the target functions address from the procedure linkage table into
|
||||
// r12 for use by the target functions global entry point, and into the count
|
||||
// register.
|
||||
// 3) Transfering control to the target function through an indirect branch.
|
||||
// 3) Transferring control to the target function through an indirect branch.
|
||||
class PPC64PltCallStub final : public Thunk {
|
||||
public:
|
||||
PPC64PltCallStub(Symbol &dest) : Thunk(dest) {}
|
||||
|
@ -283,7 +283,7 @@ void addReservedSymbols() {
|
||||
// different in different DSOs, so we chose the start address of the DSO.
|
||||
addOptionalRegular("__dso_handle", Out::elfHeader, 0, STV_HIDDEN);
|
||||
|
||||
// If linker script do layout we do not need to create any standart symbols.
|
||||
// If linker script do layout we do not need to create any standard symbols.
|
||||
if (script->hasSectionsCommand)
|
||||
return;
|
||||
|
||||
@ -1757,7 +1757,7 @@ template <class ELFT> void Writer<ELFT>::finalizeSections() {
|
||||
|
||||
if (!config->allowShlibUndefined) {
|
||||
// Error on undefined symbols in a shared object, if all of its DT_NEEDED
|
||||
// entires are seen. These cases would otherwise lead to runtime errors
|
||||
// entries are seen. These cases would otherwise lead to runtime errors
|
||||
// reported by the dynamic linker.
|
||||
//
|
||||
// ld.bfd traces all DT_NEEDED to emulate the logic of the dynamic linker to
|
||||
@ -1979,7 +1979,7 @@ template <class ELFT> void Writer<ELFT>::addStartEndSymbols() {
|
||||
// program text is above 2 GiB. We use the address of the .text
|
||||
// section instead to prevent that failure.
|
||||
//
|
||||
// In a rare sitaution, .text section may not exist. If that's the
|
||||
// In rare situations, the .text section may not exist. If that's the
|
||||
// case, use the image base address as a last resort.
|
||||
OutputSection *Default = findSection(".text");
|
||||
if (!Default)
|
||||
@ -2085,7 +2085,7 @@ std::vector<PhdrEntry *> Writer<ELFT>::createPhdrs(Partition &part) {
|
||||
}
|
||||
|
||||
// PT_GNU_RELRO includes all sections that should be marked as
|
||||
// read-only by dynamic linker after proccessing relocations.
|
||||
// read-only by dynamic linker after processing relocations.
|
||||
// Current dynamic loaders only support one PT_GNU_RELRO PHDR, give
|
||||
// an error message if more than one PT_GNU_RELRO PHDR is required.
|
||||
PhdrEntry *relRo = make<PhdrEntry>(PT_GNU_RELRO, PF_R);
|
||||
@ -2423,7 +2423,7 @@ struct SectionOffset {
|
||||
} // namespace
|
||||
|
||||
// Check whether sections overlap for a specific address range (file offsets,
|
||||
// load and virtual adresses).
|
||||
// load and virtual addresses).
|
||||
static void checkOverlap(StringRef name, std::vector<SectionOffset> §ions,
|
||||
bool isVirtualAddr) {
|
||||
llvm::sort(sections, [=](const SectionOffset &a, const SectionOffset &b) {
|
||||
|
Loading…
Reference in New Issue
Block a user