LLVM 20.0.0git
Macros | Functions
MipsELFObjectWriter.cpp File Reference
#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 <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 bool isMatchingReloc (unsigned MatchingType, const ELFRelocationEntry &R, const ELFRelocationEntry &X)
 

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "mips-elf-object-writer"

Definition at line 30 of file MipsELFObjectWriter.cpp.

Function Documentation

◆ copy_if_else()

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 
)
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 72 of file MipsELFObjectWriter.cpp.

References llvm::First, I, and llvm::Last.

◆ find_best()

template<class InputIt , class UnaryPredicate , class Comparator >
static InputIt find_best ( InputIt  First,
InputIt  Last,
UnaryPredicate  Predicate,
Comparator  BetterThan 
)
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 98 of file MipsELFObjectWriter.cpp.

References llvm::First, I, and llvm::Last.

◆ getMatchingLoType()

static unsigned getMatchingLoType ( const ELFRelocationEntry Reloc)
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 122 of file MipsELFObjectWriter.cpp.

References llvm::MCSymbolELF::getBinding(), llvm::ELF::STB_LOCAL, llvm::ELFRelocationEntry::Symbol, and llvm::ELFRelocationEntry::Type.

◆ isMatchingReloc()

static bool isMatchingReloc ( unsigned  MatchingType,
const ELFRelocationEntry R,
const ELFRelocationEntry X 
)
static

Definition at line 146 of file MipsELFObjectWriter.cpp.

References X.