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