xref: /llvm-project-15.0.7/lld/ELF/Arch/PPC64.cpp (revision fe5eaab2)
1 //===- PPC64.cpp ----------------------------------------------------------===//
2 //
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
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #include "Symbols.h"
10 #include "SyntheticSections.h"
11 #include "Target.h"
12 #include "lld/Common/ErrorHandler.h"
13 #include "llvm/Support/Endian.h"
14 
15 using namespace llvm;
16 using namespace llvm::object;
17 using namespace llvm::support::endian;
18 using namespace llvm::ELF;
19 using namespace lld;
20 using namespace lld::elf;
21 
22 static uint64_t PPC64TocOffset = 0x8000;
23 static uint64_t DynamicThreadPointerOffset = 0x8000;
24 
25 // The instruction encoding of bits 21-30 from the ISA for the Xform and Dform
26 // instructions that can be used as part of the initial exec TLS sequence.
27 enum XFormOpcd {
28   LBZX = 87,
29   LHZX = 279,
30   LWZX = 23,
31   LDX = 21,
32   STBX = 215,
33   STHX = 407,
34   STWX = 151,
35   STDX = 149,
36   ADD = 266,
37 };
38 
39 enum DFormOpcd {
40   LBZ = 34,
41   LBZU = 35,
42   LHZ = 40,
43   LHZU = 41,
44   LHAU = 43,
45   LWZ = 32,
46   LWZU = 33,
47   LFSU = 49,
48   LD = 58,
49   LFDU = 51,
50   STB = 38,
51   STBU = 39,
52   STH = 44,
53   STHU = 45,
54   STW = 36,
55   STWU = 37,
56   STFSU = 53,
57   STFDU = 55,
58   STD = 62,
59   ADDI = 14
60 };
61 
62 uint64_t elf::getPPC64TocBase() {
63   // The TOC consists of sections .got, .toc, .tocbss, .plt in that order. The
64   // TOC starts where the first of these sections starts. We always create a
65   // .got when we see a relocation that uses it, so for us the start is always
66   // the .got.
67   uint64_t TocVA = In.Got->getVA();
68 
69   // Per the ppc64-elf-linux ABI, The TOC base is TOC value plus 0x8000
70   // thus permitting a full 64 Kbytes segment. Note that the glibc startup
71   // code (crt1.o) assumes that you can get from the TOC base to the
72   // start of the .toc section with only a single (signed) 16-bit relocation.
73   return TocVA + PPC64TocOffset;
74 }
75 
76 unsigned elf::getPPC64GlobalEntryToLocalEntryOffset(uint8_t StOther) {
77   // The offset is encoded into the 3 most significant bits of the st_other
78   // field, with some special values described in section 3.4.1 of the ABI:
79   // 0   --> Zero offset between the GEP and LEP, and the function does NOT use
80   //         the TOC pointer (r2). r2 will hold the same value on returning from
81   //         the function as it did on entering the function.
82   // 1   --> Zero offset between the GEP and LEP, and r2 should be treated as a
83   //         caller-saved register for all callers.
84   // 2-6 --> The  binary logarithm of the offset eg:
85   //         2 --> 2^2 = 4 bytes -->  1 instruction.
86   //         6 --> 2^6 = 64 bytes --> 16 instructions.
87   // 7   --> Reserved.
88   uint8_t GepToLep = (StOther >> 5) & 7;
89   if (GepToLep < 2)
90     return 0;
91 
92   // The value encoded in the st_other bits is the
93   // log-base-2(offset).
94   if (GepToLep < 7)
95     return 1 << GepToLep;
96 
97   error("reserved value of 7 in the 3 most-significant-bits of st_other");
98   return 0;
99 }
100 
101 bool elf::isPPC64SmallCodeModelTocReloc(RelType Type) {
102   // The only small code model relocations that access the .toc section.
103   return Type == R_PPC64_TOC16 || Type == R_PPC64_TOC16_DS;
104 }
105 
106 // Find the R_PPC64_ADDR64 in .rela.toc with matching offset.
107 template <typename ELFT>
108 static std::pair<Defined *, int64_t>
109 getRelaTocSymAndAddend(InputSectionBase *TocSec, uint64_t Offset) {
110   if (TocSec->NumRelocations == 0)
111     return {};
112 
113   // .rela.toc contains exclusively R_PPC64_ADDR64 relocations sorted by
114   // r_offset: 0, 8, 16, etc. For a given Offset, Offset / 8 gives us the
115   // relocation index in most cases.
116   //
117   // In rare cases a TOC entry may store a constant that doesn't need an
118   // R_PPC64_ADDR64, the corresponding r_offset is therefore missing. Offset / 8
119   // points to a relocation with larger r_offset. Do a linear probe then.
120   // Constants are extremely uncommon in .toc and the extra number of array
121   // accesses can be seen as a small constant.
122   ArrayRef<typename ELFT::Rela> Relas = TocSec->template relas<ELFT>();
123   uint64_t Index = std::min<uint64_t>(Offset / 8, Relas.size() - 1);
124   for (;;) {
125     if (Relas[Index].r_offset == Offset) {
126       Symbol &Sym = TocSec->getFile<ELFT>()->getRelocTargetSym(Relas[Index]);
127       return {dyn_cast<Defined>(&Sym), getAddend<ELFT>(Relas[Index])};
128     }
129     if (Relas[Index].r_offset < Offset || Index == 0)
130       break;
131     --Index;
132   }
133   return {};
134 }
135 
136 // When accessing a symbol defined in another translation unit, compilers
137 // reserve a .toc entry, allocate a local label and generate toc-indirect
138 // instuctions:
139 //
140 //   addis 3, 2, .LC0@toc@ha  # R_PPC64_TOC16_HA
141 //   ld    3, .LC0@toc@l(3)   # R_PPC64_TOC16_LO_DS, load the address from a .toc entry
142 //   ld/lwa 3, 0(3)           # load the value from the address
143 //
144 //   .section .toc,"aw",@progbits
145 //   .LC0: .tc var[TC],var
146 //
147 // If var is defined, non-preemptable and addressable with a 32-bit signed
148 // offset from the toc base, the address of var can be computed by adding an
149 // offset to the toc base, saving a load.
150 //
151 //   addis 3,2,var@toc@ha     # this may be relaxed to a nop,
152 //   addi  3,3,var@toc@l      # then this becomes addi 3,2,var@toc
153 //   ld/lwa 3, 0(3)           # load the value from the address
154 //
155 // Returns true if the relaxation is performed.
156 bool elf::tryRelaxPPC64TocIndirection(RelType Type, const Relocation &Rel,
157                                       uint8_t *BufLoc) {
158   assert(Config->TocOptimize);
159   if (Rel.Addend < 0)
160     return false;
161 
162   // If the symbol is not the .toc section, this isn't a toc-indirection.
163   Defined *DefSym = dyn_cast<Defined>(Rel.Sym);
164   if (!DefSym || !DefSym->isSection() || DefSym->Section->Name != ".toc")
165     return false;
166 
167   Defined *D;
168   int64_t Addend;
169   auto *TocISB = cast<InputSectionBase>(DefSym->Section);
170   std::tie(D, Addend) =
171       Config->IsLE ? getRelaTocSymAndAddend<ELF64LE>(TocISB, Rel.Addend)
172                    : getRelaTocSymAndAddend<ELF64BE>(TocISB, Rel.Addend);
173 
174   // Only non-preemptable defined symbols can be relaxed.
175   if (!D || D->IsPreemptible)
176     return false;
177 
178   // Two instructions can materialize a 32-bit signed offset from the toc base.
179   uint64_t TocRelative = D->getVA(Addend) - getPPC64TocBase();
180   if (!isInt<32>(TocRelative))
181     return false;
182 
183   // Add PPC64TocOffset that will be subtracted by relocateOne().
184   Target->relaxGot(BufLoc, Type, TocRelative + PPC64TocOffset);
185   return true;
186 }
187 
188 namespace {
189 class PPC64 final : public TargetInfo {
190 public:
191   PPC64();
192   int getTlsGdRelaxSkip(RelType Type) const override;
193   uint32_t calcEFlags() const override;
194   RelExpr getRelExpr(RelType Type, const Symbol &S,
195                      const uint8_t *Loc) const override;
196   void writePltHeader(uint8_t *Buf) const override;
197   void writePlt(uint8_t *Buf, uint64_t GotPltEntryAddr, uint64_t PltEntryAddr,
198                 int32_t Index, unsigned RelOff) const override;
199   void relocateOne(uint8_t *Loc, RelType Type, uint64_t Val) const override;
200   void writeGotHeader(uint8_t *Buf) const override;
201   bool needsThunk(RelExpr Expr, RelType Type, const InputFile *File,
202                   uint64_t BranchAddr, const Symbol &S) const override;
203   uint32_t getThunkSectionSpacing() const override;
204   bool inBranchRange(RelType Type, uint64_t Src, uint64_t Dst) const override;
205   RelExpr adjustRelaxExpr(RelType Type, const uint8_t *Data,
206                           RelExpr Expr) const override;
207   void relaxGot(uint8_t *Loc, RelType Type, uint64_t Val) const override;
208   void relaxTlsGdToIe(uint8_t *Loc, RelType Type, uint64_t Val) const override;
209   void relaxTlsGdToLe(uint8_t *Loc, RelType Type, uint64_t Val) const override;
210   void relaxTlsLdToLe(uint8_t *Loc, RelType Type, uint64_t Val) const override;
211   void relaxTlsIeToLe(uint8_t *Loc, RelType Type, uint64_t Val) const override;
212 
213   bool adjustPrologueForCrossSplitStack(uint8_t *Loc, uint8_t *End,
214                                         uint8_t StOther) const override;
215 };
216 } // namespace
217 
218 // Relocation masks following the #lo(value), #hi(value), #ha(value),
219 // #higher(value), #highera(value), #highest(value), and #highesta(value)
220 // macros defined in section 4.5.1. Relocation Types of the PPC-elf64abi
221 // document.
222 static uint16_t lo(uint64_t V) { return V; }
223 static uint16_t hi(uint64_t V) { return V >> 16; }
224 static uint16_t ha(uint64_t V) { return (V + 0x8000) >> 16; }
225 static uint16_t higher(uint64_t V) { return V >> 32; }
226 static uint16_t highera(uint64_t V) { return (V + 0x8000) >> 32; }
227 static uint16_t highest(uint64_t V) { return V >> 48; }
228 static uint16_t highesta(uint64_t V) { return (V + 0x8000) >> 48; }
229 
230 // Extracts the 'PO' field of an instruction encoding.
231 static uint8_t getPrimaryOpCode(uint32_t Encoding) { return (Encoding >> 26); }
232 
233 static bool isDQFormInstruction(uint32_t Encoding) {
234   switch (getPrimaryOpCode(Encoding)) {
235   default:
236     return false;
237   case 56:
238     // The only instruction with a primary opcode of 56 is `lq`.
239     return true;
240   case 61:
241     // There are both DS and DQ instruction forms with this primary opcode.
242     // Namely `lxv` and `stxv` are the DQ-forms that use it.
243     // The DS 'XO' bits being set to 01 is restricted to DQ form.
244     return (Encoding & 3) == 0x1;
245   }
246 }
247 
248 static bool isInstructionUpdateForm(uint32_t Encoding) {
249   switch (getPrimaryOpCode(Encoding)) {
250   default:
251     return false;
252   case LBZU:
253   case LHAU:
254   case LHZU:
255   case LWZU:
256   case LFSU:
257   case LFDU:
258   case STBU:
259   case STHU:
260   case STWU:
261   case STFSU:
262   case STFDU:
263     return true;
264     // LWA has the same opcode as LD, and the DS bits is what differentiates
265     // between LD/LDU/LWA
266   case LD:
267   case STD:
268     return (Encoding & 3) == 1;
269   }
270 }
271 
272 // There are a number of places when we either want to read or write an
273 // instruction when handling a half16 relocation type. On big-endian the buffer
274 // pointer is pointing into the middle of the word we want to extract, and on
275 // little-endian it is pointing to the start of the word. These 2 helpers are to
276 // simplify reading and writing in that context.
277 static void writeInstrFromHalf16(uint8_t *Loc, uint32_t Instr) {
278   write32(Loc - (Config->EKind == ELF64BEKind ? 2 : 0), Instr);
279 }
280 
281 static uint32_t readInstrFromHalf16(const uint8_t *Loc) {
282   return read32(Loc - (Config->EKind == ELF64BEKind ? 2 : 0));
283 }
284 
285 PPC64::PPC64() {
286   GotRel = R_PPC64_GLOB_DAT;
287   NoneRel = R_PPC64_NONE;
288   PltRel = R_PPC64_JMP_SLOT;
289   RelativeRel = R_PPC64_RELATIVE;
290   IRelativeRel = R_PPC64_IRELATIVE;
291   GotEntrySize = 8;
292   PltEntrySize = 4;
293   GotPltEntrySize = 8;
294   GotBaseSymInGotPlt = false;
295   GotHeaderEntriesNum = 1;
296   GotPltHeaderEntriesNum = 2;
297   PltHeaderSize = 60;
298   NeedsThunks = true;
299 
300   TlsModuleIndexRel = R_PPC64_DTPMOD64;
301   TlsOffsetRel = R_PPC64_DTPREL64;
302 
303   TlsGotRel = R_PPC64_TPREL64;
304 
305   NeedsMoreStackNonSplit = false;
306 
307   // We need 64K pages (at least under glibc/Linux, the loader won't
308   // set different permissions on a finer granularity than that).
309   DefaultMaxPageSize = 65536;
310 
311   // The PPC64 ELF ABI v1 spec, says:
312   //
313   //   It is normally desirable to put segments with different characteristics
314   //   in separate 256 Mbyte portions of the address space, to give the
315   //   operating system full paging flexibility in the 64-bit address space.
316   //
317   // And because the lowest non-zero 256M boundary is 0x10000000, PPC64 linkers
318   // use 0x10000000 as the starting address.
319   DefaultImageBase = 0x10000000;
320 
321   write32(TrapInstr.data(), 0x7fe00008);
322 }
323 
324 int PPC64::getTlsGdRelaxSkip(RelType Type) const {
325   // A __tls_get_addr call instruction is marked with 2 relocations:
326   //
327   //   R_PPC64_TLSGD / R_PPC64_TLSLD: marker relocation
328   //   R_PPC64_REL24: __tls_get_addr
329   //
330   // After the relaxation we no longer call __tls_get_addr and should skip both
331   // relocations to not create a false dependence on __tls_get_addr being
332   // defined.
333   if (Type == R_PPC64_TLSGD || Type == R_PPC64_TLSLD)
334     return 2;
335   return 1;
336 }
337 
338 static uint32_t getEFlags(InputFile *File) {
339   if (Config->EKind == ELF64BEKind)
340     return cast<ObjFile<ELF64BE>>(File)->getObj().getHeader()->e_flags;
341   return cast<ObjFile<ELF64LE>>(File)->getObj().getHeader()->e_flags;
342 }
343 
344 // This file implements v2 ABI. This function makes sure that all
345 // object files have v2 or an unspecified version as an ABI version.
346 uint32_t PPC64::calcEFlags() const {
347   for (InputFile *F : ObjectFiles) {
348     uint32_t Flag = getEFlags(F);
349     if (Flag == 1)
350       error(toString(F) + ": ABI version 1 is not supported");
351     else if (Flag > 2)
352       error(toString(F) + ": unrecognized e_flags: " + Twine(Flag));
353   }
354   return 2;
355 }
356 
357 void PPC64::relaxGot(uint8_t *Loc, RelType Type, uint64_t Val) const {
358   switch (Type) {
359   case R_PPC64_TOC16_HA:
360     // Convert "addis reg, 2, .LC0@toc@h" to "addis reg, 2, var@toc@h" or "nop".
361     relocateOne(Loc, Type, Val);
362     break;
363   case R_PPC64_TOC16_LO_DS: {
364     // Convert "ld reg, .LC0@toc@l(reg)" to "addi reg, reg, var@toc@l" or
365     // "addi reg, 2, var@toc".
366     uint32_t Instr = readInstrFromHalf16(Loc);
367     if (getPrimaryOpCode(Instr) != LD)
368       error("expected a 'ld' for got-indirect to toc-relative relaxing");
369     writeInstrFromHalf16(Loc, (Instr & 0x03FFFFFF) | 0x38000000);
370     relocateOne(Loc, R_PPC64_TOC16_LO, Val);
371     break;
372   }
373   default:
374     llvm_unreachable("unexpected relocation type");
375   }
376 }
377 
378 void PPC64::relaxTlsGdToLe(uint8_t *Loc, RelType Type, uint64_t Val) const {
379   // Reference: 3.7.4.2 of the 64-bit ELF V2 abi supplement.
380   // The general dynamic code sequence for a global `x` will look like:
381   // Instruction                    Relocation                Symbol
382   // addis r3, r2, x@got@tlsgd@ha   R_PPC64_GOT_TLSGD16_HA      x
383   // addi  r3, r3, x@got@tlsgd@l    R_PPC64_GOT_TLSGD16_LO      x
384   // bl __tls_get_addr(x@tlsgd)     R_PPC64_TLSGD               x
385   //                                R_PPC64_REL24               __tls_get_addr
386   // nop                            None                       None
387 
388   // Relaxing to local exec entails converting:
389   // addis r3, r2, x@got@tlsgd@ha    into      nop
390   // addi  r3, r3, x@got@tlsgd@l     into      addis r3, r13, x@tprel@ha
391   // bl __tls_get_addr(x@tlsgd)      into      nop
392   // nop                             into      addi r3, r3, x@tprel@l
393 
394   switch (Type) {
395   case R_PPC64_GOT_TLSGD16_HA:
396     writeInstrFromHalf16(Loc, 0x60000000); // nop
397     break;
398   case R_PPC64_GOT_TLSGD16:
399   case R_PPC64_GOT_TLSGD16_LO:
400     writeInstrFromHalf16(Loc, 0x3c6d0000); // addis r3, r13
401     relocateOne(Loc, R_PPC64_TPREL16_HA, Val);
402     break;
403   case R_PPC64_TLSGD:
404     write32(Loc, 0x60000000);     // nop
405     write32(Loc + 4, 0x38630000); // addi r3, r3
406     // Since we are relocating a half16 type relocation and Loc + 4 points to
407     // the start of an instruction we need to advance the buffer by an extra
408     // 2 bytes on BE.
409     relocateOne(Loc + 4 + (Config->EKind == ELF64BEKind ? 2 : 0),
410                 R_PPC64_TPREL16_LO, Val);
411     break;
412   default:
413     llvm_unreachable("unsupported relocation for TLS GD to LE relaxation");
414   }
415 }
416 
417 void PPC64::relaxTlsLdToLe(uint8_t *Loc, RelType Type, uint64_t Val) const {
418   // Reference: 3.7.4.3 of the 64-bit ELF V2 abi supplement.
419   // The local dynamic code sequence for a global `x` will look like:
420   // Instruction                    Relocation                Symbol
421   // addis r3, r2, x@got@tlsld@ha   R_PPC64_GOT_TLSLD16_HA      x
422   // addi  r3, r3, x@got@tlsld@l    R_PPC64_GOT_TLSLD16_LO      x
423   // bl __tls_get_addr(x@tlsgd)     R_PPC64_TLSLD               x
424   //                                R_PPC64_REL24               __tls_get_addr
425   // nop                            None                       None
426 
427   // Relaxing to local exec entails converting:
428   // addis r3, r2, x@got@tlsld@ha   into      nop
429   // addi  r3, r3, x@got@tlsld@l    into      addis r3, r13, 0
430   // bl __tls_get_addr(x@tlsgd)     into      nop
431   // nop                            into      addi r3, r3, 4096
432 
433   switch (Type) {
434   case R_PPC64_GOT_TLSLD16_HA:
435     writeInstrFromHalf16(Loc, 0x60000000); // nop
436     break;
437   case R_PPC64_GOT_TLSLD16_LO:
438     writeInstrFromHalf16(Loc, 0x3c6d0000); // addis r3, r13, 0
439     break;
440   case R_PPC64_TLSLD:
441     write32(Loc, 0x60000000);     // nop
442     write32(Loc + 4, 0x38631000); // addi r3, r3, 4096
443     break;
444   case R_PPC64_DTPREL16:
445   case R_PPC64_DTPREL16_HA:
446   case R_PPC64_DTPREL16_HI:
447   case R_PPC64_DTPREL16_DS:
448   case R_PPC64_DTPREL16_LO:
449   case R_PPC64_DTPREL16_LO_DS:
450   case R_PPC64_GOT_DTPREL16_HA:
451   case R_PPC64_GOT_DTPREL16_LO_DS:
452   case R_PPC64_GOT_DTPREL16_DS:
453   case R_PPC64_GOT_DTPREL16_HI:
454     relocateOne(Loc, Type, Val);
455     break;
456   default:
457     llvm_unreachable("unsupported relocation for TLS LD to LE relaxation");
458   }
459 }
460 
461 static unsigned getDFormOp(unsigned SecondaryOp) {
462   switch (SecondaryOp) {
463   case LBZX:
464     return LBZ;
465   case LHZX:
466     return LHZ;
467   case LWZX:
468     return LWZ;
469   case LDX:
470     return LD;
471   case STBX:
472     return STB;
473   case STHX:
474     return STH;
475   case STWX:
476     return STW;
477   case STDX:
478     return STD;
479   case ADD:
480     return ADDI;
481   default:
482     error("unrecognized instruction for IE to LE R_PPC64_TLS");
483     return 0;
484   }
485 }
486 
487 void PPC64::relaxTlsIeToLe(uint8_t *Loc, RelType Type, uint64_t Val) const {
488   // The initial exec code sequence for a global `x` will look like:
489   // Instruction                    Relocation                Symbol
490   // addis r9, r2, x@got@tprel@ha   R_PPC64_GOT_TPREL16_HA      x
491   // ld    r9, x@got@tprel@l(r9)    R_PPC64_GOT_TPREL16_LO_DS   x
492   // add r9, r9, x@tls              R_PPC64_TLS                 x
493 
494   // Relaxing to local exec entails converting:
495   // addis r9, r2, x@got@tprel@ha       into        nop
496   // ld r9, x@got@tprel@l(r9)           into        addis r9, r13, x@tprel@ha
497   // add r9, r9, x@tls                  into        addi r9, r9, x@tprel@l
498 
499   // x@tls R_PPC64_TLS is a relocation which does not compute anything,
500   // it is replaced with r13 (thread pointer).
501 
502   // The add instruction in the initial exec sequence has multiple variations
503   // that need to be handled. If we are building an address it will use an add
504   // instruction, if we are accessing memory it will use any of the X-form
505   // indexed load or store instructions.
506 
507   unsigned Offset = (Config->EKind == ELF64BEKind) ? 2 : 0;
508   switch (Type) {
509   case R_PPC64_GOT_TPREL16_HA:
510     write32(Loc - Offset, 0x60000000); // nop
511     break;
512   case R_PPC64_GOT_TPREL16_LO_DS:
513   case R_PPC64_GOT_TPREL16_DS: {
514     uint32_t RegNo = read32(Loc - Offset) & 0x03E00000; // bits 6-10
515     write32(Loc - Offset, 0x3C0D0000 | RegNo);          // addis RegNo, r13
516     relocateOne(Loc, R_PPC64_TPREL16_HA, Val);
517     break;
518   }
519   case R_PPC64_TLS: {
520     uint32_t PrimaryOp = getPrimaryOpCode(read32(Loc));
521     if (PrimaryOp != 31)
522       error("unrecognized instruction for IE to LE R_PPC64_TLS");
523     uint32_t SecondaryOp = (read32(Loc) & 0x000007FE) >> 1; // bits 21-30
524     uint32_t DFormOp = getDFormOp(SecondaryOp);
525     write32(Loc, ((DFormOp << 26) | (read32(Loc) & 0x03FFFFFF)));
526     relocateOne(Loc + Offset, R_PPC64_TPREL16_LO, Val);
527     break;
528   }
529   default:
530     llvm_unreachable("unknown relocation for IE to LE");
531     break;
532   }
533 }
534 
535 RelExpr PPC64::getRelExpr(RelType Type, const Symbol &S,
536                           const uint8_t *Loc) const {
537   switch (Type) {
538   case R_PPC64_GOT16:
539   case R_PPC64_GOT16_DS:
540   case R_PPC64_GOT16_HA:
541   case R_PPC64_GOT16_HI:
542   case R_PPC64_GOT16_LO:
543   case R_PPC64_GOT16_LO_DS:
544     return R_GOT_OFF;
545   case R_PPC64_TOC16:
546   case R_PPC64_TOC16_DS:
547   case R_PPC64_TOC16_HI:
548   case R_PPC64_TOC16_LO:
549     return R_GOTREL;
550   case R_PPC64_TOC16_HA:
551   case R_PPC64_TOC16_LO_DS:
552     return Config->TocOptimize ? R_PPC64_RELAX_TOC : R_GOTREL;
553   case R_PPC64_TOC:
554     return R_PPC_TOC;
555   case R_PPC64_REL14:
556   case R_PPC64_REL24:
557     return R_PPC_CALL_PLT;
558   case R_PPC64_REL16_LO:
559   case R_PPC64_REL16_HA:
560   case R_PPC64_REL32:
561   case R_PPC64_REL64:
562     return R_PC;
563   case R_PPC64_GOT_TLSGD16:
564   case R_PPC64_GOT_TLSGD16_HA:
565   case R_PPC64_GOT_TLSGD16_HI:
566   case R_PPC64_GOT_TLSGD16_LO:
567     return R_TLSGD_GOT;
568   case R_PPC64_GOT_TLSLD16:
569   case R_PPC64_GOT_TLSLD16_HA:
570   case R_PPC64_GOT_TLSLD16_HI:
571   case R_PPC64_GOT_TLSLD16_LO:
572     return R_TLSLD_GOT;
573   case R_PPC64_GOT_TPREL16_HA:
574   case R_PPC64_GOT_TPREL16_LO_DS:
575   case R_PPC64_GOT_TPREL16_DS:
576   case R_PPC64_GOT_TPREL16_HI:
577     return R_GOT_OFF;
578   case R_PPC64_GOT_DTPREL16_HA:
579   case R_PPC64_GOT_DTPREL16_LO_DS:
580   case R_PPC64_GOT_DTPREL16_DS:
581   case R_PPC64_GOT_DTPREL16_HI:
582     return R_TLSLD_GOT_OFF;
583   case R_PPC64_TPREL16:
584   case R_PPC64_TPREL16_HA:
585   case R_PPC64_TPREL16_LO:
586   case R_PPC64_TPREL16_HI:
587   case R_PPC64_TPREL16_DS:
588   case R_PPC64_TPREL16_LO_DS:
589   case R_PPC64_TPREL16_HIGHER:
590   case R_PPC64_TPREL16_HIGHERA:
591   case R_PPC64_TPREL16_HIGHEST:
592   case R_PPC64_TPREL16_HIGHESTA:
593     return R_TLS;
594   case R_PPC64_DTPREL16:
595   case R_PPC64_DTPREL16_DS:
596   case R_PPC64_DTPREL16_HA:
597   case R_PPC64_DTPREL16_HI:
598   case R_PPC64_DTPREL16_HIGHER:
599   case R_PPC64_DTPREL16_HIGHERA:
600   case R_PPC64_DTPREL16_HIGHEST:
601   case R_PPC64_DTPREL16_HIGHESTA:
602   case R_PPC64_DTPREL16_LO:
603   case R_PPC64_DTPREL16_LO_DS:
604   case R_PPC64_DTPREL64:
605     return R_DTPREL;
606   case R_PPC64_TLSGD:
607     return R_TLSDESC_CALL;
608   case R_PPC64_TLSLD:
609     return R_TLSLD_HINT;
610   case R_PPC64_TLS:
611     return R_TLSIE_HINT;
612   default:
613     return R_ABS;
614   }
615 }
616 
617 void PPC64::writeGotHeader(uint8_t *Buf) const {
618   write64(Buf, getPPC64TocBase());
619 }
620 
621 void PPC64::writePltHeader(uint8_t *Buf) const {
622   // The generic resolver stub goes first.
623   write32(Buf +  0, 0x7c0802a6); // mflr r0
624   write32(Buf +  4, 0x429f0005); // bcl  20,4*cr7+so,8 <_glink+0x8>
625   write32(Buf +  8, 0x7d6802a6); // mflr r11
626   write32(Buf + 12, 0x7c0803a6); // mtlr r0
627   write32(Buf + 16, 0x7d8b6050); // subf r12, r11, r12
628   write32(Buf + 20, 0x380cffcc); // subi r0,r12,52
629   write32(Buf + 24, 0x7800f082); // srdi r0,r0,62,2
630   write32(Buf + 28, 0xe98b002c); // ld   r12,44(r11)
631   write32(Buf + 32, 0x7d6c5a14); // add  r11,r12,r11
632   write32(Buf + 36, 0xe98b0000); // ld   r12,0(r11)
633   write32(Buf + 40, 0xe96b0008); // ld   r11,8(r11)
634   write32(Buf + 44, 0x7d8903a6); // mtctr   r12
635   write32(Buf + 48, 0x4e800420); // bctr
636 
637   // The 'bcl' instruction will set the link register to the address of the
638   // following instruction ('mflr r11'). Here we store the offset from that
639   // instruction  to the first entry in the GotPlt section.
640   int64_t GotPltOffset = In.GotPlt->getVA() - (In.Plt->getVA() + 8);
641   write64(Buf + 52, GotPltOffset);
642 }
643 
644 void PPC64::writePlt(uint8_t *Buf, uint64_t GotPltEntryAddr,
645                      uint64_t PltEntryAddr, int32_t Index,
646                      unsigned RelOff) const {
647   int32_t Offset = PltHeaderSize + Index * PltEntrySize;
648   // bl __glink_PLTresolve
649   write32(Buf, 0x48000000 | ((-Offset) & 0x03FFFFFc));
650 }
651 
652 static std::pair<RelType, uint64_t> toAddr16Rel(RelType Type, uint64_t Val) {
653   // Relocations relative to the toc-base need to be adjusted by the Toc offset.
654   uint64_t TocBiasedVal = Val - PPC64TocOffset;
655   // Relocations relative to dtv[dtpmod] need to be adjusted by the DTP offset.
656   uint64_t DTPBiasedVal = Val - DynamicThreadPointerOffset;
657 
658   switch (Type) {
659   // TOC biased relocation.
660   case R_PPC64_GOT16:
661   case R_PPC64_GOT_TLSGD16:
662   case R_PPC64_GOT_TLSLD16:
663   case R_PPC64_TOC16:
664     return {R_PPC64_ADDR16, TocBiasedVal};
665   case R_PPC64_GOT16_DS:
666   case R_PPC64_TOC16_DS:
667   case R_PPC64_GOT_TPREL16_DS:
668   case R_PPC64_GOT_DTPREL16_DS:
669     return {R_PPC64_ADDR16_DS, TocBiasedVal};
670   case R_PPC64_GOT16_HA:
671   case R_PPC64_GOT_TLSGD16_HA:
672   case R_PPC64_GOT_TLSLD16_HA:
673   case R_PPC64_GOT_TPREL16_HA:
674   case R_PPC64_GOT_DTPREL16_HA:
675   case R_PPC64_TOC16_HA:
676     return {R_PPC64_ADDR16_HA, TocBiasedVal};
677   case R_PPC64_GOT16_HI:
678   case R_PPC64_GOT_TLSGD16_HI:
679   case R_PPC64_GOT_TLSLD16_HI:
680   case R_PPC64_GOT_TPREL16_HI:
681   case R_PPC64_GOT_DTPREL16_HI:
682   case R_PPC64_TOC16_HI:
683     return {R_PPC64_ADDR16_HI, TocBiasedVal};
684   case R_PPC64_GOT16_LO:
685   case R_PPC64_GOT_TLSGD16_LO:
686   case R_PPC64_GOT_TLSLD16_LO:
687   case R_PPC64_TOC16_LO:
688     return {R_PPC64_ADDR16_LO, TocBiasedVal};
689   case R_PPC64_GOT16_LO_DS:
690   case R_PPC64_TOC16_LO_DS:
691   case R_PPC64_GOT_TPREL16_LO_DS:
692   case R_PPC64_GOT_DTPREL16_LO_DS:
693     return {R_PPC64_ADDR16_LO_DS, TocBiasedVal};
694 
695   // Dynamic Thread pointer biased relocation types.
696   case R_PPC64_DTPREL16:
697     return {R_PPC64_ADDR16, DTPBiasedVal};
698   case R_PPC64_DTPREL16_DS:
699     return {R_PPC64_ADDR16_DS, DTPBiasedVal};
700   case R_PPC64_DTPREL16_HA:
701     return {R_PPC64_ADDR16_HA, DTPBiasedVal};
702   case R_PPC64_DTPREL16_HI:
703     return {R_PPC64_ADDR16_HI, DTPBiasedVal};
704   case R_PPC64_DTPREL16_HIGHER:
705     return {R_PPC64_ADDR16_HIGHER, DTPBiasedVal};
706   case R_PPC64_DTPREL16_HIGHERA:
707     return {R_PPC64_ADDR16_HIGHERA, DTPBiasedVal};
708   case R_PPC64_DTPREL16_HIGHEST:
709     return {R_PPC64_ADDR16_HIGHEST, DTPBiasedVal};
710   case R_PPC64_DTPREL16_HIGHESTA:
711     return {R_PPC64_ADDR16_HIGHESTA, DTPBiasedVal};
712   case R_PPC64_DTPREL16_LO:
713     return {R_PPC64_ADDR16_LO, DTPBiasedVal};
714   case R_PPC64_DTPREL16_LO_DS:
715     return {R_PPC64_ADDR16_LO_DS, DTPBiasedVal};
716   case R_PPC64_DTPREL64:
717     return {R_PPC64_ADDR64, DTPBiasedVal};
718 
719   default:
720     return {Type, Val};
721   }
722 }
723 
724 static bool isTocOptType(RelType Type) {
725   switch (Type) {
726   case R_PPC64_GOT16_HA:
727   case R_PPC64_GOT16_LO_DS:
728   case R_PPC64_TOC16_HA:
729   case R_PPC64_TOC16_LO_DS:
730   case R_PPC64_TOC16_LO:
731     return true;
732   default:
733     return false;
734   }
735 }
736 
737 void PPC64::relocateOne(uint8_t *Loc, RelType Type, uint64_t Val) const {
738   // We need to save the original relocation type to use in diagnostics, and
739   // use the original type to determine if we should toc-optimize the
740   // instructions being relocated.
741   RelType OriginalType = Type;
742   bool ShouldTocOptimize =  isTocOptType(Type);
743   // For dynamic thread pointer relative, toc-relative, and got-indirect
744   // relocations, proceed in terms of the corresponding ADDR16 relocation type.
745   std::tie(Type, Val) = toAddr16Rel(Type, Val);
746 
747   switch (Type) {
748   case R_PPC64_ADDR14: {
749     checkAlignment(Loc, Val, 4, Type);
750     // Preserve the AA/LK bits in the branch instruction
751     uint8_t AALK = Loc[3];
752     write16(Loc + 2, (AALK & 3) | (Val & 0xfffc));
753     break;
754   }
755   case R_PPC64_ADDR16:
756   case R_PPC64_TPREL16:
757     checkInt(Loc, Val, 16, OriginalType);
758     write16(Loc, Val);
759     break;
760   case R_PPC64_ADDR16_DS:
761   case R_PPC64_TPREL16_DS: {
762     checkInt(Loc, Val, 16, OriginalType);
763     // DQ-form instructions use bits 28-31 as part of the instruction encoding
764     // DS-form instructions only use bits 30-31.
765     uint16_t Mask = isDQFormInstruction(readInstrFromHalf16(Loc)) ? 0xF : 0x3;
766     checkAlignment(Loc, lo(Val), Mask + 1, OriginalType);
767     write16(Loc, (read16(Loc) & Mask) | lo(Val));
768   } break;
769   case R_PPC64_ADDR16_HA:
770   case R_PPC64_REL16_HA:
771   case R_PPC64_TPREL16_HA:
772     if (Config->TocOptimize && ShouldTocOptimize && ha(Val) == 0)
773       writeInstrFromHalf16(Loc, 0x60000000);
774     else
775       write16(Loc, ha(Val));
776     break;
777   case R_PPC64_ADDR16_HI:
778   case R_PPC64_REL16_HI:
779   case R_PPC64_TPREL16_HI:
780     write16(Loc, hi(Val));
781     break;
782   case R_PPC64_ADDR16_HIGHER:
783   case R_PPC64_TPREL16_HIGHER:
784     write16(Loc, higher(Val));
785     break;
786   case R_PPC64_ADDR16_HIGHERA:
787   case R_PPC64_TPREL16_HIGHERA:
788     write16(Loc, highera(Val));
789     break;
790   case R_PPC64_ADDR16_HIGHEST:
791   case R_PPC64_TPREL16_HIGHEST:
792     write16(Loc, highest(Val));
793     break;
794   case R_PPC64_ADDR16_HIGHESTA:
795   case R_PPC64_TPREL16_HIGHESTA:
796     write16(Loc, highesta(Val));
797     break;
798   case R_PPC64_ADDR16_LO:
799   case R_PPC64_REL16_LO:
800   case R_PPC64_TPREL16_LO:
801     // When the high-adjusted part of a toc relocation evalutes to 0, it is
802     // changed into a nop. The lo part then needs to be updated to use the
803     // toc-pointer register r2, as the base register.
804     if (Config->TocOptimize && ShouldTocOptimize && ha(Val) == 0) {
805       uint32_t Instr = readInstrFromHalf16(Loc);
806       if (isInstructionUpdateForm(Instr))
807         error(getErrorLocation(Loc) +
808               "can't toc-optimize an update instruction: 0x" +
809               utohexstr(Instr));
810       Instr = (Instr & 0xFFE00000) | 0x00020000;
811       writeInstrFromHalf16(Loc, Instr);
812     }
813     write16(Loc, lo(Val));
814     break;
815   case R_PPC64_ADDR16_LO_DS:
816   case R_PPC64_TPREL16_LO_DS: {
817     // DQ-form instructions use bits 28-31 as part of the instruction encoding
818     // DS-form instructions only use bits 30-31.
819     uint32_t Inst = readInstrFromHalf16(Loc);
820     uint16_t Mask = isDQFormInstruction(Inst) ? 0xF : 0x3;
821     checkAlignment(Loc, lo(Val), Mask + 1, OriginalType);
822     if (Config->TocOptimize && ShouldTocOptimize && ha(Val) == 0) {
823       // When the high-adjusted part of a toc relocation evalutes to 0, it is
824       // changed into a nop. The lo part then needs to be updated to use the toc
825       // pointer register r2, as the base register.
826       if (isInstructionUpdateForm(Inst))
827         error(getErrorLocation(Loc) +
828               "Can't toc-optimize an update instruction: 0x" +
829               Twine::utohexstr(Inst));
830       Inst = (Inst & 0xFFE0000F) | 0x00020000;
831       writeInstrFromHalf16(Loc, Inst);
832     }
833     write16(Loc, (read16(Loc) & Mask) | lo(Val));
834   } break;
835   case R_PPC64_ADDR32:
836   case R_PPC64_REL32:
837     checkInt(Loc, Val, 32, Type);
838     write32(Loc, Val);
839     break;
840   case R_PPC64_ADDR64:
841   case R_PPC64_REL64:
842   case R_PPC64_TOC:
843     write64(Loc, Val);
844     break;
845   case R_PPC64_REL14: {
846     uint32_t Mask = 0x0000FFFC;
847     checkInt(Loc, Val, 16, Type);
848     checkAlignment(Loc, Val, 4, Type);
849     write32(Loc, (read32(Loc) & ~Mask) | (Val & Mask));
850     break;
851   }
852   case R_PPC64_REL24: {
853     uint32_t Mask = 0x03FFFFFC;
854     checkInt(Loc, Val, 26, Type);
855     checkAlignment(Loc, Val, 4, Type);
856     write32(Loc, (read32(Loc) & ~Mask) | (Val & Mask));
857     break;
858   }
859   case R_PPC64_DTPREL64:
860     write64(Loc, Val - DynamicThreadPointerOffset);
861     break;
862   default:
863     error(getErrorLocation(Loc) + "unrecognized relocation " + toString(Type));
864   }
865 }
866 
867 bool PPC64::needsThunk(RelExpr Expr, RelType Type, const InputFile *File,
868                        uint64_t BranchAddr, const Symbol &S) const {
869   if (Type != R_PPC64_REL14 && Type != R_PPC64_REL24)
870     return false;
871 
872   // If a function is in the Plt it needs to be called with a call-stub.
873   if (S.isInPlt())
874     return true;
875 
876   // If a symbol is a weak undefined and we are compiling an executable
877   // it doesn't need a range-extending thunk since it can't be called.
878   if (S.isUndefWeak() && !Config->Shared)
879     return false;
880 
881   // If the offset exceeds the range of the branch type then it will need
882   // a range-extending thunk.
883   // See the comment in getRelocTargetVA() about R_PPC64_CALL.
884   return !inBranchRange(Type, BranchAddr,
885                         S.getVA() +
886                             getPPC64GlobalEntryToLocalEntryOffset(S.StOther));
887 }
888 
889 uint32_t PPC64::getThunkSectionSpacing() const {
890   // See comment in Arch/ARM.cpp for a more detailed explanation of
891   // getThunkSectionSpacing(). For PPC64 we pick the constant here based on
892   // R_PPC64_REL24, which is used by unconditional branch instructions.
893   // 0x2000000 = (1 << 24-1) * 4
894   return 0x2000000;
895 }
896 
897 bool PPC64::inBranchRange(RelType Type, uint64_t Src, uint64_t Dst) const {
898   int64_t Offset = Dst - Src;
899   if (Type == R_PPC64_REL14)
900     return isInt<16>(Offset);
901   if (Type == R_PPC64_REL24)
902     return isInt<26>(Offset);
903   llvm_unreachable("unsupported relocation type used in branch");
904 }
905 
906 RelExpr PPC64::adjustRelaxExpr(RelType Type, const uint8_t *Data,
907                                RelExpr Expr) const {
908   if (Expr == R_RELAX_TLS_GD_TO_IE)
909     return R_RELAX_TLS_GD_TO_IE_GOT_OFF;
910   if (Expr == R_RELAX_TLS_LD_TO_LE)
911     return R_RELAX_TLS_LD_TO_LE_ABS;
912   return Expr;
913 }
914 
915 // Reference: 3.7.4.1 of the 64-bit ELF V2 abi supplement.
916 // The general dynamic code sequence for a global `x` uses 4 instructions.
917 // Instruction                    Relocation                Symbol
918 // addis r3, r2, x@got@tlsgd@ha   R_PPC64_GOT_TLSGD16_HA      x
919 // addi  r3, r3, x@got@tlsgd@l    R_PPC64_GOT_TLSGD16_LO      x
920 // bl __tls_get_addr(x@tlsgd)     R_PPC64_TLSGD               x
921 //                                R_PPC64_REL24               __tls_get_addr
922 // nop                            None                       None
923 //
924 // Relaxing to initial-exec entails:
925 // 1) Convert the addis/addi pair that builds the address of the tls_index
926 //    struct for 'x' to an addis/ld pair that loads an offset from a got-entry.
927 // 2) Convert the call to __tls_get_addr to a nop.
928 // 3) Convert the nop following the call to an add of the loaded offset to the
929 //    thread pointer.
930 // Since the nop must directly follow the call, the R_PPC64_TLSGD relocation is
931 // used as the relaxation hint for both steps 2 and 3.
932 void PPC64::relaxTlsGdToIe(uint8_t *Loc, RelType Type, uint64_t Val) const {
933   switch (Type) {
934   case R_PPC64_GOT_TLSGD16_HA:
935     // This is relaxed from addis rT, r2, sym@got@tlsgd@ha to
936     //                      addis rT, r2, sym@got@tprel@ha.
937     relocateOne(Loc, R_PPC64_GOT_TPREL16_HA, Val);
938     return;
939   case R_PPC64_GOT_TLSGD16_LO: {
940     // Relax from addi  r3, rA, sym@got@tlsgd@l to
941     //            ld r3, sym@got@tprel@l(rA)
942     uint32_t InputRegister = (readInstrFromHalf16(Loc) & (0x1f << 16));
943     writeInstrFromHalf16(Loc, 0xE8600000 | InputRegister);
944     relocateOne(Loc, R_PPC64_GOT_TPREL16_LO_DS, Val);
945     return;
946   }
947   case R_PPC64_TLSGD:
948     write32(Loc, 0x60000000);     // bl __tls_get_addr(sym@tlsgd) --> nop
949     write32(Loc + 4, 0x7c636A14); // nop --> add r3, r3, r13
950     return;
951   default:
952     llvm_unreachable("unsupported relocation for TLS GD to IE relaxation");
953   }
954 }
955 
956 // The prologue for a split-stack function is expected to look roughly
957 // like this:
958 //    .Lglobal_entry_point:
959 //      # TOC pointer initalization.
960 //      ...
961 //    .Llocal_entry_point:
962 //      # load the __private_ss member of the threads tcbhead.
963 //      ld r0,-0x7000-64(r13)
964 //      # subtract the functions stack size from the stack pointer.
965 //      addis r12, r1, ha(-stack-frame size)
966 //      addi  r12, r12, l(-stack-frame size)
967 //      # compare needed to actual and branch to allocate_more_stack if more
968 //      # space is needed, otherwise fallthrough to 'normal' function body.
969 //      cmpld cr7,r12,r0
970 //      blt- cr7, .Lallocate_more_stack
971 //
972 // -) The allocate_more_stack block might be placed after the split-stack
973 //    prologue and the `blt-` replaced with a `bge+ .Lnormal_func_body`
974 //    instead.
975 // -) If either the addis or addi is not needed due to the stack size being
976 //    smaller then 32K or a multiple of 64K they will be replaced with a nop,
977 //    but there will always be 2 instructions the linker can overwrite for the
978 //    adjusted stack size.
979 //
980 // The linkers job here is to increase the stack size used in the addis/addi
981 // pair by split-stack-size-adjust.
982 // addis r12, r1, ha(-stack-frame size - split-stack-adjust-size)
983 // addi  r12, r12, l(-stack-frame size - split-stack-adjust-size)
984 bool PPC64::adjustPrologueForCrossSplitStack(uint8_t *Loc, uint8_t *End,
985                                              uint8_t StOther) const {
986   // If the caller has a global entry point adjust the buffer past it. The start
987   // of the split-stack prologue will be at the local entry point.
988   Loc += getPPC64GlobalEntryToLocalEntryOffset(StOther);
989 
990   // At the very least we expect to see a load of some split-stack data from the
991   // tcb, and 2 instructions that calculate the ending stack address this
992   // function will require. If there is not enough room for at least 3
993   // instructions it can't be a split-stack prologue.
994   if (Loc + 12 >= End)
995     return false;
996 
997   // First instruction must be `ld r0, -0x7000-64(r13)`
998   if (read32(Loc) != 0xe80d8fc0)
999     return false;
1000 
1001   int16_t HiImm = 0;
1002   int16_t LoImm = 0;
1003   // First instruction can be either an addis if the frame size is larger then
1004   // 32K, or an addi if the size is less then 32K.
1005   int32_t FirstInstr = read32(Loc + 4);
1006   if (getPrimaryOpCode(FirstInstr) == 15) {
1007     HiImm = FirstInstr & 0xFFFF;
1008   } else if (getPrimaryOpCode(FirstInstr) == 14) {
1009     LoImm = FirstInstr & 0xFFFF;
1010   } else {
1011     return false;
1012   }
1013 
1014   // Second instruction is either an addi or a nop. If the first instruction was
1015   // an addi then LoImm is set and the second instruction must be a nop.
1016   uint32_t SecondInstr = read32(Loc + 8);
1017   if (!LoImm && getPrimaryOpCode(SecondInstr) == 14) {
1018     LoImm = SecondInstr & 0xFFFF;
1019   } else if (SecondInstr != 0x60000000) {
1020     return false;
1021   }
1022 
1023   // The register operands of the first instruction should be the stack-pointer
1024   // (r1) as the input (RA) and r12 as the output (RT). If the second
1025   // instruction is not a nop, then it should use r12 as both input and output.
1026   auto CheckRegOperands = [](uint32_t Instr, uint8_t ExpectedRT,
1027                              uint8_t ExpectedRA) {
1028     return ((Instr & 0x3E00000) >> 21 == ExpectedRT) &&
1029            ((Instr & 0x1F0000) >> 16 == ExpectedRA);
1030   };
1031   if (!CheckRegOperands(FirstInstr, 12, 1))
1032     return false;
1033   if (SecondInstr != 0x60000000 && !CheckRegOperands(SecondInstr, 12, 12))
1034     return false;
1035 
1036   int32_t StackFrameSize = (HiImm * 65536) + LoImm;
1037   // Check that the adjusted size doesn't overflow what we can represent with 2
1038   // instructions.
1039   if (StackFrameSize < Config->SplitStackAdjustSize + INT32_MIN) {
1040     error(getErrorLocation(Loc) + "split-stack prologue adjustment overflows");
1041     return false;
1042   }
1043 
1044   int32_t AdjustedStackFrameSize =
1045       StackFrameSize - Config->SplitStackAdjustSize;
1046 
1047   LoImm = AdjustedStackFrameSize & 0xFFFF;
1048   HiImm = (AdjustedStackFrameSize + 0x8000) >> 16;
1049   if (HiImm) {
1050     write32(Loc + 4, 0x3D810000 | (uint16_t)HiImm);
1051     // If the low immediate is zero the second instruction will be a nop.
1052     SecondInstr = LoImm ? 0x398C0000 | (uint16_t)LoImm : 0x60000000;
1053     write32(Loc + 8, SecondInstr);
1054   } else {
1055     // addi r12, r1, imm
1056     write32(Loc + 4, (0x39810000) | (uint16_t)LoImm);
1057     write32(Loc + 8, 0x60000000);
1058   }
1059 
1060   return true;
1061 }
1062 
1063 TargetInfo *elf::getPPC64TargetInfo() {
1064   static PPC64 Target;
1065   return &Target;
1066 }
1067