2012-12-18 00:56:12 +08:00
|
|
|
## Process this file with automake to generate Makefile.in
|
|
|
|
#
|
2014-03-05 19:46:15 +08:00
|
|
|
# Copyright (C) 2006-2014 Free Software Foundation, Inc.
|
2012-12-18 00:56:12 +08:00
|
|
|
#
|
|
|
|
# This file 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.
|
2013-12-11 06:01:01 +08:00
|
|
|
#
|
2012-12-18 00:56:12 +08:00
|
|
|
# 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.
|
2013-12-11 06:01:01 +08:00
|
|
|
#
|
2012-12-18 00:56:12 +08:00
|
|
|
# You should have received a copy of the GNU General Public License
|
|
|
|
# along with this program; see the file COPYING3. If not see
|
|
|
|
# <http://www.gnu.org/licenses/>.
|
|
|
|
#
|
2006-08-05 07:10:59 +08:00
|
|
|
|
2009-08-22 23:59:24 +08:00
|
|
|
AUTOMAKE_OPTIONS = foreign
|
2006-08-05 07:10:59 +08:00
|
|
|
|
2006-12-01 07:52:50 +08:00
|
|
|
SUBDIRS = po testsuite
|
2006-08-05 07:10:59 +08:00
|
|
|
|
|
|
|
tooldir = $(exec_prefix)/$(target_alias)
|
|
|
|
|
|
|
|
ACLOCAL_AMFLAGS = -I ../bfd -I ../config
|
|
|
|
|
2008-07-21 13:55:27 +08:00
|
|
|
AM_CFLAGS = $(WARN_CFLAGS) $(LFS_CFLAGS) $(RANDOM_SEED_CFLAGS)
|
|
|
|
AM_CXXFLAGS = $(WARN_CXXFLAGS) $(LFS_CFLAGS) $(RANDOM_SEED_CFLAGS)
|
2006-08-05 07:10:59 +08:00
|
|
|
|
Cleanups in binutils makefiles.
ld/:
* Makefile.am (bin_PROGRAMS): Renamed from ...
(noinst_PROGRAMS): ... this.
(transform): Override, including the renaming of ld-new to ld.
(install-exec-local): Installation of ld in $(bindir) not needed
here any more.
(AM_CPPFLAGS): Renamed from ...
(INCLUDES): ... this.
(MAINTAINERCLEANFILES): Add ld.1.
* Makefile.in: Regenerate.
gold/:
* Makefile.am (AM_CPPFLAGS): Renamed from ...
(INCLUDES): ... this.
* testsuite/Makefile.am (AUTOMAKE_OPTIONS): Add -Wno-portability.
(AM_CPPFLAGS): Renamed from ...
(INCLUDE): ... this.
* Makefile.in, testsuite/Makefile.in: Regenerate.
bfd/:
* Makefile.am (libbfd_la_LDFLAGS): Initialize early, to allow
appending.
[INSTALL_LIBBFD] (bfdlib_LTLIBRARIES, bfdinclude_HEADERS): Set
only in this condition.
[!INSTALL_LIBBFD] (noinst_LTLIBRARIES, libbfd_la_LDFLAGS): New,
to build but not install libbfd.la in this condition.
(install-bfdlibLTLIBRARIES, uninstall-bfdlibLTLIBRARIES)
(install_libbfd, install_libbfd): Remove.
* Makefile.in: Regenerate.
binutils/:
* Makefile.am (AM_CPPFLAGS): Renamed from ...
(INCLUDES): ... this.
(bin2c$(EXEEXT_FOR_BUILD): Adjust rule.
(installcheck-local): Renamed from ...
(installcheck): ... this.
* Makefile.in: Regenerate.
gas/:
* Makefile.am (YFLAGS): Remove, not needed any more.
(AM_CPPFLAGS): Renamed from ...
(INCLUDES): ... this.
* Makefile.in: Regenerate.
gprof/:
* Makefile.am (AM_CPPFLAGS): Renamed from ...
(INCLUDES): ... this.
* Makefile.in: Regenerate.
opcodes/:
* Makefile.am (libopcodes_la_LDFLAGS): Initialize early.
[INSTALL_LIBBFD] (bfdlib_LTLIBRARIES): Set only in this condition.
[INSTALL_LIBBFD] (bfdinclude_DATA): New.
[!INSTALL_LIBBFD] (noinst_LTLIBRARIES): New.
[!INSTALL_LIBBFD] (libopcodes_la_LDFLAGS): Ensure libopcodes.la
is built shared even if it is not to be installed.
(install-bfdlibLTLIBRARIES,uninstall-bfdlibLTLIBRARIES)
(install_libopcodes, uninstall_libopcodes): Remove.
(AM_CPPFLAGS): Renamed from ...
(INCLUDES): ... this.
* Makefile.in: Regenerate.
2009-08-23 03:02:57 +08:00
|
|
|
AM_CPPFLAGS = \
|
2006-08-05 07:10:59 +08:00
|
|
|
-I$(srcdir) -I$(srcdir)/../include -I$(srcdir)/../elfcpp \
|
|
|
|
-DLOCALEDIR="\"$(datadir)/locale\"" \
|
2007-10-04 13:49:04 +08:00
|
|
|
-DBINDIR="\"$(bindir)\"" -DTOOLBINDIR="\"$(tooldir)/bin\"" \
|
2011-11-03 12:32:01 +08:00
|
|
|
-DTOOLLIBDIR="\"$(tooldir)/lib\"" @INCINTL@
|
2006-08-05 07:10:59 +08:00
|
|
|
|
2007-10-04 13:49:04 +08:00
|
|
|
LIBIBERTY = ../libiberty/libiberty.a
|
|
|
|
|
2008-09-20 06:54:57 +08:00
|
|
|
if PLUGINS
|
2013-01-11 22:36:36 +08:00
|
|
|
LIBDL = @DLOPEN_LIBS@
|
2008-09-20 06:54:57 +08:00
|
|
|
endif
|
|
|
|
|
2007-10-17 14:24:50 +08:00
|
|
|
if THREADS
|
|
|
|
THREADSLIB = -lpthread
|
|
|
|
endif
|
|
|
|
|
2007-09-23 06:44:04 +08:00
|
|
|
AM_YFLAGS = -d
|
2006-11-15 03:21:05 +08:00
|
|
|
|
2009-08-24 13:55:55 +08:00
|
|
|
# Automake 1.10+ disables lex and yacc output file regeneration if
|
|
|
|
# maintainer mode is disabled. Avoid this.
|
|
|
|
am__skiplex =
|
|
|
|
am__skipyacc =
|
|
|
|
|
2012-10-24 10:26:39 +08:00
|
|
|
bin_PROGRAMS = dwp
|
|
|
|
|
2009-11-25 08:10:05 +08:00
|
|
|
noinst_PROGRAMS = ld-new incremental-dump
|
2006-12-01 07:52:50 +08:00
|
|
|
noinst_LIBRARIES = libgold.a
|
2006-08-05 07:10:59 +08:00
|
|
|
|
2006-08-19 06:29:20 +08:00
|
|
|
CCFILES = \
|
2006-09-30 03:58:17 +08:00
|
|
|
archive.cc \
|
2009-12-09 11:02:28 +08:00
|
|
|
attributes.cc \
|
2008-02-08 15:06:58 +08:00
|
|
|
binary.cc \
|
2006-11-04 02:26:11 +08:00
|
|
|
common.cc \
|
2007-11-30 08:35:27 +08:00
|
|
|
compressed_output.cc \
|
2008-04-17 06:54:29 +08:00
|
|
|
copy-relocs.cc \
|
2008-07-23 06:08:43 +08:00
|
|
|
cref.cc \
|
2006-11-04 02:26:11 +08:00
|
|
|
defstd.cc \
|
2008-07-25 12:25:49 +08:00
|
|
|
descriptors.cc \
|
2006-08-05 07:10:59 +08:00
|
|
|
dirsearch.cc \
|
2006-11-15 03:21:05 +08:00
|
|
|
dynobj.cc \
|
2007-11-03 07:02:44 +08:00
|
|
|
dwarf_reader.cc \
|
2007-09-26 13:44:38 +08:00
|
|
|
ehframe.cc \
|
2007-10-14 14:49:14 +08:00
|
|
|
errors.cc \
|
2008-01-10 03:57:45 +08:00
|
|
|
expression.cc \
|
2006-08-05 07:10:59 +08:00
|
|
|
fileread.cc \
|
2009-01-28 10:25:33 +08:00
|
|
|
gc.cc \
|
2012-03-22 03:02:22 +08:00
|
|
|
gdb-index.cc \
|
2006-08-05 07:10:59 +08:00
|
|
|
gold.cc \
|
|
|
|
gold-threads.cc \
|
2009-08-06 04:51:56 +08:00
|
|
|
icf.cc \
|
2009-03-21 07:37:51 +08:00
|
|
|
incremental.cc \
|
2009-12-09 11:02:28 +08:00
|
|
|
int_encoding.cc \
|
2006-09-22 06:13:18 +08:00
|
|
|
layout.cc \
|
2008-05-22 05:37:44 +08:00
|
|
|
mapfile.cc \
|
2007-05-17 01:42:48 +08:00
|
|
|
merge.cc \
|
* configure.ac (ENABLE_GOLD): Consider *-*-nacl* targets ELF.
* configure: Regenerate.
gold/
* nacl.cc: New file.
* nacl.h: New file.
* Makefile.am (CCFILES, HFILES): Add them.
* Makefile.in: Regenerate.
* i386.cc (Output_data_plt_i386_nacl): New class.
(Output_data_plt_i386_nacl_exec): New class.
(Output_data_plt_i386_nacl_dyn): New class.
(Target_i386_nacl): New class.
(Target_selector_i386_nacl): New class.
(target_selector_i386): Use it instead of Target_selector_i386.
* x86_64.cc (Output_data_plt_x86_64_nacl): New class.
(Target_x86_64_nacl): New class.
(Target_selector_x86_64_nacl): New class.
(target_selector_x86_64, target_selector_x32): Use it instead of
Target_selector_x86_64.
* arm.cc (Output_data_plt_arm_nacl): New class.
(Target_arm_nacl): New class.
(Target_selector_arm_nacl): New class.
(target_selector_arm, target_selector_armbe): Use it instead of
Target_selector_arm.
* target-select.cc (select_target): Take new Input_file* and off_t
arguments, pass them on to recognize method of selector.
* object.cc (make_elf_sized_object): Update caller.
* parameters.cc (parameters_force_valid_target): Likewise.
* incremental.cc (make_sized_incremental_binary): Likewise.
* target-select.h: Update decl.
(Target_selector::recognize): Take new Input_file* argument,
pass it on to do_recognize.
(Target_selector::do_recognize): Take new Input_file* argument.
* freebsd.h (Target_selector_freebsd::do_recognize): Likewise.
* powerpc.cc (Target_selector_powerpc::do_recognize): Likewise.
* sparc.cc (Target_selector_sparc::do_recognize): Likewise.
* testsuite/testfile.cc (Target_selector::do_recognize): Likewise.
* target.h (Target::Target_info): New members isolate_execinstr
and rosegment_gap.
(Target::isolate_execinstr, Target::rosegment_gap): New methods.
* arm.cc (Target_arm::arm_info): Update initializer.
* i386.cc (Target_i386::i386_info): Likewise.
* powerpc.cc (Target_powerpc::powerpc_info): Likewise.
* sparc.cc (Target_sparc::sparc_info): Likewise.
* x86_64.cc (Target_x86_64::x86_64_info): Likewise.
* testsuite/testfile.cc (Target_test::test_target_info): Likewise.
* layout.cc (Layout::attach_allocated_section_to_segment):
Take new const Target* argument. If target->isolate_execinstr(), act
like --rosegment.
(Layout::find_first_load_seg): Take new const Target* argument;
if target->isolate_execinstr(), reject PF_X segments.
(Layout::relaxation_loop_body): Update caller.
(Layout::set_segment_offsets): If target->isolate_execinstr(),
reset file offset to zero when we hit LOAD_SEG, and then do a second
loop over the segments before LOAD_SEG to reassign offsets after
addresses have been determined. Handle target->rosegment_gap().
(Layout::attach_section_to_segment): Take new const Target* argument;
pass it to attach_allocated_section_to_segment.
(Layout::make_output_section): Update caller.
(Layout::attach_sections_to_segments): Take new const Target* argument;
pass it to attach_section_to_segment.
* gold.cc (queue_middle_tasks): Update caller.
* layout.h (Layout): Update method decls with new arguments.
* arm.cc (Target_arm::Target_arm): Take optional argument for the
Target_info pointer to use.
(Target_arm::do_make_data_plt): New virtual method.
(Target_arm::make_data_plt): New method that calls it.
(Target_arm::make_plt_entry): Use it.
(Output_data_plt_arm::Output_data_plt_arm): Take additional argument
for the section alignment.
(Output_data_plt_arm::do_first_plt_entry_offset): New abstract virtual
method.
(Output_data_plt_arm::first_plt_entry_offset): Call it.
(Output_data_plt_arm::do_get_plt_entry_size): New abstract virtual
method.
(Output_data_plt_arm::get_plt_entry_size): Call it.
(Output_data_plt_arm::do_fill_plt_entry): New abstract virtual method.
(Output_data_plt_arm::fill_plt_entry): New method that calls it.
(Output_data_plt_arm::do_fill_first_plt_entry): New abstract virtual
method.
(Output_data_plt_arm::fill_first_plt_entry): New method that calls it.
(Output_data_plt_arm::set_final_data_size): Use get_plt_entry_size
method instead of sizeof(plt_entry).
(Output_data_plt_arm::add_entry): Likewise.
Use first_plt_entry_offset method instead of sizeof(first_plt_entry).
(Target_arm::first_plt_entry_offset): Call method on this->plt_ rather
than static method.
(Target_arm::plt_entry_size): Likewise.
(Output_data_plt_arm::first_plt_entry, Output_data_plt_arm::plt_entry):
Move to ...
(Output_data_plt_arm_standard): ... here, new class.
(Output_data_plt_arm::do_write): Move guts of PLT filling to...
(Output_data_plt_arm_standard::do_fill_first_plt_entry): ... here ...
(Output_data_plt_arm_standard::do_fill_plt_entry): ... and here.
* x86_64.cc (Output_data_plt_x86_64::Output_data_plt_x86_64):
Take additional argument for the PLT entry size.
(Output_data_plt_x86_64::get_tlsdesc_plt_offset):
Use get_plt_entry_size method rather than plt_entry_size variable.
(Output_data_plt_x86_64::reserve_slot): Likewise.
(Output_data_plt_x86_64::do_adjust_output_section): Likewise.
(Output_data_plt_x86_64::add_entry): Likewise.
(Output_data_plt_x86_64::add_local_ifunc_entry): Likewise.
(Output_data_plt_x86_64::address_for_global): Likewise.
(Output_data_plt_x86_64::address_for_local): Likewise.
(Output_data_plt_x86_64::set_final_data_size): Likewise.
(Output_data_plt_x86_64::first_plt_entry_offset): Likewise.
Make method non-static.
(Output_data_plt_x86_64::do_get_plt_entry_size): New abstract virtual
method.
(Output_data_plt_x86_64::get_plt_entry_size): Just call that.
(Output_data_plt_x86_64::do_add_eh_frame): New abstract virtual method.
(Output_data_plt_x86_64::add_eh_frame): New method to call it.
(Output_data_plt_x86_64::do_fill_first_plt_entry): New abstract
virtual method.
(Output_data_plt_x86_64::fill_first_plt_entry): New method to call it.
(Output_data_plt_x86_64::do_fill_plt_entry): New abstract
virtual method.
(Output_data_plt_x86_64::fill_plt_entry): New method to call it.
(Output_data_plt_x86_64::do_fill_tlsdesc_entry): New abstract
virtual method.
(Output_data_plt_x86_64::fill_tlsdesc_entry): New method to call it.
(Output_data_plt_x86_64::plt_entry_size)
(Output_data_plt_x86_64::first_plt_entry)
(Output_data_plt_x86_64::plt_entry)
(Output_data_plt_x86_64::tlsdesc_plt_entry)
(Output_data_plt_x86_64::plt_eh_frame_fde_size)
(Output_data_plt_x86_64::plt_eh_frame_fde): Move to ...
(Output_data_plt_x86_64_standard): ... here, new class.
(Target_x86_64::Target_x86_64): Take optional argument for the
Target_info pointer to use.
(Target_x86_64::do_make_data_plt): New virtual method.
(Target_x86_64::make_data_plt): New method to call it.
(Target_x86_64::init_got_plt_for_update): Use that.
Call this->plt_->add_eh_frame method here.
(Output_data_plt_x86_64::init): Don't do add_eh_frame_for_plt here.
(Target_x86_64::first_plt_entry_offset): Call method on this->plt_
rather than static method.
(Target_x86_64::plt_entry_size): Likewise.
(Output_data_plt_x86_64::do_write): Use get_plt_entry_size method
rather than plt_entry_size variable. Move guts of PLT filling to...
(Output_data_plt_x86_64_standard::do_fill_first_plt_entry): ... here ...
(Output_data_plt_x86_64_standard::do_fill_plt_entry): ... and here ...
(Output_data_plt_x86_64_standard::do_fill_tlsdesc_entry): ... and here.
* i386.cc (Output_data_plt_i386::Output_data_plt_i386): Take
additional argument for the section alignment.
Don't do add_eh_frame_for_plt here.
(Output_data_plt_i386::first_plt_entry_offset): Make the method
non-static. Use get_plt_entry_size method rather than plt_entry_size
variable.
(Output_data_plt_i386::do_get_plt_entry_size): New abstract virtual
method.
(Output_data_plt_i386::get_plt_entry_size): Call it.
(Output_data_plt_i386::do_add_eh_frame): New abstract virtual method.
(Output_data_plt_i386::add_eh_frame): New method to call it.
(Output_data_plt_i386::do_fill_first_plt_entry): New abstract virtual
method.
(Output_data_plt_i386::fill_first_plt_entry): New method to call it.
(Output_data_plt_i386::do_fill_plt_entry): New abstract virtual
method.
(Output_data_plt_i386::fill_plt_entry): New method to call it.
(Output_data_plt_i386::set_final_data_size): Use get_plt_entry_size
method instead of plt_entry_size.
(Output_data_plt_i386::plt_entry_size)
(Output_data_plt_i386::plt_eh_frame_fde_size)
(Output_data_plt_i386::plt_eh_frame_fde): Move to ...
(Output_data_plt_i386_standard): ... here, new class.
(Output_data_plt_i386_exec): New class.
(Output_data_plt_i386::exec_first_plt_entry): Move to ...
(Output_data_plt_i386_exec::first_plt_entry): ... here.
(Output_data_plt_i386::exec_plt_entry): Move to ...
(Output_data_plt_i386_exec::plt_entry): ... here.
(Output_data_plt_i386_dyn): New class.
(Output_data_plt_i386::first_plt_entry): Move to ...
(Output_data_plt_i386_dyn::first_plt_entry): ... here.
(Output_data_plt_i386::dyn_plt_entry): Move to ...
(Output_data_plt_i386_dyn::plt_entry): ... here.
(Target_i386::Target_i386): Take optional argument for the Target_info
pointer to use.
(Target_i386::do_make_data_plt): New virtual method.
(Target_i386::make_data_plt): New method to call it.
(Target_i386::make_plt_section): Use that.
Call this->plt_->add_eh_frame method here.
(Output_data_plt_i386::add_entry): Use get_plt_entry_size method
rather than plt_entry_size variable.
(Output_data_plt_i386::add_local_ifunc_entry): Likewise.
(Output_data_plt_i386::address_for_local): Likewise.
(Output_data_plt_i386::do_write): Likewise.
Move guts of PLT filling to...
(Output_data_plt_i386_exec::do_fill_first_plt_entry): ... here ...
(Output_data_plt_i386_exec::do_fill_plt_entry): ... and here ...
(Output_data_plt_i386_dyn::do_fill_first_plt_entry): ... and here ...
(Output_data_plt_i386_dyn::do_fill_plt_entry): ... and here.
Change-Id: Id24b95600489835ff5e860a39c147203d4380c2b
2012-05-03 05:37:24 +08:00
|
|
|
nacl.cc \
|
2006-08-05 07:10:59 +08:00
|
|
|
object.cc \
|
|
|
|
options.cc \
|
2006-09-22 06:13:18 +08:00
|
|
|
output.cc \
|
2007-09-21 15:20:01 +08:00
|
|
|
parameters.cc \
|
2008-09-20 06:54:57 +08:00
|
|
|
plugin.cc \
|
2006-08-05 07:10:59 +08:00
|
|
|
readsyms.cc \
|
2008-05-29 04:48:16 +08:00
|
|
|
reduced_debug_output.cc \
|
2006-09-30 03:58:17 +08:00
|
|
|
reloc.cc \
|
2006-08-19 06:29:20 +08:00
|
|
|
resolve.cc \
|
2008-01-23 09:31:13 +08:00
|
|
|
script-sections.cc \
|
2006-11-15 03:21:05 +08:00
|
|
|
script.cc \
|
2006-08-19 06:29:20 +08:00
|
|
|
stringpool.cc \
|
2007-12-01 14:50:09 +08:00
|
|
|
symtab.cc \
|
2009-06-06 05:32:57 +08:00
|
|
|
target.cc \
|
2006-08-19 06:29:20 +08:00
|
|
|
target-select.cc \
|
2009-12-18 00:02:03 +08:00
|
|
|
timer.cc \
|
2007-10-08 02:06:27 +08:00
|
|
|
version.cc \
|
2007-11-22 08:05:51 +08:00
|
|
|
workqueue.cc \
|
|
|
|
workqueue-threads.cc
|
2006-08-05 07:10:59 +08:00
|
|
|
|
|
|
|
HFILES = \
|
2010-02-03 13:36:55 +08:00
|
|
|
arm-reloc-property.h \
|
2006-09-30 03:58:17 +08:00
|
|
|
archive.h \
|
2009-12-09 11:02:28 +08:00
|
|
|
attributes.h \
|
2008-02-08 15:06:58 +08:00
|
|
|
binary.h \
|
2006-11-04 02:26:11 +08:00
|
|
|
common.h \
|
2007-11-30 08:35:27 +08:00
|
|
|
compressed_output.h \
|
2008-04-17 06:54:29 +08:00
|
|
|
copy-relocs.h \
|
2008-07-23 06:08:43 +08:00
|
|
|
cref.h \
|
2006-11-04 02:26:11 +08:00
|
|
|
defstd.h \
|
2006-08-05 07:10:59 +08:00
|
|
|
dirsearch.h \
|
2008-07-25 12:25:49 +08:00
|
|
|
descriptors.h \
|
2006-11-15 03:21:05 +08:00
|
|
|
dynobj.h \
|
2007-11-03 07:02:44 +08:00
|
|
|
dwarf_reader.h \
|
2007-09-26 13:44:38 +08:00
|
|
|
ehframe.h \
|
2007-10-14 14:49:14 +08:00
|
|
|
errors.h \
|
2006-08-05 07:10:59 +08:00
|
|
|
fileread.h \
|
2009-03-24 08:31:29 +08:00
|
|
|
freebsd.h \
|
2009-01-28 10:25:33 +08:00
|
|
|
gc.h \
|
2012-03-22 03:02:22 +08:00
|
|
|
gdb-index.h \
|
2006-08-05 07:10:59 +08:00
|
|
|
gold.h \
|
|
|
|
gold-threads.h \
|
2009-08-06 04:51:56 +08:00
|
|
|
icf.h \
|
2009-12-09 11:02:28 +08:00
|
|
|
int_encoding.h \
|
2006-09-22 06:13:18 +08:00
|
|
|
layout.h \
|
2008-05-22 05:37:44 +08:00
|
|
|
mapfile.h \
|
2007-05-17 01:42:48 +08:00
|
|
|
merge.h \
|
* configure.ac (ENABLE_GOLD): Consider *-*-nacl* targets ELF.
* configure: Regenerate.
gold/
* nacl.cc: New file.
* nacl.h: New file.
* Makefile.am (CCFILES, HFILES): Add them.
* Makefile.in: Regenerate.
* i386.cc (Output_data_plt_i386_nacl): New class.
(Output_data_plt_i386_nacl_exec): New class.
(Output_data_plt_i386_nacl_dyn): New class.
(Target_i386_nacl): New class.
(Target_selector_i386_nacl): New class.
(target_selector_i386): Use it instead of Target_selector_i386.
* x86_64.cc (Output_data_plt_x86_64_nacl): New class.
(Target_x86_64_nacl): New class.
(Target_selector_x86_64_nacl): New class.
(target_selector_x86_64, target_selector_x32): Use it instead of
Target_selector_x86_64.
* arm.cc (Output_data_plt_arm_nacl): New class.
(Target_arm_nacl): New class.
(Target_selector_arm_nacl): New class.
(target_selector_arm, target_selector_armbe): Use it instead of
Target_selector_arm.
* target-select.cc (select_target): Take new Input_file* and off_t
arguments, pass them on to recognize method of selector.
* object.cc (make_elf_sized_object): Update caller.
* parameters.cc (parameters_force_valid_target): Likewise.
* incremental.cc (make_sized_incremental_binary): Likewise.
* target-select.h: Update decl.
(Target_selector::recognize): Take new Input_file* argument,
pass it on to do_recognize.
(Target_selector::do_recognize): Take new Input_file* argument.
* freebsd.h (Target_selector_freebsd::do_recognize): Likewise.
* powerpc.cc (Target_selector_powerpc::do_recognize): Likewise.
* sparc.cc (Target_selector_sparc::do_recognize): Likewise.
* testsuite/testfile.cc (Target_selector::do_recognize): Likewise.
* target.h (Target::Target_info): New members isolate_execinstr
and rosegment_gap.
(Target::isolate_execinstr, Target::rosegment_gap): New methods.
* arm.cc (Target_arm::arm_info): Update initializer.
* i386.cc (Target_i386::i386_info): Likewise.
* powerpc.cc (Target_powerpc::powerpc_info): Likewise.
* sparc.cc (Target_sparc::sparc_info): Likewise.
* x86_64.cc (Target_x86_64::x86_64_info): Likewise.
* testsuite/testfile.cc (Target_test::test_target_info): Likewise.
* layout.cc (Layout::attach_allocated_section_to_segment):
Take new const Target* argument. If target->isolate_execinstr(), act
like --rosegment.
(Layout::find_first_load_seg): Take new const Target* argument;
if target->isolate_execinstr(), reject PF_X segments.
(Layout::relaxation_loop_body): Update caller.
(Layout::set_segment_offsets): If target->isolate_execinstr(),
reset file offset to zero when we hit LOAD_SEG, and then do a second
loop over the segments before LOAD_SEG to reassign offsets after
addresses have been determined. Handle target->rosegment_gap().
(Layout::attach_section_to_segment): Take new const Target* argument;
pass it to attach_allocated_section_to_segment.
(Layout::make_output_section): Update caller.
(Layout::attach_sections_to_segments): Take new const Target* argument;
pass it to attach_section_to_segment.
* gold.cc (queue_middle_tasks): Update caller.
* layout.h (Layout): Update method decls with new arguments.
* arm.cc (Target_arm::Target_arm): Take optional argument for the
Target_info pointer to use.
(Target_arm::do_make_data_plt): New virtual method.
(Target_arm::make_data_plt): New method that calls it.
(Target_arm::make_plt_entry): Use it.
(Output_data_plt_arm::Output_data_plt_arm): Take additional argument
for the section alignment.
(Output_data_plt_arm::do_first_plt_entry_offset): New abstract virtual
method.
(Output_data_plt_arm::first_plt_entry_offset): Call it.
(Output_data_plt_arm::do_get_plt_entry_size): New abstract virtual
method.
(Output_data_plt_arm::get_plt_entry_size): Call it.
(Output_data_plt_arm::do_fill_plt_entry): New abstract virtual method.
(Output_data_plt_arm::fill_plt_entry): New method that calls it.
(Output_data_plt_arm::do_fill_first_plt_entry): New abstract virtual
method.
(Output_data_plt_arm::fill_first_plt_entry): New method that calls it.
(Output_data_plt_arm::set_final_data_size): Use get_plt_entry_size
method instead of sizeof(plt_entry).
(Output_data_plt_arm::add_entry): Likewise.
Use first_plt_entry_offset method instead of sizeof(first_plt_entry).
(Target_arm::first_plt_entry_offset): Call method on this->plt_ rather
than static method.
(Target_arm::plt_entry_size): Likewise.
(Output_data_plt_arm::first_plt_entry, Output_data_plt_arm::plt_entry):
Move to ...
(Output_data_plt_arm_standard): ... here, new class.
(Output_data_plt_arm::do_write): Move guts of PLT filling to...
(Output_data_plt_arm_standard::do_fill_first_plt_entry): ... here ...
(Output_data_plt_arm_standard::do_fill_plt_entry): ... and here.
* x86_64.cc (Output_data_plt_x86_64::Output_data_plt_x86_64):
Take additional argument for the PLT entry size.
(Output_data_plt_x86_64::get_tlsdesc_plt_offset):
Use get_plt_entry_size method rather than plt_entry_size variable.
(Output_data_plt_x86_64::reserve_slot): Likewise.
(Output_data_plt_x86_64::do_adjust_output_section): Likewise.
(Output_data_plt_x86_64::add_entry): Likewise.
(Output_data_plt_x86_64::add_local_ifunc_entry): Likewise.
(Output_data_plt_x86_64::address_for_global): Likewise.
(Output_data_plt_x86_64::address_for_local): Likewise.
(Output_data_plt_x86_64::set_final_data_size): Likewise.
(Output_data_plt_x86_64::first_plt_entry_offset): Likewise.
Make method non-static.
(Output_data_plt_x86_64::do_get_plt_entry_size): New abstract virtual
method.
(Output_data_plt_x86_64::get_plt_entry_size): Just call that.
(Output_data_plt_x86_64::do_add_eh_frame): New abstract virtual method.
(Output_data_plt_x86_64::add_eh_frame): New method to call it.
(Output_data_plt_x86_64::do_fill_first_plt_entry): New abstract
virtual method.
(Output_data_plt_x86_64::fill_first_plt_entry): New method to call it.
(Output_data_plt_x86_64::do_fill_plt_entry): New abstract
virtual method.
(Output_data_plt_x86_64::fill_plt_entry): New method to call it.
(Output_data_plt_x86_64::do_fill_tlsdesc_entry): New abstract
virtual method.
(Output_data_plt_x86_64::fill_tlsdesc_entry): New method to call it.
(Output_data_plt_x86_64::plt_entry_size)
(Output_data_plt_x86_64::first_plt_entry)
(Output_data_plt_x86_64::plt_entry)
(Output_data_plt_x86_64::tlsdesc_plt_entry)
(Output_data_plt_x86_64::plt_eh_frame_fde_size)
(Output_data_plt_x86_64::plt_eh_frame_fde): Move to ...
(Output_data_plt_x86_64_standard): ... here, new class.
(Target_x86_64::Target_x86_64): Take optional argument for the
Target_info pointer to use.
(Target_x86_64::do_make_data_plt): New virtual method.
(Target_x86_64::make_data_plt): New method to call it.
(Target_x86_64::init_got_plt_for_update): Use that.
Call this->plt_->add_eh_frame method here.
(Output_data_plt_x86_64::init): Don't do add_eh_frame_for_plt here.
(Target_x86_64::first_plt_entry_offset): Call method on this->plt_
rather than static method.
(Target_x86_64::plt_entry_size): Likewise.
(Output_data_plt_x86_64::do_write): Use get_plt_entry_size method
rather than plt_entry_size variable. Move guts of PLT filling to...
(Output_data_plt_x86_64_standard::do_fill_first_plt_entry): ... here ...
(Output_data_plt_x86_64_standard::do_fill_plt_entry): ... and here ...
(Output_data_plt_x86_64_standard::do_fill_tlsdesc_entry): ... and here.
* i386.cc (Output_data_plt_i386::Output_data_plt_i386): Take
additional argument for the section alignment.
Don't do add_eh_frame_for_plt here.
(Output_data_plt_i386::first_plt_entry_offset): Make the method
non-static. Use get_plt_entry_size method rather than plt_entry_size
variable.
(Output_data_plt_i386::do_get_plt_entry_size): New abstract virtual
method.
(Output_data_plt_i386::get_plt_entry_size): Call it.
(Output_data_plt_i386::do_add_eh_frame): New abstract virtual method.
(Output_data_plt_i386::add_eh_frame): New method to call it.
(Output_data_plt_i386::do_fill_first_plt_entry): New abstract virtual
method.
(Output_data_plt_i386::fill_first_plt_entry): New method to call it.
(Output_data_plt_i386::do_fill_plt_entry): New abstract virtual
method.
(Output_data_plt_i386::fill_plt_entry): New method to call it.
(Output_data_plt_i386::set_final_data_size): Use get_plt_entry_size
method instead of plt_entry_size.
(Output_data_plt_i386::plt_entry_size)
(Output_data_plt_i386::plt_eh_frame_fde_size)
(Output_data_plt_i386::plt_eh_frame_fde): Move to ...
(Output_data_plt_i386_standard): ... here, new class.
(Output_data_plt_i386_exec): New class.
(Output_data_plt_i386::exec_first_plt_entry): Move to ...
(Output_data_plt_i386_exec::first_plt_entry): ... here.
(Output_data_plt_i386::exec_plt_entry): Move to ...
(Output_data_plt_i386_exec::plt_entry): ... here.
(Output_data_plt_i386_dyn): New class.
(Output_data_plt_i386::first_plt_entry): Move to ...
(Output_data_plt_i386_dyn::first_plt_entry): ... here.
(Output_data_plt_i386::dyn_plt_entry): Move to ...
(Output_data_plt_i386_dyn::plt_entry): ... here.
(Target_i386::Target_i386): Take optional argument for the Target_info
pointer to use.
(Target_i386::do_make_data_plt): New virtual method.
(Target_i386::make_data_plt): New method to call it.
(Target_i386::make_plt_section): Use that.
Call this->plt_->add_eh_frame method here.
(Output_data_plt_i386::add_entry): Use get_plt_entry_size method
rather than plt_entry_size variable.
(Output_data_plt_i386::add_local_ifunc_entry): Likewise.
(Output_data_plt_i386::address_for_local): Likewise.
(Output_data_plt_i386::do_write): Likewise.
Move guts of PLT filling to...
(Output_data_plt_i386_exec::do_fill_first_plt_entry): ... here ...
(Output_data_plt_i386_exec::do_fill_plt_entry): ... and here ...
(Output_data_plt_i386_dyn::do_fill_first_plt_entry): ... and here ...
(Output_data_plt_i386_dyn::do_fill_plt_entry): ... and here.
Change-Id: Id24b95600489835ff5e860a39c147203d4380c2b
2012-05-03 05:37:24 +08:00
|
|
|
nacl.h \
|
2006-08-05 07:10:59 +08:00
|
|
|
object.h \
|
|
|
|
options.h \
|
2006-09-22 06:13:18 +08:00
|
|
|
output.h \
|
2007-09-21 15:20:01 +08:00
|
|
|
parameters.h \
|
2008-09-20 06:54:57 +08:00
|
|
|
plugin.h \
|
2006-08-05 07:10:59 +08:00
|
|
|
readsyms.h \
|
2008-05-29 04:48:16 +08:00
|
|
|
reduced_debug_output.h \
|
2006-09-30 03:58:17 +08:00
|
|
|
reloc.h \
|
2006-11-16 08:38:25 +08:00
|
|
|
reloc-types.h \
|
|
|
|
script-c.h \
|
2008-01-23 09:31:13 +08:00
|
|
|
script-sections.h \
|
|
|
|
script.h \
|
2006-08-19 06:29:20 +08:00
|
|
|
stringpool.h \
|
2006-08-05 07:10:59 +08:00
|
|
|
symtab.h \
|
|
|
|
target.h \
|
2006-09-30 03:58:17 +08:00
|
|
|
target-reloc.h \
|
2006-08-19 06:29:20 +08:00
|
|
|
target-select.h \
|
2009-12-18 00:02:03 +08:00
|
|
|
timer.h \
|
2007-10-08 13:12:59 +08:00
|
|
|
tls.h \
|
2007-12-15 03:00:21 +08:00
|
|
|
token.h \
|
2007-11-22 08:05:51 +08:00
|
|
|
workqueue.h \
|
|
|
|
workqueue-internal.h
|
2006-08-05 07:10:59 +08:00
|
|
|
|
2006-11-15 03:21:05 +08:00
|
|
|
YFILES = \
|
|
|
|
yyscript.y
|
|
|
|
|
2010-02-03 13:36:55 +08:00
|
|
|
DEFFILES = arm-reloc.def
|
|
|
|
|
2006-11-15 03:21:05 +08:00
|
|
|
EXTRA_DIST = yyscript.c yyscript.h
|
2006-08-05 07:10:59 +08:00
|
|
|
|
2007-10-01 07:41:32 +08:00
|
|
|
TARGETSOURCES = \
|
2012-09-16 01:11:28 +08:00
|
|
|
i386.cc x86_64.cc sparc.cc powerpc.cc arm.cc arm-reloc-property.cc tilegx.cc
|
2007-10-01 07:41:32 +08:00
|
|
|
|
|
|
|
ALL_TARGETOBJS = \
|
2009-05-29 08:15:12 +08:00
|
|
|
i386.$(OBJEXT) x86_64.$(OBJEXT) sparc.$(OBJEXT) powerpc.$(OBJEXT) \
|
2012-09-16 01:11:28 +08:00
|
|
|
arm.$(OBJEXT) arm-reloc-property.$(OBJEXT) tilegx.$(OBJEXT)
|
2007-10-01 07:41:32 +08:00
|
|
|
|
2010-02-03 13:36:55 +08:00
|
|
|
libgold_a_SOURCES = $(CCFILES) $(HFILES) $(YFILES) $(DEFFILES)
|
2009-06-24 02:10:42 +08:00
|
|
|
libgold_a_LIBADD = $(LIBOBJS)
|
2006-08-05 07:10:59 +08:00
|
|
|
|
2007-10-01 07:41:32 +08:00
|
|
|
sources_var = main.cc
|
2007-10-04 13:49:04 +08:00
|
|
|
deps_var = $(TARGETOBJS) libgold.a $(LIBIBERTY) $(LIBINTL_DEP)
|
2011-09-23 23:02:32 +08:00
|
|
|
ldadd_var = $(TARGETOBJS) libgold.a $(LIBIBERTY) $(GOLD_LDADD) $(LIBINTL) \
|
2008-09-20 06:54:57 +08:00
|
|
|
$(THREADSLIB) $(LIBDL)
|
2011-09-23 23:02:32 +08:00
|
|
|
ldflags_var = $(GOLD_LDFLAGS)
|
2007-09-23 04:11:12 +08:00
|
|
|
|
|
|
|
ld_new_SOURCES = $(sources_var)
|
2009-06-24 02:10:42 +08:00
|
|
|
ld_new_DEPENDENCIES = $(deps_var)
|
|
|
|
ld_new_LDADD = $(ldadd_var)
|
2011-09-23 23:02:32 +08:00
|
|
|
ld_new_LDFLAGS = $(ldflags_var)
|
2006-08-05 07:10:59 +08:00
|
|
|
|
2007-10-01 07:41:32 +08:00
|
|
|
EXTRA_ld_new_SOURCES = $(TARGETSOURCES)
|
|
|
|
|
2009-11-25 08:10:05 +08:00
|
|
|
incremental_dump_SOURCES = incremental-dump.cc
|
2010-01-12 03:38:22 +08:00
|
|
|
incremental_dump_DEPENDENCIES = $(TARGETOBJS) libgold.a $(LIBIBERTY) \
|
|
|
|
$(LIBINTL_DEP)
|
|
|
|
incremental_dump_LDADD = $(TARGETOBJS) libgold.a $(LIBIBERTY) $(LIBINTL) \
|
2009-11-27 10:05:34 +08:00
|
|
|
$(THREADSLIB) $(LIBDL)
|
2009-11-25 08:10:05 +08:00
|
|
|
|
2012-10-24 10:26:39 +08:00
|
|
|
dwp_SOURCES = dwp.cc
|
|
|
|
dwp_DEPENDENCIES = libgold.a $(LIBIBERTY) $(LIBINTL_DEP)
|
|
|
|
dwp_LDADD = libgold.a $(LIBIBERTY) $(GOLD_LDADD) $(LIBINTL) $(THREADSLIB) \
|
|
|
|
$(LIBDL)
|
|
|
|
dwp_LDFLAGS = $(GOLD_LDFLAGS)
|
|
|
|
|
Make it easy to make --disable-werror the default for both binutils and gdb
The goal of this patch is to provide an easy way to make
--disable-werror the default when building binutils, or the parts
of binutils that need to get built when building GDB. In development
mode, we want to continue making -Werror the default with GCC.
But, when making releases, I think we want to make it as easy as
possible for regular users to successfully build from sources.
GDB already has this kind of feature to turn -Werror as well as
the use of the libmcheck library. As GDB Release Manager, I take
advantage of it to turn those off after having cut the branch.
I'd like to be able to do the same for the binutils bits. And
perhaps Tristan will want to do the same for his releases too
(not sure, binutils builders might be a little savvier than GDB
builders).
This patch introduces a new file, called development.sh, which
just sets a variable called $development. In our development branches
(Eg. "master"), it's set to true. But setting it to false would allow
us to change the default behavior of various development-related
features to be turned off; in this case, it turns off the use of
-Werror by default (use --enable-werror to turn it back on).
bfd/ChangeLog:
* development.sh: New file.
* warning.m4 (AM_BINUTILS_WARNINGS): Source bfd/development.sh.
Make -Werror the default with GCC only if DEVELOPMENT is true.
* Makefile.am (CONFIG_STATUS_DEPENDENCIES): Add
$(srcdir)/development.sh.
* Makefile.in, configure: Regenerate.
binutils/ChangeLog:
* Makefile.am (CONFIG_STATUS_DEPENDENCIES): Add dependency on
bfd's development.sh.
* Makefile.in, configure: Regenerate.
gas/ChangeLog:
* Makefile.am (CONFIG_STATUS_DEPENDENCIES): Add dependency on
bfd's development.sh.
* Makefile.in, configure: Regenerate.
gold/ChangeLog:
* Makefile.am (CONFIG_STATUS_DEPENDENCIES): New.
* Makefile.in, configure: Regenerate.
gprof/ChangeLog:
* Makefile.am (CONFIG_STATUS_DEPENDENCIES): Add dependency on
bfd's development.sh.
* Makefile.in, configure: Regenerate.
ld/ChangeLog:
* Makefile.am (CONFIG_STATUS_DEPENDENCIES): Add dependency on
bfd's development.sh.
* Makefile.in, configure: Regenerate.
opcodes/ChangeLog:
* Makefile.am (CONFIG_STATUS_DEPENDENCIES): Add dependency on
bfd's development.sh.
* Makefile.in, configure: Regenerate.
gdb/ChangeLog:
* development.sh: Delete.
* Makefile.in (config.status): Adjust dependency on development.sh.
* configure.ac: Adjust development.sh source call.
* configure: Regenerate.
gdb/gdbserver/ChangeLog:
* configure.ac: Adjust development.sh source call.
* Makefile.in (config.status): Adjust dependency on development.sh.
* configure: Regenerate.
Tested on x86_64-linux by building two ways: One with DEVELOPMENT
set to true, and one with DEVELOPMENT set to false. In the first
case, I could see the use of -Werror, while it disappeared in
the second case.
2014-05-20 05:46:01 +08:00
|
|
|
CONFIG_STATUS_DEPENDENCIES = $(srcdir)/../bfd/development.sh
|
|
|
|
|
2006-11-15 03:21:05 +08:00
|
|
|
# Use an explicit dependency for the bison generated header file.
|
2008-01-23 10:13:38 +08:00
|
|
|
expression.$(OBJEXT): yyscript.h
|
|
|
|
script-sections.$(OBJEXT): yyscript.h
|
2006-11-15 03:21:05 +08:00
|
|
|
script.$(OBJEXT): yyscript.h
|
|
|
|
|
2006-12-01 07:52:50 +08:00
|
|
|
# We have to build libgold.a before we run the tests.
|
|
|
|
check: libgold.a
|
|
|
|
|
2006-08-05 07:10:59 +08:00
|
|
|
.PHONY: install-exec-local
|
|
|
|
|
|
|
|
install-exec-local: ld-new$(EXEEXT)
|
|
|
|
$(mkinstalldirs) $(DESTDIR)$(bindir) $(DESTDIR)$(tooldir)/bin
|
2010-04-27 22:12:32 +08:00
|
|
|
n=`echo $(installed_linker) | sed '$(transform)'`; \
|
2013-12-11 06:01:01 +08:00
|
|
|
$(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) \
|
|
|
|
ld-new$(EXEEXT) $(DESTDIR)$(bindir)/$${n}$(EXEEXT); \
|
2006-08-05 07:10:59 +08:00
|
|
|
if test "$(bindir)" != "$(tooldir)/bin"; then \
|
2010-04-27 22:12:32 +08:00
|
|
|
rm -f $(DESTDIR)$(tooldir)/bin/$(installed_linker)$(EXEEXT); \
|
|
|
|
ln $(DESTDIR)$(bindir)/$${n}$(EXEEXT) $(DESTDIR)$(tooldir)/bin/$(installed_linker)$(EXEEXT) >/dev/null 2>/dev/null \
|
2013-12-11 06:01:01 +08:00
|
|
|
|| $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) ld-new$(EXEEXT) $(DESTDIR)$(tooldir)/bin/$(installed_linker)$(EXEEXT); \
|
2010-04-27 22:12:32 +08:00
|
|
|
fi; \
|
|
|
|
if test "x$(install_as_default)" = "xyes"; then \
|
2010-04-28 00:05:54 +08:00
|
|
|
ld=`echo ld | sed '$(transform)'`; \
|
|
|
|
rm -f $(DESTDIR)$(bindir)/$${ld}$(EXEEXT); \
|
|
|
|
ln $(DESTDIR)$(bindir)/$${n}$(EXEEXT) $(DESTDIR)$(bindir)/$${ld}$(EXEEXT) >/dev/null 2>/dev/null \
|
2013-12-11 06:01:01 +08:00
|
|
|
|| $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) ld-new$(EXEEXT) $(DESTDIR)$(bindir)/$${ld}$(EXEEXT); \
|
2010-04-27 22:12:32 +08:00
|
|
|
if test "$(bindir)" != "$(tooldir)/bin"; then \
|
|
|
|
rm -f $(DESTDIR)$(tooldir)/bin/ld$(EXEEXT); \
|
|
|
|
ln $(DESTDIR)$(bindir)/$${n}$(EXEEXT) $(DESTDIR)$(tooldir)/bin/ld$(EXEEXT) >/dev/null 2>/dev/null \
|
2013-12-11 06:01:01 +08:00
|
|
|
|| $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) ld-new$(EXEEXT) $(DESTDIR)$(tooldir)/bin/ld$(EXEEXT); \
|
2010-04-27 22:12:32 +08:00
|
|
|
fi; \
|
2006-08-05 07:10:59 +08:00
|
|
|
fi
|
|
|
|
|
|
|
|
# We want install to imply install-info as per GNU standards, despite
|
|
|
|
# the cygnus option.
|
|
|
|
install-data-local: install-info
|
2006-12-01 07:52:50 +08:00
|
|
|
|
2007-10-01 07:41:32 +08:00
|
|
|
POTFILES= $(CCFILES) $(HFILES) $(TARGETSOURCES)
|
2006-12-01 07:52:50 +08:00
|
|
|
|
|
|
|
po/POTFILES.in: @MAINT@ Makefile
|
2008-08-04 14:55:33 +08:00
|
|
|
for f in $(POTFILES); do echo $$f; done | LC_ALL=C sort > tmp \
|
2006-12-01 07:52:50 +08:00
|
|
|
&& mv tmp $(srcdir)/po/POTFILES.in
|
2007-09-23 04:11:12 +08:00
|
|
|
|
|
|
|
# Bootstrap test support. We use ld-new to build ld1, then use ld1 to
|
|
|
|
# build ld2. ld1 and ld2 should be identical. ld-new need not be
|
|
|
|
# identical to ld1, since it was linked with the host linker.
|
|
|
|
|
|
|
|
if GCC
|
|
|
|
if NATIVE_LINKER
|
|
|
|
|
|
|
|
gcctestdir1/ld: ld-new
|
|
|
|
test -d gcctestdir1 || mkdir -p gcctestdir1
|
|
|
|
rm -f gcctestdir1/ld
|
|
|
|
(cd gcctestdir1 && $(LN_S) ../ld-new ld)
|
|
|
|
|
|
|
|
ld1_SOURCES = $(sources_var)
|
|
|
|
ld1_DEPENDENCIES = $(deps_var) gcctestdir1/ld
|
|
|
|
ld1_LDADD = $(ldadd_var)
|
|
|
|
ld1_LDFLAGS = -Bgcctestdir1/
|
|
|
|
|
|
|
|
gcctestdir2/ld: ld1
|
|
|
|
test -d gcctestdir2 || mkdir -p gcctestdir2
|
|
|
|
rm -f gcctestdir2/ld
|
|
|
|
(cd gcctestdir2 && $(LN_S) ../ld1 ld)
|
|
|
|
|
|
|
|
ld2_SOURCES = $(sources_var)
|
|
|
|
ld2_DEPENDENCIES = $(deps_var) gcctestdir2/ld
|
|
|
|
ld2_LDADD = $(ldadd_var)
|
|
|
|
ld2_LDFLAGS = -Bgcctestdir2/
|
|
|
|
|
|
|
|
bootstrap-test: ld2
|
|
|
|
rm -f $@
|
|
|
|
echo "#!/bin/sh" > $@
|
2013-04-27 05:38:57 +08:00
|
|
|
echo "cmp ld1 ld2" >> $@
|
2007-09-23 04:11:12 +08:00
|
|
|
chmod +x $@
|
|
|
|
|
2008-02-07 03:32:32 +08:00
|
|
|
libgold-1-r.o: gcctestdir1/ld libgold.a
|
|
|
|
gcctestdir1/ld -o $@ -r --whole-archive libgold.a
|
|
|
|
|
|
|
|
ld1_r_SOURCES = $(sources_var)
|
|
|
|
ld1_r_DEPENDENCIES = libgold-1-r.o $(deps_var) gcctestdir1/ld
|
|
|
|
ld1_r_LDADD = libgold-1-r.o $(ldadd_var)
|
|
|
|
ld1_r_LDFLAGS = -Bgcctestdir1/
|
|
|
|
|
|
|
|
gcctestdir2-r/ld: ld1-r
|
|
|
|
test -d gcctestdir2-r || mkdir -p gcctestdir2-r
|
|
|
|
rm -f gcctestdir2-r/ld
|
|
|
|
(cd gcctestdir2-r && $(LN_S) ../ld1-r ld)
|
|
|
|
|
|
|
|
libgold-2-r.o: gcctestdir2-r/ld libgold.a
|
|
|
|
gcctestdir2-r/ld -o $@ -r --whole-archive libgold.a
|
|
|
|
|
|
|
|
ld2_r_SOURCES = $(sources_var)
|
|
|
|
ld2_r_DEPENDENCIES = libgold-2-r.o $(deps_var) gcctestdir2-r/ld
|
|
|
|
ld2_r_LDADD = libgold-2-r.o $(ldadd_var)
|
|
|
|
ld2_r_LDFLAGS = -Bgcctestdir2-r/
|
|
|
|
|
|
|
|
bootstrap-test-r: ld2-r
|
|
|
|
rm -f $@
|
|
|
|
echo "#!/bin/sh" > $@
|
2013-04-27 05:38:57 +08:00
|
|
|
echo "cmp ld1-r ld2-r" >> $@
|
2008-02-07 03:32:32 +08:00
|
|
|
chmod +x $@
|
|
|
|
|
|
|
|
check_PROGRAMS = ld1 ld2 ld1-r ld2-r
|
|
|
|
TESTS = bootstrap-test bootstrap-test-r
|
2007-09-23 04:11:12 +08:00
|
|
|
|
2013-04-27 05:38:57 +08:00
|
|
|
# Verify that changing the number of threads doesn't change the
|
|
|
|
# treehash computation, by building ld1 and ld3 the same way except
|
|
|
|
# for the number of threads. However, the build ID should change if
|
|
|
|
# we change the chunk size for --build-id=tree, so ld4 should be
|
|
|
|
# different. We run the latter test even if multithreading is unavailable,
|
|
|
|
# because the treehash can still operate in that mode.
|
|
|
|
check_PROGRAMS += ld4
|
|
|
|
TESTS += bootstrap-test-treehash-chunksize
|
|
|
|
|
|
|
|
gcctestdir3/ld: ld-new
|
|
|
|
test -d gcctestdir3 || mkdir -p gcctestdir3
|
|
|
|
rm -f gcctestdir3/ld
|
|
|
|
(cd gcctestdir3 && $(LN_S) ../ld-new ld)
|
|
|
|
|
|
|
|
ld3_SOURCES = $(sources_var)
|
|
|
|
ld3_DEPENDENCIES = $(deps_var) gcctestdir3/ld
|
|
|
|
ld3_LDADD = $(ldadd_var)
|
|
|
|
ld3_LDFLAGS = -Bgcctestdir3/
|
|
|
|
|
|
|
|
gcctestdir4/ld: ld-new
|
|
|
|
test -d gcctestdir4 || mkdir -p gcctestdir4
|
|
|
|
rm -f gcctestdir4/ld
|
|
|
|
(cd gcctestdir4 && $(LN_S) ../ld-new ld)
|
|
|
|
|
|
|
|
ld4_SOURCES = $(sources_var)
|
|
|
|
ld4_DEPENDENCIES = $(deps_var) gcctestdir4/ld
|
|
|
|
ld4_LDADD = $(ldadd_var)
|
|
|
|
ld4_LDFLAGS = -Bgcctestdir4/
|
|
|
|
|
|
|
|
ld1_LDFLAGS += -Wl,--build-id=tree -Wl,--build-id-chunk-size-for-treehash=12345 -Wl,--build-id-min-file-size-for-treehash=0
|
|
|
|
ld2_LDFLAGS += -Wl,--build-id=tree -Wl,--build-id-chunk-size-for-treehash=12345 -Wl,--build-id-min-file-size-for-treehash=0
|
|
|
|
ld3_LDFLAGS += -Wl,--build-id=tree -Wl,--build-id-chunk-size-for-treehash=12345 -Wl,--build-id-min-file-size-for-treehash=0
|
|
|
|
ld4_LDFLAGS += -Wl,--build-id=tree -Wl,--build-id-chunk-size-for-treehash=12346 -Wl,--build-id-min-file-size-for-treehash=0
|
|
|
|
|
|
|
|
if THREADS
|
|
|
|
|
|
|
|
ld1_LDFLAGS += -Wl,--thread-count=3
|
|
|
|
ld2_LDFLAGS += -Wl,--thread-count=3
|
|
|
|
ld3_LDFLAGS += -Wl,--thread-count=13
|
|
|
|
ld4_LDFLAGS += -Wl,--thread-count=3
|
|
|
|
check_PROGRAMS += ld3
|
|
|
|
TESTS += bootstrap-test-treehash-chunksize
|
|
|
|
|
|
|
|
bootstrap-test-treehash: ld1 ld3
|
|
|
|
rm -f $@
|
|
|
|
echo "#!/bin/sh" > $@
|
|
|
|
echo "cmp ld1 ld3" >> $@
|
|
|
|
chmod +x $@
|
|
|
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
bootstrap-test-treehash-chunksize: ld1 ld4
|
|
|
|
rm -f $@
|
|
|
|
echo "#!/bin/sh" > $@
|
|
|
|
echo "cmp ld1 ld4 | grep ." >> $@
|
|
|
|
chmod +x $@
|
|
|
|
|
2007-09-23 04:11:12 +08:00
|
|
|
endif
|
|
|
|
endif
|