Module Name:    src
Committed By:   maxv
Date:           Sun Oct 29 10:07:08 UTC 2017

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

Log Message:
Add three functions and start using them; will be more useful soon.


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 src/sys/arch/amd64/stand/prekern/elf.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.2 src/sys/arch/amd64/stand/prekern/elf.c:1.3
--- src/sys/arch/amd64/stand/prekern/elf.c:1.2	Wed Oct 11 16:21:06 2017
+++ src/sys/arch/amd64/stand/prekern/elf.c	Sun Oct 29 10:07:08 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: elf.c,v 1.2 2017/10/11 16:21:06 maxv Exp $	*/
+/*	$NetBSD: elf.c,v 1.3 2017/10/29 10:07:08 maxv Exp $	*/
 
 /*
  * Copyright (c) 2017 The NetBSD Foundation, Inc. All rights reserved.
@@ -256,6 +256,46 @@ elf_apply_reloc(uintptr_t relocbase, con
 	}
 }
 
+static bool
+elf_section_is_text(Elf_Shdr *shdr)
+{
+	if (shdr->sh_type != SHT_NOBITS &&
+	    shdr->sh_type != SHT_PROGBITS) {
+		return false;
+	}
+	if (!(shdr->sh_flags & SHF_EXECINSTR)) {
+		return false;
+	}
+	return true;
+}
+
+static bool
+elf_section_is_rodata(Elf_Shdr *shdr)
+{
+	if (shdr->sh_type != SHT_NOBITS &&
+	    shdr->sh_type != SHT_PROGBITS) {
+		return false;
+	}
+	if (shdr->sh_flags & (SHF_EXECINSTR|SHF_WRITE)) {
+		return false;
+	}
+	return true;
+}
+
+static bool
+elf_section_is_data(Elf_Shdr *shdr)
+{
+	if (shdr->sh_type != SHT_NOBITS &&
+	    shdr->sh_type != SHT_PROGBITS) {
+		return false;
+	}
+	if (!(shdr->sh_flags & SHF_WRITE) ||
+	    (shdr->sh_flags & SHF_EXECINSTR)) {
+		return false;
+	}
+	return true;
+}
+
 static void
 elf_build_info(vaddr_t baseva)
 {
@@ -314,11 +354,7 @@ elf_build_info(vaddr_t baseva)
 	/* text */
 	minva = 0xFFFFFFFFFFFFFFFF, maxva = 0;
 	for (i = 0; i < eif.ehdr->e_shnum; i++) {
-		if (eif.shdr[i].sh_type != SHT_NOBITS &&
-		    eif.shdr[i].sh_type != SHT_PROGBITS) {
-			continue;
-		}
-		if (!(eif.shdr[i].sh_flags & SHF_EXECINSTR)) {
+		if (!elf_section_is_text(&eif.shdr[i])) {
 			continue;
 		}
 		secva = baseva + eif.shdr[i].sh_offset;
@@ -337,11 +373,7 @@ elf_build_info(vaddr_t baseva)
 	/* rodata */
 	minva = 0xFFFFFFFFFFFFFFFF, maxva = 0;
 	for (i = 0; i < eif.ehdr->e_shnum; i++) {
-		if (eif.shdr[i].sh_type != SHT_NOBITS &&
-		    eif.shdr[i].sh_type != SHT_PROGBITS) {
-			continue;
-		}
-		if ((eif.shdr[i].sh_flags & (SHF_EXECINSTR|SHF_WRITE))) {
+		if (!elf_section_is_rodata(&eif.shdr[i])) {
 			continue;
 		}
 		secva = baseva + eif.shdr[i].sh_offset;
@@ -360,12 +392,7 @@ elf_build_info(vaddr_t baseva)
 	/* data */
 	minva = 0xFFFFFFFFFFFFFFFF, maxva = 0;
 	for (i = 0; i < eif.ehdr->e_shnum; i++) {
-		if (eif.shdr[i].sh_type != SHT_NOBITS &&
-		    eif.shdr[i].sh_type != SHT_PROGBITS) {
-			continue;
-		}
-		if (!(eif.shdr[i].sh_flags & SHF_WRITE) ||
-		    (eif.shdr[i].sh_flags & SHF_EXECINSTR)) {
+		if (!elf_section_is_data(&eif.shdr[i])) {
 			continue;
 		}
 		secva = baseva + eif.shdr[i].sh_offset;

Reply via email to