H8 ld -r fix, and trunk 2000-04-03 patch.

This commit is contained in:
Alan Modra
2000-11-07 05:49:30 +00:00
parent aea4709d3b
commit a67da8a791
2 changed files with 19 additions and 4 deletions

View File

@@ -1,3 +1,11 @@
2000-11-07 Alan Modra <alan@linuxcare.com.au>
* coff-h8300.c (special): Adjust reloc address.
From mainline 2000-04-03 Kazu Hirata <kazu@hxi.com>
* coff-h8300.c (h8300_reloc16_extra_cases): Add bsr:16 -> bsr:8 to
the R_PCRWORD_B case.
2000-11-05 Philip Blundell <philb@gnu.org> 2000-11-05 Philip Blundell <philb@gnu.org>
* elf32-arm.h (elf32_arm_merge_private_bfd_data): Always permit * elf32-arm.h (elf32_arm_merge_private_bfd_data): Always permit

View File

@@ -192,14 +192,14 @@ h8300_coff_link_hash_table_create (abfd)
return &ret->root.root; return &ret->root.root;
} }
/* special handling for H8/300 relocs. /* Special handling for H8/300 relocs.
We only come here for pcrel stuff and return normally if not an -r link. We only come here for pcrel stuff and return normally if not an -r link.
When doing -r, we can't do any arithmetic for the pcrel stuff, because When doing -r, we can't do any arithmetic for the pcrel stuff, because
the code in reloc.c assumes that we can manipulate the targets of the code in reloc.c assumes that we can manipulate the targets of
the pcrel branches. This isn't so, since the H8/300 can do relaxing, the pcrel branches. This isn't so, since the H8/300 can do relaxing,
which means that the gap after the instruction may not be enough to which means that the gap after the instruction may not be enough to
contain the offset required for the branch, so we have to use the only contain the offset required for the branch, so we have to use only
the addend until the final link */ the addend until the final link. */
static bfd_reloc_status_type static bfd_reloc_status_type
special (abfd, reloc_entry, symbol, data, input_section, output_bfd, special (abfd, reloc_entry, symbol, data, input_section, output_bfd,
@@ -215,6 +215,8 @@ special (abfd, reloc_entry, symbol, data, input_section, output_bfd,
if (output_bfd == (bfd *) NULL) if (output_bfd == (bfd *) NULL)
return bfd_reloc_continue; return bfd_reloc_continue;
/* Adjust the reloc address to that in the output section. */
reloc_entry->address += input_section->output_offset;
return bfd_reloc_ok; return bfd_reloc_ok;
} }
@@ -902,6 +904,11 @@ h8300_reloc16_extra_cases (abfd, link_info, link_order, reloc, data, src_ptr,
bfd_put_8 (abfd, tmp, data + dst_address - 2); bfd_put_8 (abfd, tmp, data + dst_address - 2);
break; break;
case 0x5c:
/* bsr:16 -> bsr:8 */
bfd_put_8 (abfd, 0x55, data + dst_address - 2);
break;
default: default:
abort (); abort ();
} }