From cf9ab45bc0bde753db9d09b757d7e045e568e558 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Tue, 6 Aug 2002 05:52:29 +0000 Subject: [PATCH] * coff-rs6000.c: Formatting fixes. (xcoff_calculate_relocation): Use PARAMS in declaration. (xcoff_complain_overflow): Likewise. (xcoff_ppc_relocate_section): Use old-style function pointer call. (bfd_xcoff_backend_data): Remove useless comments. (rs6000coff_vec): Likewise. (bfd_pmac_xcoff_backend_data): Likewise. (pmac_xcoff_vec): Likewise. * coff64-rs6000.c: Formatting fixes. (xcoff64_calculate_relocation): Use PARAMS in declaration. (xcoff64_ppc_relocate_section): Use old-style function pointer call. (bfd_xcoff_backend_data): Remove useless comments. (rs6000coff64_vec): Likewise. (bfd_xcoff_aix5_backend_data): Likewise. (aix5coff64_vec): Likewise. --- bfd/ChangeLog | 18 + bfd/coff-rs6000.c | 2202 +++++++++++++++++++++++++-------------------------- bfd/coff64-rs6000.c | 1258 ++++++++++++++--------------- 3 files changed, 1717 insertions(+), 1761 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 861df1d..f87d703 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,5 +1,23 @@ 2002-08-06 Alan Modra + * coff-rs6000.c: Formatting fixes. + (xcoff_calculate_relocation): Use PARAMS in declaration. + (xcoff_complain_overflow): Likewise. + (xcoff_ppc_relocate_section): Use old-style function pointer call. + (bfd_xcoff_backend_data): Remove useless comments. + (rs6000coff_vec): Likewise. + (bfd_pmac_xcoff_backend_data): Likewise. + (pmac_xcoff_vec): Likewise. + * coff64-rs6000.c: Formatting fixes. + (xcoff64_calculate_relocation): Use PARAMS in declaration. + (xcoff64_ppc_relocate_section): Use old-style function pointer call. + (bfd_xcoff_backend_data): Remove useless comments. + (rs6000coff64_vec): Likewise. + (bfd_xcoff_aix5_backend_data): Likewise. + (aix5coff64_vec): Likewise. + +2002-08-06 Alan Modra + * coff-rs6000.c (xcoff_howto_table): Revert some of last change to mask entries. Use complain_overflow_dont for R_REF. (xcoff_reloc_type_ba): Revert last change. diff --git a/bfd/coff-rs6000.c b/bfd/coff-rs6000.c index b685149..b97813d 100644 --- a/bfd/coff-rs6000.c +++ b/bfd/coff-rs6000.c @@ -83,7 +83,7 @@ void xcoff_rtype2howto PARAMS ((arelent *, struct internal_reloc *)); #define coff_bfd_reloc_type_lookup _bfd_xcoff_reloc_type_lookup #ifdef AIX_CORE extern const bfd_target * rs6000coff_core_p PARAMS ((bfd *abfd)); -extern boolean rs6000coff_core_file_matches_executable_p +extern boolean rs6000coff_core_file_matches_executable_p PARAMS ((bfd *cbfd, bfd *ebfd)); extern char *rs6000coff_core_file_failing_command PARAMS ((bfd *abfd)); extern int rs6000coff_core_file_failing_signal PARAMS ((bfd *abfd)); @@ -148,16 +148,16 @@ static bfd_vma xcoff_loader_symbol_offset PARAMS ((bfd *, struct internal_ldhdr *)); static bfd_vma xcoff_loader_reloc_offset PARAMS ((bfd *, struct internal_ldhdr *)); -static boolean xcoff_generate_rtinit - PARAMS((bfd *, const char *, const char *, boolean)); -static boolean do_pad PARAMS((bfd *, unsigned int)); -static boolean do_copy PARAMS((bfd *, bfd *)); +static boolean xcoff_generate_rtinit + PARAMS ((bfd *, const char *, const char *, boolean)); +static boolean do_pad PARAMS ((bfd *, unsigned int)); +static boolean do_copy PARAMS ((bfd *, bfd *)); static boolean do_shared_object_padding PARAMS ((bfd *, bfd *, ufile_ptr *, int)); /* Relocation functions */ static boolean xcoff_reloc_type_br PARAMS ((XCOFF_RELOC_FUNCTION_ARGS)); -static boolean xcoff_complain_overflow_dont_func +static boolean xcoff_complain_overflow_dont_func PARAMS ((XCOFF_COMPLAIN_FUNCTION_ARGS)); static boolean xcoff_complain_overflow_bitfield_func PARAMS ((XCOFF_COMPLAIN_FUNCTION_ARGS)); @@ -167,40 +167,40 @@ static boolean xcoff_complain_overflow_unsigned_func PARAMS ((XCOFF_COMPLAIN_FUNCTION_ARGS)); boolean (*xcoff_calculate_relocation[XCOFF_MAX_CALCULATE_RELOCATION]) - (XCOFF_RELOC_FUNCTION_ARGS) = + PARAMS ((XCOFF_RELOC_FUNCTION_ARGS)) = { - xcoff_reloc_type_pos, /* R_POS (0x00) */ - xcoff_reloc_type_neg, /* R_NEG (0x01) */ - xcoff_reloc_type_rel, /* R_REL (0x02) */ - xcoff_reloc_type_toc, /* R_TOC (0x03) */ + xcoff_reloc_type_pos, /* R_POS (0x00) */ + xcoff_reloc_type_neg, /* R_NEG (0x01) */ + xcoff_reloc_type_rel, /* R_REL (0x02) */ + xcoff_reloc_type_toc, /* R_TOC (0x03) */ xcoff_reloc_type_fail, /* R_RTB (0x04) */ - xcoff_reloc_type_toc, /* R_GL (0x05) */ - xcoff_reloc_type_toc, /* R_TCL (0x06) */ - xcoff_reloc_type_fail, /* (0x07) */ - xcoff_reloc_type_ba, /* R_BA (0x08) */ - xcoff_reloc_type_fail, /* (0x09) */ - xcoff_reloc_type_br, /* R_BR (0x0a) */ - xcoff_reloc_type_fail, /* (0x0b) */ - xcoff_reloc_type_pos, /* R_RL (0x0c) */ - xcoff_reloc_type_pos, /* R_RLA (0x0d) */ - xcoff_reloc_type_fail, /* (0x0e) */ + xcoff_reloc_type_toc, /* R_GL (0x05) */ + xcoff_reloc_type_toc, /* R_TCL (0x06) */ + xcoff_reloc_type_fail, /* (0x07) */ + xcoff_reloc_type_ba, /* R_BA (0x08) */ + xcoff_reloc_type_fail, /* (0x09) */ + xcoff_reloc_type_br, /* R_BR (0x0a) */ + xcoff_reloc_type_fail, /* (0x0b) */ + xcoff_reloc_type_pos, /* R_RL (0x0c) */ + xcoff_reloc_type_pos, /* R_RLA (0x0d) */ + xcoff_reloc_type_fail, /* (0x0e) */ xcoff_reloc_type_noop, /* R_REF (0x0f) */ - xcoff_reloc_type_fail, /* (0x10) */ - xcoff_reloc_type_fail, /* (0x11) */ - xcoff_reloc_type_toc, /* R_TRL (0x12) */ - xcoff_reloc_type_toc, /* R_TRLA (0x13) */ + xcoff_reloc_type_fail, /* (0x10) */ + xcoff_reloc_type_fail, /* (0x11) */ + xcoff_reloc_type_toc, /* R_TRL (0x12) */ + xcoff_reloc_type_toc, /* R_TRLA (0x13) */ xcoff_reloc_type_fail, /* R_RRTBI (0x14) */ xcoff_reloc_type_fail, /* R_RRTBA (0x15) */ - xcoff_reloc_type_ba, /* R_CAI (0x16) */ + xcoff_reloc_type_ba, /* R_CAI (0x16) */ xcoff_reloc_type_crel, /* R_CREL (0x17) */ - xcoff_reloc_type_ba, /* R_RBA (0x18) */ - xcoff_reloc_type_ba, /* R_RBAC (0x19) */ - xcoff_reloc_type_br, /* R_RBR (0x1a) */ - xcoff_reloc_type_ba, /* R_RBRC (0x1b) */ + xcoff_reloc_type_ba, /* R_RBA (0x18) */ + xcoff_reloc_type_ba, /* R_RBAC (0x19) */ + xcoff_reloc_type_br, /* R_RBR (0x1a) */ + xcoff_reloc_type_ba, /* R_RBRC (0x1b) */ }; boolean (*xcoff_complain_overflow[XCOFF_MAX_COMPLAIN_OVERFLOW]) - (XCOFF_COMPLAIN_FUNCTION_ARGS) = + PARAMS ((XCOFF_COMPLAIN_FUNCTION_ARGS)) = { xcoff_complain_overflow_dont_func, xcoff_complain_overflow_bitfield_func, @@ -302,7 +302,7 @@ _bfd_xcoff_is_local_label_name (abfd, name) void _bfd_xcoff_swap_sym_in (abfd, ext1, in1) - bfd *abfd; + bfd *abfd; PTR ext1; PTR in1; { @@ -311,7 +311,7 @@ _bfd_xcoff_swap_sym_in (abfd, ext1, in1) if (ext->e.e_name[0] != 0) { - memcpy(in->_n._n_name, ext->e.e_name, SYMNMLEN); + memcpy (in->_n._n_name, ext->e.e_name, SYMNMLEN); } else { @@ -328,16 +328,16 @@ _bfd_xcoff_swap_sym_in (abfd, ext1, in1) unsigned int _bfd_xcoff_swap_sym_out (abfd, inp, extp) - bfd *abfd; - PTR inp; - PTR extp; + bfd *abfd; + PTR inp; + PTR extp; { struct internal_syment *in = (struct internal_syment *)inp; SYMENT *ext =(SYMENT *)extp; if (in->_n._n_name[0] != 0) { - memcpy(ext->e.e_name, in->_n._n_name, SYMNMLEN); + memcpy (ext->e.e_name, in->_n._n_name, SYMNMLEN); } else { @@ -355,13 +355,13 @@ _bfd_xcoff_swap_sym_out (abfd, inp, extp) void _bfd_xcoff_swap_aux_in (abfd, ext1, type, class, indx, numaux, in1) - bfd *abfd; - PTR ext1; - int type; - int class; - int indx; - int numaux; - PTR in1; + bfd *abfd; + PTR ext1; + int type; + int class; + int indx; + int numaux; + PTR in1; { AUXENT * ext = (AUXENT *)ext1; union internal_auxent *in = (union internal_auxent *)in1; @@ -418,7 +418,7 @@ _bfd_xcoff_swap_aux_in (abfd, ext1, type, class, indx, numaux, in1) in->x_scn.x_nreloc = H_GET_16 (abfd, ext->x_scn.x_nreloc); in->x_scn.x_nlinno = H_GET_16 (abfd, ext->x_scn.x_nlinno); /* PE defines some extra fields; we zero them out for - safety. */ + safety. */ in->x_scn.x_checksum = 0; in->x_scn.x_associated = 0; in->x_scn.x_comdat = 0; @@ -483,7 +483,7 @@ _bfd_xcoff_swap_aux_out (abfd, inp, type, class, indx, numaux, extp) union internal_auxent *in = (union internal_auxent *)inp; AUXENT *ext = (AUXENT *)extp; - memset((PTR)ext, 0, bfd_coff_auxesz (abfd)); + memset ((PTR)ext, 0, bfd_coff_auxesz (abfd)); switch (class) { case C_FILE: @@ -578,390 +578,390 @@ end: reloc_howto_type xcoff_howto_table[] = { /* Standard 32 bit relocation. */ - HOWTO (R_POS, /* type */ - 0, /* rightshift */ - 2, /* size (0 = byte, 1 = short, 2 = long) */ - 32, /* bitsize */ - false, /* pc_relative */ - 0, /* bitpos */ + HOWTO (R_POS, /* type */ + 0, /* rightshift */ + 2, /* size (0 = byte, 1 = short, 2 = long) */ + 32, /* bitsize */ + false, /* pc_relative */ + 0, /* bitpos */ complain_overflow_bitfield, /* complain_on_overflow */ - 0, /* special_function */ - "R_POS", /* name */ - true, /* partial_inplace */ - 0xffffffff, /* src_mask */ - 0xffffffff, /* dst_mask */ - false), /* pcrel_offset */ + 0, /* special_function */ + "R_POS", /* name */ + true, /* partial_inplace */ + 0xffffffff, /* src_mask */ + 0xffffffff, /* dst_mask */ + false), /* pcrel_offset */ /* 32 bit relocation, but store negative value. */ - HOWTO (R_NEG, /* type */ - 0, /* rightshift */ - -2, /* size (0 = byte, 1 = short, 2 = long) */ - 32, /* bitsize */ - false, /* pc_relative */ - 0, /* bitpos */ + HOWTO (R_NEG, /* type */ + 0, /* rightshift */ + -2, /* size (0 = byte, 1 = short, 2 = long) */ + 32, /* bitsize */ + false, /* pc_relative */ + 0, /* bitpos */ complain_overflow_bitfield, /* complain_on_overflow */ - 0, /* special_function */ - "R_NEG", /* name */ - true, /* partial_inplace */ - 0xffffffff, /* src_mask */ - 0xffffffff, /* dst_mask */ - false), /* pcrel_offset */ + 0, /* special_function */ + "R_NEG", /* name */ + true, /* partial_inplace */ + 0xffffffff, /* src_mask */ + 0xffffffff, /* dst_mask */ + false), /* pcrel_offset */ /* 32 bit PC relative relocation. */ - HOWTO (R_REL, /* type */ - 0, /* rightshift */ - 2, /* size (0 = byte, 1 = short, 2 = long) */ - 32, /* bitsize */ - true, /* pc_relative */ - 0, /* bitpos */ + HOWTO (R_REL, /* type */ + 0, /* rightshift */ + 2, /* size (0 = byte, 1 = short, 2 = long) */ + 32, /* bitsize */ + true, /* pc_relative */ + 0, /* bitpos */ complain_overflow_signed, /* complain_on_overflow */ - 0, /* special_function */ - "R_REL", /* name */ - true, /* partial_inplace */ - 0xffffffff, /* src_mask */ - 0xffffffff, /* dst_mask */ - false), /* pcrel_offset */ + 0, /* special_function */ + "R_REL", /* name */ + true, /* partial_inplace */ + 0xffffffff, /* src_mask */ + 0xffffffff, /* dst_mask */ + false), /* pcrel_offset */ /* 16 bit TOC relative relocation. */ - HOWTO (R_TOC, /* type */ - 0, /* rightshift */ - 1, /* size (0 = byte, 1 = short, 2 = long) */ - 16, /* bitsize */ - false, /* pc_relative */ - 0, /* bitpos */ + HOWTO (R_TOC, /* type */ + 0, /* rightshift */ + 1, /* size (0 = byte, 1 = short, 2 = long) */ + 16, /* bitsize */ + false, /* pc_relative */ + 0, /* bitpos */ complain_overflow_bitfield, /* complain_on_overflow */ - 0, /* special_function */ - "R_TOC", /* name */ - true, /* partial_inplace */ - 0xffff, /* src_mask */ - 0xffff, /* dst_mask */ - false), /* pcrel_offset */ + 0, /* special_function */ + "R_TOC", /* name */ + true, /* partial_inplace */ + 0xffff, /* src_mask */ + 0xffff, /* dst_mask */ + false), /* pcrel_offset */ /* I don't really know what this is. */ - HOWTO (R_RTB, /* type */ - 1, /* rightshift */ - 2, /* size (0 = byte, 1 = short, 2 = long) */ - 32, /* bitsize */ - false, /* pc_relative */ - 0, /* bitpos */ + HOWTO (R_RTB, /* type */ + 1, /* rightshift */ + 2, /* size (0 = byte, 1 = short, 2 = long) */ + 32, /* bitsize */ + false, /* pc_relative */ + 0, /* bitpos */ complain_overflow_bitfield, /* complain_on_overflow */ - 0, /* special_function */ - "R_RTB", /* name */ - true, /* partial_inplace */ - 0xffffffff, /* src_mask */ - 0xffffffff, /* dst_mask */ - false), /* pcrel_offset */ + 0, /* special_function */ + "R_RTB", /* name */ + true, /* partial_inplace */ + 0xffffffff, /* src_mask */ + 0xffffffff, /* dst_mask */ + false), /* pcrel_offset */ /* External TOC relative symbol. */ - HOWTO (R_GL, /* type */ - 0, /* rightshift */ + HOWTO (R_GL, /* type */ + 0, /* rightshift */ 1, /* size (0 = byte, 1 = short, 2 = long) */ - 16, /* bitsize */ - false, /* pc_relative */ - 0, /* bitpos */ + 16, /* bitsize */ + false, /* pc_relative */ + 0, /* bitpos */ complain_overflow_bitfield, /* complain_on_overflow */ - 0, /* special_function */ - "R_GL", /* name */ - true, /* partial_inplace */ - 0xffff, /* src_mask */ - 0xffff, /* dst_mask */ - false), /* pcrel_offset */ - - /* Local TOC relative symbol. */ - HOWTO (R_TCL, /* type */ - 0, /* rightshift */ + 0, /* special_function */ + "R_GL", /* name */ + true, /* partial_inplace */ + 0xffff, /* src_mask */ + 0xffff, /* dst_mask */ + false), /* pcrel_offset */ + + /* Local TOC relative symbol. */ + HOWTO (R_TCL, /* type */ + 0, /* rightshift */ 1, /* size (0 = byte, 1 = short, 2 = long) */ - 16, /* bitsize */ - false, /* pc_relative */ - 0, /* bitpos */ + 16, /* bitsize */ + false, /* pc_relative */ + 0, /* bitpos */ complain_overflow_bitfield, /* complain_on_overflow */ - 0, /* special_function */ - "R_TCL", /* name */ - true, /* partial_inplace */ - 0xffff, /* src_mask */ - 0xffff, /* dst_mask */ - false), /* pcrel_offset */ + 0, /* special_function */ + "R_TCL", /* name */ + true, /* partial_inplace */ + 0xffff, /* src_mask */ + 0xffff, /* dst_mask */ + false), /* pcrel_offset */ EMPTY_HOWTO (7), /* Non modifiable absolute branch. */ - HOWTO (R_BA, /* type */ - 0, /* rightshift */ - 2, /* size (0 = byte, 1 = short, 2 = long) */ - 26, /* bitsize */ - false, /* pc_relative */ - 0, /* bitpos */ + HOWTO (R_BA, /* type */ + 0, /* rightshift */ + 2, /* size (0 = byte, 1 = short, 2 = long) */ + 26, /* bitsize */ + false, /* pc_relative */ + 0, /* bitpos */ complain_overflow_bitfield, /* complain_on_overflow */ - 0, /* special_function */ - "R_BA_26", /* name */ - true, /* partial_inplace */ + 0, /* special_function */ + "R_BA_26", /* name */ + true, /* partial_inplace */ 0x03fffffc, /* src_mask */ 0x03fffffc, /* dst_mask */ - false), /* pcrel_offset */ + false), /* pcrel_offset */ EMPTY_HOWTO (9), /* Non modifiable relative branch. */ - HOWTO (R_BR, /* type */ - 0, /* rightshift */ - 2, /* size (0 = byte, 1 = short, 2 = long) */ - 26, /* bitsize */ - true, /* pc_relative */ - 0, /* bitpos */ + HOWTO (R_BR, /* type */ + 0, /* rightshift */ + 2, /* size (0 = byte, 1 = short, 2 = long) */ + 26, /* bitsize */ + true, /* pc_relative */ + 0, /* bitpos */ complain_overflow_signed, /* complain_on_overflow */ - 0, /* special_function */ - "R_BR", /* name */ - true, /* partial_inplace */ + 0, /* special_function */ + "R_BR", /* name */ + true, /* partial_inplace */ 0x03fffffc, /* src_mask */ 0x03fffffc, /* dst_mask */ - false), /* pcrel_offset */ + false), /* pcrel_offset */ EMPTY_HOWTO (0xb), /* Indirect load. */ - HOWTO (R_RL, /* type */ - 0, /* rightshift */ + HOWTO (R_RL, /* type */ + 0, /* rightshift */ 1, /* size (0 = byte, 1 = short, 2 = long) */ - 16, /* bitsize */ - false, /* pc_relative */ - 0, /* bitpos */ + 16, /* bitsize */ + false, /* pc_relative */ + 0, /* bitpos */ complain_overflow_bitfield, /* complain_on_overflow */ - 0, /* special_function */ - "R_RL", /* name */ - true, /* partial_inplace */ - 0xffff, /* src_mask */ - 0xffff, /* dst_mask */ - false), /* pcrel_offset */ + 0, /* special_function */ + "R_RL", /* name */ + true, /* partial_inplace */ + 0xffff, /* src_mask */ + 0xffff, /* dst_mask */ + false), /* pcrel_offset */ /* Load address. */ - HOWTO (R_RLA, /* type */ - 0, /* rightshift */ + HOWTO (R_RLA, /* type */ + 0, /* rightshift */ 1, /* size (0 = byte, 1 = short, 2 = long) */ - 16, /* bitsize */ - false, /* pc_relative */ - 0, /* bitpos */ + 16, /* bitsize */ + false, /* pc_relative */ + 0, /* bitpos */ complain_overflow_bitfield, /* complain_on_overflow */ - 0, /* special_function */ - "R_RLA", /* name */ - true, /* partial_inplace */ - 0xffff, /* src_mask */ - 0xffff, /* dst_mask */ - false), /* pcrel_offset */ + 0, /* special_function */ + "R_RLA", /* name */ + true, /* partial_inplace */ + 0xffff, /* src_mask */ + 0xffff, /* dst_mask */ + false), /* pcrel_offset */ EMPTY_HOWTO (0xe), /* Non-relocating reference. */ - HOWTO (R_REF, /* type */ - 0, /* rightshift */ - 2, /* size (0 = byte, 1 = short, 2 = long) */ - 32, /* bitsize */ - false, /* pc_relative */ - 0, /* bitpos */ + HOWTO (R_REF, /* type */ + 0, /* rightshift */ + 2, /* size (0 = byte, 1 = short, 2 = long) */ + 32, /* bitsize */ + false, /* pc_relative */ + 0, /* bitpos */ complain_overflow_dont, /* complain_on_overflow */ - 0, /* special_function */ - "R_REF", /* name */ - false, /* partial_inplace */ - 0, /* src_mask */ - 0, /* dst_mask */ - false), /* pcrel_offset */ + 0, /* special_function */ + "R_REF", /* name */ + false, /* partial_inplace */ + 0, /* src_mask */ + 0, /* dst_mask */ + false), /* pcrel_offset */ EMPTY_HOWTO (0x10), EMPTY_HOWTO (0x11), /* TOC relative indirect load. */ - HOWTO (R_TRL, /* type */ - 0, /* rightshift */ + HOWTO (R_TRL, /* type */ + 0, /* rightshift */ 1, /* size (0 = byte, 1 = short, 2 = long) */ - 16, /* bitsize */ - false, /* pc_relative */ - 0, /* bitpos */ + 16, /* bitsize */ + false, /* pc_relative */ + 0, /* bitpos */ complain_overflow_bitfield, /* complain_on_overflow */ - 0, /* special_function */ - "R_TRL", /* name */ - true, /* partial_inplace */ - 0xffff, /* src_mask */ - 0xffff, /* dst_mask */ - false), /* pcrel_offset */ + 0, /* special_function */ + "R_TRL", /* name */ + true, /* partial_inplace */ + 0xffff, /* src_mask */ + 0xffff, /* dst_mask */ + false), /* pcrel_offset */ /* TOC relative load address. */ - HOWTO (R_TRLA, /* type */ - 0, /* rightshift */ + HOWTO (R_TRLA, /* type */ + 0, /* rightshift */ 1, /* size (0 = byte, 1 = short, 2 = long) */ - 16, /* bitsize */ - false, /* pc_relative */ - 0, /* bitpos */ + 16, /* bitsize */ + false, /* pc_relative */ + 0, /* bitpos */ complain_overflow_bitfield, /* complain_on_overflow */ - 0, /* special_function */ - "R_TRLA", /* name */ - true, /* partial_inplace */ - 0xffff, /* src_mask */ - 0xffff, /* dst_mask */ - false), /* pcrel_offset */ + 0, /* special_function */ + "R_TRLA", /* name */ + true, /* partial_inplace */ + 0xffff, /* src_mask */ + 0xffff, /* dst_mask */ + false), /* pcrel_offset */ /* Modifiable relative branch. */ - HOWTO (R_RRTBI, /* type */ - 1, /* rightshift */ - 2, /* size (0 = byte, 1 = short, 2 = long) */ - 32, /* bitsize */ - false, /* pc_relative */ - 0, /* bitpos */ + HOWTO (R_RRTBI, /* type */ + 1, /* rightshift */ + 2, /* size (0 = byte, 1 = short, 2 = long) */ + 32, /* bitsize */ + false, /* pc_relative */ + 0, /* bitpos */ complain_overflow_bitfield, /* complain_on_overflow */ - 0, /* special_function */ - "R_RRTBI", /* name */ - true, /* partial_inplace */ - 0xffffffff, /* src_mask */ - 0xffffffff, /* dst_mask */ - false), /* pcrel_offset */ + 0, /* special_function */ + "R_RRTBI", /* name */ + true, /* partial_inplace */ + 0xffffffff, /* src_mask */ + 0xffffffff, /* dst_mask */ + false), /* pcrel_offset */ /* Modifiable absolute branch. */ - HOWTO (R_RRTBA, /* type */ - 1, /* rightshift */ - 2, /* size (0 = byte, 1 = short, 2 = long) */ - 32, /* bitsize */ - false, /* pc_relative */ - 0, /* bitpos */ + HOWTO (R_RRTBA, /* type */ + 1, /* rightshift */ + 2, /* size (0 = byte, 1 = short, 2 = long) */ + 32, /* bitsize */ + false, /* pc_relative */ + 0, /* bitpos */ complain_overflow_bitfield, /* complain_on_overflow */ - 0, /* special_function */ - "R_RRTBA", /* name */ - true, /* partial_inplace */ - 0xffffffff, /* src_mask */ - 0xffffffff, /* dst_mask */ - false), /* pcrel_offset */ + 0, /* special_function */ + "R_RRTBA", /* name */ + true, /* partial_inplace */ + 0xffffffff, /* src_mask */ + 0xffffffff, /* dst_mask */ + false), /* pcrel_offset */ /* Modifiable call absolute indirect. */ - HOWTO (R_CAI, /* type */ - 0, /* rightshift */ + HOWTO (R_CAI, /* type */ + 0, /* rightshift */ 1, /* size (0 = byte, 1 = short, 2 = long) */ - 16, /* bitsize */ - false, /* pc_relative */ - 0, /* bitpos */ + 16, /* bitsize */ + false, /* pc_relative */ + 0, /* bitpos */ complain_overflow_bitfield, /* complain_on_overflow */ - 0, /* special_function */ - "R_CAI", /* name */ - true, /* partial_inplace */ - 0xffff, /* src_mask */ - 0xffff, /* dst_mask */ - false), /* pcrel_offset */ + 0, /* special_function */ + "R_CAI", /* name */ + true, /* partial_inplace */ + 0xffff, /* src_mask */ + 0xffff, /* dst_mask */ + false), /* pcrel_offset */ /* Modifiable call relative. */ - HOWTO (R_CREL, /* type */ - 0, /* rightshift */ + HOWTO (R_CREL, /* type */ + 0, /* rightshift */ 1, /* size (0 = byte, 1 = short, 2 = long) */ - 16, /* bitsize */ - false, /* pc_relative */ - 0, /* bitpos */ + 16, /* bitsize */ + false, /* pc_relative */ + 0, /* bitpos */ complain_overflow_bitfield, /* complain_on_overflow */ - 0, /* special_function */ - "R_CREL", /* name */ - true, /* partial_inplace */ - 0xffff, /* src_mask */ - 0xffff, /* dst_mask */ - false), /* pcrel_offset */ + 0, /* special_function */ + "R_CREL", /* name */ + true, /* partial_inplace */ + 0xffff, /* src_mask */ + 0xffff, /* dst_mask */ + false), /* pcrel_offset */ /* Modifiable branch absolute. */ - HOWTO (R_RBA, /* type */ - 0, /* rightshift */ - 2, /* size (0 = byte, 1 = short, 2 = long) */ - 26, /* bitsize */ - false, /* pc_relative */ - 0, /* bitpos */ + HOWTO (R_RBA, /* type */ + 0, /* rightshift */ + 2, /* size (0 = byte, 1 = short, 2 = long) */ + 26, /* bitsize */ + false, /* pc_relative */ + 0, /* bitpos */ complain_overflow_bitfield, /* complain_on_overflow */ - 0, /* special_function */ - "R_RBA", /* name */ - true, /* partial_inplace */ + 0, /* special_function */ + "R_RBA", /* name */ + true, /* partial_inplace */ 0x03fffffc, /* src_mask */ 0x03fffffc, /* dst_mask */ - false), /* pcrel_offset */ + false), /* pcrel_offset */ /* Modifiable branch absolute. */ - HOWTO (R_RBAC, /* type */ - 0, /* rightshift */ - 2, /* size (0 = byte, 1 = short, 2 = long) */ - 32, /* bitsize */ - false, /* pc_relative */ - 0, /* bitpos */ + HOWTO (R_RBAC, /* type */ + 0, /* rightshift */ + 2, /* size (0 = byte, 1 = short, 2 = long) */ + 32, /* bitsize */ + false, /* pc_relative */ + 0, /* bitpos */ complain_overflow_bitfield, /* complain_on_overflow */ - 0, /* special_function */ - "R_RBAC", /* name */ - true, /* partial_inplace */ + 0, /* special_function */ + "R_RBAC", /* name */ + true, /* partial_inplace */ 0xffffffff, /* src_mask */ 0xffffffff, /* dst_mask */ - false), /* pcrel_offset */ + false), /* pcrel_offset */ /* Modifiable branch relative. */ - HOWTO (R_RBR, /* type */ - 0, /* rightshift */ - 2, /* size (0 = byte, 1 = short, 2 = long) */ - 26, /* bitsize */ - false, /* pc_relative */ - 0, /* bitpos */ + HOWTO (R_RBR, /* type */ + 0, /* rightshift */ + 2, /* size (0 = byte, 1 = short, 2 = long) */ + 26, /* bitsize */ + false, /* pc_relative */ + 0, /* bitpos */ complain_overflow_signed, /* complain_on_overflow */ - 0, /* special_function */ - "R_RBR_26", /* name */ - true, /* partial_inplace */ + 0, /* special_function */ + "R_RBR_26", /* name */ + true, /* partial_inplace */ 0x03fffffc, /* src_mask */ 0x03fffffc, /* dst_mask */ - false), /* pcrel_offset */ + false), /* pcrel_offset */ /* Modifiable branch absolute. */ - HOWTO (R_RBRC, /* type */ - 0, /* rightshift */ + HOWTO (R_RBRC, /* type */ + 0, /* rightshift */ 1, /* size (0 = byte, 1 = short, 2 = long) */ - 16, /* bitsize */ - false, /* pc_relative */ - 0, /* bitpos */ + 16, /* bitsize */ + false, /* pc_relative */ + 0, /* bitpos */ complain_overflow_bitfield, /* complain_on_overflow */ - 0, /* special_function */ - "R_RBRC", /* name */ - true, /* partial_inplace */ - 0xffff, /* src_mask */ - 0xffff, /* dst_mask */ - false), /* pcrel_offset */ + 0, /* special_function */ + "R_RBRC", /* name */ + true, /* partial_inplace */ + 0xffff, /* src_mask */ + 0xffff, /* dst_mask */ + false), /* pcrel_offset */ /* 16 bit Non modifiable absolute branch. */ - HOWTO (R_BA, /* type */ - 0, /* rightshift */ - 1, /* size (0 = byte, 1 = short, 2 = long) */ - 16, /* bitsize */ - false, /* pc_relative */ - 0, /* bitpos */ + HOWTO (R_BA, /* type */ + 0, /* rightshift */ + 1, /* size (0 = byte, 1 = short, 2 = long) */ + 16, /* bitsize */ + false, /* pc_relative */ + 0, /* bitpos */ complain_overflow_bitfield, /* complain_on_overflow */ - 0, /* special_function */ - "R_BA_16", /* name */ - true, /* partial_inplace */ - 0xfffc, /* src_mask */ - 0xfffc, /* dst_mask */ - false), /* pcrel_offset */ + 0, /* special_function */ + "R_BA_16", /* name */ + true, /* partial_inplace */ + 0xfffc, /* src_mask */ + 0xfffc, /* dst_mask */ + false), /* pcrel_offset */ /* Modifiable branch relative. */ - HOWTO (R_RBR, /* type */ - 0, /* rightshift */ - 1, /* size (0 = byte, 1 = short, 2 = long) */ - 16, /* bitsize */ - false, /* pc_relative */ - 0, /* bitpos */ + HOWTO (R_RBR, /* type */ + 0, /* rightshift */ + 1, /* size (0 = byte, 1 = short, 2 = long) */ + 16, /* bitsize */ + false, /* pc_relative */ + 0, /* bitpos */ complain_overflow_signed, /* complain_on_overflow */ - 0, /* special_function */ - "R_RBR_16", /* name */ - true, /* partial_inplace */ - 0xffff, /* src_mask */ - 0xffff, /* dst_mask */ - false), /* pcrel_offset */ + 0, /* special_function */ + "R_RBR_16", /* name */ + true, /* partial_inplace */ + 0xffff, /* src_mask */ + 0xffff, /* dst_mask */ + false), /* pcrel_offset */ /* Modifiable branch relative. */ - HOWTO (R_RBA, /* type */ - 0, /* rightshift */ - 1, /* size (0 = byte, 1 = short, 2 = long) */ - 16, /* bitsize */ - false, /* pc_relative */ - 0, /* bitpos */ + HOWTO (R_RBA, /* type */ + 0, /* rightshift */ + 1, /* size (0 = byte, 1 = short, 2 = long) */ + 16, /* bitsize */ + false, /* pc_relative */ + 0, /* bitpos */ complain_overflow_signed, /* complain_on_overflow */ - 0, /* special_function */ - "R_RBA_16", /* name */ - true, /* partial_inplace */ - 0xffff, /* src_mask */ - 0xffff, /* dst_mask */ - false), /* pcrel_offset */ + 0, /* special_function */ + "R_RBA_16", /* name */ + true, /* partial_inplace */ + 0xffff, /* src_mask */ + 0xffff, /* dst_mask */ + false), /* pcrel_offset */ }; @@ -975,18 +975,18 @@ xcoff_rtype2howto (relent, internal) /* Default howto layout works most of the time */ relent->howto = &xcoff_howto_table[internal->r_type]; - + /* Special case some 16 bit reoloc */ if (15 == (internal->r_size & 0x1f)) { - if (R_BA == internal->r_type) + if (R_BA == internal->r_type) relent->howto = &xcoff_howto_table[0x1c]; - else if (R_RBR == internal->r_type) + else if (R_RBR == internal->r_type) relent->howto = &xcoff_howto_table[0x1d]; - else if (R_RBA == internal->r_type) + else if (R_RBA == internal->r_type) relent->howto = &xcoff_howto_table[0x1e]; } - + /* The r_size field of an XCOFF reloc encodes the bitsize of the relocation, as well as indicating whether it is signed or not. Doublecheck that the relocation information gathered from the @@ -998,8 +998,9 @@ xcoff_rtype2howto (relent, internal) abort (); /* Put a meaningful value in addend */ - relent->addend = (internal->r_size & 0x80) ? - internal->r_vaddr - : internal->r_vaddr; + relent->addend = (internal->r_size & 0x80 + ? -internal->r_vaddr + : internal->r_vaddr); } reloc_howto_type * @@ -1648,7 +1649,7 @@ static char buff20[XCOFFARMAGBIG_ELEMENT_SIZE + 1]; #define PRINT12(d, v) \ sprintf (buff20, FMT12, (int)(v)), \ - memcpy ((void *) (d), buff20, 12) + memcpy ((void *) (d), buff20, 12) #define PRINT12_OCTAL(d, v) \ sprintf (buff20, FMT12_OCTAL, (unsigned int)(v)), \ @@ -1656,7 +1657,7 @@ static char buff20[XCOFFARMAGBIG_ELEMENT_SIZE + 1]; #define PRINT4(d, v) \ sprintf (buff20, FMT4, (int)(v)), \ - memcpy ((void *) (d), buff20, 4) + memcpy ((void *) (d), buff20, 4) #define READ20(d, v) \ buff20[20] = 0, \ @@ -1705,7 +1706,7 @@ do_copy (out_bfd, in_bfd) if (remaining) { - if (bfd_bread (buffer, remaining, in_bfd) != remaining + if (bfd_bread (buffer, remaining, in_bfd) != remaining || bfd_bwrite (buffer, remaining, out_bfd) != remaining) return false; } @@ -1713,7 +1714,7 @@ do_copy (out_bfd, in_bfd) return true; } -static boolean +static boolean do_shared_object_padding (out_bfd, in_bfd, offset, ar_header_size) bfd *out_bfd; bfd *in_bfd; @@ -1755,7 +1756,7 @@ xcoff_write_armap_big (abfd, elength, map, orl_count, stridx) bfd *current_bfd; size_t string_length; ufile_ptr nextoff, prevoff; - + /* First, we look through the symbols and work out which are from 32-bit objects and which from 64-bit ones. */ sym_32 = sym_64 = str_32 = str_64 = 0; @@ -1800,39 +1801,39 @@ xcoff_write_armap_big (abfd, elength, map, orl_count, stridx) BFD_ASSERT (nextoff == bfd_tell (abfd)); - /* Write out the symbol table. - Layout : - + /* Write out the symbol table. + Layout : + standard big archive header - 0x0000 ar_size [0x14] - 0x0014 ar_nxtmem [0x14] - 0x0028 ar_prvmem [0x14] - 0x003C ar_date [0x0C] - 0x0048 ar_uid [0x0C] - 0x0054 ar_gid [0x0C] - 0x0060 ar_mod [0x0C] - 0x006C ar_namelen[0x04] - 0x0070 ar_fmag [SXCOFFARFMAG] - - Symbol table - 0x0072 num_syms [0x08], binary - 0x0078 offsets [0x08 * num_syms], binary - 0x0086 + 0x08 * num_syms names [??] - ?? pad to even bytes. + 0x0000 ar_size [0x14] + 0x0014 ar_nxtmem [0x14] + 0x0028 ar_prvmem [0x14] + 0x003C ar_date [0x0C] + 0x0048 ar_uid [0x0C] + 0x0054 ar_gid [0x0C] + 0x0060 ar_mod [0x0C] + 0x006C ar_namelen[0x04] + 0x0070 ar_fmag [SXCOFFARFMAG] + + Symbol table + 0x0072 num_syms [0x08], binary + 0x0078 offsets [0x08 * num_syms], binary + 0x0086 + 0x08 * num_syms names [??] + ?? pad to even bytes. */ - if (sym_32) + if (sym_32) { struct xcoff_ar_hdr_big *hdr; bfd_byte *symbol_table; bfd_byte *st; file_ptr fileoff; - bfd_vma symbol_table_size = + bfd_vma symbol_table_size = SIZEOF_AR_HDR_BIG + SXCOFFARFMAG - + 8 - + 8 * sym_32 + + 8 + + 8 * sym_32 + str_32 + (str_32 & 1); symbol_table = NULL; @@ -1841,9 +1842,9 @@ xcoff_write_armap_big (abfd, elength, map, orl_count, stridx) return false; hdr = (struct xcoff_ar_hdr_big *) symbol_table; - + PRINT20 (hdr->size, 8 + 8 * sym_32 + str_32 + (str_32 & 1)); - + if (sym_64) PRINT20 (hdr->nextoff, nextoff + symbol_table_size); else @@ -1862,7 +1863,7 @@ xcoff_write_armap_big (abfd, elength, map, orl_count, stridx) bfd_h_put_64 (abfd, sym_32, st); st += 8; - + /* loop over the 32 bit offsets */ current_bfd = abfd->archive_head; if (current_bfd != NULL) @@ -1921,21 +1922,21 @@ xcoff_write_armap_big (abfd, elength, map, orl_count, stridx) prevoff = nextoff; nextoff = nextoff + symbol_table_size; } - else + else PRINT20 (fhdr->symoff, 0); - - if (sym_64) + + if (sym_64) { struct xcoff_ar_hdr_big *hdr; bfd_byte *symbol_table; bfd_byte *st; file_ptr fileoff; - bfd_vma symbol_table_size = + bfd_vma symbol_table_size = SIZEOF_AR_HDR_BIG + SXCOFFARFMAG - + 8 - + 8 * sym_64 + + 8 + + 8 * sym_64 + str_64 + (str_64 & 1); symbol_table = NULL; @@ -1960,7 +1961,7 @@ xcoff_write_armap_big (abfd, elength, map, orl_count, stridx) bfd_h_put_64 (abfd, sym_64, st); st += 8; - + /* loop over the 64 bit offsets */ current_bfd = abfd->archive_head; if (current_bfd != NULL) @@ -2018,9 +2019,9 @@ xcoff_write_armap_big (abfd, elength, map, orl_count, stridx) PRINT20 (fhdr->symoff64, nextoff); } - else + else PRINT20 (fhdr->symoff64, 0); - + return true; } @@ -2136,7 +2137,7 @@ xcoff_write_archive_contents_old (abfd) sprintf (ahdrp->namlen, "%ld", (long) namlen); /* If the length of the name is odd, we write out the null byte - after the name as well. */ + after the name as well. */ namlen = (namlen + 1) &~ (bfd_size_type) 1; remaining = arelt_size (sub); @@ -2171,7 +2172,7 @@ xcoff_write_archive_contents_old (abfd) if (! do_copy (abfd, sub)) return false; - + if (! do_pad (abfd, size & 1)) return false; } @@ -2184,9 +2185,9 @@ xcoff_write_archive_contents_old (abfd) sprintf (fhdr.memoff, "%ld", (long) nextoff); memset (&ahdr, 0, sizeof ahdr); - sprintf (ahdr.size, "%ld", (long) (XCOFFARMAG_ELEMENT_SIZE + - count * XCOFFARMAG_ELEMENT_SIZE + - total_namlen)); + sprintf (ahdr.size, "%ld", (long) (XCOFFARMAG_ELEMENT_SIZE + + count * XCOFFARMAG_ELEMENT_SIZE + + total_namlen)); sprintf (ahdr.prevoff, "%ld", (long) prevoff); sprintf (ahdr.date, "%d", 0); sprintf (ahdr.uid, "%d", 0); @@ -2226,7 +2227,7 @@ xcoff_write_archive_contents_old (abfd) for (i = 0; i < (size_t) count; i++) { sprintf (decbuf, "%-12ld", (long) offsets[i]); - if (bfd_bwrite ((PTR) decbuf, (bfd_size_type) XCOFFARMAG_ELEMENT_SIZE, + if (bfd_bwrite ((PTR) decbuf, (bfd_size_type) XCOFFARMAG_ELEMENT_SIZE, abfd) != XCOFFARMAG_ELEMENT_SIZE) return false; } @@ -2294,12 +2295,12 @@ xcoff_write_archive_contents_big (abfd) if (bfd_seek (abfd, (file_ptr) SIZEOF_AR_FILE_HDR_BIG, SEEK_SET) != 0) return false; - + /* Calculate count and total_namlen. */ makemap = bfd_has_map (abfd); hasobjects = false; - for (current_bfd = abfd->archive_head, count = 0, total_namlen = 0; - current_bfd != NULL; + for (current_bfd = abfd->archive_head, count = 0, total_namlen = 0; + current_bfd != NULL; current_bfd = current_bfd->next, count++) { total_namlen += strlen (normalize_filename (current_bfd)) + 1; @@ -2320,8 +2321,8 @@ xcoff_write_archive_contents_big (abfd) prevoff = 0; nextoff = SIZEOF_AR_FILE_HDR_BIG; - for (current_bfd = abfd->archive_head, i = 0; - current_bfd != NULL; + for (current_bfd = abfd->archive_head, i = 0; + current_bfd != NULL; current_bfd = current_bfd->next, i++) { const char *name; @@ -2343,7 +2344,7 @@ xcoff_write_archive_contents_big (abfd) ahdrp = &ahdr; /* XXX This should actually be a call to stat64 (at least on - 32-bit machines). + 32-bit machines). XXX This call will fail if the original object is not found. */ if (stat (bfd_get_filename (current_bfd), &s) != 0) { @@ -2372,7 +2373,7 @@ xcoff_write_archive_contents_big (abfd) PRINT4 (ahdrp->namlen, namlen); /* If the length of the name is odd, we write out the null byte - after the name as well. */ + after the name as well. */ namlen = (namlen + 1) &~ (bfd_size_type) 1; remaining = arelt_size (current_bfd); @@ -2387,7 +2388,7 @@ xcoff_write_archive_contents_big (abfd) Their text section needs to be aligned wrt the archive file position. This requires extra padding before the archive header. */ if (! do_shared_object_padding (abfd, current_bfd, & nextoff, - SIZEOF_AR_HDR_BIG + namlen + SIZEOF_AR_HDR_BIG + namlen + SXCOFFARFMAG)) return false; @@ -2401,7 +2402,7 @@ xcoff_write_archive_contents_big (abfd) if ((bfd_bwrite ((PTR) ahdrp, (bfd_size_type) SIZEOF_AR_HDR_BIG, abfd) != SIZEOF_AR_HDR_BIG) || bfd_bwrite ((PTR) name, (bfd_size_type) namlen, abfd) != namlen - || (bfd_bwrite ((PTR) XCOFFARFMAG, (bfd_size_type) SXCOFFARFMAG, + || (bfd_bwrite ((PTR) XCOFFARFMAG, (bfd_size_type) SXCOFFARFMAG, abfd) != SXCOFFARFMAG)) return false; @@ -2409,8 +2410,8 @@ xcoff_write_archive_contents_big (abfd) return false; if (! do_copy (abfd, current_bfd)) - return false; - + return false; + if (! do_pad (abfd, size & 1)) return false; } @@ -2421,25 +2422,25 @@ xcoff_write_archive_contents_big (abfd) PRINT20 (fhdr.lastmemoff, prevoff); } - /* Write out the member table. - Layout : + /* Write out the member table. + Layout : standard big archive header - 0x0000 ar_size [0x14] - 0x0014 ar_nxtmem [0x14] - 0x0028 ar_prvmem [0x14] - 0x003C ar_date [0x0C] - 0x0048 ar_uid [0x0C] - 0x0054 ar_gid [0x0C] - 0x0060 ar_mod [0x0C] - 0x006C ar_namelen[0x04] - 0x0070 ar_fmag [0x02] - - Member table - 0x0072 count [0x14] - 0x0086 offsets [0x14 * counts] - 0x0086 + 0x14 * counts names [??] - ?? pad to even bytes. + 0x0000 ar_size [0x14] + 0x0014 ar_nxtmem [0x14] + 0x0028 ar_prvmem [0x14] + 0x003C ar_date [0x0C] + 0x0048 ar_uid [0x0C] + 0x0054 ar_gid [0x0C] + 0x0060 ar_mod [0x0C] + 0x006C ar_namelen[0x04] + 0x0070 ar_fmag [0x02] + + Member table + 0x0072 count [0x14] + 0x0086 offsets [0x14 * counts] + 0x0086 + 0x14 * counts names [??] + ?? pad to even bytes. */ BFD_ASSERT (nextoff == bfd_tell (abfd)); @@ -2458,10 +2459,10 @@ xcoff_write_archive_contents_big (abfd) hdr = (struct xcoff_ar_hdr_big *) member_table; - PRINT20 (hdr->size, (XCOFFARMAGBIG_ELEMENT_SIZE + - count * XCOFFARMAGBIG_ELEMENT_SIZE + - total_namlen + (total_namlen & 1))); - if (makemap && hasobjects) + PRINT20 (hdr->size, (XCOFFARMAGBIG_ELEMENT_SIZE + + count * XCOFFARMAGBIG_ELEMENT_SIZE + + total_namlen + (total_namlen & 1))); + if (makemap && hasobjects) PRINT20 (hdr->nextoff, nextoff + member_table_size); else PRINT20 (hdr->nextoff, 0); @@ -2471,7 +2472,7 @@ xcoff_write_archive_contents_big (abfd) PRINT12 (hdr->gid, 0); PRINT12 (hdr->mode, 0); PRINT4 (hdr->namlen, 0); - + mt = member_table + SIZEOF_AR_HDR_BIG; memcpy (mt, XCOFFARFMAG, SXCOFFARFMAG); mt += SXCOFFARFMAG; @@ -2484,23 +2485,23 @@ xcoff_write_archive_contents_big (abfd) mt += XCOFFARMAGBIG_ELEMENT_SIZE; } - if (count) + if (count) { free (offsets); offsets = NULL; } - for (current_bfd = abfd->archive_head; current_bfd != NULL; + for (current_bfd = abfd->archive_head; current_bfd != NULL; current_bfd = current_bfd->next) { const char *name; size_t namlen; name = normalize_filename (current_bfd); - namlen = sprintf(mt, "%s", name); + namlen = sprintf (mt, "%s", name); mt += namlen + 1; } - + if (bfd_bwrite (member_table, member_table_size, abfd) != member_table_size) return false; @@ -2514,7 +2515,7 @@ xcoff_write_archive_contents_big (abfd) /* Write out the armap, if appropriate. */ - if (! makemap || ! hasobjects) + if (! makemap || ! hasobjects) PRINT20 (fhdr.symoff, 0); else { @@ -2522,7 +2523,7 @@ xcoff_write_archive_contents_big (abfd) /* Save nextoff in fhdr.symoff so the armap routine can use it. */ PRINT20 (fhdr.symoff, nextoff); - + bfd_ardata (abfd)->tdata = (PTR) &fhdr; if (! _bfd_compute_and_write_armap (abfd, 0)) return false; @@ -2531,10 +2532,10 @@ xcoff_write_archive_contents_big (abfd) /* Write out the archive file header. */ if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0 - || (bfd_bwrite ((PTR) &fhdr, (bfd_size_type) SIZEOF_AR_FILE_HDR_BIG, + || (bfd_bwrite ((PTR) &fhdr, (bfd_size_type) SIZEOF_AR_FILE_HDR_BIG, abfd) != SIZEOF_AR_FILE_HDR_BIG)) return false; - + return true; } @@ -2729,8 +2730,8 @@ xcoff_swap_ldrel_out (abfd, src, d) } -boolean -xcoff_reloc_type_noop (input_bfd, input_section, output_bfd, rel, sym, howto, +boolean +xcoff_reloc_type_noop (input_bfd, input_section, output_bfd, rel, sym, howto, val, addend, relocation, contents) bfd *input_bfd ATTRIBUTE_UNUSED; asection *input_section ATTRIBUTE_UNUSED; @@ -2746,8 +2747,8 @@ xcoff_reloc_type_noop (input_bfd, input_section, output_bfd, rel, sym, howto, return true; } -boolean -xcoff_reloc_type_fail (input_bfd, input_section, output_bfd, rel, sym, howto, +boolean +xcoff_reloc_type_fail (input_bfd, input_section, output_bfd, rel, sym, howto, val, addend, relocation, contents) bfd *input_bfd; asection *input_section ATTRIBUTE_UNUSED; @@ -2767,8 +2768,8 @@ xcoff_reloc_type_fail (input_bfd, input_section, output_bfd, rel, sym, howto, return false; } -boolean -xcoff_reloc_type_pos (input_bfd, input_section, output_bfd, rel, sym, howto, +boolean +xcoff_reloc_type_pos (input_bfd, input_section, output_bfd, rel, sym, howto, val, addend, relocation, contents) bfd *input_bfd ATTRIBUTE_UNUSED; asection *input_section ATTRIBUTE_UNUSED; @@ -2785,8 +2786,8 @@ xcoff_reloc_type_pos (input_bfd, input_section, output_bfd, rel, sym, howto, return true; } -boolean -xcoff_reloc_type_neg (input_bfd, input_section, output_bfd, rel, sym, howto, +boolean +xcoff_reloc_type_neg (input_bfd, input_section, output_bfd, rel, sym, howto, val, addend, relocation, contents) bfd *input_bfd ATTRIBUTE_UNUSED; asection *input_section ATTRIBUTE_UNUSED; @@ -2803,8 +2804,8 @@ xcoff_reloc_type_neg (input_bfd, input_section, output_bfd, rel, sym, howto, return true; } -boolean -xcoff_reloc_type_rel (input_bfd, input_section, output_bfd, rel, sym, howto, +boolean +xcoff_reloc_type_rel (input_bfd, input_section, output_bfd, rel, sym, howto, val, addend, relocation, contents) bfd *input_bfd ATTRIBUTE_UNUSED; asection *input_section; @@ -2823,13 +2824,13 @@ xcoff_reloc_type_rel (input_bfd, input_section, output_bfd, rel, sym, howto, addend += input_section->vma; *relocation = val + addend; - *relocation -= (input_section->output_section->vma + - input_section->output_offset); + *relocation -= (input_section->output_section->vma + + input_section->output_offset); return true; } -boolean -xcoff_reloc_type_toc (input_bfd, input_section, output_bfd, rel, sym, howto, +boolean +xcoff_reloc_type_toc (input_bfd, input_section, output_bfd, rel, sym, howto, val, addend, relocation, contents) bfd *input_bfd; asection *input_section ATTRIBUTE_UNUSED; @@ -2844,7 +2845,7 @@ xcoff_reloc_type_toc (input_bfd, input_section, output_bfd, rel, sym, howto, { struct xcoff_link_hash_entry *h; - if (0 > rel->r_symndx) + if (0 > rel->r_symndx) return false; h = obj_xcoff_sym_hashes (input_bfd)[rel->r_symndx]; @@ -2860,19 +2861,19 @@ xcoff_reloc_type_toc (input_bfd, input_section, output_bfd, rel, sym, howto, bfd_set_error (bfd_error_bad_value); return false; } - + BFD_ASSERT ((h->flags & XCOFF_SET_TOC) == 0); val = (h->toc_section->output_section->vma + h->toc_section->output_offset); } - - *relocation = ((val - xcoff_data (output_bfd)->toc) - - (sym->n_value - xcoff_data (input_bfd)->toc)); + + *relocation = ((val - xcoff_data (output_bfd)->toc) + - (sym->n_value - xcoff_data (input_bfd)->toc)); return true; } -boolean -xcoff_reloc_type_ba (input_bfd, input_section, output_bfd, rel, sym, howto, +boolean +xcoff_reloc_type_ba (input_bfd, input_section, output_bfd, rel, sym, howto, val, addend, relocation, contents) bfd *input_bfd ATTRIBUTE_UNUSED; asection *input_section ATTRIBUTE_UNUSED; @@ -2893,8 +2894,8 @@ xcoff_reloc_type_ba (input_bfd, input_section, output_bfd, rel, sym, howto, return true; } -static boolean -xcoff_reloc_type_br (input_bfd, input_section, output_bfd, rel, sym, howto, +static boolean +xcoff_reloc_type_br (input_bfd, input_section, output_bfd, rel, sym, howto, val, addend, relocation, contents) bfd *input_bfd; asection *input_section; @@ -2909,7 +2910,7 @@ xcoff_reloc_type_br (input_bfd, input_section, output_bfd, rel, sym, howto, { struct xcoff_link_hash_entry *h; - if (0 > rel->r_symndx) + if (0 > rel->r_symndx) return false; h = obj_xcoff_sym_hashes (input_bfd)[rel->r_symndx]; @@ -2921,59 +2922,60 @@ xcoff_reloc_type_br (input_bfd, input_section, output_bfd, rel, sym, howto, call is followed by a lwz r2,20(r1), but the call is not going to global linkage code, we can replace the load with a cror. */ - if (NULL != h - && bfd_link_hash_defined == h->root.type - && (rel->r_vaddr - input_section->vma + 8 <= - input_section->_cooked_size)) + if (NULL != h + && bfd_link_hash_defined == h->root.type + && (rel->r_vaddr - input_section->vma + 8 + <= input_section->_cooked_size)) { bfd_byte *pnext; unsigned long next; - + pnext = contents + (rel->r_vaddr - input_section->vma) + 4; next = bfd_get_32 (input_bfd, pnext); - + /* The _ptrgl function is magic. It is used by the AIX compiler to call a function through a pointer. */ if (h->smclas == XMC_GL || strcmp (h->root.root.string, "._ptrgl") == 0) { - if (next == 0x4def7b82 /* cror 15,15,15 */ - || next == 0x4ffffb82 /* cror 31,31,31 */ - || next == 0x60000000) /* ori r0,r0,0 */ - bfd_put_32 (input_bfd, 0x80410014, pnext); /* lwz r1,20(r1) */ - - } else - { - if (next == 0x80410014) /* lwz r1,20(r1) */ - bfd_put_32 (input_bfd, 0x60000000, pnext); /* ori r0,r0,0 */ - } - } - else if (NULL != h && bfd_link_hash_undefined == h->root.type) + if (next == 0x4def7b82 /* cror 15,15,15 */ + || next == 0x4ffffb82 /* cror 31,31,31 */ + || next == 0x60000000) /* ori r0,r0,0 */ + bfd_put_32 (input_bfd, 0x80410014, pnext); /* lwz r1,20(r1) */ + + } + else + { + if (next == 0x80410014) /* lwz r1,20(r1) */ + bfd_put_32 (input_bfd, 0x60000000, pnext); /* ori r0,r0,0 */ + } + } + else if (NULL != h && bfd_link_hash_undefined == h->root.type) { /* Normally, this relocation is against a defined symbol. In the case where this is a partial link and the output section offset - is greater than 2^25, the linker will return an invalid error + is greater than 2^25, the linker will return an invalid error message that the relocation has been truncated. Yes it has been - truncated but no it not important. For this case, disable the + truncated but no it not important. For this case, disable the overflow checking. */ - + howto->complain_on_overflow = complain_overflow_dont; } - + howto->pc_relative = true; howto->src_mask &= ~3; howto->dst_mask = howto->src_mask; /* A PC relative reloc includes the section address. */ addend += input_section->vma; - + *relocation = val + addend; - *relocation -= (input_section->output_section->vma + - input_section->output_offset); + *relocation -= (input_section->output_section->vma + + input_section->output_offset); return true; } -boolean -xcoff_reloc_type_crel (input_bfd, input_section, output_bfd, rel, sym, howto, +boolean +xcoff_reloc_type_crel (input_bfd, input_section, output_bfd, rel, sym, howto, val, addend, relocation, contents) bfd *input_bfd ATTRIBUTE_UNUSED; asection *input_section; @@ -2994,13 +2996,13 @@ xcoff_reloc_type_crel (input_bfd, input_section, output_bfd, rel, sym, howto, addend += input_section->vma; *relocation = val + addend; - *relocation -= (input_section->output_section->vma + - input_section->output_offset); + *relocation -= (input_section->output_section->vma + + input_section->output_offset); return true; } -static boolean -xcoff_complain_overflow_dont_func (input_bfd, val, relocation, howto) +static boolean +xcoff_complain_overflow_dont_func (input_bfd, val, relocation, howto) bfd *input_bfd ATTRIBUTE_UNUSED; bfd_vma val ATTRIBUTE_UNUSED; bfd_vma relocation ATTRIBUTE_UNUSED; @@ -3009,16 +3011,16 @@ xcoff_complain_overflow_dont_func (input_bfd, val, relocation, howto) return false; } -static boolean -xcoff_complain_overflow_bitfield_func (input_bfd, val, relocation, howto) +static boolean +xcoff_complain_overflow_bitfield_func (input_bfd, val, relocation, howto) bfd *input_bfd; bfd_vma val; bfd_vma relocation; - struct reloc_howto_struct *howto; + struct reloc_howto_struct *howto; { bfd_vma addrmask, fieldmask, signmask, ss; bfd_vma a, b, sum; - + /* Get the values to be added together. For signed and unsigned relocations, we assume that all values should be truncated to the size of an address. For bitfields, all the bits matter. @@ -3034,7 +3036,7 @@ xcoff_complain_overflow_bitfield_func (input_bfd, val, relocation, howto) operand. */ a >>= howto->rightshift; b >>= howto->bitpos; - + /* Bitfields are sometimes used for signed numbers; for example, a 13-bit field sometimes represents values in 0..8191 and sometimes represents values in -4096..4095. @@ -3046,7 +3048,7 @@ xcoff_complain_overflow_bitfield_func (input_bfd, val, relocation, howto) assumed that it was fully sign extended, and we will keep that assumption. */ signmask = (fieldmask >> 1) + 1; - + if ((a & ~ fieldmask) != 0) { /* Some bits out of the field are set. This might not @@ -3060,9 +3062,9 @@ xcoff_complain_overflow_bitfield_func (input_bfd, val, relocation, howto) return true; a &= fieldmask; } - + /* We just assume (b & ~ fieldmask) == 0. */ - + /* We explicitly permit wrap around if this relocation covers the high bit of an address. The Linux kernel relies on it, and it is the only way to write assembler @@ -3071,7 +3073,7 @@ xcoff_complain_overflow_bitfield_func (input_bfd, val, relocation, howto) if (howto->bitsize + howto->rightshift == bfd_arch_bits_per_address (input_bfd)) return false; - + sum = a + b; if (sum < a || (sum & ~ fieldmask) != 0) { @@ -3081,12 +3083,12 @@ xcoff_complain_overflow_bitfield_func (input_bfd, val, relocation, howto) if (((~ (a ^ b)) & (a ^ sum)) & signmask) return true; } - + return false; } -static boolean -xcoff_complain_overflow_signed_func (input_bfd, val, relocation, howto) +static boolean +xcoff_complain_overflow_signed_func (input_bfd, val, relocation, howto) bfd *input_bfd; bfd_vma val; bfd_vma relocation; @@ -3094,7 +3096,7 @@ xcoff_complain_overflow_signed_func (input_bfd, val, relocation, howto) { bfd_vma addrmask, fieldmask, signmask, ss; bfd_vma a, b, sum; - + /* Get the values to be added together. For signed and unsigned relocations, we assume that all values should be truncated to the size of an address. For bitfields, all the bits matter. @@ -3105,7 +3107,7 @@ xcoff_complain_overflow_signed_func (input_bfd, val, relocation, howto) b = val & howto->src_mask; a = (a & addrmask) >> howto->rightshift; - + /* If any sign bits are set, all sign bits must be set. That is, A must be a valid negative address after shifting. */ @@ -3113,7 +3115,7 @@ xcoff_complain_overflow_signed_func (input_bfd, val, relocation, howto) ss = a & signmask; if (ss != 0 && ss != ((addrmask >> howto->rightshift) & signmask)) return true; - + /* We only need this next bit of code if the sign bit of B is below the sign bit of A. This would only happen if SRC_MASK had fewer bits than BITSIZE. Note that if @@ -3126,12 +3128,12 @@ xcoff_complain_overflow_signed_func (input_bfd, val, relocation, howto) /* Set all the bits above the sign bit. */ b -= signmask <<= 1; } - + b = (b & addrmask) >> howto->bitpos; - + /* Now we can do the addition. */ sum = a + b; - + /* See if the result has the correct sign. Bits above the sign bit are junk now; ignore them. If the sum is positive, make sure we did not have all negative inputs; @@ -3143,20 +3145,20 @@ xcoff_complain_overflow_signed_func (input_bfd, val, relocation, howto) signmask = (fieldmask >> 1) + 1; if (((~ (a ^ b)) & (a ^ sum)) & signmask) return true; - + return false; } -static boolean -xcoff_complain_overflow_unsigned_func (input_bfd, val, relocation, howto) +static boolean +xcoff_complain_overflow_unsigned_func (input_bfd, val, relocation, howto) bfd *input_bfd; bfd_vma val; bfd_vma relocation; - struct reloc_howto_struct *howto; + struct reloc_howto_struct *howto; { bfd_vma addrmask, fieldmask; bfd_vma a, b, sum; - + /* Get the values to be added together. For signed and unsigned relocations, we assume that all values should be truncated to the size of an address. For bitfields, all the bits matter. @@ -3182,31 +3184,31 @@ xcoff_complain_overflow_unsigned_func (input_bfd, val, relocation, howto) sum = (a + b) & addrmask; if ((a | b | sum) & ~ fieldmask) return true; - + return false; } /* This is the relocation function for the RS/6000/POWER/PowerPC. This is currently the only processor which uses XCOFF; I hope that - will never change. + will never change. I took the relocation type definitions from two documents: the PowerPC AIX Version 4 Application Binary Interface, First Edition (April 1992), and the PowerOpen ABI, Big-Endian 32-Bit Hardware Implementation (June 30, 1994). Differences - between the documents are noted below. + between the documents are noted below. - Unsupported r_type's + Unsupported r_type's R_RTB: R_RRTBI: R_RRTBA: - + These relocs are defined by the PowerPC ABI to be relative branches which use half of the difference between the symbol and the program counter. I can't quite figure out when this is useful. These relocs are - not defined by the PowerOpen ABI. + not defined by the PowerOpen ABI. Supported r_type's @@ -3214,7 +3216,7 @@ xcoff_complain_overflow_unsigned_func (input_bfd, val, relocation, howto) Simple positive relocation. R_NEG: - Simple negative relocation. + Simple negative relocation. R_REL: Simple PC relative relocation. @@ -3232,16 +3234,16 @@ xcoff_complain_overflow_unsigned_func (input_bfd, val, relocation, howto) R_GL: GL linkage relocation. The value of this relocation - is the address of the entry in the TOC section. + is the address of the entry in the TOC section. R_TCL: Local object TOC address. I can't figure out the - difference between this and case R_GL. + difference between this and case R_GL. R_TRL: TOC relative relocation. A TOC relative load instruction which may be changed to a load address instruction. - FIXME: We don't currently implement this optimization. + FIXME: We don't currently implement this optimization. R_TRLA: TOC relative relocation. This is a TOC relative load @@ -3251,52 +3253,52 @@ xcoff_complain_overflow_unsigned_func (input_bfd, val, relocation, howto) R_BA: Absolute branch. We don't want to mess with the lower - two bits of the instruction. + two bits of the instruction. R_CAI: The PowerPC ABI defines this as an absolute call which may be modified to become a relative call. The PowerOpen - ABI does not define this relocation type. - + ABI does not define this relocation type. + R_RBA: Absolute branch which may be modified to become a - relative branch. + relative branch. R_RBAC: The PowerPC ABI defines this as an absolute branch to a fixed address which may be modified to an absolute branch to a symbol. The PowerOpen ABI does not define this - relocation type. + relocation type. R_RBRC: The PowerPC ABI defines this as an absolute branch to a fixed address which may be modified to a relative branch. - The PowerOpen ABI does not define this relocation type. + The PowerOpen ABI does not define this relocation type. R_BR: Relative branch. We don't want to mess with the lower - two bits of the instruction. + two bits of the instruction. R_CREL: The PowerPC ABI defines this as a relative call which may be modified to become an absolute call. The PowerOpen - ABI does not define this relocation type. + ABI does not define this relocation type. R_RBR: A relative branch which may be modified to become an absolute branch. FIXME: We don't implement this, although we should for symbols of storage mapping class - XMC_XO. + XMC_XO. R_RL: The PowerPC AIX ABI describes this as a load which may be changed to a load address. The PowerOpen ABI says this - is the same as case R_POS. + is the same as case R_POS. R_RLA: The PowerPC AIX ABI describes this as a load address which may be changed to a load. The PowerOpen ABI says - this is the same as R_POS. + this is the same as R_POS. */ boolean @@ -3331,8 +3333,8 @@ xcoff_ppc_relocate_section (output_bfd, info, input_bfd, bfd_byte *location; /* Relocation type R_REF is a special relocation type which is - merely used to prevent garbage collection from occurring for - the csect including the symbol which it references. */ + merely used to prevent garbage collection from occurring for + the csect including the symbol which it references. */ if (rel->r_type == R_REF) continue; @@ -3343,12 +3345,13 @@ xcoff_ppc_relocate_section (output_bfd, info, input_bfd, howto.size = howto.bitsize > 16 ? 2 : 1; howto.pc_relative = false; howto.bitpos = 0; - howto.complain_on_overflow = rel->r_size & 0x80 ? - complain_overflow_signed : complain_overflow_bitfield; + howto.complain_on_overflow = (rel->r_size & 0x80 + ? complain_overflow_signed + : complain_overflow_bitfield); howto.special_function = NULL; howto.name = "internal"; howto.partial_inplace = true; - howto.src_mask = howto.dst_mask = N_ONES(howto.bitsize); + howto.src_mask = howto.dst_mask = N_ONES (howto.bitsize); howto.pcrel_offset = false; /* symbol */ @@ -3356,17 +3359,17 @@ xcoff_ppc_relocate_section (output_bfd, info, input_bfd, addend = 0; h = NULL; sym = NULL; - symndx = rel->r_symndx; + symndx = rel->r_symndx; - if (-1 != symndx) + if (-1 != symndx) { asection *sec; - + h = obj_xcoff_sym_hashes (input_bfd)[symndx]; sym = syms + symndx; addend = - sym->n_value; - - if (NULL == h) + + if (NULL == h) { sec = sections[symndx]; /* Hack to make sure we use the right TOC anchor value @@ -3379,32 +3382,32 @@ xcoff_ppc_relocate_section (output_bfd, info, input_bfd, + sec->output_offset + sym->n_value - sec->vma); - } - else + } + else { - if (h->root.type == bfd_link_hash_defined - || h->root.type == bfd_link_hash_defweak) + if (h->root.type == bfd_link_hash_defined + || h->root.type == bfd_link_hash_defweak) { sec = h->root.u.def.section; val = (h->root.u.def.value + sec->output_section->vma + sec->output_offset); - } - else if (h->root.type == bfd_link_hash_common) + } + else if (h->root.type == bfd_link_hash_common) { sec = h->root.u.c.p->section; val = (sec->output_section->vma + sec->output_offset); - - } - else if ((0 == (h->flags & (XCOFF_DEF_DYNAMIC | XCOFF_IMPORT))) - && ! info->relocateable) + + } + else if ((0 == (h->flags & (XCOFF_DEF_DYNAMIC | XCOFF_IMPORT))) + && ! info->relocateable) { if (! ((*info->callbacks->undefined_symbol) (info, h->root.root.string, input_bfd, input_section, rel->r_vaddr - input_section->vma, true))) return false; - + /* Don't try to process the reloc. It can't help, and it may generate another error. */ continue; @@ -3412,74 +3415,74 @@ xcoff_ppc_relocate_section (output_bfd, info, input_bfd, } } - if (rel->r_type >= XCOFF_MAX_CALCULATE_RELOCATION - || (false == xcoff_calculate_relocation[rel->r_type] - (input_bfd, input_section, output_bfd, rel, sym, &howto, val, - addend, &relocation, contents))) + if (rel->r_type >= XCOFF_MAX_CALCULATE_RELOCATION + || !((*xcoff_calculate_relocation[rel->r_type]) + (input_bfd, input_section, output_bfd, rel, sym, &howto, val, + addend, &relocation, contents))) return false; - + /* address */ address = rel->r_vaddr - input_section->vma; location = contents + address; - + if (address > input_section->_raw_size) - abort(); + abort (); /* Get the value we are going to relocate. */ if (1 == howto.size) value_to_relocate = bfd_get_16 (input_bfd, location); - else + else value_to_relocate = bfd_get_32 (input_bfd, location); - - /* overflow. - + + /* overflow. + FIXME: We may drop bits during the addition which we don't check for. We must either check at every single operation, which would be tedious, or we must do the computations in a type larger than bfd_vma, which would be inefficient. */ - - if ((unsigned int) howto.complain_on_overflow >= - XCOFF_MAX_COMPLAIN_OVERFLOW) - abort(); - if ((true == xcoff_complain_overflow[howto.complain_on_overflow] - (input_bfd, value_to_relocate, relocation, &howto))) + if ((unsigned int) howto.complain_on_overflow + >= XCOFF_MAX_COMPLAIN_OVERFLOW) + abort (); + + if (((*xcoff_complain_overflow[howto.complain_on_overflow]) + (input_bfd, value_to_relocate, relocation, &howto))) { const char *name; char buf[SYMNMLEN + 1]; char reloc_type_name[10]; - - if (symndx == -1) + + if (symndx == -1) { name = "*ABS*"; - } - else if (h != NULL) + } + else if (h != NULL) { name = h->root.root.string; - } - else + } + else { name = _bfd_coff_internal_syment_name (input_bfd, sym, buf); if (name == NULL) name = "UNKNOWN"; } sprintf (reloc_type_name, "0x%02x", rel->r_type); - + if (! ((*info->callbacks->reloc_overflow) (info, name, reloc_type_name, (bfd_vma) 0, input_bfd, input_section, rel->r_vaddr - input_section->vma))) return false; } - + /* Add RELOCATION to the right bits of VALUE_TO_RELOCATE. */ - value_to_relocate = ((value_to_relocate & ~howto.dst_mask) | - (((value_to_relocate & howto.src_mask) + - relocation) & howto.dst_mask)); - + value_to_relocate = ((value_to_relocate & ~howto.dst_mask) + | (((value_to_relocate & howto.src_mask) + + relocation) & howto.dst_mask)); + /* Put the value back in the object file. */ if (1 == howto.size) bfd_put_16 (input_bfd, value_to_relocate, location); - else + else bfd_put_32 (input_bfd, value_to_relocate, location); } @@ -3576,8 +3579,8 @@ xcoff_create_csect_from_smclas (abfd, aux, symbol_name) ".td", NULL, ".sv3264" }; - if ((19 >= aux->x_csect.x_smclas) && - (NULL != names[aux->x_csect.x_smclas])) + if ((19 >= aux->x_csect.x_smclas) + && (NULL != names[aux->x_csect.x_smclas])) { return_value = bfd_make_section_anyway (abfd, names[aux->x_csect.x_smclas]); @@ -3620,7 +3623,7 @@ xcoff_loader_symbol_offset (abfd, ldhdr) bfd *abfd; struct internal_ldhdr *ldhdr ATTRIBUTE_UNUSED; { - return bfd_xcoff_ldhdrsz(abfd); + return bfd_xcoff_ldhdrsz (abfd); } static bfd_vma @@ -3628,11 +3631,10 @@ xcoff_loader_reloc_offset (abfd, ldhdr) bfd *abfd; struct internal_ldhdr *ldhdr; { - return bfd_xcoff_ldhdrsz(abfd) + - (ldhdr->l_nsyms * bfd_xcoff_ldsymsz(abfd)); + return bfd_xcoff_ldhdrsz (abfd) + ldhdr->l_nsyms * bfd_xcoff_ldsymsz (abfd); } -static boolean +static boolean xcoff_generate_rtinit (abfd, init, fini, rtld) bfd *abfd; const char *init; @@ -3654,11 +3656,11 @@ xcoff_generate_rtinit (abfd, init, fini, rtld) struct internal_syment syment; union internal_auxent auxent; struct internal_reloc reloc; - + char *data_name = ".data"; char *rtinit_name = "__rtinit"; char *rtld_name = "__rtld"; - + if (! bfd_xcoff_rtinit_size (abfd)) return false; @@ -3669,7 +3671,7 @@ xcoff_generate_rtinit (abfd, init, fini, rtld) memset (filehdr_ext, 0, FILHSZ); memset (&filehdr, 0, sizeof (struct internal_filehdr)); filehdr.f_magic = bfd_xcoff_magic_number (abfd); - filehdr.f_nscns = 1; + filehdr.f_nscns = 1; filehdr.f_timdat = 0; filehdr.f_nsyms = 0; /* at least 6, no more than 10 */ filehdr.f_symptr = 0; /* set below */ @@ -3690,24 +3692,24 @@ xcoff_generate_rtinit (abfd, init, fini, rtld) scnhdr.s_nlnno = 0; scnhdr.s_flags = STYP_DATA; - /* .data - 0x0000 0x00000000 : rtl - 0x0004 0x00000010 : offset to init, or 0 - 0x0008 0x00000028 : offset to fini, or 0 - 0x000C 0x0000000C : size of descriptor - 0x0010 0x00000000 : init, needs a reloc - 0x0014 0x00000040 : offset to init name - 0x0018 0x00000000 : flags, padded to a word - 0x001C 0x00000000 : empty init - 0x0020 0x00000000 : - 0x0024 0x00000000 : - 0x0028 0x00000000 : fini, needs a reloc - 0x002C 0x00000??? : offset to fini name - 0x0030 0x00000000 : flags, padded to a word - 0x0034 0x00000000 : empty fini - 0x0038 0x00000000 : - 0x003C 0x00000000 : - 0x0040 init name + /* .data + 0x0000 0x00000000 : rtl + 0x0004 0x00000010 : offset to init, or 0 + 0x0008 0x00000028 : offset to fini, or 0 + 0x000C 0x0000000C : size of descriptor + 0x0010 0x00000000 : init, needs a reloc + 0x0014 0x00000040 : offset to init name + 0x0018 0x00000000 : flags, padded to a word + 0x001C 0x00000000 : empty init + 0x0020 0x00000000 : + 0x0024 0x00000000 : + 0x0028 0x00000000 : fini, needs a reloc + 0x002C 0x00000??? : offset to fini name + 0x0030 0x00000000 : flags, padded to a word + 0x0034 0x00000000 : empty fini + 0x0038 0x00000000 : + 0x003C 0x00000000 : + 0x0040 init name 0x0040 + initsz fini name */ data_buffer_size = 0x0040 + initsz + finisz; @@ -3717,7 +3719,7 @@ xcoff_generate_rtinit (abfd, init, fini, rtld) if (data_buffer == NULL) return false; - if (initsz) + if (initsz) { val = 0x10; bfd_h_put_32 (abfd, val, &data_buffer[0x04]); @@ -3726,7 +3728,7 @@ xcoff_generate_rtinit (abfd, init, fini, rtld) memcpy (&data_buffer[val], init, initsz); } - if (finisz) + if (finisz) { val = 0x28; bfd_h_put_32 (abfd, val, &data_buffer[0x08]); @@ -3742,7 +3744,7 @@ xcoff_generate_rtinit (abfd, init, fini, rtld) /* string table */ string_table_size = 0; - if (initsz > 9) + if (initsz > 9) string_table_size += initsz; if (finisz > 9) string_table_size += finisz; @@ -3757,12 +3759,12 @@ xcoff_generate_rtinit (abfd, init, fini, rtld) bfd_h_put_32 (abfd, val, &string_table[0]); st_tmp = string_table + 4; } - - /* symbols + + /* symbols 0. .data csect 2. __rtinit - 4. init function - 6. fini function + 4. init function + 6. fini function 8. __rtld */ memset (syment_ext, 0, 10 * SYMESZ); memset (reloc_ext, 0, 3 * RELSZ); @@ -3777,10 +3779,10 @@ xcoff_generate_rtinit (abfd, init, fini, rtld) auxent.x_csect.x_scnlen.l = data_buffer_size; auxent.x_csect.x_smtyp = 3 << 3 | XTY_SD; auxent.x_csect.x_smclas = XMC_RW; - bfd_coff_swap_sym_out (abfd, &syment, + bfd_coff_swap_sym_out (abfd, &syment, &syment_ext[filehdr.f_nsyms * SYMESZ]); - bfd_coff_swap_aux_out (abfd, &auxent, syment.n_type, syment.n_sclass, 0, - syment.n_numaux, + bfd_coff_swap_aux_out (abfd, &auxent, syment.n_type, syment.n_sclass, 0, + syment.n_numaux, &syment_ext[(filehdr.f_nsyms + 1) * SYMESZ]); filehdr.f_nsyms += 2; @@ -3793,20 +3795,20 @@ xcoff_generate_rtinit (abfd, init, fini, rtld) syment.n_numaux = 1; auxent.x_csect.x_smtyp = XTY_LD; auxent.x_csect.x_smclas = XMC_RW; - bfd_coff_swap_sym_out (abfd, &syment, + bfd_coff_swap_sym_out (abfd, &syment, &syment_ext[filehdr.f_nsyms * SYMESZ]); - bfd_coff_swap_aux_out (abfd, &auxent, syment.n_type, syment.n_sclass, 0, - syment.n_numaux, + bfd_coff_swap_aux_out (abfd, &auxent, syment.n_type, syment.n_sclass, 0, + syment.n_numaux, &syment_ext[(filehdr.f_nsyms + 1) * SYMESZ]); filehdr.f_nsyms += 2; /* init */ - if (initsz) + if (initsz) { memset (&syment, 0, sizeof (struct internal_syment)); memset (&auxent, 0, sizeof (union internal_auxent)); - if (initsz > 9) + if (initsz > 9) { syment._n._n_n._n_offset = st_tmp - string_table; memcpy (st_tmp, init, initsz); @@ -3817,10 +3819,10 @@ xcoff_generate_rtinit (abfd, init, fini, rtld) syment.n_sclass = C_EXT; syment.n_numaux = 1; - bfd_coff_swap_sym_out (abfd, &syment, + bfd_coff_swap_sym_out (abfd, &syment, &syment_ext[filehdr.f_nsyms * SYMESZ]); - bfd_coff_swap_aux_out (abfd, &auxent, syment.n_type, syment.n_sclass, 0, - syment.n_numaux, + bfd_coff_swap_aux_out (abfd, &auxent, syment.n_type, syment.n_sclass, 0, + syment.n_numaux, &syment_ext[(filehdr.f_nsyms + 1) * SYMESZ]); /* reloc */ @@ -3834,14 +3836,14 @@ xcoff_generate_rtinit (abfd, init, fini, rtld) filehdr.f_nsyms += 2; scnhdr.s_nreloc += 1; } - + /* fini */ - if (finisz) + if (finisz) { memset (&syment, 0, sizeof (struct internal_syment)); memset (&auxent, 0, sizeof (union internal_auxent)); - if (finisz > 9) + if (finisz > 9) { syment._n._n_n._n_offset = st_tmp - string_table; memcpy (st_tmp, fini, finisz); @@ -3852,10 +3854,10 @@ xcoff_generate_rtinit (abfd, init, fini, rtld) syment.n_sclass = C_EXT; syment.n_numaux = 1; - bfd_coff_swap_sym_out (abfd, &syment, + bfd_coff_swap_sym_out (abfd, &syment, &syment_ext[filehdr.f_nsyms * SYMESZ]); - bfd_coff_swap_aux_out (abfd, &auxent, syment.n_type, syment.n_sclass, 0, - syment.n_numaux, + bfd_coff_swap_aux_out (abfd, &auxent, syment.n_type, syment.n_sclass, 0, + syment.n_numaux, &syment_ext[(filehdr.f_nsyms + 1) * SYMESZ]); /* reloc */ @@ -3864,7 +3866,7 @@ xcoff_generate_rtinit (abfd, init, fini, rtld) reloc.r_symndx = filehdr.f_nsyms; reloc.r_type = R_POS; reloc.r_size = 31; - bfd_coff_swap_reloc_out (abfd, &reloc, + bfd_coff_swap_reloc_out (abfd, &reloc, &reloc_ext[scnhdr.s_nreloc * RELSZ]); filehdr.f_nsyms += 2; @@ -3878,10 +3880,10 @@ xcoff_generate_rtinit (abfd, init, fini, rtld) memcpy (syment._n._n_name, rtld_name, strlen (rtld_name)); syment.n_sclass = C_EXT; syment.n_numaux = 1; - bfd_coff_swap_sym_out (abfd, &syment, + bfd_coff_swap_sym_out (abfd, &syment, &syment_ext[filehdr.f_nsyms * SYMESZ]); - bfd_coff_swap_aux_out (abfd, &auxent, syment.n_type, syment.n_sclass, 0, - syment.n_numaux, + bfd_coff_swap_aux_out (abfd, &auxent, syment.n_type, syment.n_sclass, 0, + syment.n_numaux, &syment_ext[(filehdr.f_nsyms + 1) * SYMESZ]); /* reloc */ @@ -3890,7 +3892,7 @@ xcoff_generate_rtinit (abfd, init, fini, rtld) reloc.r_symndx = filehdr.f_nsyms; reloc.r_type = R_POS; reloc.r_size = 31; - bfd_coff_swap_reloc_out (abfd, &reloc, + bfd_coff_swap_reloc_out (abfd, &reloc, &reloc_ext[scnhdr.s_nreloc * RELSZ]); filehdr.f_nsyms += 2; @@ -3917,19 +3919,19 @@ xcoff_generate_rtinit (abfd, init, fini, rtld) static reloc_howto_type xcoff_dynamic_reloc = -HOWTO (0, /* type */ - 0, /* rightshift */ - 2, /* size (0 = byte, 1 = short, 2 = long) */ - 32, /* bitsize */ - false, /* pc_relative */ - 0, /* bitpos */ +HOWTO (0, /* type */ + 0, /* rightshift */ + 2, /* size (0 = byte, 1 = short, 2 = long) */ + 32, /* bitsize */ + false, /* pc_relative */ + 0, /* bitpos */ complain_overflow_bitfield, /* complain_on_overflow */ - 0, /* special_function */ - "R_POS", /* name */ - true, /* partial_inplace */ - 0xffffffff, /* src_mask */ - 0xffffffff, /* dst_mask */ - false); /* pcrel_offset */ + 0, /* special_function */ + "R_POS", /* name */ + true, /* partial_inplace */ + 0xffffffff, /* src_mask */ + 0xffffffff, /* dst_mask */ + false); /* pcrel_offset */ /* glink @@ -3953,81 +3955,81 @@ static unsigned long xcoff_glink_code[9] = static const struct xcoff_backend_data_rec bfd_xcoff_backend_data = { { /* COFF backend, defined in libcoff.h. */ - _bfd_xcoff_swap_aux_in, /* _bfd_coff_swap_aux_in */ - _bfd_xcoff_swap_sym_in, /* _bfd_coff_swap_sym_in */ - coff_swap_lineno_in, /* _bfd_coff_swap_lineno_in */ - _bfd_xcoff_swap_aux_out, /* _bfd_swap_aux_out */ - _bfd_xcoff_swap_sym_out, /* _bfd_swap_sym_out */ - coff_swap_lineno_out, /* _bfd_swap_lineno_out */ - xcoff_swap_reloc_out, /* _bfd_swap_reloc_out */ - coff_swap_filehdr_out, /* _bfd_swap_filehdr_out */ - coff_swap_aouthdr_out, /* _bfd_swap_aouthdr_out */ - coff_swap_scnhdr_out, /* _bfd_swap_scnhdr_out */ - FILHSZ, /* _bfd_filhsz */ - AOUTSZ, /* _bfd_aoutsz */ - SCNHSZ, /* _bfd_scnhsz */ - SYMESZ, /* _bfd_symesz */ - AUXESZ, /* _bfd_auxesz */ - RELSZ, /* _bfd_relsz */ - LINESZ, /* _bfd_linesz */ - FILNMLEN, /* _bfd_filnmlen */ - true, /* _bfd_coff_long_filenames */ - false, /* _bfd_coff_long_section_names */ - (3), /* _bfd_coff_default_section_alignment_power */ - false, /* _bfd_coff_force_symnames_in_strings */ - 2, /* _bfd_coff_debug_string_prefix_length */ - coff_swap_filehdr_in, /* _bfd_coff_swap_filehdr_in */ - coff_swap_aouthdr_in, /* _bfd_swap_aouthdr_in */ - coff_swap_scnhdr_in, /* _bfd_swap_scnhdr_in */ - xcoff_swap_reloc_in, /* _bfd_reloc_in */ - coff_bad_format_hook, /* _bfd_bad_format_hook */ - coff_set_arch_mach_hook, /* _bfd_set_arch_mach_hook */ - coff_mkobject_hook, /* _bfd_mkobject_hook */ - styp_to_sec_flags, /* _bfd_syp_to_sec_flags */ - coff_set_alignment_hook, /* _bfd_set_alignment_hook */ - coff_slurp_symbol_table, /* _bfd_coff_slurp_symbol_table */ - symname_in_debug_hook, /* _coff_symname_in_debug_hook */ - coff_pointerize_aux_hook, /* _bfd_coff_pointerize_aux_hook */ - coff_print_aux, /* bfd_coff_print_aux */ - dummy_reloc16_extra_cases, /* _bfd_coff_reloc16_extra_cases */ - dummy_reloc16_estimate, /* _bfd_coff_reloc16_estimate */ - NULL, /* bfd_coff_sym_is_global */ - coff_compute_section_file_positions, /* _bfd_coff_compute_section_file_positions */ - NULL, /* _bfd_coff_start_final_link */ - xcoff_ppc_relocate_section, /* _bfd_coff_relocate_section */ - coff_rtype_to_howto, /* _bfd_coff_rtype_to_howto */ - NULL, /* _bfd_coff_addust_symndx */ - _bfd_generic_link_add_one_symbol, /* _bfd_coff_add_one_symbol */ - coff_link_output_has_begun, /* _bfd_coff_link_output_has_begun */ - coff_final_link_postscript /* _bfd_coff_final_link_postscript */ + _bfd_xcoff_swap_aux_in, + _bfd_xcoff_swap_sym_in, + coff_swap_lineno_in, + _bfd_xcoff_swap_aux_out, + _bfd_xcoff_swap_sym_out, + coff_swap_lineno_out, + xcoff_swap_reloc_out, + coff_swap_filehdr_out, + coff_swap_aouthdr_out, + coff_swap_scnhdr_out, + FILHSZ, + AOUTSZ, + SCNHSZ, + SYMESZ, + AUXESZ, + RELSZ, + LINESZ, + FILNMLEN, + true, /* _bfd_coff_long_filenames */ + false, /* _bfd_coff_long_section_names */ + 3, /* _bfd_coff_default_section_alignment_power */ + false, /* _bfd_coff_force_symnames_in_strings */ + 2, /* _bfd_coff_debug_string_prefix_length */ + coff_swap_filehdr_in, + coff_swap_aouthdr_in, + coff_swap_scnhdr_in, + xcoff_swap_reloc_in, + coff_bad_format_hook, + coff_set_arch_mach_hook, + coff_mkobject_hook, + styp_to_sec_flags, + coff_set_alignment_hook, + coff_slurp_symbol_table, + symname_in_debug_hook, + coff_pointerize_aux_hook, + coff_print_aux, + dummy_reloc16_extra_cases, + dummy_reloc16_estimate, + NULL, /* bfd_coff_sym_is_global */ + coff_compute_section_file_positions, + NULL, /* _bfd_coff_start_final_link */ + xcoff_ppc_relocate_section, + coff_rtype_to_howto, + NULL, /* _bfd_coff_adjust_symndx */ + _bfd_generic_link_add_one_symbol, + coff_link_output_has_begun, + coff_final_link_postscript }, - 0x01DF, /* magic number */ - bfd_arch_rs6000, /* architecture */ - bfd_mach_rs6k, /* machine */ + 0x01DF, /* magic number */ + bfd_arch_rs6000, + bfd_mach_rs6k, /* Function pointers to xcoff specific swap routines. */ - xcoff_swap_ldhdr_in, /* _xcoff_swap_ldhdr_in */ - xcoff_swap_ldhdr_out, /* _xcoff_swap_ldhdr_out */ - xcoff_swap_ldsym_in, /* _xcoff_swap_ldsym_in */ - xcoff_swap_ldsym_out, /* _xcoff_swap_ldsym_out */ - xcoff_swap_ldrel_in, /* _xcoff_swap_ldrel_in */ - xcoff_swap_ldrel_out, /* _xcoff_swap_ldrel_out */ + xcoff_swap_ldhdr_in, + xcoff_swap_ldhdr_out, + xcoff_swap_ldsym_in, + xcoff_swap_ldsym_out, + xcoff_swap_ldrel_in, + xcoff_swap_ldrel_out, /* Sizes. */ - LDHDRSZ, /* _xcoff_ldhdrsz */ - LDSYMSZ, /* _xcoff_ldsymsz */ - LDRELSZ, /* _xcoff_ldrelsz */ - 12, /* _xcoff_function_descriptor_size */ - SMALL_AOUTSZ, /* _xcoff_small_aout_header_size */ + LDHDRSZ, + LDSYMSZ, + LDRELSZ, + 12, /* _xcoff_function_descriptor_size */ + SMALL_AOUTSZ, - /* Versions. */ - 1, /* _xcoff_ldhdr_version */ + /* Versions. */ + 1, /* _xcoff_ldhdr_version */ - _bfd_xcoff_put_symbol_name, /* _xcoff_put_symbol_name */ - _bfd_xcoff_put_ldsymbol_name, /* _xcoff_put_ldsymbol_name */ - & xcoff_dynamic_reloc, /* dynamic reloc howto */ - xcoff_create_csect_from_smclas, /* _xcoff_create_csect_from_smclas */ + _bfd_xcoff_put_symbol_name, + _bfd_xcoff_put_ldsymbol_name, + &xcoff_dynamic_reloc, + xcoff_create_csect_from_smclas, /* Lineno and reloc count overflow. */ xcoff_is_lineno_count_overflow, @@ -4037,427 +4039,391 @@ static const struct xcoff_backend_data_rec bfd_xcoff_backend_data = xcoff_loader_reloc_offset, /* glink. */ - & xcoff_glink_code[0], - (36), /* _xcoff_glink_size */ + &xcoff_glink_code[0], + 36, /* _xcoff_glink_size */ /* rtinit */ - 64, /* _xcoff_rtinit_size */ - xcoff_generate_rtinit, /* _xcoff_generate_rtinit */ -}; + 64, /* _xcoff_rtinit_size */ + xcoff_generate_rtinit, + }; /* The transfer vector that leads the outside world to all of the above. */ const bfd_target rs6000coff_vec = -{ - "aixcoff-rs6000", - bfd_target_xcoff_flavour, - BFD_ENDIAN_BIG, /* data byte order is big */ - BFD_ENDIAN_BIG, /* header byte order is big */ - - (HAS_RELOC | EXEC_P | /* object flags */ - HAS_LINENO | HAS_DEBUG | DYNAMIC | - HAS_SYMS | HAS_LOCALS | WP_TEXT), - - (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC), /* section flags */ - 0, /* leading char */ - '/', /* ar_pad_char */ - 15, /* ar_max_namelen??? FIXMEmgo */ - - /* data */ - bfd_getb64, /* bfd_getx64 */ - bfd_getb_signed_64, /* bfd_getx_signed_64 */ - bfd_putb64, /* bfd_putx64 */ - bfd_getb32, /* bfd_getx32 */ - bfd_getb_signed_32, /* bfd_getx_signed_32 */ - bfd_putb32, /* bfd_putx32 */ - bfd_getb16, /* bfd_getx16 */ - bfd_getb_signed_16, /* bfd_getx_signed_16 */ - bfd_putb16, /* bfd_putx16 */ - - /* hdrs */ - bfd_getb64, /* bfd_h_getx64 */ - bfd_getb_signed_64, /* bfd_h_getx_signed_64 */ - bfd_putb64, /* bfd_h_putx64 */ - bfd_getb32, /* bfd_h_getx32 */ - bfd_getb_signed_32, /* bfd_h_getx_signed_32 */ - bfd_putb32, /* bfd_h_putx32 */ - bfd_getb16, /* bfd_h_getx16 */ - bfd_getb_signed_16, /* bfd_h_getx_signed_16 */ - bfd_putb16, /* bfd_h_putx16 */ - - { /* bfd_check_format */ - _bfd_dummy_target, - coff_object_p, - _bfd_xcoff_archive_p, - CORE_FILE_P - }, - - { /* bfd_set_format */ - bfd_false, - coff_mkobject, - _bfd_generic_mkarchive, - bfd_false - }, + { + "aixcoff-rs6000", + bfd_target_xcoff_flavour, + BFD_ENDIAN_BIG, /* data byte order is big */ + BFD_ENDIAN_BIG, /* header byte order is big */ + + (HAS_RELOC | EXEC_P | HAS_LINENO | HAS_DEBUG | DYNAMIC + | HAS_SYMS | HAS_LOCALS | WP_TEXT), + + (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC), + 0, /* leading char */ + '/', /* ar_pad_char */ + 15, /* ar_max_namelen */ + + /* data */ + bfd_getb64, + bfd_getb_signed_64, + bfd_putb64, + bfd_getb32, + bfd_getb_signed_32, + bfd_putb32, + bfd_getb16, + bfd_getb_signed_16, + bfd_putb16, + + /* hdrs */ + bfd_getb64, + bfd_getb_signed_64, + bfd_putb64, + bfd_getb32, + bfd_getb_signed_32, + bfd_putb32, + bfd_getb16, + bfd_getb_signed_16, + bfd_putb16, + + { /* bfd_check_format */ + _bfd_dummy_target, + coff_object_p, + _bfd_xcoff_archive_p, + CORE_FILE_P + }, - {/* bfd_write_contents */ + { /* bfd_set_format */ + bfd_false, + coff_mkobject, + _bfd_generic_mkarchive, + bfd_false + }, + + {/* bfd_write_contents */ + bfd_false, + coff_write_object_contents, + _bfd_xcoff_write_archive_contents, + bfd_false + }, + + /* Generic */ + bfd_true, + bfd_true, + coff_new_section_hook, + _bfd_generic_get_section_contents, + _bfd_generic_get_section_contents_in_window, + + /* Copy */ + _bfd_xcoff_copy_private_bfd_data, + ((boolean (*) (bfd *, bfd *)) bfd_true), + ((boolean (*) (bfd *, asection *, bfd *, asection *)) bfd_true), + ((boolean (*) (bfd *, asymbol *, bfd *, asymbol *)) bfd_true), + ((boolean (*) (bfd *, flagword)) bfd_true), + ((boolean (*) (bfd *, void * )) bfd_true), + + /* Core */ + coff_core_file_failing_command, + coff_core_file_failing_signal, + coff_core_file_matches_executable_p, + + /* Archive */ + _bfd_xcoff_slurp_armap, bfd_false, - coff_write_object_contents, - _bfd_xcoff_write_archive_contents, - bfd_false - }, - - /* Generic */ - bfd_true, /* _close_and_cleanup */ - bfd_true, /* _bfd_free_cached_info */ - coff_new_section_hook, /* _new_section_hook */ - _bfd_generic_get_section_contents, /* _bfd_get_section_contents */ - /* _bfd_get_section_contents_in_window */ - _bfd_generic_get_section_contents_in_window, - - /* Copy */ - _bfd_xcoff_copy_private_bfd_data, /* _bfd_copy_private_bfd */ - /* _bfd_merge_private_bfd_data */ - ((boolean (*) (bfd *, bfd *)) bfd_true), - /* _bfd_copy_pivate_section_data */ - ((boolean (*) (bfd *, asection *, bfd *, asection *)) bfd_true), - /* _bfd_copy_private_symbol_data */ - ((boolean (*) (bfd *, asymbol *, bfd *, asymbol *)) bfd_true), - ((boolean (*) (bfd *, flagword)) bfd_true), /* _bfd_set_private_flags */ - ((boolean (*) (bfd *, void * )) bfd_true), /* _bfd_print_private_bfd_data */ - - /* Core */ - coff_core_file_failing_command, /* _core_file_failing_command */ - coff_core_file_failing_signal, /* _core_file_failing_signal */ - /* _core_file_matches_executable_p */ - coff_core_file_matches_executable_p, - - /* Archive */ - _bfd_xcoff_slurp_armap, /* _slurp_armap */ - /* XCOFF archives do not have - anything which corresponds to - an extended name table. */ - bfd_false, /* _slurp_extended_name_table */ - /* _construct_extended_name_table */ - ((boolean (*) (bfd *, char **, bfd_size_type *, const char **)) bfd_false), - bfd_dont_truncate_arname, /* _truncate_arname */ - _bfd_xcoff_write_armap, /* _write_armap */ - _bfd_xcoff_read_ar_hdr, /* _read_ar_hdr */ - _bfd_xcoff_openr_next_archived_file, /* _openr_next_archived_file */ - _bfd_generic_get_elt_at_index, /* _get_elt_at_index */ - _bfd_xcoff_stat_arch_elt, /* _generic_stat_arch_elt */ - /* XCOFF archives do not have - a timestamp. */ - bfd_true, /* _update_armap_timestamp */ - - /* Symbols */ - coff_get_symtab_upper_bound, /* _get_symtab_upper_bound */ - coff_get_symtab, /* _get_symtab */ - coff_make_empty_symbol, /* _make_empty_symbol */ - coff_print_symbol, /* _print_symbol */ - coff_get_symbol_info, /* _get_symbol_info */ - _bfd_xcoff_is_local_label_name, /* _bfd_is_local_label_name */ - coff_get_lineno, /* _get_lineno */ - coff_find_nearest_line, /* _find_nearest_line */ - coff_bfd_make_debug_symbol, /* _bfd_make_debug_symbol */ - _bfd_generic_read_minisymbols, /* _read_minisymbols */ - _bfd_generic_minisymbol_to_symbol, /* _minsymbol_to_symbol */ - - /* Reloc */ - coff_get_reloc_upper_bound, /* _get_reloc_upper_bound */ - coff_canonicalize_reloc, /* _cononicalize_reloc */ - _bfd_xcoff_reloc_type_lookup, /* _bfd_reloc_type_lookup */ - - /* Write */ - coff_set_arch_mach, /* _set_arch_mach */ - coff_set_section_contents, /* _set_section_contents */ - - /* Link */ - _bfd_xcoff_sizeof_headers, /* _sizeof_headers */ - /* _bfd_get_relocated_section_contents */ - bfd_generic_get_relocated_section_contents, - bfd_generic_relax_section, /* _bfd_relax_section */ - _bfd_xcoff_bfd_link_hash_table_create, /* _bfd_link_hash_table_create */ - _bfd_generic_link_hash_table_free, /* _bfd_link_hash_table_free */ - _bfd_xcoff_bfd_link_add_symbols, /* _bfd_link_add_symbols */ - _bfd_generic_link_just_syms, /* _bfd_link_just_syms */ - _bfd_xcoff_bfd_final_link, /* _bfd_final_link */ - _bfd_generic_link_split_section, /* _bfd_link_split_section */ - bfd_generic_gc_sections, /* _bfd_gc_sections */ - bfd_generic_merge_sections, /* _bfd_merge_sections */ - bfd_generic_discard_group, /* _bfd_discard_group */ - - /* Dynamic */ - /* _get_dynamic_symtab_upper_bound */ - _bfd_xcoff_get_dynamic_symtab_upper_bound, - _bfd_xcoff_canonicalize_dynamic_symtab, /* _cononicalize_dynamic_symtab */ - _bfd_xcoff_get_dynamic_reloc_upper_bound,/* _get_dynamic_reloc_upper_bound */ - _bfd_xcoff_canonicalize_dynamic_reloc, /* _cononicalize_dynamic_reloc */ - - /* Opposite endian version, none exists */ - NULL, - - /* back end data */ - (void *) &bfd_xcoff_backend_data, -}; + ((boolean (*) (bfd *, char **, bfd_size_type *, const char **)) bfd_false), + bfd_dont_truncate_arname, + _bfd_xcoff_write_armap, + _bfd_xcoff_read_ar_hdr, + _bfd_xcoff_openr_next_archived_file, + _bfd_generic_get_elt_at_index, + _bfd_xcoff_stat_arch_elt, + bfd_true, + + /* Symbols */ + coff_get_symtab_upper_bound, + coff_get_symtab, + coff_make_empty_symbol, + coff_print_symbol, + coff_get_symbol_info, + _bfd_xcoff_is_local_label_name, + coff_get_lineno, + coff_find_nearest_line, + coff_bfd_make_debug_symbol, + _bfd_generic_read_minisymbols, + _bfd_generic_minisymbol_to_symbol, + + /* Reloc */ + coff_get_reloc_upper_bound, + coff_canonicalize_reloc, + _bfd_xcoff_reloc_type_lookup, + + /* Write */ + coff_set_arch_mach, + coff_set_section_contents, + + /* Link */ + _bfd_xcoff_sizeof_headers, + bfd_generic_get_relocated_section_contents, + bfd_generic_relax_section, + _bfd_xcoff_bfd_link_hash_table_create, + _bfd_generic_link_hash_table_free, + _bfd_xcoff_bfd_link_add_symbols, + _bfd_generic_link_just_syms, + _bfd_xcoff_bfd_final_link, + _bfd_generic_link_split_section, + bfd_generic_gc_sections, + bfd_generic_merge_sections, + bfd_generic_discard_group, + + /* Dynamic */ + _bfd_xcoff_get_dynamic_symtab_upper_bound, + _bfd_xcoff_canonicalize_dynamic_symtab, + _bfd_xcoff_get_dynamic_reloc_upper_bound, + _bfd_xcoff_canonicalize_dynamic_reloc, + + /* Opposite endian version, none exists */ + NULL, + + (void *) &bfd_xcoff_backend_data, + }; -/* - * xcoff-powermac target - * Old target. - * Only difference between this target and the rs6000 target is the - * the default architecture and machine type used in coffcode.h - * - * PowerPC Macs use the same magic numbers as RS/6000 - * (because that's how they were bootstrapped originally), - * but they are always PowerPC architecture. - */ +/* xcoff-powermac target + Old target. + Only difference between this target and the rs6000 target is the + the default architecture and machine type used in coffcode.h + + PowerPC Macs use the same magic numbers as RS/6000 + (because that's how they were bootstrapped originally), + but they are always PowerPC architecture. */ static const struct xcoff_backend_data_rec bfd_pmac_xcoff_backend_data = -{ - { /* COFF backend, defined in libcoff.h */ - _bfd_xcoff_swap_aux_in, /* _bfd_coff_swap_aux_in */ - _bfd_xcoff_swap_sym_in, /* _bfd_coff_swap_sym_in */ - coff_swap_lineno_in, /* _bfd_coff_swap_lineno_in */ - _bfd_xcoff_swap_aux_out, /* _bfd_swap_aux_out */ - _bfd_xcoff_swap_sym_out, /* _bfd_swap_sym_out */ - coff_swap_lineno_out, /* _bfd_swap_lineno_out */ - xcoff_swap_reloc_out, /* _bfd_swap_reloc_out */ - coff_swap_filehdr_out, /* _bfd_swap_filehdr_out */ - coff_swap_aouthdr_out, /* _bfd_swap_aouthdr_out */ - coff_swap_scnhdr_out, /* _bfd_swap_scnhdr_out */ - FILHSZ, /* _bfd_filhsz */ - AOUTSZ, /* _bfd_aoutsz */ - SCNHSZ, /* _bfd_scnhsz */ - SYMESZ, /* _bfd_symesz */ - AUXESZ, /* _bfd_auxesz */ - RELSZ, /* _bfd_relsz */ - LINESZ, /* _bfd_linesz */ - FILNMLEN, /* _bfd_filnmlen */ - true, /* _bfd_coff_long_filenames */ - false, /* _bfd_coff_long_section_names */ - (3), /* _bfd_coff_default_section_alignment_power */ - false, /* _bfd_coff_force_symnames_in_strings */ - 2, /* _bfd_coff_debug_string_prefix_length */ - coff_swap_filehdr_in, /* _bfd_coff_swap_filehdr_in */ - coff_swap_aouthdr_in, /* _bfd_swap_aouthdr_in */ - coff_swap_scnhdr_in, /* _bfd_swap_scnhdr_in */ - xcoff_swap_reloc_in, /* _bfd_reloc_in */ - coff_bad_format_hook, /* _bfd_bad_format_hook */ - coff_set_arch_mach_hook, /* _bfd_set_arch_mach_hook */ - coff_mkobject_hook, /* _bfd_mkobject_hook */ - styp_to_sec_flags, /* _bfd_syp_to_sec_flags */ - coff_set_alignment_hook, /* _bfd_set_alignment_hook */ - coff_slurp_symbol_table, /* _bfd_coff_slurp_symbol_table */ - symname_in_debug_hook, /* _coff_symname_in_debug_hook */ - coff_pointerize_aux_hook, /* _bfd_coff_pointerize_aux_hook */ - coff_print_aux, /* bfd_coff_print_aux */ - dummy_reloc16_extra_cases, /* _bfd_coff_reloc16_extra_cases */ - dummy_reloc16_estimate, /* _bfd_coff_reloc16_estimate */ - NULL, /* bfd_coff_sym_is_global */ - /* _bfd_coff_compute_section_file_positions */ - coff_compute_section_file_positions, - NULL, /* _bfd_coff_start_final_link */ - xcoff_ppc_relocate_section, /* _bfd_coff_relocate_section */ - coff_rtype_to_howto, /* _bfd_coff_rtype_to_howto */ - NULL, /* _bfd_coff_addust_symndx */ - _bfd_generic_link_add_one_symbol, /* _bfd_coff_add_one_symbol */ - coff_link_output_has_begun, /* _bfd_coff_link_output_has_begun */ - coff_final_link_postscript /* _bfd_coff_final_link_postscript */ - }, - - 0x01DF, /* magic number */ - bfd_arch_powerpc, /* architecture */ - bfd_mach_ppc, /* machine */ - - /* function pointers to xcoff specific swap routines */ - xcoff_swap_ldhdr_in, /* _xcoff_swap_ldhdr_in */ - xcoff_swap_ldhdr_out, /* _xcoff_swap_ldhdr_out */ - xcoff_swap_ldsym_in, /* _xcoff_swap_ldsym_in */ - xcoff_swap_ldsym_out, /* _xcoff_swap_ldsym_out */ - xcoff_swap_ldrel_in, /* _xcoff_swap_ldrel_in */ - xcoff_swap_ldrel_out, /* _xcoff_swap_ldrel_out */ - - /* sizes */ - LDHDRSZ, /* _xcoff_ldhdrsz */ - LDSYMSZ, /* _xcoff_ldsymsz */ - LDRELSZ, /* _xcoff_ldrelsz */ - 12, /* _xcoff_function_descriptor_size */ - SMALL_AOUTSZ, /* _xcoff_small_aout_header_size */ - - /* versions */ - 1, /* _xcoff_ldhdr_version */ - - /* xcoff vs xcoff64 putting symbol names */ - _bfd_xcoff_put_symbol_name, /* _xcoff_put_symbol_name */ - _bfd_xcoff_put_ldsymbol_name, /* _xcoff_put_ldsymbol_name */ - - &xcoff_dynamic_reloc, /* dynamic reloc howto */ - - xcoff_create_csect_from_smclas, /* _xcoff_create_csect_from_smclas */ - - /* lineno and reloc count overflow */ - xcoff_is_lineno_count_overflow, - xcoff_is_reloc_count_overflow, - - xcoff_loader_symbol_offset, - xcoff_loader_reloc_offset, - - /* glink */ - &xcoff_glink_code[0], - (36), /* _xcoff_glink_size */ - - /* rtinit */ - 0, /* _xcoff_rtinit_size */ - xcoff_generate_rtinit, /* _xcoff_generate_rtinit */ -}; + { + { /* COFF backend, defined in libcoff.h. */ + _bfd_xcoff_swap_aux_in, + _bfd_xcoff_swap_sym_in, + coff_swap_lineno_in, + _bfd_xcoff_swap_aux_out, + _bfd_xcoff_swap_sym_out, + coff_swap_lineno_out, + xcoff_swap_reloc_out, + coff_swap_filehdr_out, + coff_swap_aouthdr_out, + coff_swap_scnhdr_out, + FILHSZ, + AOUTSZ, + SCNHSZ, + SYMESZ, + AUXESZ, + RELSZ, + LINESZ, + FILNMLEN, + true, /* _bfd_coff_long_filenames */ + false, /* _bfd_coff_long_section_names */ + 3, /* _bfd_coff_default_section_alignment_power */ + false, /* _bfd_coff_force_symnames_in_strings */ + 2, /* _bfd_coff_debug_string_prefix_length */ + coff_swap_filehdr_in, + coff_swap_aouthdr_in, + coff_swap_scnhdr_in, + xcoff_swap_reloc_in, + coff_bad_format_hook, + coff_set_arch_mach_hook, + coff_mkobject_hook, + styp_to_sec_flags, + coff_set_alignment_hook, + coff_slurp_symbol_table, + symname_in_debug_hook, + coff_pointerize_aux_hook, + coff_print_aux, + dummy_reloc16_extra_cases, + dummy_reloc16_estimate, + NULL, /* bfd_coff_sym_is_global */ + coff_compute_section_file_positions, + NULL, /* _bfd_coff_start_final_link */ + xcoff_ppc_relocate_section, + coff_rtype_to_howto, + NULL, /* _bfd_coff_adjust_symndx */ + _bfd_generic_link_add_one_symbol, + coff_link_output_has_begun, + coff_final_link_postscript + }, + + 0x01DF, /* magic number */ + bfd_arch_powerpc, + bfd_mach_ppc, + + /* Function pointers to xcoff specific swap routines. */ + xcoff_swap_ldhdr_in, + xcoff_swap_ldhdr_out, + xcoff_swap_ldsym_in, + xcoff_swap_ldsym_out, + xcoff_swap_ldrel_in, + xcoff_swap_ldrel_out, + + /* Sizes. */ + LDHDRSZ, + LDSYMSZ, + LDRELSZ, + 12, /* _xcoff_function_descriptor_size */ + SMALL_AOUTSZ, + + /* Versions. */ + 1, /* _xcoff_ldhdr_version */ + + _bfd_xcoff_put_symbol_name, + _bfd_xcoff_put_ldsymbol_name, + &xcoff_dynamic_reloc, + xcoff_create_csect_from_smclas, + + /* Lineno and reloc count overflow. */ + xcoff_is_lineno_count_overflow, + xcoff_is_reloc_count_overflow, + + xcoff_loader_symbol_offset, + xcoff_loader_reloc_offset, -/* The transfer vector that leads the outside world to all of the above. */ + /* glink. */ + &xcoff_glink_code[0], + 36, /* _xcoff_glink_size */ + + /* rtinit */ + 0, /* _xcoff_rtinit_size */ + xcoff_generate_rtinit, + }; + +/* The transfer vector that leads the outside world to all of the above. */ const bfd_target pmac_xcoff_vec = -{ - "xcoff-powermac", - bfd_target_xcoff_flavour, - BFD_ENDIAN_BIG, /* data byte order is big */ - BFD_ENDIAN_BIG, /* header byte order is big */ - - (HAS_RELOC | EXEC_P | /* object flags */ - HAS_LINENO | HAS_DEBUG | DYNAMIC | - HAS_SYMS | HAS_LOCALS | WP_TEXT), - - (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC), /* section flags */ - 0, /* leading char */ - '/', /* ar_pad_char */ - 15, /* ar_max_namelen??? FIXMEmgo */ - - /* data */ - bfd_getb64, /* bfd_getx64 */ - bfd_getb_signed_64, /* bfd_getx_signed_64 */ - bfd_putb64, /* bfd_putx64 */ - bfd_getb32, /* bfd_getx32 */ - bfd_getb_signed_32, /* bfd_getx_signed_32 */ - bfd_putb32, /* bfd_putx32 */ - bfd_getb16, /* bfd_getx16 */ - bfd_getb_signed_16, /* bfd_getx_signed_16 */ - bfd_putb16, /* bfd_putx16 */ - - /* hdrs */ - bfd_getb64, /* bfd_h_getx64 */ - bfd_getb_signed_64, /* bfd_h_getx_signed_64 */ - bfd_putb64, /* bfd_h_putx64 */ - bfd_getb32, /* bfd_h_getx32 */ - bfd_getb_signed_32, /* bfd_h_getx_signed_32 */ - bfd_putb32, /* bfd_h_putx32 */ - bfd_getb16, /* bfd_h_getx16 */ - bfd_getb_signed_16, /* bfd_h_getx_signed_16 */ - bfd_putb16, /* bfd_h_putx16 */ - - { /* bfd_check_format */ - _bfd_dummy_target, - coff_object_p, - _bfd_xcoff_archive_p, - CORE_FILE_P - }, - - { /* bfd_set_format */ - bfd_false, - coff_mkobject, - _bfd_generic_mkarchive, - bfd_false - }, + { + "xcoff-powermac", + bfd_target_xcoff_flavour, + BFD_ENDIAN_BIG, /* data byte order is big */ + BFD_ENDIAN_BIG, /* header byte order is big */ + + (HAS_RELOC | EXEC_P | HAS_LINENO | HAS_DEBUG | DYNAMIC + | HAS_SYMS | HAS_LOCALS | WP_TEXT), + + (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC), + 0, /* leading char */ + '/', /* ar_pad_char */ + 15, /* ar_max_namelen */ + + /* data */ + bfd_getb64, + bfd_getb_signed_64, + bfd_putb64, + bfd_getb32, + bfd_getb_signed_32, + bfd_putb32, + bfd_getb16, + bfd_getb_signed_16, + bfd_putb16, + + /* hdrs */ + bfd_getb64, + bfd_getb_signed_64, + bfd_putb64, + bfd_getb32, + bfd_getb_signed_32, + bfd_putb32, + bfd_getb16, + bfd_getb_signed_16, + bfd_putb16, + + { /* bfd_check_format */ + _bfd_dummy_target, + coff_object_p, + _bfd_xcoff_archive_p, + CORE_FILE_P + }, + + { /* bfd_set_format */ + bfd_false, + coff_mkobject, + _bfd_generic_mkarchive, + bfd_false + }, + + {/* bfd_write_contents */ + bfd_false, + coff_write_object_contents, + _bfd_xcoff_write_archive_contents, + bfd_false + }, - {/* bfd_write_contents */ + /* Generic */ + bfd_true, + bfd_true, + coff_new_section_hook, + _bfd_generic_get_section_contents, + _bfd_generic_get_section_contents_in_window, + + /* Copy */ + _bfd_xcoff_copy_private_bfd_data, + ((boolean (*) (bfd *, bfd *)) bfd_true), + ((boolean (*) (bfd *, asection *, bfd *, asection *)) bfd_true), + ((boolean (*) (bfd *, asymbol *, bfd *, asymbol *)) bfd_true), + ((boolean (*) (bfd *, flagword)) bfd_true), + ((boolean (*) (bfd *, void * )) bfd_true), + + /* Core */ + coff_core_file_failing_command, + coff_core_file_failing_signal, + coff_core_file_matches_executable_p, + + /* Archive */ + _bfd_xcoff_slurp_armap, bfd_false, - coff_write_object_contents, - _bfd_xcoff_write_archive_contents, - bfd_false - }, - - /* Generic */ - bfd_true, /* _close_and_cleanup */ - bfd_true, /* _bfd_free_cached_info */ - coff_new_section_hook, /* _new_section_hook */ - _bfd_generic_get_section_contents, /* _bfd_get_section_contents */ - /* _bfd_get_section_contents_in_window */ - _bfd_generic_get_section_contents_in_window, - - /* Copy */ - _bfd_xcoff_copy_private_bfd_data, /* _bfd_copy_private_bfd */ - /* _bfd_merge_private_bfd_data */ - ((boolean (*) (bfd *, bfd *)) bfd_true), - /* _bfd_copy_pivate_section_data */ - ((boolean (*) (bfd *, asection *, bfd *, asection *)) bfd_true), - /* _bfd_copy_private_symbol_data */ - ((boolean (*) (bfd *, asymbol *, bfd *, asymbol *)) bfd_true), - ((boolean (*) (bfd *, flagword)) bfd_true), /* _bfd_set_private_flags */ - ((boolean (*) (bfd *, void * )) bfd_true), /* _bfd_print_private_bfd_data */ - - /* Core */ - coff_core_file_failing_command, /* _core_file_failing_command */ - coff_core_file_failing_signal, /* _core_file_failing_signal */ - /* _core_file_matches_executable_p */ - coff_core_file_matches_executable_p, - - /* Archive */ - _bfd_xcoff_slurp_armap, /* _slurp_armap */ - /* XCOFF archives do not have - anything which corresponds to - an extended name table. */ - bfd_false, /* _slurp_extended_name_table */ - /* _construct_extended_name_table */ - ((boolean (*) (bfd *, char **, bfd_size_type *, const char **)) bfd_false), - bfd_dont_truncate_arname, /* _truncate_arname */ - _bfd_xcoff_write_armap, /* _write_armap */ - _bfd_xcoff_read_ar_hdr, /* _read_ar_hdr */ - _bfd_xcoff_openr_next_archived_file, /* _openr_next_archived_file */ - _bfd_generic_get_elt_at_index, /* _get_elt_at_index */ - _bfd_xcoff_stat_arch_elt, /* _generic_stat_arch_elt */ - /* XCOFF archives do not have - a timestamp. */ - bfd_true, /* _update_armap_timestamp */ - - /* Symbols */ - coff_get_symtab_upper_bound, /* _get_symtab_upper_bound */ - coff_get_symtab, /* _get_symtab */ - coff_make_empty_symbol, /* _make_empty_symbol */ - coff_print_symbol, /* _print_symbol */ - coff_get_symbol_info, /* _get_symbol_info */ - _bfd_xcoff_is_local_label_name, /* _bfd_is_local_label_name */ - coff_get_lineno, /* _get_lineno */ - coff_find_nearest_line, /* _find_nearest_line */ - coff_bfd_make_debug_symbol, /* _bfd_make_debug_symbol */ - _bfd_generic_read_minisymbols, /* _read_minisymbols */ - _bfd_generic_minisymbol_to_symbol, /* _minsymbol_to_symbol */ - - /* Reloc */ - coff_get_reloc_upper_bound, /* _get_reloc_upper_bound */ - coff_canonicalize_reloc, /* _cononicalize_reloc */ - _bfd_xcoff_reloc_type_lookup, /* _bfd_reloc_type_lookup */ - - /* Write */ - coff_set_arch_mach, /* _set_arch_mach */ - coff_set_section_contents, /* _set_section_contents */ - - /* Link */ - _bfd_xcoff_sizeof_headers, /* _sizeof_headers */ - /* _bfd_get_relocated_section_contents */ - bfd_generic_get_relocated_section_contents, - bfd_generic_relax_section, /* _bfd_relax_section */ - _bfd_xcoff_bfd_link_hash_table_create, /* _bfd_link_hash_table_create */ - _bfd_generic_link_hash_table_free, /* _bfd_link_hash_table_free */ - _bfd_xcoff_bfd_link_add_symbols, /* _bfd_link_add_symbols */ - _bfd_generic_link_just_syms, /* _bfd_link_just_syms */ - _bfd_xcoff_bfd_final_link, /* _bfd_final_link */ - _bfd_generic_link_split_section, /* _bfd_link_split_section */ - bfd_generic_gc_sections, /* _bfd_gc_sections */ - bfd_generic_merge_sections, /* _bfd_merge_sections */ - bfd_generic_discard_group, /* _bfd_discard_group */ - - /* Dynamic */ - /* _get_dynamic_symtab_upper_bound */ - _bfd_xcoff_get_dynamic_symtab_upper_bound, - _bfd_xcoff_canonicalize_dynamic_symtab, /* _cononicalize_dynamic_symtab */ - _bfd_xcoff_get_dynamic_reloc_upper_bound,/* _get_dynamic_reloc_upper_bound */ - _bfd_xcoff_canonicalize_dynamic_reloc, /* _cononicalize_dynamic_reloc */ - - /* Opposite endian version, none exists */ - NULL, - - /* back end data */ - (void *) &bfd_pmac_xcoff_backend_data, -}; + ((boolean (*) (bfd *, char **, bfd_size_type *, const char **)) bfd_false), + bfd_dont_truncate_arname, + _bfd_xcoff_write_armap, + _bfd_xcoff_read_ar_hdr, + _bfd_xcoff_openr_next_archived_file, + _bfd_generic_get_elt_at_index, + _bfd_xcoff_stat_arch_elt, + bfd_true, + + /* Symbols */ + coff_get_symtab_upper_bound, + coff_get_symtab, + coff_make_empty_symbol, + coff_print_symbol, + coff_get_symbol_info, + _bfd_xcoff_is_local_label_name, + coff_get_lineno, + coff_find_nearest_line, + coff_bfd_make_debug_symbol, + _bfd_generic_read_minisymbols, + _bfd_generic_minisymbol_to_symbol, + + /* Reloc */ + coff_get_reloc_upper_bound, + coff_canonicalize_reloc, + _bfd_xcoff_reloc_type_lookup, + + /* Write */ + coff_set_arch_mach, + coff_set_section_contents, + + /* Link */ + _bfd_xcoff_sizeof_headers, + bfd_generic_get_relocated_section_contents, + bfd_generic_relax_section, + _bfd_xcoff_bfd_link_hash_table_create, + _bfd_generic_link_hash_table_free, + _bfd_xcoff_bfd_link_add_symbols, + _bfd_generic_link_just_syms, + _bfd_xcoff_bfd_final_link, + _bfd_generic_link_split_section, + bfd_generic_gc_sections, + bfd_generic_merge_sections, + bfd_generic_discard_group, + + /* Dynamic */ + _bfd_xcoff_get_dynamic_symtab_upper_bound, + _bfd_xcoff_canonicalize_dynamic_symtab, + _bfd_xcoff_get_dynamic_reloc_upper_bound, + _bfd_xcoff_canonicalize_dynamic_reloc, + + /* Opposite endian version, none exists */ + NULL, + + (void *) &bfd_pmac_xcoff_backend_data, + }; diff --git a/bfd/coff64-rs6000.c b/bfd/coff64-rs6000.c index 439b31f..06ac776 100644 --- a/bfd/coff64-rs6000.c +++ b/bfd/coff64-rs6000.c @@ -156,36 +156,36 @@ static boolean xcoff64_bad_format_hook PARAMS ((bfd *, PTR )); static boolean xcoff64_reloc_type_br PARAMS ((XCOFF_RELOC_FUNCTION_ARGS)); boolean (*xcoff64_calculate_relocation[XCOFF_MAX_CALCULATE_RELOCATION]) - (XCOFF_RELOC_FUNCTION_ARGS) = + PARAMS ((XCOFF_RELOC_FUNCTION_ARGS)) = { - xcoff_reloc_type_pos, /* R_POS (0x00) */ - xcoff_reloc_type_neg, /* R_NEG (0x01) */ - xcoff_reloc_type_rel, /* R_REL (0x02) */ - xcoff_reloc_type_toc, /* R_TOC (0x03) */ + xcoff_reloc_type_pos, /* R_POS (0x00) */ + xcoff_reloc_type_neg, /* R_NEG (0x01) */ + xcoff_reloc_type_rel, /* R_REL (0x02) */ + xcoff_reloc_type_toc, /* R_TOC (0x03) */ xcoff_reloc_type_fail, /* R_RTB (0x04) */ - xcoff_reloc_type_toc, /* R_GL (0x05) */ - xcoff_reloc_type_toc, /* R_TCL (0x06) */ - xcoff_reloc_type_fail, /* (0x07) */ - xcoff_reloc_type_ba, /* R_BA (0x08) */ - xcoff_reloc_type_fail, /* (0x09) */ + xcoff_reloc_type_toc, /* R_GL (0x05) */ + xcoff_reloc_type_toc, /* R_TCL (0x06) */ + xcoff_reloc_type_fail, /* (0x07) */ + xcoff_reloc_type_ba, /* R_BA (0x08) */ + xcoff_reloc_type_fail, /* (0x09) */ xcoff64_reloc_type_br, /* R_BR (0x0a) */ - xcoff_reloc_type_fail, /* (0x0b) */ - xcoff_reloc_type_pos, /* R_RL (0x0c) */ - xcoff_reloc_type_pos, /* R_RLA (0x0d) */ - xcoff_reloc_type_fail, /* (0x0e) */ + xcoff_reloc_type_fail, /* (0x0b) */ + xcoff_reloc_type_pos, /* R_RL (0x0c) */ + xcoff_reloc_type_pos, /* R_RLA (0x0d) */ + xcoff_reloc_type_fail, /* (0x0e) */ xcoff_reloc_type_noop, /* R_REF (0x0f) */ - xcoff_reloc_type_fail, /* (0x10) */ - xcoff_reloc_type_fail, /* (0x11) */ - xcoff_reloc_type_toc, /* R_TRL (0x12) */ - xcoff_reloc_type_toc, /* R_TRLA (0x13) */ + xcoff_reloc_type_fail, /* (0x10) */ + xcoff_reloc_type_fail, /* (0x11) */ + xcoff_reloc_type_toc, /* R_TRL (0x12) */ + xcoff_reloc_type_toc, /* R_TRLA (0x13) */ xcoff_reloc_type_fail, /* R_RRTBI (0x14) */ xcoff_reloc_type_fail, /* R_RRTBA (0x15) */ - xcoff_reloc_type_ba, /* R_CAI (0x16) */ + xcoff_reloc_type_ba, /* R_CAI (0x16) */ xcoff_reloc_type_crel, /* R_CREL (0x17) */ - xcoff_reloc_type_ba, /* R_RBA (0x18) */ - xcoff_reloc_type_ba, /* R_RBAC (0x19) */ + xcoff_reloc_type_ba, /* R_RBA (0x18) */ + xcoff_reloc_type_ba, /* R_RBAC (0x19) */ xcoff64_reloc_type_br, /* R_RBR (0x1a) */ - xcoff_reloc_type_ba, /* R_RBRC (0x1b) */ + xcoff_reloc_type_ba, /* R_RBRC (0x1b) */ }; /* coffcode.h needs these to be defined. */ @@ -214,7 +214,7 @@ boolean (*xcoff64_calculate_relocation[XCOFF_MAX_CALCULATE_RELOCATION]) #ifdef AIX_CORE extern const bfd_target * rs6000coff_core_p PARAMS ((bfd *abfd)); extern boolean rs6000coff_core_file_matches_executable_p - PARAMS((bfd *cbfd, bfd *ebfd)); + PARAMS ((bfd *cbfd, bfd *ebfd)); extern char *rs6000coff_core_file_failing_command PARAMS ((bfd *abfd)); extern int rs6000coff_core_file_failing_signal PARAMS ((bfd *abfd)); #define CORE_FILE_P rs6000coff_core_p @@ -722,7 +722,7 @@ xcoff64_swap_ldrel_out (abfd, src, d) static boolean xcoff64_write_object_contents (abfd) - bfd * abfd; + bfd *abfd; { asection *current; boolean hasrelocs = false; @@ -886,9 +886,11 @@ xcoff64_write_object_contents (abfd) memset (&internal_a, 0, sizeof internal_a); internal_f.f_magic = bfd_xcoff_magic_number (abfd); - internal_a.magic = (abfd->flags & D_PAGED) ? RS6K_AOUTHDR_ZMAGIC : - (abfd->flags & WP_TEXT) ? RS6K_AOUTHDR_NMAGIC : - RS6K_AOUTHDR_OMAGIC; + internal_a.magic = (abfd->flags & D_PAGED + ? RS6K_AOUTHDR_ZMAGIC + : (abfd->flags & WP_TEXT + ? RS6K_AOUTHDR_NMAGIC + : RS6K_AOUTHDR_OMAGIC)); /* FIXME: Does anybody ever set this to another value? */ internal_a.vstamp = 0; @@ -1054,7 +1056,7 @@ xcoff64_write_object_contents (abfd) if (buff == NULL) return false; - bfd_coff_swap_aouthdr_out (abfd, (PTR) & internal_a, (PTR) buff); + bfd_coff_swap_aouthdr_out (abfd, (PTR) &internal_a, (PTR) buff); amount = bfd_bwrite ((PTR) buff, amount, abfd); free (buff); @@ -1066,8 +1068,8 @@ xcoff64_write_object_contents (abfd) return true; } -static boolean -xcoff64_reloc_type_br (input_bfd, input_section, output_bfd, rel, sym, howto, +static boolean +xcoff64_reloc_type_br (input_bfd, input_section, output_bfd, rel, sym, howto, val, addend, relocation, contents) bfd *input_bfd; asection *input_section; @@ -1082,7 +1084,7 @@ xcoff64_reloc_type_br (input_bfd, input_section, output_bfd, rel, sym, howto, { struct xcoff_link_hash_entry *h; - if (0 > rel->r_symndx) + if (0 > rel->r_symndx) return false; h = obj_xcoff_sym_hashes (input_bfd)[rel->r_symndx]; @@ -1094,53 +1096,53 @@ xcoff64_reloc_type_br (input_bfd, input_section, output_bfd, rel, sym, howto, call is followed by a ld r2,40(r1), but the call is not going to global linkage code, we can replace the load with a cror. */ - if (NULL != h - && bfd_link_hash_defined == h->root.type - && (rel->r_vaddr - input_section->vma + 8 <= - input_section->_cooked_size)) + if (NULL != h + && bfd_link_hash_defined == h->root.type + && (rel->r_vaddr - input_section->vma + 8 + <= input_section->_cooked_size)) { bfd_byte *pnext; unsigned long next; - + pnext = contents + (rel->r_vaddr - input_section->vma) + 4; next = bfd_get_32 (input_bfd, pnext); - - /* The _ptrgl function is magic. It is used by the AIX compiler to call + + /* The _ptrgl function is magic. It is used by the AIX compiler to call a function through a pointer. */ - if (h->smclas == XMC_GL || strcmp (h->root.root.string, "._ptrgl") == 0) + if (h->smclas == XMC_GL || strcmp (h->root.root.string, "._ptrgl") == 0) { - if (next == 0x4def7b82 /* cror 15,15,15 */ - || next == 0x4ffffb82 /* cror 31,31,31 */ - || next == 0x60000000) /* ori r0,r0,0 */ - bfd_put_32 (input_bfd, 0xe8410028, pnext); /* ld r2,40(r1) */ - } - else + if (next == 0x4def7b82 /* cror 15,15,15 */ + || next == 0x4ffffb82 /* cror 31,31,31 */ + || next == 0x60000000) /* ori r0,r0,0 */ + bfd_put_32 (input_bfd, 0xe8410028, pnext); /* ld r2,40(r1) */ + } + else { - if (next == 0xe8410028) /* ld r2,40(r1) */ - bfd_put_32 (input_bfd, 0x60000000, pnext); /* ori r0,r0,0 */ + if (next == 0xe8410028) /* ld r2,40(r1) */ + bfd_put_32 (input_bfd, 0x60000000, pnext); /* ori r0,r0,0 */ } - } - else if (NULL != h && bfd_link_hash_undefined == h->root.type) + } + else if (NULL != h && bfd_link_hash_undefined == h->root.type) { /* Normally, this relocation is against a defined symbol. In the case where this is a partial link and the output section offset - is greater than 2^25, the linker will return an invalid error + is greater than 2^25, the linker will return an invalid error message that the relocation has been truncated. Yes it has been - truncated but no it not important. For this case, disable the + truncated but no it not important. For this case, disable the overflow checking. */ howto->complain_on_overflow = complain_overflow_dont; } - + howto->pc_relative = true; howto->src_mask &= ~3; howto->dst_mask = howto->src_mask; - + /* A PC relative reloc includes the section address. */ addend += input_section->vma; - + *relocation = val + addend; - *relocation -= (input_section->output_section->vma + - input_section->output_offset); + *relocation -= (input_section->output_section->vma + + input_section->output_offset); return true; } @@ -1179,8 +1181,8 @@ xcoff64_ppc_relocate_section (output_bfd, info, input_bfd, bfd_byte *location; /* Relocation type R_REF is a special relocation type which is - merely used to prevent garbage collection from occurring for - the csect including the symbol which it references. */ + merely used to prevent garbage collection from occurring for + the csect including the symbol which it references. */ if (rel->r_type == R_REF) continue; @@ -1191,12 +1193,13 @@ xcoff64_ppc_relocate_section (output_bfd, info, input_bfd, howto.size = howto.bitsize > 16 ? (howto.bitsize > 32 ? 4 : 2) : 1; howto.pc_relative = false; howto.bitpos = 0; - howto.complain_on_overflow = rel->r_size & 0x80 ? - complain_overflow_signed : complain_overflow_bitfield; + howto.complain_on_overflow = (rel->r_size & 0x80 + ? complain_overflow_signed + : complain_overflow_bitfield); howto.special_function = NULL; howto.name = "internal"; howto.partial_inplace = true; - howto.src_mask = howto.dst_mask = N_ONES(howto.bitsize); + howto.src_mask = howto.dst_mask = N_ONES (howto.bitsize); howto.pcrel_offset = false; /* symbol */ @@ -1204,17 +1207,17 @@ xcoff64_ppc_relocate_section (output_bfd, info, input_bfd, addend = 0; h = NULL; sym = NULL; - symndx = rel->r_symndx; + symndx = rel->r_symndx; - if (-1 != symndx) + if (-1 != symndx) { asection *sec; - + h = obj_xcoff_sym_hashes (input_bfd)[symndx]; sym = syms + symndx; addend = - sym->n_value; - - if (NULL == h) + + if (NULL == h) { sec = sections[symndx]; /* Hack to make sure we use the right TOC anchor value @@ -1227,93 +1230,93 @@ xcoff64_ppc_relocate_section (output_bfd, info, input_bfd, + sec->output_offset + sym->n_value - sec->vma); - } - else + } + else { - if (h->root.type == bfd_link_hash_defined - || h->root.type == bfd_link_hash_defweak) + if (h->root.type == bfd_link_hash_defined + || h->root.type == bfd_link_hash_defweak) { sec = h->root.u.def.section; val = (h->root.u.def.value + sec->output_section->vma + sec->output_offset); - } - else if (h->root.type == bfd_link_hash_common) + } + else if (h->root.type == bfd_link_hash_common) { sec = h->root.u.c.p->section; val = (sec->output_section->vma + sec->output_offset); - } - else if ((0 == (h->flags & (XCOFF_DEF_DYNAMIC | XCOFF_IMPORT))) - && ! info->relocateable) + } + else if ((0 == (h->flags & (XCOFF_DEF_DYNAMIC | XCOFF_IMPORT))) + && ! info->relocateable) { if (! ((*info->callbacks->undefined_symbol) (info, h->root.root.string, input_bfd, input_section, rel->r_vaddr - input_section->vma, true))) return false; - + /* Don't try to process the reloc. It can't help, and it may generate another error. */ continue; } } } - - if (rel->r_type >= XCOFF_MAX_CALCULATE_RELOCATION - || (false == xcoff64_calculate_relocation[rel->r_type] - (input_bfd, input_section, output_bfd, rel, sym, &howto, val, - addend, &relocation, contents))) + + if (rel->r_type >= XCOFF_MAX_CALCULATE_RELOCATION + || ((*xcoff64_calculate_relocation[rel->r_type]) + (input_bfd, input_section, output_bfd, rel, sym, &howto, val, + addend, &relocation, contents))) return false; - + /* address */ address = rel->r_vaddr - input_section->vma; location = contents + address; - + if (address > input_section->_raw_size) - abort(); - + abort (); + /* Get the value we are going to relocate. */ if (1 == howto.size) value_to_relocate = bfd_get_16 (input_bfd, location); else if (2 == howto.size) value_to_relocate = bfd_get_32 (input_bfd, location); - else + else value_to_relocate = bfd_get_64 (input_bfd, location); - - /* overflow. - + + /* overflow. + FIXME: We may drop bits during the addition which we don't check for. We must either check at every single operation, which would be tedious, or we must do the computations in a type larger than bfd_vma, which would be inefficient. */ - - if ((unsigned int) howto.complain_on_overflow >= - XCOFF_MAX_COMPLAIN_OVERFLOW) - abort(); - - if ((true == xcoff_complain_overflow[howto.complain_on_overflow] - (input_bfd, value_to_relocate, relocation, &howto))) + + if ((unsigned int) howto.complain_on_overflow + >= XCOFF_MAX_COMPLAIN_OVERFLOW) + abort (); + + if (((*xcoff_complain_overflow[howto.complain_on_overflow]) + (input_bfd, value_to_relocate, relocation, &howto))) { const char *name; char buf[SYMNMLEN + 1]; char reloc_type_name[10]; - - if (symndx == -1) + + if (symndx == -1) { name = "*ABS*"; - } - else if (h != NULL) + } + else if (h != NULL) { name = h->root.root.string; - } - else + } + else { name = _bfd_coff_internal_syment_name (input_bfd, sym, buf); if (name == NULL) name = "UNKNOWN"; } sprintf (reloc_type_name, "0x%02x", rel->r_type); - + if (! ((*info->callbacks->reloc_overflow) (info, name, reloc_type_name, (bfd_vma) 0, input_bfd, input_section, rel->r_vaddr - input_section->vma))) @@ -1321,10 +1324,10 @@ xcoff64_ppc_relocate_section (output_bfd, info, input_bfd, } /* Add RELOCATION to the right bits of VALUE_TO_RELOCATE. */ - value_to_relocate = ((value_to_relocate & ~howto.dst_mask) | - (((value_to_relocate & howto.src_mask) + - relocation) & howto.dst_mask)); - + value_to_relocate = ((value_to_relocate & ~howto.dst_mask) + | (((value_to_relocate & howto.src_mask) + + relocation) & howto.dst_mask)); + /* Put the value back in the object file. */ if (1 == howto.size) bfd_put_16 (input_bfd, value_to_relocate, location); @@ -1332,7 +1335,7 @@ xcoff64_ppc_relocate_section (output_bfd, info, input_bfd, bfd_put_32 (input_bfd, value_to_relocate, location); else bfd_put_64 (input_bfd, value_to_relocate, location); - + } return true; } @@ -1406,7 +1409,7 @@ reloc_howto_type xcoff64_howto_table[] = 0xffff, /* dst_mask */ false), /* pcrel_offset */ - /* I don't really know what this is. */ + /* I don't really know what this is. */ HOWTO (R_RTB, /* type */ 1, /* rightshift */ 2, /* size (0 = byte, 1 = short, 2 = long) */ @@ -1519,7 +1522,7 @@ reloc_howto_type xcoff64_howto_table[] = EMPTY_HOWTO (0xe), - /* Non-relocating reference. */ + /* Non-relocating reference. */ HOWTO (R_REF, /* type */ 0, /* rightshift */ 2, /* size (0 = byte, 1 = short, 2 = long) */ @@ -1612,7 +1615,7 @@ reloc_howto_type xcoff64_howto_table[] = 0xffff, /* dst_mask */ false), /* pcrel_offset */ - /* Modifiable call relative. */ + /* Modifiable call relative. */ HOWTO (R_CREL, /* type */ 0, /* rightshift */ 1, /* size (0 = byte, 1 = short, 2 = long) */ @@ -1717,19 +1720,19 @@ reloc_howto_type xcoff64_howto_table[] = false), /* pcrel_offset */ /* Modifiable branch relative. */ - HOWTO (R_RBR, /* type */ - 0, /* rightshift */ - 1, /* size (0 = byte, 1 = short, 2 = long) */ - 16, /* bitsize */ - false, /* pc_relative */ - 0, /* bitpos */ + HOWTO (R_RBR, /* type */ + 0, /* rightshift */ + 1, /* size (0 = byte, 1 = short, 2 = long) */ + 16, /* bitsize */ + false, /* pc_relative */ + 0, /* bitpos */ complain_overflow_signed, /* complain_on_overflow */ - 0, /* special_function */ - "R_RBR_16", /* name */ - true, /* partial_inplace */ - 0xffff, /* src_mask */ - 0xffff, /* dst_mask */ - false), /* pcrel_offset */ + 0, /* special_function */ + "R_RBR_16", /* name */ + true, /* partial_inplace */ + 0xffff, /* src_mask */ + 0xffff, /* dst_mask */ + false), /* pcrel_offset */ /* Modifiable branch absolute. */ HOWTO (R_RBA, /* type */ @@ -1758,24 +1761,24 @@ xcoff64_rtype2howto (relent, internal) /* Default howto layout works most of the time */ relent->howto = &xcoff64_howto_table[internal->r_type]; - + /* Special case some 16 bit reoloc */ if (15 == (internal->r_size & 0x3f)) { - if (R_BA == internal->r_type) + if (R_BA == internal->r_type) relent->howto = &xcoff64_howto_table[0x1d]; - else if (R_RBR == internal->r_type) + else if (R_RBR == internal->r_type) relent->howto = &xcoff64_howto_table[0x1e]; - else if (R_RBA == internal->r_type) + else if (R_RBA == internal->r_type) relent->howto = &xcoff64_howto_table[0x1f]; } /* Special case 32 bit */ else if (31 == (internal->r_size & 0x3f)) { - if (R_POS == internal->r_type) + if (R_POS == internal->r_type) relent->howto = &xcoff64_howto_table[0x1c]; } - + /* The r_size field of an XCOFF reloc encodes the bitsize of the relocation, as well as indicating whether it is signed or not. Doublecheck that the relocation information gathered from the @@ -1787,8 +1790,9 @@ xcoff64_rtype2howto (relent, internal) abort (); /* Put a meaningful value in addend */ - relent->addend = (internal->r_size & 0x80) ? - internal->r_vaddr - : internal->r_vaddr; + relent->addend = (internal->r_size & 0x80 + ? -internal->r_vaddr + : internal->r_vaddr); } reloc_howto_type * @@ -2226,29 +2230,29 @@ xcoff64_generate_rtinit (abfd, init, fini, rtld) bss_scnhdr.s_flags = STYP_BSS; /* .data - 0x0000 0x00000000 : rtl - 0x0004 0x00000000 : - 0x0008 0x00000018 : offset to init, or 0 - 0x000C 0x00000038 : offset to fini, or 0 - 0x0010 0x00000010 : size of descriptor - 0x0014 0x00000000 : pad - 0x0018 0x00000000 : init, needs a reloc - 0x001C 0x00000000 : - 0x0020 0x00000058 : offset to init name - 0x0024 0x00000000 : flags, padded to a word - 0x0028 0x00000000 : empty init - 0x002C 0x00000000 : - 0x0030 0x00000000 : - 0x0034 0x00000000 : - 0x0038 0x00000000 : fini, needs a reloc - 0x003C 0x00000000 : - 0x0040 0x00000??? : offset to fini name - 0x0044 0x00000000 : flags, padded to a word - 0x0048 0x00000000 : empty fini - 0x004C 0x00000000 : - 0x0050 0x00000000 : - 0x0054 0x00000000 : - 0x0058 init name + 0x0000 0x00000000 : rtl + 0x0004 0x00000000 : + 0x0008 0x00000018 : offset to init, or 0 + 0x000C 0x00000038 : offset to fini, or 0 + 0x0010 0x00000010 : size of descriptor + 0x0014 0x00000000 : pad + 0x0018 0x00000000 : init, needs a reloc + 0x001C 0x00000000 : + 0x0020 0x00000058 : offset to init name + 0x0024 0x00000000 : flags, padded to a word + 0x0028 0x00000000 : empty init + 0x002C 0x00000000 : + 0x0030 0x00000000 : + 0x0034 0x00000000 : + 0x0038 0x00000000 : fini, needs a reloc + 0x003C 0x00000000 : + 0x0040 0x00000??? : offset to fini name + 0x0044 0x00000000 : flags, padded to a word + 0x0048 0x00000000 : empty fini + 0x004C 0x00000000 : + 0x0050 0x00000000 : + 0x0054 0x00000000 : + 0x0058 init name 0x0058 + initsz fini name */ data_buffer_size = 0x0058 + initsz + finisz; @@ -2287,7 +2291,7 @@ xcoff64_generate_rtinit (abfd, init, fini, rtld) string_table_size += strlen (rtinit_name) + 1; string_table_size += initsz; string_table_size += finisz; - if (true == rtld) + if (rtld) string_table_size += strlen (rtld_name) + 1; string_table = (bfd_byte *) bfd_zmalloc (string_table_size); @@ -2491,506 +2495,474 @@ static unsigned long xcoff64_glink_code[10] = }; static const struct xcoff_backend_data_rec bfd_xcoff_backend_data = -{ - { /* COFF backend, defined in libcoff.h. */ - _bfd_xcoff64_swap_aux_in, /* _bfd_coff_swap_aux_in */ - _bfd_xcoff64_swap_sym_in, /* _bfd_coff_swap_sym_in */ - _bfd_xcoff64_swap_lineno_in, /* _bfd_coff_swap_lineno_in */ - _bfd_xcoff64_swap_aux_out, /* _bfd_swap_aux_out */ - _bfd_xcoff64_swap_sym_out, /* _bfd_swap_sym_out */ - _bfd_xcoff64_swap_lineno_out, /* _bfd_swap_lineno_out */ - xcoff64_swap_reloc_out, /* _bfd_swap_reloc_out */ - coff_swap_filehdr_out, /* _bfd_swap_filehdr_out */ - coff_swap_aouthdr_out, /* _bfd_swap_aouthdr_out */ - coff_swap_scnhdr_out, /* _bfd_swap_scnhdr_out */ - FILHSZ, /* _bfd_filhsz */ - AOUTSZ, /* _bfd_aoutsz */ - SCNHSZ, /* _bfd_scnhsz */ - SYMESZ, /* _bfd_symesz */ - AUXESZ, /* _bfd_auxesz */ - RELSZ, /* _bfd_relsz */ - LINESZ, /* _bfd_linesz */ - FILNMLEN, /* _bfd_filnmlen */ - true, /* _bfd_coff_long_filenames */ - false, /* _bfd_coff_long_section_names */ - (3), /* _bfd_coff_default_section_alignment_power */ - true, /* _bfd_coff_force_symnames_in_strings */ - 4, /* _bfd_coff_debug_string_prefix_length */ - coff_swap_filehdr_in, /* _bfd_coff_swap_filehdr_in */ - coff_swap_aouthdr_in, /* _bfd_swap_aouthdr_in */ - coff_swap_scnhdr_in, /* _bfd_swap_scnhdr_in */ - xcoff64_swap_reloc_in, /* _bfd_reloc_in */ - xcoff64_bad_format_hook, /* _bfd_bad_format_hook */ - coff_set_arch_mach_hook, /* _bfd_set_arch_mach_hook */ - coff_mkobject_hook, /* _bfd_mkobject_hook */ - styp_to_sec_flags, /* _bfd_syp_to_sec_flags */ - coff_set_alignment_hook, /* _bfd_set_alignment_hook */ - coff_slurp_symbol_table, /* _bfd_coff_slurp_symbol_table */ - symname_in_debug_hook, /* _coff_symname_in_debug_hook */ - coff_pointerize_aux_hook, /* _bfd_coff_pointerize_aux_hook */ - coff_print_aux, /* bfd_coff_print_aux */ - dummy_reloc16_extra_cases, /* _bfd_coff_reloc16_extra_cases */ - dummy_reloc16_estimate, /* _bfd_coff_reloc16_estimate */ - NULL, /* bfd_coff_sym_is_global */ - /* _bfd_coff_compute_section_file_positions */ - coff_compute_section_file_positions, - NULL , /* _bfd_coff_start_final_link */ - xcoff64_ppc_relocate_section, /* _bfd_coff_relocate_section */ - coff_rtype_to_howto, /* _bfd_coff_rtype_to_howto */ - NULL , /* _bfd_coff_addust_symndx */ - _bfd_generic_link_add_one_symbol, /* _bfd_coff_add_one_symbol */ - coff_link_output_has_begun, /* _bfd_coff_link_output_has_begun */ - coff_final_link_postscript /* _bfd_coff_final_link_postscript */ - }, - - 0x01EF, /* magic number */ - bfd_arch_powerpc, /* architecture */ - bfd_mach_ppc_620, /* machine */ - - /* Function pointers to xcoff specific swap routines. */ - xcoff64_swap_ldhdr_in, /* _xcoff_swap_ldhdr_in */ - xcoff64_swap_ldhdr_out, /* _xcoff_swap_ldhdr_out */ - xcoff64_swap_ldsym_in, /* _xcoff_swap_ldsym_in */ - xcoff64_swap_ldsym_out, /* _xcoff_swap_ldsym_out */ - xcoff64_swap_ldrel_in, /* _xcoff_swap_ldrel_in */ - xcoff64_swap_ldrel_out, /* _xcoff_swap_ldrel_out */ - - /* Sizes. */ - LDHDRSZ, /* _xcoff_ldhdrsz */ - LDSYMSZ, /* _xcoff_ldsymsz */ - LDRELSZ, /* _xcoff_ldrelsz */ - 24, /* _xcoff_function_descriptor_size */ - 0, /* _xcoff_small_aout_header_size */ - - /* Versions. */ - 2, /* _xcoff_ldhdr_version */ - - /* xcoff vs xcoff64 putting symbol names. */ - _bfd_xcoff64_put_symbol_name, /* _xcoff_put_symbol_name */ - _bfd_xcoff64_put_ldsymbol_name, /* _xcoff_put_ldsymbol_name */ - - /* Dynamic reloc howto. */ - &xcoff64_dynamic_reloc, - - xcoff64_create_csect_from_smclas, - - /* Lineno and reloc count overflow. */ - xcoff64_is_lineno_count_overflow, - xcoff64_is_reloc_count_overflow, - - xcoff64_loader_symbol_offset, - xcoff64_loader_reloc_offset, - - /* glink. */ - &xcoff64_glink_code[0], - 40, /* _xcoff_glink_size */ - - /* rtinit. */ - 88, /* _xcoff_rtinit_size */ - xcoff64_generate_rtinit, /* _xcoff_generate_rtinit */ -}; + { + { /* COFF backend, defined in libcoff.h. */ + _bfd_xcoff64_swap_aux_in, + _bfd_xcoff64_swap_sym_in, + _bfd_xcoff64_swap_lineno_in, + _bfd_xcoff64_swap_aux_out, + _bfd_xcoff64_swap_sym_out, + _bfd_xcoff64_swap_lineno_out, + xcoff64_swap_reloc_out, + coff_swap_filehdr_out, + coff_swap_aouthdr_out, + coff_swap_scnhdr_out, + FILHSZ, + AOUTSZ, + SCNHSZ, + SYMESZ, + AUXESZ, + RELSZ, + LINESZ, + FILNMLEN, + true, /* _bfd_coff_long_filenames */ + false, /* _bfd_coff_long_section_names */ + 3, /* _bfd_coff_default_section_alignment_power */ + true, /* _bfd_coff_force_symnames_in_strings */ + 4, /* _bfd_coff_debug_string_prefix_length */ + coff_swap_filehdr_in, + coff_swap_aouthdr_in, + coff_swap_scnhdr_in, + xcoff64_swap_reloc_in, + xcoff64_bad_format_hook, + coff_set_arch_mach_hook, + coff_mkobject_hook, + styp_to_sec_flags, + coff_set_alignment_hook, + coff_slurp_symbol_table, + symname_in_debug_hook, + coff_pointerize_aux_hook, + coff_print_aux, + dummy_reloc16_extra_cases, + dummy_reloc16_estimate, + NULL, /* bfd_coff_sym_is_global */ + coff_compute_section_file_positions, + NULL, /* _bfd_coff_start_final_link */ + xcoff64_ppc_relocate_section, + coff_rtype_to_howto, + NULL, /* _bfd_coff_adjust_symndx */ + _bfd_generic_link_add_one_symbol, + coff_link_output_has_begun, + coff_final_link_postscript + }, + + 0x01EF, /* magic number */ + bfd_arch_powerpc, + bfd_mach_ppc_620, + + /* Function pointers to xcoff specific swap routines. */ + xcoff64_swap_ldhdr_in, + xcoff64_swap_ldhdr_out, + xcoff64_swap_ldsym_in, + xcoff64_swap_ldsym_out, + xcoff64_swap_ldrel_in, + xcoff64_swap_ldrel_out, + + /* Sizes. */ + LDHDRSZ, + LDSYMSZ, + LDRELSZ, + 24, /* _xcoff_function_descriptor_size */ + 0, /* _xcoff_small_aout_header_size */ + + /* Versions. */ + 2, /* _xcoff_ldhdr_version */ + + _bfd_xcoff64_put_symbol_name, + _bfd_xcoff64_put_ldsymbol_name, + &xcoff64_dynamic_reloc, + xcoff64_create_csect_from_smclas, + + /* Lineno and reloc count overflow. */ + xcoff64_is_lineno_count_overflow, + xcoff64_is_reloc_count_overflow, + + xcoff64_loader_symbol_offset, + xcoff64_loader_reloc_offset, + + /* glink. */ + &xcoff64_glink_code[0], + 40, /* _xcoff_glink_size */ + + /* rtinit. */ + 88, /* _xcoff_rtinit_size */ + xcoff64_generate_rtinit, + }; /* The transfer vector that leads the outside world to all of the above. */ const bfd_target rs6000coff64_vec = -{ - "aixcoff64-rs6000", - bfd_target_xcoff_flavour, - BFD_ENDIAN_BIG, /* data byte order is big */ - BFD_ENDIAN_BIG, /* header byte order is big */ - - (HAS_RELOC | EXEC_P | /* object flags */ - HAS_LINENO | HAS_DEBUG | DYNAMIC | - HAS_SYMS | HAS_LOCALS | WP_TEXT), - - (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC), /* section flags */ - 0, /* leading char */ - '/', /* ar_pad_char */ - 15, /* ar_max_namelen??? FIXMEmgo */ - - /* data */ - bfd_getb64, /* bfd_getx64 */ - bfd_getb_signed_64, /* bfd_getx_signed_64 */ - bfd_putb64, /* bfd_putx64 */ - bfd_getb32, /* bfd_getx32 */ - bfd_getb_signed_32, /* bfd_getx_signed_32 */ - bfd_putb32, /* bfd_putx32 */ - bfd_getb16, /* bfd_getx16 */ - bfd_getb_signed_16, /* bfd_getx_signed_16 */ - bfd_putb16, /* bfd_putx16 */ - - /* hdrs */ - bfd_getb64, /* bfd_h_getx64 */ - bfd_getb_signed_64, /* bfd_h_getx_signed_64 */ - bfd_putb64, /* bfd_h_putx64 */ - bfd_getb32, /* bfd_h_getx32 */ - bfd_getb_signed_32, /* bfd_h_getx_signed_32 */ - bfd_putb32, /* bfd_h_putx32 */ - bfd_getb16, /* bfd_h_getx16 */ - bfd_getb_signed_16, /* bfd_h_getx_signed_16 */ - bfd_putb16, /* bfd_h_putx16 */ - - { /* bfd_check_format */ - _bfd_dummy_target, - coff_object_p, - xcoff64_archive_p, - CORE_FILE_P - }, - - { /* bfd_set_format */ - bfd_false, - coff_mkobject, - _bfd_generic_mkarchive, - bfd_false - }, - - {/* bfd_write_contents */ + { + "aixcoff64-rs6000", + bfd_target_xcoff_flavour, + BFD_ENDIAN_BIG, /* data byte order is big */ + BFD_ENDIAN_BIG, /* header byte order is big */ + + (HAS_RELOC | EXEC_P | HAS_LINENO | HAS_DEBUG | DYNAMIC + | HAS_SYMS | HAS_LOCALS | WP_TEXT), + + (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC), + 0, /* leading char */ + '/', /* ar_pad_char */ + 15, /* ar_max_namelen */ + + /* data */ + bfd_getb64, + bfd_getb_signed_64, + bfd_putb64, + bfd_getb32, + bfd_getb_signed_32, + bfd_putb32, + bfd_getb16, + bfd_getb_signed_16, + bfd_putb16, + + /* hdrs */ + bfd_getb64, + bfd_getb_signed_64, + bfd_putb64, + bfd_getb32, + bfd_getb_signed_32, + bfd_putb32, + bfd_getb16, + bfd_getb_signed_16, + bfd_putb16, + + { /* bfd_check_format */ + _bfd_dummy_target, + coff_object_p, + xcoff64_archive_p, + CORE_FILE_P + }, + + { /* bfd_set_format */ + bfd_false, + coff_mkobject, + _bfd_generic_mkarchive, + bfd_false + }, + + {/* bfd_write_contents */ + bfd_false, + xcoff64_write_object_contents, + _bfd_xcoff_write_archive_contents, + bfd_false + }, + + /* Generic */ + bfd_true, + bfd_true, + coff_new_section_hook, + _bfd_generic_get_section_contents, + _bfd_generic_get_section_contents_in_window, + + /* Copy */ + _bfd_xcoff_copy_private_bfd_data, + ((boolean (*) (bfd *, bfd *)) bfd_true), + ((boolean (*) (bfd *, asection *, bfd *, asection *)) bfd_true), + ((boolean (*) (bfd *, asymbol *, bfd *, asymbol *)) bfd_true), + ((boolean (*) (bfd *, flagword)) bfd_true), + ((boolean (*) (bfd *, void * )) bfd_true), + + /* Core */ + coff_core_file_failing_command, + coff_core_file_failing_signal, + coff_core_file_matches_executable_p, + + /* Archive */ + xcoff64_slurp_armap, bfd_false, - xcoff64_write_object_contents, - _bfd_xcoff_write_archive_contents, - bfd_false - }, - - /* Generic */ - bfd_true, /* _close_and_cleanup */ - bfd_true, /* _bfd_free_cached_info */ - coff_new_section_hook, /* _new_section_hook */ - _bfd_generic_get_section_contents, /* _bfd_get_section_contents */ - /* _bfd_get_section_contents_in_window */ - _bfd_generic_get_section_contents_in_window, - - /* Copy */ - _bfd_xcoff_copy_private_bfd_data, /* _bfd_copy_private_bfd */ - /* _bfd_merge_private_bfd_data */ - ((boolean (*) (bfd *, bfd *)) bfd_true), - /* _bfd_copy_pivate_section_data */ - ((boolean (*) (bfd *, asection *, bfd *, asection *)) bfd_true), - /* _bfd_copy_private_symbol_data */ - ((boolean (*) (bfd *, asymbol *, bfd *, asymbol *)) bfd_true), - ((boolean (*) (bfd *, flagword)) bfd_true), /* _bfd_set_private_flags */ - ((boolean (*) (bfd *, void * )) bfd_true), /* _bfd_print_private_bfd_data */ - - /* Core */ - coff_core_file_failing_command, /* _core_file_failing_command */ - coff_core_file_failing_signal, /* _core_file_failing_signal */ - coff_core_file_matches_executable_p, /* _core_file_matches_executable_p */ - - /* Archive */ - xcoff64_slurp_armap, /* _slurp_armap */ - /* XCOFF archives do not have anything which corresponds to an - extended name table. */ - bfd_false, /* _slurp_extended_name_table */ - /* _construct_extended_name_table */ - ((boolean (*) (bfd *, char **, bfd_size_type *, const char **)) bfd_false), - bfd_dont_truncate_arname, /* _truncate_arname */ - _bfd_xcoff_write_armap, /* _write_armap */ - _bfd_xcoff_read_ar_hdr, /* _read_ar_hdr */ - xcoff64_openr_next_archived_file, /* _openr_next_archived_file */ - _bfd_generic_get_elt_at_index, /* _get_elt_at_index */ - _bfd_xcoff_stat_arch_elt, /* _generic_stat_arch_elt */ - /* XCOFF archives do not have a timestamp. */ - bfd_true, /* _update_armap_timestamp */ - - /* Symbols */ - coff_get_symtab_upper_bound, /* _get_symtab_upper_bound */ - coff_get_symtab, /* _get_symtab */ - coff_make_empty_symbol, /* _make_empty_symbol */ - coff_print_symbol, /* _print_symbol */ - coff_get_symbol_info, /* _get_symbol_info */ - _bfd_xcoff_is_local_label_name, /* _bfd_is_local_label_name */ - coff_get_lineno, /* _get_lineno */ - coff_find_nearest_line, /* _find_nearest_line */ - coff_bfd_make_debug_symbol, /* _bfd_make_debug_symbol */ - _bfd_generic_read_minisymbols, /* _read_minisymbols */ - _bfd_generic_minisymbol_to_symbol, /* _minsymbol_to_symbol */ - - /* Reloc */ - coff_get_reloc_upper_bound, /* _get_reloc_upper_bound */ - coff_canonicalize_reloc, /* _cononicalize_reloc */ - xcoff64_reloc_type_lookup, /* _bfd_reloc_type_lookup */ - - /* Write */ - coff_set_arch_mach, /* _set_arch_mach */ - coff_set_section_contents, /* _set_section_contents */ - - /* Link */ - xcoff64_sizeof_headers, /* _sizeof_headers */ - /* _bfd_get_relocated_section_contents */ - bfd_generic_get_relocated_section_contents, - bfd_generic_relax_section, /* _bfd_relax_section */ - _bfd_xcoff_bfd_link_hash_table_create,/* _bfd_link_hash_table_create */ - _bfd_generic_link_hash_table_free, /* _bfd_link_hash_table_free */ - _bfd_xcoff_bfd_link_add_symbols, /* _bfd_link_add_symbols */ - _bfd_generic_link_just_syms, /* _bfd_link_just_syms */ - _bfd_xcoff_bfd_final_link, /* _bfd_final_link */ - _bfd_generic_link_split_section, /* _bfd_link_split_section */ - bfd_generic_gc_sections, /* _bfd_gc_sections */ - bfd_generic_merge_sections, /* _bfd_merge_sections */ - bfd_generic_discard_group, /* _bfd_discard_group */ - - /* Dynamic */ - /* _get_dynamic_symtab_upper_bound */ - _bfd_xcoff_get_dynamic_symtab_upper_bound, - _bfd_xcoff_canonicalize_dynamic_symtab, /* _cononicalize_dynamic_symtab */ - _bfd_xcoff_get_dynamic_reloc_upper_bound,/* _get_dynamic_reloc_upper_bound */ - _bfd_xcoff_canonicalize_dynamic_reloc, /* _cononicalize_dynamic_reloc */ - - /* Opposite endian version, none exists */ - NULL, - - /* back end data */ - (void *) &bfd_xcoff_backend_data, -}; + ((boolean (*) (bfd *, char **, bfd_size_type *, const char **)) bfd_false), + bfd_dont_truncate_arname, + _bfd_xcoff_write_armap, + _bfd_xcoff_read_ar_hdr, + xcoff64_openr_next_archived_file, + _bfd_generic_get_elt_at_index, + _bfd_xcoff_stat_arch_elt, + bfd_true, + + /* Symbols */ + coff_get_symtab_upper_bound, + coff_get_symtab, + coff_make_empty_symbol, + coff_print_symbol, + coff_get_symbol_info, + _bfd_xcoff_is_local_label_name, + coff_get_lineno, + coff_find_nearest_line, + coff_bfd_make_debug_symbol, + _bfd_generic_read_minisymbols, + _bfd_generic_minisymbol_to_symbol, + + /* Reloc */ + coff_get_reloc_upper_bound, + coff_canonicalize_reloc, + xcoff64_reloc_type_lookup, + + /* Write */ + coff_set_arch_mach, + coff_set_section_contents, + + /* Link */ + xcoff64_sizeof_headers, + bfd_generic_get_relocated_section_contents, + bfd_generic_relax_section, + _bfd_xcoff_bfd_link_hash_table_create, + _bfd_generic_link_hash_table_free, + _bfd_xcoff_bfd_link_add_symbols, + _bfd_generic_link_just_syms, + _bfd_xcoff_bfd_final_link, + _bfd_generic_link_split_section, + bfd_generic_gc_sections, + bfd_generic_merge_sections, + bfd_generic_discard_group, + + /* Dynamic */ + _bfd_xcoff_get_dynamic_symtab_upper_bound, + _bfd_xcoff_canonicalize_dynamic_symtab, + _bfd_xcoff_get_dynamic_reloc_upper_bound, + _bfd_xcoff_canonicalize_dynamic_reloc, + + /* Opposite endian version, none exists */ + NULL, + + (void *) &bfd_xcoff_backend_data, + }; extern const bfd_target *xcoff64_core_p PARAMS ((bfd *)); -extern boolean xcoff64_core_file_matches_executable_p PARAMS((bfd *, bfd *)); +extern boolean xcoff64_core_file_matches_executable_p PARAMS ((bfd *, bfd *)); extern char *xcoff64_core_file_failing_command PARAMS ((bfd *)); extern int xcoff64_core_file_failing_signal PARAMS ((bfd *)); /* AIX 5 */ static const struct xcoff_backend_data_rec bfd_xcoff_aix5_backend_data = -{ - { /* COFF backend, defined in libcoff.h. */ - _bfd_xcoff64_swap_aux_in, /* _bfd_coff_swap_aux_in */ - _bfd_xcoff64_swap_sym_in, /* _bfd_coff_swap_sym_in */ - _bfd_xcoff64_swap_lineno_in, /* _bfd_coff_swap_lineno_in */ - _bfd_xcoff64_swap_aux_out, /* _bfd_swap_aux_out */ - _bfd_xcoff64_swap_sym_out, /* _bfd_swap_sym_out */ - _bfd_xcoff64_swap_lineno_out, /* _bfd_swap_lineno_out */ - xcoff64_swap_reloc_out, /* _bfd_swap_reloc_out */ - coff_swap_filehdr_out, /* _bfd_swap_filehdr_out */ - coff_swap_aouthdr_out, /* _bfd_swap_aouthdr_out */ - coff_swap_scnhdr_out, /* _bfd_swap_scnhdr_out */ - FILHSZ, /* _bfd_filhsz */ - AOUTSZ, /* _bfd_aoutsz */ - SCNHSZ, /* _bfd_scnhsz */ - SYMESZ, /* _bfd_symesz */ - AUXESZ, /* _bfd_auxesz */ - RELSZ, /* _bfd_relsz */ - LINESZ, /* _bfd_linesz */ - FILNMLEN, /* _bfd_filnmlen */ - true, /* _bfd_coff_long_filenames */ - false, /* _bfd_coff_long_section_names */ - (3), /* _bfd_coff_default_section_alignment_power */ - true, /* _bfd_coff_force_symnames_in_strings */ - 4, /* _bfd_coff_debug_string_prefix_length */ - coff_swap_filehdr_in, /* _bfd_coff_swap_filehdr_in */ - coff_swap_aouthdr_in, /* _bfd_swap_aouthdr_in */ - coff_swap_scnhdr_in, /* _bfd_swap_scnhdr_in */ - xcoff64_swap_reloc_in, /* _bfd_reloc_in */ - xcoff64_bad_format_hook, /* _bfd_bad_format_hook */ - coff_set_arch_mach_hook, /* _bfd_set_arch_mach_hook */ - coff_mkobject_hook, /* _bfd_mkobject_hook */ - styp_to_sec_flags, /* _bfd_syp_to_sec_flags */ - coff_set_alignment_hook, /* _bfd_set_alignment_hook */ - coff_slurp_symbol_table, /* _bfd_coff_slurp_symbol_table */ - symname_in_debug_hook, /* _coff_symname_in_debug_hook */ - coff_pointerize_aux_hook, /* _bfd_coff_pointerize_aux_hook */ - coff_print_aux, /* bfd_coff_print_aux */ - dummy_reloc16_extra_cases, /* _bfd_coff_reloc16_extra_cases */ - dummy_reloc16_estimate, /* _bfd_coff_reloc16_estimate */ - NULL, /* bfd_coff_sym_is_global */ - /* _bfd_coff_compute_section_file_positions */ - coff_compute_section_file_positions, - NULL , /* _bfd_coff_start_final_link */ - xcoff64_ppc_relocate_section, /* _bfd_coff_relocate_section */ - coff_rtype_to_howto, /* _bfd_coff_rtype_to_howto */ - NULL , /* _bfd_coff_addust_symndx */ - _bfd_generic_link_add_one_symbol, /* _bfd_coff_add_one_symbol */ - coff_link_output_has_begun, /* _bfd_coff_link_output_has_begun */ - coff_final_link_postscript /* _bfd_coff_final_link_postscript */ - }, - - U64_TOCMAGIC, /* magic number */ - bfd_arch_powerpc, /* architecture */ - bfd_mach_ppc_620, /* machine */ - - /* Function pointers to xcoff specific swap routines. */ - xcoff64_swap_ldhdr_in, /* _xcoff_swap_ldhdr_in */ - xcoff64_swap_ldhdr_out, /* _xcoff_swap_ldhdr_out */ - xcoff64_swap_ldsym_in, /* _xcoff_swap_ldsym_in */ - xcoff64_swap_ldsym_out, /* _xcoff_swap_ldsym_out */ - xcoff64_swap_ldrel_in, /* _xcoff_swap_ldrel_in */ - xcoff64_swap_ldrel_out, /* _xcoff_swap_ldrel_out */ - - /* Sizes. */ - LDHDRSZ, /* _xcoff_ldhdrsz */ - LDSYMSZ, /* _xcoff_ldsymsz */ - LDRELSZ, /* _xcoff_ldrelsz */ - 24, /* _xcoff_function_descriptor_size */ - 0, /* _xcoff_small_aout_header_size */ - /* Versions. */ - 2, /* _xcoff_ldhdr_version */ - - _bfd_xcoff64_put_symbol_name, /* _xcoff_put_symbol_name */ - _bfd_xcoff64_put_ldsymbol_name, /* _xcoff_put_ldsymbol_name */ - - /* Dynamic reloc howto. */ - &xcoff64_dynamic_reloc, - xcoff64_create_csect_from_smclas, - - /* Lineno and reloc count overflow. */ - xcoff64_is_lineno_count_overflow, - xcoff64_is_reloc_count_overflow, - - xcoff64_loader_symbol_offset, - xcoff64_loader_reloc_offset, - - /* glink. */ - &xcoff64_glink_code[0], - 40, /* _xcoff_glink_size */ - - /* rtinit. */ - 88, /* _xcoff_rtinit_size */ - xcoff64_generate_rtinit, /* _xcoff_generate_rtinit */ -}; + { + { /* COFF backend, defined in libcoff.h. */ + _bfd_xcoff64_swap_aux_in, + _bfd_xcoff64_swap_sym_in, + _bfd_xcoff64_swap_lineno_in, + _bfd_xcoff64_swap_aux_out, + _bfd_xcoff64_swap_sym_out, + _bfd_xcoff64_swap_lineno_out, + xcoff64_swap_reloc_out, + coff_swap_filehdr_out, + coff_swap_aouthdr_out, + coff_swap_scnhdr_out, + FILHSZ, + AOUTSZ, + SCNHSZ, + SYMESZ, + AUXESZ, + RELSZ, + LINESZ, + FILNMLEN, + true, /* _bfd_coff_long_filenames */ + false, /* _bfd_coff_long_section_names */ + 3, /* _bfd_coff_default_section_alignment_power */ + true, /* _bfd_coff_force_symnames_in_strings */ + 4, /* _bfd_coff_debug_string_prefix_length */ + coff_swap_filehdr_in, + coff_swap_aouthdr_in, + coff_swap_scnhdr_in, + xcoff64_swap_reloc_in, + xcoff64_bad_format_hook, + coff_set_arch_mach_hook, + coff_mkobject_hook, + styp_to_sec_flags, + coff_set_alignment_hook, + coff_slurp_symbol_table, + symname_in_debug_hook, + coff_pointerize_aux_hook, + coff_print_aux, + dummy_reloc16_extra_cases, + dummy_reloc16_estimate, + NULL, /* bfd_coff_sym_is_global */ + coff_compute_section_file_positions, + NULL, /* _bfd_coff_start_final_link */ + xcoff64_ppc_relocate_section, + coff_rtype_to_howto, + NULL, /* _bfd_coff_adjust_symndx */ + _bfd_generic_link_add_one_symbol, + coff_link_output_has_begun, + coff_final_link_postscript + }, + + U64_TOCMAGIC, /* magic number */ + bfd_arch_powerpc, + bfd_mach_ppc_620, + + /* Function pointers to xcoff specific swap routines. */ + xcoff64_swap_ldhdr_in, + xcoff64_swap_ldhdr_out, + xcoff64_swap_ldsym_in, + xcoff64_swap_ldsym_out, + xcoff64_swap_ldrel_in, + xcoff64_swap_ldrel_out, + + /* Sizes. */ + LDHDRSZ, + LDSYMSZ, + LDRELSZ, + 24, /* _xcoff_function_descriptor_size */ + 0, /* _xcoff_small_aout_header_size */ + /* Versions. */ + 2, /* _xcoff_ldhdr_version */ + + _bfd_xcoff64_put_symbol_name, + _bfd_xcoff64_put_ldsymbol_name, + &xcoff64_dynamic_reloc, + xcoff64_create_csect_from_smclas, + + /* Lineno and reloc count overflow. */ + xcoff64_is_lineno_count_overflow, + xcoff64_is_reloc_count_overflow, + + xcoff64_loader_symbol_offset, + xcoff64_loader_reloc_offset, + + /* glink. */ + &xcoff64_glink_code[0], + 40, /* _xcoff_glink_size */ + + /* rtinit. */ + 88, /* _xcoff_rtinit_size */ + xcoff64_generate_rtinit, + }; /* The transfer vector that leads the outside world to all of the above. */ const bfd_target aix5coff64_vec = -{ - "aix5coff64-rs6000", - bfd_target_xcoff_flavour, - BFD_ENDIAN_BIG, /* data byte order is big */ - BFD_ENDIAN_BIG, /* header byte order is big */ - - (HAS_RELOC | EXEC_P | /* object flags */ - HAS_LINENO | HAS_DEBUG | DYNAMIC | - HAS_SYMS | HAS_LOCALS | WP_TEXT), - - (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC), /* section flags */ - 0, /* leading char */ - '/', /* ar_pad_char */ - 15, /* ar_max_namelen??? FIXMEmgo */ - - /* data */ - bfd_getb64, /* bfd_getx64 */ - bfd_getb_signed_64, /* bfd_getx_signed_64 */ - bfd_putb64, /* bfd_putx64 */ - bfd_getb32, /* bfd_getx32 */ - bfd_getb_signed_32, /* bfd_getx_signed_32 */ - bfd_putb32, /* bfd_putx32 */ - bfd_getb16, /* bfd_getx16 */ - bfd_getb_signed_16, /* bfd_getx_signed_16 */ - bfd_putb16, /* bfd_putx16 */ - - /* hdrs */ - bfd_getb64, /* bfd_h_getx64 */ - bfd_getb_signed_64, /* bfd_h_getx_signed_64 */ - bfd_putb64, /* bfd_h_putx64 */ - bfd_getb32, /* bfd_h_getx32 */ - bfd_getb_signed_32, /* bfd_h_getx_signed_32 */ - bfd_putb32, /* bfd_h_putx32 */ - bfd_getb16, /* bfd_h_getx16 */ - bfd_getb_signed_16, /* bfd_h_getx_signed_16 */ - bfd_putb16, /* bfd_h_putx16 */ - - { /* bfd_check_format */ - _bfd_dummy_target, - coff_object_p, - xcoff64_archive_p, - xcoff64_core_p - }, - - { /* bfd_set_format */ - bfd_false, - coff_mkobject, - _bfd_generic_mkarchive, - bfd_false - }, - - {/* bfd_write_contents */ + { + "aix5coff64-rs6000", + bfd_target_xcoff_flavour, + BFD_ENDIAN_BIG, /* data byte order is big */ + BFD_ENDIAN_BIG, /* header byte order is big */ + + (HAS_RELOC | EXEC_P | HAS_LINENO | HAS_DEBUG | DYNAMIC + | HAS_SYMS | HAS_LOCALS | WP_TEXT), + + (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC), + 0, /* leading char */ + '/', /* ar_pad_char */ + 15, /* ar_max_namelen */ + + /* data */ + bfd_getb64, + bfd_getb_signed_64, + bfd_putb64, + bfd_getb32, + bfd_getb_signed_32, + bfd_putb32, + bfd_getb16, + bfd_getb_signed_16, + bfd_putb16, + + /* hdrs */ + bfd_getb64, + bfd_getb_signed_64, + bfd_putb64, + bfd_getb32, + bfd_getb_signed_32, + bfd_putb32, + bfd_getb16, + bfd_getb_signed_16, + bfd_putb16, + + { /* bfd_check_format */ + _bfd_dummy_target, + coff_object_p, + xcoff64_archive_p, + xcoff64_core_p + }, + + { /* bfd_set_format */ + bfd_false, + coff_mkobject, + _bfd_generic_mkarchive, + bfd_false + }, + + {/* bfd_write_contents */ + bfd_false, + xcoff64_write_object_contents, + _bfd_xcoff_write_archive_contents, + bfd_false + }, + + /* Generic */ + bfd_true, + bfd_true, + coff_new_section_hook, + _bfd_generic_get_section_contents, + _bfd_generic_get_section_contents_in_window, + + /* Copy */ + _bfd_xcoff_copy_private_bfd_data, + ((boolean (*) (bfd *, bfd *)) bfd_true), + ((boolean (*) (bfd *, asection *, bfd *, asection *)) bfd_true), + ((boolean (*) (bfd *, asymbol *, bfd *, asymbol *)) bfd_true), + ((boolean (*) (bfd *, flagword)) bfd_true), + ((boolean (*) (bfd *, void * )) bfd_true), + + /* Core */ + xcoff64_core_file_failing_command, + xcoff64_core_file_failing_signal, + xcoff64_core_file_matches_executable_p, + + /* Archive */ + xcoff64_slurp_armap, bfd_false, - xcoff64_write_object_contents, - _bfd_xcoff_write_archive_contents, - bfd_false - }, - - /* Generic */ - bfd_true, /* _close_and_cleanup */ - bfd_true, /* _bfd_free_cached_info */ - coff_new_section_hook, /* _new_section_hook */ - _bfd_generic_get_section_contents, /* _bfd_get_section_contents */ - /* _bfd_get_section_contents_in_window */ - _bfd_generic_get_section_contents_in_window, - - /* Copy */ - _bfd_xcoff_copy_private_bfd_data, /* _bfd_copy_private_bfd */ - /* _bfd_merge_private_bfd_data */ - ((boolean (*) (bfd *, bfd *)) bfd_true), - /* _bfd_copy_pivate_section_data */ - ((boolean (*) (bfd *, asection *, bfd *, asection *)) bfd_true), - /* _bfd_copy_private_symbol_data */ - ((boolean (*) (bfd *, asymbol *, bfd *, asymbol *)) bfd_true), - ((boolean (*) (bfd *, flagword)) bfd_true), /* _bfd_set_private_flags */ - ((boolean (*) (bfd *, void * )) bfd_true), /* _bfd_print_private_bfd_data */ - - /* Core */ - xcoff64_core_file_failing_command, /* _core_file_failing_command */ - xcoff64_core_file_failing_signal, /* _core_file_failing_signal */ - xcoff64_core_file_matches_executable_p, /* _core_file_matches_executable_p */ - - /* Archive */ - xcoff64_slurp_armap, /* _slurp_armap */ - /* XCOFF archives do not have anything which corresponds to an - extended name table. */ - bfd_false, /* _slurp_extended_name_table */ - /* _construct_extended_name_table */ - ((boolean (*) (bfd *, char **, bfd_size_type *, const char **)) bfd_false), - bfd_dont_truncate_arname, /* _truncate_arname */ - _bfd_xcoff_write_armap, /* _write_armap */ - _bfd_xcoff_read_ar_hdr, /* _read_ar_hdr */ - xcoff64_openr_next_archived_file, /* _openr_next_archived_file */ - _bfd_generic_get_elt_at_index, /* _get_elt_at_index */ - _bfd_xcoff_stat_arch_elt, /* _generic_stat_arch_elt */ - /* XCOFF archives do not have a timestamp. */ - bfd_true, /* _update_armap_timestamp */ - - /* Symbols */ - coff_get_symtab_upper_bound, /* _get_symtab_upper_bound */ - coff_get_symtab, /* _get_symtab */ - coff_make_empty_symbol, /* _make_empty_symbol */ - coff_print_symbol, /* _print_symbol */ - coff_get_symbol_info, /* _get_symbol_info */ - _bfd_xcoff_is_local_label_name, /* _bfd_is_local_label_name */ - coff_get_lineno, /* _get_lineno */ - coff_find_nearest_line, /* _find_nearest_line */ - coff_bfd_make_debug_symbol, /* _bfd_make_debug_symbol */ - _bfd_generic_read_minisymbols, /* _read_minisymbols */ - _bfd_generic_minisymbol_to_symbol, /* _minsymbol_to_symbol */ - - /* Reloc */ - coff_get_reloc_upper_bound, /* _get_reloc_upper_bound */ - coff_canonicalize_reloc, /* _cononicalize_reloc */ - xcoff64_reloc_type_lookup, /* _bfd_reloc_type_lookup */ - - /* Write */ - coff_set_arch_mach, /* _set_arch_mach */ - coff_set_section_contents, /* _set_section_contents */ - - /* Link */ - xcoff64_sizeof_headers, /* _sizeof_headers */ - /* _bfd_get_relocated_section_contents */ - bfd_generic_get_relocated_section_contents, - bfd_generic_relax_section, /* _bfd_relax_section */ - _bfd_xcoff_bfd_link_hash_table_create,/* _bfd_link_hash_table_create */ - _bfd_generic_link_hash_table_free, /* _bfd_link_hash_table_free */ - _bfd_xcoff_bfd_link_add_symbols, /* _bfd_link_add_symbols */ - _bfd_generic_link_just_syms, /* _bfd_link_just_syms */ - _bfd_xcoff_bfd_final_link, /* _bfd_final_link */ - _bfd_generic_link_split_section, /* _bfd_link_split_section */ - bfd_generic_gc_sections, /* _bfd_gc_sections */ - bfd_generic_merge_sections, /* _bfd_merge_sections */ - bfd_generic_discard_group, /* _bfd_discard_group */ - - /* Dynamic */ - /* _get_dynamic_symtab_upper_bound */ - _bfd_xcoff_get_dynamic_symtab_upper_bound, - _bfd_xcoff_canonicalize_dynamic_symtab, /* _cononicalize_dynamic_symtab */ - _bfd_xcoff_get_dynamic_reloc_upper_bound,/* _get_dynamic_reloc_upper_bound */ - _bfd_xcoff_canonicalize_dynamic_reloc, /* _cononicalize_dynamic_reloc */ - - /* Opposite endian version, none exists. */ - NULL, - - /* back end data */ - (void *) & bfd_xcoff_aix5_backend_data, -}; + ((boolean (*) (bfd *, char **, bfd_size_type *, const char **)) bfd_false), + bfd_dont_truncate_arname, + _bfd_xcoff_write_armap, + _bfd_xcoff_read_ar_hdr, + xcoff64_openr_next_archived_file, + _bfd_generic_get_elt_at_index, + _bfd_xcoff_stat_arch_elt, + bfd_true, + + /* Symbols */ + coff_get_symtab_upper_bound, + coff_get_symtab, + coff_make_empty_symbol, + coff_print_symbol, + coff_get_symbol_info, + _bfd_xcoff_is_local_label_name, + coff_get_lineno, + coff_find_nearest_line, + coff_bfd_make_debug_symbol, + _bfd_generic_read_minisymbols, + _bfd_generic_minisymbol_to_symbol, + + /* Reloc */ + coff_get_reloc_upper_bound, + coff_canonicalize_reloc, + xcoff64_reloc_type_lookup, + + /* Write */ + coff_set_arch_mach, + coff_set_section_contents, + + /* Link */ + xcoff64_sizeof_headers, + bfd_generic_get_relocated_section_contents, + bfd_generic_relax_section, + _bfd_xcoff_bfd_link_hash_table_create, + _bfd_generic_link_hash_table_free, + _bfd_xcoff_bfd_link_add_symbols, + _bfd_generic_link_just_syms, + _bfd_xcoff_bfd_final_link, + _bfd_generic_link_split_section, + bfd_generic_gc_sections, + bfd_generic_merge_sections, + bfd_generic_discard_group, + + /* Dynamic */ + _bfd_xcoff_get_dynamic_symtab_upper_bound, + _bfd_xcoff_canonicalize_dynamic_symtab, + _bfd_xcoff_get_dynamic_reloc_upper_bound, + _bfd_xcoff_canonicalize_dynamic_reloc, + + /* Opposite endian version, none exists. */ + NULL, + + (void *) & bfd_xcoff_aix5_backend_data, + }; -- 2.7.4