@@ -28,6 +28,7 @@ static uint64_t adjustFixupValue(unsigned Kind, uint64_t Value) {
28
28
switch (Kind) {
29
29
default :
30
30
llvm_unreachable (" Unknown fixup kind!" );
31
+ case FK_NONE:
31
32
case FK_Data_1:
32
33
case FK_Data_2:
33
34
case FK_Data_4:
@@ -51,6 +52,8 @@ static unsigned getFixupKindNumBytes(unsigned Kind) {
51
52
switch (Kind) {
52
53
default :
53
54
llvm_unreachable (" Unknown fixup kind!" );
55
+ case FK_NONE:
56
+ return 0 ;
54
57
case FK_Data_1:
55
58
return 1 ;
56
59
case FK_Data_2:
@@ -137,9 +140,11 @@ class PPCAsmBackend : public MCAsmBackend {
137
140
138
141
bool shouldForceRelocation (const MCAssembler &Asm, const MCFixup &Fixup,
139
142
const MCValue &Target) override {
140
- switch ((PPC::Fixups )Fixup.getKind ()) {
143
+ switch ((unsigned )Fixup.getKind ()) {
141
144
default :
142
145
return false ;
146
+ case FK_NONE:
147
+ return true ;
143
148
case PPC::fixup_ppc_br24:
144
149
case PPC::fixup_ppc_br24abs:
145
150
// If the target symbol has a local entry point we must not attempt
@@ -194,36 +199,49 @@ class PPCAsmBackend : public MCAsmBackend {
194
199
195
200
// FIXME: This should be in a separate file.
196
201
namespace {
197
- class DarwinPPCAsmBackend : public PPCAsmBackend {
198
- public:
199
- DarwinPPCAsmBackend (const Target &T, const Triple &TT)
200
- : PPCAsmBackend(T, TT) {}
201
-
202
- std::unique_ptr<MCObjectTargetWriter>
203
- createObjectTargetWriter () const override {
204
- bool Is64 = TT.isPPC64 ();
205
- return createPPCMachObjectWriter (
206
- /* Is64Bit=*/ Is64,
207
- (Is64 ? MachO::CPU_TYPE_POWERPC64 : MachO::CPU_TYPE_POWERPC),
208
- MachO::CPU_SUBTYPE_POWERPC_ALL);
209
- }
210
- };
211
-
212
- class ELFPPCAsmBackend : public PPCAsmBackend {
213
- public:
214
- ELFPPCAsmBackend (const Target &T, const Triple &TT)
215
- : PPCAsmBackend(T, TT) {}
216
-
217
- std::unique_ptr<MCObjectTargetWriter>
218
- createObjectTargetWriter () const override {
219
- uint8_t OSABI = MCELFObjectTargetWriter::getOSABI (TT.getOS ());
220
- bool Is64 = TT.isPPC64 ();
221
- return createPPCELFObjectWriter (Is64, OSABI);
222
- }
223
- };
202
+
203
+ class DarwinPPCAsmBackend : public PPCAsmBackend {
204
+ public:
205
+ DarwinPPCAsmBackend (const Target &T, const Triple &TT)
206
+ : PPCAsmBackend(T, TT) {}
207
+
208
+ std::unique_ptr<MCObjectTargetWriter>
209
+ createObjectTargetWriter () const override {
210
+ bool Is64 = TT.isPPC64 ();
211
+ return createPPCMachObjectWriter (
212
+ /* Is64Bit=*/ Is64,
213
+ (Is64 ? MachO::CPU_TYPE_POWERPC64 : MachO::CPU_TYPE_POWERPC),
214
+ MachO::CPU_SUBTYPE_POWERPC_ALL);
215
+ }
216
+ };
217
+
218
+ class ELFPPCAsmBackend : public PPCAsmBackend {
219
+ public:
220
+ ELFPPCAsmBackend (const Target &T, const Triple &TT) : PPCAsmBackend(T, TT) {}
221
+
222
+ std::unique_ptr<MCObjectTargetWriter>
223
+ createObjectTargetWriter () const override {
224
+ uint8_t OSABI = MCELFObjectTargetWriter::getOSABI (TT.getOS ());
225
+ bool Is64 = TT.isPPC64 ();
226
+ return createPPCELFObjectWriter (Is64, OSABI);
227
+ }
228
+
229
+ Optional<MCFixupKind> getFixupKind (StringRef Name) const override ;
230
+ };
224
231
225
232
} // end anonymous namespace
226
233
234
+ Optional<MCFixupKind> ELFPPCAsmBackend::getFixupKind (StringRef Name) const {
235
+ if (TT.isPPC64 ()) {
236
+ if (Name == " R_PPC64_NONE" )
237
+ return FK_NONE;
238
+ } else {
239
+ if (Name == " R_PPC_NONE" )
240
+ return FK_NONE;
241
+ }
242
+ return MCAsmBackend::getFixupKind (Name);
243
+ }
244
+
227
245
MCAsmBackend *llvm::createPPCAsmBackend (const Target &T,
228
246
const MCSubtargetInfo &STI,
229
247
const MCRegisterInfo &MRI,
0 commit comments