提交 d559d4a2 编写于 作者: I Ivan Kokshaysky 提交者: Linus Torvalds

alpha: fix compile failures with gcc-4.3 (bug #10438)

Vast majority of these build failures are gcc-4.3 warnings
about static functions and objects being referenced from
non-static (read: "extern inline") functions, in conjunction
with our -Werror.

We cannot just convert "extern inline" to "static inline",
as people keep suggesting all the time, because "extern inline"
logic is crucial for generic kernel build.
So
- just make sure that all callees of critical "extern inline"
  functions are also "extern inline";
- use "static inline", wherever it's possible.

traps.c: work around gcc-4.3 being too smart about array
bounds-checking.

TODO: add "gnu_inline" attribute to all our "extern inline"
functions to ensure desired behaviour with future compilers.
Signed-off-by: NIvan Kokshaysky <ink@jurassic.park.msu.ru>
Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
上级 ede42692
...@@ -74,6 +74,8 @@ ...@@ -74,6 +74,8 @@
# define DBG(args) # define DBG(args)
#endif #endif
DEFINE_SPINLOCK(t2_hae_lock);
static volatile unsigned int t2_mcheck_any_expected; static volatile unsigned int t2_mcheck_any_expected;
static volatile unsigned int t2_mcheck_last_taken; static volatile unsigned int t2_mcheck_last_taken;
......
...@@ -447,7 +447,7 @@ struct unaligned_stat { ...@@ -447,7 +447,7 @@ struct unaligned_stat {
/* Macro for exception fixup code to access integer registers. */ /* Macro for exception fixup code to access integer registers. */
#define una_reg(r) (regs->regs[(r) >= 16 && (r) <= 18 ? (r)+19 : (r)]) #define una_reg(r) (_regs[(r) >= 16 && (r) <= 18 ? (r)+19 : (r)])
asmlinkage void asmlinkage void
...@@ -456,6 +456,7 @@ do_entUna(void * va, unsigned long opcode, unsigned long reg, ...@@ -456,6 +456,7 @@ do_entUna(void * va, unsigned long opcode, unsigned long reg,
{ {
long error, tmp1, tmp2, tmp3, tmp4; long error, tmp1, tmp2, tmp3, tmp4;
unsigned long pc = regs->pc - 4; unsigned long pc = regs->pc - 4;
unsigned long *_regs = regs->regs;
const struct exception_table_entry *fixup; const struct exception_table_entry *fixup;
unaligned[0].count++; unaligned[0].count++;
......
...@@ -261,7 +261,7 @@ struct el_MCPCIA_uncorrected_frame_mcheck { ...@@ -261,7 +261,7 @@ struct el_MCPCIA_uncorrected_frame_mcheck {
} }
#endif #endif
static inline int __mcpcia_is_mmio(unsigned long addr) extern inline int __mcpcia_is_mmio(unsigned long addr)
{ {
return (addr & 0x80000000UL) == 0; return (addr & 0x80000000UL) == 0;
} }
......
...@@ -356,13 +356,13 @@ struct el_t2_frame_corrected { ...@@ -356,13 +356,13 @@ struct el_t2_frame_corrected {
#define vip volatile int * #define vip volatile int *
#define vuip volatile unsigned int * #define vuip volatile unsigned int *
static inline u8 t2_inb(unsigned long addr) extern inline u8 t2_inb(unsigned long addr)
{ {
long result = *(vip) ((addr << 5) + T2_IO + 0x00); long result = *(vip) ((addr << 5) + T2_IO + 0x00);
return __kernel_extbl(result, addr & 3); return __kernel_extbl(result, addr & 3);
} }
static inline void t2_outb(u8 b, unsigned long addr) extern inline void t2_outb(u8 b, unsigned long addr)
{ {
unsigned long w; unsigned long w;
...@@ -371,13 +371,13 @@ static inline void t2_outb(u8 b, unsigned long addr) ...@@ -371,13 +371,13 @@ static inline void t2_outb(u8 b, unsigned long addr)
mb(); mb();
} }
static inline u16 t2_inw(unsigned long addr) extern inline u16 t2_inw(unsigned long addr)
{ {
long result = *(vip) ((addr << 5) + T2_IO + 0x08); long result = *(vip) ((addr << 5) + T2_IO + 0x08);
return __kernel_extwl(result, addr & 3); return __kernel_extwl(result, addr & 3);
} }
static inline void t2_outw(u16 b, unsigned long addr) extern inline void t2_outw(u16 b, unsigned long addr)
{ {
unsigned long w; unsigned long w;
...@@ -386,12 +386,12 @@ static inline void t2_outw(u16 b, unsigned long addr) ...@@ -386,12 +386,12 @@ static inline void t2_outw(u16 b, unsigned long addr)
mb(); mb();
} }
static inline u32 t2_inl(unsigned long addr) extern inline u32 t2_inl(unsigned long addr)
{ {
return *(vuip) ((addr << 5) + T2_IO + 0x18); return *(vuip) ((addr << 5) + T2_IO + 0x18);
} }
static inline void t2_outl(u32 b, unsigned long addr) extern inline void t2_outl(u32 b, unsigned long addr)
{ {
*(vuip) ((addr << 5) + T2_IO + 0x18) = b; *(vuip) ((addr << 5) + T2_IO + 0x18) = b;
mb(); mb();
...@@ -435,7 +435,7 @@ static inline void t2_outl(u32 b, unsigned long addr) ...@@ -435,7 +435,7 @@ static inline void t2_outl(u32 b, unsigned long addr)
set_hae(msb); \ set_hae(msb); \
} }
static DEFINE_SPINLOCK(t2_hae_lock); extern spinlock_t t2_hae_lock;
/* /*
* NOTE: take T2_DENSE_MEM off in each readX/writeX routine, since * NOTE: take T2_DENSE_MEM off in each readX/writeX routine, since
......
...@@ -35,7 +35,7 @@ ...@@ -35,7 +35,7 @@
* register not being up-to-date with respect to the hardware * register not being up-to-date with respect to the hardware
* value. * value.
*/ */
static inline void __set_hae(unsigned long new_hae) extern inline void __set_hae(unsigned long new_hae)
{ {
unsigned long flags; unsigned long flags;
local_irq_save(flags); local_irq_save(flags);
...@@ -49,7 +49,7 @@ static inline void __set_hae(unsigned long new_hae) ...@@ -49,7 +49,7 @@ static inline void __set_hae(unsigned long new_hae)
local_irq_restore(flags); local_irq_restore(flags);
} }
static inline void set_hae(unsigned long new_hae) extern inline void set_hae(unsigned long new_hae)
{ {
if (new_hae != alpha_mv.hae_cache) if (new_hae != alpha_mv.hae_cache)
__set_hae(new_hae); __set_hae(new_hae);
...@@ -176,7 +176,7 @@ REMAP2(u64, writeq, volatile) ...@@ -176,7 +176,7 @@ REMAP2(u64, writeq, volatile)
#undef REMAP1 #undef REMAP1
#undef REMAP2 #undef REMAP2
static inline void __iomem *generic_ioportmap(unsigned long a) extern inline void __iomem *generic_ioportmap(unsigned long a)
{ {
return alpha_mv.mv_ioportmap(a); return alpha_mv.mv_ioportmap(a);
} }
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
#endif #endif
extern inline unsigned long static inline unsigned long
__reload_thread(struct pcb_struct *pcb) __reload_thread(struct pcb_struct *pcb)
{ {
register unsigned long a0 __asm__("$16"); register unsigned long a0 __asm__("$16");
...@@ -114,7 +114,7 @@ extern unsigned long last_asn; ...@@ -114,7 +114,7 @@ extern unsigned long last_asn;
#define __MMU_EXTERN_INLINE #define __MMU_EXTERN_INLINE
#endif #endif
static inline unsigned long extern inline unsigned long
__get_new_mm_context(struct mm_struct *mm, long cpu) __get_new_mm_context(struct mm_struct *mm, long cpu)
{ {
unsigned long asn = cpu_last_asn(cpu); unsigned long asn = cpu_last_asn(cpu);
...@@ -226,7 +226,7 @@ ev4_activate_mm(struct mm_struct *prev_mm, struct mm_struct *next_mm) ...@@ -226,7 +226,7 @@ ev4_activate_mm(struct mm_struct *prev_mm, struct mm_struct *next_mm)
# endif # endif
#endif #endif
extern inline int static inline int
init_new_context(struct task_struct *tsk, struct mm_struct *mm) init_new_context(struct task_struct *tsk, struct mm_struct *mm)
{ {
int i; int i;
......
...@@ -184,7 +184,7 @@ enum amask_enum { ...@@ -184,7 +184,7 @@ enum amask_enum {
__amask; }) __amask; })
#define __CALL_PAL_R0(NAME, TYPE) \ #define __CALL_PAL_R0(NAME, TYPE) \
static inline TYPE NAME(void) \ extern inline TYPE NAME(void) \
{ \ { \
register TYPE __r0 __asm__("$0"); \ register TYPE __r0 __asm__("$0"); \
__asm__ __volatile__( \ __asm__ __volatile__( \
...@@ -196,7 +196,7 @@ static inline TYPE NAME(void) \ ...@@ -196,7 +196,7 @@ static inline TYPE NAME(void) \
} }
#define __CALL_PAL_W1(NAME, TYPE0) \ #define __CALL_PAL_W1(NAME, TYPE0) \
static inline void NAME(TYPE0 arg0) \ extern inline void NAME(TYPE0 arg0) \
{ \ { \
register TYPE0 __r16 __asm__("$16") = arg0; \ register TYPE0 __r16 __asm__("$16") = arg0; \
__asm__ __volatile__( \ __asm__ __volatile__( \
...@@ -207,7 +207,7 @@ static inline void NAME(TYPE0 arg0) \ ...@@ -207,7 +207,7 @@ static inline void NAME(TYPE0 arg0) \
} }
#define __CALL_PAL_W2(NAME, TYPE0, TYPE1) \ #define __CALL_PAL_W2(NAME, TYPE0, TYPE1) \
static inline void NAME(TYPE0 arg0, TYPE1 arg1) \ extern inline void NAME(TYPE0 arg0, TYPE1 arg1) \
{ \ { \
register TYPE0 __r16 __asm__("$16") = arg0; \ register TYPE0 __r16 __asm__("$16") = arg0; \
register TYPE1 __r17 __asm__("$17") = arg1; \ register TYPE1 __r17 __asm__("$17") = arg1; \
...@@ -219,7 +219,7 @@ static inline void NAME(TYPE0 arg0, TYPE1 arg1) \ ...@@ -219,7 +219,7 @@ static inline void NAME(TYPE0 arg0, TYPE1 arg1) \
} }
#define __CALL_PAL_RW1(NAME, RTYPE, TYPE0) \ #define __CALL_PAL_RW1(NAME, RTYPE, TYPE0) \
static inline RTYPE NAME(TYPE0 arg0) \ extern inline RTYPE NAME(TYPE0 arg0) \
{ \ { \
register RTYPE __r0 __asm__("$0"); \ register RTYPE __r0 __asm__("$0"); \
register TYPE0 __r16 __asm__("$16") = arg0; \ register TYPE0 __r16 __asm__("$16") = arg0; \
...@@ -232,7 +232,7 @@ static inline RTYPE NAME(TYPE0 arg0) \ ...@@ -232,7 +232,7 @@ static inline RTYPE NAME(TYPE0 arg0) \
} }
#define __CALL_PAL_RW2(NAME, RTYPE, TYPE0, TYPE1) \ #define __CALL_PAL_RW2(NAME, RTYPE, TYPE0, TYPE1) \
static inline RTYPE NAME(TYPE0 arg0, TYPE1 arg1) \ extern inline RTYPE NAME(TYPE0 arg0, TYPE1 arg1) \
{ \ { \
register RTYPE __r0 __asm__("$0"); \ register RTYPE __r0 __asm__("$0"); \
register TYPE0 __r16 __asm__("$16") = arg0; \ register TYPE0 __r16 __asm__("$16") = arg0; \
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
#define VT_BUF_HAVE_MEMSETW #define VT_BUF_HAVE_MEMSETW
#define VT_BUF_HAVE_MEMCPYW #define VT_BUF_HAVE_MEMCPYW
extern inline void scr_writew(u16 val, volatile u16 *addr) static inline void scr_writew(u16 val, volatile u16 *addr)
{ {
if (__is_ioaddr(addr)) if (__is_ioaddr(addr))
__raw_writew(val, (volatile u16 __iomem *) addr); __raw_writew(val, (volatile u16 __iomem *) addr);
...@@ -21,7 +21,7 @@ extern inline void scr_writew(u16 val, volatile u16 *addr) ...@@ -21,7 +21,7 @@ extern inline void scr_writew(u16 val, volatile u16 *addr)
*addr = val; *addr = val;
} }
extern inline u16 scr_readw(volatile const u16 *addr) static inline u16 scr_readw(volatile const u16 *addr)
{ {
if (__is_ioaddr(addr)) if (__is_ioaddr(addr))
return __raw_readw((volatile const u16 __iomem *) addr); return __raw_readw((volatile const u16 __iomem *) addr);
...@@ -29,7 +29,7 @@ extern inline u16 scr_readw(volatile const u16 *addr) ...@@ -29,7 +29,7 @@ extern inline u16 scr_readw(volatile const u16 *addr)
return *addr; return *addr;
} }
extern inline void scr_memsetw(u16 *s, u16 c, unsigned int count) static inline void scr_memsetw(u16 *s, u16 c, unsigned int count)
{ {
if (__is_ioaddr(s)) if (__is_ioaddr(s))
memsetw_io((u16 __iomem *) s, c, count); memsetw_io((u16 __iomem *) s, c, count);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册