mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 18:54:02 +01:00
[MC][MachO] Emit an error for emitting relocations of the form -SYM + cst
Emit an error for an unsupported relocation. mach-o relocations can't encode the form -SYM + cst. Differential Revision: https://reviews.llvm.org/D58944 llvm-svn: 355527
This commit is contained in:
parent
f565f6bfc6
commit
f15c596d62
@ -13,6 +13,7 @@
|
||||
#include "llvm/MC/MCAsmBackend.h"
|
||||
#include "llvm/MC/MCAsmLayout.h"
|
||||
#include "llvm/MC/MCAssembler.h"
|
||||
#include "llvm/MC/MCContext.h"
|
||||
#include "llvm/MC/MCDirectives.h"
|
||||
#include "llvm/MC/MCExpr.h"
|
||||
#include "llvm/MC/MCFixupKindInfo.h"
|
||||
@ -448,11 +449,25 @@ void MachObjectWriter::writeLinkerOptionsLoadCommand(
|
||||
assert(W.OS.tell() - Start == Size);
|
||||
}
|
||||
|
||||
static bool isFixupTargetValid(const MCValue &Target) {
|
||||
// Target is (LHS - RHS + cst).
|
||||
// We don't support the form where LHS is null: -RHS + cst
|
||||
if (!Target.getSymA() && Target.getSymB())
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void MachObjectWriter::recordRelocation(MCAssembler &Asm,
|
||||
const MCAsmLayout &Layout,
|
||||
const MCFragment *Fragment,
|
||||
const MCFixup &Fixup, MCValue Target,
|
||||
uint64_t &FixedValue) {
|
||||
if (!isFixupTargetValid(Target)) {
|
||||
Asm.getContext().reportError(Fixup.getLoc(),
|
||||
"unsupported relocation expression");
|
||||
return;
|
||||
}
|
||||
|
||||
TargetObjectWriter->recordRelocation(this, Asm, Layout, Fragment, Fixup,
|
||||
Target, FixedValue);
|
||||
}
|
||||
|
5
test/MC/MachO/bad-reloc.s
Normal file
5
test/MC/MachO/bad-reloc.s
Normal file
@ -0,0 +1,5 @@
|
||||
// RUN: not llvm-mc -triple x86_64-apple-darwin %s -filetype=obj -o - 2>&1 | FileCheck %s
|
||||
|
||||
.quad (0 - undef)
|
||||
|
||||
// CHECK: error: unsupported relocation expression
|
Loading…
Reference in New Issue
Block a user