From 19634648a609af92c97a084cd4d3ad3b10113c1d Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Sun, 23 Jan 2011 17:38:13 -0500 Subject: [PATCH] * lisp.h (XPNTR): Obey DATA_SEG_BITS in all non-USE_LSB_TAG cases (Bug#6811). Remove unused HAVE_SHM branch. --- src/ChangeLog | 6 ++++++ 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 + + * 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 (tiny change) + * s/hpux11.h: Set CANNOT_DUMP on IA64 (Bug#6811). 2011-01-22 Martin Rudalics 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. */ -- 2.11.4.GIT