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>
diff --git a/arch/sh/kernel/module.c b/arch/sh/kernel/module.c
index d297a14..43adddf 100644
--- a/arch/sh/kernel/module.c
+++ b/arch/sh/kernel/module.c
@@ -146,41 +146,16 @@
 		    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;
+	int ret = 0;
 
-	start = end = 0;
+	ret |= module_dwarf_finalize(hdr, sechdrs, me);
+	ret |= module_bug_finalize(hdr, sechdrs, me);
 
-	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;
-		}
-	}
-
-	/* 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 */
-
-	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);
 }