diff options
Diffstat (limited to 'libguile')
-rw-r--r-- | libguile/gc-malloc.c | 5 | ||||
-rw-r--r-- | libguile/gc.c | 5 | ||||
-rw-r--r-- | libguile/generalized-vectors.c | 8 | ||||
-rw-r--r-- | libguile/mallocs.c | 5 | ||||
-rw-r--r-- | libguile/smob.c | 5 | ||||
-rw-r--r-- | libguile/threads.c | 42 |
6 files changed, 53 insertions, 17 deletions
diff --git a/libguile/gc-malloc.c b/libguile/gc-malloc.c index fb844ff63..5c230dd1f 100644 --- a/libguile/gc-malloc.c +++ b/libguile/gc-malloc.c @@ -26,6 +26,7 @@ #include <stdio.h> #include <errno.h> #include <string.h> +#include <stdlib.h> #ifdef __ia64__ #include <ucontext.h> @@ -57,10 +58,6 @@ extern unsigned long * __libc_ia64_register_backing_store_base; #include "libguile/debug-malloc.h" #endif -#ifdef HAVE_MALLOC_H -#include <malloc.h> -#endif - #ifdef HAVE_UNISTD_H #include <unistd.h> #endif diff --git a/libguile/gc.c b/libguile/gc.c index 0d271afce..5f61a1de8 100644 --- a/libguile/gc.c +++ b/libguile/gc.c @@ -27,6 +27,7 @@ #include <stdio.h> #include <errno.h> #include <string.h> +#include <stdlib.h> #include <math.h> #ifdef __ia64__ @@ -64,10 +65,6 @@ extern unsigned long * __libc_ia64_register_backing_store_base; #include "libguile/debug-malloc.h" #endif -#ifdef HAVE_MALLOC_H -#include <malloc.h> -#endif - #ifdef HAVE_UNISTD_H #include <unistd.h> #endif diff --git a/libguile/generalized-vectors.c b/libguile/generalized-vectors.c index b65b654fb..d8a3bf8d3 100644 --- a/libguile/generalized-vectors.c +++ b/libguile/generalized-vectors.c @@ -131,9 +131,11 @@ SCM scm_c_generalized_vector_ref (SCM v, size_t idx) { scm_t_array_handle h; + size_t pos; SCM ret; scm_generalized_vector_get_handle (v, &h); - ret = h.impl->vref (&h, idx); + pos = h.base + h.dims[0].lbnd + idx * h.dims[0].inc; + ret = h.impl->vref (&h, pos); scm_array_handle_release (&h); return ret; } @@ -152,8 +154,10 @@ void scm_c_generalized_vector_set_x (SCM v, size_t idx, SCM val) { scm_t_array_handle h; + size_t pos; scm_generalized_vector_get_handle (v, &h); - h.impl->vset (&h, idx, val); + pos = h.base + h.dims[0].lbnd + idx * h.dims[0].inc; + h.impl->vset (&h, pos, val); scm_array_handle_release (&h); } diff --git a/libguile/mallocs.c b/libguile/mallocs.c index bd8aee8ea..b4499bc6d 100644 --- a/libguile/mallocs.c +++ b/libguile/mallocs.c @@ -24,15 +24,14 @@ # include <config.h> #endif +#include <stdlib.h> + #include "libguile/_scm.h" #include "libguile/ports.h" #include "libguile/smob.h" #include "libguile/mallocs.h" -#ifdef HAVE_MALLOC_H -#include <malloc.h> -#endif #ifdef HAVE_UNISTD_H #include <unistd.h> #endif diff --git a/libguile/smob.c b/libguile/smob.c index cb6f803a2..e966da8e1 100644 --- a/libguile/smob.c +++ b/libguile/smob.c @@ -23,6 +23,7 @@ #endif #include <stdio.h> +#include <stdlib.h> #include <errno.h> #include "libguile/_scm.h" @@ -33,10 +34,6 @@ #include "libguile/objcodes.h" #include "libguile/programs.h" -#ifdef HAVE_MALLOC_H -#include <malloc.h> -#endif - #include "libguile/smob.h" #include "libguile/bdw-gc.h" diff --git a/libguile/threads.c b/libguile/threads.c index aeadcfe6d..80631b454 100644 --- a/libguile/threads.c +++ b/libguile/threads.c @@ -38,6 +38,10 @@ #include <sys/time.h> #endif +#if HAVE_PTHREAD_NP_H +# include <pthread_np.h> +#endif + #include <assert.h> #include <fcntl.h> #include <nproc.h> @@ -140,6 +144,29 @@ get_thread_stack_base () return pthread_get_stackaddr_np (pthread_self ()); } +#elif HAVE_PTHREAD_ATTR_GET_NP +/* This one is for FreeBSD 9. */ +static void * +get_thread_stack_base () +{ + pthread_attr_t attr; + void *start, *end; + size_t size; + + pthread_attr_init (&attr); + pthread_attr_get_np (pthread_self (), &attr); + pthread_attr_getstack (&attr, &start, &size); + pthread_attr_destroy (&attr); + + end = (char *)start + size; + +#if SCM_STACK_GROWS_UP + return start; +#else + return end; +#endif +} + #else #error Threads enabled with old BDW-GC, but missing get_thread_stack_base impl. Please upgrade to libgc >= 7.1. #endif @@ -2216,6 +2243,21 @@ scm_ia64_ar_bsp (const void *opaque) return (void *) ctx->uc_mcontext.sc_ar_bsp; } # endif /* linux */ +# ifdef __FreeBSD__ +# include <ucontext.h> +void * +scm_ia64_register_backing_store_base (void) +{ + return (void *)0x8000000000000000; +} +void * +scm_ia64_ar_bsp (const void *opaque) +{ + const ucontext_t *ctx = opaque; + return (void *)(ctx->uc_mcontext.mc_special.bspstore + + ctx->uc_mcontext.mc_special.ndirty); +} +# endif /* __FreeBSD__ */ #endif /* __ia64__ */ |