Commit | Line | Data |
---|---|---|
5d1634d7 | 1 | /* PowerPC64-specific support for 64-bit ELF. |
6f2750fe | 2 | Copyright (C) 2002-2016 Free Software Foundation, Inc. |
5d1634d7 | 3 | |
cd123cb7 | 4 | This file is part of BFD, the Binary File Descriptor library. |
5d1634d7 | 5 | |
cd123cb7 NC |
6 | This program is free software; you can redistribute it and/or modify |
7 | it under the terms of the GNU General Public License as published by | |
8 | the Free Software Foundation; either version 3 of the License, or | |
9 | (at your option) any later version. | |
5d1634d7 | 10 | |
cd123cb7 NC |
11 | This program is distributed in the hope that it will be useful, |
12 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 | GNU General Public License for more details. | |
5d1634d7 | 15 | |
cd123cb7 NC |
16 | You should have received a copy of the GNU General Public License |
17 | along with this program; if not, write to the Free Software | |
18 | Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, | |
19 | MA 02110-1301, USA. */ | |
5d1634d7 | 20 | |
e7d1c40c AM |
21 | /* Used to pass info between ld and bfd. */ |
22 | struct ppc64_elf_params | |
23 | { | |
24 | /* Linker stub bfd. */ | |
25 | bfd *stub_bfd; | |
26 | ||
27 | /* Linker call-backs. */ | |
28 | asection * (*add_stub_section) (const char *, asection *); | |
29 | void (*layout_sections_again) (void); | |
30 | ||
31 | /* Maximum size of a group of input sections that can be handled by | |
32 | one stub section. A value of +/-1 indicates the bfd back-end | |
33 | should use a suitable default size. */ | |
34 | bfd_signed_vma group_size; | |
35 | ||
36 | /* Whether to use a special call stub for __tls_get_addr. */ | |
7c9cf415 | 37 | int tls_get_addr_opt; |
e7d1c40c AM |
38 | |
39 | /* Whether to allow multiple toc sections. */ | |
40 | int no_multi_toc; | |
41 | ||
42 | /* Set if PLT call stubs should load r11. */ | |
43 | int plt_static_chain; | |
44 | ||
45 | /* Set if PLT call stubs need to be thread safe on power7+. */ | |
46 | int plt_thread_safe; | |
47 | ||
48 | /* Set if individual PLT call stubs should be aligned. */ | |
49 | int plt_stub_align; | |
50 | ||
51 | /* Whether to canonicalize .opd so that there are no overlapping | |
52 | .opd entries. */ | |
53 | int non_overlapping_opd; | |
54 | ||
55 | /* Whether to emit symbols for stubs. */ | |
56 | int emit_stub_syms; | |
7d4c687d AM |
57 | |
58 | /* Whether to generate out-of-line register save/restore for gcc -Os code. */ | |
59 | int save_restore_funcs; | |
dbd1e97e AM |
60 | |
61 | /* Set when a potential variable is detected in .toc. */ | |
62 | int object_in_toc; | |
e7d1c40c AM |
63 | }; |
64 | ||
bfeb4a28 | 65 | bfd_boolean ppc64_elf_init_stub_bfd |
e7d1c40c | 66 | (struct bfd_link_info *, struct ppc64_elf_params *); |
b34976b6 | 67 | bfd_boolean ppc64_elf_edit_opd |
e7d1c40c | 68 | (struct bfd_link_info *); |
e1918d23 | 69 | asection *ppc64_elf_tls_setup |
e7d1c40c | 70 | (struct bfd_link_info *); |
411e1bfb | 71 | bfd_boolean ppc64_elf_tls_optimize |
33c0ec9d | 72 | (struct bfd_link_info *); |
c5614fa4 | 73 | bfd_boolean ppc64_elf_edit_toc |
33c0ec9d | 74 | (struct bfd_link_info *); |
1bbe0902 AM |
75 | bfd_boolean ppc64_elf_has_small_toc_reloc |
76 | (asection *); | |
1c865ab2 | 77 | bfd_vma ppc64_elf_set_toc |
1d7c9635 | 78 | (struct bfd_link_info *, bfd *); |
721956f4 | 79 | int ppc64_elf_setup_section_lists |
e7d1c40c | 80 | (struct bfd_link_info *); |
927be08e AM |
81 | void ppc64_elf_start_multitoc_partition |
82 | (struct bfd_link_info *); | |
83 | bfd_boolean ppc64_elf_next_toc_section | |
4ce794b7 | 84 | (struct bfd_link_info *, asection *); |
927be08e AM |
85 | bfd_boolean ppc64_elf_layout_multitoc |
86 | (struct bfd_link_info *); | |
87 | void ppc64_elf_finish_multitoc_partition | |
88 | (struct bfd_link_info *); | |
70cc837d AM |
89 | bfd_boolean ppc64_elf_check_init_fini |
90 | (struct bfd_link_info *); | |
9b5ecbd0 | 91 | bfd_boolean ppc64_elf_next_input_section |
4ce794b7 | 92 | (struct bfd_link_info *, asection *); |
b34976b6 | 93 | bfd_boolean ppc64_elf_size_stubs |
e7d1c40c | 94 | (struct bfd_link_info *); |
b34976b6 | 95 | bfd_boolean ppc64_elf_build_stubs |
e7d1c40c | 96 | (struct bfd_link_info *, char **); |
99877b66 AM |
97 | void ppc64_elf_restore_symbols |
98 | (struct bfd_link_info *info); |