public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
* Fix Compile Time Warnings: bfd/elf32-cr16.c
@ 2005-02-23 14:05 Nick Clifton
  0 siblings, 0 replies; only message in thread
From: Nick Clifton @ 2005-02-23 14:05 UTC (permalink / raw)
  To: binutils

Hi Guys,

  Well this was a new one on me.  Gcc 4.0 was reporting that "control
  might reach the end of a non-void inlined function".  Looking at the
  code I think that this is actually a bug in gcc's flow analysis
  since I could see no path that could lead to such a situation, but
  the fix is simple and it even tidies up the code so I have applied
  it anyway.

Cheers
  Nick

bfd/ChangeLog
2005-02-23  Nick Clifton  <nickc@redhat.com>

	* elf32-cr16c.c (cr16c_elf_final_link_relocate): Remove duplicated
	return statements and replace with a single return at the end of
	the function.  This helps pacify the flow analysis code in gcc 4.0.

Index: bfd/elf32-cr16c.c
===================================================================
RCS file: /cvs/src/src/bfd/elf32-cr16c.c,v
retrieving revision 1.3
diff -c -3 -p -r1.3 elf32-cr16c.c
*** bfd/elf32-cr16c.c	21 Oct 2004 15:28:20 -0000	1.3
--- bfd/elf32-cr16c.c	23 Feb 2005 09:52:48 -0000
*************** cr16c_elf_final_link_relocate (reloc_how
*** 426,433 ****
  	    return bfd_reloc_overflow;
  	  value &= 0xFF;
  	  bfd_put_8 (abfd, (bfd_vma) value, (unsigned char *) data + octets);
- 	  return bfd_reloc_ok;
  	  break;
  	case R_S_16C_16:	/* Two bytes.  */
  	  if (value > (int) MAX_UWORD || value < MIN_WORD)
  	    return bfd_reloc_overflow;
--- 426,433 ----
  	    return bfd_reloc_overflow;
  	  value &= 0xFF;
  	  bfd_put_8 (abfd, (bfd_vma) value, (unsigned char *) data + octets);
  	  break;
+ 
  	case R_S_16C_16:	/* Two bytes.  */
  	  if (value > (int) MAX_UWORD || value < MIN_WORD)
  	    return bfd_reloc_overflow;
*************** cr16c_elf_final_link_relocate (reloc_how
*** 435,447 ****
  	  sword = value;
  	  bfd_put_16 (abfd, (bfd_vma) sword,
  		      (unsigned char *) data + octets);
- 	  return bfd_reloc_ok;
  	  break;
  	case R_S_16C_32:	/* Four bytes.  */
  	  value &= 0xFFFFFFFF;
  	  bfd_put_32 (abfd, (bfd_vma) value, (bfd_byte *) data + octets);
- 	  return bfd_reloc_ok;
  	  break;
  	default:
  	  return bfd_reloc_notsupported;
  	}
--- 435,447 ----
  	  sword = value;
  	  bfd_put_16 (abfd, (bfd_vma) sword,
  		      (unsigned char *) data + octets);
  	  break;
+ 
  	case R_S_16C_32:	/* Four bytes.  */
  	  value &= 0xFFFFFFFF;
  	  bfd_put_32 (abfd, (bfd_vma) value, (bfd_byte *) data + octets);
  	  break;
+ 
  	default:
  	  return bfd_reloc_notsupported;
  	}
