X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=ld%2Fldemul.c;h=00a6a5ad1338b4b4d67b2d2b06d276b3f193759e;hb=1ee1a363454d88a87ad2ade7530b2a7fb670021e;hp=e0c8ba3f1ee42bfec1dfa409356a069f8fb71b79;hpb=0aa7f5862e5619194b3956d5bd45b93970635bde;p=deliverable%2Fbinutils-gdb.git diff --git a/ld/ldemul.c b/ld/ldemul.c index e0c8ba3f1e..00a6a5ad13 100644 --- a/ld/ldemul.c +++ b/ld/ldemul.c @@ -1,5 +1,5 @@ /* ldemul.c -- clearing house for ld emulation states - Copyright (C) 1991-2016 Free Software Foundation, Inc. + Copyright (C) 1991-2020 Free Software Foundation, Inc. This file is part of the GNU Binutils. @@ -22,6 +22,7 @@ #include "bfd.h" #include "getopt.h" #include "bfdlink.h" +#include "ctf-api.h" #include "ld.h" #include "ldmisc.h" @@ -64,6 +65,18 @@ ldemul_after_open (void) ld_emulation->after_open (); } +void +ldemul_after_check_relocs (void) +{ + ld_emulation->after_check_relocs (); +} + +void +ldemul_before_place_orphans (void) +{ + ld_emulation->before_place_orphans (); +} + void ldemul_after_allocation (void) { @@ -219,10 +232,48 @@ after_parse_default (void) if (!is_vma) ldlang_add_undef (entry_symbol.name, entry_from_cmdline); } + if (config.maxpagesize == 0) + config.maxpagesize = bfd_emul_get_maxpagesize (default_target); + if (config.commonpagesize == 0) + config.commonpagesize = bfd_emul_get_commonpagesize (default_target, + link_info.relro); } void after_open_default (void) +{ + link_info.big_endian = TRUE; + + if (bfd_big_endian (link_info.output_bfd)) + ; + else if (bfd_little_endian (link_info.output_bfd)) + link_info.big_endian = FALSE; + else + { + if (command_line.endian == ENDIAN_BIG) + ; + else if (command_line.endian == ENDIAN_LITTLE) + link_info.big_endian = FALSE; + else if (command_line.endian == ENDIAN_UNSET) + { + LANG_FOR_EACH_INPUT_STATEMENT (s) + if (s->the_bfd != NULL) + { + if (bfd_little_endian (s->the_bfd)) + link_info.big_endian = FALSE; + break; + } + } + } +} + +void +after_check_relocs_default (void) +{ +} + +void +before_place_orphans_default (void) { } @@ -260,13 +311,13 @@ set_output_arch_default (void) void syslib_default (char *ignore ATTRIBUTE_UNUSED) { - info_msg (_("%S SYSLIB ignored\n"), NULL); + info_msg (_("%pS SYSLIB ignored\n"), NULL); } void hll_default (char *ignore ATTRIBUTE_UNUSED) { - info_msg (_("%S HLL ignored\n"), NULL); + info_msg (_("%pS HLL ignored\n"), NULL); } ld_emulation_xfer_type *ld_emulations[] = { EMULATION_LIST }; @@ -355,3 +406,33 @@ ldemul_extra_map_file_text (bfd *abfd, struct bfd_link_info *info, FILE *mapf) if (ld_emulation->extra_map_file_text) ld_emulation->extra_map_file_text (abfd, info, mapf); } + +int +ldemul_emit_ctf_early (void) +{ + if (ld_emulation->emit_ctf_early) + return ld_emulation->emit_ctf_early (); + /* If the emulation doesn't know if it wants to emit CTF early, it is going + to do so. */ + return 1; +} + +void +ldemul_examine_strtab_for_ctf (struct ctf_file *ctf_output, + struct elf_sym_strtab *syms, + bfd_size_type symcount, + struct elf_strtab_hash *symstrtab) + +{ + if (ld_emulation->examine_strtab_for_ctf) + ld_emulation->examine_strtab_for_ctf (ctf_output, syms, + symcount, symstrtab); +} + +bfd_boolean +ldemul_print_symbol (struct bfd_link_hash_entry *hash_entry, void *ptr) +{ + if (ld_emulation->print_symbol) + return ld_emulation->print_symbol (hash_entry, ptr); + return print_one_symbol (hash_entry, ptr); +}