diff options
author | Andrea Bastoni <bastoni@cs.unc.edu> | 2010-05-30 19:16:45 -0400 |
---|---|---|
committer | Andrea Bastoni <bastoni@cs.unc.edu> | 2010-05-30 19:16:45 -0400 |
commit | ada47b5fe13d89735805b566185f4885f5a3f750 (patch) | |
tree | 644b88f8a71896307d71438e9b3af49126ffb22b /arch/sparc/lib | |
parent | 43e98717ad40a4ae64545b5ba047c7b86aa44f4f (diff) | |
parent | 3280f21d43ee541f97f8cda5792150d2dbec20d5 (diff) |
Merge branch 'wip-2.6.34' into old-private-masterarchived-private-master
Diffstat (limited to 'arch/sparc/lib')
-rw-r--r-- | arch/sparc/lib/Makefile | 1 | ||||
-rw-r--r-- | arch/sparc/lib/bzero.S | 5 | ||||
-rw-r--r-- | arch/sparc/lib/checksum_32.S | 2 | ||||
-rw-r--r-- | arch/sparc/lib/ksyms.c | 2 | ||||
-rw-r--r-- | arch/sparc/lib/mcount.S | 158 | ||||
-rw-r--r-- | arch/sparc/lib/memcpy.S | 3 | ||||
-rw-r--r-- | arch/sparc/lib/memset.S | 3 | ||||
-rw-r--r-- | arch/sparc/lib/usercopy.c | 8 |
8 files changed, 83 insertions, 99 deletions
diff --git a/arch/sparc/lib/Makefile b/arch/sparc/lib/Makefile index e75faf0e59ae..c4b5e03af115 100644 --- a/arch/sparc/lib/Makefile +++ b/arch/sparc/lib/Makefile | |||
@@ -44,3 +44,4 @@ obj-y += iomap.o | |||
44 | obj-$(CONFIG_SPARC32) += atomic32.o | 44 | obj-$(CONFIG_SPARC32) += atomic32.o |
45 | obj-y += ksyms.o | 45 | obj-y += ksyms.o |
46 | obj-$(CONFIG_SPARC64) += PeeCeeI.o | 46 | obj-$(CONFIG_SPARC64) += PeeCeeI.o |
47 | obj-y += usercopy.o | ||
diff --git a/arch/sparc/lib/bzero.S b/arch/sparc/lib/bzero.S index b6557297440f..615f401edf69 100644 --- a/arch/sparc/lib/bzero.S +++ b/arch/sparc/lib/bzero.S | |||
@@ -6,10 +6,6 @@ | |||
6 | 6 | ||
7 | .text | 7 | .text |
8 | 8 | ||
9 | .globl __memset | ||
10 | .type __memset, #function | ||
11 | __memset: /* %o0=buf, %o1=pat, %o2=len */ | ||
12 | |||
13 | .globl memset | 9 | .globl memset |
14 | .type memset, #function | 10 | .type memset, #function |
15 | memset: /* %o0=buf, %o1=pat, %o2=len */ | 11 | memset: /* %o0=buf, %o1=pat, %o2=len */ |
@@ -83,7 +79,6 @@ __bzero_done: | |||
83 | retl | 79 | retl |
84 | mov %o3, %o0 | 80 | mov %o3, %o0 |
85 | .size __bzero, .-__bzero | 81 | .size __bzero, .-__bzero |
86 | .size __memset, .-__memset | ||
87 | .size memset, .-memset | 82 | .size memset, .-memset |
88 | 83 | ||
89 | #define EX_ST(x,y) \ | 84 | #define EX_ST(x,y) \ |
diff --git a/arch/sparc/lib/checksum_32.S b/arch/sparc/lib/checksum_32.S index 77f228533d47..3632cb34e914 100644 --- a/arch/sparc/lib/checksum_32.S +++ b/arch/sparc/lib/checksum_32.S | |||
@@ -560,7 +560,7 @@ __csum_partial_copy_end: | |||
560 | mov %i0, %o1 | 560 | mov %i0, %o1 |
561 | mov %i1, %o0 | 561 | mov %i1, %o0 |
562 | 5: | 562 | 5: |
563 | call __memcpy | 563 | call memcpy |
564 | mov %i2, %o2 | 564 | mov %i2, %o2 |
565 | tst %o0 | 565 | tst %o0 |
566 | bne,a 2f | 566 | bne,a 2f |
diff --git a/arch/sparc/lib/ksyms.c b/arch/sparc/lib/ksyms.c index 704b12668388..1b30bb3bfdb1 100644 --- a/arch/sparc/lib/ksyms.c +++ b/arch/sparc/lib/ksyms.c | |||
@@ -30,7 +30,6 @@ EXPORT_SYMBOL(__memscan_generic); | |||
30 | EXPORT_SYMBOL(memcmp); | 30 | EXPORT_SYMBOL(memcmp); |
31 | EXPORT_SYMBOL(memcpy); | 31 | EXPORT_SYMBOL(memcpy); |
32 | EXPORT_SYMBOL(memset); | 32 | EXPORT_SYMBOL(memset); |
33 | EXPORT_SYMBOL(__memset); | ||
34 | EXPORT_SYMBOL(memmove); | 33 | EXPORT_SYMBOL(memmove); |
35 | EXPORT_SYMBOL(__bzero); | 34 | EXPORT_SYMBOL(__bzero); |
36 | 35 | ||
@@ -81,7 +80,6 @@ EXPORT_SYMBOL(__csum_partial_copy_sparc_generic); | |||
81 | 80 | ||
82 | /* Special internal versions of library functions. */ | 81 | /* Special internal versions of library functions. */ |
83 | EXPORT_SYMBOL(__copy_1page); | 82 | EXPORT_SYMBOL(__copy_1page); |
84 | EXPORT_SYMBOL(__memcpy); | ||
85 | EXPORT_SYMBOL(__memmove); | 83 | EXPORT_SYMBOL(__memmove); |
86 | EXPORT_SYMBOL(bzero_1page); | 84 | EXPORT_SYMBOL(bzero_1page); |
87 | 85 | ||
diff --git a/arch/sparc/lib/mcount.S b/arch/sparc/lib/mcount.S index 7ce9c65f3592..3ad6cbdc2163 100644 --- a/arch/sparc/lib/mcount.S +++ b/arch/sparc/lib/mcount.S | |||
@@ -7,26 +7,11 @@ | |||
7 | 7 | ||
8 | #include <linux/linkage.h> | 8 | #include <linux/linkage.h> |
9 | 9 | ||
10 | #include <asm/ptrace.h> | ||
11 | #include <asm/thread_info.h> | ||
12 | |||
13 | /* | 10 | /* |
14 | * This is the main variant and is called by C code. GCC's -pg option | 11 | * This is the main variant and is called by C code. GCC's -pg option |
15 | * automatically instruments every C function with a call to this. | 12 | * automatically instruments every C function with a call to this. |
16 | */ | 13 | */ |
17 | 14 | ||
18 | #ifdef CONFIG_STACK_DEBUG | ||
19 | |||
20 | #define OVSTACKSIZE 4096 /* lets hope this is enough */ | ||
21 | |||
22 | .data | ||
23 | .align 8 | ||
24 | panicstring: | ||
25 | .asciz "Stack overflow\n" | ||
26 | .align 8 | ||
27 | ovstack: | ||
28 | .skip OVSTACKSIZE | ||
29 | #endif | ||
30 | .text | 15 | .text |
31 | .align 32 | 16 | .align 32 |
32 | .globl _mcount | 17 | .globl _mcount |
@@ -35,83 +20,48 @@ ovstack: | |||
35 | .type mcount,#function | 20 | .type mcount,#function |
36 | _mcount: | 21 | _mcount: |
37 | mcount: | 22 | mcount: |
38 | #ifdef CONFIG_STACK_DEBUG | ||
39 | /* | ||
40 | * Check whether %sp is dangerously low. | ||
41 | */ | ||
42 | ldub [%g6 + TI_FPDEPTH], %g1 | ||
43 | srl %g1, 1, %g3 | ||
44 | add %g3, 1, %g3 | ||
45 | sllx %g3, 8, %g3 ! each fpregs frame is 256b | ||
46 | add %g3, 192, %g3 | ||
47 | add %g6, %g3, %g3 ! where does task_struct+frame end? | ||
48 | sub %g3, STACK_BIAS, %g3 | ||
49 | cmp %sp, %g3 | ||
50 | bg,pt %xcc, 1f | ||
51 | nop | ||
52 | lduh [%g6 + TI_CPU], %g1 | ||
53 | sethi %hi(hardirq_stack), %g3 | ||
54 | or %g3, %lo(hardirq_stack), %g3 | ||
55 | sllx %g1, 3, %g1 | ||
56 | ldx [%g3 + %g1], %g7 | ||
57 | sub %g7, STACK_BIAS, %g7 | ||
58 | cmp %sp, %g7 | ||
59 | bleu,pt %xcc, 2f | ||
60 | sethi %hi(THREAD_SIZE), %g3 | ||
61 | add %g7, %g3, %g7 | ||
62 | cmp %sp, %g7 | ||
63 | blu,pn %xcc, 1f | ||
64 | 2: sethi %hi(softirq_stack), %g3 | ||
65 | or %g3, %lo(softirq_stack), %g3 | ||
66 | ldx [%g3 + %g1], %g7 | ||
67 | cmp %sp, %g7 | ||
68 | bleu,pt %xcc, 2f | ||
69 | sethi %hi(THREAD_SIZE), %g3 | ||
70 | add %g7, %g3, %g7 | ||
71 | cmp %sp, %g7 | ||
72 | blu,pn %xcc, 1f | ||
73 | nop | ||
74 | /* If we are already on ovstack, don't hop onto it | ||
75 | * again, we are already trying to output the stack overflow | ||
76 | * message. | ||
77 | */ | ||
78 | sethi %hi(ovstack), %g7 ! cant move to panic stack fast enough | ||
79 | or %g7, %lo(ovstack), %g7 | ||
80 | add %g7, OVSTACKSIZE, %g3 | ||
81 | sub %g3, STACK_BIAS + 192, %g3 | ||
82 | sub %g7, STACK_BIAS, %g7 | ||
83 | cmp %sp, %g7 | ||
84 | blu,pn %xcc, 2f | ||
85 | cmp %sp, %g3 | ||
86 | bleu,pn %xcc, 1f | ||
87 | nop | ||
88 | 2: mov %g3, %sp | ||
89 | sethi %hi(panicstring), %g3 | ||
90 | call prom_printf | ||
91 | or %g3, %lo(panicstring), %o0 | ||
92 | call prom_halt | ||
93 | nop | ||
94 | 1: | ||
95 | #endif | ||
96 | #ifdef CONFIG_FUNCTION_TRACER | 23 | #ifdef CONFIG_FUNCTION_TRACER |
97 | #ifdef CONFIG_DYNAMIC_FTRACE | 24 | #ifdef CONFIG_DYNAMIC_FTRACE |
98 | mov %o7, %o0 | 25 | /* Do nothing, the retl/nop below is all we need. */ |
99 | .globl mcount_call | ||
100 | mcount_call: | ||
101 | call ftrace_stub | ||
102 | mov %o0, %o7 | ||
103 | #else | 26 | #else |
104 | sethi %hi(ftrace_trace_function), %g1 | 27 | sethi %hi(function_trace_stop), %g1 |
28 | lduw [%g1 + %lo(function_trace_stop)], %g2 | ||
29 | brnz,pn %g2, 2f | ||
30 | sethi %hi(ftrace_trace_function), %g1 | ||
105 | sethi %hi(ftrace_stub), %g2 | 31 | sethi %hi(ftrace_stub), %g2 |
106 | ldx [%g1 + %lo(ftrace_trace_function)], %g1 | 32 | ldx [%g1 + %lo(ftrace_trace_function)], %g1 |
107 | or %g2, %lo(ftrace_stub), %g2 | 33 | or %g2, %lo(ftrace_stub), %g2 |
108 | cmp %g1, %g2 | 34 | cmp %g1, %g2 |
109 | be,pn %icc, 1f | 35 | be,pn %icc, 1f |
110 | mov %i7, %o1 | 36 | mov %i7, %g3 |
111 | jmpl %g1, %g0 | 37 | save %sp, -176, %sp |
112 | mov %o7, %o0 | 38 | mov %g3, %o1 |
39 | jmpl %g1, %o7 | ||
40 | mov %i7, %o0 | ||
41 | ret | ||
42 | restore | ||
113 | /* not reached */ | 43 | /* not reached */ |
114 | 1: | 44 | 1: |
45 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER | ||
46 | sethi %hi(ftrace_graph_return), %g1 | ||
47 | ldx [%g1 + %lo(ftrace_graph_return)], %g3 | ||
48 | cmp %g2, %g3 | ||
49 | bne,pn %xcc, 5f | ||
50 | sethi %hi(ftrace_graph_entry_stub), %g2 | ||
51 | sethi %hi(ftrace_graph_entry), %g1 | ||
52 | or %g2, %lo(ftrace_graph_entry_stub), %g2 | ||
53 | ldx [%g1 + %lo(ftrace_graph_entry)], %g1 | ||
54 | cmp %g1, %g2 | ||
55 | be,pt %xcc, 2f | ||
56 | nop | ||
57 | 5: mov %i7, %g2 | ||
58 | mov %fp, %g3 | ||
59 | save %sp, -176, %sp | ||
60 | mov %g2, %l0 | ||
61 | ba,pt %xcc, ftrace_graph_caller | ||
62 | mov %g3, %l1 | ||
63 | #endif | ||
64 | 2: | ||
115 | #endif | 65 | #endif |
116 | #endif | 66 | #endif |
117 | retl | 67 | retl |
@@ -130,14 +80,50 @@ ftrace_stub: | |||
130 | .globl ftrace_caller | 80 | .globl ftrace_caller |
131 | .type ftrace_caller,#function | 81 | .type ftrace_caller,#function |
132 | ftrace_caller: | 82 | ftrace_caller: |
133 | mov %i7, %o1 | 83 | sethi %hi(function_trace_stop), %g1 |
134 | mov %o7, %o0 | 84 | mov %i7, %g2 |
85 | lduw [%g1 + %lo(function_trace_stop)], %g1 | ||
86 | brnz,pn %g1, ftrace_stub | ||
87 | mov %fp, %g3 | ||
88 | save %sp, -176, %sp | ||
89 | mov %g2, %o1 | ||
90 | mov %g2, %l0 | ||
91 | mov %g3, %l1 | ||
135 | .globl ftrace_call | 92 | .globl ftrace_call |
136 | ftrace_call: | 93 | ftrace_call: |
137 | call ftrace_stub | 94 | call ftrace_stub |
138 | mov %o0, %o7 | 95 | mov %i7, %o0 |
139 | retl | 96 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER |
97 | .globl ftrace_graph_call | ||
98 | ftrace_graph_call: | ||
99 | call ftrace_stub | ||
140 | nop | 100 | nop |
101 | #endif | ||
102 | ret | ||
103 | restore | ||
104 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER | ||
105 | .size ftrace_graph_call,.-ftrace_graph_call | ||
106 | #endif | ||
107 | .size ftrace_call,.-ftrace_call | ||
141 | .size ftrace_caller,.-ftrace_caller | 108 | .size ftrace_caller,.-ftrace_caller |
142 | #endif | 109 | #endif |
143 | #endif | 110 | #endif |
111 | |||
112 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER | ||
113 | ENTRY(ftrace_graph_caller) | ||
114 | mov %l0, %o0 | ||
115 | mov %i7, %o1 | ||
116 | call prepare_ftrace_return | ||
117 | mov %l1, %o2 | ||
118 | ret | ||
119 | restore %o0, -8, %i7 | ||
120 | END(ftrace_graph_caller) | ||
121 | |||
122 | ENTRY(return_to_handler) | ||
123 | save %sp, -176, %sp | ||
124 | call ftrace_return_to_handler | ||
125 | mov %fp, %o0 | ||
126 | jmpl %o0 + 8, %g0 | ||
127 | restore | ||
128 | END(return_to_handler) | ||
129 | #endif | ||
diff --git a/arch/sparc/lib/memcpy.S b/arch/sparc/lib/memcpy.S index ce10bc869af9..34fe65751737 100644 --- a/arch/sparc/lib/memcpy.S +++ b/arch/sparc/lib/memcpy.S | |||
@@ -543,9 +543,6 @@ FUNC(memmove) | |||
543 | b 3f | 543 | b 3f |
544 | add %o0, 2, %o0 | 544 | add %o0, 2, %o0 |
545 | 545 | ||
546 | #ifdef __KERNEL__ | ||
547 | FUNC(__memcpy) | ||
548 | #endif | ||
549 | FUNC(memcpy) /* %o0=dst %o1=src %o2=len */ | 546 | FUNC(memcpy) /* %o0=dst %o1=src %o2=len */ |
550 | 547 | ||
551 | sub %o0, %o1, %o4 | 548 | sub %o0, %o1, %o4 |
diff --git a/arch/sparc/lib/memset.S b/arch/sparc/lib/memset.S index 1c37ea892deb..99c017be8719 100644 --- a/arch/sparc/lib/memset.S +++ b/arch/sparc/lib/memset.S | |||
@@ -60,11 +60,10 @@ | |||
60 | .globl __bzero_begin | 60 | .globl __bzero_begin |
61 | __bzero_begin: | 61 | __bzero_begin: |
62 | 62 | ||
63 | .globl __bzero, __memset, | 63 | .globl __bzero |
64 | .globl memset | 64 | .globl memset |
65 | .globl __memset_start, __memset_end | 65 | .globl __memset_start, __memset_end |
66 | __memset_start: | 66 | __memset_start: |
67 | __memset: | ||
68 | memset: | 67 | memset: |
69 | and %o1, 0xff, %g3 | 68 | and %o1, 0xff, %g3 |
70 | sll %g3, 8, %g2 | 69 | sll %g3, 8, %g2 |
diff --git a/arch/sparc/lib/usercopy.c b/arch/sparc/lib/usercopy.c new file mode 100644 index 000000000000..14b363fec8a2 --- /dev/null +++ b/arch/sparc/lib/usercopy.c | |||
@@ -0,0 +1,8 @@ | |||
1 | #include <linux/module.h> | ||
2 | #include <linux/bug.h> | ||
3 | |||
4 | void copy_from_user_overflow(void) | ||
5 | { | ||
6 | WARN(1, "Buffer overflow detected!\n"); | ||
7 | } | ||
8 | EXPORT_SYMBOL(copy_from_user_overflow); | ||