提交 8d662c8d 编写于 作者: D David Daney 提交者: Ralf Baechle

MIPS: Use WARN() in uasm for better diagnostics.

On the off chance that uasm ever warns about overflow, there is no way
to know what the offending instruction is.

Change the printks to WARNs, so we can get a nice stack trace.  It has
the added benefit of being much more noticeable than the short single
line warning message, so is less likely to be ignored.
Signed-off-by: NDavid Daney <ddaney@caviumnetworks.com>
To: linux-mips@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/1905/Signed-off-by: NRalf Baechle <ralf@linux-mips.org>
上级 2c8c53e2
...@@ -156,91 +156,83 @@ static struct insn insn_table[] __uasminitdata = { ...@@ -156,91 +156,83 @@ static struct insn insn_table[] __uasminitdata = {
static inline __uasminit u32 build_rs(u32 arg) static inline __uasminit u32 build_rs(u32 arg)
{ {
if (arg & ~RS_MASK) WARN(arg & ~RS_MASK, KERN_WARNING "Micro-assembler field overflow\n");
printk(KERN_WARNING "Micro-assembler field overflow\n");
return (arg & RS_MASK) << RS_SH; return (arg & RS_MASK) << RS_SH;
} }
static inline __uasminit u32 build_rt(u32 arg) static inline __uasminit u32 build_rt(u32 arg)
{ {
if (arg & ~RT_MASK) WARN(arg & ~RT_MASK, KERN_WARNING "Micro-assembler field overflow\n");
printk(KERN_WARNING "Micro-assembler field overflow\n");
return (arg & RT_MASK) << RT_SH; return (arg & RT_MASK) << RT_SH;
} }
static inline __uasminit u32 build_rd(u32 arg) static inline __uasminit u32 build_rd(u32 arg)
{ {
if (arg & ~RD_MASK) WARN(arg & ~RD_MASK, KERN_WARNING "Micro-assembler field overflow\n");
printk(KERN_WARNING "Micro-assembler field overflow\n");
return (arg & RD_MASK) << RD_SH; return (arg & RD_MASK) << RD_SH;
} }
static inline __uasminit u32 build_re(u32 arg) static inline __uasminit u32 build_re(u32 arg)
{ {
if (arg & ~RE_MASK) WARN(arg & ~RE_MASK, KERN_WARNING "Micro-assembler field overflow\n");
printk(KERN_WARNING "Micro-assembler field overflow\n");
return (arg & RE_MASK) << RE_SH; return (arg & RE_MASK) << RE_SH;
} }
static inline __uasminit u32 build_simm(s32 arg) static inline __uasminit u32 build_simm(s32 arg)
{ {
if (arg > 0x7fff || arg < -0x8000) WARN(arg > 0x7fff || arg < -0x8000,
printk(KERN_WARNING "Micro-assembler field overflow\n"); KERN_WARNING "Micro-assembler field overflow\n");
return arg & 0xffff; return arg & 0xffff;
} }
static inline __uasminit u32 build_uimm(u32 arg) static inline __uasminit u32 build_uimm(u32 arg)
{ {
if (arg & ~IMM_MASK) WARN(arg & ~IMM_MASK, KERN_WARNING "Micro-assembler field overflow\n");
printk(KERN_WARNING "Micro-assembler field overflow\n");
return arg & IMM_MASK; return arg & IMM_MASK;
} }
static inline __uasminit u32 build_bimm(s32 arg) static inline __uasminit u32 build_bimm(s32 arg)
{ {
if (arg > 0x1ffff || arg < -0x20000) WARN(arg > 0x1ffff || arg < -0x20000,
printk(KERN_WARNING "Micro-assembler field overflow\n"); KERN_WARNING "Micro-assembler field overflow\n");
if (arg & 0x3) WARN(arg & 0x3, KERN_WARNING "Invalid micro-assembler branch target\n");
printk(KERN_WARNING "Invalid micro-assembler branch target\n");
return ((arg < 0) ? (1 << 15) : 0) | ((arg >> 2) & 0x7fff); return ((arg < 0) ? (1 << 15) : 0) | ((arg >> 2) & 0x7fff);
} }
static inline __uasminit u32 build_jimm(u32 arg) static inline __uasminit u32 build_jimm(u32 arg)
{ {
if (arg & ~((JIMM_MASK) << 2)) WARN(arg & ~(JIMM_MASK << 2),
printk(KERN_WARNING "Micro-assembler field overflow\n"); KERN_WARNING "Micro-assembler field overflow\n");
return (arg >> 2) & JIMM_MASK; return (arg >> 2) & JIMM_MASK;
} }
static inline __uasminit u32 build_scimm(u32 arg) static inline __uasminit u32 build_scimm(u32 arg)
{ {
if (arg & ~SCIMM_MASK) WARN(arg & ~SCIMM_MASK,
printk(KERN_WARNING "Micro-assembler field overflow\n"); KERN_WARNING "Micro-assembler field overflow\n");
return (arg & SCIMM_MASK) << SCIMM_SH; return (arg & SCIMM_MASK) << SCIMM_SH;
} }
static inline __uasminit u32 build_func(u32 arg) static inline __uasminit u32 build_func(u32 arg)
{ {
if (arg & ~FUNC_MASK) WARN(arg & ~FUNC_MASK, KERN_WARNING "Micro-assembler field overflow\n");
printk(KERN_WARNING "Micro-assembler field overflow\n");
return arg & FUNC_MASK; return arg & FUNC_MASK;
} }
static inline __uasminit u32 build_set(u32 arg) static inline __uasminit u32 build_set(u32 arg)
{ {
if (arg & ~SET_MASK) WARN(arg & ~SET_MASK, KERN_WARNING "Micro-assembler field overflow\n");
printk(KERN_WARNING "Micro-assembler field overflow\n");
return arg & SET_MASK; return arg & SET_MASK;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册