]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
powerpc/xmon: Add __printf annotation to xmon_printf()
authorMathieu Malaterre <malat@debian.org>
Sun, 25 Mar 2018 09:06:47 +0000 (11:06 +0200)
committerMichael Ellerman <mpe@ellerman.id.au>
Fri, 25 May 2018 02:04:36 +0000 (12:04 +1000)
This allows the compiler to verify the format strings vs the types of
the arguments.

Update the other prototype declarations in asm/xmon.h.

Silence warnings (triggered at W=1) by adding relevant __printf
attribute. Move #define at bottom of the file to prevent conflict with
gcc attribute.

Solves the original warning:

  arch/powerpc/xmon/nonstdio.c:178:2: error: function might be
  possible candidate for ‘gnu_printf’ format attribute

In turn this uncovered many formatting errors in xmon.c, all fixed in
this patch.

Signed-off-by: Mathieu Malaterre <malat@debian.org>
[mpe: Always use px not p, fixup the 44x specific code, tweak change log]
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/include/asm/xmon.h
arch/powerpc/xmon/nonstdio.h
arch/powerpc/xmon/spu-dis.c
arch/powerpc/xmon/xmon.c

index eb42a0c6e1d9de62b986202af9dc869f9b1328fd..30ff69bd8f4369e65acb1e5c901fe366a1f7ecd0 100644 (file)
@@ -29,7 +29,7 @@ static inline void xmon_register_spus(struct list_head *list) { };
 extern int cpus_are_in_xmon(void);
 #endif
 
-extern void xmon_printf(const char *format, ...);
+extern __printf(1, 2) void xmon_printf(const char *format, ...);
 
 #endif /* __KERNEL __ */
 #endif /* __ASM_POWERPC_XMON_H */
index 2202ec61972c48865696b128921f2cffaa2239b6..e8deac6c84e29a2fb419442163dde74f5ae9fe93 100644 (file)
@@ -1,13 +1,13 @@
 /* SPDX-License-Identifier: GPL-2.0 */
 #define EOF    (-1)
 
-#define printf xmon_printf
-#define putchar        xmon_putchar
-
 extern void xmon_set_pagination_lpp(unsigned long lpp);
 extern void xmon_start_pagination(void);
 extern void xmon_end_pagination(void);
 extern int xmon_putchar(int c);
 extern void xmon_puts(const char *);
 extern char *xmon_gets(char *, int);
