summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorvisa <visa@openbsd.org>2019-07-17 14:47:42 +0000
committervisa <visa@openbsd.org>2019-07-17 14:47:42 +0000
commitaec35e2ff6857c5ac03fdd93c654cb26e81b9709 (patch)
treed4912074116856bf2c1cad296a9b939f9cd109fe
parentregen (diff)
downloadwireguard-openbsd-aec35e2ff6857c5ac03fdd93c654cb26e81b9709.tar.xz
wireguard-openbsd-aec35e2ff6857c5ac03fdd93c654cb26e81b9709.zip
Adjust search of symbol table pointers to match with the bootloader.
-rw-r--r--sys/arch/octeon/octeon/machdep.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/sys/arch/octeon/octeon/machdep.c b/sys/arch/octeon/octeon/machdep.c
index ef27fb00932..cd6914708a2 100644
--- a/sys/arch/octeon/octeon/machdep.c
+++ b/sys/arch/octeon/octeon/machdep.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: machdep.c,v 1.115 2019/07/17 14:36:32 visa Exp $ */
+/* $OpenBSD: machdep.c,v 1.116 2019/07/17 14:47:42 visa Exp $ */
/*
* Copyright (c) 2009, 2010 Miodrag Vallat.
@@ -252,6 +252,7 @@ mips_init(register_t a0, register_t a1, register_t a2, register_t a3)
int i;
struct boot_desc *boot_desc;
struct boot_info *boot_info;
+ int32_t *symptr;
uint32_t config4;
extern char start[], end[];
@@ -285,13 +286,14 @@ mips_init(register_t a0, register_t a1, register_t a2, register_t a3)
/*
* Reserve space for the symbol table, if it exists.
*/
- ssym = (char *)(vaddr_t)*(int32_t *)end;
+ symptr = (int32_t *)roundup((vaddr_t)end, BOOTMEM_BLOCK_ALIGN);
+ ssym = (char *)(vaddr_t)symptr[0];
if (((long)ssym - (long)end) >= 0 &&
((long)ssym - (long)end) <= 0x1000 &&
ssym[0] == ELFMAG0 && ssym[1] == ELFMAG1 &&
ssym[2] == ELFMAG2 && ssym[3] == ELFMAG3) {
/* Pointers exist directly after kernel. */
- esym = (char *)(vaddr_t)*((int32_t *)end + 1);
+ esym = (char *)(vaddr_t)symptr[1];
ekern = esym;
} else {
/* Pointers aren't setup either... */