Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Jan Beulich and committed by
Thomas Gleixner
63687a52 75d3bce2

+17 -17
-7
arch/x86/kernel/vmlinux_32.lds.S
··· 60 60 61 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 63 RODATA 71 64 72 65 /* writeable */
-7
arch/x86/kernel/vmlinux_64.lds.S
··· 53 53 54 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 56 . = ALIGN(PAGE_SIZE); /* Align data segment to page size boundary */ 64 57 /* Data */ 65 58 .data : AT(ADDR(.data) - LOAD_OFFSET) {
+1 -1
drivers/base/power/trace.c
··· 153 153 * it's not any guarantee, but it's a high _likelihood_ that 154 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 158 unsigned short lineno = *(unsigned short *)tracedata; 159 159 const char *file = *(const char **)(tracedata + 2);
+14
include/asm-generic/vmlinux.lds.h
··· 93 93 VMLINUX_SYMBOL(__end_rio_route_ops) = .; \ 94 94 } \ 95 95 \ 96 + TRACEDATA \ 97 + \ 96 98 /* Kernel symbol table: Normal symbols */ \ 97 99 __ksymtab : AT(ADDR(__ksymtab) - LOAD_OFFSET) { \ 98 100 VMLINUX_SYMBOL(__start___ksymtab) = .; \ ··· 319 317 *(__bug_table) \ 320 318 __stop___bug_table = .; \ 321 319 } 320 + 321 + #ifdef CONFIG_PM_TRACE 322 + #define TRACEDATA \ 323 + . = ALIGN(4); \ 324 + .tracedata : AT(ADDR(.tracedata) - LOAD_OFFSET) { \ 325 + __tracedata_start = .; \ 326 + *(.tracedata) \ 327 + __tracedata_end = .; \ 328 + } 329 + #else 330 + #define TRACEDATA 331 + #endif 322 332 323 333 #define NOTES \ 324 334 .notes : AT(ADDR(.notes) - LOAD_OFFSET) { \
+1 -1
include/asm-x86/resume-trace.h
··· 6 6 #define TRACE_RESUME(user) \ 7 7 do { \ 8 8 if (pm_trace_enabled) { \ 9 - void *tracedata; \ 9 + const void *tracedata; \ 10 10 asm volatile(_ASM_MOV_UL " $1f,%0\n" \ 11 11 ".section .tracedata,\"a\"\n" \ 12 12 "1:\t.word %c1\n\t" \
+1 -1
include/linux/resume-trace.h
··· 8 8 9 9 struct device; 10 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 13 #define TRACE_DEVICE(dev) do { \ 14 14 if (pm_trace_enabled) \