Patchwork microblaze: fix custom fprintf

login
register
mail settings
Submitter Thomas Monjalon
Date April 27, 2010, 1:27 p.m.
Message ID <1272374829-3594-1-git-send-email-thomas_ml@monjalon.net>
Download mbox | patch
Permalink /patch/51083/
State New
Headers show

Comments

Thomas Monjalon - April 27, 2010, 1:27 p.m.
From: Thomas Monjalon <thomas@monjalon.net>

Using GCC-4.2.4-1ubuntu4, there is a warning:
	microblaze-dis.c:792: warning: unused variable 'fprintf'

Indeed, fprintf() is shadowed by a custom redefinition but is not used because
of FORTIFY_SOURCE option which replace calls to fprintf() by fprintf_chk().
So, fprintf refers to the libc implementation instead of the qemu one.
It's a bug.

It is fixed by renaming the variable to something different of "fprintf".
It prevents from hazardous shadowing.

Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
---
 microblaze-dis.c |   62 +++++++++++++++++++++++++++---------------------------
 1 files changed, 31 insertions(+), 31 deletions(-)
Blue Swirl - April 27, 2010, 6:58 p.m.
Thanks, applied. Also clang analyzer had problems with the 'fprintf' variable.

On 4/27/10, Thomas Monjalon <thomas_ml@monjalon.net> wrote:
> From: Thomas Monjalon <thomas@monjalon.net>
>
>  Using GCC-4.2.4-1ubuntu4, there is a warning:
>         microblaze-dis.c:792: warning: unused variable 'fprintf'
>
>  Indeed, fprintf() is shadowed by a custom redefinition but is not used because
>  of FORTIFY_SOURCE option which replace calls to fprintf() by fprintf_chk().
>  So, fprintf refers to the libc implementation instead of the qemu one.
>  It's a bug.
>
>  It is fixed by renaming the variable to something different of "fprintf".
>  It prevents from hazardous shadowing.
>
>  Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
>  ---
>   microblaze-dis.c |   62 +++++++++++++++++++++++++++---------------------------
>   1 files changed, 31 insertions(+), 31 deletions(-)
>
>  diff --git a/microblaze-dis.c b/microblaze-dis.c
>  index 9235fd8..7694a43 100644
>  --- a/microblaze-dis.c
>  +++ b/microblaze-dis.c
>  @@ -789,7 +789,7 @@ read_insn_microblaze (bfd_vma memaddr,
>   int
>   print_insn_microblaze (bfd_vma memaddr, struct disassemble_info * info)
>   {
>  -  fprintf_ftype       fprintf = info->fprintf_func;
>  +  fprintf_ftype       fprintf_func = info->fprintf_func;
>    void *              stream = info->stream;
>    unsigned long       inst, prev_inst;
>    struct op_code_struct * op, *pop;
>  @@ -826,19 +826,19 @@ print_insn_microblaze (bfd_vma memaddr, struct disassemble_info * info)
>    prev_insn_vma = curr_insn_vma;
>
>    if (op->name == 0) {
>  -    fprintf (stream, ".short 0x%04lx", inst);
>  +    fprintf_func (stream, ".short 0x%04lx", inst);
>    }
>    else
>      {
>  -      fprintf (stream, "%s", op->name);
>  +      fprintf_func (stream, "%s", op->name);
>
>        switch (op->inst_type)
>         {
>    case INST_TYPE_RD_R1_R2:
>  -     fprintf(stream, "\t%s, %s, %s", get_field_rd(inst), get_field_r1(inst), get_field_r2(inst));
>  +     fprintf_func(stream, "\t%s, %s, %s", get_field_rd(inst), get_field_r1(inst), get_field_r2(inst));
>       break;
>          case INST_TYPE_RD_R1_IMM:
>  -         fprintf(stream, "\t%s, %s, %s", get_field_rd(inst), get_field_r1(inst), get_field_imm(inst));
>  +         fprintf_func(stream, "\t%s, %s, %s", get_field_rd(inst), get_field_r1(inst), get_field_imm(inst));
>           if (info->print_address_func && get_int_field_r1(inst) == 0 && info->symbol_at_address_func) {
>             if (immfound)
>               immval |= (get_int_field_imm(inst) & 0x0000ffff);
>  @@ -848,34 +848,34 @@ print_insn_microblaze (bfd_vma memaddr, struct disassemble_info * info)
>                 immval |= 0xFFFF0000;
>             }
>             if (immval > 0 && info->symbol_at_address_func(immval, info)) {
>  -             fprintf (stream, "\t// ");
>  +             fprintf_func (stream, "\t// ");
>               info->print_address_func (immval, info);
>             }
>           }
>           break;
>         case INST_TYPE_RD_R1_IMM5:
>  -         fprintf(stream, "\t%s, %s, %s", get_field_rd(inst), get_field_r1(inst), get_field_imm5(inst));
>  +         fprintf_func(stream, "\t%s, %s, %s", get_field_rd(inst), get_field_r1(inst), get_field_imm5(inst));
>           break;
>         case INST_TYPE_RD_RFSL:
>  -         fprintf(stream, "\t%s, %s", get_field_rd(inst), get_field_rfsl(inst));
>  +         fprintf_func(stream, "\t%s, %s", get_field_rd(inst), get_field_rfsl(inst));
>           break;
>         case INST_TYPE_R1_RFSL:
>  -         fprintf(stream, "\t%s, %s", get_field_r1(inst), get_field_rfsl(inst));
>  +         fprintf_func(stream, "\t%s, %s", get_field_r1(inst), get_field_rfsl(inst));
>           break;
>         case INST_TYPE_RD_SPECIAL:
>  -         fprintf(stream, "\t%s, %s", get_field_rd(inst), get_field_special(inst, op));
>  +         fprintf_func(stream, "\t%s, %s", get_field_rd(inst), get_field_special(inst, op));
>           break;
>         case INST_TYPE_SPECIAL_R1:
>  -         fprintf(stream, "\t%s, %s", get_field_special(inst, op), get_field_r1(inst));
>  +         fprintf_func(stream, "\t%s, %s", get_field_special(inst, op), get_field_r1(inst));
>           break;
>         case INST_TYPE_RD_R1:
>  -         fprintf(stream, "\t%s, %s", get_field_rd(inst), get_field_r1(inst));
>  +         fprintf_func(stream, "\t%s, %s", get_field_rd(inst), get_field_r1(inst));
>           break;
>         case INST_TYPE_R1_R2:
>  -         fprintf(stream, "\t%s, %s", get_field_r1(inst), get_field_r2(inst));
>  +         fprintf_func(stream, "\t%s, %s", get_field_r1(inst), get_field_r2(inst));
>           break;
>         case INST_TYPE_R1_IMM:
>  -         fprintf(stream, "\t%s, %s", get_field_r1(inst), get_field_imm(inst));
>  +         fprintf_func(stream, "\t%s, %s", get_field_r1(inst), get_field_imm(inst));
>           /* The non-pc relative instructions are returns, which shouldn't
>              have a label printed */
>           if (info->print_address_func && op->inst_offset_type == INST_PC_OFFSET && info->symbol_at_address_func) {
>  @@ -888,16 +888,16 @@ print_insn_microblaze (bfd_vma memaddr, struct disassemble_info * info)
>             }
>             immval += memaddr;
>             if (immval > 0 && info->symbol_at_address_func(immval, info)) {
>  -             fprintf (stream, "\t// ");
>  +             fprintf_func (stream, "\t// ");
>               info->print_address_func (immval, info);
>             } else {
>  -             fprintf (stream, "\t\t// ");
>  -             fprintf (stream, "%x", immval);
>  +             fprintf_func (stream, "\t\t// ");
>  +             fprintf_func (stream, "%x", immval);
>             }
>           }
>           break;
>          case INST_TYPE_RD_IMM:
>  -         fprintf(stream, "\t%s, %s", get_field_rd(inst), get_field_imm(inst));
>  +         fprintf_func(stream, "\t%s, %s", get_field_rd(inst), get_field_imm(inst));
>           if (info->print_address_func && info->symbol_at_address_func) {
>             if (immfound)
>               immval |= (get_int_field_imm(inst) & 0x0000ffff);
>  @@ -909,13 +909,13 @@ print_insn_microblaze (bfd_vma memaddr, struct disassemble_info * info)
>             if (op->inst_offset_type == INST_PC_OFFSET)
>               immval += (int) memaddr;
>             if (info->symbol_at_address_func(immval, info)) {
>  -             fprintf (stream, "\t// ");
>  +             fprintf_func (stream, "\t// ");
>               info->print_address_func (immval, info);
>             }
>           }
>           break;
>          case INST_TYPE_IMM:
>  -         fprintf(stream, "\t%s", get_field_imm(inst));
>  +         fprintf_func(stream, "\t%s", get_field_imm(inst));
>           if (info->print_address_func && info->symbol_at_address_func && op->instr != imm) {
>             if (immfound)
>               immval |= (get_int_field_imm(inst) & 0x0000ffff);
>  @@ -927,39 +927,39 @@ print_insn_microblaze (bfd_vma memaddr, struct disassemble_info * info)
>             if (op->inst_offset_type == INST_PC_OFFSET)
>               immval += (int) memaddr;
>             if (immval > 0 && info->symbol_at_address_func(immval, info)) {
>  -             fprintf (stream, "\t// ");
>  +             fprintf_func (stream, "\t// ");
>               info->print_address_func (immval, info);
>             } else if (op->inst_offset_type == INST_PC_OFFSET) {
>  -             fprintf (stream, "\t\t// ");
>  -             fprintf (stream, "%x", immval);
>  +             fprintf_func (stream, "\t\t// ");
>  +             fprintf_func (stream, "%x", immval);
>             }
>           }
>           break;
>          case INST_TYPE_RD_R2:
>  -         fprintf(stream, "\t%s, %s", get_field_rd(inst), get_field_r2(inst));
>  +         fprintf_func(stream, "\t%s, %s", get_field_rd(inst), get_field_r2(inst));
>           break;
>    case INST_TYPE_R2:
>  -     fprintf(stream, "\t%s", get_field_r2(inst));
>  +     fprintf_func(stream, "\t%s", get_field_r2(inst));
>       break;
>    case INST_TYPE_R1:
>  -     fprintf(stream, "\t%s", get_field_r1(inst));
>  +     fprintf_func(stream, "\t%s", get_field_r1(inst));
>       break;
>    case INST_TYPE_RD_R1_SPECIAL:
>  -     fprintf(stream, "\t%s, %s", get_field_rd(inst), get_field_r2(inst));
>  +     fprintf_func(stream, "\t%s, %s", get_field_rd(inst), get_field_r2(inst));
>       break;
>    case INST_TYPE_RD_IMM15:
>  -     fprintf(stream, "\t%s, %s", get_field_rd(inst), get_field_imm15(inst));
>  +     fprintf_func(stream, "\t%s, %s", get_field_rd(inst), get_field_imm15(inst));
>       break;
>       /* For tuqula instruction */
>    case INST_TYPE_RD:
>  -     fprintf(stream, "\t%s", get_field_rd(inst));
>  +     fprintf_func(stream, "\t%s", get_field_rd(inst));
>       break;
>    case INST_TYPE_RFSL:
>  -     fprintf(stream, "\t%s", get_field_rfsl(inst));
>  +     fprintf_func(stream, "\t%s", get_field_rfsl(inst));
>       break;
>    default:
>           /* if the disassembler lags the instruction set */
>  -         fprintf (stream, "\tundecoded operands, inst is 0x%04lx", inst);
>  +         fprintf_func (stream, "\tundecoded operands, inst is 0x%04lx", inst);
>           break;
>         }
>      }
>
> --
>  1.7.1
>
>
>
>
>
>

