aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--malloc/memusage.c24
-rw-r--r--sysdeps/generic/memusage.h12
-rw-r--r--sysdeps/i386/i686/memusage.h1
-rw-r--r--sysdeps/ia64/memusage.h7
-rw-r--r--sysdeps/x86_64/memusage.h1
5 files changed, 21 insertions, 24 deletions
diff --git a/malloc/memusage.c b/malloc/memusage.c
index de39ad1..eaf4965 100644
--- a/malloc/memusage.c
+++ b/malloc/memusage.c
@@ -34,6 +34,7 @@
#include <sys/time.h>
#include <memusage.h>
+#include <hp-timing.h>
/* Pointer to the real functions. These are determined used `dlsym'
when really needed. */
@@ -114,6 +115,23 @@ static struct entry buffer[2 * DEFAULT_BUFFER_SIZE];
static uint32_t buffer_cnt;
static struct entry first;
+static void
+gettime (struct entry *e)
+{
+#if HP_TIMING_INLINE
+ hp_timing_t now;
+ HP_TIMING_NOW (now);
+ e->time_low = now & 0xffffffff;
+ e->time_high = now >> 32;
+#else
+ struct __timespec64 now;
+ uint64_t usecs;
+ __clock_gettime64 (CLOCK_REALTIME, &now);
+ usecs = (uint64_t)now.tv_nsec / 1000 + (uint64_t)now.tv_sec * 1000000;
+ e->time_low = usecs & 0xffffffff;
+ e->time_high = usecs >> 32;
+#endif
+}
/* Update the global data after a successful function call. */
static void
@@ -177,7 +195,7 @@ update_data (struct header *result, size_t len, size_t old_len)
buffer[idx].heap = current_heap;
buffer[idx].stack = current_stack;
- GETTIME (buffer[idx].time_low, buffer[idx].time_high);
+ gettime (&buffer[idx]);
/* Write out buffer if it is full. */
if (idx + 1 == buffer_size)
@@ -267,7 +285,7 @@ me (void)
/* Write the first entry. */
first.heap = 0;
first.stack = 0;
- GETTIME (first.time_low, first.time_high);
+ gettime (&first);
/* Write it two times since we need the starting and end time. */
write (fd, &first, sizeof (first));
write (fd, &first, sizeof (first));
@@ -818,7 +836,7 @@ dest (void)
stack. */
first.heap = peak_heap;
first.stack = peak_stack;
- GETTIME (first.time_low, first.time_high);
+ gettime (&first);
write (fd, &first, sizeof (struct entry));
/* Close the file. */
diff --git a/sysdeps/generic/memusage.h b/sysdeps/generic/memusage.h
index c9bde5c..514bd05 100644
--- a/sysdeps/generic/memusage.h
+++ b/sysdeps/generic/memusage.h
@@ -23,15 +23,3 @@
# warning "GETSP is not defined for this architecture."
# define GETSP 0
#endif
-
-#ifndef GETTIME
-# define GETTIME(low,high) \
- { \
- struct __timespec64 now; \
- uint64_t usecs; \
- __clock_gettime64 (CLOCK_REALTIME, &now); \
- usecs = (uint64_t)now.tv_nsec / 1000 + (uint64_t)now.tv_sec * 1000000; \
- low = usecs & 0xffffffff; \
- high = usecs >> 32; \
- }
-#endif
diff --git a/sysdeps/i386/i686/memusage.h b/sysdeps/i386/i686/memusage.h
index 08b7831..07b2412 100644
--- a/sysdeps/i386/i686/memusage.h
+++ b/sysdeps/i386/i686/memusage.h
@@ -16,6 +16,5 @@
<https://www.gnu.org/licenses/>. */
#define GETSP() ({ register uintptr_t stack_ptr asm ("esp"); stack_ptr; })
-#define GETTIME(low,high) asm ("rdtsc" : "=a" (low), "=d" (high))
#include <sysdeps/generic/memusage.h>
diff --git a/sysdeps/ia64/memusage.h b/sysdeps/ia64/memusage.h
index 3c3a526..33fd6ec 100644
--- a/sysdeps/ia64/memusage.h
+++ b/sysdeps/ia64/memusage.h
@@ -18,12 +18,5 @@
#include <hp-timing.h>
#define GETSP() ({ register uintptr_t stack_ptr asm ("%r12"); stack_ptr; })
-#define GETTIME(low, high) \
- { \
- hp_timing_t __now; \
- HP_TIMING_NOW (__now); \
- low = __now & 0xffffffff; \
- high = __now >> 32; \
- }
#include <sysdeps/generic/memusage.h>
diff --git a/sysdeps/x86_64/memusage.h b/sysdeps/x86_64/memusage.h
index 568dd55..6652fc5 100644
--- a/sysdeps/x86_64/memusage.h
+++ b/sysdeps/x86_64/memusage.h
@@ -16,6 +16,5 @@
<https://www.gnu.org/licenses/>. */
#define GETSP() ({ register uintptr_t stack_ptr asm ("rsp"); stack_ptr; })
-#define GETTIME(low,high) asm ("rdtsc" : "=a" (low), "=d" (high))
#include <sysdeps/generic/memusage.h>