Module Name:    src
Committed By:   joerg
Date:           Sat Feb  4 18:12:03 UTC 2012

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

Log Message:
Add AuxInfo record with the base address of the main thread.


To generate a diff of this commit:
cvs rdiff -u -r1.35 -r1.36 src/sys/kern/exec_elf.c
cvs rdiff -u -r1.121 -r1.122 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.35 src/sys/kern/exec_elf.c:1.36
--- src/sys/kern/exec_elf.c:1.35	Fri Feb  3 20:11:54 2012
+++ src/sys/kern/exec_elf.c	Sat Feb  4 18:12:02 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: exec_elf.c,v 1.35 2012/02/03 20:11:54 matt Exp $	*/
+/*	$NetBSD: exec_elf.c,v 1.36 2012/02/04 18:12:02 joerg 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.35 2012/02/03 20:11:54 matt Exp $");
+__KERNEL_RCSID(1, "$NetBSD: exec_elf.c,v 1.36 2012/02/04 18:12:02 joerg Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_pax.h"
@@ -238,6 +238,10 @@ elf_copyargs(struct lwp *l, struct exec_
 		a->a_v = kauth_cred_getgid(l->l_cred);
 		a++;
 
+		a->a_type = AT_STACKBASE;
+		a->a_v = l->l_proc->p_stackbase;
+		a++;
+
 		if (pack->ep_path) {
 			execname = a;
 			a->a_type = AT_SUN_EXECNAME;
@@ -251,7 +255,9 @@ elf_copyargs(struct lwp *l, struct exec_
 	a->a_v = 0;
 	a++;
 
-	vlen = (a - ai) * sizeof(AuxInfo);
+	vlen = (a - ai) * sizeof(ai[0]);
+
+	KASSERT(vlen <= sizeof(ai));
 
 	if (execname) {
 		char *path = pack->ep_path;

Index: src/sys/sys/exec_elf.h
diff -u src/sys/sys/exec_elf.h:1.121 src/sys/sys/exec_elf.h:1.122
--- src/sys/sys/exec_elf.h:1.121	Sat Jan 21 21:44:03 2012
+++ src/sys/sys/exec_elf.h	Sat Feb  4 18:12:02 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: exec_elf.h,v 1.121 2012/01/21 21:44:03 njoly Exp $	*/
+/*	$NetBSD: exec_elf.h,v 1.122 2012/02/04 18:12:02 joerg Exp $	*/
 
 /*-
  * Copyright (c) 1994 The NetBSD Foundation, Inc.
@@ -714,6 +714,7 @@ typedef struct {
 #define AT_DCACHEBSIZE	10	/* Data cache block size */
 #define AT_ICACHEBSIZE	11	/* Instruction cache block size */
 #define AT_UCACHEBSIZE	12	/* Unified cache block size */
+#define AT_STACKBASE	13	/* Base address of the main thread */
 
 	/* Vendor specific */
 #define AT_MIPS_NOTELF	10	/* XXX a_val != 0 -> MIPS XCOFF executable */
@@ -1138,7 +1139,7 @@ typedef Elf32_Versym	Elf64_Versym;
 
 #ifdef _KERNEL
 
-#define ELF_AUX_ENTRIES 14	/* Max size of aux array passed to loader */
+#define ELF_AUX_ENTRIES 15	/* Max size of aux array passed to loader */
 #define ELF32_NO_ADDR	(~(Elf32_Addr)0) /* Indicates addr. not yet filled in */
 #define ELF32_LINK_ADDR ((Elf32_Addr)-2) /* advises to use link address */
 #define ELF64_NO_ADDR	(~(Elf64_Addr)0) /* Indicates addr. not yet filled in */

Reply via email to