-extern void xmon_printf(const char *, ...);
+extern __printf(1, 2) void xmon_printf(const char *fmt, ...);
+
+#define printf xmon_printf
+#define putchar        xmon_putchar
index e5f89837c82e0edb39e77e39ccea793ca08a4736..4cbc7da88524a6d1d161464383e29ba34a5857ae 100644 (file)
@@ -102,7 +102,7 @@ print_insn_spu (unsigned long insn, unsigned long memaddr)
 
   if (index == 0)
     {
-      printf(".long 0x%x", insn);
+      printf(".long 0x%lx", insn);
     }
   else
     {
@@ -134,27 +134,27 @@ print_insn_spu (unsigned long insn, unsigned long memaddr)
          switch (arg)
            {
            case A_T:
-             printf("$%d",
+             printf("$%lu",
                                     DECODE_INSN_RT (insn));
              break;
            case A_A:
-             printf("$%d",
+             printf("$%lu",
                                     DECODE_INSN_RA (insn));
              break;
            case A_B:
-             printf("$%d",
+             printf("$%lu",
                                     DECODE_INSN_RB (insn));
              break;
            case A_C:
-             printf("$%d",
+             printf("$%lu",
                                     DECODE_INSN_RC (insn));
              break;
            case A_S:
-             printf("$sp%d",
+             printf("$sp%lu",
                                     DECODE_INSN_RA (insn));
              break;
            case A_H:
-             printf("$ch%d",
+             printf("$ch%lu",
                                     DECODE_INSN_RA (insn));
              break;
            case A_P:
@@ -162,11 +162,11 @@ print_insn_spu (unsigned long insn, unsigned long memaddr)
              printf("(");
              break;
            case A_U7A:
-             printf("%d",
+             printf("%lu",
                                     173 - DECODE_INSN_U8 (insn));
              break;
            case A_U7B:
-             printf("%d",
+             printf("%lu",
                                     155 - DECODE_INSN_U8 (insn));
              break;
            case A_S3:
index a3d597c8cfa22d0120760d479b45515495c38a63..152eb185bfcf069de1750bb99c09b08d84e94edc 100644 (file)
@@ -515,7 +515,7 @@ static int xmon_core(struct pt_regs *regs, int fromipi)
                get_output_lock();
                excprint(regs);
                if (bp) {
-                       printf("cpu 0x%x stopped at breakpoint 0x%lx (",
+                       printf("cpu 0x%x stopped at breakpoint 0x%tx (",
                               cpu, BP_NUM(bp));
                        xmon_print_symbol(regs->nip, " ", ")\n");
                }
@@ -622,7 +622,7 @@ static int xmon_core(struct pt_regs *regs, int fromipi)
                excprint(regs);
                bp = at_breakpoint(regs->nip);
                if (bp) {
-                       printf("Stopped at breakpoint %lx (", BP_NUM(bp));
+                       printf("Stopped at breakpoint %tx (", BP_NUM(bp));
                        xmon_print_symbol(regs->nip, " ", ")\n");
                }
                if (unrecoverable_excp(regs))
@@ -1171,7 +1171,7 @@ static int cpu_cmd(void)
        }
        /* try to switch to cpu specified */
        if (!cpumask_test_cpu(cpu, &cpus_in_xmon)) {
-               printf("cpu 0x%x isn't in xmon\n", cpu);
+               printf("cpu 0x%lx isn't in xmon\n", cpu);
                return 0;
        }
        xmon_taken = 0;
@@ -1185,7 +1185,7 @@ static int cpu_cmd(void)
                        /* take control back */
                        mb();
                        xmon_owner = smp_processor_id();
-                       printf("cpu 0x%x didn't take control\n", cpu);
+                       printf("cpu 0x%lx didn't take control\n", cpu);
                        return 0;
                }
                barrier();
@@ -1375,7 +1375,7 @@ bpt_cmds(void)
                        }
                }
 
-               printf("Cleared breakpoint %lx (", BP_NUM(bp));
+               printf("Cleared breakpoint %tx (", BP_NUM(bp));
                xmon_print_symbol(bp->address, " ", ")\n");
                bp->enabled = 0;
                break;
@@ -1402,7 +1402,7 @@ bpt_cmds(void)
                        for (bp = bpts; bp < &bpts[NBPTS]; ++bp) {
                                if (!bp->enabled)
                                        continue;
-                               printf("%2x %s   ", BP_NUM(bp),
+                               printf("%tx %s   ", BP_NUM(bp),
                                    (bp->enabled & BP_CIABR) ? "inst": "trap");
                                xmon_print_symbol(bp->address, "  ", "\n");
                        }
@@ -1619,11 +1619,11 @@ static void excprint(struct pt_regs *fp)
 #endif /* CONFIG_SMP */
 
        trap = TRAP(fp);
-       printf("Vector: %lx %s at [%lx]\n", fp->trap, getvecname(trap), fp);
+       printf("Vector: %lx %s at [%px]\n", fp->trap, getvecname(trap), fp);
        printf("    pc: ");
        xmon_print_symbol(fp->nip, ": ", "\n");
 
-       printf("    lr: ", fp->link);
+       printf("    lr: ");
        xmon_print_symbol(fp->link, ": ", "\n");
 
        printf("    sp: %lx\n", fp->gpr[1]);
@@ -1635,13 +1635,13 @@ static void excprint(struct pt_regs *fp)
                        printf(" dsisr: %lx\n", fp->dsisr);
        }
 
-       printf("  current = 0x%lx\n", current);
+       printf("  current = 0x%px\n", current);
 #ifdef CONFIG_PPC64
-       printf("  paca    = 0x%lx\t softe: %d\t irq_happened: 0x%02x\n",
+       printf("  paca    = 0x%px\t softe: %d\t irq_happened: 0x%02x\n",
               local_paca, local_paca->irq_soft_mask, local_paca->irq_happened);
 #endif
        if (current) {
-               printf("    pid   = %ld, comm = %s\n",
+               printf("    pid   = %d, comm = %s\n",
                       current->pid, current->comm);
        }
 
@@ -1677,16 +1677,16 @@ static void prregs(struct pt_regs *fp)
 #ifdef CONFIG_PPC64
        if (FULL_REGS(fp)) {
                for (n = 0; n < 16; ++n)
-                       printf("R%.2ld = "REG"   R%.2ld = "REG"\n",
+                       printf("R%.2d = "REG"   R%.2d = "REG"\n",
                               n, fp->gpr[n], n+16, fp->gpr[n+16]);
        } else {
                for (n = 0; n < 7; ++n)
-                       printf("R%.2ld = "REG"   R%.2ld = "REG"\n",
+                       printf("R%.2d = "REG"   R%.2d = "REG"\n",
                               n, fp->gpr[n], n+7, fp->gpr[n+7]);
        }
 #else
        for (n = 0; n < 32; ++n) {
-               printf("R%.2d = %.8x%s", n, fp->gpr[n],
+               printf("R%.2d = %.8lx%s", n, fp->gpr[n],
                       (n & 3) == 3? "\n": "   ");
                if (n == 12 && !FULL_REGS(fp)) {
                        printf("\n");
@@ -1790,9 +1790,9 @@ static void dump_206_sprs(void)
 
        /* Actually some of these pre-date 2.06, but whatevs */
 
-       printf("srr0   = %.16lx  srr1  = %.16lx dsisr  = %.8x\n",
+       printf("srr0   = %.16lx  srr1  = %.16lx dsisr  = %.8lx\n",
                mfspr(SPRN_SRR0), mfspr(SPRN_SRR1), mfspr(SPRN_DSISR));
-       printf("dscr   = %.16lx  ppr   = %.16lx pir    = %.8x\n",
+       printf("dscr   = %.16lx  ppr   = %.16lx pir    = %.8lx\n",
                mfspr(SPRN_DSCR), mfspr(SPRN_PPR), mfspr(SPRN_PIR));
        printf("amr    = %.16lx  uamor = %.16lx\n",
                mfspr(SPRN_AMR), mfspr(SPRN_UAMOR));
@@ -1800,11 +1800,11 @@ static void dump_206_sprs(void)
        if (!(mfmsr() & MSR_HV))
                return;
 
-       printf("sdr1   = %.16lx  hdar  = %.16lx hdsisr = %.8x\n",
+       printf("sdr1   = %.16lx  hdar  = %.16lx hdsisr = %.8lx\n",
                mfspr(SPRN_SDR1), mfspr(SPRN_HDAR), mfspr(SPRN_HDSISR));
        printf("hsrr0  = %.16lx hsrr1  = %.16lx hdec   = %.16lx\n",
                mfspr(SPRN_HSRR0), mfspr(SPRN_HSRR1), mfspr(SPRN_HDEC));
-       printf("lpcr   = %.16lx  pcr   = %.16lx lpidr  = %.8x\n",
+       printf("lpcr   = %.16lx  pcr   = %.16lx lpidr  = %.8lx\n",
                mfspr(SPRN_LPCR), mfspr(SPRN_PCR), mfspr(SPRN_LPID));
        printf("hsprg0 = %.16lx hsprg1 = %.16lx amor   = %.16lx\n",
                mfspr(SPRN_HSPRG0), mfspr(SPRN_HSPRG1), mfspr(SPRN_AMOR));
@@ -1821,10 +1821,10 @@ static void dump_207_sprs(void)
        if (!cpu_has_feature(CPU_FTR_ARCH_207S))
                return;
 
-       printf("dpdes  = %.16lx  tir   = %.16lx cir    = %.8x\n",
+       printf("dpdes  = %.16lx  tir   = %.16lx cir    = %.8lx\n",
                mfspr(SPRN_DPDES), mfspr(SPRN_TIR), mfspr(SPRN_CIR));
 
-       printf("fscr   = %.16lx  tar   = %.16lx pspb   = %.8x\n",
+       printf("fscr   = %.16lx  tar   = %.16lx pspb   = %.8lx\n",
                mfspr(SPRN_FSCR), mfspr(SPRN_TAR), mfspr(SPRN_PSPB));
 
        msr = mfmsr();
@@ -1837,12 +1837,12 @@ static void dump_207_sprs(void)
 
        printf("mmcr0  = %.16lx  mmcr1 = %.16lx mmcr2  = %.16lx\n",
                mfspr(SPRN_MMCR0), mfspr(SPRN_MMCR1), mfspr(SPRN_MMCR2));
-       printf("pmc1   = %.8x pmc2 = %.8x  pmc3 = %.8x  pmc4   = %.8x\n",
+       printf("pmc1   = %.8lx pmc2 = %.8lx  pmc3 = %.8lx  pmc4   = %.8lx\n",
                mfspr(SPRN_PMC1), mfspr(SPRN_PMC2),
                mfspr(SPRN_PMC3), mfspr(SPRN_PMC4));
-       printf("mmcra  = %.16lx   siar = %.16lx pmc5   = %.8x\n",
+       printf("mmcra  = %.16lx   siar = %.16lx pmc5   = %.8lx\n",
                mfspr(SPRN_MMCRA), mfspr(SPRN_SIAR), mfspr(SPRN_PMC5));
-       printf("sdar   = %.16lx   sier = %.16lx pmc6   = %.8x\n",
+       printf("sdar   = %.16lx   sier = %.16lx pmc6   = %.8lx\n",
                mfspr(SPRN_SDAR), mfspr(SPRN_SIER), mfspr(SPRN_PMC6));
        printf("ebbhr  = %.16lx  ebbrr = %.16lx bescr  = %.16lx\n",
                mfspr(SPRN_EBBHR), mfspr(SPRN_EBBRR), mfspr(SPRN_BESCR));
@@ -2356,9 +2356,9 @@ static void dump_one_paca(int cpu)
 
        DUMP(p, lock_token, "%#-*x");
        DUMP(p, paca_index, "%#-*x");
-       DUMP(p, kernel_toc, "%#-*lx");
-       DUMP(p, kernelbase, "%#-*lx");
-       DUMP(p, kernel_msr, "%#-*lx");
+       DUMP(p, kernel_toc, "%#-*llx");
+       DUMP(p, kernelbase, "%#-*llx");
+       DUMP(p, kernel_msr, "%#-*llx");
        DUMP(p, emergency_sp, "%-*px");
 #ifdef CONFIG_PPC_BOOK3S_64
        DUMP(p, nmi_emergency_sp, "%-*px");
@@ -2367,7 +2367,7 @@ static void dump_one_paca(int cpu)
        DUMP(p, in_mce, "%#-*x");
        DUMP(p, hmi_event_available, "%#-*x");
 #endif
-       DUMP(p, data_offset, "%#-*lx");
+       DUMP(p, data_offset, "%#-*llx");
        DUMP(p, hw_cpu_id, "%#-*x");
        DUMP(p, cpu_start, "%#-*x");
        DUMP(p, kexec_state, "%#-*x");
@@ -2382,14 +2382,14 @@ static void dump_one_paca(int cpu)
                vsid = be64_to_cpu(p->slb_shadow_ptr->save_area[i].vsid);
 
                if (esid || vsid) {
-                       printf(" slb_shadow[%d]:       = 0x%016lx 0x%016lx\n",
+                       printf(" slb_shadow[%d]:       = 0x%016llx 0x%016llx\n",
                                i, esid, vsid);
                }
        }
        DUMP(p, vmalloc_sllp, "%#-*x");
        DUMP(p, slb_cache_ptr, "%#-*x");
        for (i = 0; i < SLB_CACHE_ENTRIES; i++)
-               printf(" slb_cache[%d]:        = 0x%016lx\n", i, p->slb_cache[i]);
+               printf(" slb_cache[%d]:        = 0x%016x\n", i, p->slb_cache[i]);
 
        DUMP(p, rfi_flush_fallback_area, "%-*px");
 #endif
@@ -2403,10 +2403,10 @@ static void dump_one_paca(int cpu)
        DUMP(p, dbg_kstack, "%-*px");
 #endif
        DUMP(p, __current, "%-*px");
-       DUMP(p, kstack, "%#-*lx");
-       printf(" kstack_base          = 0x%016lx\n", p->kstack & ~(THREAD_SIZE - 1));
-       DUMP(p, stab_rr, "%#-*lx");
-       DUMP(p, saved_r1, "%#-*lx");
+       DUMP(p, kstack, "%#-*llx");
+       printf(" kstack_base          = 0x%016llx\n", p->kstack & ~(THREAD_SIZE - 1));
+       DUMP(p, stab_rr, "%#-*llx");
+       DUMP(p, saved_r1, "%#-*llx");
        DUMP(p, trap_save, "%#-*x");
        DUMP(p, irq_soft_mask, "%#-*x");
        DUMP(p, irq_happened, "%#-*x");
@@ -2426,14 +2426,14 @@ static void dump_one_paca(int cpu)
        DUMP(p, subcore_sibling_mask, "%#-*x");
 #endif
 
-       DUMP(p, accounting.utime, "%#-*llx");
-       DUMP(p, accounting.stime, "%#-*llx");
-       DUMP(p, accounting.utime_scaled, "%#-*llx");
-       DUMP(p, accounting.starttime, "%#-*llx");
-       DUMP(p, accounting.starttime_user, "%#-*llx");
-       DUMP(p, accounting.startspurr, "%#-*llx");
-       DUMP(p, accounting.utime_sspurr, "%#-*llx");
-       DUMP(p, accounting.steal_time, "%#-*llx");
+       DUMP(p, accounting.utime, "%#-*lx");
+       DUMP(p, accounting.stime, "%#-*lx");
+       DUMP(p, accounting.utime_scaled, "%#-*lx");
+       DUMP(p, accounting.starttime, "%#-*lx");
+       DUMP(p, accounting.starttime_user, "%#-*lx");
+       DUMP(p, accounting.startspurr, "%#-*lx");
+       DUMP(p, accounting.utime_sspurr, "%#-*lx");
+       DUMP(p, accounting.steal_time, "%#-*lx");
 #undef DUMP
 
        catch_memory_errors = 0;
@@ -2579,7 +2579,7 @@ static void dump_by_size(unsigned long addr, long count, int size)
                        default: val = 0;
                        }
 
-                       printf("%0*lx", size * 2, val);
+                       printf("%0*llx", size * 2, val);
                }
                printf("\n");
        }
@@ -2743,7 +2743,7 @@ generic_inst_dump(unsigned long adr, long count, int praddr,
                dotted = 0;
                last_inst = inst;
                if (praddr)
-                       printf(REG"  %.8x", adr, inst);
+                       printf(REG"  %.8lx", adr, inst);
                printf("\t");
                dump_func(inst, adr);
                printf("\n");
@@ -2875,7 +2875,7 @@ memdiffs(unsigned char *p1, unsigned char *p2, unsigned nb, unsigned maxpr)
        for( n = nb; n > 0; --n )
                if( *p1++ != *p2++ )
                        if( ++prt <= maxpr )
-                               printf("%.16x %.2x # %.16x %.2x\n", p1 - 1,
+                               printf("%px %.2x # %px %.2x\n", p1 - 1,
                                        p1[-1], p2 - 1, p2[-1]);
        if( prt > maxpr )
                printf("Total of %d differences\n", prt);
@@ -2935,13 +2935,13 @@ memzcan(void)
                if (ok && !ook) {
                        printf("%.8x .. ", a);
                } else if (!ok && ook)
-                       printf("%.8x\n", a - mskip);
+                       printf("%.8lx\n", a - mskip);
                ook = ok;
                if (a + mskip < a)
                        break;
        }
        if (ook)
-               printf("%.8x\n", a - mskip);
+               printf("%.8lx\n", a - mskip);
 }
 
 static void show_task(struct task_struct *tsk)
@@ -3025,13 +3025,13 @@ static void show_pte(unsigned long addr)
                return;
        }
 
-       printf("pgd  @ 0x%016lx\n", pgdir);
+       printf("pgd  @ 0x%px\n", pgdir);
 
        if (pgd_huge(*pgdp)) {
                format_pte(pgdp, pgd_val(*pgdp));
                return;
        }
-       printf("pgdp @ 0x%016lx = 0x%016lx\n", pgdp, pgd_val(*pgdp));
+       printf("pgdp @ 0x%px = 0x%016lx\n", pgdp, pgd_val(*pgdp));
 
        pudp = pud_offset(pgdp, addr);
 
@@ -3045,7 +3045,7 @@ static void show_pte(unsigned long addr)
                return;
        }
 
-       printf("pudp @ 0x%016lx = 0x%016lx\n", pudp, pud_val(*pudp));
+       printf("pudp @ 0x%px = 0x%016lx\n", pudp, pud_val(*pudp));
 
        pmdp = pmd_offset(pudp, addr);
 
@@ -3058,7 +3058,7 @@ static void show_pte(unsigned long addr)
                format_pte(pmdp, pmd_val(*pmdp));
                return;
        }
-       printf("pmdp @ 0x%016lx = 0x%016lx\n", pmdp, pmd_val(*pmdp));
+       printf("pmdp @ 0x%px = 0x%016lx\n", pmdp, pmd_val(*pmdp));
 
        ptep = pte_offset_map(pmdp, addr);
        if (pte_none(*ptep)) {
@@ -3457,9 +3457,9 @@ static void dump_tlb_44x(void)
                asm volatile("tlbre  %0,%1,0" : "=r" (w0) : "r" (i));
                asm volatile("tlbre  %0,%1,1" : "=r" (w1) : "r" (i));
                asm volatile("tlbre  %0,%1,2" : "=r" (w2) : "r" (i));
-               printf("[%02x] %08x %08x %08x ", i, w0, w1, w2);
+               printf("[%02x] %08lx %08lx %08lx ", i, w0, w1, w2);
                if (w0 & PPC44x_TLB_VALID) {
-                       printf("V %08x -> %01x%08x %c%c%c%c%c",
+                       printf("V %08lx -> %01lx%08lx %c%c%c%c%c",
                               w0 & PPC44x_TLB_EPN_MASK,
                               w1 & PPC44x_TLB_ERPN_MASK,
                               w1 & PPC44x_TLB_RPN_MASK,
@@ -3883,19 +3883,19 @@ static void dump_spu_fields(struct spu *spu)
        DUMP_FIELD(spu, "0x%lx", ls_size);
        DUMP_FIELD(spu, "0x%x", node);
        DUMP_FIELD(spu, "0x%lx", flags);
-       DUMP_FIELD(spu, "%d", class_0_pending);
-       DUMP_FIELD(spu, "0x%lx", class_0_dar);
-       DUMP_FIELD(spu, "0x%lx", class_1_dar);
-       DUMP_FIELD(spu, "0x%lx", class_1_dsisr);
-       DUMP_FIELD(spu, "0x%lx", irqs[0]);
-       DUMP_FIELD(spu, "0x%lx", irqs[1]);
-       DUMP_FIELD(spu, "0x%lx", irqs[2]);
+       DUMP_FIELD(spu, "%llu", class_0_pending);
+       DUMP_FIELD(spu, "0x%llx", class_0_dar);
+       DUMP_FIELD(spu, "0x%llx", class_1_dar);
+       DUMP_FIELD(spu, "0x%llx", class_1_dsisr);
+       DUMP_FIELD(spu, "0x%x", irqs[0]);
+       DUMP_FIELD(spu, "0x%x", irqs[1]);
+       DUMP_FIELD(spu, "0x%x", irqs[2]);
        DUMP_FIELD(spu, "0x%x", slb_replace);
        DUMP_FIELD(spu, "%d", pid);
        DUMP_FIELD(spu, "0x%p", mm);
        DUMP_FIELD(spu, "0x%p", ctx);
        DUMP_FIELD(spu, "0x%p", rq);
-       DUMP_FIELD(spu, "0x%p", timestamp);
+       DUMP_FIELD(spu, "0x%llx", timestamp);
        DUMP_FIELD(spu, "0x%lx", problem_phys);
        DUMP_FIELD(spu, "0x%p", problem);
        DUMP_VALUE("0x%x", problem->spu_runcntl_RW,
@@ -3926,7 +3926,7 @@ static void dump_spu_ls(unsigned long num, int subcmd)
                __delay(200);
        } else {
                catch_memory_errors = 0;
-               printf("*** Error: accessing spu info for spu %d\n", num);
+               printf("*** Error: accessing spu info for spu %ld\n", num);
                return;
        }
        catch_memory_errors = 0;