Deleted Added
full compact
profile.h (139731) profile.h (143063)
1/*-
2 * Copyright (c) 1992, 1993
3 * The Regents of the University of California. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 13 unchanged lines hidden (view full) ---

22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 * SUCH DAMAGE.
28 *
29 * @(#)profile.h 8.1 (Berkeley) 6/11/93
1/*-
2 * Copyright (c) 1992, 1993
3 * The Regents of the University of California. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 13 unchanged lines hidden (view full) ---

22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 * SUCH DAMAGE.
28 *
29 * @(#)profile.h 8.1 (Berkeley) 6/11/93
30 * $FreeBSD: head/sys/amd64/include/profile.h 139731 2005-01-05 20:17:21Z imp $
30 * $FreeBSD: head/sys/amd64/include/profile.h 143063 2005-03-02 21:33:29Z joerg $
31 */
32
33#ifndef _MACHINE_PROFILE_H_
34#define _MACHINE_PROFILE_H_
35
31 */
32
33#ifndef _MACHINE_PROFILE_H_
34#define _MACHINE_PROFILE_H_
35
36#ifndef _SYS_CDEFS_H_
37#error this file needs sys/cdefs.h as a prerequisite
38#endif
39
36#ifdef _KERNEL
37
38/*
39 * Config generates something to tell the compiler to align functions on 16
40 * byte boundaries. A strict alignment is good for keeping the tables small.
41 */
42#define FUNCTION_ALIGNMENT 16
43

--- 4 unchanged lines hidden (view full) ---

48 */
49#define _MCOUNT_DECL void mcount
50#define MCOUNT
51
52#ifdef GUPROF
53#define MCOUNT_DECL(s)
54#define MCOUNT_ENTER(s)
55#define MCOUNT_EXIT(s)
40#ifdef _KERNEL
41
42/*
43 * Config generates something to tell the compiler to align functions on 16
44 * byte boundaries. A strict alignment is good for keeping the tables small.
45 */
46#define FUNCTION_ALIGNMENT 16
47

--- 4 unchanged lines hidden (view full) ---

52 */
53#define _MCOUNT_DECL void mcount
54#define MCOUNT
55
56#ifdef GUPROF
57#define MCOUNT_DECL(s)
58#define MCOUNT_ENTER(s)
59#define MCOUNT_EXIT(s)
56#ifdef __GNUC__
60#ifdef __GNUCLIKE_ASM
57#define MCOUNT_OVERHEAD(label) \
58 __asm __volatile("pushq %0; call __mcount; popq %%rcx" \
59 : \
60 : "i" (profil) \
61 : "ax", "dx", "cx", "di", "si", "r8", "r9", "memory")
62#define MEXITCOUNT_OVERHEAD() \
63 __asm __volatile("call .mexitcount; 1:" \
64 : : \
65 : "ax", "dx", "cx", "di", "si", "r8", "r9", "memory")
66#define MEXITCOUNT_OVERHEAD_GETLABEL(labelp) \
67 __asm __volatile("movq $1b,%0" : "=rm" (labelp))
68#elif defined(lint)
69#define MCOUNT_OVERHEAD(label)
70#define MEXITCOUNT_OVERHEAD()
71#define MEXITCOUNT_OVERHEAD_GETLABEL()
72#else
61#define MCOUNT_OVERHEAD(label) \
62 __asm __volatile("pushq %0; call __mcount; popq %%rcx" \
63 : \
64 : "i" (profil) \
65 : "ax", "dx", "cx", "di", "si", "r8", "r9", "memory")
66#define MEXITCOUNT_OVERHEAD() \
67 __asm __volatile("call .mexitcount; 1:" \
68 : : \
69 : "ax", "dx", "cx", "di", "si", "r8", "r9", "memory")
70#define MEXITCOUNT_OVERHEAD_GETLABEL(labelp) \
71 __asm __volatile("movq $1b,%0" : "=rm" (labelp))
72#elif defined(lint)
73#define MCOUNT_OVERHEAD(label)
74#define MEXITCOUNT_OVERHEAD()
75#define MEXITCOUNT_OVERHEAD_GETLABEL()
76#else
73#error
74#endif /* __GNUC */
77#error this file needs to be ported to your compiler
78#endif /* __GNUCLIKE_ASM */
75#else /* !GUPROF */
76#define MCOUNT_DECL(s) u_long s;
77#ifdef SMP
78extern int mcount_lock;
79#define MCOUNT_ENTER(s) { s = read_rflags(); disable_intr(); \
80 while (!atomic_cmpset_acq_int(&mcount_lock, 0, 1)) \
81 /* nothing */ ; }
82#define MCOUNT_EXIT(s) { atomic_store_rel_int(&mcount_lock, 0); \

