diff options
| author | Bjoern B. Brandenburg <bbb@cs.unc.edu> | 2010-05-31 12:52:35 -0400 |
|---|---|---|
| committer | Bjoern B. Brandenburg <bbb@cs.unc.edu> | 2010-06-01 10:43:11 -0400 |
| commit | 753fb14dfb0662e1d38758ffc6876c0ab1c7bd9e (patch) | |
| tree | d03e024cfd3d815e039a4c2d55f7c35108271af8 /litmus | |
| parent | 62c186fde48926a30f4e61332a805430dc1325cd (diff) | |
Make platform-specific Feather-Trace depend on !CONFIG_DEBUG_RODATA
Feather-Trace rewrites instructions in the kernel's .text segment.
This segment may be write-protected if CONFIG_DEBUG_RODATA is selected.
In this case, fall back to the default flag-based Feather-Trace
implementation. In the future, we could either adopt the ftrace method
of rewriting .text addresses using non-.text mappings or we could
consider replacing Feather-Trace with ftrace altogether.
For now, this patch avoids unexpected runtime errors.
Diffstat (limited to 'litmus')
| -rw-r--r-- | litmus/Kconfig | 9 | ||||
| -rw-r--r-- | litmus/ft_event.c | 2 |
2 files changed, 10 insertions, 1 deletions
diff --git a/litmus/Kconfig b/litmus/Kconfig index 1c0a96d54992..f3aa7478faf7 100644 --- a/litmus/Kconfig +++ b/litmus/Kconfig | |||
| @@ -80,6 +80,15 @@ config FEATHER_TRACE | |||
| 80 | Feather-Trace basic tracing infrastructure. Includes device file | 80 | Feather-Trace basic tracing infrastructure. Includes device file |
| 81 | driver and instrumentation point support. | 81 | driver and instrumentation point support. |
| 82 | 82 | ||
| 83 | There are actually two implementations of Feather-Trace. | ||
| 84 | 1) A slower, but portable, default implementation. | ||
| 85 | 2) Architecture-specific implementations that rewrite kernel .text at runtime. | ||
| 86 | |||
| 87 | If enabled, Feather-Trace will be based on 2) if available (currently only for x86). | ||
| 88 | However, if DEBUG_RODATA=y, then Feather-Trace will choose option 1) in any case | ||
| 89 | to avoid problems with write-protected .text pages. | ||
| 90 | |||
| 91 | Bottom line: to avoid increased overheads, choose DEBUG_RODATA=n. | ||
| 83 | 92 | ||
| 84 | config SCHED_TASK_TRACE | 93 | config SCHED_TASK_TRACE |
| 85 | bool "Trace real-time tasks" | 94 | bool "Trace real-time tasks" |
diff --git a/litmus/ft_event.c b/litmus/ft_event.c index 58124fe0ad90..399a07becca5 100644 --- a/litmus/ft_event.c +++ b/litmus/ft_event.c | |||
| @@ -2,7 +2,7 @@ | |||
| 2 | 2 | ||
| 3 | #include <litmus/feather_trace.h> | 3 | #include <litmus/feather_trace.h> |
| 4 | 4 | ||
| 5 | #ifndef CONFIG_ARCH_HAS_FEATHER_TRACE | 5 | #if !defined(CONFIG_ARCH_HAS_FEATHER_TRACE) || defined(CONFIG_DEBUG_RODATA) |
| 6 | /* provide dummy implementation */ | 6 | /* provide dummy implementation */ |
| 7 | 7 | ||
| 8 | int ft_events[MAX_EVENTS]; | 8 | int ft_events[MAX_EVENTS]; |
