Skip to content

Commit e5e9e7f

Browse files
committed
parisc/unaligned: Enhance user-space visible output
Userspace is up to now limited to 32-bit, so it's sufficient to print only 32-bit values when showing pointer addresses. Signed-off-by: Helge Deller <deller@gmx.de>
1 parent 3029ce3 commit e5e9e7f

1 file changed

Lines changed: 10 additions & 26 deletions

File tree

arch/parisc/kernel/unaligned.c

Lines changed: 10 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,11 @@
33
* Unaligned memory access handler
44
*
55
* Copyright (C) 2001 Randolph Chung <tausq@debian.org>
6+
* Copyright (C) 2022 Helge Deller <deller@gmx.de>
67
* Significantly tweaked by LaMont Jones <lamont@debian.org>
78
*/
89

9-
#include <linux/jiffies.h>
10-
#include <linux/kernel.h>
11-
#include <linux/module.h>
1210
#include <linux/sched/signal.h>
13-
#include <linux/sched/debug.h>
1411
#include <linux/signal.h>
1512
#include <linux/ratelimit.h>
1613
#include <linux/uaccess.h>
@@ -25,11 +22,7 @@
2522
#define DPRINTF(fmt, args...)
2623
#endif
2724

28-
#ifdef CONFIG_64BIT
29-
#define RFMT "%016lx"
30-
#else
31-
#define RFMT "%08lx"
32-
#endif
25+
#define RFMT "%#08lx"
3326

3427
/* 1111 1100 0000 0000 0001 0011 1100 0000 */
3528
#define OPCODE1(a,b,c) ((a)<<26|(b)<<12|(c)<<6)
@@ -130,7 +123,7 @@ static int emulate_ldh(struct pt_regs *regs, int toreg)
130123
: "+r" (val), "+r" (ret), "=&r" (temp1)
131124
: "r" (saddr), "r" (regs->isr) );
132125

133-
DPRINTF("val = 0x" RFMT "\n", val);
126+
DPRINTF("val = " RFMT "\n", val);
134127

135128
if (toreg)
136129
regs->gr[toreg] = val;
@@ -162,7 +155,7 @@ static int emulate_ldw(struct pt_regs *regs, int toreg, int flop)
162155
: "+r" (val), "+r" (ret), "=&r" (temp1), "=&r" (temp2)
163156
: "r" (saddr), "r" (regs->isr) );
164157

165-
DPRINTF("val = 0x" RFMT "\n", val);
158+
DPRINTF("val = " RFMT "\n", val);
166159

167160
if (flop)
168161
((__u32*)(regs->fr))[toreg] = val;
@@ -240,7 +233,7 @@ static int emulate_sth(struct pt_regs *regs, int frreg)
240233
if (!frreg)
241234
val = 0;
242235

243-
DPRINTF("store r%d (0x" RFMT ") to " RFMT ":" RFMT " for 2 bytes\n", frreg,
236+
DPRINTF("store r%d (" RFMT ") to " RFMT ":" RFMT " for 2 bytes\n", frreg,
244237
val, regs->isr, regs->ior);
245238

246239
__asm__ __volatile__ (
@@ -269,7 +262,7 @@ static int emulate_stw(struct pt_regs *regs, int frreg, int flop)
269262
else
270263
val = 0;
271264

272-
DPRINTF("store r%d (0x" RFMT ") to " RFMT ":" RFMT " for 4 bytes\n", frreg,
265+
DPRINTF("store r%d (" RFMT ") to " RFMT ":" RFMT " for 4 bytes\n", frreg,
273266
val, regs->isr, regs->ior);
274267

275268

@@ -383,7 +376,6 @@ void handle_unaligned(struct pt_regs *regs)
383376
unsigned long newbase = R1(regs->iir)?regs->gr[R1(regs->iir)]:0;
384377
int modify = 0;
385378
int ret = ERR_NOTHANDLED;
386-
register int flop=0; /* true if this is a flop */
387379

388380
__inc_irq_stat(irq_unaligned_count);
389381

@@ -395,10 +387,10 @@ void handle_unaligned(struct pt_regs *regs)
395387

396388
if (!(current->thread.flags & PARISC_UAC_NOPRINT) &&
397389
__ratelimit(&ratelimit)) {
398-
char buf[256];
399-
sprintf(buf, "%s(%d): unaligned access to 0x" RFMT " at ip=0x" RFMT "\n",
400-
current->comm, task_pid_nr(current), regs->ior, regs->iaoq[0]);
401-
printk(KERN_WARNING "%s", buf);
390+
printk(KERN_WARNING "%s(%d): unaligned access to " RFMT
391+
" at ip " RFMT " (iir " RFMT ")\n",
392+
current->comm, task_pid_nr(current), regs->ior,
393+
regs->iaoq[0], regs->iir);
402394
#ifdef DEBUG_UNALIGNED
403395
show_regs(regs);
404396
#endif
@@ -510,27 +502,23 @@ void handle_unaligned(struct pt_regs *regs)
510502
case OPCODE_FLDWS:
511503
case OPCODE_FLDWXR:
512504
case OPCODE_FLDWSR:
513-
flop=1;
514505
ret = emulate_ldw(regs,FR3(regs->iir),1);
515506
break;
516507

517508
case OPCODE_FLDDX:
518509
case OPCODE_FLDDS:
519-
flop=1;
520510
ret = emulate_ldd(regs,R3(regs->iir),1);
521511
break;
522512

523513
case OPCODE_FSTWX:
524514
case OPCODE_FSTWS:
525515
case OPCODE_FSTWXR:
526516
case OPCODE_FSTWSR:
527-
flop=1;
528517
ret = emulate_stw(regs,FR3(regs->iir),1);
529518
break;
530519

531520
case OPCODE_FSTDX:
532521
case OPCODE_FSTDS:
533-
flop=1;
534522
ret = emulate_std(regs,R3(regs->iir),1);
535523
break;
536524

@@ -544,11 +532,9 @@ void handle_unaligned(struct pt_regs *regs)
544532
switch (regs->iir & OPCODE2_MASK)
545533
{
546534
case OPCODE_FLDD_L:
547-
flop=1;
548535
ret = emulate_ldd(regs,R2(regs->iir),1);
549536
break;
550537
case OPCODE_FSTD_L:
551-
flop=1;
552538
ret = emulate_std(regs, R2(regs->iir),1);
553539
break;
554540
#ifdef CONFIG_64BIT
@@ -563,15 +549,13 @@ void handle_unaligned(struct pt_regs *regs)
563549
switch (regs->iir & OPCODE3_MASK)
564550
{
565551
case OPCODE_FLDW_L:
566-
flop=1;
567552
ret = emulate_ldw(regs, R2(regs->iir), 1);
568553
break;
569554
case OPCODE_LDW_M:
570555
ret = emulate_ldw(regs, R2(regs->iir), 0);
571556
break;
572557

573558
case OPCODE_FSTW_L:
574-
flop=1;
575559
ret = emulate_stw(regs, R2(regs->iir),1);
576560
break;
577561
case OPCODE_STW_M:

0 commit comments

Comments
 (0)