diff options
| author | Jan Beulich <jbeulich@novell.com> | 2006-10-21 12:37:01 -0400 |
|---|---|---|
| committer | Andi Kleen <andi@basil.nowhere.org> | 2006-10-21 12:37:01 -0400 |
| commit | 690a973f48b6ba2954465992c08e65059c8374fe (patch) | |
| tree | b30a59496628592233944b3f4340cdfdf9d3d5de /include/asm-generic | |
| parent | cdfce1f5714fec7b24715f569b2fee1607350a6d (diff) | |
[PATCH] x86-64: Speed up dwarf2 unwinder
This changes the dwarf2 unwinder to do a binary search for CIEs
instead of a linear work. The linker is unfortunately not
able to build a proper lookup table at link time, instead it creates
one at runtime as soon as the bootmem allocator is usable (so you'll continue
using the linear lookup for the first [hopefully] few calls).
The code should be ready to utilize a build-time created table once
a fixed linker becomes available.
Signed-off-by: Jan Beulich <jbeulich@novell.com>
Signed-off-by: Andi Kleen <ak@suse.de>
Diffstat (limited to 'include/asm-generic')
| -rw-r--r-- | include/asm-generic/vmlinux.lds.h | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h index 69240b52f8..9d0d11c180 100644 --- a/include/asm-generic/vmlinux.lds.h +++ b/include/asm-generic/vmlinux.lds.h | |||
| @@ -125,6 +125,10 @@ | |||
| 125 | *(__param) \ | 125 | *(__param) \ |
| 126 | VMLINUX_SYMBOL(__stop___param) = .; \ | 126 | VMLINUX_SYMBOL(__stop___param) = .; \ |
| 127 | } \ | 127 | } \ |
| 128 | \ | ||
| 129 | /* Unwind data binary search table */ \ | ||
| 130 | EH_FRAME_HDR \ | ||
| 131 | \ | ||
| 128 | __end_rodata = .; \ | 132 | __end_rodata = .; \ |
| 129 | . = ALIGN(4096); | 133 | . = ALIGN(4096); |
| 130 | 134 | ||
| @@ -157,6 +161,18 @@ | |||
| 157 | *(.kprobes.text) \ | 161 | *(.kprobes.text) \ |
| 158 | VMLINUX_SYMBOL(__kprobes_text_end) = .; | 162 | VMLINUX_SYMBOL(__kprobes_text_end) = .; |
| 159 | 163 | ||
| 164 | #ifdef CONFIG_STACK_UNWIND | ||
| 165 | /* Unwind data binary search table */ | ||
| 166 | #define EH_FRAME_HDR \ | ||
| 167 | .eh_frame_hdr : AT(ADDR(.eh_frame_hdr) - LOAD_OFFSET) { \ | ||
| 168 | VMLINUX_SYMBOL(__start_unwind_hdr) = .; \ | ||
| 169 | *(.eh_frame_hdr) \ | ||
| 170 | VMLINUX_SYMBOL(__end_unwind_hdr) = .; \ | ||
| 171 | } | ||
| 172 | #else | ||
| 173 | #define EH_FRAME_HDR | ||
| 174 | #endif | ||
| 175 | |||
| 160 | /* DWARF debug sections. | 176 | /* DWARF debug sections. |
| 161 | Symbols in the DWARF debugging sections are relative to | 177 | Symbols in the DWARF debugging sections are relative to |
| 162 | the beginning of the section so we begin them at 0. */ | 178 | the beginning of the section so we begin them at 0. */ |
