summaryrefslogtreecommitdiff
path: root/libguile
diff options
context:
space:
mode:
Diffstat (limited to 'libguile')
-rw-r--r--libguile/gc-malloc.c5
-rw-r--r--libguile/gc.c5
-rw-r--r--libguile/generalized-vectors.c8
-rw-r--r--libguile/mallocs.c5
-rw-r--r--libguile/smob.c5
-rw-r--r--libguile/threads.c42
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__ */