OLD | NEW |
1 /* PowerPC64-specific support for 64-bit ELF. | 1 /* PowerPC64-specific support for 64-bit ELF. |
2 Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, | 2 Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, |
3 2009, 2010, 2011 Free Software Foundation, Inc. | 3 2009, 2010, 2011, 2012 Free Software Foundation, Inc. |
4 Written by Linus Nordberg, Swox AB <info@swox.com>, | 4 Written by Linus Nordberg, Swox AB <info@swox.com>, |
5 based on elf32-ppc.c by Ian Lance Taylor. | 5 based on elf32-ppc.c by Ian Lance Taylor. |
6 Largely rewritten by Alan Modra. | 6 Largely rewritten by Alan Modra. |
7 | 7 |
8 This file is part of BFD, the Binary File Descriptor library. | 8 This file is part of BFD, the Binary File Descriptor library. |
9 | 9 |
10 This program is free software; you can redistribute it and/or modify | 10 This program is free software; you can redistribute it and/or modify |
11 it under the terms of the GNU General Public License as published by | 11 it under the terms of the GNU General Public License as published by |
12 the Free Software Foundation; either version 3 of the License, or | 12 the Free Software Foundation; either version 3 of the License, or |
13 (at your option) any later version. | 13 (at your option) any later version. |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
48 (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **); | 48 (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **); |
49 static bfd_reloc_status_type ppc64_elf_toc_reloc | 49 static bfd_reloc_status_type ppc64_elf_toc_reloc |
50 (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **); | 50 (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **); |
51 static bfd_reloc_status_type ppc64_elf_toc_ha_reloc | 51 static bfd_reloc_status_type ppc64_elf_toc_ha_reloc |
52 (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **); | 52 (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **); |
53 static bfd_reloc_status_type ppc64_elf_toc64_reloc | 53 static bfd_reloc_status_type ppc64_elf_toc64_reloc |
54 (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **); | 54 (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **); |
55 static bfd_reloc_status_type ppc64_elf_unhandled_reloc | 55 static bfd_reloc_status_type ppc64_elf_unhandled_reloc |
56 (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **); | 56 (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **); |
57 static bfd_vma opd_entry_value | 57 static bfd_vma opd_entry_value |
58 (asection *, bfd_vma, asection **, bfd_vma *); | 58 (asection *, bfd_vma, asection **, bfd_vma *, bfd_boolean); |
59 | 59 |
60 #define TARGET_LITTLE_SYM bfd_elf64_powerpcle_vec | 60 #define TARGET_LITTLE_SYM bfd_elf64_powerpcle_vec |
61 #define TARGET_LITTLE_NAME "elf64-powerpcle" | 61 #define TARGET_LITTLE_NAME "elf64-powerpcle" |
62 #define TARGET_BIG_SYM bfd_elf64_powerpc_vec | 62 #define TARGET_BIG_SYM bfd_elf64_powerpc_vec |
63 #define TARGET_BIG_NAME "elf64-powerpc" | 63 #define TARGET_BIG_NAME "elf64-powerpc" |
64 #define ELF_ARCH bfd_arch_powerpc | 64 #define ELF_ARCH bfd_arch_powerpc |
65 #define ELF_TARGET_ID PPC64_ELF_DATA | 65 #define ELF_TARGET_ID PPC64_ELF_DATA |
66 #define ELF_MACHINE_CODE EM_PPC64 | 66 #define ELF_MACHINE_CODE EM_PPC64 |
67 #define ELF_MAXPAGESIZE 0x10000 | 67 #define ELF_MAXPAGESIZE 0x10000 |
68 #define ELF_COMMONPAGESIZE 0x1000 | 68 #define ELF_COMMONPAGESIZE 0x1000 |
(...skipping 29 matching lines...) Expand all Loading... |
98 #define elf_backend_check_directives ppc64_elf_process_dot_syms | 98 #define elf_backend_check_directives ppc64_elf_process_dot_syms |
99 #define elf_backend_as_needed_cleanup ppc64_elf_as_needed_cleanup | 99 #define elf_backend_as_needed_cleanup ppc64_elf_as_needed_cleanup |
100 #define elf_backend_archive_symbol_lookup ppc64_elf_archive_symbol_lookup | 100 #define elf_backend_archive_symbol_lookup ppc64_elf_archive_symbol_lookup |
101 #define elf_backend_check_relocs ppc64_elf_check_relocs | 101 #define elf_backend_check_relocs ppc64_elf_check_relocs |
102 #define elf_backend_gc_keep ppc64_elf_gc_keep | 102 #define elf_backend_gc_keep ppc64_elf_gc_keep |
103 #define elf_backend_gc_mark_dynamic_ref ppc64_elf_gc_mark_dynamic_ref | 103 #define elf_backend_gc_mark_dynamic_ref ppc64_elf_gc_mark_dynamic_ref |
104 #define elf_backend_gc_mark_hook ppc64_elf_gc_mark_hook | 104 #define elf_backend_gc_mark_hook ppc64_elf_gc_mark_hook |
105 #define elf_backend_gc_sweep_hook ppc64_elf_gc_sweep_hook | 105 #define elf_backend_gc_sweep_hook ppc64_elf_gc_sweep_hook |
106 #define elf_backend_adjust_dynamic_symbol ppc64_elf_adjust_dynamic_symbol | 106 #define elf_backend_adjust_dynamic_symbol ppc64_elf_adjust_dynamic_symbol |
107 #define elf_backend_hide_symbol ppc64_elf_hide_symbol | 107 #define elf_backend_hide_symbol ppc64_elf_hide_symbol |
| 108 #define elf_backend_maybe_function_sym ppc64_elf_maybe_function_sym |
108 #define elf_backend_always_size_sections ppc64_elf_func_desc_adjust | 109 #define elf_backend_always_size_sections ppc64_elf_func_desc_adjust |
109 #define elf_backend_size_dynamic_sections ppc64_elf_size_dynamic_sections | 110 #define elf_backend_size_dynamic_sections ppc64_elf_size_dynamic_sections |
110 #define elf_backend_init_index_section _bfd_elf_init_2_index_sections | 111 #define elf_backend_init_index_section _bfd_elf_init_2_index_sections |
111 #define elf_backend_action_discarded ppc64_elf_action_discarded | 112 #define elf_backend_action_discarded ppc64_elf_action_discarded |
112 #define elf_backend_relocate_section ppc64_elf_relocate_section | 113 #define elf_backend_relocate_section ppc64_elf_relocate_section |
113 #define elf_backend_finish_dynamic_symbol ppc64_elf_finish_dynamic_symbol | 114 #define elf_backend_finish_dynamic_symbol ppc64_elf_finish_dynamic_symbol |
114 #define elf_backend_reloc_type_class ppc64_elf_reloc_type_class | 115 #define elf_backend_reloc_type_class ppc64_elf_reloc_type_class |
115 #define elf_backend_finish_dynamic_sections ppc64_elf_finish_dynamic_sections | 116 #define elf_backend_finish_dynamic_sections ppc64_elf_finish_dynamic_sections |
116 #define elf_backend_link_output_symbol_hook ppc64_elf_output_symbol_hook | 117 #define elf_backend_link_output_symbol_hook ppc64_elf_output_symbol_hook |
117 #define elf_backend_special_sections ppc64_elf_special_sections | 118 #define elf_backend_special_sections ppc64_elf_special_sections |
(...skipping 27 matching lines...) Expand all Loading... |
145 #define LD_R2_0R12 0xe84c0000 /* ld %r2,xxx+8@l(%r12) */ | 146 #define LD_R2_0R12 0xe84c0000 /* ld %r2,xxx+8@l(%r12) */ |
146 /* ld %r11,xxx+16@l(%r12) */ | 147 /* ld %r11,xxx+16@l(%r12) */ |
147 #define BCTR 0x4e800420 /* bctr */ | 148 #define BCTR 0x4e800420 /* bctr */ |
148 | 149 |
149 | 150 |
150 #define ADDIS_R12_R12 0x3d8c0000 /* addis %r12,%r12,off@ha */ | 151 #define ADDIS_R12_R12 0x3d8c0000 /* addis %r12,%r12,off@ha */ |
151 #define ADDI_R12_R12 0x398c0000 /* addi %r12,%r12,off@l */ | 152 #define ADDI_R12_R12 0x398c0000 /* addi %r12,%r12,off@l */ |
152 #define ADDIS_R2_R2 0x3c420000 /* addis %r2,%r2,off@ha */ | 153 #define ADDIS_R2_R2 0x3c420000 /* addis %r2,%r2,off@ha */ |
153 #define ADDI_R2_R2 0x38420000 /* addi %r2,%r2,off@l */ | 154 #define ADDI_R2_R2 0x38420000 /* addi %r2,%r2,off@l */ |
154 | 155 |
| 156 #define XOR_R11_R11_R11 0x7d6b5a78 /* xor %r11,%r11,%r11 */ |
| 157 #define ADD_R12_R12_R11 0x7d8c5a14 /* add %r12,%r12,%r11 */ |
| 158 #define ADD_R2_R2_R11 0x7c425a14 /* add %r2,%r2,%r11 */ |
| 159 #define CMPLDI_R2_0 0x28220000 /* cmpldi %r2,0 */ |
| 160 #define BNECTR 0x4ca20420 /* bnectr+ */ |
| 161 #define BNECTR_P4 0x4ce20420 /* bnectr+ */ |
| 162 |
155 #define LD_R11_0R2 0xe9620000 /* ld %r11,xxx+0(%r2) */ | 163 #define LD_R11_0R2 0xe9620000 /* ld %r11,xxx+0(%r2) */ |
156 #define LD_R2_0R2 0xe8420000 /* ld %r2,xxx+0(%r2) */ | 164 #define LD_R2_0R2 0xe8420000 /* ld %r2,xxx+0(%r2) */ |
157 | 165 |
158 #define LD_R2_40R1 0xe8410028 /* ld %r2,40(%r1) */ | 166 #define LD_R2_40R1 0xe8410028 /* ld %r2,40(%r1) */ |
159 | 167 |
160 /* glink call stub instructions. We enter with the index in R0. */ | 168 /* glink call stub instructions. We enter with the index in R0. */ |
161 #define GLINK_CALL_STUB_SIZE (16*4) | 169 #define GLINK_CALL_STUB_SIZE (16*4) |
162 /* 0: */ | 170 /* 0: */ |
163 /* .quad plt0-1f */ | 171 /* .quad plt0-1f */ |
164 /* __glink: */ | 172 /* __glink: */ |
(...skipping 2164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2329 | 2337 |
2330 static bfd_reloc_status_type | 2338 static bfd_reloc_status_type |
2331 ppc64_elf_branch_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol, | 2339 ppc64_elf_branch_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol, |
2332 void *data, asection *input_section, | 2340 void *data, asection *input_section, |
2333 bfd *output_bfd, char **error_message) | 2341 bfd *output_bfd, char **error_message) |
2334 { | 2342 { |
2335 if (output_bfd != NULL) | 2343 if (output_bfd != NULL) |
2336 return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data, | 2344 return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data, |
2337 input_section, output_bfd, error_message); | 2345 input_section, output_bfd, error_message); |
2338 | 2346 |
error: old chunk mismatch |
None
OLD | NEW |