changeset 109539:d962ccf8829f

Use __executable_start to find start of text segment for profiling * emacs.c (main) [PROFILING]: Use __executable_start if defined to find start of text segment. * dispnew.c (safe_bcopy): Don't define if HAVE___EXECUTABLE_START is defined. * configure.in: Check for __executable_start.
author Andreas Schwab <schwab@linux-m68k.org>
date Sun, 25 Jul 2010 21:09:54 +0200
parents ed55b1a60024
children d4902495c889
files ChangeLog configure configure.in src/ChangeLog src/config.in src/dispnew.c src/emacs.c
diffstat 7 files changed, 25 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Sun Jul 25 20:36:37 2010 +0200
+++ b/ChangeLog	Sun Jul 25 21:09:54 2010 +0200
@@ -1,3 +1,7 @@
+2010-07-25  Andreas Schwab  <schwab@linux-m68k.org>
+
+	* configure.in: Check for __executable_start.
+
 2010-07-24  Ken Brown  <kbrown@cornell.edu>
 
 	* configure.in (LINKER, LIB_GCC): Remove cygwin special cases (Bug#6715)
--- a/configure	Sun Jul 25 20:36:37 2010 +0200
+++ b/configure	Sun Jul 25 21:09:54 2010 +0200
@@ -11190,7 +11190,7 @@
 sendto recvfrom getsockopt setsockopt getsockname getpeername \
 gai_strerror mkstemp getline getdelim mremap memmove fsync sync \
 memset memcmp difftime memcpy mempcpy mblen mbrlen posix_memalign \
-cfmakeraw cfsetspeed isnan copysign
+cfmakeraw cfsetspeed isnan copysign __executable_start
 do :
   as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
 ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
--- a/configure.in	Sun Jul 25 20:36:37 2010 +0200
+++ b/configure.in	Sun Jul 25 21:09:54 2010 +0200
@@ -2611,7 +2611,7 @@
 sendto recvfrom getsockopt setsockopt getsockname getpeername \
 gai_strerror mkstemp getline getdelim mremap memmove fsync sync \
 memset memcmp difftime memcpy mempcpy mblen mbrlen posix_memalign \
-cfmakeraw cfsetspeed isnan copysign)
+cfmakeraw cfsetspeed isnan copysign __executable_start)
 
 AC_CHECK_HEADERS(sys/un.h)
 
--- a/src/ChangeLog	Sun Jul 25 20:36:37 2010 +0200
+++ b/src/ChangeLog	Sun Jul 25 21:09:54 2010 +0200
@@ -1,5 +1,10 @@
 2010-07-25  Andreas Schwab  <schwab@linux-m68k.org>
 
+	* emacs.c (main) [PROFILING]: Use __executable_start if defined to
+	find start of text segment.
+	* dispnew.c (safe_bcopy): Don't define if HAVE___EXECUTABLE_START
+	is defined.
+
 	* callproc.c (set_initial_environment): Avoid unbalanced braces.
 
 2010-07-25  Ken Brown  <kbrown@cornell.edu>
--- a/src/config.in	Sun Jul 25 20:36:37 2010 +0200
+++ b/src/config.in	Sun Jul 25 21:09:54 2010 +0200
@@ -801,6 +801,9 @@
 /* Define to 1 if you want to use the X window system. */
 #undef HAVE_X_WINDOWS
 
+/* Define to 1 if you have the `__executable_start' function. */
+#undef HAVE___EXECUTABLE_START
+
 /* Define to 1 if you have the `__fpending' function. */
 #undef HAVE___FPENDING
 
--- a/src/dispnew.c	Sun Jul 25 20:36:37 2010 +0200
+++ b/src/dispnew.c	Sun Jul 25 21:09:54 2010 +0200
@@ -436,7 +436,7 @@
 #endif /* GLYPH_DEBUG == 0 */
 
 
-#ifdef PROFILING
+#if defined PROFILING && !HAVE___EXECUTABLE_START
 /* FIXME: only used to find text start for profiling.  */
 
 void
--- a/src/emacs.c	Sun Jul 25 20:36:37 2010 +0200
+++ b/src/emacs.c	Sun Jul 25 21:09:54 2010 +0200
@@ -1747,9 +1747,18 @@
 #else
       extern char etext;
 #endif
+#ifdef HAVE___EXECUTABLE_START
+      /* This symbol is defined by GNU ld to the start of the text
+	 segment.  */
+      extern char __executable_start[];
+#else
       extern void safe_bcopy ();
+#endif
 
       atexit (_mcleanup);
+#ifdef HAVE___EXECUTABLE_START
+      monstartup (__executable_start, &etext);
+#else
       /* This uses safe_bcopy because that function comes first in the
 	 Emacs executable.  It might be better to use something that
 	 gives the start of the text segment, but start_of_text is not
@@ -1757,6 +1766,7 @@
       /* FIXME: Does not work on architectures with function
 	 descriptors.  */
       monstartup (safe_bcopy, &etext);
+#endif
     }
   else
     moncontrol (0);