# HG changeset patch # User Dan Nicolaescu # Date 1290538043 28800 # Node ID 7153f8068e69c9f30524d3e59ecd5e057f2efb78 # Parent 17d793ffe36f6ffaf30b4ace3ff9adc7c7f23606 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. diff -r 17d793ffe36f -r 7153f8068e69 ChangeLog --- 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 * configure.in : Remove sys/ioctl.h. + (EXTERNALLY_VISIBLE): New definition. 2010-11-21 Dan Nicolaescu diff -r 17d793ffe36f -r 7153f8068e69 configure.in --- 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 diff -r 17d793ffe36f -r 7153f8068e69 src/ChangeLog --- 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 + * 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 unconditionally. diff -r 17d793ffe36f -r 7153f8068e69 src/config.in --- 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 diff -r 17d793ffe36f -r 7153f8068e69 src/emacs.c --- 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; diff -r 17d793ffe36f -r 7153f8068e69 src/lisp.h --- 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); diff -r 17d793ffe36f -r 7153f8068e69 src/print.c --- 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 */