@@ -53,7 +53,7 @@ static unsigned adjustFixupValue(unsigned Kind, uint64_t Value) {
53
53
case Sparc::fixup_sparc_hix22:
54
54
return (~Value >> 10 ) & 0x3fffff ;
55
55
56
- case Sparc::fixup_sparc_pc22 :
56
+ case ELF::R_SPARC_PC22 :
57
57
case Sparc::fixup_sparc_hi22:
58
58
case Sparc::fixup_sparc_lm:
59
59
return (Value >> 10 ) & 0x3fffff ;
@@ -64,7 +64,7 @@ static unsigned adjustFixupValue(unsigned Kind, uint64_t Value) {
64
64
case Sparc::fixup_sparc_lox10:
65
65
return (Value & 0x3ff ) | 0x1c00 ;
66
66
67
- case Sparc::fixup_sparc_pc10 :
67
+ case ELF::R_SPARC_PC10 :
68
68
case Sparc::fixup_sparc_lo10:
69
69
return Value & 0x3ff ;
70
70
@@ -136,8 +136,6 @@ namespace {
136
136
{ " fixup_sparc_hh" , 10 , 22 , 0 },
137
137
{ " fixup_sparc_hm" , 22 , 10 , 0 },
138
138
{ " fixup_sparc_lm" , 10 , 22 , 0 },
139
- { " fixup_sparc_pc22" , 10 , 22 , MCFixupKindInfo::FKF_IsPCRel },
140
- { " fixup_sparc_pc10" , 22 , 10 , MCFixupKindInfo::FKF_IsPCRel },
141
139
{ " fixup_sparc_hix22" , 10 , 22 , 0 },
142
140
{ " fixup_sparc_lox10" , 19 , 13 , 0 },
143
141
};
@@ -154,28 +152,35 @@ namespace {
154
152
{ " fixup_sparc_hh" , 0 , 22 , 0 },
155
153
{ " fixup_sparc_hm" , 0 , 10 , 0 },
156
154
{ " fixup_sparc_lm" , 0 , 22 , 0 },
157
- { " fixup_sparc_pc22" , 0 , 22 , MCFixupKindInfo::FKF_IsPCRel },
158
- { " fixup_sparc_pc10" , 0 , 10 , MCFixupKindInfo::FKF_IsPCRel },
159
155
{ " fixup_sparc_hix22" , 0 , 22 , 0 },
160
156
{ " fixup_sparc_lox10" , 0 , 13 , 0 },
161
157
};
162
158
// clang-format on
163
159
164
- // Fixup kinds from .reloc directive are like R_SPARC_NONE. They do
165
- // not require any extra processing.
166
- if (mc::isRelocation (Kind))
167
- return MCAsmBackend::getFixupKindInfo (FK_NONE);
160
+ if (!mc::isRelocation (Kind)) {
161
+ if (Kind < FirstTargetFixupKind)
162
+ return MCAsmBackend::getFixupKindInfo (Kind);
163
+ assert (unsigned (Kind - FirstTargetFixupKind) <
164
+ Sparc::NumTargetFixupKinds &&
165
+ " Invalid kind!" );
166
+ if (Endian == llvm::endianness::little)
167
+ return InfosLE[Kind - FirstTargetFixupKind];
168
168
169
- if ( Kind < FirstTargetFixupKind)
170
- return MCAsmBackend::getFixupKindInfo (Kind);
169
+ return InfosBE[ Kind - FirstTargetFixupKind];
170
+ }
171
171
172
- assert (unsigned (Kind - FirstTargetFixupKind) <
173
- Sparc::NumTargetFixupKinds &&
174
- " Invalid kind!" );
172
+ MCFixupKindInfo Info{};
173
+ switch (uint16_t (Kind)) {
174
+ case ELF::R_SPARC_PC10:
175
+ Info = {" " , 22 , 10 , MCFixupKindInfo::FKF_IsPCRel};
176
+ break ;
177
+ case ELF::R_SPARC_PC22:
178
+ Info = {" " , 10 , 22 , MCFixupKindInfo::FKF_IsPCRel};
179
+ break ;
180
+ }
175
181
if (Endian == llvm::endianness::little)
176
- return InfosLE[Kind - FirstTargetFixupKind];
177
-
178
- return InfosBE[Kind - FirstTargetFixupKind];
182
+ Info.TargetOffset = 32 - Info.TargetOffset - Info.TargetSize ;
183
+ return Info;
179
184
}
180
185
181
186
bool shouldForceRelocation (const MCAssembler &, const MCFixup &,
0 commit comments