summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKen Brown <kbrown@cornell.edu>2015-06-22 17:38:35 -0400
committerKen Brown <kbrown@cornell.edu>2015-06-22 17:38:35 -0400
commit531125e4c024ca12701608c4516cb9cf993cfad2 (patch)
treec477e5b6b4a9e1e429f9f2bdf0a2d0f8f8a3144b
parentdc30fb9247d5d9d98ae1c3501d3ffa90e2001a46 (diff)
Enable CPU profiling on Cygwin
* src/syssignal.h [CYGWIN] (PROFILER_CPU_SUPPORT): Revert previous change that undefined this. (SIGEV_SIGNAL): Ensure that this is defined as a macro. * src/profiler.c [CYGWIN] (timer_getoverrun): Define as a macro on Cygwin.
-rw-r--r--src/profiler.c6
-rw-r--r--src/syssignal.h10
2 files changed, 13 insertions, 3 deletions
diff --git a/src/profiler.c b/src/profiler.c
index 185382c5bd..d4c98a8265 100644
--- a/src/profiler.c
+++ b/src/profiler.c
@@ -217,6 +217,12 @@ static EMACS_INT current_sampling_interval;
/* Signal handler for sampling profiler. */
+/* timer_getoverrun is not implemented on Cygwin, but the following
+ seems to be good enough for profiling. */
+#ifdef CYGWIN
+#define timer_getoverrun(x) 0
+#endif
+
static void
handle_profiler_signal (int signal)
{
diff --git a/src/syssignal.h b/src/syssignal.h
index 28824003c5..5c14479cca 100644
--- a/src/syssignal.h
+++ b/src/syssignal.h
@@ -32,13 +32,17 @@ extern void unblock_tty_out_signal (sigset_t const *);
#define FORWARD_SIGNAL_TO_MAIN_THREAD
#endif
+/* On Cygwin as of 2015-06-22 SIGEV_SIGNAL is defined as an enum
+ constant but not as a macro. */
+#if defined CYGWIN && !defined SIGEV_SIGNAL
+#define SIGEV_SIGNAL SIGEV_SIGNAL
+#endif
+
#if defined HAVE_TIMER_SETTIME && defined SIGEV_SIGNAL
# define HAVE_ITIMERSPEC
#endif
-/* On Cygwin, setitimer does not support ITIMER_PROF, so we can't
- support CPU profiling. */
-#if (defined SIGPROF && !defined PROFILING && !defined CYGWIN \
+#if (defined SIGPROF && !defined PROFILING \
&& (defined HAVE_SETITIMER || defined HAVE_ITIMERSPEC))
# define PROFILER_CPU_SUPPORT
#endif