--- 20 unchanged lines hidden (view full) ---

103#else /* !_KERNEL */
104
105#define FUNCTION_ALIGNMENT 4
106
107#define _MCOUNT_DECL \
108static void _mcount(uintfptr_t frompc, uintfptr_t selfpc) __used; \
109static void _mcount
110
79#else /* !GUPROF */
80#define MCOUNT_DECL(s) u_long s;
81#ifdef SMP
82extern int mcount_lock;
83#define MCOUNT_ENTER(s) { s = read_rflags(); disable_intr(); \
84 while (!atomic_cmpset_acq_int(&mcount_lock, 0, 1)) \
85 /* nothing */ ; }
86#define MCOUNT_EXIT(s) { atomic_store_rel_int(&mcount_lock, 0); \

--- 20 unchanged lines hidden (view full) ---

107#else /* !_KERNEL */
108
109#define FUNCTION_ALIGNMENT 4
110
111#define _MCOUNT_DECL \
112static void _mcount(uintfptr_t frompc, uintfptr_t selfpc) __used; \
113static void _mcount
114
111#ifdef __GNUC__
115#ifdef __GNUCLIKE_ASM
112#define MCOUNT __asm(" \n\
113 .globl .mcount \n\
114 .type .mcount @function \n\
115.mcount: \n\
116 pushq %rbp \n\
117 movq %rsp,%rbp \n\
118 pushq %rdi \n\
119 pushq %rsi \n\

--- 41 unchanged lines hidden (view full) ---

161 * the caller's frame pointer. The caller's raddr is in the \
162 * caller's frame following the caller's caller's frame pointer.\
163 */ \
164 __asm("movq (%%rbp),%0" : "=r" (frompc)); \
165 frompc = ((uintfptr_t *)frompc)[1]; \
166 _mcount(frompc, selfpc); \
167}
168#endif
116#define MCOUNT __asm(" \n\
117 .globl .mcount \n\
118 .type .mcount @function \n\
119.mcount: \n\
120 pushq %rbp \n\
121 movq %rsp,%rbp \n\
122 pushq %rdi \n\
123 pushq %rsi \n\

--- 41 unchanged lines hidden (view full) ---

165 * the caller's frame pointer. The caller's raddr is in the \
166 * caller's frame following the caller's caller's frame pointer.\
167 */ \
168 __asm("movq (%%rbp),%0" : "=r" (frompc)); \
169 frompc = ((uintfptr_t *)frompc)[1]; \
170 _mcount(frompc, selfpc); \
171}
172#endif
169#else /* !__GNUC__ */
173#else /* !__GNUCLIKE_ASM */
170#define MCOUNT \
171void \
172mcount() \
173{ \
174}
174#define MCOUNT \
175void \
176mcount() \
177{ \
178}
175#endif /* __GNUC__ */
179#endif /* __GNUCLIKE_ASM */
176
177typedef u_long uintfptr_t;
178
179#endif /* _KERNEL */
180
181/*
182 * An unsigned integral type that can hold non-negative difference between
183 * function pointers.

--- 4 unchanged lines hidden (view full) ---

188
189void mcount(uintfptr_t frompc, uintfptr_t selfpc);
190
191#else /* !_KERNEL */
192
193#include <sys/cdefs.h>
194
195__BEGIN_DECLS
180
181typedef u_long uintfptr_t;
182
183#endif /* _KERNEL */
184
185/*
186 * An unsigned integral type that can hold non-negative difference between
187 * function pointers.

--- 4 unchanged lines hidden (view full) ---

192
193void mcount(uintfptr_t frompc, uintfptr_t selfpc);
194
195#else /* !_KERNEL */
196
197#include <sys/cdefs.h>
198
199__BEGIN_DECLS
196#ifdef __GNUC__
200#ifdef __GNUCLIKE_ASM
197void mcount(void) __asm(".mcount");
198#endif
199__END_DECLS
200
201#endif /* _KERNEL */
202
203#endif /* !_MACHINE_PROFILE_H_ */
201void mcount(void) __asm(".mcount");
202#endif
203__END_DECLS
204
205#endif /* _KERNEL */
206
207#endif /* !_MACHINE_PROFILE_H_ */