[PATCH] Fix R_M32R_10_PCREL_RELA linkage bug

Kazuhiro Inaoka inaoka.kazuhiro@renesas.com
Thu Nov 24 02:08:00 GMT 2005


Hi Nick,

I found a underlying code bug at m32r_elf_sweep_hook in bfd/elf32-m32r.c.
It's the following. It was checked the same relocation number.
    if (p->sec == sec)
      {
       if (ELF32_TYPE (rel->r_info) == R_M32R_26_PCREL_RELA
           || ELF32_TYPE (rel->r_info) == R_M32R_26_PCREL_RELA

Please commit this patch too.

Regards,

Kazuhiro Inaoka
EC No. H05-0044

bfd/ChangeLog

2005-11-24  Kazuhiro Inaoka <inaoka.kazuhiro@renesas.com>

    * elf32-m32r.c (m32r_elf_sweep_hook): Fix an illegal duplicate check.


Kazuhiro Inaoka wrote:

> Hi Nick,
>
> This patch is to fix R_M32R_10_PCREL_RELA linkage bug.
> When I changed type REL of relocation to RELA, it was not enough
> to care for R_M32R_10_PCREL_RELA.
> Please commit it.
>
> Regards,
>
> Kazuhiro Inaoka
> EC No. H05-0044
>
>
>------------------------------------------------------------------------
>
>bfd/ChangeLog
>
>2005-11-22  Kazuhiro Inaoka <inaoka.kazuhiro@renesas.com>
>
>	* elf32-m32r.c (m32r_elf_relocate_section): Fix 
>	R_M32R_10_PCREL_RELA linkage bug.
>	* elf32-m32r.c (m32r_elf_gc_sweep_hook): Likewise.
>	* elf32-m32r.c (m32r_elf_check_relocs): Likewise.
>
>Index: elf32-m32r.c
>===================================================================
>RCS file: /cvs/src/src/bfd/elf32-m32r.c,v
>retrieving revision 1.75
>diff -p -u -r1.75 elf32-m32r.c
>--- elf32-m32r.c	25 Oct 2005 16:19:06 -0000	1.75
>+++ elf32-m32r.c	21 Nov 2005 07:24:02 -0000
>@@ -2878,6 +2878,7 @@ m32r_elf_relocate_section (bfd *output_b
>             case R_M32R_24_RELA:
>             case R_M32R_32_RELA:
>             case R_M32R_REL32:
>+            case R_M32R_10_PCREL_RELA:
>             case R_M32R_18_PCREL_RELA:
>             case R_M32R_26_PCREL_RELA:
>             case R_M32R_HI16_ULO_RELA:
>@@ -2887,6 +2888,7 @@ m32r_elf_relocate_section (bfd *output_b
>                   && (input_section->flags & SEC_ALLOC) != 0
>                   && ((r_type != R_M32R_18_PCREL_RELA
>                        && r_type != R_M32R_26_PCREL_RELA
>+                       && r_type != R_M32R_10_PCREL_RELA
>                        && r_type != R_M32R_REL32)
>                       || (h != NULL
>                           && h->dynindx != -1
>@@ -2938,6 +2940,7 @@ m32r_elf_relocate_section (bfd *output_b
>                     memset (&outrel, 0, sizeof outrel);
>                   else if (r_type == R_M32R_18_PCREL_RELA
>                            || r_type == R_M32R_26_PCREL_RELA
>+                           || r_type == R_M32R_10_PCREL_RELA
>                            || r_type == R_M32R_REL32)
>                     {
>                       BFD_ASSERT (h != NULL && h->dynindx != -1);
>@@ -2975,8 +2978,10 @@ m32r_elf_relocate_section (bfd *output_b
>                      an addend for the dynamic reloc.  */
>                   if (! relocate)
>                     continue;
>+                  break;
>                 }
>-              break;
>+              else if (r_type != R_M32R_10_PCREL_RELA)
>+                break;
> 
> 	    case (int) R_M32R_10_PCREL :
> 	      r = m32r_elf_do_10_pcrel_reloc (input_bfd, howto, input_section,
>@@ -3714,6 +3719,7 @@ m32r_elf_gc_sweep_hook (bfd *abfd ATTRIB
> 	case R_M32R_HI16_SLO_RELA:
> 	case R_M32R_LO16_RELA:
> 	case R_M32R_SDA16_RELA:
>+	case R_M32R_10_PCREL_RELA:
> 	case R_M32R_18_PCREL_RELA:
> 	case R_M32R_26_PCREL_RELA:
> 	  if (h != NULL)
>@@ -3732,6 +3738,7 @@ m32r_elf_gc_sweep_hook (bfd *abfd ATTRIB
> 		  {
> 		    if (ELF32_R_TYPE (rel->r_info) == R_M32R_26_PCREL_RELA
> 			|| ELF32_R_TYPE (rel->r_info) == R_M32R_26_PCREL_RELA
>+			|| ELF32_R_TYPE (rel->r_info) == R_M32R_10_PCREL_RELA
> 			|| ELF32_R_TYPE (rel->r_info) == R_M32R_REL32)
> 		      p->pc_count -= 1;
> 		    p->count -= 1;
>@@ -3897,6 +3904,7 @@ m32r_elf_check_relocs (bfd *abfd,
>         case R_M32R_HI16_SLO_RELA:
>         case R_M32R_LO16_RELA:
>         case R_M32R_SDA16_RELA:
>+        case R_M32R_10_PCREL_RELA:
>         case R_M32R_18_PCREL_RELA:
>         case R_M32R_26_PCREL_RELA:
> 
>@@ -3929,6 +3937,7 @@ m32r_elf_check_relocs (bfd *abfd,
>                && (sec->flags & SEC_ALLOC) != 0
> 	       && ((r_type != R_M32R_26_PCREL_RELA
>                     && r_type != R_M32R_18_PCREL_RELA
>+                    && r_type != R_M32R_10_PCREL_RELA
>                     && r_type != R_M32R_REL32)
> 	           || (h != NULL
> 		       && (! info->symbolic
>@@ -4020,6 +4029,7 @@ m32r_elf_check_relocs (bfd *abfd,
>               p->count += 1;
>               if (ELF32_R_TYPE (rel->r_info) == R_M32R_26_PCREL_RELA
> 		  || ELF32_R_TYPE (rel->r_info) == R_M32R_REL32
>+		  || ELF32_R_TYPE (rel->r_info) == R_M32R_10_PCREL_RELA
>                   || ELF32_R_TYPE (rel->r_info) == R_M32R_18_PCREL_RELA)
>                 p->pc_count += 1;
>             }
>
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: elf32-m32r.c.patch2
URL: <https://sourceware.org/pipermail/binutils/attachments/20051124/7a4a33be/attachment.ksh>


More information about the Binutils mailing list