changeset 111688:7153f8068e69

Mark debugger related variables and functions as EXTERNALLY_VISIBLE so that they do not get optimized away. * configure.in (EXTERNALLY_VISIBLE): New definition. * src/emacs.c (gdb_use_union, gdb_valbits,gdb_gctypebits) (gdb_data_seg_bits, gdb_array_mark_flag, PVEC_FLAG) (gdb_pvec_type): * src/print.c (print_output_debug_flag): * src/lisp.h (debug_print): Mark as EXTERNALLY_VISIBLE. (safe_debug_print): New declaration.
author Dan Nicolaescu <dann@ics.uci.edu>
date Tue, 23 Nov 2010 10:47:23 -0800
parents 17d793ffe36f
children b9616a1b568d
files ChangeLog configure.in src/ChangeLog src/config.in src/emacs.c src/lisp.h src/print.c
diffstat 7 files changed, 34 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Tue Nov 23 10:09:55 2010 -0800
+++ b/ChangeLog	Tue Nov 23 10:47:23 2010 -0800
@@ -1,6 +1,7 @@
 2010-11-23  Dan Nicolaescu  <dann@ics.uci.edu>
 
 	* configure.in <AC_CHECK_HEADERS>: Remove sys/ioctl.h.
+	(EXTERNALLY_VISIBLE): New definition.
 
 2010-11-21  Dan Nicolaescu  <dann@ics.uci.edu>
 
--- a/configure.in	Tue Nov 23 10:09:55 2010 -0800
+++ b/configure.in	Tue Nov 23 10:47:23 2010 -0800
@@ -3633,6 +3633,12 @@
 #define NO_INLINE
 #endif
 
+#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1))
+#define EXTERNALLY_VISIBLE __attribute__((externally_visible))
+#else
+#define EXTERNALLY_VISIBLE
+#endif
+
 /* Some versions of GNU/Linux define noinline in their headers.  */
 #ifdef noinline
 #undef noinline
--- a/src/ChangeLog	Tue Nov 23 10:09:55 2010 -0800
+++ b/src/ChangeLog	Tue Nov 23 10:47:23 2010 -0800
@@ -1,5 +1,12 @@
 2010-11-23  Dan Nicolaescu  <dann@ics.uci.edu>
 
+	* emacs.c (gdb_use_union, gdb_valbits,gdb_gctypebits)
+	(gdb_data_seg_bits, gdb_array_mark_flag, PVEC_FLAG)
+	(gdb_pvec_type):
+	* print.c (print_output_debug_flag):
+	* lisp.h (debug_print): Mark as EXTERNALLY_VISIBLE.
+	(safe_debug_print): New declaration.
+
 	* xterm.c:
 	* systty.h:
 	* sound.c: Include <sys/ioctl.h> unconditionally.
--- a/src/config.in	Tue Nov 23 10:09:55 2010 -0800
+++ b/src/config.in	Tue Nov 23 10:47:23 2010 -0800
@@ -1197,6 +1197,12 @@
 #define NO_INLINE
 #endif
 
+#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1))
+#define EXTERNALLY_VISIBLE __attribute__((externally_visible))
+#else
+#define EXTERNALLY_VISIBLE
+#endif
+
 /* Some versions of GNU/Linux define noinline in their headers.  */
 #ifdef noinline
 #undef noinline
--- a/src/emacs.c	Tue Nov 23 10:09:55 2010 -0800
+++ b/src/emacs.c	Tue Nov 23 10:47:23 2010 -0800
@@ -100,27 +100,27 @@
 /* Make these values available in GDB, which doesn't see macros.  */
 
 #ifdef USE_LSB_TAG
-int gdb_use_lsb = 1;
+int gdb_use_lsb EXTERNALLY_VISIBLE = 1;
 #else
-int gdb_use_lsb = 0;
+int gdb_use_lsb EXTERNALLY_VISIBLE = 0;
 #endif
 #ifndef USE_LISP_UNION_TYPE
-int gdb_use_union = 0;
+int gdb_use_union EXTERNALLY_VISIBLE  = 0;
 #else
-int gdb_use_union = 1;
+int gdb_use_union EXTERNALLY_VISIBLE = 1;
 #endif
-EMACS_INT gdb_valbits = VALBITS;
-EMACS_INT gdb_gctypebits = GCTYPEBITS;
+EMACS_INT gdb_valbits EXTERNALLY_VISIBLE = VALBITS;
+EMACS_INT gdb_gctypebits EXTERNALLY_VISIBLE = GCTYPEBITS;
 #if defined (DATA_SEG_BITS) && ! defined (USE_LSB_TAG)
-EMACS_INT gdb_data_seg_bits = DATA_SEG_BITS;
+EMACS_INT gdb_data_seg_bits EXTERNALLY_VISIBLE = DATA_SEG_BITS;
 #else
-EMACS_INT gdb_data_seg_bits = 0;
+EMACS_INT gdb_data_seg_bits EXTERNALLY_VISIBLE = 0;
 #endif
-EMACS_INT PVEC_FLAG = PSEUDOVECTOR_FLAG;
-EMACS_INT gdb_array_mark_flag = ARRAY_MARK_FLAG;
+EMACS_INT PVEC_FLAG EXTERNALLY_VISIBLE = PSEUDOVECTOR_FLAG;
+EMACS_INT 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 gdb_pvec_type = PVEC_TYPE_MASK;
+enum pvec_type gdb_pvec_type EXTERNALLY_VISIBLE = PVEC_TYPE_MASK;
 
 /* Command line args from shell, as list of strings.  */
 Lisp_Object Vcommand_line_args;
--- a/src/lisp.h	Tue Nov 23 10:09:55 2010 -0800
+++ b/src/lisp.h	Tue Nov 23 10:47:23 2010 -0800
@@ -2832,7 +2832,8 @@
 /* Defined in print.c */
 extern Lisp_Object Vprin1_to_string_buffer;
 extern Lisp_Object Vprint_level, Vprint_length;
-extern void debug_print (Lisp_Object);
+extern void debug_print (Lisp_Object) EXTERNALLY_VISIBLE;
+extern void safe_debug_print (Lisp_Object) EXTERNALLY_VISIBLE;
 EXFUN (Fprin1, 2);
 EXFUN (Fprin1_to_string, 2);
 EXFUN (Fprinc, 2);
--- a/src/print.c	Tue Nov 23 10:09:55 2010 -0800
+++ b/src/print.c	Tue Nov 23 10:47:23 2010 -0800
@@ -163,7 +163,7 @@
 void print_interval (INTERVAL interval, Lisp_Object printcharfun);
 
 /* GDB resets this to zero on W32 to disable OutputDebugString calls.  */
-int print_output_debug_flag = 1;
+int print_output_debug_flag EXTERNALLY_VISIBLE = 1;
 
 
 /* Low level output routines for characters and strings */