2006-06-20 10:22:16 +08:00
|
|
|
# This shell script emits a C file. -*- C -*-
|
2015-01-01 22:15:26 +08:00
|
|
|
# Copyright (C) 2006-2015 Free Software Foundation, Inc.
|
2006-06-20 10:22:16 +08:00
|
|
|
#
|
2007-07-06 22:09:45 +08:00
|
|
|
# This file is part of the GNU Binutils.
|
2006-06-20 10:22:16 +08:00
|
|
|
#
|
|
|
|
# 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
|
2007-07-06 22:09:45 +08:00
|
|
|
# the Free Software Foundation; either version 3 of the License, or
|
2006-06-20 10:22:16 +08:00
|
|
|
# (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
|
2007-07-06 22:09:45 +08:00
|
|
|
# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
|
|
|
# MA 02110-1301, USA.
|
2006-06-20 10:22:16 +08:00
|
|
|
#
|
|
|
|
|
|
|
|
# This file is sourced from generic.em
|
|
|
|
#
|
2007-07-20 03:56:10 +08:00
|
|
|
fragment <<EOF
|
2006-06-20 10:22:16 +08:00
|
|
|
#include "elf-bfd.h"
|
|
|
|
|
|
|
|
EOF
|
2007-07-20 03:56:10 +08:00
|
|
|
source_em ${srcdir}/emultempl/elf-generic.em
|
|
|
|
fragment <<EOF
|
2006-06-20 10:22:16 +08:00
|
|
|
|
2008-10-03 17:40:49 +08:00
|
|
|
static void
|
|
|
|
gld${EMULATION_NAME}_after_open (void)
|
|
|
|
{
|
|
|
|
bfd *ibfd;
|
|
|
|
asection *sec;
|
|
|
|
asymbol **syms;
|
|
|
|
|
* ld.texinfo (Expression Section): Describe treatment of numbers
and absolute symbols.
* ldemul.c (after_open_default): Look up __ld_compatibility.
* ldexp.c (fold_name): Convert absolute symbols to numbers when
inside output section definitions, or when __ld_compatibility >= 221.
(exp_fold_tree_1): Convert numbers to absolute when not in output
section definition and __ld_compatibility < 221. Don't always
convert values outside an output section definition to absolute.
* ldexp.h (uses_defined): Comment.
* ldlang.c (ld_compatibility): New variable.
* ldlang.h (ld_compatibility): Declare.
* emultempl/aix.em, * emultempl/armcoff.em, * emultempl/beos.em,
* emultempl/elf32.em, * emultempl/genelf.em, * emultempl/lnk960.em,
* emultempl/m68kcoff.em, * emultempl/mmo.em, * emultempl/pe.em,
* emultempl/pep.em, * emultempl/sunos.em, * emultempl/z80.em: Call
after_open_default from after_open function.
2010-12-20 21:00:14 +08:00
|
|
|
after_open_default ();
|
|
|
|
|
2008-10-03 17:40:49 +08:00
|
|
|
if (link_info.relocatable)
|
Make bfd.link_next field a union
This field of struct bfd is currently only used to chain together
linker input files. This patch prepares to use the field to stash
the linker hash table, which is always created on the linker output
file.
bfd/
* bfd.c (struct bfd): Replace link_next with a union.
* aoutx.h, * bfd.c, * coff-ppc.c, * coff-rs6000.c, * cofflink.c,
* ecoff.c, * elf-m10300.c, * elf32-arm.c, * elf32-avr.c,
* elf32-hppa.c, * elf32-i386.c, * elf32-lm32.c, * elf32-m32c.c,
* elf32-m32r.c, * elf32-m68hc1x.c, * elf32-metag.c,
* elf32-microblaze.c, * elf32-nds32.c, * elf32-nios2.c,
* elf32-or1k.c, * elf32-ppc.c, * elf32-rl78.c, * elf32-s390.c,
* elf32-score.c, * elf32-score7.c, * elf32-sh.c, * elf32-spu.c,
* elf32-tic6x.c, * elf32-tilepro.c, * elf32-xstormy16.c,
* elf32-xtensa.c, * elf64-alpha.c, * elf64-hppa.c, * elf64-ia64-vms.c,
* elf64-mmix.c, * elf64-ppc.c, * elf64-s390.c, * elf64-x86-64.c,
* elflink.c, * elfnn-aarch64.c, * elfxx-mips.c, * elfxx-sparc.c,
* elfxx-tilegx.c, * linker.c, * pdp11.c, * peXXigen.c, * simple.c,
* sunos.c, * vms-alpha.c, * xcofflink.c: Update for above.
* bfd-in2.h: Regenerate.
include/
* bfdlink.h: Update for bfd.link_next change.
ld/
* emultempl/cr16elf.em, * emultempl/elf32.em, * emultempl/genelf.em,
* emultempl/m68kcoff.em, * emultempl/m68kelf.em,
* emultempl/nds32elf.em, * emultempl/pe.em, * emultempl/pep.em,
* ldlang.c, * ldmain.c, * pe-dll.c: Update for bfd.link_next change.
2014-06-13 17:40:57 +08:00
|
|
|
for (ibfd = link_info.input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
|
2008-10-03 17:40:49 +08:00
|
|
|
if ((syms = bfd_get_outsymbols (ibfd)) != NULL
|
|
|
|
&& bfd_get_flavour (ibfd) == bfd_target_elf_flavour)
|
|
|
|
for (sec = ibfd->sections; sec != NULL; sec = sec->next)
|
|
|
|
if ((sec->flags & (SEC_GROUP | SEC_LINKER_CREATED)) == SEC_GROUP)
|
|
|
|
{
|
|
|
|
struct bfd_elf_section_data *sec_data = elf_section_data (sec);
|
|
|
|
elf_group_id (sec) = syms[sec_data->this_hdr.sh_info - 1];
|
|
|
|
}
|
|
|
|
}
|
2009-08-10 15:50:56 +08:00
|
|
|
|
2010-02-19 09:47:16 +08:00
|
|
|
static void
|
|
|
|
gld${EMULATION_NAME}_before_allocation (void)
|
|
|
|
{
|
|
|
|
if (link_info.relocatable
|
|
|
|
&& !_bfd_elf_size_group_sections (&link_info))
|
|
|
|
einfo ("%X%P: can not size group sections: %E\n");
|
|
|
|
before_allocation_default ();
|
|
|
|
}
|
|
|
|
|
2009-08-10 15:50:56 +08:00
|
|
|
static void
|
|
|
|
gld${EMULATION_NAME}_after_allocation (void)
|
|
|
|
{
|
|
|
|
gld${EMULATION_NAME}_map_segments (FALSE);
|
|
|
|
}
|
2006-06-20 10:22:16 +08:00
|
|
|
EOF
|
|
|
|
# Put these extra routines in ld_${EMULATION_NAME}_emulation
|
|
|
|
#
|
2008-10-03 17:40:49 +08:00
|
|
|
LDEMUL_AFTER_OPEN=gld${EMULATION_NAME}_after_open
|
2010-02-19 09:47:16 +08:00
|
|
|
LDEMUL_BEFORE_ALLOCATION=gld${EMULATION_NAME}_before_allocation
|
2009-08-10 15:50:56 +08:00
|
|
|
LDEMUL_AFTER_ALLOCATION=gld${EMULATION_NAME}_after_allocation
|