2 * This software is part of the SBCL system. See the README file for
5 * This software is derived from the CMU CL system, which was
6 * written at Carnegie Mellon University and released into the
7 * public domain. The software is in the public domain and is
8 * provided with absolutely no warranty. See the COPYING and CREDITS
9 * files for more information.
12 #ifndef _INCLUDED_GLOBALS_H_
13 #define _INCLUDED_GLOBALS_H_
15 #ifndef LANGUAGE_ASSEMBLY
16 # include <sys/types.h>
23 /* Currently threads live only on x86oid platforms, but this thing
24 * cannot ever work with threads, so... */
25 #if !defined(LISP_FEATURE_SB_THREAD) && !defined(LISP_FEATURE_X86) && !defined(LISP_FEATURE_X86_64)
26 #define FOREIGN_FUNCTION_CALL_FLAG
29 #ifndef LANGUAGE_ASSEMBLY
31 #ifdef FOREIGN_FUNCTION_CALL_FLAG
32 extern int foreign_function_call_active
;
35 extern size_t dynamic_space_size
;
36 extern size_t thread_control_stack_size
;
38 extern struct runtime_options
*runtime_options
;
40 #ifdef LISP_FEATURE_WIN32
41 #define ENVIRON _environ
43 #define ENVIRON environ
45 extern char **ENVIRON
;
47 #if defined(LISP_FEATURE_SB_THREAD) && !defined(LISP_FEATURE_GCC_TLS)
48 extern pthread_key_t specials
;
51 extern lispobj
*current_control_stack_pointer
;
52 extern lispobj
*current_control_frame_pointer
;
53 # if !defined(LISP_FEATURE_X86) && !defined(LISP_FEATURE_X86_64)
54 extern lispobj
*current_binding_stack_pointer
;
57 #if !defined(LISP_FEATURE_X86) && !defined(LISP_FEATURE_X86_64)
58 /* This is unused on X86 and X86_64, but is used as the global
59 * allocation pointer by the cheney GC, and, in some instances, as
60 * the global allocation pointer on PPC/GENCGC. This should probably
61 * be cleaned up such that it only needs to exist on cheney. At the
62 * moment, it is also used by the GENCGC, to hold the pseudo_atomic
63 * bits, and is tightly coupled to reg_ALLOC by the assembly
65 extern lispobj
*dynamic_space_free_pointer
;
68 # ifndef LISP_FEATURE_GENCGC
69 extern lispobj
*current_auto_gc_trigger
;
72 extern lispobj
*current_dynamic_space
;
74 extern void globals_init(void);
76 #else /* LANGUAGE_ASSEMBLY */
78 # ifdef LISP_FEATURE_MIPS
80 # define EXTERN(name,bytes) .globl name
82 # define EXTERN(name,bytes) .extern name bytes
86 # ifdef LISP_FEATURE_SPARC
88 # define EXTERN(name,bytes) .global name
90 # define EXTERN(name,bytes) .global _ ## name
94 # ifdef LISP_FEATURE_ALPHA
96 # define EXTERN(name,bytes) .globl name
100 # ifdef LISP_FEATURE_PPC
101 # ifdef LISP_FEATURE_DARWIN
102 # define EXTERN(name,bytes) .globl _ ## name
104 # define EXTERN(name,bytes) .globl name
108 # if defined(LISP_FEATURE_X86) || defined(LISP_FEATURE_X86_64)
109 # define EXTERN(name,bytes) .global name
112 # if defined(LISP_FEATURE_ALPHA) || defined(LISP_FEATURE_X86_64)
113 # define POINTERSIZE 8
115 # define POINTERSIZE 4
118 #ifdef FOREIGN_FUNCTION_CALL_FLAG
119 EXTERN(foreign_function_call_active
, 4)
122 EXTERN(current_control_stack_pointer
, POINTERSIZE
)
123 EXTERN(current_control_frame_pointer
, POINTERSIZE
)
124 # if !defined(LISP_FEATURE_X86) && !defined(LISP_FEATURE_X86_64)
125 EXTERN(current_binding_stack_pointer
, POINTERSIZE
)
127 # ifndef LISP_FEATURE_GENCGC
128 EXTERN(dynamic_space_free_pointer
, POINTERSIZE
)
131 #endif /* LANGUAGE_ASSEMBLY */
133 #endif /* _INCLUDED_GLOBALS_H_ */