Module Name:    src
Committed By:   martin
Date:           Tue Nov  5 14:26:19 UTC 2013

Modified Files:
        src/sys/kern: exec_elf.c
        src/sys/sys: exec_elf.h

Log Message:
Define a new NetBSD specific note to encode the code model used for a binary.
Allow MD code to check these notes in the exec path.


To generate a diff of this commit:
cvs rdiff -u -r1.48 -r1.49 src/sys/kern/exec_elf.c
cvs rdiff -u -r1.131 -r1.132 src/sys/sys/exec_elf.h

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

Modified files:

Index: src/sys/kern/exec_elf.c
diff -u src/sys/kern/exec_elf.c:1.48 src/sys/kern/exec_elf.c:1.49
--- src/sys/kern/exec_elf.c:1.48	Wed Oct 30 23:32:30 2013
+++ src/sys/kern/exec_elf.c	Tue Nov  5 14:26:19 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: exec_elf.c,v 1.48 2013/10/30 23:32:30 joerg Exp $	*/
+/*	$NetBSD: exec_elf.c,v 1.49 2013/11/05 14:26:19 martin Exp $	*/
 
 /*-
  * Copyright (c) 1994, 2000, 2005 The NetBSD Foundation, Inc.
@@ -57,7 +57,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(1, "$NetBSD: exec_elf.c,v 1.48 2013/10/30 23:32:30 joerg Exp $");
+__KERNEL_RCSID(1, "$NetBSD: exec_elf.c,v 1.49 2013/11/05 14:26:19 martin Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_pax.h"
@@ -961,6 +961,21 @@ bad:
 				    sizeof(epp->ep_machine_arch));
 				break;
 			}
+		case ELF_NOTE_TYPE_MCMODEL_TAG:
+			/*
+			 * arch specific check for code model
+			 */
+#ifdef ELF_MD_MCMODEL_CHECK
+			if (np->n_namesz == ELF_NOTE_MCMODEL_NAMESZ
+			    && memcmp(ndata, ELF_NOTE_MCMODEL_NAME,
+				    ELF_NOTE_MCMODEL_NAMESZ) == 0) {
+				ELF_MD_MCMODEL_CHECK(epp, 
+				    ndata + roundup(ELF_NOTE_MCMODEL_NAMESZ, 4),
+				    np->n_descsz);
+				break;
+			}
+#endif
+			break;
 
 			/*
 			 * Dunno, warn for diagnostic

Index: src/sys/sys/exec_elf.h
diff -u src/sys/sys/exec_elf.h:1.131 src/sys/sys/exec_elf.h:1.132
--- src/sys/sys/exec_elf.h:1.131	Tue Oct 29 00:22:59 2013
+++ src/sys/sys/exec_elf.h	Tue Nov  5 14:26:19 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: exec_elf.h,v 1.131 2013/10/29 00:22:59 christos Exp $	*/
+/*	$NetBSD: exec_elf.h,v 1.132 2013/11/05 14:26:19 martin Exp $	*/
 
 /*-
  * Copyright (c) 1994 The NetBSD Foundation, Inc.
@@ -983,6 +983,21 @@ struct netbsd_elfcore_procinfo {
 /* NetBSD-specific note name */
 #define ELF_NOTE_MARCH_NAME		ELF_NOTE_NETBSD_NAME
 
+/*
+ * NetBSD-specific note type: MCMODEL
+ * There should be 1 NOTE per executable.
+ * name:	NetBSD\0
+ * namesz:	7
+ * code model:	string
+ */
+
+#define ELF_NOTE_TYPE_MCMODEL_TAG	6
+/* NetBSD-specific note name and description sizes */
+#define ELF_NOTE_MCMODEL_NAMESZ		ELF_NOTE_NETBSD_NAMESZ
+/* NetBSD-specific note name */
+#define ELF_NOTE_MCMODEL_NAME		ELF_NOTE_NETBSD_NAME
+
+
 #if !defined(ELFSIZE) && defined(ARCH_ELFSIZE)
 #define ELFSIZE ARCH_ELFSIZE
 #endif

Reply via email to