FreeBSD/Linux Kernel Cross Reference
sys/kern/stack.h
1 /*
2 * Mach Operating System
3 * Copyright (c) 1993 Carnegie Mellon University
4 * All Rights Reserved.
5 *
6 * Permission to use, copy, modify and distribute this software and its
7 * documentation is hereby granted, provided that both the copyright
8 * notice and this permission notice appear in all copies of the
9 * software, derivative works or modified versions, and any portions
10 * thereof, and that both notices appear in supporting documentation.
11 *
12 * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
13 * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
14 * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
15 *
16 * Carnegie Mellon requests users of this software to return to
17 *
18 * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
19 * School of Computer Science
20 * Carnegie Mellon University
21 * Pittsburgh PA 15213-3890
22 *
23 * any improvements or extensions that they make and grant Carnegie Mellon
24 * the rights to redistribute these changes.
25 */
26 /*
27 * HISTORY
28 * $Log: stack.h,v $
29 * Revision 2.2 93/11/17 19:06:19 dbg
30 * Moved prototypes here from kern/sched_prim.h.
31 * [93/10/21 dbg]
32 *
33 */
34
35 /*
36 * Kernel stack manipulation routines.
37 */
38
39 #ifndef _KERN_STACK_H_
40 #define _KERN_STACK_H_
41
42 #include <mach_debug.h>
43
44 #include <mach/boolean.h>
45 #include <mach/machine/vm_types.h>
46 #include <kern/kern_types.h>
47
48 /*
49 * These functions are either defined in kern/thread.c
50 * via machine-dependent stack_attach and stack_detach functions,
51 * or are defined directly by machine-dependent code.
52 */
53
54 extern void stack_alloc(
55 thread_t thread,
56 no_return (*resume)(thread_t));
57 extern boolean_t stack_alloc_try(
58 thread_t thread,
59 no_return (*resume)(thread_t));
60 extern void stack_free(
61 thread_t thread);
62 extern void stack_privilege(
63 thread_t thread);
64 extern void stack_collect(void);
65
66 /*
67 * These routines are called by machine-independent
68 * stack allocation code. They may (but are not
69 * required to be) called by machine-dependent stack
70 * allocation routines.
71 */
72 extern void stack_attach(
73 thread_t thread,
74 vm_offset_t stack,
75 no_return (*resume)(thread_t));
76
77 extern vm_offset_t stack_detach(
78 thread_t thread);
79
80
81 #if MACH_DEBUG
82 /*
83 * Stack statistics routines.
84 */
85 extern void stack_init(
86 vm_offset_t stack);
87 extern void stack_finalize(
88 vm_offset_t stack);
89 extern vm_size_t stack_usage(
90 vm_offset_t stack);
91 extern void stack_statistics(
92 unsigned int *totalp,
93 vm_size_t *maxusagep);
94
95 #endif /* MACH_DEBUG */
96
97
98
99 #endif /* _KERN_STACK_H_ */
100
Cache object: f92b078b23bca23be211bce659d9800e
|