diff options
author | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2005-11-11 05:15:21 -0500 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2005-11-11 06:25:39 -0500 |
commit | a7f290dad32ee34d931561b7943c858fe2aae503 (patch) | |
tree | 850f04ed9ffba8aef6e151fa9c9e8a0c667bb795 /include/asm-powerpc/vdso.h | |
parent | 6761c4a07378e19e3710bb69cea65795774529b1 (diff) |
[PATCH] powerpc: Merge vdso's and add vdso support to 32 bits kernel
This patch moves the vdso's to arch/powerpc, adds support for the 32
bits vdso to the 32 bits kernel, rename systemcfg (finally !), and adds
some new (still untested) routines to both vdso's: clock_gettime() with
support for CLOCK_REALTIME and CLOCK_MONOTONIC, clock_getres() (same
clocks) and get_tbfreq() for glibc to retreive the timebase frequency.
Tom,Steve: The implementation of get_tbfreq() I've done for 32 bits
returns a long long (r3, r4) not a long. This is such that if we ever
add support for >4Ghz timebases on ppc32, the userland interface won't
have to change.
I have tested gettimeofday() using some glibc patches in both ppc32 and
ppc64 kernels using 32 bits userland (I haven't had a chance to test a
64 bits userland yet, but the implementation didn't change and was
tested earlier). I haven't tested yet the new functions.
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'include/asm-powerpc/vdso.h')
-rw-r--r-- | include/asm-powerpc/vdso.h | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/include/asm-powerpc/vdso.h b/include/asm-powerpc/vdso.h new file mode 100644 index 000000000000..85d8a7be25c4 --- /dev/null +++ b/include/asm-powerpc/vdso.h | |||
@@ -0,0 +1,83 @@ | |||
1 | #ifndef __PPC64_VDSO_H__ | ||
2 | #define __PPC64_VDSO_H__ | ||
3 | |||
4 | #ifdef __KERNEL__ | ||
5 | |||
6 | /* Default link addresses for the vDSOs */ | ||
7 | #define VDSO32_LBASE 0x100000 | ||
8 | #define VDSO64_LBASE 0x100000 | ||
9 | |||
10 | /* Default map addresses */ | ||
11 | #define VDSO32_MBASE VDSO32_LBASE | ||
12 | #define VDSO64_MBASE VDSO64_LBASE | ||
13 | |||
14 | #define VDSO_VERSION_STRING LINUX_2.6.12 | ||
15 | |||
16 | /* Define if 64 bits VDSO has procedure descriptors */ | ||
17 | #undef VDS64_HAS_DESCRIPTORS | ||
18 | |||
19 | #ifndef __ASSEMBLY__ | ||
20 | |||
21 | extern unsigned int vdso64_pages; | ||
22 | extern unsigned int vdso32_pages; | ||
23 | |||
24 | /* Offsets relative to thread->vdso_base */ | ||
25 | extern unsigned long vdso64_rt_sigtramp; | ||
26 | extern unsigned long vdso32_sigtramp; | ||
27 | extern unsigned long vdso32_rt_sigtramp; | ||
28 | |||
29 | extern void vdso_init(void); | ||
30 | |||
31 | #else /* __ASSEMBLY__ */ | ||
32 | |||
33 | #ifdef __VDSO64__ | ||
34 | #ifdef VDS64_HAS_DESCRIPTORS | ||
35 | #define V_FUNCTION_BEGIN(name) \ | ||
36 | .globl name; \ | ||
37 | .section ".opd","a"; \ | ||
38 | .align 3; \ | ||
39 | name: \ | ||
40 | .quad .name,.TOC.@tocbase,0; \ | ||
41 | .previous; \ | ||
42 | .globl .name; \ | ||
43 | .type .name,@function; \ | ||
44 | .name: \ | ||
45 | |||
46 | #define V_FUNCTION_END(name) \ | ||
47 | .size .name,.-.name; | ||
48 | |||
49 | #define V_LOCAL_FUNC(name) (.name) | ||
50 | |||
51 | #else /* VDS64_HAS_DESCRIPTORS */ | ||
52 | |||
53 | #define V_FUNCTION_BEGIN(name) \ | ||
54 | .globl name; \ | ||
55 | name: \ | ||
56 | |||
57 | #define V_FUNCTION_END(name) \ | ||
58 | .size name,.-name; | ||
59 | |||
60 | #define V_LOCAL_FUNC(name) (name) | ||
61 | |||
62 | #endif /* VDS64_HAS_DESCRIPTORS */ | ||
63 | #endif /* __VDSO64__ */ | ||
64 | |||
65 | #ifdef __VDSO32__ | ||
66 | |||
67 | #define V_FUNCTION_BEGIN(name) \ | ||
68 | .globl name; \ | ||
69 | .type name,@function; \ | ||
70 | name: \ | ||
71 | |||
72 | #define V_FUNCTION_END(name) \ | ||
73 | .size name,.-name; | ||
74 | |||
75 | #define V_LOCAL_FUNC(name) (name) | ||
76 | |||
77 | #endif /* __VDSO32__ */ | ||
78 | |||
79 | #endif /* __ASSEMBLY__ */ | ||
80 | |||
81 | #endif /* __KERNEL__ */ | ||
82 | |||
83 | #endif /* __PPC64_VDSO_H__ */ | ||