mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-25 19:14:52 +08:00
2d23f9656c
bfd/ChangeLog: * coff-rs6000.c (xcoff_reloc_type_noop): Add info argument. (xcoff_reloc_type_fail): Likewise. (xcoff_reloc_type_pos): Likewise. (xcoff_reloc_type_neg): Likewise. (xcoff_reloc_type_rel): Likewise. (xcoff_reloc_type_toc): Likewise. (xcoff_reloc_type_ba): Likewise. (xcoff_reloc_type_crel): Likewise. (xcoff_reloc_type_tls): Likewise. (xcoff_reloc_type_br): Add stub handler. (xcoff_ppc_relocate_section): Add info to xcoff_calculate_relocation. (xcoff_stub_indirect_call_code): New constant. (xcoff_stub_shared_call_code): Likewise. (bfd_xcoff_backend_data): Add stub code fields. (bfd_pmac_xcoff_backend_data): Likewise. * coff64-rs6000.c (xcoff64_reloc_type_br): Add stub handler. (xcoff64_ppc_relocate_section): Add info to xcoff64_calculate_relocation. (xcoff64_stub_indirect_call_code): New constant. (xcoff64_stub_shared_call_code): Likewise. (bfd_xcoff_backend_data): Add stub code fields. (bfd_xcoff_aix5_backend_data): Likewise. * libxcoff.h (struct xcoff_backend_data_rec): Add stub fields. (bfd_xcoff_stub_indirect_call_code): New define. (bfd_xcoff_stub_indirect_call_size): New define. (bfd_xcoff_stub_shared_call_code): New define. (bfd_xcoff_stub_shared_call_size): New define. (xcoff_reloc_function): Add info argument. (enum xcoff_stub_type): New enum. (struct xcoff_stub_hash_entry): New structure. * xcofflink.c (struct xcoff_link_hash_table): Add stub hash table and params fields. (xcoff_stub_hash_entry): New define. (xcoff_stub_hash_lookup): New define. (stub_hash_newfunc): New function. (_bfd_xcoff_bfd_link_hash_table_free): Free the new stub hash table. (_bfd_xcoff_bfd_link_hash_table_create): Create the new stub hash table. (xcoff_link_add_symbols): Save rawsize for XTY_SD. (bfd_xcoff_link_init): New function. (xcoff_stub_csect_name): New function. (xcoff_stub_get_csect_in_range): New function. (xcoff_stub_name): New function. (bfd_xcoff_get_stub_entry): New function. (bfd_xcoff_type_of_stub): New function. (xcoff_add_stub): New function. (xcoff_build_one_stub): New function. (bfd_xcoff_size_stubs): New function. (bfd_xcoff_build_stubs): New function. (xcoff_stub_create_relocations): New function. (xcoff_link_input_bfd): Adapt relocations to stub. (xcoff_write_global_symbol): Adapt to new TOC entries generated for stubs. (_bfd_xcoff_bfd_final_link): Handle stub file. * xcofflink.h (struct bfd_xcoff_link_params): New structure. ld/ChangeLog: * emultempl/aix.em (params): New variable. (stub_file): New variable. (xcoff_add_stub_section): New function. (xcoff_layout_sections_again): New function (hook_in_stub): New function. (_after_allocation): Add stub creation. (_create_output_section_statements): Allocate stub file and pass params to backend.
61 lines
2.5 KiB
C
61 lines
2.5 KiB
C
/* POWER/PowerPC XCOFF linker support.
|
|
Copyright (C) 2019-2022 Free Software Foundation, Inc.
|
|
|
|
This file is part of BFD, the Binary File Descriptor library.
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
|
MA 02110-1301, USA. */
|
|
|
|
/* Used to pass info between ld and bfd. */
|
|
struct bfd_xcoff_link_params
|
|
{
|
|
/* Linker stub bfd. */
|
|
bfd *stub_bfd;
|
|
|
|
/* Linker call-backs. */
|
|
asection * (*add_stub_section) (const char *, asection *);
|
|
void (*layout_sections_again) (void);
|
|
};
|
|
|
|
extern bool bfd_xcoff_split_import_path
|
|
(bfd *, const char *, const char **, const char **);
|
|
extern bool bfd_xcoff_set_archive_import_path
|
|
(struct bfd_link_info *, bfd *, const char *);
|
|
extern bool bfd_xcoff_link_record_set
|
|
(bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *, bfd_size_type);
|
|
extern bool bfd_xcoff_import_symbol
|
|
(bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *, bfd_vma,
|
|
const char *, const char *, const char *, unsigned int);
|
|
extern bool bfd_xcoff_export_symbol
|
|
(bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *);
|
|
extern bool bfd_xcoff_link_count_reloc
|
|
(bfd *, struct bfd_link_info *, const char *);
|
|
extern bool bfd_xcoff_record_link_assignment
|
|
(bfd *, struct bfd_link_info *, const char *);
|
|
extern bool bfd_xcoff_size_dynamic_sections
|
|
(bfd *, struct bfd_link_info *, const char *, const char *,
|
|
unsigned long, unsigned long, unsigned long, bool,
|
|
int, bool, unsigned int, struct bfd_section **, bool);
|
|
extern bool bfd_xcoff_build_dynamic_sections
|
|
(bfd *, struct bfd_link_info *);
|
|
extern bool bfd_xcoff_link_generate_rtinit
|
|
(bfd *, const char *, const char *, bool);
|
|
extern bool bfd_xcoff_link_init
|
|
(struct bfd_link_info *, struct bfd_xcoff_link_params *);
|
|
extern bool bfd_xcoff_size_stubs
|
|
(struct bfd_link_info *info);
|
|
extern bool bfd_xcoff_build_stubs
|
|
(struct bfd_link_info *info);
|