/* BFD back-end for TMS320C30 a.out binaries.
- Copyright 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
+ Copyright 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
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
#define DEFAULT_ARCH bfd_arch_tic30
#define ARCH_SIZE 32
-#define MY(OP) CAT(tic30_aout_,OP)
+/* Do not "beautify" the CONCAT* macro args. Traditional C will not
+ remove whitespace added here, and thus will fail to concatenate
+ the tokens. */
+#define MY(OP) CONCAT2 (tic30_aout_,OP)
#define TARGETNAME "a.out-tic30"
-#define NAME(x,y) CAT3(tic30_aout,_32_,y)
+#define NAME(x,y) CONCAT3 (tic30_aout,_32_,y)
#include "bfd.h"
#include "sysdep.h"
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 PARAMS ((bfd *, asection *, bfd *, asection *));
-static 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 ((bfd *, enum bfd_architecture, unsigned long));
-
-#define MY_reloc_howto(BFD,REL,IN,EX,PC) tic30_aout_reloc_howto(BFD,REL,&IN,&EX,&PC)
+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 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, 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) \
+ tic30_aout_reloc_howto(BFD, REL, &IN, &EX, &PC)
#define MY_final_link_relocate tic30_aout_final_link_relocate
#define MY_object_p tic30_aout_object_p
#define MY_mkobject NAME(aout,mkobject)
#define MY_finish_dynamic_link 0
#endif
-static CONST struct aout_backend_data tic30_aout_backend_data =
+static const struct aout_backend_data tic30_aout_backend_data =
{
MY_zmagic_contiguous,
MY_text_includes_header,
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)
#ifdef SET_ARCH_MACH
SET_ARCH_MACH (abfd, *execp);
#else
- bfd_default_set_arch_mach (abfd, DEFAULT_ARCH, 0);
+ bfd_default_set_arch_mach (abfd, DEFAULT_ARCH, 0L);
#endif
/* Now that we know the architecture, set the alignments of the
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:
{
bfd_vma reloc_bits = (((1 << (howto->bitsize - 1)) - 1) << 1) | 1;
- if ((check & ~reloc_bits) != 0 && (((bfd_vma) signed_check & ~reloc_bits) != (-1 & ~reloc_bits)))
- overflow = true;
+ if ((check & ~reloc_bits) != 0
+ && (((bfd_vma) signed_check & ~reloc_bits)
+ != ((bfd_vma) -1 & ~reloc_bits)))
+ overflow = TRUE;
}
break;
default:
struct external_exec exec_bytes; /* Raw exec header from file. */
struct internal_exec exec; /* Cleaned-up exec header. */
const bfd_target *target;
+ bfd_size_type amt = EXEC_BYTES_SIZE;
- if (bfd_read ((PTR) & exec_bytes, 1, EXEC_BYTES_SIZE, abfd)
- != EXEC_BYTES_SIZE)
+ if (bfd_bread ((PTR) &exec_bytes, amt, abfd) != amt)
{
if (bfd_get_error () != bfd_error_system_call)
bfd_set_error (bfd_error_wrong_format);
#ifdef SWAP_MAGIC
exec.a_info = SWAP_MAGIC (exec_bytes.e_info);
#else
- exec.a_info = bfd_h_get_32 (abfd, exec_bytes.e_info);
+ exec.a_info = H_GET_32 (abfd, exec_bytes.e_info);
#endif /* SWAP_MAGIC */
if (N_BADMAG (exec))
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;
{
if (adata (abfd).exec_bytes_size > 0)
{
+ bfd_size_type amt;
if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0)
- return false;
- if (bfd_write ((PTR) & exec_bytes, 1, adata (abfd).exec_bytes_size, abfd) != adata (abfd).exec_bytes_size)
- return false;
+ return FALSE;
+ amt = adata (abfd).exec_bytes_size;
+ if (bfd_bwrite ((PTR) &exec_bytes, amt, abfd) != amt)
+ 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);
#ifndef MY_bfd_merge_sections
#define MY_bfd_merge_sections bfd_generic_merge_sections
#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_hash_table_create
#define MY_bfd_link_hash_table_create NAME(aout,link_hash_table_create)
#endif
+#ifndef MY_bfd_link_hash_table_free
+#define MY_bfd_link_hash_table_free _bfd_generic_link_hash_table_free
+#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