Patch

diff --git a/microblaze-dis.c b/microblaze-dis.c
index 9235fd8..7694a43 100644
--- a/microblaze-dis.c
+++ b/microblaze-dis.c
@@ -789,7 +789,7 @@  read_insn_microblaze (bfd_vma memaddr,
 int 
 print_insn_microblaze (bfd_vma memaddr, struct disassemble_info * info)
 {
-  fprintf_ftype       fprintf = info->fprintf_func;
+  fprintf_ftype       fprintf_func = info->fprintf_func;
   void *              stream = info->stream;
   unsigned long       inst, prev_inst;
   struct op_code_struct * op, *pop;
@@ -826,19 +826,19 @@  print_insn_microblaze (bfd_vma memaddr, struct disassemble_info * info)
   prev_insn_vma = curr_insn_vma;
 
   if (op->name == 0) {
-    fprintf (stream, ".short 0x%04lx", inst);
+    fprintf_func (stream, ".short 0x%04lx", inst);
   }
   else
     {
-      fprintf (stream, "%s", op->name);
+      fprintf_func (stream, "%s", op->name);
       
       switch (op->inst_type)
 	{
   case INST_TYPE_RD_R1_R2:
-     fprintf(stream, "\t%s, %s, %s", get_field_rd(inst), get_field_r1(inst), get_field_r2(inst));
+     fprintf_func(stream, "\t%s, %s, %s", get_field_rd(inst), get_field_r1(inst), get_field_r2(inst));
      break;
         case INST_TYPE_RD_R1_IMM:
-	  fprintf(stream, "\t%s, %s, %s", get_field_rd(inst), get_field_r1(inst), get_field_imm(inst));
+	  fprintf_func(stream, "\t%s, %s, %s", get_field_rd(inst), get_field_r1(inst), get_field_imm(inst));
 	  if (info->print_address_func && get_int_field_r1(inst) == 0 && info->symbol_at_address_func) {
 	    if (immfound)
 	      immval |= (get_int_field_imm(inst) & 0x0000ffff);
@@ -848,34 +848,34 @@  print_insn_microblaze (bfd_vma memaddr, struct disassemble_info * info)
 		immval |= 0xFFFF0000;
 	    }
 	    if (immval > 0 && info->symbol_at_address_func(immval, info)) {
-	      fprintf (stream, "\t// ");
+	      fprintf_func (stream, "\t// ");
 	      info->print_address_func (immval, info);
 	    }
 	  }
 	  break;
 	case INST_TYPE_RD_R1_IMM5:
-	  fprintf(stream, "\t%s, %s, %s", get_field_rd(inst), get_field_r1(inst), get_field_imm5(inst));
+	  fprintf_func(stream, "\t%s, %s, %s", get_field_rd(inst), get_field_r1(inst), get_field_imm5(inst));
 	  break;
 	case INST_TYPE_RD_RFSL:
-	  fprintf(stream, "\t%s, %s", get_field_rd(inst), get_field_rfsl(inst));
+	  fprintf_func(stream, "\t%s, %s", get_field_rd(inst), get_field_rfsl(inst));
 	  break;
 	case INST_TYPE_R1_RFSL:
-	  fprintf(stream, "\t%s, %s", get_field_r1(inst), get_field_rfsl(inst));
+	  fprintf_func(stream, "\t%s, %s", get_field_r1(inst), get_field_rfsl(inst));
 	  break;
 	case INST_TYPE_RD_SPECIAL:
-	  fprintf(stream, "\t%s, %s", get_field_rd(inst), get_field_special(inst, op));
+	  fprintf_func(stream, "\t%s, %s", get_field_rd(inst), get_field_special(inst, op));
 	  break;
 	case INST_TYPE_SPECIAL_R1:
-	  fprintf(stream, "\t%s, %s", get_field_special(inst, op), get_field_r1(inst));
+	  fprintf_func(stream, "\t%s, %s", get_field_special(inst, op), get_field_r1(inst));
 	  break;
 	case INST_TYPE_RD_R1:
-	  fprintf(stream, "\t%s, %s", get_field_rd(inst), get_field_r1(inst));
+	  fprintf_func(stream, "\t%s, %s", get_field_rd(inst), get_field_r1(inst));
 	  break;
 	case INST_TYPE_R1_R2:
-	  fprintf(stream, "\t%s, %s", get_field_r1(inst), get_field_r2(inst));
+	  fprintf_func(stream, "\t%s, %s", get_field_r1(inst), get_field_r2(inst));
 	  break;
 	case INST_TYPE_R1_IMM:
-	  fprintf(stream, "\t%s, %s", get_field_r1(inst), get_field_imm(inst));
+	  fprintf_func(stream, "\t%s, %s", get_field_r1(inst), get_field_imm(inst));
 	  /* The non-pc relative instructions are returns, which shouldn't 
 	     have a label printed */
 	  if (info->print_address_func && op->inst_offset_type == INST_PC_OFFSET && info->symbol_at_address_func) {
@@ -888,16 +888,16 @@  print_insn_microblaze (bfd_vma memaddr, struct disassemble_info * info)
 	    }
 	    immval += memaddr;
 	    if (immval > 0 && info->symbol_at_address_func(immval, info)) {
-	      fprintf (stream, "\t// ");
+	      fprintf_func (stream, "\t// ");
 	      info->print_address_func (immval, info);
 	    } else {
-	      fprintf (stream, "\t\t// ");
-	      fprintf (stream, "%x", immval);
+	      fprintf_func (stream, "\t\t// ");
+	      fprintf_func (stream, "%x", immval);
 	    }
 	  }
 	  break;
         case INST_TYPE_RD_IMM:
-	  fprintf(stream, "\t%s, %s", get_field_rd(inst), get_field_imm(inst));
+	  fprintf_func(stream, "\t%s, %s", get_field_rd(inst), get_field_imm(inst));
 	  if (info->print_address_func && info->symbol_at_address_func) {
 	    if (immfound)
 	      immval |= (get_int_field_imm(inst) & 0x0000ffff);
@@ -909,13 +909,13 @@  print_insn_microblaze (bfd_vma memaddr, struct disassemble_info * info)
 	    if (op->inst_offset_type == INST_PC_OFFSET)
 	      immval += (int) memaddr;
 	    if (info->symbol_at_address_func(immval, info)) {
-	      fprintf (stream, "\t// ");
+	      fprintf_func (stream, "\t// ");
 	      info->print_address_func (immval, info);
 	    } 
 	  }
 	  break;
         case INST_TYPE_IMM:
-	  fprintf(stream, "\t%s", get_field_imm(inst));
+	  fprintf_func(stream, "\t%s", get_field_imm(inst));
 	  if (info->print_address_func && info->symbol_at_address_func && op->instr != imm) {
 	    if (immfound)
 	      immval |= (get_int_field_imm(inst) & 0x0000ffff);
@@ -927,39 +927,39 @@  print_insn_microblaze (bfd_vma memaddr, struct disassemble_info * info)
 	    if (op->inst_offset_type == INST_PC_OFFSET)
 	      immval += (int) memaddr;
 	    if (immval > 0 && info->symbol_at_address_func(immval, info)) {
-	      fprintf (stream, "\t// ");
+	      fprintf_func (stream, "\t// ");
 	      info->print_address_func (immval, info);
 	    } else if (op->inst_offset_type == INST_PC_OFFSET) {
-	      fprintf (stream, "\t\t// ");
-	      fprintf (stream, "%x", immval);
+	      fprintf_func (stream, "\t\t// ");
+	      fprintf_func (stream, "%x", immval);
 	    }
 	  }
 	  break;
         case INST_TYPE_RD_R2:
-	  fprintf(stream, "\t%s, %s", get_field_rd(inst), get_field_r2(inst));
+	  fprintf_func(stream, "\t%s, %s", get_field_rd(inst), get_field_r2(inst));
 	  break;
   case INST_TYPE_R2:
-     fprintf(stream, "\t%s", get_field_r2(inst));
+     fprintf_func(stream, "\t%s", get_field_r2(inst));
      break;
   case INST_TYPE_R1:
-     fprintf(stream, "\t%s", get_field_r1(inst));
+     fprintf_func(stream, "\t%s", get_field_r1(inst));
      break;
   case INST_TYPE_RD_R1_SPECIAL:
-     fprintf(stream, "\t%s, %s", get_field_rd(inst), get_field_r2(inst));
+     fprintf_func(stream, "\t%s, %s", get_field_rd(inst), get_field_r2(inst));
      break;
   case INST_TYPE_RD_IMM15:
-     fprintf(stream, "\t%s, %s", get_field_rd(inst), get_field_imm15(inst));
+     fprintf_func(stream, "\t%s, %s", get_field_rd(inst), get_field_imm15(inst));
      break;
      /* For tuqula instruction */
   case INST_TYPE_RD:
-     fprintf(stream, "\t%s", get_field_rd(inst));
+     fprintf_func(stream, "\t%s", get_field_rd(inst));
      break;
   case INST_TYPE_RFSL:
-     fprintf(stream, "\t%s", get_field_rfsl(inst));
+     fprintf_func(stream, "\t%s", get_field_rfsl(inst));
      break;
   default:
 	  /* if the disassembler lags the instruction set */
-	  fprintf (stream, "\tundecoded operands, inst is 0x%04lx", inst);
+	  fprintf_func (stream, "\tundecoded operands, inst is 0x%04lx", inst);
 	  break;
 	}
     }