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);