diff options
author | Jonas Gorski <jonas.gorski@gmail.com> | 2019-10-22 15:11:00 -0400 |
---|---|---|
committer | Paul Burton <paulburton@kernel.org> | 2019-10-24 00:07:28 -0400 |
commit | e4f5cb1a9b27c0f94ef4f5a0178a3fde2d3d0e9e (patch) | |
tree | 34ae3549f536d5146d32ec928ad352cec6abf09c | |
parent | 8a1bef4193e81c8afae4d2f107f1c09c8ce89470 (diff) |
MIPS: bmips: mark exception vectors as char arrays
The vectors span more than one byte, so mark them as arrays.
Fixes the following build error when building when using GCC 8.3:
In file included from ./include/linux/string.h:19,
from ./include/linux/bitmap.h:9,
from ./include/linux/cpumask.h:12,
from ./arch/mips/include/asm/processor.h:15,
from ./arch/mips/include/asm/thread_info.h:16,
from ./include/linux/thread_info.h:38,
from ./include/asm-generic/preempt.h:5,
from ./arch/mips/include/generated/asm/preempt.h:1,
from ./include/linux/preempt.h:81,
from ./include/linux/spinlock.h:51,
from ./include/linux/mmzone.h:8,
from ./include/linux/bootmem.h:8,
from arch/mips/bcm63xx/prom.c:10:
arch/mips/bcm63xx/prom.c: In function 'prom_init':
./arch/mips/include/asm/string.h:162:11: error: '__builtin_memcpy' forming offset [2, 32] is out of the bounds [0, 1] of object 'bmips_smp_movevec' with type 'char' [-Werror=array-bounds]
__ret = __builtin_memcpy((dst), (src), __len); \
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
arch/mips/bcm63xx/prom.c:97:3: note: in expansion of macro 'memcpy'
memcpy((void *)0xa0000200, &bmips_smp_movevec, 0x20);
^~~~~~
In file included from arch/mips/bcm63xx/prom.c:14:
./arch/mips/include/asm/bmips.h:80:13: note: 'bmips_smp_movevec' declared here
extern char bmips_smp_movevec;
Fixes: 18a1eef92dcd ("MIPS: BMIPS: Introduce bmips.h")
Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: Paul Burton <paulburton@kernel.org>
Cc: linux-mips@vger.kernel.org
Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: James Hogan <jhogan@kernel.org>
-rw-r--r-- | arch/mips/bcm63xx/prom.c | 2 | ||||
-rw-r--r-- | arch/mips/include/asm/bmips.h | 10 | ||||
-rw-r--r-- | arch/mips/kernel/smp-bmips.c | 8 |
3 files changed, 10 insertions, 10 deletions
diff --git a/arch/mips/bcm63xx/prom.c b/arch/mips/bcm63xx/prom.c index 77a836e661c9..df69eaa453a1 100644 --- a/arch/mips/bcm63xx/prom.c +++ b/arch/mips/bcm63xx/prom.c | |||
@@ -84,7 +84,7 @@ void __init prom_init(void) | |||
84 | * Here we will start up CPU1 in the background and ask it to | 84 | * Here we will start up CPU1 in the background and ask it to |
85 | * reconfigure itself then go back to sleep. | 85 | * reconfigure itself then go back to sleep. |
86 | */ | 86 | */ |
87 | memcpy((void *)0xa0000200, &bmips_smp_movevec, 0x20); | 87 | memcpy((void *)0xa0000200, bmips_smp_movevec, 0x20); |
88 | __sync(); | 88 | __sync(); |
89 | set_c0_cause(C_SW0); | 89 | set_c0_cause(C_SW0); |
90 | cpumask_set_cpu(1, &bmips_booted_mask); | 90 | cpumask_set_cpu(1, &bmips_booted_mask); |
diff --git a/arch/mips/include/asm/bmips.h b/arch/mips/include/asm/bmips.h index bf6a8afd7ad2..581a6a3c66e4 100644 --- a/arch/mips/include/asm/bmips.h +++ b/arch/mips/include/asm/bmips.h | |||
@@ -75,11 +75,11 @@ static inline int register_bmips_smp_ops(void) | |||
75 | #endif | 75 | #endif |
76 | } | 76 | } |
77 | 77 | ||
78 | extern char bmips_reset_nmi_vec; | 78 | extern char bmips_reset_nmi_vec[]; |
79 | extern char bmips_reset_nmi_vec_end; | 79 | extern char bmips_reset_nmi_vec_end[]; |
80 | extern char bmips_smp_movevec; | 80 | extern char bmips_smp_movevec[]; |
81 | extern char bmips_smp_int_vec; | 81 | extern char bmips_smp_int_vec[]; |
82 | extern char bmips_smp_int_vec_end; | 82 | extern char bmips_smp_int_vec_end[]; |
83 | 83 | ||
84 | extern int bmips_smp_enabled; | 84 | extern int bmips_smp_enabled; |
85 | extern int bmips_cpu_offset; | 85 | extern int bmips_cpu_offset; |
diff --git a/arch/mips/kernel/smp-bmips.c b/arch/mips/kernel/smp-bmips.c index 76fae9b79f13..712c15de6ab9 100644 --- a/arch/mips/kernel/smp-bmips.c +++ b/arch/mips/kernel/smp-bmips.c | |||
@@ -464,10 +464,10 @@ static void bmips_wr_vec(unsigned long dst, char *start, char *end) | |||
464 | 464 | ||
465 | static inline void bmips_nmi_handler_setup(void) | 465 | static inline void bmips_nmi_handler_setup(void) |
466 | { | 466 | { |
467 | bmips_wr_vec(BMIPS_NMI_RESET_VEC, &bmips_reset_nmi_vec, | 467 | bmips_wr_vec(BMIPS_NMI_RESET_VEC, bmips_reset_nmi_vec, |
468 | &bmips_reset_nmi_vec_end); | 468 | bmips_reset_nmi_vec_end); |
469 | bmips_wr_vec(BMIPS_WARM_RESTART_VEC, &bmips_smp_int_vec, | 469 | bmips_wr_vec(BMIPS_WARM_RESTART_VEC, bmips_smp_int_vec, |
470 | &bmips_smp_int_vec_end); | 470 | bmips_smp_int_vec_end); |
471 | } | 471 | } |
472 | 472 | ||
473 | struct reset_vec_info { | 473 | struct reset_vec_info { |