Module Name:    src
Committed By:   christos
Date:           Sat Oct 13 15:35:56 UTC 2012

Modified Files:
        src/sys/kern: kern_exec.c
        src/sys/sys: sysctl.h

Log Message:
add KERN_USRSTACK (this is not dynamically defined for FreeBSD compatibility)


To generate a diff of this commit:
cvs rdiff -u -r1.355 -r1.356 src/sys/kern/kern_exec.c
cvs rdiff -u -r1.201 -r1.202 src/sys/sys/sysctl.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/kern_exec.c
diff -u src/sys/kern/kern_exec.c:1.355 src/sys/kern/kern_exec.c:1.356
--- src/sys/kern/kern_exec.c:1.355	Wed Aug 29 14:56:39 2012
+++ src/sys/kern/kern_exec.c	Sat Oct 13 11:35:55 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: kern_exec.c,v 1.355 2012/08/29 18:56:39 dholland Exp $	*/
+/*	$NetBSD: kern_exec.c,v 1.356 2012/10/13 15:35:55 christos Exp $	*/
 
 /*-
  * Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -59,7 +59,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_exec.c,v 1.355 2012/08/29 18:56:39 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_exec.c,v 1.356 2012/10/13 15:35:55 christos Exp $");
 
 #include "opt_exec.h"
 #include "opt_ktrace.h"
@@ -104,6 +104,7 @@ __KERNEL_RCSID(0, "$NetBSD: kern_exec.c,
 #include <sys/spawn.h>
 #include <sys/prot.h>
 #include <sys/cprng.h>
+#include <sys/sysctl.h>
 
 #include <uvm/uvm_extern.h>
 
@@ -1617,6 +1618,30 @@ exec_remove(struct execsw *esp, int coun
 	return 0;
 }
 
+static int
+sysctl_kern_usrstack(SYSCTLFN_ARGS)
+{  
+	u_long ptr;
+	struct sysctlnode node = *rnode;
+	node.sysctl_data = &ptr;
+	ptr = l->l_proc->p_stackbase;
+	return sysctl_lookup(SYSCTLFN_CALL(&node));
+}
+
+static void
+sysctl_kern_usrstack_setup(void)
+{
+	struct sysctllog *kern_usrstack_sysctllog;
+
+	kern_usrstack_sysctllog = NULL;
+	sysctl_createv(&kern_usrstack_sysctllog, 0, NULL, NULL,
+	    CTLFLAG_PERMANENT|CTLFLAG_READONLY,
+	    CTLTYPE_LONG, "usrstack", 
+	    SYSCTL_DESCR("User process stack base"),
+	    sysctl_kern_usrstack, 0, NULL, 0,
+	    CTL_KERN, KERN_USRSTACK, CTL_EOL);
+}
+
 /*
  * Initialize exec structures. If init_boot is true, also does necessary
  * one-time initialization (it's called from main() that way).
@@ -1640,6 +1665,7 @@ exec_init(int init_boot)
 		pool_init(&exec_pool, NCARGS, 0, 0, PR_NOALIGN|PR_NOTOUCH,
 		    "execargs", &exec_palloc, IPL_NONE);
 		pool_sethardlimit(&exec_pool, maxexec, "should not happen", 0);
+		sysctl_kern_usrstack_setup();
 	} else {
 		KASSERT(rw_write_held(&exec_lock));
 	}

Index: src/sys/sys/sysctl.h
diff -u src/sys/sys/sysctl.h:1.201 src/sys/sys/sysctl.h:1.202
--- src/sys/sys/sysctl.h:1.201	Fri Jun  8 22:31:15 2012
+++ src/sys/sys/sysctl.h	Sat Oct 13 11:35:56 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: sysctl.h,v 1.201 2012/06/09 02:31:15 christos Exp $	*/
+/*	$NetBSD: sysctl.h,v 1.202 2012/10/13 15:35:56 christos Exp $	*/
 
 /*
  * Copyright (c) 1989, 1993
@@ -273,7 +273,8 @@ struct ctlname {
 #define	KERN_SYSVIPC		82	/* node: SysV IPC parameters */
 #define	KERN_BOOTTIME		83	/* struct: time kernel was booted */
 #define	KERN_EVCNT		84	/* struct: evcnts */
-#define	KERN_MAXID		85	/* number of valid kern ids */
+#define	KERN_USRSTACK		85	/* long: user stack base */
+#define	KERN_MAXID		86	/* number of valid kern ids */
 
 
 #define	CTL_KERN_NAMES { \
@@ -362,6 +363,7 @@ struct ctlname {
 	{ "sysvipc", CTLTYPE_STRUCT }, \
 	{ "boottime", CTLTYPE_STRUCT }, \
 	{ "evcnt", CTLTYPE_STRUCT }, \
+	{ "usrstack", CTLTYPE_LONG }, \
 }
 
 /*

Reply via email to