/* BFD back-end for TMS320C30 a.out binaries.
- Copyright 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+ Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004
+ Free Software Foundation, Inc.
Contributed by Steven Haworth (steve@pm.cse.rmit.edu.au)
This file is part of BFD, the Binary File Descriptor library.
#define TARGET_IS_BIG_ENDIAN_P
#define N_HEADER_IN_TEXT(x) 1
-#define BYTES_IN_WORD 4
#define TEXT_START_ADDR 1024
#define TARGET_PAGE_SIZE 128
#define SEGMENT_SIZE TARGET_PAGE_SIZE
static bfd_reloc_status_type tic30_aout_final_link_relocate
PARAMS ((reloc_howto_type *, bfd *, asection *, bfd_byte *, bfd_vma,
bfd_vma, bfd_vma));
-static const bfd_target *tic30_aout_object_p PARAMS ((bfd *));
-static boolean tic30_aout_write_object_contents PARAMS ((bfd *));
-static boolean tic30_aout_set_sizes PARAMS ((bfd *));
-static const bfd_target * tic30_aout_callback PARAMS ((bfd *));
-static boolean MY_bfd_copy_private_section_data
+static const bfd_target *tic30_aout_object_p
+ PARAMS ((bfd *));
+static bfd_boolean tic30_aout_write_object_contents
+ PARAMS ((bfd *));
+static bfd_boolean tic30_aout_set_sizes
+ PARAMS ((bfd *));
+static const bfd_target * tic30_aout_callback
+ PARAMS ((bfd *));
+static bfd_boolean MY_bfd_copy_private_section_data
PARAMS ((bfd *, asection *, bfd *, asection *));
-static boolean MY_bfd_final_link PARAMS ((bfd *, struct bfd_link_info *));
+static bfd_boolean MY_bfd_final_link
+ PARAMS ((bfd *, struct bfd_link_info *));
reloc_howto_type * tic30_aout_reloc_type_lookup
PARAMS ((bfd *, bfd_reloc_code_real_type));
enum machine_type tic30_aout_machine_type
- PARAMS ((enum bfd_architecture, unsigned long, boolean *));
-boolean tic30_aout_set_arch_mach
+ PARAMS ((enum bfd_architecture, unsigned long, bfd_boolean *));
+bfd_boolean tic30_aout_set_arch_mach
PARAMS ((bfd *, enum bfd_architecture, unsigned long));
#define MY_reloc_howto(BFD, REL, IN, EX, PC) \
reloc_howto_type tic30_aout_howto_table[] =
{
EMPTY_HOWTO (-1),
- HOWTO (1, 2, 1, 16, false, 0, 0, tic30_aout_fix_16,
- "16", false, 0x0000FFFF, 0x0000FFFF, false),
- HOWTO (2, 2, 2, 24, false, 0, complain_overflow_bitfield, NULL,
- "24", false, 0x00FFFFFF, 0x00FFFFFF, false),
- HOWTO (3, 18, 3, 24, false, 0, complain_overflow_bitfield, NULL,
- "LDP", false, 0x00FF0000, 0x000000FF, false),
- HOWTO (4, 2, 4, 32, false, 0, complain_overflow_bitfield, tic30_aout_fix_32,
- "32", false, 0xFFFFFFFF, 0xFFFFFFFF, false),
- HOWTO (5, 2, 1, 16, true, 0, complain_overflow_signed,
- tic30_aout_fix_pcrel_16, "PCREL", true, 0x0000FFFF, 0x0000FFFF, true),
+ HOWTO (1, 2, 1, 16, FALSE, 0, 0, tic30_aout_fix_16,
+ "16", FALSE, 0x0000FFFF, 0x0000FFFF, FALSE),
+ HOWTO (2, 2, 2, 24, FALSE, 0, complain_overflow_bitfield, NULL,
+ "24", FALSE, 0x00FFFFFF, 0x00FFFFFF, FALSE),
+ HOWTO (3, 18, 3, 24, FALSE, 0, complain_overflow_bitfield, NULL,
+ "LDP", FALSE, 0x00FF0000, 0x000000FF, FALSE),
+ HOWTO (4, 2, 4, 32, FALSE, 0, complain_overflow_bitfield, tic30_aout_fix_32,
+ "32", FALSE, 0xFFFFFFFF, 0xFFFFFFFF, FALSE),
+ HOWTO (5, 2, 1, 16, TRUE, 0, complain_overflow_signed,
+ tic30_aout_fix_pcrel_16, "PCREL", TRUE, 0x0000FFFF, 0x0000FFFF, TRUE),
EMPTY_HOWTO (-1),
EMPTY_HOWTO (-1),
EMPTY_HOWTO (-1),
};
extern reloc_howto_type *NAME (aout, reloc_type_lookup)
- PARAMS ((bfd *, bfd_reloc_code_real_type));
+ PARAMS ((bfd *, bfd_reloc_code_real_type));
reloc_howto_type *
tic30_aout_reloc_type_lookup (abfd, code)
bfd_byte *location;
{
bfd_vma x;
- boolean overflow;
+ bfd_boolean overflow;
if (howto->size < 0)
relocation = -relocation;
break;
}
- overflow = false;
+ overflow = FALSE;
if (howto->complain_on_overflow != complain_overflow_dont)
{
bfd_signed_vma reloc_signed_max = (1 << (howto->bitsize - 1)) - 1;
bfd_signed_vma reloc_signed_min = ~reloc_signed_max;
if (signed_check > reloc_signed_max || signed_check < reloc_signed_min)
- overflow = true;
+ overflow = TRUE;
}
break;
case complain_overflow_unsigned:
{
bfd_vma reloc_unsigned_max = (((1 << (howto->bitsize - 1)) - 1) << 1) | 1;
if (check > reloc_unsigned_max)
- overflow = true;
+ overflow = TRUE;
}
break;
case complain_overflow_bitfield:
if ((check & ~reloc_bits) != 0
&& (((bfd_vma) signed_check & ~reloc_bits)
!= ((bfd_vma) -1 & ~reloc_bits)))
- overflow = true;
+ overflow = TRUE;
}
break;
default:
section contents, and copy_private_bfd_data is not called until
after the section contents have been set. */
-static boolean
+static bfd_boolean
MY_bfd_copy_private_section_data (ibfd, isec, obfd, osec)
bfd *ibfd;
asection *isec ATTRIBUTE_UNUSED;
{
if (bfd_get_flavour (obfd) == bfd_target_aout_flavour)
obj_aout_subformat (obfd) = obj_aout_subformat (ibfd);
- return true;
+ return TRUE;
}
/* Write an object file.
Section contents have already been written. We write the
file header, symbols, and relocation. */
-static boolean
+static bfd_boolean
tic30_aout_write_object_contents (abfd)
bfd *abfd;
{
{
bfd_size_type amt;
if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0)
- return false;
+ return FALSE;
amt = adata (abfd).exec_bytes_size;
if (bfd_bwrite ((PTR) &exec_bytes, amt, abfd) != amt)
- return false;
+ return FALSE;
}
/* Now write out reloc info, followed by syms and strings. */
&& bfd_get_symcount (abfd) != 0)
{
if (bfd_seek (abfd, (file_ptr) (N_SYMOFF (*execp)), SEEK_SET) != 0)
- return false;
+ return FALSE;
if (!NAME (aout, write_syms) (abfd))
- return false;
+ return FALSE;
}
if (bfd_seek (abfd, (file_ptr) (N_TRELOFF (*execp)), SEEK_SET) != 0)
- return false;
+ return FALSE;
if (!NAME (aout, squirt_out_relocs) (abfd, obj_textsec (abfd)))
- return false;
+ return FALSE;
if (bfd_seek (abfd, (file_ptr) (N_DRELOFF (*execp)), SEEK_SET) != 0)
- return false;
+ return FALSE;
if (!NAME (aout, squirt_out_relocs) (abfd, obj_datasec (abfd)))
- return false;
+ return FALSE;
}
- return true;
+ return TRUE;
}
-static boolean
+static bfd_boolean
tic30_aout_set_sizes (abfd)
bfd *abfd;
{
adata (abfd).exec_bytes_size = EXEC_BYTES_SIZE;
- return true;
+ return TRUE;
}
#ifndef MY_final_link_callback
/* Final link routine. We need to use a call back to get the correct
offsets in the output file. */
-static boolean
+static bfd_boolean
MY_bfd_final_link (abfd, info)
bfd *abfd;
struct bfd_link_info *info;
tic30_aout_machine_type (arch, machine, unknown)
enum bfd_architecture arch;
unsigned long machine ATTRIBUTE_UNUSED;
- boolean *unknown;
+ bfd_boolean *unknown;
{
enum machine_type arch_flags;
arch_flags = M_UNKNOWN;
- *unknown = true;
+ *unknown = TRUE;
switch (arch)
{
case bfd_arch_tic30:
- *unknown = false;
+ *unknown = FALSE;
break;
default:
arch_flags = M_UNKNOWN;
}
if (arch_flags != M_UNKNOWN)
- *unknown = false;
+ *unknown = FALSE;
return arch_flags;
}
-boolean
+bfd_boolean
tic30_aout_set_arch_mach (abfd, arch, machine)
bfd *abfd;
enum bfd_architecture arch;
unsigned long machine;
{
if (!bfd_default_set_arch_mach (abfd, arch, machine))
- return false;
+ return FALSE;
if (arch != bfd_arch_unknown)
{
- boolean unknown;
+ bfd_boolean unknown;
tic30_aout_machine_type (arch, machine, &unknown);
if (unknown)
- return false;
+ return FALSE;
}
obj_reloc_entry_size (abfd) = RELOC_STD_SIZE;
return (*aout_backend_info (abfd)->set_sizes) (abfd);
#endif
#ifndef MY_bfd_debug_info_accumulate
#define MY_bfd_debug_info_accumulate \
- (void (*) PARAMS ((bfd*, struct sec *))) bfd_void
+ (void (*) PARAMS ((bfd*, struct bfd_section *))) bfd_void
#endif
#ifndef MY_core_file_failing_command
#ifndef MY_get_symtab_upper_bound
#define MY_get_symtab_upper_bound NAME(aout,get_symtab_upper_bound)
#endif
-#ifndef MY_get_symtab
-#define MY_get_symtab NAME(aout,get_symtab)
+#ifndef MY_canonicalize_symtab
+#define MY_canonicalize_symtab NAME(aout,canonicalize_symtab)
#endif
#ifndef MY_get_reloc_upper_bound
#define MY_get_reloc_upper_bound NAME(aout,get_reloc_upper_bound)
#ifndef MY_bfd_merge_sections
#define MY_bfd_merge_sections bfd_generic_merge_sections
#endif
+#ifndef MY_bfd_is_group_section
+#define MY_bfd_is_group_section bfd_generic_is_group_section
+#endif
+#ifndef MY_bfd_discard_group
+#define MY_bfd_discard_group bfd_generic_discard_group
+#endif
#ifndef MY_bfd_reloc_type_lookup
#define MY_bfd_reloc_type_lookup tic30_aout_reloc_type_lookup
#endif
#ifndef MY_bfd_link_add_symbols
#define MY_bfd_link_add_symbols NAME(aout,link_add_symbols)
#endif
+#ifndef MY_bfd_link_just_syms
+#define MY_bfd_link_just_syms _bfd_generic_link_just_syms
+#endif
#ifndef MY_bfd_link_split_section
#define MY_bfd_link_split_section _bfd_generic_link_split_section
#endif
#define MY_bfd_copy_private_symbol_data _bfd_generic_bfd_copy_private_symbol_data
#endif
+#ifndef MY_bfd_copy_private_header_data
+#define MY_bfd_copy_private_header_data _bfd_generic_bfd_copy_private_header_data
+#endif
+
#ifndef MY_bfd_print_private_bfd_data
#define MY_bfd_print_private_bfd_data _bfd_generic_bfd_print_private_bfd_data
#endif
#define MY_canonicalize_dynamic_symtab \
_bfd_nodynamic_canonicalize_dynamic_symtab
#endif
+#ifndef MY_get_synthetic_symtab
+#define MY_get_synthetic_symtab \
+ _bfd_nodynamic_get_synthetic_symtab
+#endif
#ifndef MY_get_dynamic_reloc_upper_bound
#define MY_get_dynamic_reloc_upper_bound \
_bfd_nodynamic_get_dynamic_reloc_upper_bound