treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156
[linux-block.git] / arch / powerpc / kernel / module_64.c
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*  Kernel module help for PPC64.
3     Copyright (C) 2001, 2003 Rusty Russell IBM Corporation.
4
5 */
6
7 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
8
9 #include <linux/module.h>
10 #include <linux/elf.h>
11 #include <linux/moduleloader.h>
12 #include <linux/err.h>
13 #include <linux/vmalloc.h>
14 #include <linux/ftrace.h>
15 #include <linux/bug.h>
16 #include <linux/uaccess.h>
17 #include <asm/module.h>
18 #include <asm/firmware.h>
19 #include <asm/code-patching.h>
20 #include <linux/sort.h>
21 #include <asm/setup.h>
22 #include <asm/sections.h>
23
24 /* FIXME: We don't do .init separately.  To do this, we'd need to have
25    a separate r2 value in the init and core section, and stub between
26    them, too.
27
28    Using a magic allocator which places modules within 32MB solves
29    this, and makes other things simpler.  Anton?
30    --RR.  */
31
32 #ifdef PPC64_ELF_ABI_v2
33
34 /* An address is simply the address of the function. */
35 typedef unsigned long func_desc_t;
36
37 static func_desc_t func_desc(unsigned long addr)
38 {
39         return addr;
40 }
41 static unsigned long func_addr(unsigned long addr)
42 {
43         return addr;
44 }
45 static unsigned long stub_func_addr(func_desc_t func)
46 {
47         return func;
48 }
49
50 /* PowerPC64 specific values for the Elf64_Sym st_other field.  */
51 #define STO_PPC64_LOCAL_BIT     5
52 #define STO_PPC64_LOCAL_MASK    (7 << STO_PPC64_LOCAL_BIT)
53 #define PPC64_LOCAL_ENTRY_OFFSET(other)                                 \
54  (((1 << (((other) & STO_PPC64_LOCAL_MASK) >> STO_PPC64_LOCAL_BIT)) >> 2) << 2)
55
56 static unsigned int local_entry_offset(const Elf64_Sym *sym)
57 {
58         /* sym->st_other indicates offset to local entry point
59          * (otherwise it will assume r12 is the address of the start
60          * of function and try to derive r2 from it). */
61         return PPC64_LOCAL_ENTRY_OFFSET(sym->st_other);
62 }
63 #else
64
65 /* An address is address of the OPD entry, which contains address of fn. */
66 typedef struct ppc64_opd_entry func_desc_t;
67
68 static func_desc_t func_desc(unsigned long addr)
69 {
70         return *(struct ppc64_opd_entry *)addr;
71 }
72 static unsigned long func_addr(unsigned long addr)
73 {
74         return func_desc(addr).funcaddr;
75 }
76 static unsigned long stub_func_addr(func_desc_t func)
77 {
78         return func.funcaddr;
79 }
80 static unsigned int local_entry_offset(const Elf64_Sym *sym)
81 {
82         return 0;
83 }
84
85 void *dereference_module_function_descriptor(struct module *mod, void *ptr)
86 {
87         if (ptr < (void *)mod->arch.start_opd ||
88                         ptr >= (void *)mod->arch.end_opd)
89                 return ptr;
90
91         return dereference_function_descriptor(ptr);
92 }
93 #endif
94
95 #define STUB_MAGIC 0x73747562 /* stub */
96
97 /* Like PPC32, we need little trampolines to do > 24-bit jumps (into
98    the kernel itself).  But on PPC64, these need to be used for every
99    jump, actually, to reset r2 (TOC+0x8000). */
100 struct ppc64_stub_entry
101 {
102         /* 28 byte jump instruction sequence (7 instructions). We only
103          * need 6 instructions on ABIv2 but we always allocate 7 so
104          * so we don't have to modify the trampoline load instruction. */
105         u32 jump[7];
106         /* Used by ftrace to identify stubs */
107         u32 magic;
108         /* Data for the above code */
109         func_desc_t funcdata;
110 };
111
112 /*
113  * PPC64 uses 24 bit jumps, but we need to jump into other modules or
114  * the kernel which may be further.  So we jump to a stub.
115  *
116  * For ELFv1 we need to use this to set up the new r2 value (aka TOC
117  * pointer).  For ELFv2 it's the callee's responsibility to set up the
118  * new r2, but for both we need to save the old r2.
119  *
120  * We could simply patch the new r2 value and function pointer into
121  * the stub, but it's significantly shorter to put these values at the
122  * end of the stub code, and patch the stub address (32-bits relative
123  * to the TOC ptr, r2) into the stub.
124  */
125
126 static u32 ppc64_stub_insns[] = {
127         0x3d620000,                     /* addis   r11,r2, <high> */
128         0x396b0000,                     /* addi    r11,r11, <low> */
129         /* Save current r2 value in magic place on the stack. */
130         0xf8410000|R2_STACK_OFFSET,     /* std     r2,R2_STACK_OFFSET(r1) */
131         0xe98b0020,                     /* ld      r12,32(r11) */
132 #ifdef PPC64_ELF_ABI_v1
133         /* Set up new r2 from function descriptor */
134         0xe84b0028,                     /* ld      r2,40(r11) */
135 #endif
136         0x7d8903a6,                     /* mtctr   r12 */
137         0x4e800420                      /* bctr */
138 };
139
140 #ifdef CONFIG_DYNAMIC_FTRACE
141 int module_trampoline_target(struct module *mod, unsigned long addr,
142                              unsigned long *target)
143 {
144         struct ppc64_stub_entry *stub;
145         func_desc_t funcdata;
146         u32 magic;
147
148         if (!within_module_core(addr, mod)) {
149                 pr_err("%s: stub %lx not in module %s\n", __func__, addr, mod->name);
150                 return -EFAULT;
151         }
152
153         stub = (struct ppc64_stub_entry *)addr;
154
155         if (probe_kernel_read(&magic, &stub->magic, sizeof(magic))) {
156                 pr_err("%s: fault reading magic for stub %lx for %s\n", __func__, addr, mod->name);
157                 return -EFAULT;
158         }
159
160         if (magic != STUB_MAGIC) {
161                 pr_err("%s: bad magic for stub %lx for %s\n", __func__, addr, mod->name);
162                 return -EFAULT;
163         }
164
165         if (probe_kernel_read(&funcdata, &stub->funcdata, sizeof(funcdata))) {
166                 pr_err("%s: fault reading funcdata for stub %lx for %s\n", __func__, addr, mod->name);
167                 return -EFAULT;
168         }
169
170         *target = stub_func_addr(funcdata);
171
172         return 0;
173 }
174 #endif
175
176 /* Count how many different 24-bit relocations (different symbol,
177    different addend) */
178 static unsigned int count_relocs(const Elf64_Rela *rela, unsigned int num)
179 {
180         unsigned int i, r_info, r_addend, _count_relocs;
181
182         /* FIXME: Only count external ones --RR */
183         _count_relocs = 0;
184         r_info = 0;
185         r_addend = 0;
186         for (i = 0; i < num; i++)
187                 /* Only count 24-bit relocs, others don't need stubs */
188                 if (ELF64_R_TYPE(rela[i].r_info) == R_PPC_REL24 &&
189                     (r_info != ELF64_R_SYM(rela[i].r_info) ||
190                      r_addend != rela[i].r_addend)) {
191                         _count_relocs++;
192                         r_info = ELF64_R_SYM(rela[i].r_info);
193                         r_addend = rela[i].r_addend;
194                 }
195
196         return _count_relocs;
197 }
198
199 static int relacmp(const void *_x, const void *_y)
200 {
201         const Elf64_Rela *x, *y;
202
203         y = (Elf64_Rela *)_x;
204         x = (Elf64_Rela *)_y;
205
206         /* Compare the entire r_info (as opposed to ELF64_R_SYM(r_info) only) to
207          * make the comparison cheaper/faster. It won't affect the sorting or
208          * the counting algorithms' performance
209          */
210         if (x->r_info < y->r_info)
211                 return -1;
212         else if (x->r_info > y->r_info)
213                 return 1;
214         else if (x->r_addend < y->r_addend)
215                 return -1;
216         else if (x->r_addend > y->r_addend)
217                 return 1;
218         else
219                 return 0;
220 }
221
222 static void relaswap(void *_x, void *_y, int size)
223 {
224         uint64_t *x, *y, tmp;
225         int i;
226
227         y = (uint64_t *)_x;
228         x = (uint64_t *)_y;
229
230         for (i = 0; i < sizeof(Elf64_Rela) / sizeof(uint64_t); i++) {
231                 tmp = x[i];
232                 x[i] = y[i];
233                 y[i] = tmp;
234         }
235 }
236
237 /* Get size of potential trampolines required. */
238 static unsigned long get_stubs_size(const Elf64_Ehdr *hdr,
239                                     const Elf64_Shdr *sechdrs)
240 {
241         /* One extra reloc so it's always 0-funcaddr terminated */
242         unsigned long relocs = 1;
243         unsigned i;
244
245         /* Every relocated section... */
246         for (i = 1; i < hdr->e_shnum; i++) {
247                 if (sechdrs[i].sh_type == SHT_RELA) {
248                         pr_debug("Found relocations in section %u\n", i);
249                         pr_debug("Ptr: %p.  Number: %Lu\n",
250                                (void *)sechdrs[i].sh_addr,
251                                sechdrs[i].sh_size / sizeof(Elf64_Rela));
252
253                         /* Sort the relocation information based on a symbol and
254                          * addend key. This is a stable O(n*log n) complexity
255                          * alogrithm but it will reduce the complexity of
256                          * count_relocs() to linear complexity O(n)
257                          */
258                         sort((void *)sechdrs[i].sh_addr,
259                              sechdrs[i].sh_size / sizeof(Elf64_Rela),
260                              sizeof(Elf64_Rela), relacmp, relaswap);
261
262                         relocs += count_relocs((void *)sechdrs[i].sh_addr,
263                                                sechdrs[i].sh_size
264                                                / sizeof(Elf64_Rela));
265                 }
266         }
267
268 #ifdef CONFIG_DYNAMIC_FTRACE
269         /* make the trampoline to the ftrace_caller */
270         relocs++;
271 #ifdef CONFIG_DYNAMIC_FTRACE_WITH_REGS
272         /* an additional one for ftrace_regs_caller */
273         relocs++;
274 #endif
275 #endif
276
277         pr_debug("Looks like a total of %lu stubs, max\n", relocs);
278         return relocs * sizeof(struct ppc64_stub_entry);
279 }
280
281 /* Still needed for ELFv2, for .TOC. */
282 static void dedotify_versions(struct modversion_info *vers,
283                               unsigned long size)
284 {
285         struct modversion_info *end;
286
287         for (end = (void *)vers + size; vers < end; vers++)
288                 if (vers->name[0] == '.') {
289                         memmove(vers->name, vers->name+1, strlen(vers->name));
290                 }
291 }
292
293 /*
294  * Undefined symbols which refer to .funcname, hack to funcname. Make .TOC.
295  * seem to be defined (value set later).
296  */
297 static void dedotify(Elf64_Sym *syms, unsigned int numsyms, char *strtab)
298 {
299         unsigned int i;
300
301         for (i = 1; i < numsyms; i++) {
302                 if (syms[i].st_shndx == SHN_UNDEF) {
303                         char *name = strtab + syms[i].st_name;
304                         if (name[0] == '.') {
305                                 if (strcmp(name+1, "TOC.") == 0)
306                                         syms[i].st_shndx = SHN_ABS;
307                                 syms[i].st_name++;
308                         }
309                 }
310         }
311 }
312
313 static Elf64_Sym *find_dot_toc(Elf64_Shdr *sechdrs,
314                                const char *strtab,
315                                unsigned int symindex)
316 {
317         unsigned int i, numsyms;
318         Elf64_Sym *syms;
319
320         syms = (Elf64_Sym *)sechdrs[symindex].sh_addr;
321         numsyms = sechdrs[symindex].sh_size / sizeof(Elf64_Sym);
322
323         for (i = 1; i < numsyms; i++) {
324                 if (syms[i].st_shndx == SHN_ABS
325                     && strcmp(strtab + syms[i].st_name, "TOC.") == 0)
326                         return &syms[i];
327         }
328         return NULL;
329 }
330
331 int module_frob_arch_sections(Elf64_Ehdr *hdr,
332                               Elf64_Shdr *sechdrs,
333                               char *secstrings,
334                               struct module *me)
335 {
336         unsigned int i;
337
338         /* Find .toc and .stubs sections, symtab and strtab */
339         for (i = 1; i < hdr->e_shnum; i++) {
340                 char *p;
341                 if (strcmp(secstrings + sechdrs[i].sh_name, ".stubs") == 0)
342                         me->arch.stubs_section = i;
343                 else if (strcmp(secstrings + sechdrs[i].sh_name, ".toc") == 0) {
344                         me->arch.toc_section = i;
345                         if (sechdrs[i].sh_addralign < 8)
346                                 sechdrs[i].sh_addralign = 8;
347                 }
348                 else if (strcmp(secstrings+sechdrs[i].sh_name,"__versions")==0)
349                         dedotify_versions((void *)hdr + sechdrs[i].sh_offset,
350                                           sechdrs[i].sh_size);
351
352                 /* We don't handle .init for the moment: rename to _init */
353                 while ((p = strstr(secstrings + sechdrs[i].sh_name, ".init")))
354                         p[0] = '_';
355
356                 if (sechdrs[i].sh_type == SHT_SYMTAB)
357                         dedotify((void *)hdr + sechdrs[i].sh_offset,
358                                  sechdrs[i].sh_size / sizeof(Elf64_Sym),
359                                  (void *)hdr
360                                  + sechdrs[sechdrs[i].sh_link].sh_offset);
361         }
362
363         if (!me->arch.stubs_section) {
364                 pr_err("%s: doesn't contain .stubs.\n", me->name);
365                 return -ENOEXEC;
366         }
367
368         /* If we don't have a .toc, just use .stubs.  We need to set r2
369            to some reasonable value in case the module calls out to
370            other functions via a stub, or if a function pointer escapes
371            the module by some means.  */
372         if (!me->arch.toc_section)
373                 me->arch.toc_section = me->arch.stubs_section;
374
375         /* Override the stubs size */
376         sechdrs[me->arch.stubs_section].sh_size = get_stubs_size(hdr, sechdrs);
377         return 0;
378 }
379
380 /*
381  * r2 is the TOC pointer: it actually points 0x8000 into the TOC (this gives the
382  * value maximum span in an instruction which uses a signed offset). Round down
383  * to a 256 byte boundary for the odd case where we are setting up r2 without a
384  * .toc section.
385  */
386 static inline unsigned long my_r2(const Elf64_Shdr *sechdrs, struct module *me)
387 {
388         return (sechdrs[me->arch.toc_section].sh_addr & ~0xfful) + 0x8000;
389 }
390
391 /* Both low and high 16 bits are added as SIGNED additions, so if low
392    16 bits has high bit set, high 16 bits must be adjusted.  These
393    macros do that (stolen from binutils). */
394 #define PPC_LO(v) ((v) & 0xffff)
395 #define PPC_HI(v) (((v) >> 16) & 0xffff)
396 #define PPC_HA(v) PPC_HI ((v) + 0x8000)
397
398 /* Patch stub to reference function and correct r2 value. */
399 static inline int create_stub(const Elf64_Shdr *sechdrs,
400                               struct ppc64_stub_entry *entry,
401                               unsigned long addr,
402                               struct module *me)
403 {
404         long reladdr;
405
406         memcpy(entry->jump, ppc64_stub_insns, sizeof(ppc64_stub_insns));
407
408         /* Stub uses address relative to r2. */
409         reladdr = (unsigned long)entry - my_r2(sechdrs, me);
410         if (reladdr > 0x7FFFFFFF || reladdr < -(0x80000000L)) {
411                 pr_err("%s: Address %p of stub out of range of %p.\n",
412                        me->name, (void *)reladdr, (void *)my_r2);
413                 return 0;
414         }
415         pr_debug("Stub %p get data from reladdr %li\n", entry, reladdr);
416
417         entry->jump[0] |= PPC_HA(reladdr);
418         entry->jump[1] |= PPC_LO(reladdr);
419         entry->funcdata = func_desc(addr);
420         entry->magic = STUB_MAGIC;
421
422         return 1;
423 }
424
425 /* Create stub to jump to function described in this OPD/ptr: we need the
426    stub to set up the TOC ptr (r2) for the function. */
427 static unsigned long stub_for_addr(const Elf64_Shdr *sechdrs,
428                                    unsigned long addr,
429                                    struct module *me)
430 {
431         struct ppc64_stub_entry *stubs;
432         unsigned int i, num_stubs;
433
434         num_stubs = sechdrs[me->arch.stubs_section].sh_size / sizeof(*stubs);
435
436         /* Find this stub, or if that fails, the next avail. entry */
437         stubs = (void *)sechdrs[me->arch.stubs_section].sh_addr;
438         for (i = 0; stub_func_addr(stubs[i].funcdata); i++) {
439                 if (WARN_ON(i >= num_stubs))
440                         return 0;
441
442                 if (stub_func_addr(stubs[i].funcdata) == func_addr(addr))
443                         return (unsigned long)&stubs[i];
444         }
445
446         if (!create_stub(sechdrs, &stubs[i], addr, me))
447                 return 0;
448
449         return (unsigned long)&stubs[i];
450 }
451
452 #ifdef CONFIG_MPROFILE_KERNEL
453 static bool is_mprofile_mcount_callsite(const char *name, u32 *instruction)
454 {
455         if (strcmp("_mcount", name))
456                 return false;
457
458         /*
459          * Check if this is one of the -mprofile-kernel sequences.
460          */
461         if (instruction[-1] == PPC_INST_STD_LR &&
462             instruction[-2] == PPC_INST_MFLR)
463                 return true;
464
465         if (instruction[-1] == PPC_INST_MFLR)
466                 return true;
467
468         return false;
469 }
470
471 /*
472  * In case of _mcount calls, do not save the current callee's TOC (in r2) into
473  * the original caller's stack frame. If we did we would clobber the saved TOC
474  * value of the original caller.
475  */
476 static void squash_toc_save_inst(const char *name, unsigned long addr)
477 {
478         struct ppc64_stub_entry *stub = (struct ppc64_stub_entry *)addr;
479
480         /* Only for calls to _mcount */
481         if (strcmp("_mcount", name) != 0)
482                 return;
483
484         stub->jump[2] = PPC_INST_NOP;
485 }
486 #else
487 static void squash_toc_save_inst(const char *name, unsigned long addr) { }
488
489 static bool is_mprofile_mcount_callsite(const char *name, u32 *instruction)
490 {
491         return false;
492 }
493 #endif
494
495 /* We expect a noop next: if it is, replace it with instruction to
496    restore r2. */
497 static int restore_r2(const char *name, u32 *instruction, struct module *me)
498 {
499         u32 *prev_insn = instruction - 1;
500
501         if (is_mprofile_mcount_callsite(name, prev_insn))
502                 return 1;
503
504         /*
505          * Make sure the branch isn't a sibling call.  Sibling calls aren't
506          * "link" branches and they don't return, so they don't need the r2
507          * restore afterwards.
508          */
509         if (!instr_is_relative_link_branch(*prev_insn))
510                 return 1;
511
512         if (*instruction != PPC_INST_NOP) {
513                 pr_err("%s: Expected nop after call, got %08x at %pS\n",
514                         me->name, *instruction, instruction);
515                 return 0;
516         }
517         /* ld r2,R2_STACK_OFFSET(r1) */
518         *instruction = PPC_INST_LD_TOC;
519         return 1;
520 }
521
522 int apply_relocate_add(Elf64_Shdr *sechdrs,
523                        const char *strtab,
524                        unsigned int symindex,
525                        unsigned int relsec,
526                        struct module *me)
527 {
528         unsigned int i;
529         Elf64_Rela *rela = (void *)sechdrs[relsec].sh_addr;
530         Elf64_Sym *sym;
531         unsigned long *location;
532         unsigned long value;
533
534         pr_debug("Applying ADD relocate section %u to %u\n", relsec,
535                sechdrs[relsec].sh_info);
536
537         /* First time we're called, we can fix up .TOC. */
538         if (!me->arch.toc_fixed) {
539                 sym = find_dot_toc(sechdrs, strtab, symindex);
540                 /* It's theoretically possible that a module doesn't want a
541                  * .TOC. so don't fail it just for that. */
542                 if (sym)
543                         sym->st_value = my_r2(sechdrs, me);
544                 me->arch.toc_fixed = true;
545         }
546
547         for (i = 0; i < sechdrs[relsec].sh_size / sizeof(*rela); i++) {
548                 /* This is where to make the change */
549                 location = (void *)sechdrs[sechdrs[relsec].sh_info].sh_addr
550                         + rela[i].r_offset;
551                 /* This is the symbol it is referring to */
552                 sym = (Elf64_Sym *)sechdrs[symindex].sh_addr
553                         + ELF64_R_SYM(rela[i].r_info);
554
555                 pr_debug("RELOC at %p: %li-type as %s (0x%lx) + %li\n",
556                        location, (long)ELF64_R_TYPE(rela[i].r_info),
557                        strtab + sym->st_name, (unsigned long)sym->st_value,
558                        (long)rela[i].r_addend);
559
560                 /* `Everything is relative'. */
561                 value = sym->st_value + rela[i].r_addend;
562
563                 switch (ELF64_R_TYPE(rela[i].r_info)) {
564                 case R_PPC64_ADDR32:
565                         /* Simply set it */
566                         *(u32 *)location = value;
567                         break;
568
569                 case R_PPC64_ADDR64:
570                         /* Simply set it */
571                         *(unsigned long *)location = value;
572                         break;
573
574                 case R_PPC64_TOC:
575                         *(unsigned long *)location = my_r2(sechdrs, me);
576                         break;
577
578                 case R_PPC64_TOC16:
579                         /* Subtract TOC pointer */
580                         value -= my_r2(sechdrs, me);
581                         if (value + 0x8000 > 0xffff) {
582                                 pr_err("%s: bad TOC16 relocation (0x%lx)\n",
583                                        me->name, value);
584                                 return -ENOEXEC;
585                         }
586                         *((uint16_t *) location)
587                                 = (*((uint16_t *) location) & ~0xffff)
588                                 | (value & 0xffff);
589                         break;
590
591                 case R_PPC64_TOC16_LO:
592                         /* Subtract TOC pointer */
593                         value -= my_r2(sechdrs, me);
594                         *((uint16_t *) location)
595                                 = (*((uint16_t *) location) & ~0xffff)
596                                 | (value & 0xffff);
597                         break;
598
599                 case R_PPC64_TOC16_DS:
600                         /* Subtract TOC pointer */
601                         value -= my_r2(sechdrs, me);
602                         if ((value & 3) != 0 || value + 0x8000 > 0xffff) {
603                                 pr_err("%s: bad TOC16_DS relocation (0x%lx)\n",
604                                        me->name, value);
605                                 return -ENOEXEC;
606                         }
607                         *((uint16_t *) location)
608                                 = (*((uint16_t *) location) & ~0xfffc)
609                                 | (value & 0xfffc);
610                         break;
611
612                 case R_PPC64_TOC16_LO_DS:
613                         /* Subtract TOC pointer */
614                         value -= my_r2(sechdrs, me);
615                         if ((value & 3) != 0) {
616                                 pr_err("%s: bad TOC16_LO_DS relocation (0x%lx)\n",
617                                        me->name, value);
618                                 return -ENOEXEC;
619                         }
620                         *((uint16_t *) location)
621                                 = (*((uint16_t *) location) & ~0xfffc)
622                                 | (value & 0xfffc);
623                         break;
624
625                 case R_PPC64_TOC16_HA:
626                         /* Subtract TOC pointer */
627                         value -= my_r2(sechdrs, me);
628                         value = ((value + 0x8000) >> 16);
629                         *((uint16_t *) location)
630                                 = (*((uint16_t *) location) & ~0xffff)
631                                 | (value & 0xffff);
632                         break;
633
634                 case R_PPC_REL24:
635                         /* FIXME: Handle weak symbols here --RR */
636                         if (sym->st_shndx == SHN_UNDEF ||
637                             sym->st_shndx == SHN_LIVEPATCH) {
638                                 /* External: go via stub */
639                                 value = stub_for_addr(sechdrs, value, me);
640                                 if (!value)
641                                         return -ENOENT;
642                                 if (!restore_r2(strtab + sym->st_name,
643                                                         (u32 *)location + 1, me))
644                                         return -ENOEXEC;
645
646                                 squash_toc_save_inst(strtab + sym->st_name, value);
647                         } else
648                                 value += local_entry_offset(sym);
649
650                         /* Convert value to relative */
651                         value -= (unsigned long)location;
652                         if (value + 0x2000000 > 0x3ffffff || (value & 3) != 0){
653                                 pr_err("%s: REL24 %li out of range!\n",
654                                        me->name, (long int)value);
655                                 return -ENOEXEC;
656                         }
657
658                         /* Only replace bits 2 through 26 */
659                         *(uint32_t *)location
660                                 = (*(uint32_t *)location & ~0x03fffffc)
661                                 | (value & 0x03fffffc);
662                         break;
663
664                 case R_PPC64_REL64:
665                         /* 64 bits relative (used by features fixups) */
666                         *location = value - (unsigned long)location;
667                         break;
668
669                 case R_PPC64_REL32:
670                         /* 32 bits relative (used by relative exception tables) */
671                         /* Convert value to relative */
672                         value -= (unsigned long)location;
673                         if (value + 0x80000000 > 0xffffffff) {
674                                 pr_err("%s: REL32 %li out of range!\n",
675                                        me->name, (long int)value);
676                                 return -ENOEXEC;
677                         }
678                         *(u32 *)location = value;
679                         break;
680
681                 case R_PPC64_TOCSAVE:
682                         /*
683                          * Marker reloc indicates we don't have to save r2.
684                          * That would only save us one instruction, so ignore
685                          * it.
686                          */
687                         break;
688
689                 case R_PPC64_ENTRY:
690                         /*
691                          * Optimize ELFv2 large code model entry point if
692                          * the TOC is within 2GB range of current location.
693                          */
694                         value = my_r2(sechdrs, me) - (unsigned long)location;
695                         if (value + 0x80008000 > 0xffffffff)
696                                 break;
697                         /*
698                          * Check for the large code model prolog sequence:
699                          *      ld r2, ...(r12)
700                          *      add r2, r2, r12
701                          */
702                         if ((((uint32_t *)location)[0] & ~0xfffc)
703                             != 0xe84c0000)
704                                 break;
705                         if (((uint32_t *)location)[1] != 0x7c426214)
706                                 break;
707                         /*
708                          * If found, replace it with:
709                          *      addis r2, r12, (.TOC.-func)@ha
710                          *      addi r2, r12, (.TOC.-func)@l
711                          */
712                         ((uint32_t *)location)[0] = 0x3c4c0000 + PPC_HA(value);
713                         ((uint32_t *)location)[1] = 0x38420000 + PPC_LO(value);
714                         break;
715
716                 case R_PPC64_REL16_HA:
717                         /* Subtract location pointer */
718                         value -= (unsigned long)location;
719                         value = ((value + 0x8000) >> 16);
720                         *((uint16_t *) location)
721                                 = (*((uint16_t *) location) & ~0xffff)
722                                 | (value & 0xffff);
723                         break;
724
725                 case R_PPC64_REL16_LO:
726                         /* Subtract location pointer */
727                         value -= (unsigned long)location;
728                         *((uint16_t *) location)
729                                 = (*((uint16_t *) location) & ~0xffff)
730                                 | (value & 0xffff);
731                         break;
732
733                 default:
734                         pr_err("%s: Unknown ADD relocation: %lu\n",
735                                me->name,
736                                (unsigned long)ELF64_R_TYPE(rela[i].r_info));
737                         return -ENOEXEC;
738                 }
739         }
740
741         return 0;
742 }
743
744 #ifdef CONFIG_DYNAMIC_FTRACE
745
746 #ifdef CONFIG_MPROFILE_KERNEL
747
748 #define PACATOC offsetof(struct paca_struct, kernel_toc)
749
750 /*
751  * For mprofile-kernel we use a special stub for ftrace_caller() because we
752  * can't rely on r2 containing this module's TOC when we enter the stub.
753  *
754  * That can happen if the function calling us didn't need to use the toc. In
755  * that case it won't have setup r2, and the r2 value will be either the
756  * kernel's toc, or possibly another modules toc.
757  *
758  * To deal with that this stub uses the kernel toc, which is always accessible
759  * via the paca (in r13). The target (ftrace_caller()) is responsible for
760  * saving and restoring the toc before returning.
761  */
762 static unsigned long create_ftrace_stub(const Elf64_Shdr *sechdrs,
763                                 struct module *me, unsigned long addr)
764 {
765         struct ppc64_stub_entry *entry;
766         unsigned int i, num_stubs;
767         static u32 stub_insns[] = {
768                 0xe98d0000 | PACATOC,   /* ld      r12,PACATOC(r13)     */
769                 0x3d8c0000,             /* addis   r12,r12,<high>       */
770                 0x398c0000,             /* addi    r12,r12,<low>        */
771                 0x7d8903a6,             /* mtctr   r12                  */
772                 0x4e800420,             /* bctr                         */
773         };
774         long reladdr;
775
776         num_stubs = sechdrs[me->arch.stubs_section].sh_size / sizeof(*entry);
777
778         /* Find the next available stub entry */
779         entry = (void *)sechdrs[me->arch.stubs_section].sh_addr;
780         for (i = 0; i < num_stubs && stub_func_addr(entry->funcdata); i++, entry++);
781
782         if (i >= num_stubs) {
783                 pr_err("%s: Unable to find a free slot for ftrace stub.\n", me->name);
784                 return 0;
785         }
786
787         memcpy(entry->jump, stub_insns, sizeof(stub_insns));
788
789         /* Stub uses address relative to kernel toc (from the paca) */
790         reladdr = addr - kernel_toc_addr();
791         if (reladdr > 0x7FFFFFFF || reladdr < -(0x80000000L)) {
792                 pr_err("%s: Address of %ps out of range of kernel_toc.\n",
793                                                         me->name, (void *)addr);
794                 return 0;
795         }
796
797         entry->jump[1] |= PPC_HA(reladdr);
798         entry->jump[2] |= PPC_LO(reladdr);
799
800         /* Eventhough we don't use funcdata in the stub, it's needed elsewhere. */
801         entry->funcdata = func_desc(addr);
802         entry->magic = STUB_MAGIC;
803
804         return (unsigned long)entry;
805 }
806 #else
807 static unsigned long create_ftrace_stub(const Elf64_Shdr *sechdrs,
808                                 struct module *me, unsigned long addr)
809 {
810         return stub_for_addr(sechdrs, addr, me);
811 }
812 #endif
813
814 int module_finalize_ftrace(struct module *mod, const Elf_Shdr *sechdrs)
815 {
816         mod->arch.tramp = create_ftrace_stub(sechdrs, mod,
817                                         (unsigned long)ftrace_caller);
818 #ifdef CONFIG_DYNAMIC_FTRACE_WITH_REGS
819         mod->arch.tramp_regs = create_ftrace_stub(sechdrs, mod,
820                                         (unsigned long)ftrace_regs_caller);
821         if (!mod->arch.tramp_regs)
822                 return -ENOENT;
823 #endif
824
825         if (!mod->arch.tramp)
826                 return -ENOENT;
827
828         return 0;
829 }
830 #endif