X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=bfd%2Fcoff64-rs6000.c;h=ba984694f68bf3bb7ada9b457771eebcf429254b;hb=f5316771bd0cf89578450be0460908beeef4dbb5;hp=0821b6ff1774e334bc74633078a662c0fa12e681;hpb=9b8d1a36034b5bdf665b952f581d96a987faecdf;p=deliverable%2Fbinutils-gdb.git diff --git a/bfd/coff64-rs6000.c b/bfd/coff64-rs6000.c index 0821b6ff17..ba984694f6 100644 --- a/bfd/coff64-rs6000.c +++ b/bfd/coff64-rs6000.c @@ -1,7 +1,5 @@ /* BFD back-end for IBM RS/6000 "XCOFF64" files. - Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, - 2010, 2011 - Free Software Foundation, Inc. + Copyright (C) 2000-2015 Free Software Foundation, Inc. Written Clinton Popetz. Contributed by Cygnus Support. @@ -279,6 +277,7 @@ extern int rs6000coff_core_file_failing_signal #define bfd_pe_print_pdata NULL #endif +#include #include "coffcode.h" /* For XCOFF64, the effective width of symndx changes depending on @@ -1373,7 +1372,7 @@ xcoff64_ppc_relocate_section (bfd *output_bfd, reloc_howto_type xcoff64_howto_table[] = { - /* Standard 64 bit relocation. */ + /* 0x00: Standard 64 bit relocation. */ HOWTO (R_POS, /* type */ 0, /* rightshift */ 4, /* size (0 = byte, 1 = short, 2 = long) */ @@ -1388,7 +1387,7 @@ reloc_howto_type xcoff64_howto_table[] = MINUS_ONE, /* dst_mask */ FALSE), /* pcrel_offset */ - /* 64 bit relocation, but store negative value. */ + /* 0x01: 64 bit relocation, but store negative value. */ HOWTO (R_NEG, /* type */ 0, /* rightshift */ -4, /* size (0 = byte, 1 = short, 2 = long) */ @@ -1403,7 +1402,7 @@ reloc_howto_type xcoff64_howto_table[] = MINUS_ONE, /* dst_mask */ FALSE), /* pcrel_offset */ - /* 32 bit PC relative relocation. */ + /* 0x02: 32 bit PC relative relocation. */ HOWTO (R_REL, /* type */ 0, /* rightshift */ 2, /* size (0 = byte, 1 = short, 2 = long) */ @@ -1418,7 +1417,7 @@ reloc_howto_type xcoff64_howto_table[] = 0xffffffff, /* dst_mask */ FALSE), /* pcrel_offset */ - /* 16 bit TOC relative relocation. */ + /* 0x03: 16 bit TOC relative relocation. */ HOWTO (R_TOC, /* type */ 0, /* rightshift */ 1, /* size (0 = byte, 1 = short, 2 = long) */ @@ -1433,7 +1432,7 @@ reloc_howto_type xcoff64_howto_table[] = 0xffff, /* dst_mask */ FALSE), /* pcrel_offset */ - /* I don't really know what this is. */ + /* 0x04: I don't really know what this is. */ HOWTO (R_RTB, /* type */ 1, /* rightshift */ 2, /* size (0 = byte, 1 = short, 2 = long) */ @@ -1448,7 +1447,7 @@ reloc_howto_type xcoff64_howto_table[] = 0xffffffff, /* dst_mask */ FALSE), /* pcrel_offset */ - /* External TOC relative symbol. */ + /* 0x05: External TOC relative symbol. */ HOWTO (R_GL, /* type */ 0, /* rightshift */ 1, /* size (0 = byte, 1 = short, 2 = long) */ @@ -1463,7 +1462,7 @@ reloc_howto_type xcoff64_howto_table[] = 0xffff, /* dst_mask */ FALSE), /* pcrel_offset */ - /* Local TOC relative symbol. */ + /* 0x06: Local TOC relative symbol. */ HOWTO (R_TCL, /* type */ 0, /* rightshift */ 1, /* size (0 = byte, 1 = short, 2 = long) */ @@ -1480,7 +1479,7 @@ reloc_howto_type xcoff64_howto_table[] = EMPTY_HOWTO (7), - /* Non modifiable absolute branch. */ + /* 0x08: Non modifiable absolute branch. */ HOWTO (R_BA, /* type */ 0, /* rightshift */ 2, /* size (0 = byte, 1 = short, 2 = long) */ @@ -1497,7 +1496,7 @@ reloc_howto_type xcoff64_howto_table[] = EMPTY_HOWTO (9), - /* Non modifiable relative branch. */ + /* 0x0a: Non modifiable relative branch. */ HOWTO (R_BR, /* type */ 0, /* rightshift */ 2, /* size (0 = byte, 1 = short, 2 = long) */ @@ -1514,7 +1513,7 @@ reloc_howto_type xcoff64_howto_table[] = EMPTY_HOWTO (0xb), - /* Indirect load. */ + /* 0x0c: Indirect load. */ HOWTO (R_RL, /* type */ 0, /* rightshift */ 1, /* size (0 = byte, 1 = short, 2 = long) */ @@ -1529,7 +1528,7 @@ reloc_howto_type xcoff64_howto_table[] = 0xffff, /* dst_mask */ FALSE), /* pcrel_offset */ - /* Load address. */ + /* 0x0d: Load address. */ HOWTO (R_RLA, /* type */ 0, /* rightshift */ 1, /* size (0 = byte, 1 = short, 2 = long) */ @@ -1546,7 +1545,7 @@ reloc_howto_type xcoff64_howto_table[] = EMPTY_HOWTO (0xe), - /* Non-relocating reference. Bitsize is 1 so that r_rsize is 0. */ + /* 0x0f: Non-relocating reference. Bitsize is 1 so that r_rsize is 0. */ HOWTO (R_REF, /* type */ 0, /* rightshift */ 0, /* size (0 = byte, 1 = short, 2 = long) */ @@ -1564,7 +1563,7 @@ reloc_howto_type xcoff64_howto_table[] = EMPTY_HOWTO (0x10), EMPTY_HOWTO (0x11), - /* TOC relative indirect load. */ + /* 0x12: TOC relative indirect load. */ HOWTO (R_TRL, /* type */ 0, /* rightshift */ 1, /* size (0 = byte, 1 = short, 2 = long) */ @@ -1579,7 +1578,7 @@ reloc_howto_type xcoff64_howto_table[] = 0xffff, /* dst_mask */ FALSE), /* pcrel_offset */ - /* TOC relative load address. */ + /* 0x13: TOC relative load address. */ HOWTO (R_TRLA, /* type */ 0, /* rightshift */ 1, /* size (0 = byte, 1 = short, 2 = long) */ @@ -1594,7 +1593,7 @@ reloc_howto_type xcoff64_howto_table[] = 0xffff, /* dst_mask */ FALSE), /* pcrel_offset */ - /* Modifiable relative branch. */ + /* 0x14: Modifiable relative branch. */ HOWTO (R_RRTBI, /* type */ 1, /* rightshift */ 2, /* size (0 = byte, 1 = short, 2 = long) */ @@ -1609,7 +1608,7 @@ reloc_howto_type xcoff64_howto_table[] = 0xffffffff, /* dst_mask */ FALSE), /* pcrel_offset */ - /* Modifiable absolute branch. */ + /* 0x15: Modifiable absolute branch. */ HOWTO (R_RRTBA, /* type */ 1, /* rightshift */ 2, /* size (0 = byte, 1 = short, 2 = long) */ @@ -1624,7 +1623,7 @@ reloc_howto_type xcoff64_howto_table[] = 0xffffffff, /* dst_mask */ FALSE), /* pcrel_offset */ - /* Modifiable call absolute indirect. */ + /* 0x16: Modifiable call absolute indirect. */ HOWTO (R_CAI, /* type */ 0, /* rightshift */ 1, /* size (0 = byte, 1 = short, 2 = long) */ @@ -1639,7 +1638,7 @@ reloc_howto_type xcoff64_howto_table[] = 0xffff, /* dst_mask */ FALSE), /* pcrel_offset */ - /* Modifiable call relative. */ + /* 0x17: Modifiable call relative. */ HOWTO (R_CREL, /* type */ 0, /* rightshift */ 1, /* size (0 = byte, 1 = short, 2 = long) */ @@ -1654,7 +1653,7 @@ reloc_howto_type xcoff64_howto_table[] = 0xffff, /* dst_mask */ FALSE), /* pcrel_offset */ - /* Modifiable branch absolute. */ + /* 0x18: Modifiable branch absolute. */ HOWTO (R_RBA, /* type */ 0, /* rightshift */ 2, /* size (0 = byte, 1 = short, 2 = long) */ @@ -1669,7 +1668,7 @@ reloc_howto_type xcoff64_howto_table[] = 0x03fffffc, /* dst_mask */ FALSE), /* pcrel_offset */ - /* Modifiable branch absolute. */ + /* 0x19: Modifiable branch absolute. */ HOWTO (R_RBAC, /* type */ 0, /* rightshift */ 2, /* size (0 = byte, 1 = short, 2 = long) */ @@ -1684,7 +1683,7 @@ reloc_howto_type xcoff64_howto_table[] = 0xffffffff, /* dst_mask */ FALSE), /* pcrel_offset */ - /* Modifiable branch relative. */ + /* 0x1a: Modifiable branch relative. */ HOWTO (R_RBR, /* type */ 0, /* rightshift */ 2, /* size (0 = byte, 1 = short, 2 = long) */ @@ -1699,7 +1698,7 @@ reloc_howto_type xcoff64_howto_table[] = 0x03fffffc, /* dst_mask */ FALSE), /* pcrel_offset */ - /* Modifiable branch absolute. */ + /* 0x1b: Modifiable branch absolute. */ HOWTO (R_RBRC, /* type */ 0, /* rightshift */ 1, /* size (0 = byte, 1 = short, 2 = long) */ @@ -1714,6 +1713,7 @@ reloc_howto_type xcoff64_howto_table[] = 0xffff, /* dst_mask */ FALSE), /* pcrel_offset */ + /* 0x1c: Standard 32 bit relocation. */ HOWTO (R_POS, /* type */ 0, /* rightshift */ 2, /* size (0 = byte, 1 = short, 2 = long) */ @@ -1728,7 +1728,7 @@ reloc_howto_type xcoff64_howto_table[] = 0xffffffff, /* dst_mask */ FALSE), /* pcrel_offset */ - /* 16 bit Non modifiable absolute branch. */ + /* 0x1d: 16 bit Non modifiable absolute branch. */ HOWTO (R_BA, /* type */ 0, /* rightshift */ 1, /* size (0 = byte, 1 = short, 2 = long) */ @@ -1743,22 +1743,22 @@ reloc_howto_type xcoff64_howto_table[] = 0xfffc, /* dst_mask */ FALSE), /* pcrel_offset */ - /* Modifiable branch relative. */ + /* 0x1e: Modifiable branch relative. */ HOWTO (R_RBR, /* type */ 0, /* rightshift */ 1, /* size (0 = byte, 1 = short, 2 = long) */ 16, /* bitsize */ - FALSE, /* pc_relative */ + TRUE, /* 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 */ + 0xfffc, /* src_mask */ + 0xfffc, /* dst_mask */ FALSE), /* pcrel_offset */ - /* Modifiable branch absolute. */ + /* 0x1f: Modifiable branch absolute. */ HOWTO (R_RBA, /* type */ 0, /* rightshift */ 1, /* size (0 = byte, 1 = short, 2 = long) */ @@ -1826,6 +1826,11 @@ xcoff64_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED, return &xcoff64_howto_table[8]; case BFD_RELOC_PPC_TOC16: return &xcoff64_howto_table[3]; + case BFD_RELOC_16: + /* Note that this relocation is only internally used by gas. */ + return &xcoff64_howto_table[0xc]; + case BFD_RELOC_PPC_B16: + return &xcoff64_howto_table[0x1e]; case BFD_RELOC_32: case BFD_RELOC_CTOR: return &xcoff64_howto_table[0x1c]; @@ -2537,6 +2542,7 @@ static const struct xcoff_backend_data_rec bfd_xcoff_backend_data = 3, /* _bfd_coff_default_section_alignment_power */ TRUE, /* _bfd_coff_force_symnames_in_strings */ 4, /* _bfd_coff_debug_string_prefix_length */ + 32768, /* _bfd_coff_max_nscns */ coff_swap_filehdr_in, coff_swap_aouthdr_in, coff_swap_scnhdr_in, @@ -2608,7 +2614,7 @@ static const struct xcoff_backend_data_rec bfd_xcoff_backend_data = }; /* The transfer vector that leads the outside world to all of the above. */ -const bfd_target rs6000coff64_vec = +const bfd_target rs6000_xcoff64_vec = { "aixcoff64-rs6000", bfd_target_xcoff_flavour, @@ -2668,7 +2674,7 @@ const bfd_target rs6000coff64_vec = }, /* Generic */ - bfd_true, + _bfd_archive_close_and_cleanup, bfd_true, coff_new_section_hook, _bfd_generic_get_section_contents, @@ -2706,12 +2712,12 @@ const bfd_target rs6000coff64_vec = coff_make_empty_symbol, coff_print_symbol, coff_get_symbol_info, + coff_get_symbol_version_string, _bfd_xcoff_is_local_label_name, coff_bfd_is_target_special_symbol, coff_get_lineno, coff_find_nearest_line, - _bfd_generic_find_nearest_line_discriminator, - _bfd_generic_find_line, + coff_find_line, coff_find_inliner_info, coff_bfd_make_debug_symbol, _bfd_generic_read_minisymbols, @@ -2732,7 +2738,6 @@ const bfd_target rs6000coff64_vec = 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_generic_copy_link_hash_symbol_type, @@ -2796,6 +2801,7 @@ static const struct xcoff_backend_data_rec bfd_xcoff_aix5_backend_data = 3, /* _bfd_coff_default_section_alignment_power */ TRUE, /* _bfd_coff_force_symnames_in_strings */ 4, /* _bfd_coff_debug_string_prefix_length */ + 32768, /* _bfd_coff_max_nscns */ coff_swap_filehdr_in, coff_swap_aouthdr_in, coff_swap_scnhdr_in, @@ -2866,7 +2872,7 @@ static const struct xcoff_backend_data_rec bfd_xcoff_aix5_backend_data = }; /* The transfer vector that leads the outside world to all of the above. */ -const bfd_target aix5coff64_vec = +const bfd_target rs6000_xcoff64_aix_vec = { "aix5coff64-rs6000", bfd_target_xcoff_flavour, @@ -2926,7 +2932,7 @@ const bfd_target aix5coff64_vec = }, /* Generic */ - bfd_true, + _bfd_archive_close_and_cleanup, bfd_true, coff_new_section_hook, _bfd_generic_get_section_contents, @@ -2964,12 +2970,12 @@ const bfd_target aix5coff64_vec = coff_make_empty_symbol, coff_print_symbol, coff_get_symbol_info, + coff_get_symbol_version_string, _bfd_xcoff_is_local_label_name, coff_bfd_is_target_special_symbol, coff_get_lineno, coff_find_nearest_line, - _bfd_generic_find_nearest_line_discriminator, - _bfd_generic_find_line, + coff_find_line, coff_find_inliner_info, coff_bfd_make_debug_symbol, _bfd_generic_read_minisymbols, @@ -2990,7 +2996,6 @@ const bfd_target aix5coff64_vec = 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_generic_copy_link_hash_symbol_type,