X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fglobals.h;h=679e6265098968dc94f2005a12c6eadbc18ff403;hb=de0a47a2f2b165f34177669bd9499135847b4897;hp=2064f6f08b194bbab7d9b59a019cc4a732e08469;hpb=f7b3fe1bd86348bfd2a3c506e437084752142c83;p=sbcl.git diff --git a/src/runtime/globals.h b/src/runtime/globals.h index 2064f6f..679e626 100644 --- a/src/runtime/globals.h +++ b/src/runtime/globals.h @@ -9,89 +9,125 @@ * files for more information. */ -#if !defined(_INCLUDE_GLOBALS_H_) +#ifndef _INCLUDED_GLOBALS_H_ #define _INCLUDED_GLOBALS_H_ #ifndef LANGUAGE_ASSEMBLY +# include +# include +# include "runtime.h" +#endif + +#include "sbcl.h" -#include -#include -#include "runtime.h" +/* Currently threads live only on x86oid platforms, but this thing + * cannot ever work with threads, so... */ +#if !defined(LISP_FEATURE_SB_THREAD) && !defined(LISP_FEATURE_X86) && !defined(LISP_FEATURE_X86_64) +#define FOREIGN_FUNCTION_CALL_FLAG +#endif + +#ifndef LANGUAGE_ASSEMBLY +#ifdef FOREIGN_FUNCTION_CALL_FLAG extern int foreign_function_call_active; -extern boolean stop_the_world; +#endif + +extern size_t dynamic_space_size; +extern size_t thread_control_stack_size; + +extern struct runtime_options *runtime_options; + +#ifdef LISP_FEATURE_WIN32 +#define ENVIRON _environ +#else +#define ENVIRON environ +#endif +extern char **ENVIRON; + +#if defined(LISP_FEATURE_SB_THREAD) && !defined(LISP_FEATURE_GCC_TLS) +extern pthread_key_t specials; +#endif extern lispobj *current_control_stack_pointer; extern lispobj *current_control_frame_pointer; -#if !defined(LISP_FEATURE_X86) +# if !defined(LISP_FEATURE_X86) && !defined(LISP_FEATURE_X86_64) extern lispobj *current_binding_stack_pointer; +# endif + +#if !defined(LISP_FEATURE_X86) && !defined(LISP_FEATURE_X86_64) +/* This is unused on X86 and X86_64, but is used as the global + * allocation pointer by the cheney GC, and, in some instances, as + * the global allocation pointer on PPC/GENCGC. This should probably + * be cleaned up such that it only needs to exist on cheney. At the + * moment, it is also used by the GENCGC, to hold the pseudo_atomic + * bits, and is tightly coupled to reg_ALLOC by the assembly + * routines. */ +extern lispobj *dynamic_space_free_pointer; #endif -#if !defined(LISP_FEATURE_X86) -/* FIXME: Why doesn't the x86 need this? */ -extern lispobj *dynamic_space_free_pointer; +# ifndef LISP_FEATURE_GENCGC extern lispobj *current_auto_gc_trigger; -#endif +# endif extern lispobj *current_dynamic_space; -extern pid_t parent_pid; -extern boolean stop_the_world; extern void globals_init(void); #else /* LANGUAGE_ASSEMBLY */ -#ifdef mips -#define EXTERN(name,bytes) .extern name bytes -#endif +# ifdef LISP_FEATURE_MIPS +# ifdef __linux__ +# define EXTERN(name,bytes) .globl name +# else +# define EXTERN(name,bytes) .extern name bytes +# endif +# endif /**/ -#ifdef sparc -#ifdef SVR4 -#define EXTERN(name,bytes) .global name -#else -#define EXTERN(name,bytes) .global _ ## name -#endif -#endif +# ifdef LISP_FEATURE_SPARC +# ifdef SVR4 +# define EXTERN(name,bytes) .global name +# else +# define EXTERN(name,bytes) .global _ ## name +# endif +# endif /**/ -#ifdef alpha -#ifdef __linux__ -#define EXTERN(name,bytes) .globl name -#endif -#endif -#ifdef ppc -#ifdef DARWIN -#define EXTERN(name,bytes) .globl _/**/name -#else -#define EXTERN(name,bytes) .globl name -#endif -#endif -#ifdef LISP_FEATURE_X86 -#ifdef __linux__ -/* I'm very dubious about this. Linux hasn't used _ on external names - * since ELF became prevalent - i.e. about 1996, on x86 -dan 20010125 */ -#define EXTERN(name,bytes) .globl _/**/name -#else -#define EXTERN(name,bytes) .global _ ## name -#endif -#endif +# ifdef LISP_FEATURE_ALPHA +# ifdef __linux__ +# define EXTERN(name,bytes) .globl name +# endif +# endif +/**/ +# ifdef LISP_FEATURE_PPC +# ifdef LISP_FEATURE_DARWIN +# define EXTERN(name,bytes) .globl _ ## name +# else +# define EXTERN(name,bytes) .globl name +# endif +# endif +/**/ +# if defined(LISP_FEATURE_X86) || defined(LISP_FEATURE_X86_64) +# define EXTERN(name,bytes) .global name +# endif -/* FIXME : these sizes are, incidentally, bogus on Alpha. But the - * EXTERN macro doesn't use its second arg anyway, so no immediate harm - * done -dan 2002.05.07 - */ +# if defined(LISP_FEATURE_ALPHA) || defined(LISP_FEATURE_X86_64) +# define POINTERSIZE 8 +# else +# define POINTERSIZE 4 +# endif +#ifdef FOREIGN_FUNCTION_CALL_FLAG EXTERN(foreign_function_call_active, 4) - -EXTERN(current_control_stack_pointer, 4) -EXTERN(current_control_frame_pointer, 4) -EXTERN(current_binding_stack_pointer, 4) -EXTERN(dynamic_space_free_pointer, 4) -EXTERN(current_dynamic_space, 4) - -#ifdef mips -EXTERN(current_flags_register, 4) #endif +EXTERN(current_control_stack_pointer, POINTERSIZE) +EXTERN(current_control_frame_pointer, POINTERSIZE) +# if !defined(LISP_FEATURE_X86) && !defined(LISP_FEATURE_X86_64) +EXTERN(current_binding_stack_pointer, POINTERSIZE) +# endif +# ifndef LISP_FEATURE_GENCGC +EXTERN(dynamic_space_free_pointer, POINTERSIZE) +# endif + #endif /* LANGUAGE_ASSEMBLY */ #endif /* _INCLUDED_GLOBALS_H_ */