svn commit: r277499 - in head/sys/powerpc: aim powerpc

Nathan Whitehorn nwhitehorn at FreeBSD.org
Wed Jan 21 19:09:17 UTC 2015


Author: nwhitehorn
Date: Wed Jan 21 19:09:15 2015
New Revision: 277499
URL: https://svnweb.freebsd.org/changeset/base/277499

Log:
  Make sure to relocate tmpstk with everything else and avoid processing
  non-relative relocations that the UART code makes for absent modules.

Modified:
  head/sys/powerpc/aim/locore64.S
  head/sys/powerpc/powerpc/elf64_machdep.c

Modified: head/sys/powerpc/aim/locore64.S
==============================================================================
--- head/sys/powerpc/aim/locore64.S	Wed Jan 21 19:07:45 2015	(r277498)
+++ head/sys/powerpc/aim/locore64.S	Wed Jan 21 19:09:15 2015	(r277499)
@@ -126,9 +126,14 @@ ASENTRY_NOPROF(__start)
 	ld	%r1,0(%r2)
 	add	%r2,%r1,%r2
 
+	/* Get load offset */
+	ld	%r31,-0x8000(%r2) /* First TOC entry is TOC base */
+	subf    %r31,%r31,%r2	/* Subtract from real TOC base to get base */
+
 	/* Set up the stack pointer */
 	ld	%r1,TOC_REF(tmpstk)(%r2)
 	addi	%r1,%r1,TMPSTKSZ-96
+	add	%r1,%r1,%r31
 
 	/* Relocate kernel */
 	std	%r3,48(%r1)
@@ -140,8 +145,7 @@ ASENTRY_NOPROF(__start)
 1:	mflr	%r3
 	ld	%r4,0(%r3)
 	add	%r3,%r4,%r3
-	ld	%r4,-0x8000(%r2) /* First TOC entry is TOC base */
-	subf    %r4,%r4,%r2	/* Subtract from real TOC base to get base */
+	mr	%r4,%r31
 	bl	elf_reloc_self
 	nop
 	ld	%r3,48(%r1)

Modified: head/sys/powerpc/powerpc/elf64_machdep.c
==============================================================================
--- head/sys/powerpc/powerpc/elf64_machdep.c	Wed Jan 21 19:07:45 2015	(r277498)
+++ head/sys/powerpc/powerpc/elf64_machdep.c	Wed Jan 21 19:09:15 2015	(r277499)
@@ -226,6 +226,8 @@ elf_reloc_self(Elf_Dyn *dynp, Elf_Addr r
 	 */
 	relalim = (Elf_Rela *)((caddr_t)rela + relasz);
 	for (; rela < relalim; rela++) {
+		if (ELF_R_TYPE(rela->r_info) != R_PPC_RELATIVE)
+			continue;
 		where = (Elf_Addr *)(relocbase + rela->r_offset);
 		*where = (Elf_Addr)(relocbase + rela->r_addend);
 	}


More information about the svn-src-head mailing list