summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordrahn <drahn@openbsd.org>2005-01-14 15:32:44 +0000
committerdrahn <drahn@openbsd.org>2005-01-14 15:32:44 +0000
commitf97196c9ba3a123356bb37f027de87a024943f78 (patch)
tree4e63efb7cb0717164efd12dbda53db776bd3288c
parentadd $OpenBSD$ tag. ok miod (diff)
downloadwireguard-openbsd-f97196c9ba3a123356bb37f027de87a024943f78.tar.xz
wireguard-openbsd-f97196c9ba3a123356bb37f027de87a024943f78.zip
Allows for VA!=PA addresses in the kernel. ok deraadt@
-rw-r--r--distrib/common/elfrdsetroot.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/distrib/common/elfrdsetroot.c b/distrib/common/elfrdsetroot.c
index 2d8c5b56e37..1ea4f36c009 100644
--- a/distrib/common/elfrdsetroot.c
+++ b/distrib/common/elfrdsetroot.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: elfrdsetroot.c,v 1.8 2005/01/14 08:27:22 deraadt Exp $ */
+/* $OpenBSD: elfrdsetroot.c,v 1.9 2005/01/14 15:32:44 drahn Exp $ */
/* $NetBSD: rdsetroot.c,v 1.2 1995/10/13 16:38:39 gwr Exp $ */
/*
@@ -221,11 +221,19 @@ find_rd_root_image(file, eh, ph)
kernel_start = ph->p_paddr;
kernel_size = ph->p_filesz;
- rd_root_size_off = wantsyms[0].n_value - kernel_start;
- rd_root_image_off = wantsyms[1].n_value - kernel_start;
+ rd_root_size_off = wantsyms[0].n_value - kernel_start;
+ rd_root_size_off -= (ph->p_vaddr - ph->p_paddr);
+ rd_root_image_off = wantsyms[1].n_value - kernel_start;
+ rd_root_image_off -= (ph->p_vaddr - ph->p_paddr);
#ifdef DEBUG
printf("rd_root_size_off = 0x%x\n", rd_root_size_off);
+ if ((ph->p_vaddr - ph->p_paddr) != 0)
+ printf("root_off v %x p %x, diff %x altered %x\n",
+ ph->p_vaddr, ph->p_paddr,
+ (ph->p_vaddr - ph->p_paddr),
+ rd_root_size_off - (ph->p_vaddr - ph->p_paddr));
+
printf("rd_root_image_off = 0x%x\n", rd_root_image_off);
#endif