[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] /srv/bzr/emacs/trunk r109213: Simplify export of symbols t
From: |
Paul Eggert |
Subject: |
[Emacs-diffs] /srv/bzr/emacs/trunk r109213: Simplify export of symbols to GDB; fix related .gdbinit bugs. |
Date: |
Thu, 26 Jul 2012 01:12:03 -0700 |
User-agent: |
Bazaar (2.5.0) |
------------------------------------------------------------
revno: 109213
committer: Paul Eggert <address@hidden>
branch nick: trunk
timestamp: Thu 2012-07-26 01:12:03 -0700
message:
Simplify export of symbols to GDB; fix related .gdbinit bugs.
* etc/emacs-buffer.gdb ($tagmask, $valmask): Remove.
(ygetptr): Adjust to recent changes in lisp.h and emacs.c,
by using VALMASK instead of $valmask, CHECK_LISP_OBJECT_TYPE
instead of gdb_use_union, and DATA_SEG_BITS instead of
gdb_data_seg_bits. Also, use $ptr.i rather than $ptr.u.val.
* src/.gdbinit (xgetptr, xgetint, xgettype): Don't use "set $bugfix =
$bugfix.i", as this doesn't work (with GDB 7.4.1, anyway).
(xgetptr, xgetint, xgettype, xcoding, xcharset, xprintbytestr):
Adjust to changes in lisp.h and emacs.c, by using
CHECK_LISP_OBJECT_TYPE rather than gdb_use_struct, VALMASK instead
of $valmask, DATA_SEG_BITS instead of gdb_data_seg_bits,
INTTYPEBITS instead of gdb_gctypebits - 1, USE_LSB_TAG instead of
gdb_use_lsb, (1 << GCTYPEBITS) - 1 instead of $tagmask, VALBITS
instead of gdb_valbits.
(xvectype, xvector, xpr, xprintstr, xbacktrace): Similarly, use
PSEUDOVECTOR_FLAG instead of PVEC_FLAG, and ARRAY_MARK_FLAG
instead of gdb_array_mark_flag.
(xboolvector): Get size from $->size, not $->header.size.
Use BOOL_VECTOR_BITS_PER_CHAR rather than mystery constants.
(xreload, hook-run, hookpost-run): Remove.
* src/emacs.c: Include <verify.h>.
(gdb_use_lsb, gdb_use_struct, gdb_valbits, gdb_gctypebits)
(gdb_data_seg_bits, PVEC_FLAG, gdb_array_mark_flag, gdb_pvec_type):
Remove.
(gdb_CHECK_LISP_OBJECT_TYPE, gdb_DATA_SEG_BITS, gdb_GCTYPEBITS)
(gdb_USE_LSB_TAG): New enum constants.
(CHECK_LISP_OBJECT_TYPE, DATA_SEG_BITS, GCTYPEBITS, USE_LSB_TAG):
Also define these as enum constants, so they're visible to GDB.
(ARRAY_MARK_FLAG_VAL, PSEUDOVECTOR_FLAG_VAL, VALMASK_VAL): New macros.
(ARRAY_MARK_FLAG, PSEUDOVECTOR_FLAG, VALMASK): Also define these
as constants, so they're visible to GDB.
* src/lisp.h (VALBITS, INTTYPEBITS, FIXNUM_BITS, PSEUDOVECTOR_SIZE_BITS)
(PSEUDOVECTOR_SIZE_MASK, PVEC_TYPE_MASK, BOOL_VECTOR_BITS_PER_CHAR):
Now enum constants, not macros, so they're visible to GDB.
(CHECK_LISP_OBJECT_TYPE, DATA_SEG_BITS): Default to 0, as this is
more convenient now. All uses changed.
(VALMASK) [USE_LSB_TAG]: Also define in this case.
* src/mem-limits.h (EXCEEDS_LISP_PTR): Adjust to DATA_SEG_BITS change.
modified:
etc/ChangeLog
etc/emacs-buffer.gdb
src/.gdbinit
src/ChangeLog
src/emacs.c
src/lisp.h
src/mem-limits.h
=== modified file 'etc/ChangeLog'
--- a/etc/ChangeLog 2012-07-20 10:29:32 +0000
+++ b/etc/ChangeLog 2012-07-26 08:12:03 +0000
@@ -1,3 +1,12 @@
+2012-07-26 Paul Eggert <address@hidden>
+
+ Simplify export of symbols to GDB.
+ * emacs-buffer.gdb ($tagmask, $valmask): Remove.
+ (ygetptr): Adjust to recent changes in lisp.h and emacs.c,
+ by using VALMASK instead of $valmask, CHECK_LISP_OBJECT_TYPE
+ instead of gdb_use_union, and DATA_SEG_BITS instead of
+ gdb_data_seg_bits. Also, use $ptr.i rather than $ptr.u.val.
+
2012-07-20 Eli Zaretskii <address@hidden>
* tutorials/TUTORIAL.he: Make the first sentence display correctly
=== modified file 'etc/emacs-buffer.gdb'
--- a/etc/emacs-buffer.gdb 2012-02-21 00:07:53 +0000
+++ b/etc/emacs-buffer.gdb 2012-07-26 08:12:03 +0000
@@ -70,21 +70,16 @@
# Code:
-# Force loading of symbols, enough to give us gdb_valbits etc.
+# Force loading of symbols, enough to give us VALMASK etc.
set main
# When nonzero, display some extra diagnostics in various commands
set $yverbose = 1
set $yfile_buffers_only = 0
-set $tagmask = (((long)1 << gdb_gctypebits) - 1)
-# The consing_since_gc business widens the 1 to EMACS_INT,
-# a symbol not directly visible to GDB.
-set $valmask = gdb_use_lsb ? ~($tagmask) : ((consing_since_gc -
consing_since_gc + 1) << gdb_valbits) - 1
-
define ygetptr
set $ptr = $arg0
- set $ptr = (gdb_use_union ? $ptr.u.val : $ptr & $valmask) | gdb_data_seg_bits
+ set $ptr = ((CHECK_LISP_OBJECT_TYPE ? $ptr.i : $ptr) & VALMASK) |
DATA_SEG_BITS
end
define ybuffer-list
=== modified file 'src/.gdbinit'
--- a/src/.gdbinit 2012-07-25 22:47:42 +0000
+++ b/src/.gdbinit 2012-07-26 08:12:03 +0000
@@ -17,7 +17,7 @@
# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
# Boston, MA 02110-1301, USA.
-# Force loading of symbols, enough to give us gdb_valbits etc.
+# Force loading of symbols, enough to give us VALBITS etc.
set main
# With some compilers, we need this to give us struct Lisp_Symbol etc.:
set Fmake_symbol
@@ -43,32 +43,21 @@
# debugging.
handle SIGALRM ignore
-# $valmask and $tagmask are mask values set up by the xreload macro below.
-
# Use $bugfix so that the value isn't a constant.
# Using a constant runs into GDB bugs sometimes.
define xgetptr
- set $bugfix = $arg0
- if gdb_use_struct
- set $bugfix = $bugfix.i
- end
- set $ptr = $bugfix & $valmask | gdb_data_seg_bits
+ set $bugfix = CHECK_LISP_OBJECT_TYPE ? $arg0.i : $arg0
+ set $ptr = ($bugfix & VALMASK) | DATA_SEG_BITS
end
define xgetint
- set $bugfix = $arg0
- if gdb_use_struct
- set $bugfix = $bugfix.i
- end
- set $int = gdb_use_lsb ? $bugfix >> (gdb_gctypebits - 1) : $bugfix <<
(gdb_gctypebits - 1) >> (gdb_gctypebits - 1)
+ set $bugfix = CHECK_LISP_OBJECT_TYPE ? $arg0.i : $arg0
+ set $int = USE_LSB_TAG ? $bugfix >> INTTYPEBITS : $bugfix << INTTYPEBITS >>
INTTYPEBITS
end
define xgettype
- set $bugfix = $arg0
- if gdb_use_struct
- set $bugfix = $bugfix.i
- end
- set $type = (enum Lisp_Type) (gdb_use_lsb ? $bugfix & $tagmask : $bugfix >>
gdb_valbits)
+ set $bugfix = CHECK_LISP_OBJECT_TYPE ? $arg0.i : $arg0
+ set $type = (enum Lisp_Type) (USE_LSB_TAG ? $bugfix & (1 << GCTYPEBITS) - 1
: $bugfix >> VALBITS)
end
# Set up something to print out s-expressions.
@@ -652,7 +641,7 @@
define xvectype
xgetptr $
set $size = ((struct Lisp_Vector *) $ptr)->header.size
- output ($size & PVEC_FLAG) ? (enum pvec_type) ($size & PVEC_TYPE_MASK) :
$size & ~gdb_array_mark_flag
+ output ($size & PSEUDOVECTOR_FLAG) ? (enum pvec_type) ($size &
PVEC_TYPE_MASK) : $size & ~ARRAY_MARK_FLAG
echo \n
end
document xvectype
@@ -738,7 +727,7 @@
define xvector
xgetptr $
print (struct Lisp_Vector *) $ptr
- output ($->header.size > 50) ? 0 : ($->contents[0])@($->header.size &
~gdb_array_mark_flag)
+ output ($->header.size > 50) ? 0 : ($->contents[0])@($->header.size &
~ARRAY_MARK_FLAG)
echo \n
end
document xvector
@@ -847,7 +836,7 @@
define xboolvector
xgetptr $
print (struct Lisp_Bool_Vector *) $ptr
- output ($->header.size > 256) ? 0 : ($->data[0])@((($->header.size &
~gdb_array_mark_flag) + 7)/ 8)
+ output ($->size > 256) ? 0 : ($->data[0])@(($->size +
BOOL_VECTOR_BITS_PER_CHAR - 1)/ BOOL_VECTOR_BITS_PER_CHAR)
echo \n
end
document xboolvector
@@ -990,7 +979,7 @@
end
if $type == Lisp_Vectorlike
set $size = ((struct Lisp_Vector *) $ptr)->header.size
- if ($size & PVEC_FLAG)
+ if ($size & PSEUDOVECTOR_FLAG)
set $vec = (enum pvec_type) ($size & PVEC_TYPE_MASK)
if $vec == PVEC_NORMAL_VECTOR
xvector
@@ -1036,7 +1025,7 @@
define xprintstr
set $data = (char *) $arg0->data
- output ($arg0->size > 1000) ? 0 : ($data[0])@($arg0->size_byte < 0 ?
$arg0->size & ~gdb_array_mark_flag : $arg0->size_byte)
+ output ($arg0->size > 1000) ? 0 : ($data[0])@($arg0->size_byte < 0 ?
$arg0->size & ~ARRAY_MARK_FLAG : $arg0->size_byte)
end
define xprintsym
@@ -1051,8 +1040,8 @@
end
define xcoding
- set $tmp = (struct Lisp_Hash_Table *) ((Vcoding_system_hash_table &
$valmask) | gdb_data_seg_bits)
- set $tmp = (struct Lisp_Vector *) (($tmp->key_and_value & $valmask) |
gdb_data_seg_bits)
+ set $tmp = (struct Lisp_Hash_Table *) ((Vcoding_system_hash_table & VALMASK)
| DATA_SEG_BITS)
+ set $tmp = (struct Lisp_Vector *) (($tmp->key_and_value & VALMASK) |
DATA_SEG_BITS)
set $name = $tmp->contents[$arg0 * 2]
print $name
pr
@@ -1064,8 +1053,8 @@
end
define xcharset
- set $tmp = (struct Lisp_Hash_Table *) ((Vcharset_hash_table & $valmask) |
gdb_data_seg_bits)
- set $tmp = (struct Lisp_Vector *) (($tmp->key_and_value & $valmask) |
gdb_data_seg_bits)
+ set $tmp = (struct Lisp_Hash_Table *) ((Vcharset_hash_table & VALMASK) |
DATA_SEG_BITS)
+ set $tmp = (struct Lisp_Vector *) (($tmp->key_and_value & VALMASK) |
DATA_SEG_BITS)
p $tmp->contents[charset_table[$arg0].hash_index * 2]
pr
end
@@ -1126,7 +1115,7 @@
if $type == Lisp_Vectorlike
xgetptr (*$bt->function)
set $size = ((struct Lisp_Vector *) $ptr)->header.size
- output ($size & PVEC_FLAG) ? (enum pvec_type) ($size & PVEC_TYPE_MASK)
: $size & ~gdb_array_mark_flag
+ output ($size & PSEUDOVECTOR_FLAG) ? (enum pvec_type) ($size &
PVEC_TYPE_MASK) : $size & ~ARRAY_MARK_FLAG
else
printf "Lisp type %d", $type
end
@@ -1144,7 +1133,7 @@
define xprintbytestr
set $data = (char *) $arg0->data
printf "Bytecode: "
- output/u ($arg0->size > 1000) ? 0 : ($data[0])@($arg0->size_byte < 0 ?
$arg0->size & ~gdb_array_mark_flag : $arg0->size_byte)
+ output/u ($arg0->size > 1000) ? 0 : ($data[0])@($arg0->size_byte < 0 ?
$arg0->size & ~ARRAY_MARK_FLAG : $arg0->size_byte)
end
document xprintbytestr
Print a string of byte code.
@@ -1188,19 +1177,6 @@
end
end
-define xreload
- set $tagmask = ((1 << gdb_gctypebits) - 1)
- set $valmask = gdb_use_lsb ? ~($tagmask) : ((EMACS_INT) 1 << gdb_valbits) - 1
-end
-document xreload
- When starting Emacs a second time in the same gdb session under
- FreeBSD 2.2.5, gdb 4.13, $valmask have lost
- their values. (The same happens on current (2000) versions of GNU/Linux
- with gdb 5.0.)
- This function reloads them.
-end
-xreload
-
# Flush display (X only)
define ff
set x_flush (0)
@@ -1211,15 +1187,6 @@
end
-define hook-run
- xreload
-end
-
-# Call xreload if a new Emacs executable is loaded.
-define hookpost-run
- xreload
-end
-
set print pretty on
set print sevenbit-strings
=== modified file 'src/ChangeLog'
--- a/src/ChangeLog 2012-07-26 05:23:25 +0000
+++ b/src/ChangeLog 2012-07-26 08:12:03 +0000
@@ -1,3 +1,40 @@
+2012-07-26 Paul Eggert <address@hidden>
+
+ Simplify export of symbols to GDB; fix related .gdbinit bugs.
+ * .gdbinit (xgetptr, xgetint, xgettype): Don't use "set $bugfix =
+ $bugfix.i", as this doesn't work (with GDB 7.4.1, anyway).
+ (xgetptr, xgetint, xgettype, xcoding, xcharset, xprintbytestr):
+ Adjust to changes in lisp.h and emacs.c, by using
+ CHECK_LISP_OBJECT_TYPE rather than gdb_use_struct, VALMASK instead
+ of $valmask, DATA_SEG_BITS instead of gdb_data_seg_bits,
+ INTTYPEBITS instead of gdb_gctypebits - 1, USE_LSB_TAG instead of
+ gdb_use_lsb, (1 << GCTYPEBITS) - 1 instead of $tagmask, VALBITS
+ instead of gdb_valbits.
+ (xvectype, xvector, xpr, xprintstr, xbacktrace): Similarly, use
+ PSEUDOVECTOR_FLAG instead of PVEC_FLAG, and ARRAY_MARK_FLAG
+ instead of gdb_array_mark_flag.
+ (xboolvector): Get size from $->size, not $->header.size.
+ Use BOOL_VECTOR_BITS_PER_CHAR rather than mystery constants.
+ (xreload, hook-run, hookpost-run): Remove.
+ * emacs.c: Include <verify.h>.
+ (gdb_use_lsb, gdb_use_struct, gdb_valbits, gdb_gctypebits)
+ (gdb_data_seg_bits, PVEC_FLAG, gdb_array_mark_flag, gdb_pvec_type):
+ Remove.
+ (gdb_CHECK_LISP_OBJECT_TYPE, gdb_DATA_SEG_BITS, gdb_GCTYPEBITS)
+ (gdb_USE_LSB_TAG): New enum constants.
+ (CHECK_LISP_OBJECT_TYPE, DATA_SEG_BITS, GCTYPEBITS, USE_LSB_TAG):
+ Also define these as enum constants, so they're visible to GDB.
+ (ARRAY_MARK_FLAG_VAL, PSEUDOVECTOR_FLAG_VAL, VALMASK_VAL): New macros.
+ (ARRAY_MARK_FLAG, PSEUDOVECTOR_FLAG, VALMASK): Also define these
+ as constants, so they're visible to GDB.
+ * lisp.h (VALBITS, INTTYPEBITS, FIXNUM_BITS, PSEUDOVECTOR_SIZE_BITS)
+ (PSEUDOVECTOR_SIZE_MASK, PVEC_TYPE_MASK, BOOL_VECTOR_BITS_PER_CHAR):
+ Now enum constants, not macros, so they're visible to GDB.
+ (CHECK_LISP_OBJECT_TYPE, DATA_SEG_BITS): Default to 0, as this is
+ more convenient now. All uses changed.
+ (VALMASK) [USE_LSB_TAG]: Also define in this case.
+ * mem-limits.h (EXCEEDS_LISP_PTR): Adjust to DATA_SEG_BITS change.
+
2012-07-26 Dmitry Antipov <address@hidden>
Explicitly free restriction data that are not needed anymore.
=== modified file 'src/emacs.c'
--- a/src/emacs.c 2012-07-16 04:47:31 +0000
+++ b/src/emacs.c 2012-07-26 08:12:03 +0000
@@ -29,6 +29,8 @@
#include <setjmp.h>
#include <unistd.h>
+#include <verify.h>
+
#include "lisp.h"
#ifdef WINDOWSNT
@@ -96,31 +98,6 @@
static const char emacs_version[] = VERSION;
static const char emacs_copyright[] = "Copyright (C) 2012 Free Software
Foundation, Inc.";
-/* Make these values available in GDB, which doesn't see macros. */
-
-#if USE_LSB_TAG
-int gdb_use_lsb EXTERNALLY_VISIBLE = 1;
-#else
-int gdb_use_lsb EXTERNALLY_VISIBLE = 0;
-#endif
-#ifndef CHECK_LISP_OBJECT_TYPE
-int gdb_use_struct EXTERNALLY_VISIBLE = 0;
-#else
-int gdb_use_struct EXTERNALLY_VISIBLE = 1;
-#endif
-int gdb_valbits EXTERNALLY_VISIBLE = VALBITS;
-int gdb_gctypebits EXTERNALLY_VISIBLE = GCTYPEBITS;
-#if defined DATA_SEG_BITS && !USE_LSB_TAG
-uintptr_t gdb_data_seg_bits EXTERNALLY_VISIBLE = DATA_SEG_BITS;
-#else
-uintptr_t gdb_data_seg_bits EXTERNALLY_VISIBLE = 0;
-#endif
-ptrdiff_t PVEC_FLAG EXTERNALLY_VISIBLE = PSEUDOVECTOR_FLAG;
-ptrdiff_t gdb_array_mark_flag EXTERNALLY_VISIBLE = ARRAY_MARK_FLAG;
-/* GDB might say "No enum type named pvec_type" if we don't have at
- least one symbol with that type, and then xbacktrace could fail. */
-enum pvec_type const gdb_pvec_type EXTERNALLY_VISIBLE = 0;
-
/* Empty lisp strings. To avoid having to build any others. */
Lisp_Object empty_unibyte_string, empty_multibyte_string;
@@ -2513,3 +2490,50 @@
/* Make sure IS_DAEMON starts up as false. */
daemon_pipe[1] = 0;
}
+
+/* Make these values available in GDB, which doesn't see macros.
+ This is last, so that the #undef lines don't mess up later code. */
+
+enum
+ {
+ gdb_CHECK_LISP_OBJECT_TYPE = CHECK_LISP_OBJECT_TYPE,
+ gdb_DATA_SEG_BITS = DATA_SEG_BITS,
+ gdb_GCTYPEBITS = GCTYPEBITS,
+ gdb_USE_LSB_TAG = USE_LSB_TAG
+ };
+
+#undef CHECK_LISP_OBJECT_TYPE
+#undef DATA_SEG_BITS
+#undef GCTYPEBITS
+#undef USE_LSB_TAG
+
+enum
+ {
+ CHECK_LISP_OBJECT_TYPE = gdb_CHECK_LISP_OBJECT_TYPE,
+ DATA_SEG_BITS = gdb_DATA_SEG_BITS,
+ GCTYPEBITS = gdb_GCTYPEBITS,
+ USE_LSB_TAG = gdb_USE_LSB_TAG
+ };
+
+/* These are trickier since they might fall out of int range. Each
+ symbol X has a corresponding X_VAL symbol, verified to have the
+ correct value. */
+
+#define ARRAY_MARK_FLAG_VAL PTRDIFF_MIN
+#define PSEUDOVECTOR_FLAG_VAL (PTRDIFF_MAX - PTRDIFF_MAX / 2)
+#define VALMASK_VAL (USE_LSB_TAG ? -1 << GCTYPEBITS : VAL_MAX)
+
+verify (ARRAY_MARK_FLAG_VAL == ARRAY_MARK_FLAG);
+verify (PSEUDOVECTOR_FLAG_VAL == PSEUDOVECTOR_FLAG);
+verify (VALMASK_VAL == VALMASK);
+
+#undef ARRAY_MARK_FLAG
+#undef PSEUDOVECTOR_FLAG
+#undef VALMASK
+
+ptrdiff_t const EXTERNALLY_VISIBLE
+ ARRAY_MARK_FLAG = ARRAY_MARK_FLAG_VAL,
+ PSEUDOVECTOR_FLAG = PSEUDOVECTOR_FLAG_VAL;
+
+EMACS_INT const EXTERNALLY_VISIBLE
+ VALMASK = VALMASK_VAL;
=== modified file 'src/lisp.h'
--- a/src/lisp.h 2012-07-26 01:27:33 +0000
+++ b/src/lisp.h 2012-07-26 08:12:03 +0000
@@ -155,8 +155,11 @@
variable VAR of type TYPE with the added requirement that it be
TYPEBITS-aligned. */
+/* Number of bits in a Lisp_Obect tag. This can be used in #if. */
#define GCTYPEBITS 3
-#define VALBITS (BITS_PER_EMACS_INT - GCTYPEBITS)
+
+/* Number of bits in a Lisp_Object value, not counting the tag. */
+enum { VALBITS = BITS_PER_EMACS_INT - GCTYPEBITS };
/* The maximum value that can be stored in a EMACS_INT, assuming all
bits other than the type bits contribute to a nonnegative signed value.
@@ -218,8 +221,8 @@
/* Lisp integers use 2 tags, to give them one extra bit, thus
extending their range from, e.g., -2^28..2^28-1 to -2^29..2^29-1. */
-#define INTTYPEBITS (GCTYPEBITS - 1)
-#define FIXNUM_BITS (VALBITS + 1)
+enum { INTTYPEBITS = GCTYPEBITS - 1 };
+enum { FIXNUM_BITS = VALBITS + 1 };
#define INTMASK (EMACS_INT_MAX >> (INTTYPEBITS - 1))
#define LISP_INT_TAG Lisp_Int0
#define case_Lisp_Int case Lisp_Int0: case Lisp_Int1
@@ -324,6 +327,7 @@
#define XIL(i) (i)
#define LISP_MAKE_RVALUE(o) (0+(o))
#define LISP_INITIALLY_ZERO 0
+#define CHECK_LISP_OBJECT_TYPE 0
#endif /* CHECK_LISP_OBJECT_TYPE */
/* In the size word of a vector, this bit means the vector has been marked. */
@@ -370,13 +374,22 @@
only the number of Lisp_Object fields (that need to be traced by the GC).
The distinction is used e.g. by Lisp_Process which places extra
non-Lisp_Object fields at the end of the structure. */
-#define PSEUDOVECTOR_SIZE_BITS 16
-#define PSEUDOVECTOR_SIZE_MASK ((1 << PSEUDOVECTOR_SIZE_BITS) - 1)
-#define PVEC_TYPE_MASK (0x0fff << PSEUDOVECTOR_SIZE_BITS)
+enum
+ {
+ PSEUDOVECTOR_SIZE_BITS = 16,
+ PSEUDOVECTOR_SIZE_MASK = (1 << PSEUDOVECTOR_SIZE_BITS) - 1,
+ PVEC_TYPE_MASK = 0x0fff << PSEUDOVECTOR_SIZE_BITS
+ };
/* Number of bits to put in each character in the internal representation
of bool vectors. This should not vary across implementations. */
-#define BOOL_VECTOR_BITS_PER_CHAR 8
+enum { BOOL_VECTOR_BITS_PER_CHAR = 8 };
+
+/* DATA_SEG_BITS forces extra bits to be or'd in with any pointers
+ which were stored in a Lisp_Object */
+#ifndef DATA_SEG_BITS
+# define DATA_SEG_BITS 0
+#endif
/* These macros extract various sorts of values from a Lisp_Object.
For example, if tem is a Lisp_Object whose type is Lisp_Cons,
@@ -387,6 +400,7 @@
#if USE_LSB_TAG
+#define VALMASK (-1 << GCTYPEBITS)
#define TYPEMASK ((1 << GCTYPEBITS) - 1)
#define XTYPE(a) ((enum Lisp_Type) (XLI (a) & TYPEMASK))
#define XINT(a) (XLI (a) >> INTTYPEBITS)
@@ -421,7 +435,7 @@
((var) = XIL ((EMACS_INT) ((EMACS_UINT) (type) << VALBITS) \
+ ((intptr_t) (ptr) & VALMASK)))
-#ifdef DATA_SEG_BITS
+#if 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) ((uintptr_t) ((XLI (a) & VALMASK)) | DATA_SEG_BITS))
=== modified file 'src/mem-limits.h'
--- a/src/mem-limits.h 2012-07-09 16:38:45 +0000
+++ b/src/mem-limits.h 2012-07-26 08:12:03 +0000
@@ -36,7 +36,7 @@
extern char *start_of_data (void) ATTRIBUTE_CONST;
#if USE_LSB_TAG || UINTPTR_MAX <= VAL_MAX
#define EXCEEDS_LISP_PTR(ptr) 0
-#elif defined DATA_SEG_BITS
+#elif DATA_SEG_BITS
#define EXCEEDS_LISP_PTR(ptr) \
(((uintptr_t) (ptr) & ~DATA_SEG_BITS) >> VALBITS)
#else
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] /srv/bzr/emacs/trunk r109213: Simplify export of symbols to GDB; fix related .gdbinit bugs.,
Paul Eggert <=