summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorYAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>2006-11-13 08:20:48 +0000
committerYAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>2006-11-13 08:20:48 +0000
commit55a314a5c2c62d5059e10b844af34d17726c0d02 (patch)
tree110f6016b938f0aff0f3791cd594c531db8b2290 /src
parent2f984b39101aec06b7ce07b36ff0132c2711d1df (diff)
downloademacs-55a314a5c2c62d5059e10b844af34d17726c0d02.tar.gz
(mark_memory): New argument OFFSET. All uses changed.
Fix address calculations for case END < START. (mark_stack): Impose Lisp_Object alignment on jmp_buf.
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog6
-rw-r--r--src/alloc.c22
2 files changed, 20 insertions, 8 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index c3fde3fac82..ddc50a6877b 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,9 @@
+2006-11-13 Nozomu Ando <nand@mac.com>
+
+ * alloc.c (mark_memory): New argument OFFSET. All uses changed.
+ Fix address calculations for case END < START.
+ (mark_stack): Impose Lisp_Object alignment on jmp_buf.
+
2006-11-12 Juanma Barranquero <lekktu@gmail.com>
* coding.c (Fencode_sjis_char, Fencode_big5_char):
diff --git a/src/alloc.c b/src/alloc.c
index 2fd50009649..f3ca3e71a29 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -478,7 +478,7 @@ static int live_symbol_p P_ ((struct mem_node *, void *));
static int live_float_p P_ ((struct mem_node *, void *));
static int live_misc_p P_ ((struct mem_node *, void *));
static void mark_maybe_object P_ ((Lisp_Object));
-static void mark_memory P_ ((void *, void *));
+static void mark_memory P_ ((void *, void *, int));
static void mem_init P_ ((void));
static struct mem_node *mem_insert P_ ((void *, void *, enum mem_type));
static void mem_insert_fixup P_ ((struct mem_node *));
@@ -4327,11 +4327,13 @@ mark_maybe_pointer (p)
}
-/* Mark Lisp objects referenced from the address range START..END. */
+/* Mark Lisp objects referenced from the address range START+OFFSET..END
+ or END+OFFSET..START. */
static void
-mark_memory (start, end)
+mark_memory (start, end, offset)
void *start, *end;
+ int offset;
{
Lisp_Object *p;
void **pp;
@@ -4350,7 +4352,7 @@ mark_memory (start, end)
}
/* Mark Lisp_Objects. */
- for (p = (Lisp_Object *) start; (void *) p < end; ++p)
+ for (p = (Lisp_Object *) ((char *) start + offset); (void *) p < end; ++p)
mark_maybe_object (*p);
/* Mark Lisp data pointed to. This is necessary because, in some
@@ -4371,7 +4373,7 @@ mark_memory (start, end)
away. The only reference to the life string is through the
pointer `s'. */
- for (pp = (void **) start; (void *) pp < end; ++pp)
+ for (pp = (void **) ((char *) start + offset); (void *) pp < end; ++pp)
mark_maybe_pointer (*pp);
}
@@ -4550,7 +4552,11 @@ static void
mark_stack ()
{
int i;
- jmp_buf j;
+ /* jmp_buf may not be aligned enough on darwin-ppc64 */
+ union aligned_jmpbuf {
+ Lisp_Object o;
+ jmp_buf j;
+ } j;
volatile int stack_grows_down_p = (char *) &j > (char *) stack_base;
void *end;
@@ -4581,7 +4587,7 @@ mark_stack ()
}
#endif /* GC_SETJMP_WORKS */
- setjmp (j);
+ setjmp (j.j);
end = stack_grows_down_p ? (char *) &j + sizeof j : (char *) &j;
#endif /* not GC_SAVE_REGISTERS_ON_STACK */
@@ -4596,7 +4602,7 @@ mark_stack ()
#endif
#endif
for (i = 0; i < sizeof (Lisp_Object); i += GC_LISP_OBJECT_ALIGNMENT)
- mark_memory ((char *) stack_base + i, end);
+ mark_memory (stack_base, end, i);
/* Allow for marking a secondary stack, like the register stack on the
ia64. */
#ifdef GC_MARK_SECONDARY_STACK