H8S Bug when using -relax for h8300-elf
Paul
paulc@senet.com.au
Sun May 4 02:06:00 GMT 2003
>
>
>Yes - my patch just stops the linker from core dumping, it does not
>implement relaxing for this form of addressing mode. That is because
>I am completely unfamiliar with the H8300 instruction set, so I do not
>know how the instruction should be relaxed.
>
>If you would care to look over the code in elf32_h8_relax_section()
>you may be able to work out what needs to be done. I assume that this
>part of the patch:
>
>> ! case 0x20:
>> ! case 0xa0:
>> ! /* Skip 32bit versions. */
>> ! skip = TRUE;
>> ! break;
>
>needs to be changed to be similar to this part:
>
>> ! case 0x00:
>> ! bfd_put_8 (abfd, (code & 0xf) | 0x20,
>> contents + irel->r_offset - 2);
>> ! break;
>> ! case 0x80:
>> ! bfd_put_8 (abfd, (code & 0xf) | 0x30,
>> contents + irel->r_offset - 2);
>> ! break;
>
>Cheers
> Nick
>
mov.b @aa:8,Rd --> 2<rd> <abs:8>
mov.b @aa:16,Rd --> 6a 0<rd> <abs:16>
mov.b @aa:32,Rd --> 6a 2<rd> <abs:32>
So the changes are
case 0x20:
> ! bfd_put_8 (abfd, (code & 0xf) | 0x20,
> contents + irel->r_offset - 2);
> ! break;
case 0xa0:
> ! bfd_put_8 (abfd, (code & 0xf) | 0x30,
> contents + irel->r_offset - 2);
> ! break;
0x00 and 0x80 only apply to 16 bit address formats.
BUT later on only two bytes are deleted when four bytes should be deleted
and what about irel->r_offset it has now moved back one location. Should
irel->r_offset be changed? Should it be changed before the delete
bytes call or after?
Paul Clarke
More information about the Binutils
mailing list