diff options
author | Chong Yidong <cyd@stupidchicken.com> | 2011-01-23 17:38:13 -0500 |
---|---|---|
committer | Chong Yidong <cyd@stupidchicken.com> | 2011-01-23 17:38:13 -0500 |
commit | 19634648a609af92c97a084cd4d3ad3b10113c1d (patch) | |
tree | ea0d507cc5917a64af719318bd648438c62ae701 | |
parent | 6de1218f3cbfabdb60446cffc5013962aa434de0 (diff) | |
download | emacs-19634648a609af92c97a084cd4d3ad3b10113c1d.tar.gz |
* lisp.h (XPNTR): Obey DATA_SEG_BITS in all non-USE_LSB_TAG cases (Bug#6811).
Remove unused HAVE_SHM branch.
-rw-r--r-- | src/ChangeLog | 6 | ||||
-rw-r--r-- | src/lisp.h | 38 |
2 files changed, 20 insertions, 24 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index 874a3bc5bcd..297ea12aee7 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,4 +1,10 @@ +2011-01-23 Chong Yidong <cyd@stupidchicken.com> + + * lisp.h (XPNTR): Obey DATA_SEG_BITS in all non-USE_LSB_TAG cases. + Remove unused HAVE_SHM branch (Bug#6811). + 2011-01-23 Peter O'Gorman <bug-gnu-emacs@mlists.thewrittenword.com> (tiny change) + * s/hpux11.h: Set CANNOT_DUMP on IA64 (Bug#6811). 2011-01-22 Martin Rudalics <rudalics@gmx.at> diff --git a/src/lisp.h b/src/lisp.h index 4f64425e913..34330b0e6c6 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -432,7 +432,13 @@ enum pvec_type #define XSET(var, type, ptr) \ ((var) = ((EMACS_INT)(type) << VALBITS) + ((EMACS_INT) (ptr) & VALMASK)) +#ifdef DATA_SEG_BITS +/* DATA_SEG_BITS forces extra bits to be or'd in with any pointers + which were stored in a Lisp_Object */ +#define XPNTR(a) ((EMACS_UINT) (((a) & VALMASK) | DATA_SEG_BITS)) +#else #define XPNTR(a) ((EMACS_UINT) ((a) & VALMASK)) +#endif #endif /* not USE_LSB_TAG */ @@ -482,6 +488,14 @@ enum pvec_type # define XSET(var, vartype, ptr) \ (((var).s.val = ((EMACS_INT) (ptr))), ((var).s.type = ((char) (vartype)))) +#ifdef DATA_SEG_BITS +/* DATA_SEG_BITS forces extra bits to be or'd in with any pointers + which were stored in a Lisp_Object */ +#define XPNTR(a) (XUINT (a) | DATA_SEG_BITS) +#else +#define XPNTR(a) ((EMACS_INT) XUINT (a)) +#endif + #endif /* !USE_LSB_TAG */ #if __GNUC__ >= 2 && defined (__OPTIMIZE__) @@ -503,30 +517,6 @@ extern Lisp_Object make_number P_ ((EMACS_INT)); #define EQ(x, y) (XHASH (x) == XHASH (y)) -#ifndef XPNTR -#ifdef HAVE_SHM -/* In this representation, data is found in two widely separated segments. */ -extern size_t pure_size; -#define XPNTR(a) \ - (XUINT (a) | (XUINT (a) > pure_size ? DATA_SEG_BITS : PURE_SEG_BITS)) -#else /* not HAVE_SHM */ -#ifdef DATA_SEG_BITS -/* This case is used for the rt-pc. - In the diffs I was given, it checked for ptr = 0 - and did not adjust it in that case. - But I don't think that zero should ever be found - in a Lisp object whose data type says it points to something. */ -#define XPNTR(a) (XUINT (a) | DATA_SEG_BITS) -#else -/* Some versions of gcc seem to consider the bitfield width when - issuing the "cast to pointer from integer of different size" - warning, so the cast is here to widen the value back to its natural - size. */ -#define XPNTR(a) ((EMACS_INT) XUINT (a)) -#endif -#endif /* not HAVE_SHM */ -#endif /* no XPNTR */ - /* Largest and smallest representable fixnum values. These are the C values. */ |