Commit | Line | Data |
---|---|---|
5d1634d7 | 1 | /* PowerPC64-specific support for 64-bit ELF. |
b3adc24a | 2 | Copyright (C) 2002-2020 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 | 38 | |
9e7028aa AM |
39 | /* Whether the special call stub should save r4..r12. */ |
40 | int no_tls_get_addr_regsave; | |
41 | ||
e7d1c40c AM |
42 | /* Whether to allow multiple toc sections. */ |
43 | int no_multi_toc; | |
44 | ||
45 | /* Set if PLT call stubs should load r11. */ | |
46 | int plt_static_chain; | |
47 | ||
48 | /* Set if PLT call stubs need to be thread safe on power7+. */ | |
49 | int plt_thread_safe; | |
50 | ||
51 | /* Set if individual PLT call stubs should be aligned. */ | |
52 | int plt_stub_align; | |
53 | ||
f378ab09 AM |
54 | /* Set if PLT call stubs for localentry:0 functions should omit r2 save. */ |
55 | int plt_localentry0; | |
56 | ||
e7d1c40c AM |
57 | /* Whether to canonicalize .opd so that there are no overlapping |
58 | .opd entries. */ | |
59 | int non_overlapping_opd; | |
60 | ||
61 | /* Whether to emit symbols for stubs. */ | |
62 | int emit_stub_syms; | |
7d4c687d AM |
63 | |
64 | /* Whether to generate out-of-line register save/restore for gcc -Os code. */ | |
65 | int save_restore_funcs; | |
dbd1e97e AM |
66 | |
67 | /* Set when a potential variable is detected in .toc. */ | |
68 | int object_in_toc; | |
e7d1c40c AM |
69 | }; |
70 | ||
bfeb4a28 | 71 | bfd_boolean ppc64_elf_init_stub_bfd |
e7d1c40c | 72 | (struct bfd_link_info *, struct ppc64_elf_params *); |
b34976b6 | 73 | bfd_boolean ppc64_elf_edit_opd |
e7d1c40c | 74 | (struct bfd_link_info *); |
3e04d765 AM |
75 | bfd_boolean ppc64_elf_inline_plt |
76 | (struct bfd_link_info *); | |
e1918d23 | 77 | asection *ppc64_elf_tls_setup |
e7d1c40c | 78 | (struct bfd_link_info *); |
411e1bfb | 79 | bfd_boolean ppc64_elf_tls_optimize |
33c0ec9d | 80 | (struct bfd_link_info *); |
c5614fa4 | 81 | bfd_boolean ppc64_elf_edit_toc |
33c0ec9d | 82 | (struct bfd_link_info *); |
1bbe0902 AM |
83 | bfd_boolean ppc64_elf_has_small_toc_reloc |
84 | (asection *); | |
1c865ab2 | 85 | bfd_vma ppc64_elf_set_toc |
1d7c9635 | 86 | (struct bfd_link_info *, bfd *); |
721956f4 | 87 | int ppc64_elf_setup_section_lists |
e7d1c40c | 88 | (struct bfd_link_info *); |
927be08e AM |
89 | void ppc64_elf_start_multitoc_partition |
90 | (struct bfd_link_info *); | |
91 | bfd_boolean ppc64_elf_next_toc_section | |
4ce794b7 | 92 | (struct bfd_link_info *, asection *); |
927be08e AM |
93 | bfd_boolean ppc64_elf_layout_multitoc |
94 | (struct bfd_link_info *); | |
95 | void ppc64_elf_finish_multitoc_partition | |
96 | (struct bfd_link_info *); | |
70cc837d AM |
97 | bfd_boolean ppc64_elf_check_init_fini |
98 | (struct bfd_link_info *); | |
9b5ecbd0 | 99 | bfd_boolean ppc64_elf_next_input_section |
4ce794b7 | 100 | (struct bfd_link_info *, asection *); |
b34976b6 | 101 | bfd_boolean ppc64_elf_size_stubs |
e7d1c40c | 102 | (struct bfd_link_info *); |
b34976b6 | 103 | bfd_boolean ppc64_elf_build_stubs |
e7d1c40c | 104 | (struct bfd_link_info *, char **); |