make .tracedata a normal part of RODATA()
Subsystems (6)
PATCH 1/1 make .tracedata a normal part of RODATA()
.. allowing it to be write-protected just as other read-only data under CONFIG_DEBUG_RODATA.
Signed-off-by Jan Beulich <[email protected]>
Cc Linus Torvalds <[email protected]>
Cc Ingo Molnar <[email protected]>
--- arch/x86/kernel/vmlinux_32.lds.S | 7 ------- arch/x86/kernel/vmlinux_64.lds.S | 7 ------- drivers/base/power/trace.c | 2 +- include/asm-generic/vmlinux.lds.h | 14 ++++++++++++++ include/asm-x86/resume-trace_32.h | 2 +- include/asm-x86/resume-trace_64.h | 4 ++-- include/linux/resume-trace.h | 2 +- 7 files changed, 19 insertions(+), 19 deletions(-)
arch/x86/kernel/vmlinux_32.lds.S +0 -7
@@ -64,13 +64,6 @@ SECTIONS BUG_TABLE :text - . = ALIGN(4); - .tracedata : AT(ADDR(.tracedata) - LOAD_OFFSET) { - __tracedata_start = .; - *(.tracedata) - __tracedata_end = .; - } - RODATA /* writeable */
arch/x86/kernel/vmlinux_64.lds.S +0 -7
@@ -54,13 +54,6 @@ SECTIONS RODATA - . = ALIGN(4); - .tracedata : AT(ADDR(.tracedata) - LOAD_OFFSET) { - __tracedata_start = .; - *(.tracedata) - __tracedata_end = .; - } - . = ALIGN(PAGE_SIZE); /* Align data segment to page size boundary */ /* Data */ .data : AT(ADDR(.data) - LOAD_OFFSET) {
drivers/base/power/trace.c +1 -1
@@ -153,7 +153,7 @@ EXPORT_SYMBOL(set_trace_device);* it's not any guarantee, but it's a high _likelihood_ that * the match is valid). */ -void generate_resume_trace (void *tracedata,unsigned int user) +void generate_resume_trace (const void *tracedata,unsigned int user) {unsigned short lineno = *(unsigned short *)tracedata;const char *file = *(const char **)(tracedata +2 );
include/asm-generic/vmlinux.lds.h +14 -0
@@ -57,6 +57,8 @@ VMLINUX_SYMBOL(__end_rio_route_ops) = .; \ } \ \ +TRACEDATA \ + \/* Kernel symbol table: Normal symbols */ \ __ksymtab : AT(ADDR(__ksymtab) - LOAD_OFFSET) { \ VMLINUX_SYMBOL(__start___ksymtab) = .; \
@@ -229,6 +231,18 @@ __stop___bug_table = .; \ } +#ifdef CONFIG_PM_TRACE +#define TRACEDATA \ + . = ALIGN(4); \ + .tracedata : AT(ADDR(.tracedata) - LOAD_OFFSET) { \ + __tracedata_start = .; \ + *(.tracedata) \ + __tracedata_end = .; \ + } +#else +#define TRACEDATA +#endif +#define NOTES \ .notes : AT(ADDR(.notes) - LOAD_OFFSET) { \ VMLINUX_SYMBOL(__start_notes) = .; \
include/asm-x86/resume-trace_32.h +1 -1
@@ -1,6 +1,6 @@#define TRACE_RESUME (user) do { \ if (pm_trace_enabled) { \ - void *tracedata; \ + const void *tracedata; \ asm volatile("movl $1f,%0\n" \ ".section .tracedata,\"a\"\n" \ "1:\t.word %c1\n" \
include/asm-x86/resume-trace_64.h +2 -2
@@ -1,7 +1,7 @@#define TRACE_RESUME (user) do { \ if (pm_trace_enabled) { \ - void *tracedata; \ - asm volatile("movq $1f,%0\n" \ + const void *tracedata; \ + asm volatile("leaq 1f(%rip),%0\n" \ ".section .tracedata,\"a\"\n" \ "1:\t.word %c1\n" \ "\t.quad %c2\n" \
include/linux/resume-trace.h +1 -1
@@ -8,7 +8,7 @@ extern int pm_trace_enabled;struct device ;extern void set_trace_device (struct device *); -extern void generate_resume_trace (void *tracedata,unsigned int user); +extern void generate_resume_trace (const void *tracedata,unsigned int user);#define TRACE_DEVICE (dev) do { \ if (pm_trace_enabled) \