linux/arch/x86/lib/thunk_32.S
<<
>>
Prefs
   1/*
   2 * Trampoline to trace irqs off. (otherwise CALLER_ADDR1 might crash)
   3 * Copyright 2008 by Steven Rostedt, Red Hat, Inc
   4 *  (inspired by Andi Kleen's thunk_64.S)
   5 * Subject to the GNU public license, v.2. No warranty of any kind.
   6 */
   7        #include <linux/linkage.h>
   8        #include <asm/asm.h>
   9        #include <asm/dwarf2.h>
  10
  11        /* put return address in eax (arg1) */
  12        .macro THUNK name, func, put_ret_addr_in_eax=0
  13        .globl \name
  14\name:
  15        CFI_STARTPROC
  16        pushl_cfi_reg eax
  17        pushl_cfi_reg ecx
  18        pushl_cfi_reg edx
  19
  20        .if \put_ret_addr_in_eax
  21        /* Place EIP in the arg1 */
  22        movl 3*4(%esp), %eax
  23        .endif
  24
  25        call \func
  26        popl_cfi_reg edx
  27        popl_cfi_reg ecx
  28        popl_cfi_reg eax
  29        ret
  30        CFI_ENDPROC
  31        _ASM_NOKPROBE(\name)
  32        .endm
  33
  34#ifdef CONFIG_TRACE_IRQFLAGS
  35        THUNK trace_hardirqs_on_thunk,trace_hardirqs_on_caller,1
  36        THUNK trace_hardirqs_off_thunk,trace_hardirqs_off_caller,1
  37#endif
  38
  39#ifdef CONFIG_PREEMPT
  40        THUNK ___preempt_schedule, preempt_schedule
  41#ifdef CONFIG_CONTEXT_TRACKING
  42        THUNK ___preempt_schedule_context, preempt_schedule_context
  43#endif
  44#endif
  45
  46