diff options
author | Catalin Marinas <catalin.marinas@arm.com> | 2009-02-16 05:41:36 -0500 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2009-02-19 06:26:24 -0500 |
commit | bff595c15c92b9c5c8f3d32edefcef6c3cbdd59f (patch) | |
tree | 182cc7840fbd09630d273f18d5b7720655bb4a37 /arch/arm/kernel/vmlinux.lds.S | |
parent | 2d7c11bfc91637e5f9bc5f8c9a82aaffcc0e97aa (diff) |
[ARM] 5383/2: unwind: Add core support for ARM stack unwinding
This patch adds the main functionality for parsing the stack unwinding
information generated by the ARM EABI toolchains. The unwinding
information consists of an index with a pair of words per function and a
table with unwinding instructions. For more information, see "Exception
Handling ABI for the ARM Architecture" at:
http://infocenter.arm.com/help/topic/com.arm.doc.subset.swdev.abi/index.html
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/kernel/vmlinux.lds.S')
-rw-r--r-- | arch/arm/kernel/vmlinux.lds.S | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/arch/arm/kernel/vmlinux.lds.S b/arch/arm/kernel/vmlinux.lds.S index 00216071eaf7..5f664599c945 100644 --- a/arch/arm/kernel/vmlinux.lds.S +++ b/arch/arm/kernel/vmlinux.lds.S | |||
@@ -80,6 +80,8 @@ SECTIONS | |||
80 | EXIT_TEXT | 80 | EXIT_TEXT |
81 | EXIT_DATA | 81 | EXIT_DATA |
82 | *(.exitcall.exit) | 82 | *(.exitcall.exit) |
83 | *(.ARM.exidx.exit.text) | ||
84 | *(.ARM.extab.exit.text) | ||
83 | #ifndef CONFIG_MMU | 85 | #ifndef CONFIG_MMU |
84 | *(.fixup) | 86 | *(.fixup) |
85 | *(__ex_table) | 87 | *(__ex_table) |
@@ -110,6 +112,23 @@ SECTIONS | |||
110 | 112 | ||
111 | _etext = .; /* End of text and rodata section */ | 113 | _etext = .; /* End of text and rodata section */ |
112 | 114 | ||
115 | #ifdef CONFIG_ARM_UNWIND | ||
116 | /* | ||
117 | * Stack unwinding tables | ||
118 | */ | ||
119 | . = ALIGN(8); | ||
120 | .ARM.unwind_idx : { | ||
121 | __start_unwind_idx = .; | ||
122 | *(.ARM.exidx*) | ||
123 | __stop_unwind_idx = .; | ||
124 | } | ||
125 | .ARM.unwind_tab : { | ||
126 | __start_unwind_tab = .; | ||
127 | *(.ARM.extab*) | ||
128 | __stop_unwind_tab = .; | ||
129 | } | ||
130 | #endif | ||
131 | |||
113 | #ifdef CONFIG_XIP_KERNEL | 132 | #ifdef CONFIG_XIP_KERNEL |
114 | __data_loc = ALIGN(4); /* location in binary */ | 133 | __data_loc = ALIGN(4); /* location in binary */ |
115 | . = PAGE_OFFSET + TEXT_OFFSET; | 134 | . = PAGE_OFFSET + TEXT_OFFSET; |