X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=ld%2Femultempl%2Fhppaelf.em;h=d7e822c6561ffe2f0001b4c719b4a7ab463f5357;hb=1ff6de031241c59d0ff9fa01d3c0a4049b0e97c9;hp=3ce5d54af7f3c657a79b55935fe815d95bcf504a;hpb=97b11f4094739634d104156f5c586ba7916ef0fa;p=deliverable%2Fbinutils-gdb.git diff --git a/ld/emultempl/hppaelf.em b/ld/emultempl/hppaelf.em index 3ce5d54af7..d7e822c656 100644 --- a/ld/emultempl/hppaelf.em +++ b/ld/emultempl/hppaelf.em @@ -1,6 +1,5 @@ # This shell script emits a C file. -*- C -*- -# Copyright 1991, 1993, 1994, 1997, 1999, 2000, 2001, 2002, 2003, 2004, -# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. +# Copyright (C) 1991-2019 Free Software Foundation, Inc. # # This file is part of the GNU Binutils. # @@ -20,7 +19,7 @@ # MA 02110-1301, USA. # -# This file is sourced from elf32.em, and defines extra hppa-elf +# This file is sourced from elf.em, and defines extra hppa-elf # specific routines. # fragment <the_bfd->flags |= BFD_LINKER_CREATED; ldlang_add_file (stub_file); + elf32_hppa_init_stub_bfd (stub_file->the_bfd, &link_info); } @@ -177,7 +178,6 @@ hppaelf_add_stub_section (const char *stub_sec_name, asection *input_section) asection *stub_sec; flagword flags; asection *output_section; - const char *secname; lang_output_section_statement_type *os; struct hook_stub_info info; @@ -189,12 +189,11 @@ hppaelf_add_stub_section (const char *stub_sec_name, asection *input_section) goto err_ret; output_section = input_section->output_section; - secname = bfd_get_section_name (output_section->owner, output_section); - os = lang_output_section_find (secname); + os = lang_output_section_get (output_section); info.input_section = input_section; lang_list_init (&info.add); - lang_add_section (&info.add, stub_sec, os); + lang_add_section (&info.add, stub_sec, NULL, os); if (info.add.head == NULL) goto err_ret; @@ -203,7 +202,7 @@ hppaelf_add_stub_section (const char *stub_sec_name, asection *input_section) return stub_sec; err_ret: - einfo ("%X%P: can not make stub section: %E\n"); + einfo (_("%X%P: can not make stub section: %E\n")); return NULL; } @@ -216,7 +215,7 @@ hppaelf_layout_sections_again (void) /* If we have changed sizes of the stub sections, then we need to recalculate all the section offsets. This may mean we need to add even more stubs. */ - gld${EMULATION_NAME}_map_segments (TRUE); + ldelf_map_segments (TRUE); need_laying_out = -1; } @@ -228,7 +227,7 @@ build_section_lists (lang_statement_union_type *statement) { asection *i = statement->input_section.section; - if (!((lang_input_statement_type *) i->owner->usrdata)->just_syms_flag + if (i->sec_info_type != SEC_INFO_TYPE_JUST_SYMS && (i->flags & SEC_EXCLUDE) == 0 && i->output_section != NULL && i->output_section->owner == link_info.output_bfd) @@ -244,25 +243,31 @@ build_section_lists (lang_statement_union_type *statement) static void gld${EMULATION_NAME}_after_allocation (void) { + int ret; + /* bfd_elf_discard_info just plays with data and debugging sections, ie. doesn't affect code size, so we can delay resizing the sections. It's likely we'll resize everything in the process of adding stubs. */ - if (bfd_elf_discard_info (link_info.output_bfd, &link_info)) + ret = bfd_elf_discard_info (link_info.output_bfd, &link_info); + if (ret < 0) + { + einfo (_("%X%P: .eh_frame/.stab edit: %E\n")); + return; + } + else if (ret > 0) need_laying_out = 1; /* If generating a relocatable output file, then we don't have to examine the relocs. */ - if (stub_file != NULL && !link_info.relocatable) + if (stub_file != NULL && !bfd_link_relocatable (&link_info)) { - int ret = elf32_hppa_setup_section_lists (link_info.output_bfd, - &link_info); - + ret = elf32_hppa_setup_section_lists (link_info.output_bfd, &link_info); if (ret != 0) { if (ret < 0) { - einfo ("%X%P: can not size stub section: %E\n"); + einfo (_("%X%P: can not size stub section: %E\n")); return; } @@ -277,21 +282,21 @@ gld${EMULATION_NAME}_after_allocation (void) &hppaelf_add_stub_section, &hppaelf_layout_sections_again)) { - einfo ("%X%P: can not size stub section: %E\n"); + einfo (_("%X%P: can not size stub section: %E\n")); return; } } } if (need_laying_out != -1) - gld${EMULATION_NAME}_map_segments (need_laying_out); + ldelf_map_segments (need_laying_out); - if (! link_info.relocatable) + if (!bfd_link_relocatable (&link_info)) { /* Set the global data pointer. */ if (! elf32_hppa_set_gp (link_info.output_bfd, &link_info)) { - einfo ("%X%P: can not set gp\n"); + einfo (_("%X%P: can not set gp\n")); return; } @@ -299,32 +304,11 @@ gld${EMULATION_NAME}_after_allocation (void) if (stub_file != NULL && stub_file->the_bfd->sections != NULL) { if (! elf32_hppa_build_stubs (&link_info)) - einfo ("%X%P: can not build stubs: %E\n"); + einfo (_("%X%P: can not build stubs: %E\n")); } } } - -/* Avoid processing the fake stub_file in vercheck, stat_needed and - check_needed routines. */ - -static void (*real_func) (lang_input_statement_type *); - -static void hppa_for_each_input_file_wrapper (lang_input_statement_type *l) -{ - if (l != stub_file) - (*real_func) (l); -} - -static void -hppa_lang_for_each_input_file (void (*func) (lang_input_statement_type *)) -{ - real_func = func; - lang_for_each_input_file (&hppa_for_each_input_file_wrapper); -} - -#define lang_for_each_input_file hppa_lang_for_each_input_file - EOF # Define some shell vars to insert bits of code into the standard elf @@ -365,9 +349,9 @@ PARSE_AND_LIST_ARGS_CASES=' case OPTION_STUBGROUP_SIZE: { const char *end; - group_size = bfd_scan_vma (optarg, &end, 0); - if (*end) - einfo (_("%P%F: invalid number `%s'\''\n"), optarg); + group_size = bfd_scan_vma (optarg, &end, 0); + if (*end) + einfo (_("%F%P: invalid number `%s'\''\n"), optarg); } break; '