x86: Support tracing function
authorSimon Glass <sjg@chromium.org>
Tue, 11 Jun 2013 18:14:52 +0000 (11:14 -0700)
committerTom Rini <trini@ti.com>
Wed, 26 Jun 2013 14:18:56 +0000 (10:18 -0400)
Some changes are needed to x86 timer functions to support tracing. Add
these so that the feature works correctly.

Signed-off-by: Simon Glass <sjg@chromium.org>
arch/x86/include/asm/global_data.h
arch/x86/include/asm/msr.h
arch/x86/include/asm/u-boot-x86.h
arch/x86/lib/gcc.c
arch/x86/lib/tsc_timer.c

index 4fdb08090a02bebda2851f4c147994043fe72d7a..9a2056a70f6a4c72a016ed564d4fa613211272de 100644 (file)
@@ -40,7 +40,7 @@ struct arch_global_data {
 #include <asm-generic/global_data.h>
 
 #ifndef __ASSEMBLY__
-static inline gd_t *get_fs_gd_ptr(void)
+static inline __attribute__((no_instrument_function)) gd_t *get_fs_gd_ptr(void)
 {
        gd_t *gd_ptr;
 
index 6030633d102da11ca649e4f212604cbbc5a24a36..b459a63ee6e1209f909b68c18195acbc2d79f228 100644 (file)
@@ -85,7 +85,8 @@ static inline unsigned long long native_read_tscp(unsigned int *aux)
 #define EAX_EDX_RET(val, low, high)    "=A" (val)
 #endif
 
-static inline unsigned long long native_read_msr(unsigned int msr)
+static inline __attribute__((no_instrument_function))
+       unsigned long long native_read_msr(unsigned int msr)
 {
        DECLARE_ARGS(val, low, high);
 
index 22e093427fdf5c9426dbb002c668da27c3ca33a4..709dc8400d64dd6c6f5507f46386e093decb411f 100644 (file)
@@ -64,7 +64,7 @@ void  board_init_f_r_trampoline(ulong) __attribute__ ((noreturn));
 void   board_init_f_r(void) __attribute__ ((noreturn));
 
 /* Read the time stamp counter */
-static inline uint64_t rdtsc(void)
+static inline __attribute__((no_instrument_function)) uint64_t rdtsc(void)
 {
        uint32_t high, low;
        __asm__ __volatile__("rdtsc" : "=a" (low), "=d" (high));
index 4043431ecaa904e0ffc5606db762c2206c3f7dcb..497ad75b7a45fca5c9b7e81c855a986e82dba85b 100644 (file)
@@ -28,7 +28,9 @@
 #define WRAP_LIBGCC_CALL(type, name) \
        type __normal_##name(type a, type b) __attribute__((regparm(0))); \
        type __wrap_##name(type a, type b); \
-       type __wrap_##name(type a, type b) { return __normal_##name(a, b); }
+       type __attribute__((no_instrument_function)) \
+               __wrap_##name(type a, type b) \
+                { return __normal_##name(a, b); }
 
 WRAP_LIBGCC_CALL(long long, __divdi3)
 WRAP_LIBGCC_CALL(unsigned long long, __udivdi3)
index c509801f9e8dee6539ac335e870748eb165aa62c..06889737d1a21dece02a26ec766ed05bd9fed3c4 100644 (file)
@@ -37,7 +37,7 @@ void timer_set_base(u64 base)
  * restart. This yields a free running counter guaranteed to take almost 6
  * years to wrap around even at 100GHz clock rate.
  */
-u64 get_ticks(void)
+u64 __attribute__((no_instrument_function)) get_ticks(void)
 {
        u64 now_tick = rdtsc();
 
@@ -50,7 +50,7 @@ u64 get_ticks(void)
 #define PLATFORM_INFO_MSR 0xce
 
 /* Get the speed of the TSC timer in MHz */
-unsigned long get_tbclk_mhz(void)
+unsigned __attribute__((no_instrument_function)) long get_tbclk_mhz(void)
 {
        u32 ratio;
        u64 platform_info = native_read_msr(PLATFORM_INFO_MSR);
@@ -75,7 +75,7 @@ ulong get_timer(ulong base)
        return get_ms_timer() - base;
 }
 
-ulong timer_get_us(void)
+ulong __attribute__((no_instrument_function)) timer_get_us(void)
 {
        return get_ticks() / get_tbclk_mhz();
 }