X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=ld%2Fldemul.c;h=fa6dfdd18edfb199d4807d2766d02135272881b2;hb=02eba61aa6cad683e96cf13f483adc04982c0c2b;hp=cebf012e78f27fca3655c49def218b1032b8a3e3;hpb=2571583aed598dd3f9651b53434e5f177a0e3cf7;p=deliverable%2Fbinutils-gdb.git diff --git a/ld/ldemul.c b/ld/ldemul.c index cebf012e78..fa6dfdd18e 100644 --- a/ld/ldemul.c +++ b/ld/ldemul.c @@ -1,5 +1,5 @@ /* ldemul.c -- clearing house for ld emulation states - Copyright (C) 1991-2017 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,25 @@ 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); +}