diff options
Diffstat (limited to 'arch')
-rw-r--r-- | arch/sh/Makefile | 16 | ||||
-rw-r--r-- | arch/sh/kernel/sh_ksyms_32.c | 11 |
2 files changed, 22 insertions, 5 deletions
diff --git a/arch/sh/Makefile b/arch/sh/Makefile index 1f409bf81809..3b2d8e232240 100644 --- a/arch/sh/Makefile +++ b/arch/sh/Makefile | |||
@@ -38,6 +38,22 @@ cflags-$(CONFIG_CPU_SH4A) += $(call cc-option,-m4a,) \ | |||
38 | $(call cc-option,-m4a-nofpu,) | 38 | $(call cc-option,-m4a-nofpu,) |
39 | cflags-$(CONFIG_CPU_SH5) := $(call cc-option,-m5-32media-nofpu,) | 39 | cflags-$(CONFIG_CPU_SH5) := $(call cc-option,-m5-32media-nofpu,) |
40 | 40 | ||
41 | ifeq ($(cflags-y),) | ||
42 | # | ||
43 | # In the case where we are stuck with a compiler that has been uselessly | ||
44 | # restricted to a particular ISA, a favourite default of newer GCCs when | ||
45 | # extensive multilib targets are not provided, ensure we get the best fit | ||
46 | # regarding FP generation. This is necessary to avoid references to FP | ||
47 | # variants in libgcc where integer variants exist, which otherwise result | ||
48 | # in link errors. This is intentionally stupid (albeit many orders of | ||
49 | # magnitude less than GCC's default behaviour), as anything with a large | ||
50 | # number of multilib targets better have been built correctly for | ||
51 | # the target in mind. | ||
52 | # | ||
53 | cflags-y += $(shell $(CC) $(KBUILD_CFLAGS) -print-multi-lib | \ | ||
54 | grep nofpu | sed q | sed -e 's/^/-/;s/;.*$$//') | ||
55 | endif | ||
56 | |||
41 | cflags-$(CONFIG_CPU_BIG_ENDIAN) += -mb | 57 | cflags-$(CONFIG_CPU_BIG_ENDIAN) += -mb |
42 | cflags-$(CONFIG_CPU_LITTLE_ENDIAN) += -ml | 58 | cflags-$(CONFIG_CPU_LITTLE_ENDIAN) += -ml |
43 | 59 | ||
diff --git a/arch/sh/kernel/sh_ksyms_32.c b/arch/sh/kernel/sh_ksyms_32.c index d366a7443720..d998f4c795be 100644 --- a/arch/sh/kernel/sh_ksyms_32.c +++ b/arch/sh/kernel/sh_ksyms_32.c | |||
@@ -50,7 +50,10 @@ EXPORT_SYMBOL(__udelay); | |||
50 | EXPORT_SYMBOL(__ndelay); | 50 | EXPORT_SYMBOL(__ndelay); |
51 | EXPORT_SYMBOL(__const_udelay); | 51 | EXPORT_SYMBOL(__const_udelay); |
52 | 52 | ||
53 | #define DECLARE_EXPORT(name) extern void name(void);EXPORT_SYMBOL(name) | 53 | #define DECLARE_EXPORT(name) \ |
54 | extern void name(void);EXPORT_SYMBOL(name) | ||
55 | #define MAYBE_DECLARE_EXPORT(name) \ | ||
56 | extern void name(void) __weak;EXPORT_SYMBOL(name) | ||
54 | 57 | ||
55 | /* These symbols are generated by the compiler itself */ | 58 | /* These symbols are generated by the compiler itself */ |
56 | DECLARE_EXPORT(__udivsi3); | 59 | DECLARE_EXPORT(__udivsi3); |
@@ -109,10 +112,8 @@ DECLARE_EXPORT(__movmemSI12_i4); | |||
109 | * compiler which include backported patches. | 112 | * compiler which include backported patches. |
110 | */ | 113 | */ |
111 | DECLARE_EXPORT(__udiv_qrnnd_16); | 114 | DECLARE_EXPORT(__udiv_qrnnd_16); |
112 | #if !defined(CONFIG_CPU_SH2) | 115 | MAYBE_DECLARE_EXPORT(__sdivsi3_i4i); |
113 | DECLARE_EXPORT(__sdivsi3_i4i); | 116 | MAYBE_DECLARE_EXPORT(__udivsi3_i4i); |
114 | DECLARE_EXPORT(__udivsi3_i4i); | ||
115 | #endif | ||
116 | #endif | 117 | #endif |
117 | #else /* GCC 3.x */ | 118 | #else /* GCC 3.x */ |
118 | DECLARE_EXPORT(__movstr_i4_even); | 119 | DECLARE_EXPORT(__movstr_i4_even); |