diff options
author | Vineet Gupta <vgupta@synopsys.com> | 2017-01-16 13:48:09 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2017-01-26 02:24:37 -0500 |
commit | bb82fb48df8cab8f902052ce03f6d51b9b8f1bcd (patch) | |
tree | a9db5ddc8228cdefdca84db622184a4b45ba0b53 | |
parent | 3c4d83a1a41efdf2c191d0072e6545e6bf8ecc94 (diff) |
ARC: module: Fix !CONFIG_ARC_DW2_UNWIND builds
commit eb1357d942e5d96de6b4c20a8ffa55acf96233a2 upstream.
commit d65283f7b695b5 added mod->arch.secstr under
CONFIG_ARC_DW2_UNWIND, but used it unconditionally which broke builds
when the option was disabled. Fix that by adjusting the #ifdef guard.
And while at it add a missing guard (for unwinder) in module.c as well
Reported-by: Waldemar Brodkorb <wbx@openadk.org>
Fixes: d65283f7b695b5 ("ARC: module: elide loop to save reference to .eh_frame")
Tested-by: Anton Kolesov <akolesov@synopsys.com>
Reviewed-by: Alexey Brodkin <abrodkin@synopsys.com>
[abrodkin: provided fixlet to Kconfig per failure in allnoconfig build]
Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r-- | arch/arc/Kconfig | 2 | ||||
-rw-r--r-- | arch/arc/include/asm/module.h | 4 | ||||
-rw-r--r-- | arch/arc/kernel/module.c | 4 |
3 files changed, 6 insertions, 4 deletions
diff --git a/arch/arc/Kconfig b/arch/arc/Kconfig index bd204bfa29ed..249e10190d20 100644 --- a/arch/arc/Kconfig +++ b/arch/arc/Kconfig | |||
@@ -28,7 +28,7 @@ config ARC | |||
28 | select HAVE_KPROBES | 28 | select HAVE_KPROBES |
29 | select HAVE_KRETPROBES | 29 | select HAVE_KRETPROBES |
30 | select HAVE_MEMBLOCK | 30 | select HAVE_MEMBLOCK |
31 | select HAVE_MOD_ARCH_SPECIFIC if ARC_DW2_UNWIND | 31 | select HAVE_MOD_ARCH_SPECIFIC |
32 | select HAVE_OPROFILE | 32 | select HAVE_OPROFILE |
33 | select HAVE_PERF_EVENTS | 33 | select HAVE_PERF_EVENTS |
34 | select HANDLE_DOMAIN_IRQ | 34 | select HANDLE_DOMAIN_IRQ |
diff --git a/arch/arc/include/asm/module.h b/arch/arc/include/asm/module.h index 6e91d8b339c3..567590ea8f6c 100644 --- a/arch/arc/include/asm/module.h +++ b/arch/arc/include/asm/module.h | |||
@@ -14,13 +14,13 @@ | |||
14 | 14 | ||
15 | #include <asm-generic/module.h> | 15 | #include <asm-generic/module.h> |
16 | 16 | ||
17 | #ifdef CONFIG_ARC_DW2_UNWIND | ||
18 | struct mod_arch_specific { | 17 | struct mod_arch_specific { |
18 | #ifdef CONFIG_ARC_DW2_UNWIND | ||
19 | void *unw_info; | 19 | void *unw_info; |
20 | int unw_sec_idx; | 20 | int unw_sec_idx; |
21 | #endif | ||
21 | const char *secstr; | 22 | const char *secstr; |
22 | }; | 23 | }; |
23 | #endif | ||
24 | 24 | ||
25 | #define MODULE_PROC_FAMILY "ARC700" | 25 | #define MODULE_PROC_FAMILY "ARC700" |
26 | 26 | ||
diff --git a/arch/arc/kernel/module.c b/arch/arc/kernel/module.c index 42e964db2967..3d99a6091332 100644 --- a/arch/arc/kernel/module.c +++ b/arch/arc/kernel/module.c | |||
@@ -32,8 +32,8 @@ int module_frob_arch_sections(Elf_Ehdr *hdr, Elf_Shdr *sechdrs, | |||
32 | #ifdef CONFIG_ARC_DW2_UNWIND | 32 | #ifdef CONFIG_ARC_DW2_UNWIND |
33 | mod->arch.unw_sec_idx = 0; | 33 | mod->arch.unw_sec_idx = 0; |
34 | mod->arch.unw_info = NULL; | 34 | mod->arch.unw_info = NULL; |
35 | mod->arch.secstr = secstr; | ||
36 | #endif | 35 | #endif |
36 | mod->arch.secstr = secstr; | ||
37 | return 0; | 37 | return 0; |
38 | } | 38 | } |
39 | 39 | ||
@@ -113,8 +113,10 @@ int apply_relocate_add(Elf32_Shdr *sechdrs, | |||
113 | 113 | ||
114 | } | 114 | } |
115 | 115 | ||
116 | #ifdef CONFIG_ARC_DW2_UNWIND | ||
116 | if (strcmp(module->arch.secstr+sechdrs[tgtsec].sh_name, ".eh_frame") == 0) | 117 | if (strcmp(module->arch.secstr+sechdrs[tgtsec].sh_name, ".eh_frame") == 0) |
117 | module->arch.unw_sec_idx = tgtsec; | 118 | module->arch.unw_sec_idx = tgtsec; |
119 | #endif | ||
118 | 120 | ||
119 | return 0; | 121 | return 0; |
120 | 122 | ||