• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
8	#include <linux/linkage.h>
9
10#define ARCH_TRACE_IRQS_ON			\
11	pushl %eax;				\
12	pushl %ecx;				\
13	pushl %edx;				\
14	call trace_hardirqs_on;			\
15	popl %edx;				\
16	popl %ecx;				\
17	popl %eax;
18
19#define ARCH_TRACE_IRQS_OFF			\
20	pushl %eax;				\
21	pushl %ecx;				\
22	pushl %edx;				\
23	call trace_hardirqs_off;		\
24	popl %edx;				\
25	popl %ecx;				\
26	popl %eax;
27
28#ifdef CONFIG_TRACE_IRQFLAGS
29	/* put return address in eax (arg1) */
30	.macro thunk_ra name,func
31	.globl \name
32\name:
33	pushl %eax
34	pushl %ecx
35	pushl %edx
36	/* Place EIP in the arg1 */
37	movl 3*4(%esp), %eax
38	call \func
39	popl %edx
40	popl %ecx
41	popl %eax
42	ret
43	.endm
44
45	thunk_ra trace_hardirqs_on_thunk,trace_hardirqs_on_caller
46	thunk_ra trace_hardirqs_off_thunk,trace_hardirqs_off_caller
47#endif
48