svn commit: r351920 - head/stand/common

Justin Hibbits jhibbits at FreeBSD.org
Fri Sep 6 02:28:04 UTC 2019


Author: jhibbits
Date: Fri Sep  6 02:28:03 2019
New Revision: 351920
URL: https://svnweb.freebsd.org/changeset/base/351920

Log:
  Loader: Add load offset to powerpc kernel entry point
  
  Summary:
  There is logic in ELF loadimage() to relocate kernels, but currently
  only type ET_EXEC.  PowerPC kernels are ET_DYN, and can be relocated anywhere.
  Add the load offset to kernel entry points on this platform.
  
  Reviewed by:	imp, ian
  Differential Revision:	https://reviews.freebsd.org/D21286

Modified:
  head/stand/common/load_elf.c

Modified: head/stand/common/load_elf.c
==============================================================================
--- head/stand/common/load_elf.c	Fri Sep  6 01:22:16 2019	(r351919)
+++ head/stand/common/load_elf.c	Fri Sep  6 02:28:03 2019	(r351920)
@@ -455,7 +455,11 @@ __elfN(loadimage)(struct preloaded_file *fp, elf_file_
 	ret = 0;
 	firstaddr = lastaddr = 0;
 	ehdr = ef->ehdr;
+#ifdef __powerpc__
+	if (ef->kernel) {
+#else
 	if (ehdr->e_type == ET_EXEC) {
+#endif
 #if defined(__i386__) || defined(__amd64__)
 #if __ELF_WORD_SIZE == 64
 		/* x86_64 relocates after locore */
@@ -481,12 +485,11 @@ __elfN(loadimage)(struct preloaded_file *fp, elf_file_
 			 * it's loaded at a 16MB boundary for now...
 			 */
 			off += 0x01000000;
-			ehdr->e_entry += off;
+		}
+		ehdr->e_entry += off;
 #ifdef ELF_VERBOSE
-			printf("Converted entry 0x%jx\n", (uintmax_t)ehdr->e_entry);
+		printf("Converted entry 0x%jx\n", (uintmax_t)ehdr->e_entry);
 #endif
-		} else
-			off = 0;
 #elif defined(__arm__) && !defined(EFI)
 		/*
 		 * The elf headers in arm kernels specify virtual addresses in


More information about the svn-src-head mailing list