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