summaryrefslogtreecommitdiffstats
path: root/arch/sh/kernel/module.c
diff options
context:
space:
mode:
authorPaul Mundt <lethal@linux-sh.org>2009-10-13 06:32:19 +0200
committerPaul Mundt <lethal@linux-sh.org>2009-10-13 06:32:19 +0200
commit5a3abba77dc0eb0b00332c21899123cdfa3b19e5 (patch)
treecb0b52bcb90f5c680faba380a0832203bdad2fed /arch/sh/kernel/module.c
parentsh: Generalize CALLER_ADDRx support. (diff)
downloadlinux-5a3abba77dc0eb0b00332c21899123cdfa3b19e5.tar.xz
linux-5a3abba77dc0eb0b00332c21899123cdfa3b19e5.zip
sh: Tidy up the dwarf module helpers.
This enables us to build the dwarf unwinder both with modules enabled and disabled in addition to reducing code size in the latter case. The helpers are also consolidated, and modified to resemble the BUG module helpers. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Diffstat (limited to 'arch/sh/kernel/module.c')
-rw-r--r--arch/sh/kernel/module.c35
1 files changed, 5 insertions, 30 deletions
diff --git a/arch/sh/kernel/module.c b/arch/sh/kernel/module.c
index d297a148d16c..43adddfe4c04 100644
--- a/arch/sh/kernel/module.c
+++ b/arch/sh/kernel/module.c
@@ -146,41 +146,16 @@ int module_finalize(const Elf_Ehdr *hdr,
const Elf_Shdr *sechdrs,
struct module *me)
{
-#ifdef CONFIG_DWARF_UNWINDER
- unsigned int i, err;
- unsigned long start, end;
- char *secstrings = (void *)hdr + sechdrs[hdr->e_shstrndx].sh_offset;
-
- start = end = 0;
-
- for (i = 1; i < hdr->e_shnum; i++) {
- /* Alloc bit cleared means "ignore it." */
- if ((sechdrs[i].sh_flags & SHF_ALLOC)
- && !strcmp(secstrings+sechdrs[i].sh_name, ".eh_frame")) {
- start = sechdrs[i].sh_addr;
- end = start + sechdrs[i].sh_size;
- break;
- }
- }
+ int ret = 0;
- /* Did we find the .eh_frame section? */
- if (i != hdr->e_shnum) {
- err = dwarf_parse_section((char *)start, (char *)end, me);
- if (err)
- printk(KERN_WARNING "%s: failed to parse DWARF info\n",
- me->name);
- }
-
-#endif /* CONFIG_DWARF_UNWINDER */
+ ret |= module_dwarf_finalize(hdr, sechdrs, me);
+ ret |= module_bug_finalize(hdr, sechdrs, me);
- return module_bug_finalize(hdr, sechdrs, me);
+ return ret;
}
void module_arch_cleanup(struct module *mod)
{
module_bug_cleanup(mod);
-
-#ifdef CONFIG_DWARF_UNWINDER
- dwarf_module_unload(mod);
-#endif /* CONFIG_DWARF_UNWINDER */
+ module_dwarf_cleanup(mod);
}