diff options
author | Jan Beulich <jbeulich@novell.com> | 2008-05-12 09:44:41 -0400 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2008-05-25 01:09:47 -0400 |
commit | 63687a528c39a67c1a213cdffa09feb0e6af9dbe (patch) | |
tree | 0a21067f84d2495d37cc6fe864675db53ca56630 | |
parent | 75d3bce2fc0a80f435fe12f2c9ed2632c8ac29e4 (diff) |
x86: move tracedata to RODATA
.. allowing it to be write-protected just as other read-only data
under CONFIG_DEBUG_RODATA.
Signed-off-by: Jan Beulich <jbeulich@novell.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-rw-r--r-- | arch/x86/kernel/vmlinux_32.lds.S | 7 | ||||
-rw-r--r-- | arch/x86/kernel/vmlinux_64.lds.S | 7 | ||||
-rw-r--r-- | drivers/base/power/trace.c | 2 | ||||
-rw-r--r-- | include/asm-generic/vmlinux.lds.h | 14 | ||||
-rw-r--r-- | include/asm-x86/resume-trace.h | 2 | ||||
-rw-r--r-- | include/linux/resume-trace.h | 2 |
6 files changed, 17 insertions, 17 deletions
diff --git a/arch/x86/kernel/vmlinux_32.lds.S b/arch/x86/kernel/vmlinux_32.lds.S index ce5ed083a1e9..2674f5796275 100644 --- a/arch/x86/kernel/vmlinux_32.lds.S +++ b/arch/x86/kernel/vmlinux_32.lds.S | |||
@@ -60,13 +60,6 @@ SECTIONS | |||
60 | 60 | ||
61 | BUG_TABLE :text | 61 | BUG_TABLE :text |
62 | 62 | ||
63 | . = ALIGN(4); | ||
64 | .tracedata : AT(ADDR(.tracedata) - LOAD_OFFSET) { | ||
65 | __tracedata_start = .; | ||
66 | *(.tracedata) | ||
67 | __tracedata_end = .; | ||
68 | } | ||
69 | |||
70 | RODATA | 63 | RODATA |
71 | 64 | ||
72 | /* writeable */ | 65 | /* writeable */ |
diff --git a/arch/x86/kernel/vmlinux_64.lds.S b/arch/x86/kernel/vmlinux_64.lds.S index fad3674b06a5..687041bfbae5 100644 --- a/arch/x86/kernel/vmlinux_64.lds.S +++ b/arch/x86/kernel/vmlinux_64.lds.S | |||
@@ -53,13 +53,6 @@ SECTIONS | |||
53 | 53 | ||
54 | RODATA | 54 | RODATA |
55 | 55 | ||
56 | . = ALIGN(4); | ||
57 | .tracedata : AT(ADDR(.tracedata) - LOAD_OFFSET) { | ||
58 | __tracedata_start = .; | ||
59 | *(.tracedata) | ||
60 | __tracedata_end = .; | ||
61 | } | ||
62 | |||
63 | . = ALIGN(PAGE_SIZE); /* Align data segment to page size boundary */ | 56 | . = ALIGN(PAGE_SIZE); /* Align data segment to page size boundary */ |
64 | /* Data */ | 57 | /* Data */ |
65 | .data : AT(ADDR(.data) - LOAD_OFFSET) { | 58 | .data : AT(ADDR(.data) - LOAD_OFFSET) { |
diff --git a/drivers/base/power/trace.c b/drivers/base/power/trace.c index 2b4b392dcbc1..87a7f1d02578 100644 --- a/drivers/base/power/trace.c +++ b/drivers/base/power/trace.c | |||
@@ -153,7 +153,7 @@ EXPORT_SYMBOL(set_trace_device); | |||
153 | * it's not any guarantee, but it's a high _likelihood_ that | 153 | * it's not any guarantee, but it's a high _likelihood_ that |
154 | * the match is valid). | 154 | * the match is valid). |
155 | */ | 155 | */ |
156 | void generate_resume_trace(void *tracedata, unsigned int user) | 156 | void generate_resume_trace(const void *tracedata, unsigned int user) |
157 | { | 157 | { |
158 | unsigned short lineno = *(unsigned short *)tracedata; | 158 | unsigned short lineno = *(unsigned short *)tracedata; |
159 | const char *file = *(const char **)(tracedata + 2); | 159 | const char *file = *(const char **)(tracedata + 2); |
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h index f054778e916c..f1992dc5c424 100644 --- a/include/asm-generic/vmlinux.lds.h +++ b/include/asm-generic/vmlinux.lds.h | |||
@@ -93,6 +93,8 @@ | |||
93 | VMLINUX_SYMBOL(__end_rio_route_ops) = .; \ | 93 | VMLINUX_SYMBOL(__end_rio_route_ops) = .; \ |
94 | } \ | 94 | } \ |
95 | \ | 95 | \ |
96 | TRACEDATA \ | ||
97 | \ | ||
96 | /* Kernel symbol table: Normal symbols */ \ | 98 | /* Kernel symbol table: Normal symbols */ \ |
97 | __ksymtab : AT(ADDR(__ksymtab) - LOAD_OFFSET) { \ | 99 | __ksymtab : AT(ADDR(__ksymtab) - LOAD_OFFSET) { \ |
98 | VMLINUX_SYMBOL(__start___ksymtab) = .; \ | 100 | VMLINUX_SYMBOL(__start___ksymtab) = .; \ |
@@ -318,6 +320,18 @@ | |||
318 | __stop___bug_table = .; \ | 320 | __stop___bug_table = .; \ |
319 | } | 321 | } |
320 | 322 | ||
323 | #ifdef CONFIG_PM_TRACE | ||
324 | #define TRACEDATA \ | ||
325 | . = ALIGN(4); \ | ||
326 | .tracedata : AT(ADDR(.tracedata) - LOAD_OFFSET) { \ | ||
327 | __tracedata_start = .; \ | ||
328 | *(.tracedata) \ | ||
329 | __tracedata_end = .; \ | ||
330 | } | ||
331 | #else | ||
332 | #define TRACEDATA | ||
333 | #endif | ||
334 | |||
321 | #define NOTES \ | 335 | #define NOTES \ |
322 | .notes : AT(ADDR(.notes) - LOAD_OFFSET) { \ | 336 | .notes : AT(ADDR(.notes) - LOAD_OFFSET) { \ |
323 | VMLINUX_SYMBOL(__start_notes) = .; \ | 337 | VMLINUX_SYMBOL(__start_notes) = .; \ |
diff --git a/include/asm-x86/resume-trace.h b/include/asm-x86/resume-trace.h index 2557514d7ef6..8d9f0b41ee86 100644 --- a/include/asm-x86/resume-trace.h +++ b/include/asm-x86/resume-trace.h | |||
@@ -6,7 +6,7 @@ | |||
6 | #define TRACE_RESUME(user) \ | 6 | #define TRACE_RESUME(user) \ |
7 | do { \ | 7 | do { \ |
8 | if (pm_trace_enabled) { \ | 8 | if (pm_trace_enabled) { \ |
9 | void *tracedata; \ | 9 | const void *tracedata; \ |
10 | asm volatile(_ASM_MOV_UL " $1f,%0\n" \ | 10 | asm volatile(_ASM_MOV_UL " $1f,%0\n" \ |
11 | ".section .tracedata,\"a\"\n" \ | 11 | ".section .tracedata,\"a\"\n" \ |
12 | "1:\t.word %c1\n\t" \ | 12 | "1:\t.word %c1\n\t" \ |
diff --git a/include/linux/resume-trace.h b/include/linux/resume-trace.h index f3f4f28c6960..c9ba2fdf807d 100644 --- a/include/linux/resume-trace.h +++ b/include/linux/resume-trace.h | |||
@@ -8,7 +8,7 @@ extern int pm_trace_enabled; | |||
8 | 8 | ||
9 | struct device; | 9 | struct device; |
10 | extern void set_trace_device(struct device *); | 10 | extern void set_trace_device(struct device *); |
11 | extern void generate_resume_trace(void *tracedata, unsigned int user); | 11 | extern void generate_resume_trace(const void *tracedata, unsigned int user); |
12 | 12 | ||
13 | #define TRACE_DEVICE(dev) do { \ | 13 | #define TRACE_DEVICE(dev) do { \ |
14 | if (pm_trace_enabled) \ | 14 | if (pm_trace_enabled) \ |