[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Mac OS X] LP64 support for Mac OS X 10.4 + G5.
From: |
YAMAMOTO Mitsuharu |
Subject: |
Re: [Mac OS X] LP64 support for Mac OS X 10.4 + G5. |
Date: |
Sat, 11 Nov 2006 15:48:23 +0900 |
User-agent: |
Wanderlust/2.14.0 (Africa) SEMI/1.14.6 (Maruoka) FLIM/1.14.6 (Marutamachi) APEL/10.6 Emacs/22.0.90 (sparc-sun-solaris2.8) MULE/5.0 (SAKAKI) |
Could someone take a look at the following src/alloc.c part of the
LP64 support on Mac OS X 10.4 + G5 by Nozomu Ando?
http://lists.gnu.org/archive/html/emacs-devel/2005-05/msg00547.html
(src/unexmacosx.c part is already installed.)
FYI, jmp_buf in this platform is not defined in terms of array of
`long's, but that of `int's.
YAMAMOTO Mitsuharu
address@hidden
Index: src/alloc.c
===================================================================
RCS file: /cvsroot/emacs/emacs/src/alloc.c,v
retrieving revision 1.368
diff -u -r1.368 alloc.c
--- src/alloc.c 20 Apr 2005 07:50:08 -0000 1.368
+++ src/alloc.c 12 May 2005 23:37:51 -0000
@@ -434,7 +434,7 @@
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 *));
@@ -4139,11 +4139,13 @@
}
-/* 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;
@@ -4162,7 +4164,7 @@
}
/* 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
@@ -4362,7 +4364,11 @@
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;
@@ -4393,7 +4399,7 @@
}
#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 */
@@ -4408,7 +4414,7 @@
#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
- Re: [Mac OS X] LP64 support for Mac OS X 10.4 + G5.,
YAMAMOTO Mitsuharu <=