diff options
author | Jan Beulich <jbeulich@suse.com> | 2013-08-23 09:19:29 +0200 |
---|---|---|
committer | Jan Beulich <jbeulich@suse.com> | 2013-08-23 09:19:29 +0200 |
commit | b5692f2ef9b6fd67c3e7b4d4f2a4bdb1d58100e5 (patch) | |
tree | bd47e9cb5456ece3f11655de913b9e766af7ddd3 /xen/arch/x86/xen.lds.S | |
parent | 08d89ac8bd7f43d897cdffe85b236c71d3408e16 (diff) | |
download | xen-b5692f2ef9b6fd67c3e7b4d4f2a4bdb1d58100e5.tar.gz xen-b5692f2ef9b6fd67c3e7b4d4f2a4bdb1d58100e5.tar.bz2 xen-b5692f2ef9b6fd67c3e7b4d4f2a4bdb1d58100e5.zip |
x86: move struct bug_frame instances out of line
Just like Linux did many years ago, move them into a separate (data)
section, such that they no longer pollute instruction caches and TLBs.
Assertion frames, requiring two pointers to be stored, occupy two slots
in the array, with the second slot mimicking a frame the location
pointer of which doesn't match any address within .text or .init.text
(it effectively points back to the slot itself, which - being in a data
section - can't be reached by non-buggy execution).
Signed-off-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Keir Fraser <keir@xen.org>
Diffstat (limited to 'xen/arch/x86/xen.lds.S')
-rw-r--r-- | xen/arch/x86/xen.lds.S | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/xen/arch/x86/xen.lds.S b/xen/arch/x86/xen.lds.S index d959941d36..9600cdf19e 100644 --- a/xen/arch/x86/xen.lds.S +++ b/xen/arch/x86/xen.lds.S @@ -51,6 +51,18 @@ SECTIONS } :text = 0x9090 .rodata : { + /* Bug frames table */ + . = ALIGN(4); + __start_bug_frames = .; + *(.bug_frames.0) + __stop_bug_frames_0 = .; + *(.bug_frames.1) + __stop_bug_frames_1 = .; + *(.bug_frames.2) + __stop_bug_frames_2 = .; + *(.bug_frames.3) + __stop_bug_frames_3 = .; + *(.rodata) *(.rodata.*) } :text |