X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fglobals.h;h=b0e812ba494a7d4d9ff7def4f620a6c2589f86a2;hb=37d3828773e2f847bb1ed7522b0af4fb8e736fc8;hp=e0ba45457433dff7d2eb62c776259efa1bfad020;hpb=a530bbe337109d898d5b4a001fc8f1afa3b5dc39;p=sbcl.git diff --git a/src/runtime/globals.h b/src/runtime/globals.h index e0ba454..b0e812b 100644 --- a/src/runtime/globals.h +++ b/src/runtime/globals.h @@ -9,81 +9,131 @@ * files for more information. */ -/* - * $Header$ - */ - -#if !defined(_INCLUDE_GLOBALS_H_) +#ifndef _INCLUDED_GLOBALS_H_ #define _INCLUDED_GLOBALS_H_ #ifndef LANGUAGE_ASSEMBLY +# include +# include +# include "runtime.h" +# include "runtime-options.h" +#endif -#include "runtime.h" +#include "sbcl.h" -extern int foreign_function_call_active; - -extern lispobj *current_control_stack_pointer; -extern lispobj *current_control_frame_pointer; -#if !defined(ibmrt) && !defined(__i386__) -extern lispobj *current_binding_stack_pointer; -#endif +#ifndef LANGUAGE_ASSEMBLY -extern lispobj *read_only_space; -extern lispobj *static_space; -extern lispobj *dynamic_0_space; -extern lispobj *dynamic_1_space; -extern lispobj *control_stack; -extern lispobj *binding_stack; -#ifdef __i386__ -extern lispobj *control_stack_end; -#endif -extern lispobj *current_dynamic_space; -#if !defined(ibmrt) && !defined(__i386__) -extern lispobj *current_dynamic_space_free_pointer; -extern lispobj *current_auto_gc_trigger; +#ifdef LISP_FEATURE_SB_THREAD +#define foreign_function_call_active_p(thread) \ + (thread->foreign_function_call_active) +#else +extern int foreign_function_call_active; +#define foreign_function_call_active_p(thread) \ + foreign_function_call_active #endif -extern void globals_init(void); +extern os_vm_size_t dynamic_space_size; +extern os_vm_size_t thread_control_stack_size; -#else LANGUAGE_ASSEMBLY +extern struct runtime_options *runtime_options; -/* These are needed by ./assem.s */ +#ifdef LISP_FEATURE_WIN32 +#define ENVIRON _environ +#else +#define ENVIRON environ +#endif +extern char **ENVIRON; -#ifdef mips -#define EXTERN(name,bytes) .extern name bytes +#if defined(LISP_FEATURE_SB_THREAD) && !defined(LISP_FEATURE_GCC_TLS) +extern pthread_key_t specials; #endif -#ifdef sparc -#ifdef SVR4 -#define EXTERN(name,bytes) .global name -#else -#define EXTERN(name,bytes) .global _ ## name + +#if !defined(LISP_FEATURE_SB_THREAD) +extern lispobj *current_control_stack_pointer; #endif +#if defined(LISP_FEATURE_X86) || defined(LISP_FEATURE_X86_64) || !defined(LISP_FEATURE_SB_THREAD) +extern lispobj *current_control_frame_pointer; #endif -#ifdef ibmrt -#define EXTERN(name,bytes) .globl _/**/name +#if !defined(LISP_FEATURE_X86) && !defined(LISP_FEATURE_X86_64) && !defined(LISP_FEATURE_SB_THREAD) +extern lispobj *current_binding_stack_pointer; #endif -#ifdef __i386__ -#ifdef __linux__ -#define EXTERN(name,bytes) .globl _/**/name -#else -#define EXTERN(name,bytes) .global _ ## name -#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 -EXTERN(foreign_function_call_active, 4) +# ifndef LISP_FEATURE_GENCGC +extern lispobj *current_auto_gc_trigger; +# endif + +extern lispobj *current_dynamic_space; + +extern void globals_init(void); -EXTERN(current_control_stack_pointer, 4) -EXTERN(current_control_frame_pointer, 4) -#if !defined(ibmrt) && !defined(__i386__) -EXTERN(current_binding_stack_pointer, 4) -EXTERN(current_dynamic_space_free_pointer, 4) +#else /* LANGUAGE_ASSEMBLY */ + +# ifdef LISP_FEATURE_MIPS +# ifdef __linux__ +# define EXTERN(name,bytes) .globl name +# else +# define EXTERN(name,bytes) .extern name bytes +# endif +# endif +/**/ +# ifdef LISP_FEATURE_SPARC +# ifdef SVR4 +# define EXTERN(name,bytes) .global 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 + +# if defined(LISP_FEATURE_ALPHA) || defined(LISP_FEATURE_X86_64) +# define POINTERSIZE 8 +# else +# define POINTERSIZE 4 +# endif + +#ifndef LISP_FEATURE_SB_THREAD +EXTERN(foreign_function_call_active, 4) #endif -#ifdef mips -EXTERN(current_flags_register, 4) +#if !defined(LISP_FEATURE_SB_THREAD) && !defined(LISP_FEATURE_C_STACK_IS_CONTROL_STACK) +EXTERN(current_control_stack_pointer, POINTERSIZE) #endif +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 /* LANGUAGE_ASSEMBLY */ -#endif _INCLUDED_GLOBALS_H_ +#endif /* _INCLUDED_GLOBALS_H_ */