Module Name:    src
Committed By:   maxv
Date:           Wed Nov 15 20:45:16 UTC 2017

Modified Files:
        src/sys/arch/amd64/stand/prekern: elf.c mm.c prekern.h

Log Message:
Small cleanup.


To generate a diff of this commit:
cvs rdiff -u -r1.14 -r1.15 src/sys/arch/amd64/stand/prekern/elf.c \
    src/sys/arch/amd64/stand/prekern/prekern.h
cvs rdiff -u -r1.16 -r1.17 src/sys/arch/amd64/stand/prekern/mm.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/amd64/stand/prekern/elf.c
diff -u src/sys/arch/amd64/stand/prekern/elf.c:1.14 src/sys/arch/amd64/stand/prekern/elf.c:1.15
--- src/sys/arch/amd64/stand/prekern/elf.c:1.14	Wed Nov 15 18:02:36 2017
+++ src/sys/arch/amd64/stand/prekern/elf.c	Wed Nov 15 20:45:16 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: elf.c,v 1.14 2017/11/15 18:02:36 maxv Exp $	*/
+/*	$NetBSD: elf.c,v 1.15 2017/11/15 20:45:16 maxv Exp $	*/
 
 /*
  * Copyright (c) 2017 The NetBSD Foundation, Inc. All rights reserved.
@@ -372,11 +372,6 @@ elf_kernel_reloc(void)
 	print_state(true, "ELF info created");
 
 	/*
-	 * The loaded sections are: SHT_PROGBITS, SHT_NOBITS, SHT_STRTAB,
-	 * SHT_SYMTAB.
-	 */
-
-	/*
 	 * Update all symbol values with the appropriate offset.
 	 */
 	for (i = 0; i < eif.ehdr->e_shnum; i++) {
Index: src/sys/arch/amd64/stand/prekern/prekern.h
diff -u src/sys/arch/amd64/stand/prekern/prekern.h:1.14 src/sys/arch/amd64/stand/prekern/prekern.h:1.15
--- src/sys/arch/amd64/stand/prekern/prekern.h:1.14	Wed Nov 15 18:44:34 2017
+++ src/sys/arch/amd64/stand/prekern/prekern.h	Wed Nov 15 20:45:16 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: prekern.h,v 1.14 2017/11/15 18:44:34 maxv Exp $	*/
+/*	$NetBSD: prekern.h,v 1.15 2017/11/15 20:45:16 maxv Exp $	*/
 
 /*
  * Copyright (c) 2017 The NetBSD Foundation, Inc. All rights reserved.
@@ -41,7 +41,6 @@
 typedef uint64_t paddr_t;
 typedef uint64_t vaddr_t;
 typedef uint64_t pt_entry_t;
-typedef uint64_t pd_entry_t;
 typedef uint64_t pte_prot_t;
 #define WHITE_ON_BLACK 0x07
 #define RED_ON_BLACK 0x04

Index: src/sys/arch/amd64/stand/prekern/mm.c
diff -u src/sys/arch/amd64/stand/prekern/mm.c:1.16 src/sys/arch/amd64/stand/prekern/mm.c:1.17
--- src/sys/arch/amd64/stand/prekern/mm.c:1.16	Wed Nov 15 20:25:29 2017
+++ src/sys/arch/amd64/stand/prekern/mm.c	Wed Nov 15 20:45:16 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: mm.c,v 1.16 2017/11/15 20:25:29 maxv Exp $	*/
+/*	$NetBSD: mm.c,v 1.17 2017/11/15 20:45:16 maxv Exp $	*/
 
 /*
  * Copyright (c) 2017 The NetBSD Foundation, Inc. All rights reserved.
@@ -36,6 +36,13 @@
 
 #define ELFROUND	64
 
+static const int pads[4] = {
+	[BTSEG_NONE] = 0x00,
+	[BTSEG_TEXT] = 0xCC,
+	[BTSEG_RODATA] = 0x00,
+	[BTSEG_DATA] = 0x00
+};
+
 #define MM_PROT_READ	0x00
 #define MM_PROT_WRITE	0x01
 #define MM_PROT_EXECUTE	0x02
@@ -107,7 +114,7 @@ mm_vatopa(vaddr_t va)
 }
 
 static void
-mm_mprotect(vaddr_t startva, size_t size, int prot)
+mm_mprotect(vaddr_t startva, size_t size, pte_prot_t prot)
 {
 	size_t i, npages;
 	vaddr_t va;
@@ -127,7 +134,7 @@ mm_mprotect(vaddr_t startva, size_t size
 void
 mm_bootspace_mprotect(void)
 {
-	int prot;
+	pte_prot_t prot;
 	size_t i;
 
 	/* Remap the kernel segments with proper permissions. */
@@ -242,7 +249,7 @@ mm_map_head(void)
 }
 
 static vaddr_t
-mm_randva_kregion(size_t size, size_t align)
+mm_randva_kregion(size_t size, size_t pagesz)
 {
 	vaddr_t sva, eva;
 	vaddr_t randva;
@@ -253,7 +260,7 @@ mm_randva_kregion(size_t size, size_t al
 	while (1) {
 		rnd = mm_rand_num64();
 		randva = rounddown(KASLR_WINDOW_BASE +
-		    rnd % (KASLR_WINDOW_SIZE - size), align);
+		    rnd % (KASLR_WINDOW_SIZE - size), pagesz);
 
 		/* Detect collisions */
 		ok = true;
@@ -329,6 +336,8 @@ mm_shift_segment(vaddr_t va, size_t page
 		elfalign = ELFROUND;
 	}
 
+	ASSERT(pagesz >= elfalign);
+	ASSERT(pagesz % elfalign == 0);
 	shiftsize = roundup(elfsz, pagesz) - roundup(elfsz, elfalign);
 	if (shiftsize == 0) {
 		return 0;
@@ -368,13 +377,7 @@ mm_map_segment(int segtype, paddr_t pa, 
 	offset = mm_shift_segment(randva, pagesz, elfsz, elfalign);
 	ASSERT(offset + elfsz <= size);
 
-	if (segtype == BTSEG_TEXT) {
-		pad = PAD_TEXT;
-	} else if (segtype == BTSEG_RODATA) {
-		pad = PAD_RODATA;
-	} else {
-		pad = PAD_DATA;
-	}
+	pad = pads[segtype];
 	memset((void *)randva, pad, offset);
 	memset((void *)(randva + offset + elfsz), pad, size - elfsz - offset);
 

Reply via email to