* bfd/amigaos.c (write_words): Add protototype.
(write_words): New function to write 16bit words.
(amiga_write_section_contents): Use write_words to write 16bit relocs.
* bfd/amigaos.c (parse_archive_units): Add support for HUNK_RELOC32SHORT.
Parse HUNK_RELRELOC32 the same way.
(amiga_handle_rest): Check for HUNK_RELRELOC32 when reading short data.
(read_raw_relocs): Likewise.
where possible.
* bfd/amigaos.c (reloc_types array): Add HUNK_ABSRELOC16 and HUNK_RELRELOC32.
(determine_type): Update for layout change of reloc_types array.
* bfd/amigaos.c (reloc enum): Add values for 8-bit and 16-bit absolute relocs.
(howto_table): Add entries for the new enum values.
(howto_for_raw_reloc): Handle HUNK_ABSRELOC16.
(howto_for_reloc): Handle EXT_ABSREF9 and EXT_ABSREF16.
(parse_archive_units): Likewise.
(amiga_handle_rest): Likewise.
(amiga_write_symbols): Likewise.
(amiga_slurp_armap): Likewise.
(amiga_bfd_reloc_type_lookup): Map normal 8-bit and 16-bit BFD relocs to
their absolute amigaos variants.
* gas/config/tc-m68k.c (TE_AMIGA): Provide a zero default.
(FRAME): Check TE_AMIGA for zero/non-zero value.
(m68k_init_after_args): Tweak m68k_aout_machtype for TE_AMIGA case.
* gas/config/obj-aout.h (N_REGISTER): Use 18 as fake N_TYPE for SEG_REGISTER.
* gas/config/obj-aout.c (N_TYPE_seg): Move SEG_REGISTER to its new position.
* gas/symbols.h (N_REGISTER): Do not redefine if already present.
The broken code used the wrong structure for the size calculation. This bug was
hidden on 32bit hosts since both structures have the same size on such hosts.
The AmigaOS program loader refuses to load programs with a defective structure.
[gas]
2010-09-09 Gunther Nikl <gnikl@users.sourceforge.net>
* gas/config/tc-m68k.c (tc_gen_reloc): Handle references to defined
weak symbols first if generating an a.out object.
2009-10-013 Vincent Riviere <vincent.riviere@freesbee.fr>
PR gas/3041
* config/tc-m68k.c (tc_gen_reloc): Fix addend for relocations
located in data section an referencing a weak symbol.
2007-05-15 Vincent Riviere <vincent.riviere@freesbee.fr>
PR gas/3041
* config/tc-m68k.c (relaxable_symbol): Make sure that the correct
addend is stored for relocs against weak symbols.
(md_apply_fix): So not loose track of addend for relocs against
weak symbols.
2007-05-03 Vincent Riviere <vincent.riviere@freesbee.fr>
Nick Clifton <nickc@redhat.com>
PR gas/3041
* config/tc-m68k.c (relaxable_symbol): Do not relax weak symbols.
(tc_gen_reloc): Adjust the addend of relocs against weak symbols.
(md_apply_fix): Put zero values into the frags referencing weak
symbols.
[bfd]
2007-05-03 Vincent Riviere <vincent.riviere@freesbee.fr>
Nick Clifton <nickc@redhat.com>
PR gas/3041
* aoutx.h (swap_std_reloc_out): Treat relocs against weak symbols
in the same way as relocs against external symbols.
Weak fixes for the non-bfd assembler:
* gas/config/tc-m68k.h (S_IS_WEAK): Define for !BFD_ASSEMBLER.
* gas/config/tc-m68k.c (tc_aout_fix_to_chars): Check weak symbol state.
* gas/write.c (fixup_segment): Treat a weak symbol as undefined.
* gas/config/aout_gnu.h (BYTES_IN_WORD): New define.
(struct exec_bytes): Use it.
(EXEC_BYTES_SIZE): Likewise.
* gas/config/obj-aout.c (CROSS_COMPILE): Convert to a compile time constant
of 0 or 1.
(obj_header_append): Use "struct exec_bytes" when cross compiling.
(obj_symbol_to_chars): Output symbol data with a local "struct nlist_bytes"
utilizing BYTES_IN_WORD.
(obj_crawl_symbol_chain): Ignore symbols without a valid name like BFD.
(obj_emit_strings): Use BYTES_IN_WORD to output string table size when
cross compiling.
Suppress symbols without a valid name like BFD.
* gas/write.c (write_object_file): Replace "sizeof (string_byte_count)" with
BYTES_IN_WORD.
"reloc_count". Better error message for a relocation against an omitted
section. Replace BFD_FAIL with "bfd_set_error/return FALSE" since linking
cannot succeed. Prevent a possible endless loop when writing relocations.
Fail link operation if not all relocations could be written.
unused values.
* ld/emulparams/amiga_bss.sh (PAGE_SIZE, NONPAGED_TEXT_START_ADDR): Likewise.
* ld/scripttempl/amiga.sc (___machtype): Move out of .text section and drop
ABSOLUTE.
(___text_size): Move out of .text section and replace ABSOLUTE with SIZEOF
to compute its value.
(___data_size): Move out of .data section and replace ABSOLUTE with SIZEOF
to compute its value.
(___bss_size): Move out of .bss section and replace ABSOLUTE with SIZEOF
to compute its value.
* ld/scripttempl/amiga_bss.sc (___machtype): Move out of .text section and
drop ABSOLUTE.
(___text_size): Move out of .text section and replace ABSOLUTE with SIZEOF
to compute its value.
(___data_size): Move out of .data section and replace ABSOLUTE with SIZEOF
on .data and .bss to compute its value.
(___bss_size): Move out of .data section and drop useless ABSOLUTE.
(__edata): Move to its expected place at the end of .data section.
(__bss_start): Move to its expected place at the start of .bss section.
to really catch an amiga link when computing maximal symbol alignment.
(_bfd_generic_link_add_one_symbol): Likewise. Add the same kludge to case
'BIG' as used for case 'COM'.
(link_add_symbols): New wrapper function to handle symbols the same way
as the amiga backend by using a generic linker function when doing a
final link. This makes --wrap option of ld work.