[PATCH] Re: binutils: "unexpected reloc type 0x17" on sparc
Ian Lance Taylor
ian@zembu.com
Fri Jun 29 09:59:00 GMT 2001
Jakub Jelinek <jakub@redhat.com> writes:
> @@ -1463,6 +1460,24 @@ elf32_sparc_relocate_section (output_bfd
> outrel.r_offset += (input_section->output_section->vma
> + input_section->output_offset);
>
> + /* Optimize unaligned reloc usage now that we know where
> + it finally resides. */
> + switch (r_type)
> + {
> + case R_SPARC_16:
> + if (outrel.r_offset & 1) r_type = R_SPARC_UA16;
> + break;
> + case R_SPARC_UA16:
> + if (!(outrel.r_offset & 1)) r_type = R_SPARC_16;
> + break;
> + case R_SPARC_32:
> + if (outrel.r_offset & 3) r_type = R_SPARC_UA32;
> + break;
> + case R_SPARC_UA32:
> + if (!(outrel.r_offset & 3)) r_type = R_SPARC_32;
> + break;
> + }
> +
> if (skip)
> memset (&outrel, 0, sizeof outrel);
> /* h->dynindx may be -1 if the symbol was marked to
I believe that to be fully correct here you must consider the
alignment of the program segment into which the output section is
being placed. This can be approximated by considering the alignment
of the output section.
Ian
More information about the Libc-alpha
mailing list