# HG changeset patch # User Andreas Schwab # Date 1280084994 -7200 # Node ID d962ccf8829fe639f9c9cb1d08349fa9155ddd3c # Parent ed55b1a60024bb8a4f4ee7da3a20c4780f233153 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. diff -r ed55b1a60024 -r d962ccf8829f ChangeLog --- 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 + + * configure.in: Check for __executable_start. + 2010-07-24 Ken Brown * configure.in (LINKER, LIB_GCC): Remove cygwin special cases (Bug#6715) diff -r ed55b1a60024 -r d962ccf8829f configure --- 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" diff -r ed55b1a60024 -r d962ccf8829f configure.in --- 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) diff -r ed55b1a60024 -r d962ccf8829f src/ChangeLog --- 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 + * 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 diff -r ed55b1a60024 -r d962ccf8829f src/config.in --- 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 diff -r ed55b1a60024 -r d962ccf8829f src/dispnew.c --- 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 diff -r ed55b1a60024 -r d962ccf8829f src/emacs.c --- 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);