LLVM 20.0.0git
|
#include "MCTargetDesc/MipsFixupKinds.h"
#include "MCTargetDesc/MipsMCTargetDesc.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/BinaryFormat/ELF.h"
#include "llvm/MC/MCContext.h"
#include "llvm/MC/MCELFObjectWriter.h"
#include "llvm/MC/MCFixup.h"
#include "llvm/MC/MCObjectWriter.h"
#include "llvm/MC/MCSymbolELF.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/Compiler.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/MathExtras.h"
#include "llvm/Support/raw_ostream.h"
#include <algorithm>
#include <cassert>
#include <cstdint>
#include <iterator>
#include <list>
#include <utility>
Go to the source code of this file.
Macros | |
#define | DEBUG_TYPE "mips-elf-object-writer" |
Functions | |
template<class InputIt , class OutputIt1 , class OutputIt2 , class UnaryPredicate > | |
static std::pair< OutputIt1, OutputIt2 > | copy_if_else (InputIt First, InputIt Last, OutputIt1 d1, OutputIt2 d2, UnaryPredicate Predicate) |
Copy elements in the range [First, Last) to d1 when the predicate is true or d2 when the predicate is false. | |
template<class InputIt , class UnaryPredicate , class Comparator > | |
static InputIt | find_best (InputIt First, InputIt Last, UnaryPredicate Predicate, Comparator BetterThan) |
Find the best match in the range [First, Last). | |
static unsigned | getMatchingLoType (const ELFRelocationEntry &Reloc) |
Determine the low relocation that matches the given relocation. | |
static FindBestPredicateResult | isMatchingReloc (const MipsRelocationEntry &X, const ELFRelocationEntry &R, unsigned MatchingType) |
Determine whether a relocation (X) matches the one given in R. | |
static bool | compareMatchingRelocs (const MipsRelocationEntry &Candidate, const MipsRelocationEntry &PreviousBest) |
Determine whether Candidate or PreviousBest is the better match. | |
#define DEBUG_TYPE "mips-elf-object-writer" |
Definition at line 31 of file MipsELFObjectWriter.cpp.
|
static |
Determine whether Candidate or PreviousBest is the better match.
The return value is true if Candidate is the better match.
A matching relocation is a better match if:
Definition at line 183 of file MipsELFObjectWriter.cpp.
|
static |
Copy elements in the range [First, Last) to d1 when the predicate is true or d2 when the predicate is false.
This is essentially both std::copy_if and std::remove_copy_if combined into a single pass.
Definition at line 78 of file MipsELFObjectWriter.cpp.
References llvm::First, I, and llvm::Last.
|
static |
Find the best match in the range [First, Last).
An element matches when Predicate(X) returns FindBest_Match or FindBest_PerfectMatch. A value of FindBest_PerfectMatch also terminates the search. BetterThan(A, B) is a comparator that returns true when A is a better match than B. The return value is the position of the best match.
This is similar to std::find_if but finds the best of multiple possible matches.
Definition at line 104 of file MipsELFObjectWriter.cpp.
References llvm::First, I, and llvm::Last.
|
static |
Determine the low relocation that matches the given relocation.
If the relocation does not need a low relocation then the return value is ELF::R_MIPS_NONE.
The relocations that need a matching low part are R_(MIPS|MICROMIPS|MIPS16)_HI16 for all symbols and R_(MIPS|MICROMIPS|MIPS16)_GOT16 for local symbols only.
Definition at line 128 of file MipsELFObjectWriter.cpp.
References llvm::MCSymbolELF::getBinding(), llvm::ELFRelocationEntry::OriginalSymbol, llvm::ELF::STB_LOCAL, and llvm::ELFRelocationEntry::Type.
|
static |
Determine whether a relocation (X) matches the one given in R.
A relocation matches if:
A matching relocation is unbeatable if:
Definition at line 165 of file MipsELFObjectWriter.cpp.
References X.