*************** cr16c_elf_final_link_relocate (reloc_how
*** 459,466 ****
  	  value <<= 4;
  	  value |= left_val;
  	  bfd_put_8 (abfd, (bfd_vma) value, (unsigned char *) data + octets);
- 	  return bfd_reloc_ok;
  	  break;
  	case R_S_16C_08:    /* word1(0-3,8-11).  */
  	  if (value > 255 || value < -256 || value == 0x80)
  	    return bfd_reloc_overflow;
--- 459,466 ----
  	  value <<= 4;
  	  value |= left_val;
  	  bfd_put_8 (abfd, (bfd_vma) value, (unsigned char *) data + octets);
  	  break;
+ 
  	case R_S_16C_08:    /* word1(0-3,8-11).  */
  	  if (value > 255 || value < -256 || value == 0x80)
  	    return bfd_reloc_overflow;
*************** cr16c_elf_final_link_relocate (reloc_how
*** 471,478 ****
  	  sword |= left_val;
  	  bfd_put_16 (abfd, (bfd_vma) sword,
  		      (unsigned char *) data + octets);
- 	  return bfd_reloc_ok;
  	  break;
  	case R_S_16C_16:    /* word2.  */
  	  if (value > 65535 || value < -65536)
  	    return bfd_reloc_overflow;
--- 471,478 ----
  	  sword |= left_val;
  	  bfd_put_16 (abfd, (bfd_vma) sword,
  		      (unsigned char *) data + octets);
  	  break;
+ 
  	case R_S_16C_16:    /* word2.  */
  	  if (value > 65535 || value < -65536)
  	    return bfd_reloc_overflow;
*************** cr16c_elf_final_link_relocate (reloc_how
*** 482,489 ****
  	  sword = value;
  	  bfd_put_16 (abfd, (bfd_vma) sword,
  		      (unsigned char *) data + octets);
- 	  return bfd_reloc_ok;
  	  break;
  	case R_S_16C_24_a:	/* word1(0-7),word2.  */
  	  if (value > 16777215 || value < -16777216)
  	    return bfd_reloc_overflow;
--- 482,489 ----
  	  sword = value;
  	  bfd_put_16 (abfd, (bfd_vma) sword,
  		      (unsigned char *) data + octets);
  	  break;
+ 
  	case R_S_16C_24_a:	/* word1(0-7),word2.  */
  	  if (value > 16777215 || value < -16777216)
  	    return bfd_reloc_overflow;
*************** cr16c_elf_final_link_relocate (reloc_how
*** 493,500 ****
  	    ((value & 0x00800000) >> 7) | ((value & 0x007F8000) >> 15);
  	  value |= left_val;
  	  bfd_put_32 (abfd, (bfd_vma) value, (bfd_byte *) data + octets);
- 	  return bfd_reloc_ok;
  	  break;
  	case R_S_16C_24:    /* word2(0-3,8-11),word3.  */
  	  if (value > 16777215 || value < -16777216)
  	    return bfd_reloc_overflow;
--- 493,500 ----
  	    ((value & 0x00800000) >> 7) | ((value & 0x007F8000) >> 15);
  	  value |= left_val;
  	  bfd_put_32 (abfd, (bfd_vma) value, (bfd_byte *) data + octets);
  	  break;
+ 
  	case R_S_16C_24:    /* word2(0-3,8-11),word3.  */
  	  if (value > 16777215 || value < -16777216)
  	    return bfd_reloc_overflow;
*************** cr16c_elf_final_link_relocate (reloc_how
*** 507,514 ****
  	    ((value & 0x000F0000) >> 8) | ((value & 0x00F00000) >> 20);
  	  value |= left_val;
  	  bfd_put_32 (abfd, (bfd_vma) value, (bfd_byte *) data + octets);
- 	  return bfd_reloc_ok;
  	  break;
  	default:
  	  return bfd_reloc_notsupported;
  	}
--- 507,514 ----
  	    ((value & 0x000F0000) >> 8) | ((value & 0x00F00000) >> 20);
  	  value |= left_val;
  	  bfd_put_32 (abfd, (bfd_vma) value, (bfd_byte *) data + octets);
  	  break;
+ 
  	default:
  	  return bfd_reloc_notsupported;
  	}
*************** cr16c_elf_final_link_relocate (reloc_how
*** 523,530 ****
  	  value &= 0xF;
  	  value |= left_val;
  	  bfd_put_8 (abfd, (bfd_vma) value, (unsigned char *) data + octets);
- 	  return bfd_reloc_ok;
  	  break;
  	case R_S_16C_04_a:	/* word1(12-15) not scaled.  */
  	  if (value > 26 || value < 0)
  	    return bfd_reloc_overflow;
--- 523,530 ----
  	  value &= 0xF;
  	  value |= left_val;
  	  bfd_put_8 (abfd, (bfd_vma) value, (unsigned char *) data + octets);
  	  break;
+ 
  	case R_S_16C_04_a:	/* word1(12-15) not scaled.  */
  	  if (value > 26 || value < 0)
  	    return bfd_reloc_overflow;
*************** cr16c_elf_final_link_relocate (reloc_how
*** 532,539 ****
  	  value >>= 1;
  	  value |= left_val;
  	  bfd_put_8 (abfd, (bfd_vma) value, (unsigned char *) data + octets);
- 	  return bfd_reloc_ok;
  	  break;
  	case R_S_16C_14:	/* word1(4-5),word2(0-3,8-15).  */
  	  if (value < 0 || value > 16383)
  	    return bfd_reloc_overflow;
--- 532,539 ----
  	  value >>= 1;
  	  value |= left_val;
  	  bfd_put_8 (abfd, (bfd_vma) value, (unsigned char *) data + octets);
  	  break;
+ 
  	case R_S_16C_14:	/* word1(4-5),word2(0-3,8-15).  */
  	  if (value < 0 || value > 16383)
  	    return bfd_reloc_overflow;
*************** cr16c_elf_final_link_relocate (reloc_how
*** 543,550 ****
  	    ((value & 0x0000000F) << 16) | (value & 0x00000030);
  	  value |= left_val;
  	  bfd_put_32 (abfd, (bfd_vma) value, (bfd_byte *) data + octets);
- 	  return bfd_reloc_ok;
  	  break;
  	case R_S_16C_16:	/* word2.  */
  	  if (value > 65535 || value < 0)
  	    return bfd_reloc_overflow;
--- 543,550 ----
  	    ((value & 0x0000000F) << 16) | (value & 0x00000030);
  	  value |= left_val;
  	  bfd_put_32 (abfd, (bfd_vma) value, (bfd_byte *) data + octets);
  	  break;
+ 
  	case R_S_16C_16:	/* word2.  */
  	  if (value > 65535 || value < 0)
  	    return bfd_reloc_overflow;
*************** cr16c_elf_final_link_relocate (reloc_how
*** 552,559 ****
  	  sword = value;
  	  bfd_put_16 (abfd, (bfd_vma) sword,
  		      (unsigned char *) data + octets);
- 	  return bfd_reloc_ok;
  	  break;
  	case R_S_16C_20:	/* word2(8-11),word3.  */
  	  /* if (value > 1048575 || value < 0) RELOC_ERROR(1); */
  	  value &= 0xFFFFF;
--- 552,559 ----
  	  sword = value;
  	  bfd_put_16 (abfd, (bfd_vma) sword,
  		      (unsigned char *) data + octets);
  	  break;
+ 
  	case R_S_16C_20:	/* word2(8-11),word3.  */
  	  /* if (value > 1048575 || value < 0) RELOC_ERROR(1); */
  	  value &= 0xFFFFF;
*************** cr16c_elf_final_link_relocate (reloc_how
*** 573,580 ****
  	      bfd_put_8 (abfd, (bfd_vma) value,
  			 (unsigned char *) data + octets - 3);
  	    }
- 	  return bfd_reloc_ok;
  	  break;
  	default:
  	  return bfd_reloc_notsupported;
  	}
--- 573,580 ----
  	      bfd_put_8 (abfd, (bfd_vma) value,
  			 (unsigned char *) data + octets - 3);
  	    }
  	  break;
+ 
  	default:
  	  return bfd_reloc_notsupported;
  	}
*************** cr16c_elf_final_link_relocate (reloc_how
*** 591,598 ****
  	    ((value & 0x000F0000) >> 16);
  	  value |= left_val;
  	  bfd_put_32 (abfd, (bfd_vma) value, (bfd_byte *) data + octets);
- 	  return bfd_reloc_ok;
  	  break;
  	case R_S_16C_24:	/* word2(0-3,8-11),word3.  */
  	  /* if (value > 16777215 || value < 0) RELOC_ERROR(1); */
  	  value &= 0xFFFFFF;
--- 591,598 ----
  	    ((value & 0x000F0000) >> 16);
  	  value |= left_val;
  	  bfd_put_32 (abfd, (bfd_vma) value, (bfd_byte *) data + octets);
  	  break;
+ 
  	case R_S_16C_24:	/* word2(0-3,8-11),word3.  */
  	  /* if (value > 16777215 || value < 0) RELOC_ERROR(1); */
  	  value &= 0xFFFFFF;
*************** cr16c_elf_final_link_relocate (reloc_how
*** 600,607 ****
  	    ((value & 0x000F0000) >> 8) | ((value & 0x00F00000) >> 20);
  	  value |= left_val;
  	  bfd_put_32 (abfd, (bfd_vma) value, (bfd_byte *) data + octets);
- 	  return bfd_reloc_ok;
  	  break;
  	default:
  	  return bfd_reloc_notsupported;
  	}
--- 600,607 ----
  	    ((value & 0x000F0000) >> 8) | ((value & 0x00F00000) >> 20);
  	  value |= left_val;
  	  bfd_put_32 (abfd, (bfd_vma) value, (bfd_byte *) data + octets);
  	  break;
+ 
  	default:
  	  return bfd_reloc_notsupported;
  	}
*************** cr16c_elf_final_link_relocate (reloc_how
*** 617,624 ****
  	  value <<= 4;
  	  value |= left_val;
  	  bfd_put_8 (abfd, (bfd_vma) value, (unsigned char *) data + octets);
- 	  return bfd_reloc_ok;
  	  break;
  	case R_S_16C_16:	/* word2.  */
  	  if (value > 32767 || value < -32768)
  	    return bfd_reloc_overflow;
--- 617,624 ----
  	  value <<= 4;
  	  value |= left_val;
  	  bfd_put_8 (abfd, (bfd_vma) value, (unsigned char *) data + octets);
  	  break;
+ 
  	case R_S_16C_16:	/* word2.  */
  	  if (value > 32767 || value < -32768)
  	    return bfd_reloc_overflow;
*************** cr16c_elf_final_link_relocate (reloc_how
*** 626,633 ****
  	  sword = value;
  	  bfd_put_16 (abfd, (bfd_vma) sword,
  		      (unsigned char *) data + octets);
- 	  return bfd_reloc_ok;
  	  break;
  	case R_S_16C_20:	/* word1(0-3),word2.  */
  	  if (value > 1048575 || value < 0)
  	    return bfd_reloc_overflow;
--- 626,633 ----
  	  sword = value;
  	  bfd_put_16 (abfd, (bfd_vma) sword,
  		      (unsigned char *) data + octets);
  	  break;
+ 
  	case R_S_16C_20:	/* word1(0-3),word2.  */
  	  if (value > 1048575 || value < 0)
  	    return bfd_reloc_overflow;
*************** cr16c_elf_final_link_relocate (reloc_how
*** 636,650 ****
  	    ((value & 0x000F0000) >> 16);
  	  value |= left_val;
  	  bfd_put_32 (abfd, (bfd_vma) value, (bfd_byte *) data + octets);
- 	  return bfd_reloc_ok;
  	  break;
  	case R_S_16C_32:	/* word2, word3.  */
  	  value &= 0xFFFFFFFF;
  	  value = ((value & 0x0000FFFF) << 16) |
  	    ((value & 0xFFFF0000) >> 16);
  	  bfd_put_32 (abfd, (bfd_vma) value, (bfd_byte *) data + octets);
- 	  return bfd_reloc_ok;
  	  break;
  	default:
  	  return bfd_reloc_notsupported;
  	}
--- 636,650 ----
  	    ((value & 0x000F0000) >> 16);
  	  value |= left_val;
  	  bfd_put_32 (abfd, (bfd_vma) value, (bfd_byte *) data + octets);
  	  break;
+ 
  	case R_S_16C_32:	/* word2, word3.  */
  	  value &= 0xFFFFFFFF;
  	  value = ((value & 0x0000FFFF) << 16) |
  	    ((value & 0xFFFF0000) >> 16);
  	  bfd_put_32 (abfd, (bfd_vma) value, (bfd_byte *) data + octets);
  	  break;
+ 
  	default:
  	  return bfd_reloc_notsupported;
  	}
*************** cr16c_elf_final_link_relocate (reloc_how
*** 652,657 ****
--- 652,659 ----
      default:
        return bfd_reloc_notsupported;
      }
+ 
+   return bfd_reloc_ok;
  }
  
  /* Relocate a CR16C ELF section.  */

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2005-02-23  9:57 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-02-23 14:05 Fix Compile Time Warnings: bfd/elf32-cr16.c Nick Clifton

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).