1 //===- llvm/CodeGen/MachineModuleInfoImpls.cpp ----------------------------===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 // This file implements object-file format specific implementations of
10 // MachineModuleInfoImpl.
12 //===----------------------------------------------------------------------===//
14 #include "llvm/CodeGen/MachineModuleInfoImpls.h"
15 #include "llvm/ADT/DenseMap.h"
16 #include "llvm/ADT/STLExtras.h"
17 #include "llvm/IR/Constants.h"
18 #include "llvm/IR/Module.h"
19 #include "llvm/MC/MCSymbol.h"
23 //===----------------------------------------------------------------------===//
24 // MachineModuleInfoMachO
25 //===----------------------------------------------------------------------===//
27 // Out of line virtual method.
28 void MachineModuleInfoMachO::anchor() {}
29 void MachineModuleInfoELF::anchor() {}
30 void MachineModuleInfoCOFF::anchor() {}
31 void MachineModuleInfoWasm::anchor() {}
33 using PairTy
= std::pair
<MCSymbol
*, MachineModuleInfoImpl::StubValueTy
>;
34 static int SortSymbolPair(const PairTy
*LHS
, const PairTy
*RHS
) {
35 return LHS
->first
->getName().compare(RHS
->first
->getName());
38 MachineModuleInfoImpl::SymbolListTy
MachineModuleInfoImpl::getSortedStubs(
39 DenseMap
<MCSymbol
*, MachineModuleInfoImpl::StubValueTy
> &Map
) {
40 MachineModuleInfoImpl::SymbolListTy
List(Map
.begin(), Map
.end());
42 array_pod_sort(List
.begin(), List
.end(), SortSymbolPair
);
48 using ExprStubPairTy
= std::pair
<MCSymbol
*, const MCExpr
*>;
49 static int SortAuthStubPair(const ExprStubPairTy
*LHS
,
50 const ExprStubPairTy
*RHS
) {
51 return LHS
->first
->getName().compare(RHS
->first
->getName());
54 MachineModuleInfoImpl::ExprStubListTy
MachineModuleInfoImpl::getSortedExprStubs(
55 DenseMap
<MCSymbol
*, const MCExpr
*> &ExprStubs
) {
56 MachineModuleInfoImpl::ExprStubListTy
List(ExprStubs
.begin(),
59 array_pod_sort(List
.begin(), List
.end(), SortAuthStubPair
);
65 MachineModuleInfoELF::MachineModuleInfoELF(const MachineModuleInfo
&MMI
) {
66 const Module
*M
= MMI
.getModule();
67 const auto *Flag
= mdconst::extract_or_null
<ConstantInt
>(
68 M
->getModuleFlag("ptrauth-sign-personality"));
69 HasSignedPersonality
= Flag
&& Flag
->getZExtValue() == 1;