xref: /openbmc/linux/arch/powerpc/kernel/module_64.c (revision 22d55f02)
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
831