Use __executable_start to find start of text segment for profiling
authorAndreas Schwab <schwab@linux-m68k.org>
Sun, 25 Jul 2010 19:09:54 +0000 (21:09 +0200)
committerAndreas Schwab <schwab@linux-m68k.org>
Sun, 25 Jul 2010 19:09:54 +0000 (21:09 +0200)
* 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.

ChangeLog
configure
configure.in
src/ChangeLog
src/config.in
src/dispnew.c
src/emacs.c

index 2746258..64c6125 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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)
index 8e42ac4..b4a2ee6 100755 (executable)
--- a/configure
+++ b/configure
@@ -11190,7 +11190,7 @@ __fpending mblen mbrlen mbsinit strsignal setitimer ualarm strchr strrchr \
 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"
index a6fde6e..0f4a3c7 100644 (file)
@@ -2611,7 +2611,7 @@ __fpending mblen mbrlen mbsinit strsignal setitimer ualarm strchr strrchr \
 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)
 
index 0ed773d..50a9fcb 100644 (file)
@@ -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>
index 40b6263..647c880 100644 (file)
@@ -801,6 +801,9 @@ along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
 /* 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
 
index fe64143..73aafe0 100644 (file)
@@ -436,7 +436,7 @@ DEFUN ("dump-redisplay-history", Fdump_redisplay_history,
 #endif /* GLYPH_DEBUG == 0 */
 
 
-#ifdef PROFILING
+#if defined PROFILING && !HAVE___EXECUTABLE_START
 /* FIXME: only used to find text start for profiling.  */
 
 void
index fbae776..a5d5711 100644 (file)
@@ -1747,9 +1747,18 @@ main (int argc, char **argv)
 #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 @@ main (int argc, char **argv)
       /* FIXME: Does not work on architectures with function
         descriptors.  */
       monstartup (safe_bcopy, &etext);
+#endif
     }
   else
     moncontrol (0);