OpenCores
URL https://opencores.org/ocsvn/open8_urisc/open8_urisc/trunk

Subversion Repositories open8_urisc

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /open8_urisc/trunk/gnu/binutils/gold
    from Rev 159 to Rev 163
    Reverse comparison

Rev 159 → Rev 163

/options.cc
198,7 → 198,7
{
char* endptr;
*retval = strtol(arg, &endptr, 0);
if (*endptr != '\0' || retval < 0)
if (*endptr != '\0' || *retval < 0)
gold_fatal(_("%s: invalid option value (expected an integer): %s"),
option_name, arg);
}
1121,33 → 1121,48
program_name);
#endif
 
std::string libpath;
if (this->user_set_Y())
{
std::string s = this->Y();
if (s.compare(0, 2, "P,") == 0)
s.erase(0, 2);
libpath = this->Y();
if (libpath.compare(0, 2, "P,") == 0)
libpath.erase(0, 2);
}
else if (!this->nostdlib())
{
#ifndef NATIVE_LINKER
#define NATIVE_LINKER 0
#endif
const char* p = LIB_PATH;
if (strcmp(p, "::DEFAULT::") != 0)
libpath = p;
else if (NATIVE_LINKER
|| this->user_set_sysroot()
|| *TARGET_SYSTEM_ROOT != '\0')
{
this->add_to_library_path_with_sysroot("/lib");
this->add_to_library_path_with_sysroot("/usr/lib");
}
else
this->add_to_library_path_with_sysroot(TOOLLIBDIR);
}
 
if (!libpath.empty())
{
size_t pos = 0;
size_t next_pos;
do
{
next_pos = s.find(':', pos);
next_pos = libpath.find(':', pos);
size_t len = (next_pos == std::string::npos
? next_pos
: next_pos - pos);
if (len != 0)
this->add_to_library_path_with_sysroot(s.substr(pos, len).c_str());
this->add_to_library_path_with_sysroot(libpath.substr(pos, len));
pos = next_pos + 1;
}
while (next_pos != std::string::npos);
}
else if (!this->nostdlib())
{
// Even if they don't specify it, we add -L /lib and -L /usr/lib.
// FIXME: We should only do this when configured in native mode.
this->add_to_library_path_with_sysroot("/lib");
this->add_to_library_path_with_sysroot("/usr/lib");
}
 
// Parse the contents of -retain-symbols-file into a set.
if (this->retain_symbols_file())
1224,6 → 1239,37
gold_fatal(_("Options --incremental-changed, --incremental-unchanged, "
"--incremental-unknown require the use of --incremental"));
 
// Check for options that are not compatible with incremental linking.
// Where an option can be disabled without seriously changing the semantics
// of the link, we turn the option off; otherwise, we issue a fatal error.
 
if (this->incremental_mode_ != INCREMENTAL_OFF)
{
if (this->relocatable())
gold_fatal(_("incremental linking is not compatible with -r"));
if (this->emit_relocs())
gold_fatal(_("incremental linking is not compatible with "
"--emit-relocs"));
if (this->has_plugins())
gold_fatal(_("incremental linking is not compatible with --plugin"));
if (this->gc_sections())
{
gold_warning(_("ignoring --gc-sections for an incremental link"));
this->set_gc_sections(false);
}
if (this->icf_enabled())
{
gold_warning(_("ignoring --icf for an incremental link"));
this->set_icf_status(ICF_NONE);
}
if (strcmp(this->compress_debug_sections(), "none") != 0)
{
gold_warning(_("ignoring --compress-debug-sections for an "
"incremental link"));
this->set_compress_debug_sections("none");
}
}
 
// FIXME: we can/should be doing a lot more sanity checking here.
}
 
/options.h
543,7 → 543,7
{ }
 
// This is the usual constructor.
Search_directory(const char* name, bool put_in_sysroot)
Search_directory(const std::string& name, bool put_in_sysroot)
: name_(name), put_in_sysroot_(put_in_sysroot), is_in_sysroot_(false)
{
if (this->name_.empty())
771,6 → 771,10
N_("(ARM only) Fix binaries for Cortex-A8 erratum."),
N_("(ARM only) Do not fix binaries for Cortex-A8 erratum."));
 
DEFINE_bool(fix_arm1176, options::TWO_DASHES, '\0', true,
N_("(ARM only) Fix binaries for ARM1176 erratum."),
N_("(ARM only) Do not fix binaries for ARM1176 erratum."));
 
DEFINE_bool(merge_exidx_entries, options::TWO_DASHES, '\0', true,
N_("(ARM only) Merge exidx entries in debuginfo."),
N_("(ARM only) Do not merge exidx entries in debuginfo."));
787,6 → 791,10
DEFINE_bool(g, options::EXACTLY_ONE_DASH, '\0', false,
N_("Ignored"), NULL);
 
DEFINE_bool(gnu_unique, options::TWO_DASHES, '\0', true,
N_("Enable STB_GNU_UNIQUE symbol binding (default)"),
N_("Disable STB_GNU_UNIQUE symbol binding"));
 
DEFINE_string(soname, options::ONE_DASH, 'h', NULL,
N_("Set shared library name"), N_("FILENAME"));
 
1381,6 → 1389,11
bool
section_start(const char* secname, uint64_t* paddr) const;
 
// Return whether any --section-start option was used.
bool
any_section_start() const
{ return !this->section_starts_.empty(); }
 
enum Fix_v4bx
{
// Leave original instruction.
1450,7 → 1463,7
 
// These are called by finalize() to set up the search-path correctly.
void
add_to_library_path_with_sysroot(const char* arg)
add_to_library_path_with_sysroot(const std::string& arg)
{ this->add_search_directory_to_library_path(Search_directory(arg, true)); }
 
// Apply any sysroot to the directory lists.
/Makefile.in
101,7 → 101,9
ld_new_OBJECTS = $(am_ld_new_OBJECTS)
am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) libgold.a $(LIBIBERTY) \
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1)
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
ld_new_LINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(ld_new_LDFLAGS) \
$(LDFLAGS) -o $@
@GCC_TRUE@@NATIVE_LINKER_TRUE@am_ld1_OBJECTS = $(am__objects_4)
ld1_OBJECTS = $(am_ld1_OBJECTS)
ld1_LINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(ld1_LDFLAGS) \
251,6 → 253,8
EXEEXT = @EXEEXT@
GENCAT = @GENCAT@
GMSGFMT = @GMSGFMT@
GOLD_LDADD = @GOLD_LDADD@
GOLD_LDFLAGS = @GOLD_LDFLAGS@
GREP = @GREP@
INCINTL = @INCINTL@
INSTALL = @INSTALL@
273,6 → 277,7
MKINSTALLDIRS = @MKINSTALLDIRS@
MSGFMT = @MSGFMT@
MSGMERGE = @MSGMERGE@
NM = @NM@
NO_WERROR = @NO_WERROR@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
364,7 → 369,7
-I$(srcdir) -I$(srcdir)/../include -I$(srcdir)/../elfcpp \
-DLOCALEDIR="\"$(datadir)/locale\"" \
-DBINDIR="\"$(bindir)\"" -DTOOLBINDIR="\"$(tooldir)/bin\"" \
@INCINTL@
-DTOOLLIBDIR="\"$(tooldir)/lib\"" @INCINTL@
 
LIBIBERTY = ../libiberty/libiberty.a
@PLUGINS_TRUE@LIBDL = -ldl
487,12 → 492,14
libgold_a_LIBADD = $(LIBOBJS)
sources_var = main.cc
deps_var = $(TARGETOBJS) libgold.a $(LIBIBERTY) $(LIBINTL_DEP)
ldadd_var = $(TARGETOBJS) libgold.a $(LIBIBERTY) $(LIBINTL) \
ldadd_var = $(TARGETOBJS) libgold.a $(LIBIBERTY) $(GOLD_LDADD) $(LIBINTL) \
$(THREADSLIB) $(LIBDL)
 
ldflags_var = $(GOLD_LDFLAGS)
ld_new_SOURCES = $(sources_var)
ld_new_DEPENDENCIES = $(deps_var)
ld_new_LDADD = $(ldadd_var)
ld_new_LDFLAGS = $(ldflags_var)
EXTRA_ld_new_SOURCES = $(TARGETSOURCES)
incremental_dump_SOURCES = incremental-dump.cc
incremental_dump_DEPENDENCIES = $(TARGETOBJS) libgold.a $(LIBIBERTY) \
600,7 → 607,7
$(CXXLINK) $(incremental_dump_OBJECTS) $(incremental_dump_LDADD) $(LIBS)
ld-new$(EXEEXT): $(ld_new_OBJECTS) $(ld_new_DEPENDENCIES)
@rm -f ld-new$(EXEEXT)
$(CXXLINK) $(ld_new_OBJECTS) $(ld_new_LDADD) $(LIBS)
$(ld_new_LINK) $(ld_new_OBJECTS) $(ld_new_LDADD) $(LIBS)
ld1$(EXEEXT): $(ld1_OBJECTS) $(ld1_DEPENDENCIES)
@rm -f ld1$(EXEEXT)
$(ld1_LINK) $(ld1_OBJECTS) $(ld1_LDADD) $(LIBS)
/script.h
90,20 → 90,28
// the section address. If RESULT_ALIGNMENT is not NULL, this sets
// *RESULT_ALIGNMENT to the alignment of the value of that alignment
// is larger than *RESULT_ALIGNMENT; this will only be non-zero if
// this is an ALIGN expression.
// this is an ALIGN expression. If IS_SECTION_DOT_ASSIGMENT is true,
// we are evaluating an assignment to dot within an output section,
// and an absolute value should be interpreted as an offset within
// the section.
uint64_t
eval_with_dot(const Symbol_table*, const Layout*, bool check_assertions,
uint64_t dot_value, Output_section* dot_section,
Output_section** result_section, uint64_t* result_alignment);
Output_section** result_section, uint64_t* result_alignment,
bool is_section_dot_assignment);
 
// Return the value of an expression which may or may not be
// permitted to refer to the dot symbol, depending on
// is_dot_available.
// is_dot_available. If IS_SECTION_DOT_ASSIGMENT is true,
// we are evaluating an assignment to dot within an output section,
// and an absolute value should be interpreted as an offset within
// the section.
uint64_t
eval_maybe_dot(const Symbol_table*, const Layout*, bool check_assertions,
bool is_dot_available, uint64_t dot_value,
Output_section* dot_section,
Output_section** result_section, uint64_t* result_alignment);
Output_section** result_section, uint64_t* result_alignment,
bool is_section_dot_assignment);
 
// Print the expression to the FILE. This is for debugging.
virtual void
339,12 → 347,12
finalize_with_dot(Symbol_table*, const Layout*, uint64_t dot_value,
Output_section* dot_section);
 
// Set the symbol value, but only if the value is absolute. This is
// used while processing a SECTIONS clause. We assume that dot is
// an absolute value here. We do not check assertions.
// Set the symbol value, but only if the value is absolute or relative to
// DOT_SECTION. This is used while processing a SECTIONS clause.
// We assume that dot is an absolute value here. We do not check assertions.
void
set_if_absolute(Symbol_table*, const Layout*, bool is_dot_available,
uint64_t dot_value);
uint64_t dot_value, Output_section* dot_section);
 
const std::string&
name() const
/powerpc.cc
1329,7 → 1329,7
rela_dyn->add_local_relative(object, r_sym, r_type,
output_section, data_shndx,
reloc.get_r_offset(),
reloc.get_r_addend());
reloc.get_r_addend(), false);
}
}
break;
1372,7 → 1372,7
object->set_local_got_offset(r_sym, GOT_TYPE_STANDARD, off);
rela_dyn->add_local_relative(object, r_sym,
elfcpp::R_POWERPC_RELATIVE,
got, off, 0);
got, off, 0, false);
}
}
else
/configure.ac
238,6 → 238,22
AC_DEFINE_UNQUOTED(GOLD_DEFAULT_OSABI, $default_osabi,
[Default OSABI code])
 
AC_ARG_WITH(lib-path,
[ --with-lib-path=dir1:dir2... set default LIB_PATH],
[case "$withval" in
yes) LIB_PATH='"/lib:/usr/lib"' ;;
no) LIB_PATH='""' ;;
*) LIB_PATH='"'"$withval"'"' ;;
esac],
[LIB_PATH='"::DEFAULT::"'])
AC_DEFINE_UNQUOTED(LIB_PATH, $LIB_PATH,
[Default library search path])
if test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias"; then
AC_DEFINE(NATIVE_LINKER, 1, [Whether configured as a native linker])
fi
 
AC_CHECK_TOOL(NM, nm)
 
AC_PROG_CC
AC_PROG_CXX
AC_PROG_YACC
374,8 → 390,10
 
dnl On GNU/Linux ifunc is supported by the dynamic linker in glibc
dnl 2.11 or later, and by binutils 2.20.1 or later.
AC_CACHE_CHECK([for glibc >= 2.11], [gold_cv_lib_glibc2_11],
[AC_COMPILE_IFELSE([
AC_CACHE_CHECK([for glibc ifunc support], [gold_cv_lib_glibc_ifunc],
[save_LDFLAGS="$LDFLAGS"
LDFLAGS="$LDFLAGS -static"
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
#include <features.h>
#if !defined __GLIBC__
error
382,10 → 400,23
#elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 11)
error
#endif
__asm__(".type foo, %gnu_indirect_function");
], [gold_cv_lib_glibc2_11=yes], [gold_cv_lib_glibc2_11=no])])
void func (void) { }
void invoke (void);
__asm__(".type invoke, %gnu_indirect_function");
typedef void (*funcptr) (void);
funcptr dispatch (void) __asm__ ("invoke");
funcptr dispatch (void) { return &func; }]],
[[invoke();]])
], [
if ${NM} conftest$EXEEXT | grep "__rela\?_iplt_start" >/dev/null 2>&1; then
gold_cv_lib_glibc_ifunc=both
else
gold_cv_lib_glibc_ifunc=dyn
fi], [gold_cv_lib_glibc_ifunc=no])
LDFLAGS="$save_LDFLAGS"])
 
AM_CONDITIONAL(IFUNC, test "$gold_cv_lib_glibc2_11" = "yes")
AM_CONDITIONAL(IFUNC, test "$gold_cv_lib_glibc_ifunc" != "no")
AM_CONDITIONAL(IFUNC_STATIC, test "$gold_cv_lib_glibc_ifunc" = "both")
 
AM_BINUTILS_WARNINGS
 
392,6 → 423,26
WARN_CXXFLAGS=`echo ${WARN_CFLAGS} | sed -e 's/-Wstrict-prototypes//' -e 's/-Wmissing-prototypes//' -e 's/-Wshadow//'`
AC_SUBST(WARN_CXXFLAGS)
 
AC_ARG_WITH(gold-ldflags,
[ --with-gold-ldflags=FLAGS additional link flags for gold],
[if test "$withval" = "no" -o "$withval" = "yes"; then
GOLD_LDFLAGS=
else
GOLD_LDFLAGS=$withval
fi],
[GOLD_LDFLAGS=])
AC_SUBST(GOLD_LDFLAGS)
 
AC_ARG_WITH(gold-ldadd,
[ --with-gold-ldadd=LIBS additional libraries for gold],
[if test "$withval" = "no" -o "$withval" = "yes"; then
GOLD_LDADD=
else
GOLD_LDADD=$withval
fi],
[GOLD_LDADD=])
AC_SUBST(GOLD_LDADD)
 
dnl Force support for large files by default. This may need to be
dnl host dependent. If build == host, we can check getconf LFS_CFLAGS.
LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
/arm.cc
2075,7 → 2075,8
case elfcpp::R_ARM_TARGET1:
case elfcpp::R_ARM_TARGET2:
gold_unreachable();
// Relocations that write full 32 bits.
// Relocations that write full 32 bits and
// have alignment of 1.
case elfcpp::R_ARM_ABS32:
case elfcpp::R_ARM_REL32:
case elfcpp::R_ARM_SBREL32:
2093,7 → 2094,7
case elfcpp::R_ARM_TLS_LDO32:
case elfcpp::R_ARM_TLS_IE32:
case elfcpp::R_ARM_TLS_LE32:
return Relocatable_relocs::RELOC_ADJUST_FOR_SECTION_4;
return Relocatable_relocs::RELOC_ADJUST_FOR_SECTION_4_UNALIGNED;
default:
// For all other static relocations, return RELOC_SPECIAL.
return Relocatable_relocs::RELOC_SPECIAL;
2177,21 → 2178,11
copy_relocs_(elfcpp::R_ARM_COPY), dynbss_(NULL),
got_mod_index_offset_(-1U), tls_base_symbol_defined_(false),
stub_tables_(), stub_factory_(Stub_factory::get_instance()),
may_use_blx_(false), should_force_pic_veneer_(false),
should_force_pic_veneer_(false),
arm_input_section_map_(), attributes_section_data_(NULL),
fix_cortex_a8_(false), cortex_a8_relocs_info_()
{ }
 
// Whether we can use BLX.
bool
may_use_blx() const
{ return this->may_use_blx_; }
 
// Set use-BLX flag.
void
set_may_use_blx(bool value)
{ this->may_use_blx_ = value; }
// Whether we force PCI branch veneers.
bool
should_force_pic_veneer() const
2253,7 → 2244,37
|| arch == elfcpp::TAG_CPU_ARCH_V7
|| arch == elfcpp::TAG_CPU_ARCH_V7E_M);
}
 
// Whether we have v4T interworking instructions available.
bool
may_use_v4t_interworking() const
{
Object_attribute* attr =
this->get_aeabi_object_attribute(elfcpp::Tag_CPU_arch);
int arch = attr->int_value();
return (arch != elfcpp::TAG_CPU_ARCH_PRE_V4
&& arch != elfcpp::TAG_CPU_ARCH_V4);
}
// Whether we have v5T interworking instructions available.
bool
may_use_v5t_interworking() const
{
Object_attribute* attr =
this->get_aeabi_object_attribute(elfcpp::Tag_CPU_arch);
int arch = attr->int_value();
if (parameters->options().fix_arm1176())
return (arch == elfcpp::TAG_CPU_ARCH_V6T2
|| arch == elfcpp::TAG_CPU_ARCH_V7
|| arch == elfcpp::TAG_CPU_ARCH_V6_M
|| arch == elfcpp::TAG_CPU_ARCH_V6S_M
|| arch == elfcpp::TAG_CPU_ARCH_V7E_M);
else
return (arch != elfcpp::TAG_CPU_ARCH_PRE_V4
&& arch != elfcpp::TAG_CPU_ARCH_V4
&& arch != elfcpp::TAG_CPU_ARCH_V4T);
}
// Process the relocations to determine unreferenced sections for
// garbage collection.
void
2922,8 → 2943,6
Stub_table_list stub_tables_;
// Stub factory.
const Stub_factory &stub_factory_;
// Whether we can use BLX.
bool may_use_blx_;
// Whether we force PIC branch veneers.
bool should_force_pic_veneer_;
// Map for locating Arm_input_sections.
3950,7 → 3969,7
 
// We need a stub if the branch offset is too large or if we need
// to switch mode.
bool may_use_blx = arm_target->may_use_blx();
bool may_use_blx = arm_target->may_use_v5t_interworking();
Reloc_stub* stub = NULL;
 
if (!parameters->options().relocatable()
4081,7 → 4100,7
Arm_address branch_target = psymval->value(object, addend);
 
// For BLX, bit 1 of target address comes from bit 1 of base address.
bool may_use_blx = arm_target->may_use_blx();
bool may_use_blx = arm_target->may_use_v5t_interworking();
if (thumb_bit == 0 && may_use_blx)
branch_target = utils::bit_select(branch_target, address, 0x2);
 
4464,7 → 4483,7
{
const Target_arm<true>* big_endian_target =
Target_arm<true>::default_target();
may_use_blx = big_endian_target->may_use_blx();
may_use_blx = big_endian_target->may_use_v5t_interworking();
should_force_pic_veneer = big_endian_target->should_force_pic_veneer();
thumb2 = big_endian_target->using_thumb2();
thumb_only = big_endian_target->using_thumb_only();
4473,7 → 4492,7
{
const Target_arm<false>* little_endian_target =
Target_arm<false>::default_target();
may_use_blx = little_endian_target->may_use_blx();
may_use_blx = little_endian_target->may_use_v5t_interworking();
should_force_pic_veneer = little_endian_target->should_force_pic_veneer();
thumb2 = little_endian_target->using_thumb2();
thumb_only = little_endian_target->using_thumb_only();
8604,12 → 8623,8
if (this->attributes_section_data_ == NULL)
this->attributes_section_data_ = new Attributes_section_data(NULL, 0);
 
// Check BLX use.
const Object_attribute* cpu_arch_attr =
this->get_aeabi_object_attribute(elfcpp::Tag_CPU_arch);
if (cpu_arch_attr->int_value() > elfcpp::TAG_CPU_ARCH_V4)
this->set_may_use_blx(true);
// Check if we need to use Cortex-A8 workaround.
if (parameters->options().user_set_fix_cortex_a8())
this->fix_cortex_a8_ = parameters->options().fix_cortex_a8();
8630,7 → 8645,7
// The V4BX interworking stub contains BX instruction,
// which is not specified for some profiles.
if (this->fix_v4bx() == General_options::FIX_V4BX_INTERWORKING
&& !this->may_use_blx())
&& !this->may_use_v4t_interworking())
gold_error(_("unable to provide V4BX reloc interworking fix up; "
"the target profile does not support BX instruction"));
 
9333,7 → 9348,7
// Relocate the field with the PC relative offset of the pair of
// GOT entries.
RelocFuncs::pcrel32(view, got_entry, address);
RelocFuncs::pcrel32_unaligned(view, got_entry, address);
return ArmRelocFuncs::STATUS_OKAY;
}
}
9352,13 → 9367,13
 
// Relocate the field with the PC relative offset of the pair of
// GOT entries.
RelocFuncs::pcrel32(view, got_entry, address);
RelocFuncs::pcrel32_unaligned(view, got_entry, address);
return ArmRelocFuncs::STATUS_OKAY;
}
break;
 
case elfcpp::R_ARM_TLS_LDO32: // Alternate local-dynamic
RelocFuncs::rel32(view, value);
RelocFuncs::rel32_unaligned(view, value);
return ArmRelocFuncs::STATUS_OKAY;
 
case elfcpp::R_ARM_TLS_IE32: // Initial-exec
9387,7 → 9402,7
target->got_plt_section()->address() + got_offset;
 
// Relocate the field with the PC relative offset of the GOT entry.
RelocFuncs::pcrel32(view, got_entry, address);
RelocFuncs::pcrel32_unaligned(view, got_entry, address);
return ArmRelocFuncs::STATUS_OKAY;
}
break;
9403,7 → 9418,7
// need to add TCB size to the offset.
Arm_address aligned_tcb_size =
align_address(ARM_TCB_SIZE, tls_segment->maximum_alignment());
RelocFuncs::rel32(view, value + aligned_tcb_size);
RelocFuncs::rel32_unaligned(view, value + aligned_tcb_size);
 
}
return ArmRelocFuncs::STATUS_OKAY;
9993,7 → 10008,10
off_t offset, const elfcpp::Ehdr<32, big_endian>& ehdr)
{
int et = ehdr.get_e_type();
if (et == elfcpp::ET_REL)
// ET_EXEC files are valid input for --just-symbols/-R,
// and we treat them as relocatable objects.
if (et == elfcpp::ET_REL
|| (et == elfcpp::ET_EXEC && input_file->just_symbols()))
{
Arm_relobj<big_endian>* obj =
new Arm_relobj<big_endian>(name, input_file, offset, ehdr);
11797,7 → 11815,7
// an ARM instruction. If we were not making a stub,
// the BL would have been converted to a BLX. Use the
// BLX stub instead in that case.
if (this->may_use_blx() && force_target_arm
if (this->may_use_v5t_interworking() && force_target_arm
&& stub_type == arm_stub_a8_veneer_bl)
{
stub_type = arm_stub_a8_veneer_blx;
/timer.cc
49,6 → 49,15
this->get_time(&this->start_time_);
}
 
// Record the time used by pass N (0 <= N <= 2).
void
Timer::stamp(int n)
{
gold_assert(n >= 0 && n <= 2);
TimeStats& thispass = this->pass_times_[n];
this->get_time(&thispass);
}
 
#if HAVE_SYSCONF && defined _SC_CLK_TCK
# define TICKS_PER_SECOND sysconf (_SC_CLK_TCK) /* POSIX 1003.1-1996 */
#else
106,4 → 115,17
return delta;
}
 
// Return the stats for pass N (0 <= N <= 2).
Timer::TimeStats
Timer::get_pass_time(int n)
{
gold_assert(n >= 0 && n <= 2);
TimeStats thispass = this->pass_times_[n];
TimeStats& lastpass = n > 0 ? this->pass_times_[n-1] : this->start_time_;
thispass.wall -= lastpass.wall;
thispass.user -= lastpass.user;
thispass.sys -= lastpass.sys;
return thispass;
}
 
}
/main.cc
165,7 → 165,10
 
Timer timer;
if (command_line.options().stats())
timer.start();
{
timer.start();
set_parameters_timer(&timer);
}
 
// Store some options in the globally accessible parameters.
set_parameters_options(&command_line.options());
252,8 → 255,33
 
if (command_line.options().stats())
{
Timer::TimeStats elapsed = timer.get_elapsed_time();
timer.stamp(2);
Timer::TimeStats elapsed = timer.get_pass_time(0);
fprintf(stderr,
_("%s: initial tasks run time: " \
"(user: %ld.%06ld sys: %ld.%06ld wall: %ld.%06ld)\n"),
program_name,
elapsed.user / 1000, (elapsed.user % 1000) * 1000,
elapsed.sys / 1000, (elapsed.sys % 1000) * 1000,
elapsed.wall / 1000, (elapsed.wall % 1000) * 1000);
elapsed = timer.get_pass_time(1);
fprintf(stderr,
_("%s: middle tasks run time: " \
"(user: %ld.%06ld sys: %ld.%06ld wall: %ld.%06ld)\n"),
program_name,
elapsed.user / 1000, (elapsed.user % 1000) * 1000,
elapsed.sys / 1000, (elapsed.sys % 1000) * 1000,
elapsed.wall / 1000, (elapsed.wall % 1000) * 1000);
elapsed = timer.get_pass_time(2);
fprintf(stderr,
_("%s: final tasks run time: " \
"(user: %ld.%06ld sys: %ld.%06ld wall: %ld.%06ld)\n"),
program_name,
elapsed.user / 1000, (elapsed.user % 1000) * 1000,
elapsed.sys / 1000, (elapsed.sys % 1000) * 1000,
elapsed.wall / 1000, (elapsed.wall % 1000) * 1000);
elapsed = timer.get_elapsed_time();
fprintf(stderr,
_("%s: total run time: " \
"(user: %ld.%06ld sys: %ld.%06ld wall: %ld.%06ld)\n"),
program_name,
/gold.cc
45,6 → 45,7
#include "gc.h"
#include "icf.h"
#include "incremental.h"
#include "timer.h"
 
namespace gold
{
197,46 → 198,29
// For incremental links, the base output file.
Incremental_binary* ibase = NULL;
 
if (parameters->incremental())
if (parameters->incremental_update())
{
if (options.relocatable())
gold_error(_("incremental linking is incompatible with -r"));
if (options.emit_relocs())
gold_error(_("incremental linking is incompatible with --emit-relocs"));
if (options.gc_sections())
gold_error(_("incremental linking is incompatible with --gc-sections"));
if (options.icf_enabled())
gold_error(_("incremental linking is incompatible with --icf"));
if (options.has_plugins())
gold_error(_("incremental linking is incompatible with --plugin"));
if (strcmp(options.compress_debug_sections(), "none") != 0)
gold_error(_("incremental linking is incompatible with "
"--compress-debug-sections"));
 
if (parameters->incremental_update())
Output_file* of = new Output_file(options.output_file_name());
if (of->open_base_file(options.incremental_base(), true))
{
Output_file* of = new Output_file(options.output_file_name());
if (of->open_base_file(options.incremental_base(), true))
ibase = open_incremental_binary(of);
if (ibase != NULL
&& ibase->check_inputs(cmdline, layout->incremental_inputs()))
ibase->init_layout(layout);
else
{
ibase = open_incremental_binary(of);
if (ibase != NULL
&& ibase->check_inputs(cmdline, layout->incremental_inputs()))
ibase->init_layout(layout);
else
{
delete ibase;
ibase = NULL;
of->close();
}
delete ibase;
ibase = NULL;
of->close();
}
if (ibase == NULL)
{
if (set_parameters_incremental_full())
gold_info(_("linking with --incremental-full"));
else
gold_fallback(_("restart link with --incremental-full"));
}
}
if (ibase == NULL)
{
if (set_parameters_incremental_full())
gold_info(_("linking with --incremental-full"));
else
gold_fallback(_("restart link with --incremental-full"));
}
}
 
// Read the input files. We have to add the symbols to the symbol
504,6 → 488,10
Workqueue* workqueue,
Mapfile* mapfile)
{
Timer* timer = parameters->timer();
if (timer != NULL)
timer->stamp(0);
 
// Add any symbols named with -u options to the symbol table.
symtab->add_undefined_symbols_from_command_line(layout);
 
556,6 → 544,20
}
}
 
/* If plugins have specified a section order, re-arrange input sections
according to a specified section order. If --section-ordering-file is
also specified, do not do anything here. */
if (parameters->options().has_plugins()
&& layout->is_section_ordering_specified()
&& !parameters->options().section_ordering_file ())
{
for (Layout::Section_list::const_iterator p
= layout->section_list().begin();
p != layout->section_list().end();
++p)
(*p)->update_section_layout(layout->get_section_order_map());
}
 
// Layout deferred objects due to plugins.
if (parameters->options().has_plugins())
{
789,6 → 791,10
Workqueue* workqueue,
Output_file* of)
{
Timer* timer = parameters->timer();
if (timer != NULL)
timer->stamp(1);
 
int thread_count = options.thread_count_final();
if (thread_count == 0)
thread_count = std::max(2, input_objects->number_of_input_objects());
/config.in
165,6 → 165,12
/* Define to 1 if you have the <zlib.h> header file. */
#undef HAVE_ZLIB_H
 
/* Default library search path */
#undef LIB_PATH
 
/* Whether configured as a native linker */
#undef NATIVE_LINKER
 
/* Name of package */
#undef PACKAGE
 
/target-reloc.h
669,6 → 669,7
case Relocatable_relocs::RELOC_ADJUST_FOR_SECTION_2:
case Relocatable_relocs::RELOC_ADJUST_FOR_SECTION_4:
case Relocatable_relocs::RELOC_ADJUST_FOR_SECTION_8:
case Relocatable_relocs::RELOC_ADJUST_FOR_SECTION_4_UNALIGNED:
{
// We are adjusting a section symbol. We need to find
// the symbol table index of the section symbol for
790,6 → 791,12
psymval);
break;
 
case Relocatable_relocs::RELOC_ADJUST_FOR_SECTION_4_UNALIGNED:
Relocate_functions<size, big_endian>::rel32_unaligned(padd,
object,
psymval);
break;
 
default:
gold_unreachable();
}
/expression.cc
77,7 → 77,7
bool check_assertions)
{
return this->eval_maybe_dot(symtab, layout, check_assertions,
false, 0, NULL, NULL, NULL);
false, 0, NULL, NULL, NULL, false);
}
 
// Evaluate an expression which may refer to the dot symbol.
87,11 → 87,13
bool check_assertions, uint64_t dot_value,
Output_section* dot_section,
Output_section** result_section_pointer,
uint64_t* result_alignment_pointer)
uint64_t* result_alignment_pointer,
bool is_section_dot_assignment)
{
return this->eval_maybe_dot(symtab, layout, check_assertions, true,
dot_value, dot_section, result_section_pointer,
result_alignment_pointer);
result_alignment_pointer,
is_section_dot_assignment);
}
 
// Evaluate an expression which may or may not refer to the dot
102,7 → 104,8
bool check_assertions, bool is_dot_available,
uint64_t dot_value, Output_section* dot_section,
Output_section** result_section_pointer,
uint64_t* result_alignment_pointer)
uint64_t* result_alignment_pointer,
bool is_section_dot_assignment)
{
Expression_eval_info eei;
eei.symtab = symtab;
113,7 → 116,7
eei.dot_section = dot_section;
 
// We assume the value is absolute, and only set this to a section
// if we find a section relative reference.
// if we find a section-relative reference.
if (result_section_pointer != NULL)
*result_section_pointer = NULL;
eei.result_section_pointer = result_section_pointer;
120,7 → 123,17
 
eei.result_alignment_pointer = result_alignment_pointer;
 
return this->value(&eei);
uint64_t val = this->value(&eei);
 
// If this is an assignment to dot within a section, and the value
// is absolute, treat it as a section-relative offset.
if (is_section_dot_assignment && *result_section_pointer == NULL)
{
gold_assert(dot_section != NULL);
val += dot_section->address();
*result_section_pointer = dot_section;
}
return val;
}
 
// A number.
257,7 → 270,8
eei->dot_value,
eei->dot_section,
arg_section_pointer,
eei->result_alignment_pointer);
eei->result_alignment_pointer,
false);
}
 
void
336,7 → 350,8
eei->dot_value,
eei->dot_section,
section_pointer,
alignment_pointer);
alignment_pointer,
false);
}
 
uint64_t
350,7 → 365,8
eei->dot_value,
eei->dot_section,
section_pointer,
alignment_pointer);
alignment_pointer,
false);
}
 
void
500,7 → 516,8
eei->dot_value,
eei->dot_section,
section_pointer,
NULL);
NULL,
false);
}
 
uint64_t
514,7 → 531,8
eei->dot_value,
eei->dot_section,
section_pointer,
alignment_pointer);
alignment_pointer,
false);
}
 
uint64_t
528,7 → 546,8
eei->dot_value,
eei->dot_section,
section_pointer,
alignment_pointer);
alignment_pointer,
false);
}
 
void
/incremental.cc
161,6 → 161,22
va_end(args);
}
 
// Return TRUE if a section of type SH_TYPE can be updated in place
// during an incremental update. We can update sections of type PROGBITS,
// NOBITS, INIT_ARRAY, FINI_ARRAY, PREINIT_ARRAY, and NOTE. All others
// will be regenerated.
 
bool
can_incremental_update(unsigned int sh_type)
{
return (sh_type == elfcpp::SHT_PROGBITS
|| sh_type == elfcpp::SHT_NOBITS
|| sh_type == elfcpp::SHT_INIT_ARRAY
|| sh_type == elfcpp::SHT_FINI_ARRAY
|| sh_type == elfcpp::SHT_PREINIT_ARRAY
|| sh_type == elfcpp::SHT_NOTE);
}
 
// Find the .gnu_incremental_inputs section and related sections.
 
template<int size, bool big_endian>
669,7 → 685,7
gold_assert(plt_desc >= first_global && plt_desc < symtab_count);
Symbol* sym = this->global_symbol(plt_desc - first_global);
// Add the PLT entry only if the symbol is still referenced.
if (sym->in_reg())
if (sym != NULL && sym->in_reg())
{
gold_debug(DEBUG_INCREMENTAL,
"PLT entry %d: %s",
1950,8 → 1966,9
input_reader_(ibase->inputs_reader().input_file(input_file_index)),
local_symbol_count_(0), output_local_dynsym_count_(0),
local_symbol_index_(0), local_symbol_offset_(0), local_dynsym_offset_(0),
symbols_(), incr_reloc_offset_(-1U), incr_reloc_count_(0),
incr_reloc_output_index_(0), incr_relocs_(NULL), local_symbols_()
symbols_(), defined_count_(0), incr_reloc_offset_(-1U),
incr_reloc_count_(0), incr_reloc_output_index_(0), incr_relocs_(NULL),
local_symbols_()
{
if (this->input_reader_.is_in_system_directory())
this->set_is_in_system_directory();
2008,7 → 2025,9
this->error(_("COMDAT group has no signature"));
bool keep = layout->find_or_add_kept_section(signature, this, i, true,
true, NULL);
if (!keep)
if (keep)
incremental_inputs->report_comdat_group(this, signature);
else
this->error(_("COMDAT group %s included twice in incremental link"),
signature);
}
2102,6 → 2121,9
 
Symbol* res = symtab->add_from_incrobj(this, name, NULL, &sym);
 
if (shndx != elfcpp::SHN_UNDEF)
++this->defined_count_;
 
// If this is a linker-defined symbol that hasn't yet been defined,
// define it now.
if (input_shndx == -1U && !res->is_defined())
2265,9 → 2287,21
template<int size, bool big_endian>
void
Sized_relobj_incr<size, big_endian>::do_get_global_symbol_counts(
const Symbol_table*, size_t*, size_t*) const
const Symbol_table*,
size_t* defined,
size_t* used) const
{
gold_unreachable();
*defined = this->defined_count_;
size_t count = 0;
for (typename Symbols::const_iterator p = this->symbols_.begin();
p != this->symbols_.end();
++p)
if (*p != NULL
&& (*p)->source() == Symbol::FROM_OBJECT
&& (*p)->object() == this
&& (*p)->is_defined())
++count;
*used = count;
}
 
// Read the relocs.
2561,7 → 2595,7
: Dynobj(name, NULL), ibase_(ibase),
input_file_index_(input_file_index),
input_reader_(ibase->inputs_reader().input_file(input_file_index)),
symbols_()
symbols_(), defined_count_(0)
{
if (this->input_reader_.is_in_system_directory())
this->set_is_in_system_directory();
2659,6 → 2693,7
// is meaningless, as long as it's not SHN_UNDEF.
shndx = 1;
v = gsym.get_st_value();
++this->defined_count_;
}
 
osym.put_st_name(0);
2827,9 → 2862,22
template<int size, bool big_endian>
void
Sized_incr_dynobj<size, big_endian>::do_get_global_symbol_counts(
const Symbol_table*, size_t*, size_t*) const
const Symbol_table*,
size_t* defined,
size_t* used) const
{
gold_unreachable();
*defined = this->defined_count_;
size_t count = 0;
for (typename Symbols::const_iterator p = this->symbols_.begin();
p != this->symbols_.end();
++p)
if (*p != NULL
&& (*p)->source() == Symbol::FROM_OBJECT
&& (*p)->object() == this
&& (*p)->is_defined()
&& (*p)->dynsym_index() != -1U)
++count;
*used = count;
}
 
// Allocate an incremental object of the appropriate size and endianness.
/parameters.cc
64,7 → 64,7
// Class Parameters.
 
Parameters::Parameters()
: errors_(NULL), options_(NULL), target_(NULL),
: errors_(NULL), timer_(NULL), options_(NULL), target_(NULL),
doing_static_link_valid_(false), doing_static_link_(false),
debug_(0), incremental_mode_(General_options::INCREMENTAL_OFF),
set_parameters_target_once_(&set_parameters_target_once)
79,6 → 79,13
}
 
void
Parameters::set_timer(Timer* timer)
{
gold_assert(this->timer_ == NULL);
this->timer_ = timer;
}
 
void
Parameters::set_options(const General_options* options)
{
gold_assert(!this->options_valid());
270,6 → 277,10
{ static_parameters.set_errors(errors); }
 
void
set_parameters_timer(Timer* timer)
{ static_parameters.set_timer(timer); }
 
void
set_parameters_options(const General_options* options)
{ static_parameters.set_options(options); }
 
/ChangeLog
1,3 → 1,383
2011-11-11 Sterling Augustine <saugustine@google.com>
 
* yyscript.y (section_cmd): Add support for INCLUDE directive.
(file_or_sections_cmd): Likewise.
 
2011-11-11 Doug Kwan <dougkwan@google.com>
 
* arm.cc (Target_arm::do_make_elf_object): Allow executable also
if --just-symbols is given.
 
2011-11-10 Doug Kwan <dougkwan@google.com>
 
PR gold/13362
* arm.cc (Target_arm::Relocate::relocate_tls): Do unaligned accesses
when processing data relocs.
* reloc.h (Relocate_functions::rel_unaligned): New method.
(Relocate_functions::pcrel_unaligned): Ditto.
(Relocate_functions::rel32_unaligned): Ditto.
(Relocate_functions::pcrel32_unaligned): Ditto.
 
2011-11-09 Doug Kwan <dougkwan@google.com>
 
PR gold/13362
* arm.cc (Arm_scan_relocatable_relocs::Default_scan_relocatable_relocs):
Use unaligned 4-byte relocs for static 32-bit data as required by EABI.
* reloc.h (Relocatable_relocs::Reloc_strategy): New enum
RELOC_ADJUST_FOR_SECTION_4_UNALIGNED.
(Relocate_functions::rel_unaligned): New.
(Relocate_functions::rel32_unaligned): New.
* target-reloc.h (relocate_for_relocatable): Add code to handle
RELOC_ADJUST_FOR_SECTION_4_UNALIGNED.
* testsuite/Makefile.am (arm_unaligned_reloc_r.stdout,
arm_unaligned_reloc_r): New targets.
* testsuite/Makefile.in: Regenerate.
* arm_unaligned_reloc.sh: Check unaligned relocs in relocatable
linking.
 
2011-11-02 Ian Lance Taylor <iant@google.com>
 
* configure.ac: Add --with-lib-path option. Define LIB_PATH and
NATIVE_LINKER.
* Makefile.am (AM_CPPFLAGS): Define TOOLLIBDIR.
* options.cc (General_options::finalize): Use library search path
from configure script if specified. If not native and no sysroot,
only search TOOLLIBDIR.
* options.h (Search_directory::Search_directory): Change name to
const std::string&.
(General_options::add_to_library_path_with_sysroot): Change arg to
const std::string&.
* configure, Makefile.in, config.in: Rebuild.
 
2011-11-02 Matthew Gretton-Dann <matthew.gretton-dann@arm.com>
 
* arm.cc (Target_arm::may_use_v5t_interworking): Check whether
we are working around the ARM1176 Erratum.
* options.h (General_options::fix_arm1176): Add option.
* testsuite/Makefile.am: Add testcases, and keep current ones
working.
* testsuite/Makefile.in: Regenerate.
* testsuite/arm_fix_1176.s: New file.
* testsuite/arm_fix_1176.sh: Likewise.
 
2011-11-02 Matthew Gretton-Dann <matthew.gretton-dann@arm.com>
 
* arm.cc (Target_arm::Target_arm): Remove initialisation of
may_use_blx_.
(Target_arm::may_use_blx): Remove method.
(Target_arm::set_may_use_blx): Likewise.
(Target_arm::may_use_v4t_interworking): New method.
(Target_arm::may_use_v5t_interworking): Likewise.
(Target_arm::may_use_blx_): Remove member variable.
(Arm_relocate_functions::arm_branch_common): Check for v5T
interworking.
(Arm_relocate_functions::thumb_branch_common): Likewise.
(Reloc_stub::stub_type_for_reloc): Likewise.
(Target_arm::do_finalize_sections): Correct interworking checks.
* testsuite/Makefile.am: Add new tests.
* testsuite/Makefile.in: Regenerate.
* testsuite/arm_farcall_arm_arm.s: New test.
* testsuite/arm_farcall_arm_arm.sh: Likewise.
* testsuite/arm_farcall_arm_thumb.s: Likewise.
* testsuite/arm_farcall_arm_thumb.sh: Likewise.
* testsuite/arm_farcall_thumb_arm.s: Likewise.
* testsuite/arm_farcall_thumb_arm.sh: Likewise.
* testsuite/arm_farcall_thumb_thumb.s: Likewise.
* testsuite/arm_farcall_thumb_thumb.sh: Likewise.
 
2011-10-31 Cary Coutant <ccoutant@google.com>
 
PR gold/13023
* expression.cc (Expression::eval_with_dot): Add
is_section_dot_assignment parameter.
(Expression::eval_maybe_dot): Likewise. Adjust value when rhs is
absolute and assigning to dot within a section.
* script-sections.cc
(Output_section_element_assignment::set_section_addresses): Pass
dot_section to set_if_absolute.
(Output_section_element_dot_assignment::finalize_symbols): Pass TRUE
as is_section_dot_assignment flag to eval_with_dot.
(Output_section_element_dot_assignment::set_section_addresses):
Likewise.
* script.cc (Symbol_assignment::set_if_absolute): Add dot_section
parameter. Also set value if relative to dot_section; set the
symbol's output_section.
* script.h (Expression::eval_with_dot): Add is_section_dot_assignment
parameter. Adjust all callers.
(Expression::eval_maybe_dot): Likewise.
(Symbol_assignment::set_if_absolute): Add dot_section parameter.
Adjust all callers.
* testsuite/script_test_2.t: Test assignment of an absolute value
to dot within an output section element.
 
2011-10-31 Cary Coutant <ccoutant@google.com>
 
* options.h (class General_options): Add --[no-]gnu-unique options.
* symtab.cc (Symbol_table::sized_write_globals): Convert
STB_GNU_UNIQUE to STB_GLOBAL if --no-gnu-unique.
 
2011-10-31 Cary Coutant <ccoutant@google.com>
 
PR gold/13359
* i386.cc (Target_i386::Relocate::relocate_tls): Remove
unnecessary assertion.
* x86_64.cc (Target_x86_64::Relocate::relocate_tls): Likewise.
 
2011-10-31 Sriraman Tallam <tmsriram@google.com>
 
* symtab.h (Symbol_table::gc_mark_symbol_for_shlib): Rename to
gc_mark_symbol.
* symtab.cc (Symbol_table::gc_mark_symbol_for_shlib): Rename to
gc_mark_symbol.
Change to just keep the section associated with symbol.
(Symbol_table::add_from_relobj): Mark symbols as not garbage when
they are externally visible and --export-dynamic is turned on.
(Symbol_table::gc_mark_dyn_syms): Call gc_mark_symbol.
 
2011-10-19 Ian Lance Taylor <iant@google.com>
 
PR gold/13163
* script-sections.cc
(Output_section_element_dot_assignment::needs_output_section): New
function.
 
2011-10-19 Ian Lance Taylor <iant@google.com>
 
PR gold/13204
* layout.cc (Layout::segment_precedes): Don't assert failure if a
--section-start option was seen.
* options.h (General_options::any_section_start): New function.
 
2011-10-18 David S. Miller <davem@davemloft.net>
 
PR binutils/13301
* sparc.cc (Target_sparc::Relocate::reloc_adjust_addr_): New
member to track relocation locations that have moved during TLS
reloc optimizations.
(Target_sparc::Relocate::Relocate): Initialize to NULL.
(Target_sparc::Relocate::relocate): Adjust view down by 4
bytes if it matches reloc_adjust_addr_.
(Target_sparc::Relocate::relocate_tls): Always move the
__tls_get_addr call delay slot instruction forward 4 bytes when
performing relaxation.
 
2011-10-18 Cary Coutant <ccoutant@google.com>
 
* output.cc (posix_fallocate): Return 0 on success, errno on failure.
(Output_file::map_no_anonymous): Check for non-zero
return code from posix_fallocate.
 
2011-10-17 Cary Coutant <ccoutant@google.com>
 
PR gold/13245
* plugin.cc (is_visible_from_outside): Check for symbols
referenced from dynamic objects.
* resolve.cc (Symbol_table::resolve): Don't count references
from dynamic objects as references from real ELF files.
* testsuite/plugin_test_2.sh: Adjust expected result.
 
2011-10-17 Cary Coutant <ccoutant@google.com>
 
* gold.cc: Include timer.h.
(queue_middle_tasks): Stamp time.
(queue_final_tasks): Likewise.
* main.cc (main): Store timer in parameters. Print timers
for each pass.
* parameters.cc (Parameters::Parameters): Initialize timer_.
(Parameters::set_timer): New function.
(set_parameters_timer): New function.
* parameters.h (Parameters::set_timer): New function.
(Parameters::timer): New function.
(Parameters::timer_): New data member.
(set_parameters_timer): New function.
* timer.cc (Timer::stamp): New function.
(Timer::get_pass_time): New function.
* timer.h (Timer::stamp): New function.
(Timer::get_pass_time): New function.
(Timer::pass_times_): New data member.
 
2011-10-17 Cary Coutant <ccoutant@google.com>
 
* readsyms.cc (Read_symbols::run): Don't queue an unblocker
task for members of lib groups.
 
2011-10-17 Cary Coutant <ccoutant@google.com>
 
PR gold/13288
* fileread.cc (File_read::find_view): Add assert.
(File_read::make_view): Move bounds check (replace with assert)...
(File_read::find_or_make_view): ... to here.
 
2011-10-12 Cary Coutant <ccoutant@google.com>
 
* output.cc (Output_file::open_base_file): Handle case where
::read returns less than requested size.
 
2011-10-10 Cary Coutant <ccoutant@google.com>
 
* incremental.cc (Sized_relobj_incr::Sized_relobj_incr):
Initialize defined_count_.
(Sized_relobj_incr::do_add_symbols): Count defined symbols.
(Sized_relobj_incr::do_get_global_symbol_counts): Rewrite.
(Sized_incr_dynobj::Sized_incr_dynobj): Initialize defined_count_.
(Sized_incr_dynobj::do_add_symbols): Count defined symbols.
(Sized_incr_dynobj::do_get_global_symbol_counts): Rewrite.
* incremental.h (Sized_relobj_incr::defined_count_): New data
member.
(Sized_incr_dynobj::defined_count_): New data member.
* plugin.cc (Sized_pluginobj::do_get_global_symbol_counts):
Return zeroes instead of internal error.
 
2011-10-10 Cary Coutant <ccoutant@google.com>
 
PR gold/13249
* output.cc (Output_reloc::Output_reloc): Add use_plt_offset flag.
(Output_reloc::symbol_value): Return PLT offset if flag is set.
* output.h (class Output_reloc): Add use_plt_offset flag.
(Output_reloc::type_): Adjust size of bit field.
(Output_reloc::use_plt_offset_): New bit field.
(class Output_data_reloc): Adjust all calls to Output_reloc_type.
(Output_data_reloc::add_local_relative): (RELA only) Add use_plt_offset
flag. Adjust all callers.
* x86_64.cc (Target_x86_64::Scan::local): Check for IFUNC when
creating RELATIVE relocations.
 
2011-10-10 Nick Clifton <nickc@redhat.com>
 
* po/es.po: Updated Spanish translation.
* po/fi.po: Updated Finnish translation.
 
2011-10-03 Diego Novillo <dnovillo@google.com>
 
* options.cc (parse_uint): Fix dereference of RETVAL.
 
2011-09-29 Sriraman Tallam <tmsriram@google.com>
 
* layout.h (section_order_map_): New member.
(get_section_order_map): New member function.
* output.cc (Output_section::add_input_section): Check for patterns
only when --section-ordering-file is specified.
* gold.cc (queue_middle_tasks): Delay updating order of sections till
output_sections have been formed.
* layout.cc (Layout_Layout): Initialize section_order_map_.
* plugin.cc (update_section_order): Store order in order_map. Do not
update the order.
* testsuite/Makefile.am: Add test case for plugin_final_layout.
* testsuite/Makefile.in: Regenerate.
* testsuite/plugin_section_order.c: New file.
* testsuite/plugin_final_layout.cc: New file.
* testsuite/plugin_final_layout.sh: New file.
 
2011-09-29 Cary Coutant <ccoutant@google.com>
 
* incremental.cc (Sized_incremental_binary::do_process_got_plt):
Check for NULL.
* symtab.cc (Symbol_table::add_from_relobj): Ignore version
symbols during incremental update.
(Symbol_table::add_from_dynobj): Likewise.
 
2011-09-27 Viktor Kutuzov <vkutuzov@accesssoftek.com>
Ian Lance Taylor <iant@google.com>
 
* symtab.cc (Symbol_table::define_special_symbol): Always
canonicalize version string.
 
2011-09-26 Cary Coutant <ccoutant@google.com>
 
* gold.cc (queue_initial_tasks): Move option checks ...
* options.cc (General_options::finalize): ... to here. Disable
some options; make others fatal.
 
2011-09-26 Cary Coutant <ccoutant@google.com>
 
gcc PR lto/47247
* plugin.cc (get_symbols_v2): New function.
(Plugin::load): Add LDPT_GET_SYMBOLS_V2.
(is_referenced_from_outside): New function.
(Pluginobj::get_symbol_resolution_info): Add version parameter, return
LDPR_PREVAILING_DEF_IRONLY_EXP when using new version.
(get_symbols): Pass version parameter.
(get_symbols_v2): New function.
* plugin.h (Pluginobj::get_symbol_resolution_info): Add version
parameter.
* testsuite/plugin_test.c (get_symbols_v2): New static variable.
(onload): Add LDPT_GET_SYMBOLS_V2.
(all_symbols_read_hook): Use get_symbols_v2; check for
LDPR_PREVAILING_DEF_IRONLY_EXP.
* testsuite/plugin_test_3.sh: Update expected results.
 
2011-09-23 Simon Baldwin <simonb@google.com>
 
* configure.ac: Add new --with-gold-ldadd and --with-gold-ldflags
configuration options.
* configure: Regenerate.
* Makefile.am: Handle GOLD_LDADD and GOLD_LDFLAGS.
* Makefile.in: Regenerate.
* testsuite/Makefile.in: Regenerate.
 
2011-09-19 Sriraman Tallam <tmsriram@google.com>
 
* plugin.h (should_defer_layout): Modify to check for any_claimed_.
 
2011-09-19 Cary Coutant <ccoutant@google.com>
 
* incremental.cc (can_incremental_update): Fix typo in comment.
* incremental.h (can_incremental_update): Likewise.
 
2011-09-18 Cary Coutant <ccoutant@google.com>
 
* incremental.cc (can_incremental_update): New function.
* incremental.h (can_incremental_update): New function.
* layout.cc (Layout::init_fixed_output_section): Call it.
(Layout::make_output_section): Don't allow patch space in .eh_frame.
* object.cc (Sized_relobj_file::do_layout): Call
can_incremental_update.
 
2011-09-13 Cary Coutant <ccoutant@google.com>
 
* configure.ac: Check for glibc support for gnu_indirect_function
support with static linking, setting automake conditional
IFUNC_STATIC.
* Makefile.in: Regenerate.
* configure: Regenerate.
 
* testsuite/Makefile.am (ifuncmain1static, ifuncmain2static)
(ifuncmain4static, ifuncmain5static, ifuncmain7static): Add check
for IFUNC_STATIC.
* testsuite/Makefile.in: Regenerate.
 
2011-09-13 Cary Coutant <ccoutant@google.com>
 
* incremental.cc (Sized_relobj_incr::do_layout): Call
report_comdat_group for kept comdat sections.
* testsuite/Makefile.am (incremental_comdat_test_1): New test.
* testsuite/Makefile.in: Regenerate.
* testsuite/incr_comdat_test_1.cc: New source file.
* testsuite/incr_comdat_test_2_v1.cc: New source file.
* testsuite/incr_comdat_test_2_v2.cc: New source file.
* testsuite/incr_comdat_test_2_v3.cc: New source file.
 
2011-09-13 Ian Lance Taylor <iant@google.com>
 
* object.cc (Sized_relobj_file::do_layout): Remove unused local
variable external_symbols_offset.
 
2011-09-12 Ian Lance Taylor <iant@google.com>
 
* object.cc (Sized_relobj_file::do_layout): Remove assertion which
triggered if object has no symbols.
 
2011-09-09 David S. Miller <davem@davemloft.net>
 
* output.cc (Output_fill_debug_info::do_write): Use Swap_unaligned.
(Output_fill_debug_line::do_write): Likewise.
 
2011-08-29 Cary Coutant <ccoutant@google.com>
 
* output.cc: (Output_fill_debug_info::do_minimum_hole_size): Add
casts to match formatting specs.
(Output_fill_debug_line::do_minimum_hole_size): Likewise.
 
2011-08-26 Cary Coutant <ccoutant@google.com>
 
* layout.cc (Free_list::allocate): Provide guarantee of minimum
/script.cc
983,7 → 983,7
uint64_t final_val = this->val_->eval_maybe_dot(symtab, layout, true,
is_dot_available,
dot_value, dot_section,
&section, NULL);
&section, NULL, false);
Sized_symbol<size>* ssym = symtab->get_sized_symbol<size>(this->sym_);
ssym->set_value(final_val);
if (section != NULL)
990,11 → 990,13
ssym->set_output_section(section);
}
 
// Set the symbol value if the expression yields an absolute value.
// Set the symbol value if the expression yields an absolute value or
// a value relative to DOT_SECTION.
 
void
Symbol_assignment::set_if_absolute(Symbol_table* symtab, const Layout* layout,
bool is_dot_available, uint64_t dot_value)
bool is_dot_available, uint64_t dot_value,
Output_section* dot_section)
{
if (this->sym_ == NULL)
return;
1002,8 → 1004,9
Output_section* val_section;
uint64_t val = this->val_->eval_maybe_dot(symtab, layout, false,
is_dot_available, dot_value,
NULL, &val_section, NULL);
if (val_section != NULL)
dot_section, &val_section, NULL,
false);
if (val_section != NULL && val_section != dot_section)
return;
 
if (parameters->target().get_size() == 32)
1026,6 → 1029,8
}
else
gold_unreachable();
if (val_section != NULL)
this->sym_->set_output_section(val_section);
}
 
// Print for debugging.
1215,7 → 1220,7
for (Symbol_assignments::iterator p = this->symbol_assignments_.begin();
p != this->symbol_assignments_.end();
++p)
(*p)->set_if_absolute(symtab, layout, false, 0);
(*p)->set_if_absolute(symtab, layout, false, 0, NULL);
 
return this->script_sections_.set_section_addresses(symtab, layout);
}
/testsuite/incr_comdat_test_1.cc
0,0 → 1,68
// incr_comdat_test_1.cc -- test incremental update with comdat sections
 
// Copyright 2011 Free Software Foundation, Inc.
// Written by Cary Coutant <ccoutant@google.com>.
 
// This file is part of gold.
 
// 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
// the Free Software Foundation; either version 3 of the License, or
// (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
// Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
// MA 02110-1301, USA.
 
#include <cstdio>
 
template <class T>
T GetMax(T a, T b)
{
return a > b ? a : b;
}
 
extern int foo();
 
int bar()
{
return GetMax<int>(4, 5);
}
 
class A
{
public:
int sum(int k)
{
static int total = 0;
total += k;
return total;
}
};
 
#define CHECK_EQ(var, expected) \
do \
{ \
if ((var) != (expected)) \
{ \
printf(#var ": expected %d, found %d\n", expected, var); \
return 1; \
} \
} \
while (0)
 
int main()
{
A a;
CHECK_EQ(bar(), 5);
CHECK_EQ(foo(), 11);
CHECK_EQ(a.sum(55), 11 + 55);
CHECK_EQ(a.sum(66), 11 + 55 + 66);
return 0;
}
/testsuite/plugin_final_layout.cc
0,0 → 1,41
// plugin_final_layout.cc -- a test case for gold
 
// Copyright 2011 Free Software Foundation, Inc.
// Written by Sriraman Tallam <tmsriram@google.com>.
 
// This file is part of gold.
 
// 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
// the Free Software Foundation; either version 3 of the License, or
// (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
// Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
// MA 02110-1301, USA.
 
// The goal of this program is to verify if section ordering
// via plugins happens correctly.
 
void bar ()
{
}
 
void baz ()
{
}
 
void foo ()
{
}
 
int main ()
{
return 0;
}
/testsuite/incr_comdat_test_2_v3.cc
0,0 → 1,44
// incr_comdat_test_2.cc -- test incremental update with comdat sections
 
// Copyright 2011 Free Software Foundation, Inc.
// Written by Cary Coutant <ccoutant@google.com>.
 
// This file is part of gold.
 
// 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
// the Free Software Foundation; either version 3 of the License, or
// (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
// Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
// MA 02110-1301, USA.
 
template <class T>
T GetMax(T a, T b)
{
return a > b ? a : b;
}
 
class A
{
public:
int sum(int k)
{
static int total = 0;
total += k;
return total;
}
};
 
int foo()
{
A a;
return GetMax<int>(10, a.sum(11));
}
/testsuite/plugin_final_layout.sh
0,0 → 1,60
#!/bin/sh
 
# plugin_final_layout.sh -- test
 
# Copyright 2011 Free Software Foundation, Inc.
# Written by Sriraman Tallam <tmsriram@google.com>.
 
# This file is part of gold.
 
# 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
# the Free Software Foundation; either version 3 of the License, or
# (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
# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
# MA 02110-1301, USA.
 
# The goal of this program is to verify if --section-ordering-file works as
# intended. File final_layout.cc is in this test.
 
 
set -e
 
check()
{
awk "
BEGIN { saw1 = 0; saw2 = 0; err = 0; }
/.*$2\$/ { saw1 = 1; }
/.*$3\$/ {
saw2 = 1;
if (!saw1)
{
printf \"layout of $2 and $3 is not right\\n\";
err = 1;
exit 1;
}
}
END {
if (!saw1 && !err)
{
printf \"did not see $2\\n\";
exit 1;
}
if (!saw2 && !err)
{
printf \"did not see $3\\n\";
exit 1;
}
}" $1
}
 
check plugin_final_layout.stdout "_Z3foov" "_Z3barv"
check plugin_final_layout.stdout "_Z3barv" "_Z3bazv"
testsuite/plugin_final_layout.sh Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: testsuite/arm_unaligned_reloc.sh =================================================================== --- testsuite/arm_unaligned_reloc.sh (revision 159) +++ testsuite/arm_unaligned_reloc.sh (revision 163) @@ -47,4 +47,11 @@ check arm_unaligned_reloc.stdout "^0000a009 :" check arm_unaligned_reloc.stdout "^ a009: 00009000 .*$" +check arm_unaligned_reloc_r.stdout "^ 1: 00000000 .*$" +check arm_unaligned_reloc_r.stdout "^[ ]*1: R_ARM_ABS32 .data.0$" +check arm_unaligned_reloc_r.stdout "^ 5: 00000000 .*$" +check arm_unaligned_reloc_r.stdout "^[ ]*5: R_ARM_REL32 .data.0$" +check arm_unaligned_reloc_r.stdout "^ 9: 00000000 .*$" +check arm_unaligned_reloc_r.stdout "^[ ]*9: R_ARM_ABS16 .data.0$" + exit 0
/testsuite/plugin_test_3.sh
46,7 → 46,7
check plugin_test_3.err "two_file_test_1.syms: claim file hook called"
check plugin_test_3.err "two_file_test_1b.syms: claim file hook called"
check plugin_test_3.err "two_file_test_2.syms: claim file hook called"
check plugin_test_3.err "two_file_test_1.syms: _Z4f13iv: PREVAILING_DEF_REG"
check plugin_test_3.err "two_file_test_1.syms: _Z4f13iv: PREVAILING_DEF_IRONLY_EXP"
check plugin_test_3.err "two_file_test_1.syms: _Z2t2v: PREVAILING_DEF_REG"
check plugin_test_3.err "two_file_test_1.syms: v2: RESOLVED_IR"
check plugin_test_3.err "two_file_test_1.syms: t17data: RESOLVED_IR"
/testsuite/Makefile.am
1510,6 → 1510,20
unused.c:
@cp /dev/null $@
 
check_SCRIPTS += plugin_final_layout.sh
check_DATA += plugin_final_layout.stdout
plugin_final_layout.o: plugin_final_layout.cc
$(CXXCOMPILE) -O0 -c -ffunction-sections -fdata-sections -g -o $@ $<
plugin_final_layout: plugin_final_layout.o plugin_section_order.so gcctestdir/ld
$(CXXLINK) -Bgcctestdir/ -Wl,--plugin,"./plugin_section_order.so" plugin_final_layout.o
plugin_final_layout.stdout: plugin_final_layout
$(TEST_NM) -n plugin_final_layout > plugin_final_layout.stdout
 
plugin_section_order.so: plugin_section_order.o
$(LINK) -Bgcctestdir/ -shared plugin_section_order.o
plugin_section_order.o: plugin_section_order.c
$(COMPILE) -O0 -c -fpic -o $@ $<
 
endif PLUGINS
 
check_PROGRAMS += exclude_libs_test
1664,6 → 1678,7
$(COMPILE) -c -fpie -o $@ $<
 
if HAVE_STATIC
if IFUNC_STATIC
check_PROGRAMS += ifuncmain1static
ifuncmain1static_SOURCES = ifuncmain1.c
ifuncmain1static_DEPENDENCIES = gcctestdir/ld ifuncdep1.o
1674,6 → 1689,7
ifuncmain1picstatic: ifuncmain1pic.o ifuncmod1.o gcctestdir/ld
$(LINK) -Bgcctestdir/ -static ifuncmain1pic.o ifuncmod1.o
endif
endif
 
check_PROGRAMS += ifuncmain1
ifuncmain1_SOURCES = ifuncmain1.c
1722,6 → 1738,7
$(COMPILE) -c -fpic -o $@ $<
 
if HAVE_STATIC
if IFUNC_STATIC
check_PROGRAMS += ifuncmain2static
ifuncmain2static_SOURCES = ifuncmain2.c ifuncdep2.c
ifuncmain2static_DEPENDENCIES = gcctestdir/ld
1732,6 → 1749,7
ifuncmain2picstatic: ifuncmain2pic.o ifuncdep2pic.o gcctestdir/ld
$(LINK) -Bgcctestdir/ -static ifuncmain2pic.o ifuncdep2pic.o
endif
endif
 
check_PROGRAMS += ifuncmain2
ifuncmain2_SOURCES = ifuncmain2.c ifuncdep2.c
1758,6 → 1776,7
$(COMPILE) -c -fpic -o $@ $<
 
if HAVE_STATIC
if IFUNC_STATIC
check_PROGRAMS += ifuncmain4static
ifuncmain4static_SOURCES = ifuncmain4.c
ifuncmain4static_DEPENDENCIES = gcctestdir/ld
1768,6 → 1787,7
ifuncmain4picstatic: ifuncmain4pic.o gcctestdir/ld
$(LINK) -Bgcctestdir/ -static ifuncmain4pic.o
endif
endif
 
check_PROGRAMS += ifuncmain4
ifuncmain4_SOURCES = ifuncmain4.c
1790,6 → 1810,7
$(COMPILE) -c -o $@ $<
 
if HAVE_STATIC
if IFUNC_STATIC
check_PROGRAMS += ifuncmain5static
ifuncmain5static_SOURCES = ifuncmain5.c
ifuncmain5static_DEPENDENCIES = gcctestdir/ld ifuncdep5.o
1800,6 → 1821,7
ifuncmain5picstatic: ifuncmain5pic.o ifuncmod5.o gcctestdir/ld
$(LINK) -Bgcctestdir/ -static ifuncmain5pic.o ifuncmod5.o
endif
endif
 
check_PROGRAMS += ifuncmain5
ifuncmain5_SOURCES = ifuncmain5.c
1838,6 → 1860,7
$(COMPILE) -c -fpie -o $@ $<
 
if HAVE_STATIC
if IFUNC_STATIC
check_PROGRAMS += ifuncmain7static
ifuncmain7static_SOURCES = ifuncmain7.c
ifuncmain7static_DEPENDENCIES = gcctestdir/ld
1848,6 → 1871,7
ifuncmain7picstatic: ifuncmain7pic.o gcctestdir/ld
$(LINK) -Bgcctestdir/ -static ifuncmain7pic.o
endif
endif
 
check_PROGRAMS += ifuncmain7
ifuncmain7_SOURCES = ifuncmain7.c
2024,6 → 2048,17
cp -f common_test_1_v2.o common_test_1_tmp.o
$(CXXLINK) -Wl,--incremental-update -Bgcctestdir/ common_test_1_tmp.o
 
check_PROGRAMS += incremental_comdat_test_1
incremental_comdat_test_1: incr_comdat_test_1.o incr_comdat_test_2_v1.o incr_comdat_test_2_v2.o incr_comdat_test_2_v3.o gcctestdir/ld
cp -f incr_comdat_test_2_v1.o incr_comdat_test_1_tmp.o
$(CXXLINK) -Wl,--incremental-full,--incremental-patch=100 -Bgcctestdir/ incr_comdat_test_1.o incr_comdat_test_1_tmp.o
@sleep 1
cp -f incr_comdat_test_2_v2.o incr_comdat_test_1_tmp.o
$(CXXLINK) -Wl,--incremental-update -Bgcctestdir/ incr_comdat_test_1.o incr_comdat_test_1_tmp.o
@sleep 1
cp -f incr_comdat_test_2_v3.o incr_comdat_test_1_tmp.o
$(CXXLINK) -Wl,--incremental-update -Bgcctestdir/ incr_comdat_test_1.o incr_comdat_test_1_tmp.o
 
endif DEFAULT_TARGET_X86_64
 
endif GCC
2167,7 → 2202,7
$(TEST_OBJDUMP) -D $< > $@
 
thumb_bl_in_range: thumb_bl_in_range.o ../ld-new
../ld-new -T $(srcdir)/thumb_branch_range.t -o $@ $<
../ld-new --no-fix-arm1176 -T $(srcdir)/thumb_branch_range.t -o $@ $<
 
thumb_bl_in_range.o: thumb_bl_in_range.s
$(TEST_AS) -o $@ -march=armv5te $<
2176,7 → 2211,7
$(TEST_OBJDUMP) -D $< > $@
 
thumb_bl_out_of_range: thumb_bl_out_of_range.o ../ld-new
../ld-new -T $(srcdir)/thumb_branch_range.t -o $@ $<
../ld-new --no-fix-arm1176 -T $(srcdir)/thumb_branch_range.t -o $@ $<
 
thumb_bl_out_of_range.o: thumb_bl_out_of_range.s
$(TEST_AS) -o $@ -march=armv5te $<
2203,7 → 2238,7
$(TEST_OBJDUMP) -D $< > $@
 
thumb_blx_in_range: thumb_blx_in_range.o ../ld-new
../ld-new -T $(srcdir)/thumb_branch_range.t -o $@ $<
../ld-new --no-fix-arm1176 -T $(srcdir)/thumb_branch_range.t -o $@ $<
 
thumb_blx_in_range.o: thumb_blx_in_range.s
$(TEST_AS) -o $@ -march=armv5te $<
2212,7 → 2247,7
$(TEST_OBJDUMP) -D $< > $@
 
thumb_blx_out_of_range: thumb_blx_out_of_range.o ../ld-new
../ld-new -T $(srcdir)/thumb_branch_range.t -o $@ $<
../ld-new --no-fix-arm1176 -T $(srcdir)/thumb_branch_range.t -o $@ $<
 
thumb_blx_out_of_range.o: thumb_blx_out_of_range.s
$(TEST_AS) -o $@ -march=armv5te $<
2239,7 → 2274,7
$(TEST_OBJDUMP) -D $< > $@
 
thumb_bl_out_of_range_local: thumb_bl_out_of_range_local.o ../ld-new
../ld-new -T $(srcdir)/thumb_branch_range.t -o $@ $<
../ld-new --no-fix-arm1176 -T $(srcdir)/thumb_branch_range.t -o $@ $<
 
thumb_bl_out_of_range_local.o: thumb_bl_out_of_range_local.s
$(TEST_AS) -o $@ -march=armv5te $<
2276,7 → 2311,7
$(TEST_OBJDUMP) -D -j.text $< > $@
 
arm_fix_v4bx: arm_fix_v4bx.o ../ld-new
../ld-new --fix-v4bx -o $@ $<
../ld-new --no-fix-arm1176 --fix-v4bx -o $@ $<
 
arm_fix_v4bx.o: arm_fix_v4bx.s
$(TEST_AS) -o $@ $<
2285,13 → 2320,13
$(TEST_OBJDUMP) -D -j.text $< > $@
 
arm_fix_v4bx_interworking: arm_fix_v4bx.o ../ld-new
../ld-new --fix-v4bx-interworking -o $@ $<
../ld-new --no-fix-arm1176 --fix-v4bx-interworking -o $@ $<
 
arm_no_fix_v4bx.stdout: arm_no_fix_v4bx
$(TEST_OBJDUMP) -D -j.text $< > $@
 
arm_no_fix_v4bx: arm_fix_v4bx.o ../ld-new
../ld-new -o $@ $<
../ld-new --no-fix-arm1176 -o $@ $<
 
MOSTLYCLEANFILES += arm_fix_v4bx arm_fix_v4bx_interworking arm_no_fix_v4bx
 
2331,6 → 2366,69
 
MOSTLYCLEANFILES += arm_attr_merge_6 arm_attr_merge_6r arm_attr_merge_7
 
# ARM1176 workaround test.
check_SCRIPTS += arm_fix_1176.sh
check_DATA += arm_fix_1176_default_v6z.stdout arm_fix_1176_on_v6z.stdout \
arm_fix_1176_off_v6z.stdout arm_fix_1176_default_v5te.stdout \
arm_fix_1176_default_v7a.stdout arm_fix_1176_default_1156t2f_s.stdout
 
arm_fix_1176_default_v6z.stdout: arm_fix_1176_default_v6z
$(TEST_OBJDUMP) -D -j.foo $< > $@
 
arm_fix_1176_default_v6z: arm_fix_1176_default_v6z.o ../ld-new
../ld-new --section-start=.foo=0x2001014 -o $@ $<
 
arm_fix_1176_default_v6z.o: arm_fix_1176.s
$(TEST_AS) -march=armv6z -o $@ $<
 
arm_fix_1176_on_v6z.stdout: arm_fix_1176_on_v6z
$(TEST_OBJDUMP) -D -j.foo $< > $@
 
arm_fix_1176_on_v6z: arm_fix_1176_on_v6z.o ../ld-new
../ld-new --section-start=.foo=0x2001014 --fix-arm1176 -o $@ $<
 
arm_fix_1176_on_v6z.o: arm_fix_1176.s
$(TEST_AS) -march=armv6z -o $@ $<
 
arm_fix_1176_off_v6z.stdout: arm_fix_1176_off_v6z
$(TEST_OBJDUMP) -D -j.foo $< > $@
 
arm_fix_1176_off_v6z: arm_fix_1176_off_v6z.o ../ld-new
../ld-new --section-start=.foo=0x2001014 --no-fix-arm1176 -o $@ $<
 
arm_fix_1176_off_v6z.o: arm_fix_1176.s
$(TEST_AS) -march=armv6z -o $@ $<
 
arm_fix_1176_default_v5te.stdout: arm_fix_1176_default_v5te
$(TEST_OBJDUMP) -D -j.foo $< > $@
 
arm_fix_1176_default_v5te: arm_fix_1176_default_v5te.o ../ld-new
../ld-new --section-start=.foo=0x2001014 -o $@ $<
 
arm_fix_1176_default_v5te.o: arm_fix_1176.s
$(TEST_AS) -march=armv5te -o $@ $<
 
arm_fix_1176_default_v7a.stdout: arm_fix_1176_default_v7a
$(TEST_OBJDUMP) -D -j.foo $< > $@
 
arm_fix_1176_default_v7a: arm_fix_1176_default_v7a.o ../ld-new
../ld-new --section-start=.foo=0x2001014 -o $@ $<
 
arm_fix_1176_default_v7a.o: arm_fix_1176.s
$(TEST_AS) -march=armv7-a -o $@ $<
 
arm_fix_1176_default_1156t2f_s.stdout: arm_fix_1176_default_1156t2f_s
$(TEST_OBJDUMP) -D -j.foo $< > $@
 
arm_fix_1176_default_1156t2f_s: arm_fix_1176_default_1156t2f_s.o ../ld-new
../ld-new --section-start=.foo=0x2001014 -o $@ $<
 
arm_fix_1176_default_1156t2f_s.o: arm_fix_1176.s
$(TEST_AS) -mcpu=arm1156t2f-s -o $@ $<
 
MOSTLYCLEANFILES += arm_fix_1176_default_v6z arm_fix_1176_on_v6z arm_fix_1176_off_v6z \
arm_fix_1176_default_v5te arm_fix_1176_default_v7a arm_fix_1176_default_1156t2f_s
 
# Cortex-A8 workaround test.
 
check_SCRIPTS += arm_cortex_a8.sh
2423,19 → 2521,139
$(TEST_AS) -o $@ $<
 
check_SCRIPTS += arm_unaligned_reloc.sh
check_DATA += arm_unaligned_reloc.stdout
check_DATA += arm_unaligned_reloc.stdout arm_unaligned_reloc_r.stdout
 
arm_unaligned_reloc.stdout: arm_unaligned_reloc
$(TEST_OBJDUMP) -D $< > $@
 
arm_unaligned_reloc_r.stdout: arm_unaligned_reloc_r
$(TEST_OBJDUMP) -Dr $< > $@
 
arm_unaligned_reloc: arm_unaligned_reloc.o ../ld-new
../ld-new -o $@ $<
 
arm_unaligned_reloc_r: arm_unaligned_reloc.o ../ld-new
../ld-new -r -o $@ $<
 
arm_unaligned_reloc.o: arm_unaligned_reloc.s
$(TEST_AS) -o $@ $<
 
MOSTLYCLEANFILES += arm_unaligned_reloc
MOSTLYCLEANFILES += arm_unaligned_reloc arm_unaligned_reloc_r
 
# Check ARM to ARM farcall veneers
 
check_SCRIPTS += arm_farcall_arm_arm.sh
check_DATA += arm_farcall_arm_arm.stdout
 
arm_farcall_arm_arm.stdout: arm_farcall_arm_arm
$(TEST_OBJDUMP) -d $< > $@
 
arm_farcall_arm_arm: arm_farcall_arm_arm.o ../ld-new
../ld-new --no-fix-arm1176 --section-start .text=0x1000 --section-start .foo=0x2001020 -o $@ $<
 
arm_farcall_arm_arm.o: arm_farcall_arm_arm.s
$(TEST_AS) -o $@ $<
 
MOSTLYCLEANFILES += arm_farcall_arm_arm
 
# Check ARM to Thumb farcall veneers
 
check_SCRIPTS += arm_farcall_arm_thumb.sh
check_DATA += arm_farcall_arm_thumb.stdout arm_farcall_arm_thumb_5t.stdout
 
arm_farcall_arm_thumb.stdout: arm_farcall_arm_thumb
$(TEST_OBJDUMP) -D $< > $@
 
arm_farcall_arm_thumb: arm_farcall_arm_thumb.o ../ld-new
../ld-new --section-start .text=0x1000 --section-start .foo=0x2001014 -o $@ $<
 
arm_farcall_arm_thumb.o: arm_farcall_arm_thumb.s
$(TEST_AS) -o $@ $<
 
arm_farcall_arm_thumb_5t.stdout: arm_farcall_arm_thumb_5t
$(TEST_OBJDUMP) -D $< > $@
 
arm_farcall_arm_thumb_5t: arm_farcall_arm_thumb_5t.o ../ld-new
../ld-new --no-fix-arm1176 --section-start .text=0x1000 --section-start .foo=0x2001014 -o $@ $<
 
arm_farcall_arm_thumb_5t.o: arm_farcall_arm_thumb.s
$(TEST_AS) -march=armv5t -o $@ $<
 
MOSTLYCLEANFILES += arm_farcall_arm_thumb arm_farcall_arm_thumb_5t
 
# Check Thumb to Thumb farcall veneers
 
check_SCRIPTS += arm_farcall_thumb_thumb.sh
check_DATA += arm_farcall_thumb_thumb.stdout \
arm_farcall_thumb_thumb_5t.stdout \
arm_farcall_thumb_thumb_7m.stdout \
arm_farcall_thumb_thumb_6m.stdout
 
arm_farcall_thumb_thumb.stdout: arm_farcall_thumb_thumb
$(TEST_OBJDUMP) -D $< > $@
 
arm_farcall_thumb_thumb: arm_farcall_thumb_thumb.o ../ld-new
../ld-new --section-start .text=0x1000 --section-start .foo=0x2001014 -o $@ $<
 
arm_farcall_thumb_thumb.o: arm_farcall_thumb_thumb.s
$(TEST_AS) -march=armv4t -o $@ $<
 
arm_farcall_thumb_thumb_5t.stdout: arm_farcall_thumb_thumb_5t
$(TEST_OBJDUMP) -D $< > $@
 
arm_farcall_thumb_thumb_5t: arm_farcall_thumb_thumb_5t.o ../ld-new
../ld-new --no-fix-arm1176 --section-start .text=0x1000 --section-start .foo=0x2001014 -o $@ $<
 
arm_farcall_thumb_thumb_5t.o: arm_farcall_thumb_thumb.s
$(TEST_AS) -march=armv5t -o $@ $<
 
arm_farcall_thumb_thumb_7m.stdout: arm_farcall_thumb_thumb_7m
$(TEST_OBJDUMP) -D $< > $@
 
arm_farcall_thumb_thumb_7m: arm_farcall_thumb_thumb_7m.o ../ld-new
../ld-new --section-start .text=0x1000 --section-start .foo=0x2001014 -o $@ $<
 
arm_farcall_thumb_thumb_7m.o: arm_farcall_thumb_thumb.s
$(TEST_AS) -march=armv7-m -o $@ $<
 
arm_farcall_thumb_thumb_6m.stdout: arm_farcall_thumb_thumb_6m
$(TEST_OBJDUMP) -D $< > $@
 
arm_farcall_thumb_thumb_6m: arm_farcall_thumb_thumb_6m.o ../ld-new
../ld-new --section-start .text=0x1000 --section-start .foo=0x2001014 -o $@ $<
 
arm_farcall_thumb_thumb_6m.o: arm_farcall_thumb_thumb.s
$(TEST_AS) -march=armv6-m -o $@ $<
 
MOSTLYCLEANFILES += arm_farcall_thumb_thumb arm_farcall_thumb_thumb_5t \
arm_farcall_thumb_thumb_7m arm_farcall_thumb_thumb_6m
 
# Check Thumb to ARM farcall veneers
 
check_SCRIPTS += arm_farcall_thumb_arm.sh
check_DATA += arm_farcall_thumb_arm.stdout \
arm_farcall_thumb_arm_5t.stdout
 
arm_farcall_thumb_arm.stdout: arm_farcall_thumb_arm
$(TEST_OBJDUMP) -D $< > $@
 
arm_farcall_thumb_arm: arm_farcall_thumb_arm.o ../ld-new
../ld-new --section-start .text=0x1c01010 --section-start .foo=0x2001014 -o $@ $<
 
arm_farcall_thumb_arm.o: arm_farcall_thumb_arm.s
$(TEST_AS) -o $@ $<
 
arm_farcall_thumb_arm_5t.stdout: arm_farcall_thumb_arm_5t
$(TEST_OBJDUMP) -D $< > $@
 
arm_farcall_thumb_arm_5t: arm_farcall_thumb_arm_5t.o ../ld-new
../ld-new --no-fix-arm1176 --section-start .text=0x1c01010 --section-start .foo=0x2001014 -o $@ $<
 
arm_farcall_thumb_arm_5t.o: arm_farcall_thumb_arm.s
$(TEST_AS) -march=armv5t -o $@ $<
 
MOSTLYCLEANFILES += arm_farcall_thumb_arm arm_farcall_thumb_arm_5t
 
endif DEFAULT_TARGET_ARM
 
endif NATIVE_OR_CROSS_LINKER
/testsuite/arm_farcall_arm_thumb.sh
0,0 → 1,50
#!/bin/sh
 
# arm_farcall_arm_thumb.sh -- a test case for ARM->Thumb farcall veneers.
 
# Copyright 2010, 2011, Free Software Foundation, Inc.
# Written by Matthew Gretton-Dann <matthew.gretton-dann@arm.com>
# Based upon arm_cortex_a8.sh
# Written by Doug Kwan <dougkwan@google.com>.
 
# This file is part of gold.
 
# 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
# the Free Software Foundation; either version 3 of the License, or
# (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
# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
# MA 02110-1301, USA.
 
check()
{
if ! grep -q "$2" "$1"
then
echo "Did not find expected instruction in $1:"
echo " $2"
echo ""
echo "Actual instructions below:"
cat "$1"
exit 1
fi
}
 
# Check for ARM->Thumb default
check arm_farcall_arm_thumb.stdout "1004: .* ldr ip, \[pc\]"
check arm_farcall_arm_thumb.stdout "1008: .* bx ip"
check arm_farcall_arm_thumb.stdout "100c: 02001015"
 
# Check for ARM->Thumb with v5t interworking
chck arm_farcall_arm_thumb_5t.stdout "1004: f004 e51f"
chck arm_farcall_arm_thumb_5t.stdout "1008: 1015"
chck arm_farcall_arm_thumb_5t.stdout "100a: 0200"
 
exit 0
testsuite/arm_farcall_arm_thumb.sh Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: testsuite/arm_farcall_thumb_thumb.s =================================================================== --- testsuite/arm_farcall_thumb_thumb.s (nonexistent) +++ testsuite/arm_farcall_thumb_thumb.s (revision 163) @@ -0,0 +1,19 @@ +@ Test to ensure that a Thumb to Thumb call exceeding 4Mb generates a stub. + + .global _start + .syntax unified + +@ We will place the section .text at 0x1000. + + .text + .thumb_func +_start: + bl bar + +@ We will place the section .foo at 0x02001014. + + .section .foo, "xa" + .thumb_func +bar: + bx lr + Index: testsuite/arm_farcall_thumb_arm.sh =================================================================== --- testsuite/arm_farcall_thumb_arm.sh (nonexistent) +++ testsuite/arm_farcall_thumb_arm.sh (revision 163) @@ -0,0 +1,56 @@ +#!/bin/sh + +# arm_farcall_thumb_arm.sh -- a test case for Thumb->ARM farcall veneers. + +# Copyright 2010, 2011, Free Software Foundation, Inc. +# Written by Matthew Gretton-Dann +# Based upon arm_cortex_a8.sh +# Written by Doug Kwan . + +# This file is part of gold. + +# 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 +# the Free Software Foundation; either version 3 of the License, or +# (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 +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, +# MA 02110-1301, USA. + +check() +{ + if ! grep -q "$2" "$1" + then + echo "Did not find expected instruction in $1:" + echo " $2" + echo "" + echo "Actual instructions below:" + cat "$1" + exit 1 + fi +} + +# Thumb->ARM +check arm_farcall_thumb_arm.stdout "1f01018: .* bx pc" +check arm_farcall_thumb_arm.stdout "1f0101a: .* nop" +check arm_farcall_thumb_arm.stdout "1f0101c: f004 e51f" +check arm_farcall_thumb_arm.stdout "1f01020: 1014" +check arm_farcall_thumb_arm.stdout "1f01022: 0200" + +check arm_farcall_thumb_arm.stdout "1f01024: .* bx pc" +check arm_farcall_thumb_arm.stdout "1f01026: .* nop" +check arm_farcall_thumb_arm.stdout "1f01028: fff9 ea03" + +# Thumb->ARM with v5T interworking +check arm_farcall_thumb_arm_5t.stdout "1f01018: f004 e51f" +check arm_farcall_thumb_arm_5t.stdout "1f0101c: 1014" +check arm_farcall_thumb_arm_5t.stdout "1f0101e: 0200" + +exit 0
testsuite/arm_farcall_thumb_arm.sh Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: testsuite/arm_farcall_arm_arm.s =================================================================== --- testsuite/arm_farcall_arm_arm.s (nonexistent) +++ testsuite/arm_farcall_arm_arm.s (revision 163) @@ -0,0 +1,20 @@ +@ Test to ensure that a ARM to ARM call exceeding 32Mb generates a stub. + + .global _start + .syntax unified + +@ We will place the section .text at 0x1000. + + .text + +_start: + bl bar + +@ We will place the section .foo at 0x2001020. + + .section .foo, "xa" + + .type bar, %function +bar: + bx lr + Index: testsuite/arm_fix_1176.s =================================================================== --- testsuite/arm_fix_1176.s (nonexistent) +++ testsuite/arm_fix_1176.s (revision 163) @@ -0,0 +1,15 @@ + .syntax unified + .globl _start + .globl func_to_branch_to + + .arm + .text +func_to_branch_to: + bx lr + + .thumb + .section .foo, "xa" + .thumb_func +_start: + bl func_to_branch_to + Index: testsuite/plugin_section_order.c =================================================================== --- testsuite/plugin_section_order.c (nonexistent) +++ testsuite/plugin_section_order.c (revision 163) @@ -0,0 +1,167 @@ +/* plugin_section_reorder.c -- Simple plugin to reorder function sections + + Copyright 2011 Free Software Foundation, Inc. + Written by Sriraman Tallam . + + This file is part of gold. + + 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 + the Free Software Foundation; either version 3 of the License, or + (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 + Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, + MA 02110-1301, USA. */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include +#include "plugin-api.h" + +static ld_plugin_get_input_section_count get_input_section_count = NULL; +static ld_plugin_get_input_section_type get_input_section_type = NULL; +static ld_plugin_get_input_section_name get_input_section_name = NULL; +static ld_plugin_get_input_section_contents get_input_section_contents = NULL; +static ld_plugin_update_section_order update_section_order = NULL; +static ld_plugin_allow_section_ordering allow_section_ordering = NULL; + +enum ld_plugin_status onload(struct ld_plugin_tv *tv); +enum ld_plugin_status claim_file_hook(const struct ld_plugin_input_file *file, + int *claimed); +enum ld_plugin_status all_symbols_read_hook(void); + +/* Plugin entry point. */ +enum ld_plugin_status +onload(struct ld_plugin_tv *tv) +{ + struct ld_plugin_tv *entry; + for (entry = tv; entry->tv_tag != LDPT_NULL; ++entry) + { + switch (entry->tv_tag) + { + case LDPT_REGISTER_CLAIM_FILE_HOOK: + assert((*entry->tv_u.tv_register_claim_file) (claim_file_hook) == LDPS_OK); + break; + case LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK: + assert((*entry->tv_u.tv_register_all_symbols_read) (all_symbols_read_hook) + == LDPS_OK); + break; + case LDPT_GET_INPUT_SECTION_COUNT: + get_input_section_count = *entry->tv_u.tv_get_input_section_count; + break; + case LDPT_GET_INPUT_SECTION_TYPE: + get_input_section_type = *entry->tv_u.tv_get_input_section_type; + break; + case LDPT_GET_INPUT_SECTION_NAME: + get_input_section_name = *entry->tv_u.tv_get_input_section_name; + break; + case LDPT_GET_INPUT_SECTION_CONTENTS: + get_input_section_contents = *entry->tv_u.tv_get_input_section_contents; + break; + case LDPT_UPDATE_SECTION_ORDER: + update_section_order = *entry->tv_u.tv_update_section_order; + break; + case LDPT_ALLOW_SECTION_ORDERING: + allow_section_ordering = *entry->tv_u.tv_allow_section_ordering; + break; + default: + break; + } + } + + if (get_input_section_count == NULL + || get_input_section_type == NULL + || get_input_section_name == NULL + || get_input_section_contents == NULL + || update_section_order == NULL + || allow_section_ordering == NULL) + { + fprintf(stderr, "Some interfaces are missing\n"); + return LDPS_ERR; + } + + return LDPS_OK; +} + +inline static int is_prefix_of(const char *prefix, const char *str) +{ + return strncmp(prefix, str, strlen (prefix)) == 0; +} + +struct ld_plugin_section section_list[3]; +int num_entries = 0; + +/* This function is called by the linker for every new object it encounters. */ +enum ld_plugin_status +claim_file_hook(const struct ld_plugin_input_file *file, int *claimed) +{ + static int is_ordering_specified = 0; + struct ld_plugin_section section; + unsigned int count = 0; + unsigned int shndx; + + *claimed = 0; + if (is_ordering_specified == 0) + { + /* Inform the linker to prepare for section reordering. */ + (*allow_section_ordering)(); + is_ordering_specified = 1; + } + + (*get_input_section_count)(file->handle, &count); + + for (shndx = 0; shndx < count; ++shndx) + { + char *name = NULL; + int position = 3; + + section.handle = file->handle; + section.shndx = shndx; + (*get_input_section_name)(section, &name); + + /* Order is foo() followed by bar() followed by baz() */ + if (is_prefix_of(".text.", name)) + { + if (strstr(name, "_Z3foov") != NULL) + position = 0; + else if (strstr(name, "_Z3barv") != NULL) + position = 1; + else if (strstr(name, "_Z3bazv") != NULL) + position = 2; + else + position = 3; + } + if (position < 3) + { + section_list[position].handle = file->handle; + section_list[position].shndx = shndx; + num_entries++; + } + } + return LDPS_OK; +} + +/* This function is called by the linker after all the symbols have been read. + At this stage, it is fine to tell the linker the desired function order. */ + +enum ld_plugin_status +all_symbols_read_hook(void) +{ + if (num_entries == 3) + update_section_order(section_list, num_entries); + + return LDPS_OK; +} + Index: testsuite/plugin_test.c =================================================================== --- testsuite/plugin_test.c (revision 159) +++ testsuite/plugin_test.c (revision 163) @@ -56,6 +56,7 @@ static ld_plugin_register_cleanup register_cleanup_hook = NULL; static ld_plugin_add_symbols add_symbols = NULL; static ld_plugin_get_symbols get_symbols = NULL; +static ld_plugin_get_symbols get_symbols_v2 = NULL; static ld_plugin_add_input_file add_input_file = NULL; static ld_plugin_message message = NULL; static ld_plugin_get_input_file get_input_file = NULL; @@ -120,6 +121,9 @@ case LDPT_GET_SYMBOLS: get_symbols = entry->tv_u.tv_get_symbols; break; + case LDPT_GET_SYMBOLS_V2: + get_symbols_v2 = entry->tv_u.tv_get_symbols; + break; case LDPT_ADD_INPUT_FILE: add_input_file = entry->tv_u.tv_add_input_file; break; @@ -394,9 +398,9 @@ (*message)(LDPL_INFO, "all symbols read hook called"); - if (get_symbols == NULL) + if (get_symbols_v2 == NULL) { - fprintf(stderr, "tv_get_symbols interface missing\n"); + fprintf(stderr, "tv_get_symbols (v2) interface missing\n"); return LDPS_ERR; } @@ -404,7 +408,7 @@ claimed_file != NULL; claimed_file = claimed_file->next) { - (*get_symbols)(claimed_file->handle, claimed_file->nsyms, + (*get_symbols_v2)(claimed_file->handle, claimed_file->nsyms, claimed_file->syms); for (i = 0; i < claimed_file->nsyms; ++i) @@ -423,6 +427,9 @@ case LDPR_PREVAILING_DEF_IRONLY: res = "PREVAILING_DEF_IRONLY"; break; + case LDPR_PREVAILING_DEF_IRONLY_EXP: + res = "PREVAILING_DEF_IRONLY_EXP"; + break; case LDPR_PREEMPTED_REG: res = "PREEMPTED_REG"; break;
/testsuite/incr_comdat_test_2_v1.cc
0,0 → 1,44
// incr_comdat_test_2.cc -- test incremental update with comdat sections
 
// Copyright 2011 Free Software Foundation, Inc.
// Written by Cary Coutant <ccoutant@google.com>.
 
// This file is part of gold.
 
// 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
// the Free Software Foundation; either version 3 of the License, or
// (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
// Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
// MA 02110-1301, USA.
 
template <class T>
T GetMax(T a, T b)
{
return a > b ? a : b;
}
 
class A
{
public:
int sum(int k)
{
static int total = 0;
total += k;
return total;
}
};
 
int foo()
{
A a;
return GetMax<int>(10, a.sum(8));
}
/testsuite/arm_farcall_thumb_thumb.sh
0,0 → 1,74
#!/bin/sh
 
# arm_farcall_thumb_thumb.sh -- a test case for Thumb->Thumb farcall veneers.
 
# Copyright 2010, 2011, Free Software Foundation, Inc.
# Written by Matthew Gretton-Dann <matthew.gretton-dann@arm.com>
# Based upon arm_cortex_a8.sh
# Written by Doug Kwan <dougkwan@google.com>.
 
# This file is part of gold.
 
# 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
# the Free Software Foundation; either version 3 of the License, or
# (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
# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
# MA 02110-1301, USA.
 
check()
{
if ! grep -q "$2" "$1"
then
echo "Did not find expected instruction in $1:"
echo " $2"
echo ""
echo "Actual instructions below:"
cat "$1"
exit 1
fi
}
 
# Thumb->Thumb default
check arm_farcall_thumb_thumb.stdout "1004: .* bx pc"
check arm_farcall_thumb_thumb.stdout "1006: .* nop"
check arm_farcall_thumb_thumb.stdout "1008: c000"
check arm_farcall_thumb_thumb.stdout "100a: e59f"
check arm_farcall_thumb_thumb.stdout "100c: ff1c e12f"
check arm_farcall_thumb_thumb.stdout "1010: 1015"
check arm_farcall_thumb_thumb.stdout "1012: 0200"
 
# Thumb->Thumb with v5T interworking
check arm_farcall_thumb_thumb_5t.stdout "1004: f004 e51f"
check arm_farcall_thumb_thumb_5t.stdout "1008: 1015"
check arm_farcall_thumb_thumb_5t.stdout "100a: 0200"
 
# Thumb->Thumb on v6-M
check arm_farcall_thumb_thumb_6m.stdout "1004: .* push {r0}"
check arm_farcall_thumb_thumb_6m.stdout "1006: .* ldr r0, \\[pc, #8\\]"
check arm_farcall_thumb_thumb_6m.stdout "1008: .* mov ip, r0"
check arm_farcall_thumb_thumb_6m.stdout "100a: .* pop {r0}"
check arm_farcall_thumb_thumb_6m.stdout "100c: .* bx ip"
check arm_farcall_thumb_thumb_6m.stdout "100e: .* nop"
check arm_farcall_thumb_thumb_6m.stdout "1010: 1015"
check arm_farcall_thumb_thumb_6m.stdout "1012: 0200"
 
# Thumb->Thumb on v7-M
check arm_farcall_thumb_thumb_6m.stdout "1004: .* push {r0}"
check arm_farcall_thumb_thumb_6m.stdout "1006: .* ldr r0, \\[pc, #8\\]"
check arm_farcall_thumb_thumb_6m.stdout "1008: .* mov ip, r0"
check arm_farcall_thumb_thumb_6m.stdout "100a: .* pop {r0}"
check arm_farcall_thumb_thumb_6m.stdout "100c: .* bx ip"
check arm_farcall_thumb_thumb_6m.stdout "100e: .* nop"
check arm_farcall_thumb_thumb_6m.stdout "1010: 1015"
check arm_farcall_thumb_thumb_6m.stdout "1012: 0200"
 
exit 0
testsuite/arm_farcall_thumb_thumb.sh Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: testsuite/Makefile.in =================================================================== --- testsuite/Makefile.in (revision 159) +++ testsuite/Makefile.in (revision 163) @@ -306,7 +306,8 @@ @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ plugin_test_3.sh \ @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ plugin_test_4.sh \ @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ plugin_test_6.sh \ -@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ plugin_test_7.sh +@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ plugin_test_7.sh \ +@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ plugin_final_layout.sh # Test that symbols known in the IR file but not in the replacement file # produce an unresolved symbol error. @@ -318,7 +319,8 @@ @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ plugin_test_6.err \ @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ plugin_test_7.err \ @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ plugin_test_7.syms \ -@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ plugin_test_9.err +@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ plugin_test_9.err \ +@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ plugin_final_layout.stdout # Make a copy of two_file_test_1.o, which does not define the symbol _Z4t16av. @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@am__append_36 = \ @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ plugin_test_1.err \ @@ -405,8 +407,8 @@ @GCC_TRUE@@NATIVE_LINKER_TRUE@ searched_file_test @GCC_FALSE@searched_file_test_DEPENDENCIES = @NATIVE_LINKER_FALSE@searched_file_test_DEPENDENCIES = -@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__append_43 = ifuncmain1static \ -@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain1picstatic +@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__append_43 = ifuncmain1static \ +@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain1picstatic @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__append_44 = ifuncmain1 \ @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain1pic \ @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain1vis \ @@ -415,11 +417,12 @@ @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain1pie \ @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain1vispie \ @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain1staticpie -@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__append_45 = ifuncmain2static \ -@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain2picstatic +@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__append_45 = ifuncmain2static \ +@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain2picstatic @GCC_FALSE@ifuncmain2static_DEPENDENCIES = @HAVE_STATIC_FALSE@ifuncmain2static_DEPENDENCIES = @IFUNC_FALSE@ifuncmain2static_DEPENDENCIES = +@IFUNC_STATIC_FALSE@ifuncmain2static_DEPENDENCIES = @NATIVE_LINKER_FALSE@ifuncmain2static_DEPENDENCIES = @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__append_46 = ifuncmain2 \ @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain2pic \ @@ -430,28 +433,30 @@ @GCC_FALSE@ifuncmain3_DEPENDENCIES = @IFUNC_FALSE@ifuncmain3_DEPENDENCIES = @NATIVE_LINKER_FALSE@ifuncmain3_DEPENDENCIES = -@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__append_47 = ifuncmain4static \ -@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain4picstatic +@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__append_47 = ifuncmain4static \ +@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain4picstatic @GCC_FALSE@ifuncmain4static_DEPENDENCIES = @HAVE_STATIC_FALSE@ifuncmain4static_DEPENDENCIES = @IFUNC_FALSE@ifuncmain4static_DEPENDENCIES = +@IFUNC_STATIC_FALSE@ifuncmain4static_DEPENDENCIES = @NATIVE_LINKER_FALSE@ifuncmain4static_DEPENDENCIES = @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__append_48 = ifuncmain4 @GCC_FALSE@ifuncmain4_DEPENDENCIES = @IFUNC_FALSE@ifuncmain4_DEPENDENCIES = @NATIVE_LINKER_FALSE@ifuncmain4_DEPENDENCIES = -@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__append_49 = ifuncmain5static \ -@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain5picstatic +@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__append_49 = ifuncmain5static \ +@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain5picstatic @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__append_50 = ifuncmain5 \ @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain5pic \ @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain5staticpic \ @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain5pie \ @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain6pie -@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__append_51 = ifuncmain7static \ -@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain7picstatic +@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__append_51 = ifuncmain7static \ +@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain7picstatic @GCC_FALSE@ifuncmain7static_DEPENDENCIES = @HAVE_STATIC_FALSE@ifuncmain7static_DEPENDENCIES = @IFUNC_FALSE@ifuncmain7static_DEPENDENCIES = +@IFUNC_STATIC_FALSE@ifuncmain7static_DEPENDENCIES = @NATIVE_LINKER_FALSE@ifuncmain7static_DEPENDENCIES = @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__append_52 = ifuncmain7 \ @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain7pic \ @@ -472,7 +477,8 @@ @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_test_5 \ @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_test_6 \ @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_copy_test \ -@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_common_test_1 +@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_common_test_1 \ +@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_comdat_test_1 @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_55 = two_file_test_tmp_2.o \ @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_test_tmp_3.o \ @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_test_4.base \ @@ -502,16 +508,31 @@ @DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_x86_64_4 split_x86_64_r +# ARM1176 workaround test. + # Cortex-A8 workaround test. + +# Check ARM to ARM farcall veneers + +# Check ARM to Thumb farcall veneers + +# Check Thumb to Thumb farcall veneers + +# Check Thumb to ARM farcall veneers @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_64 = arm_abs_global.sh \ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_branch_in_range.sh \ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_branch_out_of_range.sh \ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_fix_v4bx.sh \ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_attr_merge.sh \ +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_fix_1176.sh \ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_cortex_a8.sh \ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_exidx_test.sh \ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ pr12826.sh \ -@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_unaligned_reloc.sh +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_unaligned_reloc.sh \ +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_farcall_arm_arm.sh \ +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_farcall_arm_thumb.sh \ +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_farcall_thumb_thumb.sh \ +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_farcall_thumb_arm.sh @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_65 = arm_abs_global.stdout \ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_bl_in_range.stdout \ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_bl_out_of_range.stdout \ @@ -532,6 +553,12 @@ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_attr_merge_6.stdout \ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_attr_merge_6r.stdout \ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_attr_merge_7.stdout \ +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_fix_1176_default_v6z.stdout \ +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_fix_1176_on_v6z.stdout \ +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_fix_1176_off_v6z.stdout \ +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_fix_1176_default_v5te.stdout \ +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_fix_1176_default_v7a.stdout \ +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_fix_1176_default_1156t2f_s.stdout \ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_cortex_a8_b_cond.stdout \ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_cortex_a8_b.stdout \ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_cortex_a8_bl.stdout \ @@ -540,7 +567,17 @@ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_cortex_a8_local_reloc.stdout \ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_exidx_test.stdout \ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ pr12826.stdout \ -@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_unaligned_reloc.stdout +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_unaligned_reloc.stdout \ +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_unaligned_reloc_r.stdout \ +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_farcall_arm_arm.stdout \ +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_farcall_arm_thumb.stdout \ +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_farcall_arm_thumb_5t.stdout \ +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_farcall_thumb_thumb.stdout \ +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_farcall_thumb_thumb_5t.stdout \ +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_farcall_thumb_thumb_7m.stdout \ +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_farcall_thumb_thumb_6m.stdout \ +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_farcall_thumb_arm.stdout \ +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_farcall_thumb_arm_5t.stdout @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@am__append_66 = arm_abs_global \ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_bl_in_range \ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_bl_out_of_range \ @@ -561,6 +598,12 @@ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_attr_merge_6 \ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_attr_merge_6r \ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_attr_merge_7 \ +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_fix_1176_default_v6z \ +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_fix_1176_on_v6z \ +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_fix_1176_off_v6z \ +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_fix_1176_default_v5te \ +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_fix_1176_default_v7a \ +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_fix_1176_default_1156t2f_s \ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_cortex_a8_b_cond \ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_cortex_a8_b \ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_cortex_a8_bl \ @@ -567,7 +610,17 @@ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_cortex_a8_blx \ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_cortex_a8_local \ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_cortex_a8_local_reloc \ -@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_unaligned_reloc +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_unaligned_reloc \ +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_unaligned_reloc_r \ +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_farcall_arm_arm \ +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_farcall_arm_thumb \ +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_farcall_arm_thumb_5t \ +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_farcall_thumb_thumb \ +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_farcall_thumb_thumb_5t \ +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_farcall_thumb_thumb_7m \ +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_farcall_thumb_thumb_6m \ +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_farcall_thumb_arm \ +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ arm_farcall_thumb_arm_5t subdir = testsuite DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 @@ -706,8 +759,8 @@ @GCC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_26 = \ @GCC_TRUE@@NATIVE_LINKER_TRUE@ permission_test$(EXEEXT) \ @GCC_TRUE@@NATIVE_LINKER_TRUE@ searched_file_test$(EXEEXT) -@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_27 = ifuncmain1static$(EXEEXT) \ -@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain1picstatic$(EXEEXT) +@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_27 = ifuncmain1static$(EXEEXT) \ +@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain1picstatic$(EXEEXT) @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_28 = \ @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain1$(EXEEXT) \ @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain1pic$(EXEEXT) \ @@ -717,18 +770,18 @@ @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain1pie$(EXEEXT) \ @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain1vispie$(EXEEXT) \ @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain1staticpie$(EXEEXT) -@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_29 = ifuncmain2static$(EXEEXT) \ -@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain2picstatic$(EXEEXT) +@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_29 = ifuncmain2static$(EXEEXT) \ +@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain2picstatic$(EXEEXT) @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_30 = \ @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain2$(EXEEXT) \ @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain2pic$(EXEEXT) \ @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain3$(EXEEXT) -@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_31 = ifuncmain4static$(EXEEXT) \ -@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain4picstatic$(EXEEXT) +@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_31 = ifuncmain4static$(EXEEXT) \ +@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain4picstatic$(EXEEXT) @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_32 = \ @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain4$(EXEEXT) -@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_33 = ifuncmain5static$(EXEEXT) \ -@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain5picstatic$(EXEEXT) +@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_33 = ifuncmain5static$(EXEEXT) \ +@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain5picstatic$(EXEEXT) @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_34 = \ @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain5$(EXEEXT) \ @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain5pic$(EXEEXT) \ @@ -735,8 +788,8 @@ @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain5staticpic$(EXEEXT) \ @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain5pie$(EXEEXT) \ @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain6pie$(EXEEXT) -@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_35 = ifuncmain7static$(EXEEXT) \ -@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain7picstatic$(EXEEXT) +@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_35 = ifuncmain7static$(EXEEXT) \ +@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain7picstatic$(EXEEXT) @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_36 = \ @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain7$(EXEEXT) \ @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncmain7pic$(EXEEXT) \ @@ -749,7 +802,8 @@ @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_test_5$(EXEEXT) \ @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_test_6$(EXEEXT) \ @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_copy_test$(EXEEXT) \ -@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_common_test_1$(EXEEXT) +@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_common_test_1$(EXEEXT) \ +@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_comdat_test_1$(EXEEXT) basic_pic_test_SOURCES = basic_pic_test.c basic_pic_test_OBJECTS = basic_pic_test.$(OBJEXT) basic_pic_test_LDADD = $(LDADD) @@ -942,7 +996,7 @@ ifuncmain1pie_DEPENDENCIES = libgoldtest.a ../libgold.a \ ../../libiberty/libiberty.a $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) -@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am_ifuncmain1static_OBJECTS = ifuncmain1.$(OBJEXT) +@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am_ifuncmain1static_OBJECTS = ifuncmain1.$(OBJEXT) ifuncmain1static_OBJECTS = $(am_ifuncmain1static_OBJECTS) ifuncmain1static_LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(ifuncmain1static_LDFLAGS) $(LDFLAGS) -o $@ @@ -991,8 +1045,8 @@ ifuncmain2picstatic_DEPENDENCIES = libgoldtest.a ../libgold.a \ ../../libiberty/libiberty.a $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) -@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am_ifuncmain2static_OBJECTS = ifuncmain2.$(OBJEXT) \ -@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncdep2.$(OBJEXT) +@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am_ifuncmain2static_OBJECTS = ifuncmain2.$(OBJEXT) \ +@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ ifuncdep2.$(OBJEXT) ifuncmain2static_OBJECTS = $(am_ifuncmain2static_OBJECTS) ifuncmain2static_LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(ifuncmain2static_LDFLAGS) $(LDFLAGS) -o $@ @@ -1010,7 +1064,7 @@ ifuncmain4picstatic_DEPENDENCIES = libgoldtest.a ../libgold.a \ ../../libiberty/libiberty.a $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) -@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am_ifuncmain4static_OBJECTS = ifuncmain4.$(OBJEXT) +@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am_ifuncmain4static_OBJECTS = ifuncmain4.$(OBJEXT) ifuncmain4static_OBJECTS = $(am_ifuncmain4static_OBJECTS) ifuncmain4static_LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(ifuncmain4static_LDFLAGS) $(LDFLAGS) -o $@ @@ -1036,7 +1090,7 @@ ifuncmain5pie_DEPENDENCIES = libgoldtest.a ../libgold.a \ ../../libiberty/libiberty.a $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) -@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am_ifuncmain5static_OBJECTS = ifuncmain5.$(OBJEXT) +@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am_ifuncmain5static_OBJECTS = ifuncmain5.$(OBJEXT) ifuncmain5static_OBJECTS = $(am_ifuncmain5static_OBJECTS) ifuncmain5static_LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(ifuncmain5static_LDFLAGS) $(LDFLAGS) -o $@ @@ -1074,7 +1128,7 @@ ifuncmain7pie_DEPENDENCIES = libgoldtest.a ../libgold.a \ ../../libiberty/libiberty.a $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) -@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am_ifuncmain7static_OBJECTS = ifuncmain7.$(OBJEXT) +@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@am_ifuncmain7static_OBJECTS = ifuncmain7.$(OBJEXT) ifuncmain7static_OBJECTS = $(am_ifuncmain7static_OBJECTS) ifuncmain7static_LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(ifuncmain7static_LDFLAGS) $(LDFLAGS) -o $@ @@ -1083,6 +1137,13 @@ ifuncvar_OBJECTS = $(am_ifuncvar_OBJECTS) ifuncvar_LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(ifuncvar_LDFLAGS) \ $(LDFLAGS) -o $@ +incremental_comdat_test_1_SOURCES = incremental_comdat_test_1.c +incremental_comdat_test_1_OBJECTS = \ + incremental_comdat_test_1.$(OBJEXT) +incremental_comdat_test_1_LDADD = $(LDADD) +incremental_comdat_test_1_DEPENDENCIES = libgoldtest.a ../libgold.a \ + ../../libiberty/libiberty.a $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) incremental_common_test_1_SOURCES = incremental_common_test_1.c incremental_common_test_1_OBJECTS = \ incremental_common_test_1.$(OBJEXT) @@ -1635,17 +1696,17 @@ ifuncmain6pie.c $(ifuncmain7_SOURCES) ifuncmain7pic.c \ ifuncmain7picstatic.c ifuncmain7pie.c \ $(ifuncmain7static_SOURCES) $(ifuncvar_SOURCES) \ - incremental_common_test_1.c incremental_copy_test.c \ - incremental_test_2.c incremental_test_3.c incremental_test_4.c \ - incremental_test_5.c incremental_test_6.c $(initpri1_SOURCES) \ - $(initpri2_SOURCES) $(initpri3a_SOURCES) $(initpri3b_SOURCES) \ - $(justsyms_SOURCES) $(justsyms_exec_SOURCES) $(large_SOURCES) \ - local_labels_test.c many_sections_r_test.c \ - $(many_sections_test_SOURCES) $(object_unittest_SOURCES) \ - permission_test.c plugin_test_1.c plugin_test_2.c \ - plugin_test_3.c plugin_test_4.c plugin_test_5.c \ - plugin_test_6.c plugin_test_7.c plugin_test_8.c \ - $(protected_1_SOURCES) $(protected_2_SOURCES) \ + incremental_comdat_test_1.c incremental_common_test_1.c \ + incremental_copy_test.c incremental_test_2.c \ + incremental_test_3.c incremental_test_4.c incremental_test_5.c \ + incremental_test_6.c $(initpri1_SOURCES) $(initpri2_SOURCES) \ + $(initpri3a_SOURCES) $(initpri3b_SOURCES) $(justsyms_SOURCES) \ + $(justsyms_exec_SOURCES) $(large_SOURCES) local_labels_test.c \ + many_sections_r_test.c $(many_sections_test_SOURCES) \ + $(object_unittest_SOURCES) permission_test.c plugin_test_1.c \ + plugin_test_2.c plugin_test_3.c plugin_test_4.c \ + plugin_test_5.c plugin_test_6.c plugin_test_7.c \ + plugin_test_8.c $(protected_1_SOURCES) $(protected_2_SOURCES) \ $(relro_now_test_SOURCES) $(relro_script_test_SOURCES) \ $(relro_strip_test_SOURCES) $(relro_test_SOURCES) \ $(script_test_1_SOURCES) $(script_test_2_SOURCES) \ @@ -1785,6 +1846,8 @@ EXEEXT = @EXEEXT@ GENCAT = @GENCAT@ GMSGFMT = @GMSGFMT@ +GOLD_LDADD = @GOLD_LDADD@ +GOLD_LDFLAGS = @GOLD_LDFLAGS@ GREP = @GREP@ INCINTL = @INCINTL@ INSTALL = @INSTALL@ @@ -1807,6 +1870,7 @@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGMERGE = @MSGMERGE@ +NM = @NM@ NO_WERROR = @NO_WERROR@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ @@ -2335,10 +2399,10 @@ @GCC_TRUE@@NATIVE_LINKER_TRUE@searched_file_test_DEPENDENCIES = alt/searched_file_test_lib.a @GCC_TRUE@@NATIVE_LINKER_TRUE@searched_file_test_LDFLAGS = -Bgcctestdir/ -Lalt @GCC_TRUE@@NATIVE_LINKER_TRUE@searched_file_test_LDADD = -l:searched_file_test_lib.a -@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain1static_SOURCES = ifuncmain1.c -@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain1static_DEPENDENCIES = gcctestdir/ld ifuncdep1.o -@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain1static_LDFLAGS = -Bgcctestdir/ -static -@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain1static_LDADD = ifuncdep1.o +@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain1static_SOURCES = ifuncmain1.c +@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain1static_DEPENDENCIES = gcctestdir/ld ifuncdep1.o +@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain1static_LDFLAGS = -Bgcctestdir/ -static +@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain1static_LDADD = ifuncdep1.o @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain1_SOURCES = ifuncmain1.c @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain1_DEPENDENCIES = gcctestdir/ld ifuncmod1.so @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain1_LDFLAGS = -Bgcctestdir/ -Wl,-R,. @@ -2347,10 +2411,10 @@ @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain1vis_DEPENDENCIES = gcctestdir/ld ifuncmod1.so @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain1vis_LDFLAGS = -Bgcctestdir/ -Wl,-R,. @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain1vis_LDADD = ifuncmod1.so -@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain2static_SOURCES = ifuncmain2.c ifuncdep2.c -@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain2static_DEPENDENCIES = gcctestdir/ld -@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain2static_LDFLAGS = -Bgcctestdir/ -static -@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain2static_LDADD = +@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain2static_SOURCES = ifuncmain2.c ifuncdep2.c +@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain2static_DEPENDENCIES = gcctestdir/ld +@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain2static_LDFLAGS = -Bgcctestdir/ -static +@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain2static_LDADD = @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain2_SOURCES = ifuncmain2.c ifuncdep2.c @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain2_DEPENDENCIES = gcctestdir/ld @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain2_LDFLAGS = -Bgcctestdir/ @@ -2359,26 +2423,26 @@ @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain3_DEPENDENCIES = gcctestdir/ld ifuncmod3.so @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain3_LDFLAGS = -Bgcctestdir/ -Wl,--export-dynamic -Wl,-R,. @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain3_LDADD = -ldl -@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain4static_SOURCES = ifuncmain4.c -@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain4static_DEPENDENCIES = gcctestdir/ld -@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain4static_LDFLAGS = -Bgcctestdir/ -static -@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain4static_LDADD = +@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain4static_SOURCES = ifuncmain4.c +@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain4static_DEPENDENCIES = gcctestdir/ld +@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain4static_LDFLAGS = -Bgcctestdir/ -static +@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain4static_LDADD = @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain4_SOURCES = ifuncmain4.c @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain4_DEPENDENCIES = gcctestdir/ld @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain4_LDFLAGS = -Bgcctestdir/ @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain4_LDADD = -@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain5static_SOURCES = ifuncmain5.c -@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain5static_DEPENDENCIES = gcctestdir/ld ifuncdep5.o -@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain5static_LDFLAGS = -Bgcctestdir/ -static -@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain5static_LDADD = ifuncdep5.o +@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain5static_SOURCES = ifuncmain5.c +@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain5static_DEPENDENCIES = gcctestdir/ld ifuncdep5.o +@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain5static_LDFLAGS = -Bgcctestdir/ -static +@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain5static_LDADD = ifuncdep5.o @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain5_SOURCES = ifuncmain5.c @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain5_DEPENDENCIES = gcctestdir/ld ifuncmod5.so @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain5_LDFLAGS = -Bgcctestdir/ -Wl,-R,. @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain5_LDADD = ifuncmod5.so -@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain7static_SOURCES = ifuncmain7.c -@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain7static_DEPENDENCIES = gcctestdir/ld -@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain7static_LDFLAGS = -Bgcctestdir/ -static -@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain7static_LDADD = +@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain7static_SOURCES = ifuncmain7.c +@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain7static_DEPENDENCIES = gcctestdir/ld +@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain7static_LDFLAGS = -Bgcctestdir/ -static +@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain7static_LDADD = @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain7_SOURCES = ifuncmain7.c @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain7_DEPENDENCIES = gcctestdir/ld @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain7_LDFLAGS = -Bgcctestdir/ @@ -2575,6 +2639,9 @@ @IFUNC_FALSE@ifuncmain1picstatic$(EXEEXT): $(ifuncmain1picstatic_OBJECTS) $(ifuncmain1picstatic_DEPENDENCIES) @IFUNC_FALSE@ @rm -f ifuncmain1picstatic$(EXEEXT) @IFUNC_FALSE@ $(LINK) $(ifuncmain1picstatic_OBJECTS) $(ifuncmain1picstatic_LDADD) $(LIBS) +@IFUNC_STATIC_FALSE@ifuncmain1picstatic$(EXEEXT): $(ifuncmain1picstatic_OBJECTS) $(ifuncmain1picstatic_DEPENDENCIES) +@IFUNC_STATIC_FALSE@ @rm -f ifuncmain1picstatic$(EXEEXT) +@IFUNC_STATIC_FALSE@ $(LINK) $(ifuncmain1picstatic_OBJECTS) $(ifuncmain1picstatic_LDADD) $(LIBS) @NATIVE_LINKER_FALSE@ifuncmain1picstatic$(EXEEXT): $(ifuncmain1picstatic_OBJECTS) $(ifuncmain1picstatic_DEPENDENCIES) @NATIVE_LINKER_FALSE@ @rm -f ifuncmain1picstatic$(EXEEXT) @NATIVE_LINKER_FALSE@ $(LINK) $(ifuncmain1picstatic_OBJECTS) $(ifuncmain1picstatic_LDADD) $(LIBS) @@ -2650,6 +2717,9 @@ @IFUNC_FALSE@ifuncmain2picstatic$(EXEEXT): $(ifuncmain2picstatic_OBJECTS) $(ifuncmain2picstatic_DEPENDENCIES) @IFUNC_FALSE@ @rm -f ifuncmain2picstatic$(EXEEXT) @IFUNC_FALSE@ $(LINK) $(ifuncmain2picstatic_OBJECTS) $(ifuncmain2picstatic_LDADD) $(LIBS) +@IFUNC_STATIC_FALSE@ifuncmain2picstatic$(EXEEXT): $(ifuncmain2picstatic_OBJECTS) $(ifuncmain2picstatic_DEPENDENCIES) +@IFUNC_STATIC_FALSE@ @rm -f ifuncmain2picstatic$(EXEEXT) +@IFUNC_STATIC_FALSE@ $(LINK) $(ifuncmain2picstatic_OBJECTS) $(ifuncmain2picstatic_LDADD) $(LIBS) @NATIVE_LINKER_FALSE@ifuncmain2picstatic$(EXEEXT): $(ifuncmain2picstatic_OBJECTS) $(ifuncmain2picstatic_DEPENDENCIES) @NATIVE_LINKER_FALSE@ @rm -f ifuncmain2picstatic$(EXEEXT) @NATIVE_LINKER_FALSE@ $(LINK) $(ifuncmain2picstatic_OBJECTS) $(ifuncmain2picstatic_LDADD) $(LIBS) @@ -2671,6 +2741,9 @@ @IFUNC_FALSE@ifuncmain4picstatic$(EXEEXT): $(ifuncmain4picstatic_OBJECTS) $(ifuncmain4picstatic_DEPENDENCIES) @IFUNC_FALSE@ @rm -f ifuncmain4picstatic$(EXEEXT) @IFUNC_FALSE@ $(LINK) $(ifuncmain4picstatic_OBJECTS) $(ifuncmain4picstatic_LDADD) $(LIBS) +@IFUNC_STATIC_FALSE@ifuncmain4picstatic$(EXEEXT): $(ifuncmain4picstatic_OBJECTS) $(ifuncmain4picstatic_DEPENDENCIES) +@IFUNC_STATIC_FALSE@ @rm -f ifuncmain4picstatic$(EXEEXT) +@IFUNC_STATIC_FALSE@ $(LINK) $(ifuncmain4picstatic_OBJECTS) $(ifuncmain4picstatic_LDADD) $(LIBS) @NATIVE_LINKER_FALSE@ifuncmain4picstatic$(EXEEXT): $(ifuncmain4picstatic_OBJECTS) $(ifuncmain4picstatic_DEPENDENCIES) @NATIVE_LINKER_FALSE@ @rm -f ifuncmain4picstatic$(EXEEXT) @NATIVE_LINKER_FALSE@ $(LINK) $(ifuncmain4picstatic_OBJECTS) $(ifuncmain4picstatic_LDADD) $(LIBS) @@ -2698,6 +2771,9 @@ @IFUNC_FALSE@ifuncmain5picstatic$(EXEEXT): $(ifuncmain5picstatic_OBJECTS) $(ifuncmain5picstatic_DEPENDENCIES) @IFUNC_FALSE@ @rm -f ifuncmain5picstatic$(EXEEXT) @IFUNC_FALSE@ $(LINK) $(ifuncmain5picstatic_OBJECTS) $(ifuncmain5picstatic_LDADD) $(LIBS) +@IFUNC_STATIC_FALSE@ifuncmain5picstatic$(EXEEXT): $(ifuncmain5picstatic_OBJECTS) $(ifuncmain5picstatic_DEPENDENCIES) +@IFUNC_STATIC_FALSE@ @rm -f ifuncmain5picstatic$(EXEEXT) +@IFUNC_STATIC_FALSE@ $(LINK) $(ifuncmain5picstatic_OBJECTS) $(ifuncmain5picstatic_LDADD) $(LIBS) @NATIVE_LINKER_FALSE@ifuncmain5picstatic$(EXEEXT): $(ifuncmain5picstatic_OBJECTS) $(ifuncmain5picstatic_DEPENDENCIES) @NATIVE_LINKER_FALSE@ @rm -f ifuncmain5picstatic$(EXEEXT) @NATIVE_LINKER_FALSE@ $(LINK) $(ifuncmain5picstatic_OBJECTS) $(ifuncmain5picstatic_LDADD) $(LIBS) @@ -2752,6 +2828,9 @@ @IFUNC_FALSE@ifuncmain7picstatic$(EXEEXT): $(ifuncmain7picstatic_OBJECTS) $(ifuncmain7picstatic_DEPENDENCIES) @IFUNC_FALSE@ @rm -f ifuncmain7picstatic$(EXEEXT) @IFUNC_FALSE@ $(LINK) $(ifuncmain7picstatic_OBJECTS) $(ifuncmain7picstatic_LDADD) $(LIBS) +@IFUNC_STATIC_FALSE@ifuncmain7picstatic$(EXEEXT): $(ifuncmain7picstatic_OBJECTS) $(ifuncmain7picstatic_DEPENDENCIES) +@IFUNC_STATIC_FALSE@ @rm -f ifuncmain7picstatic$(EXEEXT) +@IFUNC_STATIC_FALSE@ $(LINK) $(ifuncmain7picstatic_OBJECTS) $(ifuncmain7picstatic_LDADD) $(LIBS) @NATIVE_LINKER_FALSE@ifuncmain7picstatic$(EXEEXT): $(ifuncmain7picstatic_OBJECTS) $(ifuncmain7picstatic_DEPENDENCIES) @NATIVE_LINKER_FALSE@ @rm -f ifuncmain7picstatic$(EXEEXT) @NATIVE_LINKER_FALSE@ $(LINK) $(ifuncmain7picstatic_OBJECTS) $(ifuncmain7picstatic_LDADD) $(LIBS) @@ -2770,6 +2849,15 @@ ifuncvar$(EXEEXT): $(ifuncvar_OBJECTS) $(ifuncvar_DEPENDENCIES) @rm -f ifuncvar$(EXEEXT) $(ifuncvar_LINK) $(ifuncvar_OBJECTS) $(ifuncvar_LDADD) $(LIBS) +@DEFAULT_TARGET_X86_64_FALSE@incremental_comdat_test_1$(EXEEXT): $(incremental_comdat_test_1_OBJECTS) $(incremental_comdat_test_1_DEPENDENCIES) +@DEFAULT_TARGET_X86_64_FALSE@ @rm -f incremental_comdat_test_1$(EXEEXT) +@DEFAULT_TARGET_X86_64_FALSE@ $(LINK) $(incremental_comdat_test_1_OBJECTS) $(incremental_comdat_test_1_LDADD) $(LIBS) +@GCC_FALSE@incremental_comdat_test_1$(EXEEXT): $(incremental_comdat_test_1_OBJECTS) $(incremental_comdat_test_1_DEPENDENCIES) +@GCC_FALSE@ @rm -f incremental_comdat_test_1$(EXEEXT) +@GCC_FALSE@ $(LINK) $(incremental_comdat_test_1_OBJECTS) $(incremental_comdat_test_1_LDADD) $(LIBS) +@NATIVE_LINKER_FALSE@incremental_comdat_test_1$(EXEEXT): $(incremental_comdat_test_1_OBJECTS) $(incremental_comdat_test_1_DEPENDENCIES) +@NATIVE_LINKER_FALSE@ @rm -f incremental_comdat_test_1$(EXEEXT) +@NATIVE_LINKER_FALSE@ $(LINK) $(incremental_comdat_test_1_OBJECTS) $(incremental_comdat_test_1_LDADD) $(LIBS) @DEFAULT_TARGET_X86_64_FALSE@incremental_common_test_1$(EXEEXT): $(incremental_common_test_1_OBJECTS) $(incremental_common_test_1_DEPENDENCIES) @DEFAULT_TARGET_X86_64_FALSE@ @rm -f incremental_common_test_1$(EXEEXT) @DEFAULT_TARGET_X86_64_FALSE@ $(LINK) $(incremental_common_test_1_OBJECTS) $(incremental_common_test_1_LDADD) $(LIBS) @@ -3220,6 +3308,7 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ifuncmain7picstatic.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ifuncmain7pie.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ifuncvar3.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/incremental_comdat_test_1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/incremental_common_test_1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/incremental_copy_test.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/incremental_test_2.Po@am__quote@ @@ -3604,6 +3693,8 @@ @p='plugin_test_6.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) plugin_test_7.sh.log: plugin_test_7.sh @p='plugin_test_7.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +plugin_final_layout.sh.log: plugin_final_layout.sh + @p='plugin_final_layout.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) exclude_libs_test.sh.log: exclude_libs_test.sh @p='exclude_libs_test.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) discard_locals_test.sh.log: discard_locals_test.sh @@ -3636,6 +3727,8 @@ @p='arm_fix_v4bx.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) arm_attr_merge.sh.log: arm_attr_merge.sh @p='arm_attr_merge.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +arm_fix_1176.sh.log: arm_fix_1176.sh + @p='arm_fix_1176.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) arm_cortex_a8.sh.log: arm_cortex_a8.sh @p='arm_cortex_a8.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) arm_exidx_test.sh.log: arm_exidx_test.sh @@ -3644,6 +3737,14 @@ @p='pr12826.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) arm_unaligned_reloc.sh.log: arm_unaligned_reloc.sh @p='arm_unaligned_reloc.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +arm_farcall_arm_arm.sh.log: arm_farcall_arm_arm.sh + @p='arm_farcall_arm_arm.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +arm_farcall_arm_thumb.sh.log: arm_farcall_arm_thumb.sh + @p='arm_farcall_arm_thumb.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +arm_farcall_thumb_thumb.sh.log: arm_farcall_thumb_thumb.sh + @p='arm_farcall_thumb_thumb.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +arm_farcall_thumb_arm.sh.log: arm_farcall_thumb_arm.sh + @p='arm_farcall_thumb_arm.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) object_unittest.log: object_unittest$(EXEEXT) @p='object_unittest$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) binary_unittest.log: binary_unittest$(EXEEXT) @@ -3934,6 +4035,8 @@ @p='incremental_copy_test$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) incremental_common_test_1.log: incremental_common_test_1$(EXEEXT) @p='incremental_common_test_1$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) +incremental_comdat_test_1.log: incremental_comdat_test_1$(EXEEXT) + @p='incremental_comdat_test_1$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) .test.log: @p='$<'; $(am__check_pre) $(TEST_LOG_COMPILE) "$$tst" $(am__check_post) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @@ -4714,6 +4817,17 @@ @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ $(COMPILE) -c -o $@ $< @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@unused.c: @GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ @cp /dev/null $@ +@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@plugin_final_layout.o: plugin_final_layout.cc +@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ $(CXXCOMPILE) -O0 -c -ffunction-sections -fdata-sections -g -o $@ $< +@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@plugin_final_layout: plugin_final_layout.o plugin_section_order.so gcctestdir/ld +@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ $(CXXLINK) -Bgcctestdir/ -Wl,--plugin,"./plugin_section_order.so" plugin_final_layout.o +@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@plugin_final_layout.stdout: plugin_final_layout +@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ $(TEST_NM) -n plugin_final_layout > plugin_final_layout.stdout + +@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@plugin_section_order.so: plugin_section_order.o +@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ $(LINK) -Bgcctestdir/ -shared plugin_section_order.o +@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@plugin_section_order.o: plugin_section_order.c +@GCC_TRUE@@NATIVE_LINKER_TRUE@@PLUGINS_TRUE@ $(COMPILE) -O0 -c -fpic -o $@ $< @GCC_TRUE@@NATIVE_LINKER_TRUE@exclude_libs_test.syms: exclude_libs_test @GCC_TRUE@@NATIVE_LINKER_TRUE@ $(TEST_READELF) -sW $< >$@ 2>/dev/null @GCC_TRUE@@NATIVE_LINKER_TRUE@libexclude_libs_test_1.a: exclude_libs_test_1.o @@ -4794,8 +4908,8 @@ @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ $(COMPILE) -c -fpic -o $@ $< @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain1pie.o: ifuncmain1.c @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ $(COMPILE) -c -fpie -o $@ $< -@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain1picstatic: ifuncmain1pic.o ifuncmod1.o gcctestdir/ld -@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ $(LINK) -Bgcctestdir/ -static ifuncmain1pic.o ifuncmod1.o +@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain1picstatic: ifuncmain1pic.o ifuncmod1.o gcctestdir/ld +@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ $(LINK) -Bgcctestdir/ -static ifuncmain1pic.o ifuncmod1.o @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain1pic: ifuncmain1pic.o ifuncmod1.so gcctestdir/ld @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ $(LINK) -Bgcctestdir/ ifuncmain1pic.o ifuncmod1.so -Wl,-R,. @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain1vispic.o: ifuncmain1vis.c @@ -4818,8 +4932,8 @@ @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncdep2pic.o: ifuncdep2.c @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ $(COMPILE) -c -fpic -o $@ $< -@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain2picstatic: ifuncmain2pic.o ifuncdep2pic.o gcctestdir/ld -@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ $(LINK) -Bgcctestdir/ -static ifuncmain2pic.o ifuncdep2pic.o +@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain2picstatic: ifuncmain2pic.o ifuncdep2pic.o gcctestdir/ld +@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ $(LINK) -Bgcctestdir/ -static ifuncmain2pic.o ifuncdep2pic.o @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain2pic: ifuncmain2pic.o ifuncdep2pic.o gcctestdir/ld @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ $(LINK) -Bgcctestdir/ ifuncmain2pic.o ifuncdep2pic.o @@ -4830,8 +4944,8 @@ @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain4pic.o: ifuncmain4.c @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ $(COMPILE) -c -fpic -o $@ $< -@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain4picstatic: ifuncmain4pic.o gcctestdir/ld -@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ $(LINK) -Bgcctestdir/ -static ifuncmain4pic.o +@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain4picstatic: ifuncmain4pic.o gcctestdir/ld +@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ $(LINK) -Bgcctestdir/ -static ifuncmain4pic.o @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain5pic.o: ifuncmain5.c @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ $(COMPILE) -c -fpic -o $@ $< @@ -4846,8 +4960,8 @@ @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncdep5.o: ifuncmod5.c @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ $(COMPILE) -c -o $@ $< -@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain5picstatic: ifuncmain5pic.o ifuncmod5.o gcctestdir/ld -@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ $(LINK) -Bgcctestdir/ -static ifuncmain5pic.o ifuncmod5.o +@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain5picstatic: ifuncmain5pic.o ifuncmod5.o gcctestdir/ld +@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ $(LINK) -Bgcctestdir/ -static ifuncmain5pic.o ifuncmod5.o @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain5pic: ifuncmain5pic.o ifuncmod5.so gcctestdir/ld @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ $(LINK) -Bgcctestdir/ ifuncmain5pic.o ifuncmod5.so -Wl,-R,. @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain5staticpic: ifuncmain5pic.o ifuncmod5.o gcctestdir/ld @@ -4870,8 +4984,8 @@ @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain7pie.o: ifuncmain7.c @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ $(COMPILE) -c -fpie -o $@ $< -@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain7picstatic: ifuncmain7pic.o gcctestdir/ld -@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ $(LINK) -Bgcctestdir/ -static ifuncmain7pic.o +@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain7picstatic: ifuncmain7pic.o gcctestdir/ld +@GCC_TRUE@@HAVE_STATIC_TRUE@@IFUNC_STATIC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ $(LINK) -Bgcctestdir/ -static ifuncmain7pic.o @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain7pic: ifuncmain7pic.o gcctestdir/ld @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ $(LINK) -Bgcctestdir/ ifuncmain7pic.o @GCC_TRUE@@IFUNC_TRUE@@NATIVE_LINKER_TRUE@ifuncmain7pie: ifuncmain7pie.o gcctestdir/ld @@ -4984,6 +5098,15 @@ @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ @sleep 1 @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ cp -f common_test_1_v2.o common_test_1_tmp.o @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXLINK) -Wl,--incremental-update -Bgcctestdir/ common_test_1_tmp.o +@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@incremental_comdat_test_1: incr_comdat_test_1.o incr_comdat_test_2_v1.o incr_comdat_test_2_v2.o incr_comdat_test_2_v3.o gcctestdir/ld +@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ cp -f incr_comdat_test_2_v1.o incr_comdat_test_1_tmp.o +@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXLINK) -Wl,--incremental-full,--incremental-patch=100 -Bgcctestdir/ incr_comdat_test_1.o incr_comdat_test_1_tmp.o +@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ @sleep 1 +@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ cp -f incr_comdat_test_2_v2.o incr_comdat_test_1_tmp.o +@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXLINK) -Wl,--incremental-update -Bgcctestdir/ incr_comdat_test_1.o incr_comdat_test_1_tmp.o +@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ @sleep 1 +@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ cp -f incr_comdat_test_2_v3.o incr_comdat_test_1_tmp.o +@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXLINK) -Wl,--incremental-update -Bgcctestdir/ incr_comdat_test_1.o incr_comdat_test_1_tmp.o @NATIVE_OR_CROSS_LINKER_TRUE@script_test_10.o: script_test_10.s @NATIVE_OR_CROSS_LINKER_TRUE@ $(TEST_AS) -o $@ $< @NATIVE_OR_CROSS_LINKER_TRUE@script_test_10: $(srcdir)/script_test_10.t script_test_10.o gcctestdir/ld @@ -5075,7 +5198,7 @@ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ $(TEST_OBJDUMP) -D $< > $@ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@thumb_bl_in_range: thumb_bl_in_range.o ../ld-new -@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ ../ld-new -T $(srcdir)/thumb_branch_range.t -o $@ $< +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ ../ld-new --no-fix-arm1176 -T $(srcdir)/thumb_branch_range.t -o $@ $< @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@thumb_bl_in_range.o: thumb_bl_in_range.s @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ $(TEST_AS) -o $@ -march=armv5te $< @@ -5084,7 +5207,7 @@ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ $(TEST_OBJDUMP) -D $< > $@ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@thumb_bl_out_of_range: thumb_bl_out_of_range.o ../ld-new -@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ ../ld-new -T $(srcdir)/thumb_branch_range.t -o $@ $< +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ ../ld-new --no-fix-arm1176 -T $(srcdir)/thumb_branch_range.t -o $@ $< @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@thumb_bl_out_of_range.o: thumb_bl_out_of_range.s @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ $(TEST_AS) -o $@ -march=armv5te $< @@ -5111,7 +5234,7 @@ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ $(TEST_OBJDUMP) -D $< > $@ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@thumb_blx_in_range: thumb_blx_in_range.o ../ld-new -@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ ../ld-new -T $(srcdir)/thumb_branch_range.t -o $@ $< +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ ../ld-new --no-fix-arm1176 -T $(srcdir)/thumb_branch_range.t -o $@ $< @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@thumb_blx_in_range.o: thumb_blx_in_range.s @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ $(TEST_AS) -o $@ -march=armv5te $< @@ -5120,7 +5243,7 @@ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ $(TEST_OBJDUMP) -D $< > $@ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@thumb_blx_out_of_range: thumb_blx_out_of_range.o ../ld-new -@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ ../ld-new -T $(srcdir)/thumb_branch_range.t -o $@ $< +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ ../ld-new --no-fix-arm1176 -T $(srcdir)/thumb_branch_range.t -o $@ $< @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@thumb_blx_out_of_range.o: thumb_blx_out_of_range.s @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ $(TEST_AS) -o $@ -march=armv5te $< @@ -5147,7 +5270,7 @@ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ $(TEST_OBJDUMP) -D $< > $@ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@thumb_bl_out_of_range_local: thumb_bl_out_of_range_local.o ../ld-new -@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ ../ld-new -T $(srcdir)/thumb_branch_range.t -o $@ $< +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ ../ld-new --no-fix-arm1176 -T $(srcdir)/thumb_branch_range.t -o $@ $< @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@thumb_bl_out_of_range_local.o: thumb_bl_out_of_range_local.s @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ $(TEST_AS) -o $@ -march=armv5te $< @@ -5174,7 +5297,7 @@ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ $(TEST_OBJDUMP) -D -j.text $< > $@ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_fix_v4bx: arm_fix_v4bx.o ../ld-new -@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ ../ld-new --fix-v4bx -o $@ $< +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ ../ld-new --no-fix-arm1176 --fix-v4bx -o $@ $< @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_fix_v4bx.o: arm_fix_v4bx.s @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ $(TEST_AS) -o $@ $< @@ -5183,13 +5306,13 @@ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ $(TEST_OBJDUMP) -D -j.text $< > $@ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_fix_v4bx_interworking: arm_fix_v4bx.o ../ld-new -@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ ../ld-new --fix-v4bx-interworking -o $@ $< +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ ../ld-new --no-fix-arm1176 --fix-v4bx-interworking -o $@ $< @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_no_fix_v4bx.stdout: arm_no_fix_v4bx @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ $(TEST_OBJDUMP) -D -j.text $< > $@ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_no_fix_v4bx: arm_fix_v4bx.o ../ld-new -@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ ../ld-new -o $@ $< +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ ../ld-new --no-fix-arm1176 -o $@ $< @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_attr_merge_6.stdout: arm_attr_merge_6 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ $(TEST_READELF) -A $< > $@ @@ -5221,6 +5344,60 @@ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_attr_merge_7b.o: arm_attr_merge_7b.s @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ $(TEST_AS) -o $@ $< +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_fix_1176_default_v6z.stdout: arm_fix_1176_default_v6z +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ $(TEST_OBJDUMP) -D -j.foo $< > $@ + +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_fix_1176_default_v6z: arm_fix_1176_default_v6z.o ../ld-new +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ ../ld-new --section-start=.foo=0x2001014 -o $@ $< + +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_fix_1176_default_v6z.o: arm_fix_1176.s +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ $(TEST_AS) -march=armv6z -o $@ $< + +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_fix_1176_on_v6z.stdout: arm_fix_1176_on_v6z +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ $(TEST_OBJDUMP) -D -j.foo $< > $@ + +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_fix_1176_on_v6z: arm_fix_1176_on_v6z.o ../ld-new +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ ../ld-new --section-start=.foo=0x2001014 --fix-arm1176 -o $@ $< + +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_fix_1176_on_v6z.o: arm_fix_1176.s +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ $(TEST_AS) -march=armv6z -o $@ $< + +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_fix_1176_off_v6z.stdout: arm_fix_1176_off_v6z +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ $(TEST_OBJDUMP) -D -j.foo $< > $@ + +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_fix_1176_off_v6z: arm_fix_1176_off_v6z.o ../ld-new +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ ../ld-new --section-start=.foo=0x2001014 --no-fix-arm1176 -o $@ $< + +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_fix_1176_off_v6z.o: arm_fix_1176.s +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ $(TEST_AS) -march=armv6z -o $@ $< + +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_fix_1176_default_v5te.stdout: arm_fix_1176_default_v5te +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ $(TEST_OBJDUMP) -D -j.foo $< > $@ + +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_fix_1176_default_v5te: arm_fix_1176_default_v5te.o ../ld-new +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ ../ld-new --section-start=.foo=0x2001014 -o $@ $< + +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_fix_1176_default_v5te.o: arm_fix_1176.s +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ $(TEST_AS) -march=armv5te -o $@ $< + +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_fix_1176_default_v7a.stdout: arm_fix_1176_default_v7a +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ $(TEST_OBJDUMP) -D -j.foo $< > $@ + +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_fix_1176_default_v7a: arm_fix_1176_default_v7a.o ../ld-new +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ ../ld-new --section-start=.foo=0x2001014 -o $@ $< + +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_fix_1176_default_v7a.o: arm_fix_1176.s +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ $(TEST_AS) -march=armv7-a -o $@ $< + +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_fix_1176_default_1156t2f_s.stdout: arm_fix_1176_default_1156t2f_s +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ $(TEST_OBJDUMP) -D -j.foo $< > $@ + +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_fix_1176_default_1156t2f_s: arm_fix_1176_default_1156t2f_s.o ../ld-new +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ ../ld-new --section-start=.foo=0x2001014 -o $@ $< + +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_fix_1176_default_1156t2f_s.o: arm_fix_1176.s +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ $(TEST_AS) -mcpu=arm1156t2f-s -o $@ $< + @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_cortex_a8_b_cond.stdout: arm_cortex_a8_b_cond @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ $(TEST_OBJDUMP) -D -j.text $< > $@ @@ -5299,12 +5476,99 @@ @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_unaligned_reloc.stdout: arm_unaligned_reloc @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ $(TEST_OBJDUMP) -D $< > $@ +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_unaligned_reloc_r.stdout: arm_unaligned_reloc_r +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ $(TEST_OBJDUMP) -Dr $< > $@ + @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_unaligned_reloc: arm_unaligned_reloc.o ../ld-new @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ ../ld-new -o $@ $< +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_unaligned_reloc_r: arm_unaligned_reloc.o ../ld-new +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ ../ld-new -r -o $@ $< + @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_unaligned_reloc.o: arm_unaligned_reloc.s @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ $(TEST_AS) -o $@ $< +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_farcall_arm_arm.stdout: arm_farcall_arm_arm +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ $(TEST_OBJDUMP) -d $< > $@ + +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_farcall_arm_arm: arm_farcall_arm_arm.o ../ld-new +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ ../ld-new --no-fix-arm1176 --section-start .text=0x1000 --section-start .foo=0x2001020 -o $@ $< + +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_farcall_arm_arm.o: arm_farcall_arm_arm.s +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ $(TEST_AS) -o $@ $< + +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_farcall_arm_thumb.stdout: arm_farcall_arm_thumb +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ $(TEST_OBJDUMP) -D $< > $@ + +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_farcall_arm_thumb: arm_farcall_arm_thumb.o ../ld-new +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ ../ld-new --section-start .text=0x1000 --section-start .foo=0x2001014 -o $@ $< + +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_farcall_arm_thumb.o: arm_farcall_arm_thumb.s +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ $(TEST_AS) -o $@ $< + +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_farcall_arm_thumb_5t.stdout: arm_farcall_arm_thumb_5t +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ $(TEST_OBJDUMP) -D $< > $@ + +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_farcall_arm_thumb_5t: arm_farcall_arm_thumb_5t.o ../ld-new +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ ../ld-new --no-fix-arm1176 --section-start .text=0x1000 --section-start .foo=0x2001014 -o $@ $< + +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_farcall_arm_thumb_5t.o: arm_farcall_arm_thumb.s +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ $(TEST_AS) -march=armv5t -o $@ $< + +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_farcall_thumb_thumb.stdout: arm_farcall_thumb_thumb +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ $(TEST_OBJDUMP) -D $< > $@ + +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_farcall_thumb_thumb: arm_farcall_thumb_thumb.o ../ld-new +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ ../ld-new --section-start .text=0x1000 --section-start .foo=0x2001014 -o $@ $< + +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_farcall_thumb_thumb.o: arm_farcall_thumb_thumb.s +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ $(TEST_AS) -march=armv4t -o $@ $< + +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_farcall_thumb_thumb_5t.stdout: arm_farcall_thumb_thumb_5t +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ $(TEST_OBJDUMP) -D $< > $@ + +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_farcall_thumb_thumb_5t: arm_farcall_thumb_thumb_5t.o ../ld-new +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ ../ld-new --no-fix-arm1176 --section-start .text=0x1000 --section-start .foo=0x2001014 -o $@ $< + +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_farcall_thumb_thumb_5t.o: arm_farcall_thumb_thumb.s +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ $(TEST_AS) -march=armv5t -o $@ $< + +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_farcall_thumb_thumb_7m.stdout: arm_farcall_thumb_thumb_7m +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ $(TEST_OBJDUMP) -D $< > $@ + +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_farcall_thumb_thumb_7m: arm_farcall_thumb_thumb_7m.o ../ld-new +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ ../ld-new --section-start .text=0x1000 --section-start .foo=0x2001014 -o $@ $< + +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_farcall_thumb_thumb_7m.o: arm_farcall_thumb_thumb.s +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ $(TEST_AS) -march=armv7-m -o $@ $< + +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_farcall_thumb_thumb_6m.stdout: arm_farcall_thumb_thumb_6m +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ $(TEST_OBJDUMP) -D $< > $@ + +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_farcall_thumb_thumb_6m: arm_farcall_thumb_thumb_6m.o ../ld-new +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ ../ld-new --section-start .text=0x1000 --section-start .foo=0x2001014 -o $@ $< + +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_farcall_thumb_thumb_6m.o: arm_farcall_thumb_thumb.s +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ $(TEST_AS) -march=armv6-m -o $@ $< + +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_farcall_thumb_arm.stdout: arm_farcall_thumb_arm +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ $(TEST_OBJDUMP) -D $< > $@ + +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_farcall_thumb_arm: arm_farcall_thumb_arm.o ../ld-new +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ ../ld-new --section-start .text=0x1c01010 --section-start .foo=0x2001014 -o $@ $< + +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_farcall_thumb_arm.o: arm_farcall_thumb_arm.s +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ $(TEST_AS) -o $@ $< + +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_farcall_thumb_arm_5t.stdout: arm_farcall_thumb_arm_5t +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ $(TEST_OBJDUMP) -D $< > $@ + +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_farcall_thumb_arm_5t: arm_farcall_thumb_arm_5t.o ../ld-new +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ ../ld-new --no-fix-arm1176 --section-start .text=0x1c01010 --section-start .foo=0x2001014 -o $@ $< + +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_farcall_thumb_arm_5t.o: arm_farcall_thumb_arm.s +@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ $(TEST_AS) -march=armv5t -o $@ $< + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT:
/testsuite/incr_comdat_test_2_v2.cc
0,0 → 1,44
// incr_comdat_test_2.cc -- test incremental update with comdat sections
 
// Copyright 2011 Free Software Foundation, Inc.
// Written by Cary Coutant <ccoutant@google.com>.
 
// This file is part of gold.
 
// 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
// the Free Software Foundation; either version 3 of the License, or
// (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
// Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
// MA 02110-1301, USA.
 
template <class T>
T GetMax(T a, T b)
{
return a > b ? a : b;
}
 
class A
{
public:
int sum(int k)
{
static int total = 0;
total += k;
return total;
}
};
 
int foo()
{
A a;
return GetMax<int>(10, a.sum(9));
}
/testsuite/arm_farcall_arm_thumb.s
0,0 → 1,20
@ Test to ensure that a ARM to Thumb call exceeding 32Mb generates a stub.
 
.global _start
.global bar
.syntax unified
 
@ We will place the section .text at 0x1000.
 
.text
 
_start:
bl bar
 
@ We will place the section .foo at 0x2001010.
 
.section .foo, "xa"
.thumb_func
bar:
bx lr
 
/testsuite/arm_farcall_arm_arm.sh
0,0 → 1,44
#!/bin/sh
 
# arm_farcall_arm_arm.sh -- a test case for ARM->ARM farcall veneers
 
# Copyright 2010, 2011, Free Software Foundation, Inc.
# Written by Matthew Gretton-Dann <matthew.gretton-dann@arm.com>
# Based upon arm_cortex_a8.sh
# Written by Doug Kwan <dougkwan@google.com>.
 
# This file is part of gold.
 
# 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
# the Free Software Foundation; either version 3 of the License, or
# (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
# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
# MA 02110-1301, USA.
 
check()
{
if ! grep -q "$2" "$1"
then
echo "Did not find expected instruction in $1:"
echo " $2"
echo ""
echo "Actual instructions below:"
cat "$1"
exit 1
fi
}
 
# Check for ARM->ARM default
check arm_farcall_arm_arm.stdout "1004: .* ldr pc, \[pc, #-4\] .*"
check arm_farcall_arm_arm.stdout "1008: 02001020"
 
exit 0
testsuite/arm_farcall_arm_arm.sh Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: testsuite/script_test_2.t =================================================================== --- testsuite/script_test_2.t (revision 159) +++ testsuite/script_test_2.t (revision 163) @@ -49,7 +49,7 @@ /* This should match the remaining sections. */ *(.gold_test) - . = . + 4; + . = 60; start_data = .; BYTE(1) SHORT(2)
/testsuite/plugin_test_2.sh
45,7 → 45,7
check plugin_test_2.err "two_file_test_1.syms: claim file hook called"
check plugin_test_2.err "two_file_test_1b.syms: claim file hook called"
check plugin_test_2.err "two_file_shared_2.so: claim file hook called"
check plugin_test_2.err "two_file_test_1.syms: _Z4f13iv: PREVAILING_DEF_REG"
check plugin_test_2.err "two_file_test_1.syms: _Z4f13iv: PREVAILING_DEF_IRONLY_EXP"
check plugin_test_2.err "two_file_test_1.syms: _Z2t2v: PREVAILING_DEF_REG"
check plugin_test_2.err "two_file_test_1.syms: v2: RESOLVED_DYN"
check plugin_test_2.err "two_file_test_1.syms: t17data: RESOLVED_DYN"
/testsuite/arm_farcall_thumb_arm.s
0,0 → 1,27
@ Test to ensure that a Thumb to ARM call exceeding 4Mb generates a stub.
@ Check that we can generate two types of stub in the same section.
 
.global _start
.syntax unified
 
@ We will place the section .text at 0x1c01010.
 
.text
.thumb_func
_start:
.global bar
bl bar
@ This call is close enough to generate a "short branch" stub
@ or no stub if blx is available.
.space 0x0300000
bl bar
 
@ We will place the section .foo at 0x2001014.
 
.section .foo, "xa"
 
.arm
.type bar, %function
bar:
bx lr
 
/testsuite/arm_fix_1176.sh
0,0 → 1,61
#!/bin/sh
 
# arm_fix_1176.sh -- a test case for the ARM1176 workaround.
 
# Copyright 2010, 2011, Free Software Foundation, Inc.
# Written by Matthew Gretton-Dann <matthew.gretton-dann@arm.com>
# Based upon arm_cortex_a8.sh
# Written by Doug Kwan <dougkwan@google.com>.
 
# This file is part of gold.
 
# 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
# the Free Software Foundation; either version 3 of the License, or
# (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
# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
# MA 02110-1301, USA.
 
# This file goes with arm_v4bx.s, an ARM assembly source file constructed to
# have test the handling of R_ARM_V4BX relocation.
 
check()
{
if ! grep -q "$2" "$1"
then
echo "Did not find expected instruction in $1:"
echo " $2"
echo ""
echo "Actual instructions below:"
cat "$1"
exit 1
fi
}
 
# Check for fix default state on v6Z.
check arm_fix_1176_default_v6z.stdout "2001014: .* bl 2001018 <.*>"
 
# Check for fix explicitly on on v6Z.
check arm_fix_1176_on_v6z.stdout "2001014: .* bl 2001018 <.*>"
 
# Check for explicitly off on v6Z
check arm_fix_1176_off_v6z.stdout "2001014: .* blx 2001018 <.*>"
 
# Check for fix default state on v5TE
check arm_fix_1176_default_v5te.stdout "2001014: .* bl 2001018 <.*>"
 
# Check for fix default state on v7A
check arm_fix_1176_default_v7a.stdout "2001014: .* blx 2001018 <.*>"
 
# Check for fix default state on ARM1156T2F-S
check arm_fix_1176_default_1156t2f_s.stdout "2001014: .* blx 2001018 <.*>"
 
exit 0
testsuite/arm_fix_1176.sh Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: parameters.h =================================================================== --- parameters.h (revision 159) +++ parameters.h (revision 163) @@ -28,6 +28,7 @@ class General_options; class Errors; +class Timer; class Target; template class Sized_target; @@ -57,6 +58,9 @@ set_errors(Errors* errors); void + set_timer(Timer* timer); + + void set_options(const General_options* options); void @@ -70,6 +74,11 @@ errors() const { return this->errors_; } + // Return the timer object. + Timer* + timer() const + { return this->timer_; } + // Whether the options are valid. This should not normally be // called, but it is needed by gold_exit. bool @@ -177,6 +186,7 @@ friend class Set_parameters_target_once; Errors* errors_; + Timer* timer_; const General_options* options_; Target* target_; bool doing_static_link_valid_; @@ -196,6 +206,9 @@ set_parameters_errors(Errors* errors); extern void +set_parameters_timer(Timer* timer); + +extern void set_parameters_options(const General_options* options); extern void
/object.cc
1149,7 → 1149,6
section_size_type section_names_size;
const unsigned char* symbols_data = NULL;
section_size_type symbols_size;
section_offset_type external_symbols_offset;
const unsigned char* symbol_names_data = NULL;
section_size_type symbol_names_size;
1159,7 → 1158,6
section_names_size = gc_sd->section_names_size;
symbols_data = gc_sd->symbols_data;
symbols_size = gc_sd->symbols_size;
external_symbols_offset = gc_sd->external_symbols_offset;
symbol_names_data = gc_sd->symbol_names_data;
symbol_names_size = gc_sd->symbol_names_size;
}
1170,7 → 1168,6
if (sd->symbols != NULL)
symbols_data = sd->symbols->data();
symbols_size = sd->symbols_size;
external_symbols_offset = sd->external_symbols_offset;
if (sd->symbol_names != NULL)
symbol_names_data = sd->symbol_names->data();
symbol_names_size = sd->symbol_names_size;
1347,9 → 1344,7
Incremental_inputs* incremental_inputs = layout->incremental_inputs();
if (incremental_inputs != NULL
&& !discard
&& (shdr.get_sh_type() == elfcpp::SHT_PROGBITS
|| shdr.get_sh_type() == elfcpp::SHT_NOBITS
|| shdr.get_sh_type() == elfcpp::SHT_NOTE))
&& can_incremental_update(shdr.get_sh_type()))
{
off_t sh_size = shdr.get_sh_size();
section_size_type uncompressed_size;
1582,8 → 1577,6
p != eh_frame_sections.end();
++p)
{
gold_assert(external_symbols_offset != 0);
 
unsigned int i = *p;
const unsigned char* pshdr;
pshdr = section_headers_data + i * This::shdr_size;
/yyscript.y
528,6 → 528,8
nothing, we accept it and ignore it. */
}
| SORT_BY_NAME '(' CONSTRUCTORS ')'
| INCLUDE string
{ script_include_directive(closure, $2.value, $2.length); }
| ';'
;
 
689,6 → 691,8
| assignment end
| ASSERT_K '(' parse_exp ',' string ')'
{ script_add_assertion(closure, $3, $5.value, $5.length); }
| INCLUDE string
{ script_include_directive(closure, $2.value, $2.length); }
;
 
/* A list of MEMORY definitions. */
/fileread.cc
329,6 → 329,10
File_read::find_view(off_t start, section_size_type size,
unsigned int byteshift, File_read::View** vshifted) const
{
gold_assert(start <= this->size_
&& (static_cast<unsigned long long>(size)
<= static_cast<unsigned long long>(this->size_ - start)));
 
if (vshifted != NULL)
*vshifted = NULL;
 
456,17 → 460,10
unsigned int byteshift, bool cache)
{
gold_assert(size > 0);
gold_assert(start <= this->size_
&& (static_cast<unsigned long long>(size)
<= static_cast<unsigned long long>(this->size_ - start)));
 
// Check that start and end of the view are within the file.
if (start > this->size_
|| (static_cast<unsigned long long>(size)
> static_cast<unsigned long long>(this->size_ - start)))
gold_fatal(_("%s: attempt to map %lld bytes at offset %lld exceeds "
"size of file; the file may be corrupt"),
this->filename().c_str(),
static_cast<long long>(size),
static_cast<long long>(start));
 
off_t poff = File_read::page_offset(start);
 
section_size_type psize = File_read::pages(size + (start - poff));
523,6 → 520,16
File_read::find_or_make_view(off_t offset, off_t start,
section_size_type size, bool aligned, bool cache)
{
// Check that start and end of the view are within the file.
if (start > this->size_
|| (static_cast<unsigned long long>(size)
> static_cast<unsigned long long>(this->size_ - start)))
gold_fatal(_("%s: attempt to map %lld bytes at offset %lld exceeds "
"size of file; the file may be corrupt"),
this->filename().c_str(),
static_cast<long long>(size),
static_cast<long long>(start));
 
unsigned int byteshift;
if (offset == 0)
byteshift = 0;
/layout.h
522,6 → 522,10
const char* name, const elfcpp::Shdr<size, big_endian>& shdr,
unsigned int reloc_shndx, unsigned int reloc_type, off_t* offset);
 
std::map<Section_id, unsigned int>*
get_section_order_map()
{ return &this->section_order_map_; }
bool
is_section_ordering_specified()
{ return this->section_ordering_specified_; }
1322,6 → 1326,9
Segment_states* segment_states_;
// A relaxation debug checker. We only create one when in debugging mode.
Relaxation_debug_check* relaxation_debug_check_;
// Plugins specify section_ordering using this map. This is set in
// update_section_order in plugin.cc
std::map<Section_id, unsigned int> section_order_map_;
// Hash a pattern to its position in the section ordering file.
Unordered_map<std::string, unsigned int> input_section_position_;
// Vector of glob only patterns in the section_ordering file.
/i386.cc
2709,12 → 2709,6
}
if (optimized_type == tls::TLSOPT_TO_IE)
{
if (tls_segment == NULL)
{
gold_assert(parameters->errors()->error_count() > 0
|| issue_undefined_symbol_error(gsym));
return;
}
this->tls_gd_to_ie(relinfo, relnum, tls_segment, rel, r_type,
got_offset, view, view_size);
break;
/configure
599,9 → 599,13
HAVE_ZLIB_TRUE
LIBOBJS
LFS_CFLAGS
GOLD_LDADD
GOLD_LDFLAGS
WARN_CXXFLAGS
NO_WERROR
WARN_CFLAGS
IFUNC_STATIC_FALSE
IFUNC_STATIC_TRUE
IFUNC_FALSE
IFUNC_TRUE
RANDOM_SEED_CFLAGS
671,6 → 675,7
LDFLAGS
CFLAGS
CC
NM
TARGETOBJS
DEFAULT_TARGET_X86_64_FALSE
DEFAULT_TARGET_X86_64_TRUE
770,10 → 775,13
enable_threads
enable_plugins
enable_targets
with_lib_path
enable_dependency_tracking
enable_nls
enable_werror
enable_build_warnings
with_gold_ldflags
with_gold_ldadd
enable_maintainer_mode
'
ac_precious_vars='build_alias
1428,6 → 1436,9
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
--without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
--with-sysroot=DIR search for usr/lib et al within DIR
--with-lib-path=dir1:dir2... set default LIB_PATH
--with-gold-ldflags=FLAGS additional link flags for gold
--with-gold-ldadd=LIBS additional libraries for gold
 
Some influential environment variables:
CC C compiler command
3526,6 → 3537,122
_ACEOF
 
 
 
# Check whether --with-lib-path was given.
if test "${with_lib_path+set}" = set; then :
withval=$with_lib_path; case "$withval" in
yes) LIB_PATH='"/lib:/usr/lib"' ;;
no) LIB_PATH='""' ;;
*) LIB_PATH='"'"$withval"'"' ;;
esac
else
LIB_PATH='"::DEFAULT::"'
fi
 
 
cat >>confdefs.h <<_ACEOF
#define LIB_PATH $LIB_PATH
_ACEOF
 
if test "x$target_alias" = "x" -o "x$host_alias" = "x$target_alias"; then
 
$as_echo "#define NATIVE_LINKER 1" >>confdefs.h
 
fi
 
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}nm", so it can be a program name with args.
set dummy ${ac_tool_prefix}nm; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
if test "${ac_cv_prog_NM+set}" = set; then :
$as_echo_n "(cached) " >&6
else
if test -n "$NM"; then
ac_cv_prog_NM="$NM" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_prog_NM="${ac_tool_prefix}nm"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS
 
fi
fi
NM=$ac_cv_prog_NM
if test -n "$NM"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $NM" >&5
$as_echo "$NM" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
 
 
fi
if test -z "$ac_cv_prog_NM"; then
ac_ct_NM=$NM
# Extract the first word of "nm", so it can be a program name with args.
set dummy nm; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
if test "${ac_cv_prog_ac_ct_NM+set}" = set; then :
$as_echo_n "(cached) " >&6
else
if test -n "$ac_ct_NM"; then
ac_cv_prog_ac_ct_NM="$ac_ct_NM" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_prog_ac_ct_NM="nm"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS
 
fi
fi
ac_ct_NM=$ac_cv_prog_ac_ct_NM
if test -n "$ac_ct_NM"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NM" >&5
$as_echo "$ac_ct_NM" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
 
if test "x$ac_ct_NM" = x; then
NM=""
else
case $cross_compiling:$ac_tool_warned in
yes:)
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
NM=$ac_ct_NM
fi
else
NM="$ac_cv_prog_NM"
fi
 
 
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
6381,12 → 6508,14
fi
 
 
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for glibc >= 2.11" >&5
$as_echo_n "checking for glibc >= 2.11... " >&6; }
if test "${gold_cv_lib_glibc2_11+set}" = set; then :
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for glibc ifunc support" >&5
$as_echo_n "checking for glibc ifunc support... " >&6; }
if test "${gold_cv_lib_glibc_ifunc+set}" = set; then :
$as_echo_n "(cached) " >&6
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
save_LDFLAGS="$LDFLAGS"
LDFLAGS="$LDFLAGS -static"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
 
#include <features.h>
6395,20 → 6524,39
#elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 11)
error
#endif
__asm__(".type foo, %gnu_indirect_function");
void func (void) { }
void invoke (void);
__asm__(".type invoke, %gnu_indirect_function");
typedef void (*funcptr) (void);
funcptr dispatch (void) __asm__ ("invoke");
funcptr dispatch (void) { return &func; }
int
main ()
{
invoke();
;
return 0;
}
 
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
gold_cv_lib_glibc2_11=yes
if ac_fn_c_try_link "$LINENO"; then :
 
if ${NM} conftest$EXEEXT | grep "__rela\?_iplt_start" >/dev/null 2>&1; then
gold_cv_lib_glibc_ifunc=both
else
gold_cv_lib_glibc2_11=no
gold_cv_lib_glibc_ifunc=dyn
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
else
gold_cv_lib_glibc_ifunc=no
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gold_cv_lib_glibc2_11" >&5
$as_echo "$gold_cv_lib_glibc2_11" >&6; }
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LDFLAGS="$save_LDFLAGS"
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gold_cv_lib_glibc_ifunc" >&5
$as_echo "$gold_cv_lib_glibc_ifunc" >&6; }
 
if test "$gold_cv_lib_glibc2_11" = "yes"; then
if test "$gold_cv_lib_glibc_ifunc" != "no"; then
IFUNC_TRUE=
IFUNC_FALSE='#'
else
6416,8 → 6564,16
IFUNC_FALSE=
fi
 
if test "$gold_cv_lib_glibc_ifunc" = "both"; then
IFUNC_STATIC_TRUE=
IFUNC_STATIC_FALSE='#'
else
IFUNC_STATIC_TRUE='#'
IFUNC_STATIC_FALSE=
fi
 
 
 
GCC_WARN_CFLAGS="-W -Wall -Wstrict-prototypes -Wmissing-prototypes"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
6494,6 → 6650,34
WARN_CXXFLAGS=`echo ${WARN_CFLAGS} | sed -e 's/-Wstrict-prototypes//' -e 's/-Wmissing-prototypes//' -e 's/-Wshadow//'`
 
 
 
# Check whether --with-gold-ldflags was given.
if test "${with_gold_ldflags+set}" = set; then :
withval=$with_gold_ldflags; if test "$withval" = "no" -o "$withval" = "yes"; then
GOLD_LDFLAGS=
else
GOLD_LDFLAGS=$withval
fi
else
GOLD_LDFLAGS=
fi
 
 
 
 
# Check whether --with-gold-ldadd was given.
if test "${with_gold_ldadd+set}" = set; then :
withval=$with_gold_ldadd; if test "$withval" = "no" -o "$withval" = "yes"; then
GOLD_LDADD=
else
GOLD_LDADD=$withval
fi
else
GOLD_LDADD=
fi
 
 
 
LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
 
 
7353,6 → 7537,10
as_fn_error "conditional \"IFUNC\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
if test -z "${IFUNC_STATIC_TRUE}" && test -z "${IFUNC_STATIC_FALSE}"; then
as_fn_error "conditional \"IFUNC_STATIC\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
if test -z "${HAVE_ZLIB_TRUE}" && test -z "${HAVE_ZLIB_FALSE}"; then
as_fn_error "conditional \"HAVE_ZLIB\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
/plugin.cc
78,6 → 78,9
get_symbols(const void *handle, int nsyms, struct ld_plugin_symbol *syms);
 
static enum ld_plugin_status
get_symbols_v2(const void *handle, int nsyms, struct ld_plugin_symbol *syms);
 
static enum ld_plugin_status
add_input_file(const char *pathname);
 
static enum ld_plugin_status
156,7 → 159,7
sscanf(ver, "%d.%d", &major, &minor);
 
// Allocate and populate a transfer vector.
const int tv_fixed_size = 23;
const int tv_fixed_size = 24;
 
int tv_size = this->args_.size() + tv_fixed_size;
ld_plugin_tv* tv = new ld_plugin_tv[tv_size];
228,6 → 231,10
tv[i].tv_u.tv_get_symbols = get_symbols;
 
++i;
tv[i].tv_tag = LDPT_GET_SYMBOLS_V2;
tv[i].tv_u.tv_get_symbols = get_symbols_v2;
 
++i;
tv[i].tv_tag = LDPT_ADD_INPUT_FILE;
tv[i].tv_u.tv_add_input_file = add_input_file;
 
810,11 → 817,13
{
}
 
// Return TRUE if a defined symbol might be reachable from outside the
// universe of claimed objects.
// Return TRUE if a defined symbol is referenced from outside the
// universe of claimed objects. Only references from relocatable,
// non-IR (unclaimed) objects count as a reference. References from
// dynamic objects count only as "visible".
 
static inline bool
is_visible_from_outside(Symbol* lsym)
is_referenced_from_outside(Symbol* lsym)
{
if (lsym->in_real_elf())
return true;
822,6 → 831,17
return true;
if (parameters->options().is_undefined(lsym->name()))
return true;
return false;
}
 
// Return TRUE if a defined symbol might be reachable from outside the
// load module.
 
static inline bool
is_visible_from_outside(Symbol* lsym)
{
if (lsym->in_dyn())
return true;
if (parameters->options().export_dynamic() || parameters->options().shared())
return lsym->is_externally_visible();
return false;
830,8 → 850,18
// Get symbol resolution info.
 
ld_plugin_status
Pluginobj::get_symbol_resolution_info(int nsyms, ld_plugin_symbol* syms) const
Pluginobj::get_symbol_resolution_info(int nsyms,
ld_plugin_symbol* syms,
int version) const
{
// For version 1 of this interface, we cannot use
// LDPR_PREVAILING_DEF_IRONLY_EXP, so we return LDPR_PREVAILING_DEF
// instead.
const ld_plugin_symbol_resolution ldpr_prevailing_def_ironly_exp
= (version > 1
? LDPR_PREVAILING_DEF_IRONLY_EXP
: LDPR_PREVAILING_DEF);
 
if (nsyms > this->nsyms_)
return LDPS_NO_SYMS;
 
862,9 → 892,14
if (lsym->source() != Symbol::FROM_OBJECT)
res = LDPR_RESOLVED_EXEC;
else if (lsym->object()->pluginobj() == this)
res = (is_visible_from_outside(lsym)
? LDPR_PREVAILING_DEF
: LDPR_PREVAILING_DEF_IRONLY);
{
if (is_referenced_from_outside(lsym))
res = LDPR_PREVAILING_DEF;
else if (is_visible_from_outside(lsym))
res = ldpr_prevailing_def_ironly_exp;
else
res = LDPR_PREVAILING_DEF_IRONLY;
}
else if (lsym->object()->pluginobj() != NULL)
res = LDPR_RESOLVED_IR;
else if (lsym->object()->is_dynamic())
878,9 → 913,14
if (lsym->source() != Symbol::FROM_OBJECT)
res = LDPR_PREEMPTED_REG;
else if (lsym->object() == static_cast<const Object*>(this))
res = (is_visible_from_outside(lsym)
? LDPR_PREVAILING_DEF
: LDPR_PREVAILING_DEF_IRONLY);
{
if (is_referenced_from_outside(lsym))
res = LDPR_PREVAILING_DEF;
else if (is_visible_from_outside(lsym))
res = ldpr_prevailing_def_ironly_exp;
else
res = LDPR_PREVAILING_DEF_IRONLY;
}
else
res = (lsym->object()->pluginobj() != NULL
? LDPR_PREEMPTED_IR
1208,14 → 1248,18
return NULL;
}
 
// Get symbol counts. Not used for plugin objects.
// Get symbol counts. Don't count plugin objects; the replacement
// files will provide the counts.
 
template<int size, bool big_endian>
void
Sized_pluginobj<size, big_endian>::do_get_global_symbol_counts(const Symbol_table*,
size_t*, size_t*) const
Sized_pluginobj<size, big_endian>::do_get_global_symbol_counts(
const Symbol_table*,
size_t* defined,
size_t* used) const
{
gold_unreachable();
*defined = 0;
*used = 0;
}
 
// Get symbols. Not used for plugin objects.
1411,9 → 1455,26
Pluginobj* plugin_obj = obj->pluginobj();
if (plugin_obj == NULL)
return LDPS_ERR;
return plugin_obj->get_symbol_resolution_info(nsyms, syms);
return plugin_obj->get_symbol_resolution_info(nsyms, syms, 1);
}
 
// Version 2 of the above. The only difference is that this version
// is allowed to return the resolution code LDPR_PREVAILING_DEF_IRONLY_EXP.
 
static enum ld_plugin_status
get_symbols_v2(const void* handle, int nsyms, ld_plugin_symbol* syms)
{
gold_assert(parameters->options().has_plugins());
Object* obj = parameters->options().plugins()->object(
static_cast<unsigned int>(reinterpret_cast<intptr_t>(handle)));
if (obj == NULL)
return LDPS_ERR;
Pluginobj* plugin_obj = obj->pluginobj();
if (plugin_obj == NULL)
return LDPS_ERR;
return plugin_obj->get_symbol_resolution_info(nsyms, syms, 2);
}
 
// Add a new (real) input file generated by a plugin.
 
static enum ld_plugin_status
1577,7 → 1638,7
// which they should appear in the final layout.
 
static enum ld_plugin_status
update_section_order(const struct ld_plugin_section *section_list,
update_section_order(const struct ld_plugin_section* section_list,
unsigned int num_sections)
{
gold_assert(parameters->options().has_plugins());
1588,8 → 1649,14
if (section_list == NULL)
return LDPS_ERR;
 
std::map<Section_id, unsigned int> order_map;
Layout* layout = parameters->options().plugins()->layout();
gold_assert (layout != NULL);
 
std::map<Section_id, unsigned int>* order_map
= layout->get_section_order_map();
 
/* Store the mapping from Section_id to section position in layout's
order_map to consult after output sections are added. */
for (unsigned int i = 0; i < num_sections; ++i)
{
Object* obj = parameters->options().plugins()->get_elf_object(
1598,17 → 1665,9
return LDPS_BAD_HANDLE;
unsigned int shndx = section_list[i].shndx;
Section_id secn_id(obj, shndx);
order_map[secn_id] = i + 1;
(*order_map)[secn_id] = i + 1;
}
 
Layout* layout = parameters->options().plugins()->layout();
gold_assert (layout != NULL);
 
for (Layout::Section_list::const_iterator p = layout->section_list().begin();
p != layout->section_list().end();
++p)
(*p)->update_section_layout(order_map);
 
return LDPS_OK;
}
 
/symtab.cc
602,20 → 602,16
}
 
void
Symbol_table::gc_mark_symbol_for_shlib(Symbol* sym)
Symbol_table::gc_mark_symbol(Symbol* sym)
{
if (!sym->is_from_dynobj()
&& sym->is_externally_visible())
// Add the object and section to the work list.
Relobj* obj = static_cast<Relobj*>(sym->object());
bool is_ordinary;
unsigned int shndx = sym->shndx(&is_ordinary);
if (is_ordinary && shndx != elfcpp::SHN_UNDEF)
{
//Add the object and section to the work list.
Relobj* obj = static_cast<Relobj*>(sym->object());
bool is_ordinary;
unsigned int shndx = sym->shndx(&is_ordinary);
if (is_ordinary && shndx != elfcpp::SHN_UNDEF)
{
gold_assert(this->gc_!= NULL);
this->gc_->worklist().push(Section_id(obj, shndx));
}
gold_assert(this->gc_!= NULL);
this->gc_->worklist().push(Section_id(obj, shndx));
}
}
 
626,16 → 622,7
{
if (sym->in_dyn() && sym->source() == Symbol::FROM_OBJECT
&& !sym->object()->is_dynamic())
{
Relobj* obj = static_cast<Relobj*>(sym->object());
bool is_ordinary;
unsigned int shndx = sym->shndx(&is_ordinary);
if (is_ordinary && shndx != elfcpp::SHN_UNDEF)
{
gold_assert(this->gc_ != NULL);
this->gc_->worklist().push(Section_id(obj, shndx));
}
}
this->gc_mark_symbol(sym);
}
 
// Make TO a symbol which forwards to FROM.
1143,6 → 1130,14
bool is_default_version = false;
bool is_forced_local = false;
 
// FIXME: For incremental links, we don't store version information,
// so we need to ignore version symbols for now.
if (parameters->incremental_update() && ver != NULL)
{
namelen = ver - name;
ver = NULL;
}
 
if (ver != NULL)
{
// The symbol name is of the form foo@VERSION or foo@@VERSION
1243,11 → 1238,16
if (is_forced_local)
this->force_local(res);
 
// If building a shared library using garbage collection, do not
// treat externally visible symbols as garbage.
if (parameters->options().gc_sections()
&& parameters->options().shared())
this->gc_mark_symbol_for_shlib(res);
// Do not treat this symbol as garbage if this symbol will be
// exported to the dynamic symbol table. This is true when
// building a shared library or using --export-dynamic and
// the symbol is externally visible.
if (parameters->options().gc_sections()
&& res->is_externally_visible()
&& !res->is_from_dynobj()
&& (parameters->options().shared()
|| parameters->options().export_dynamic()))
this->gc_mark_symbol(res);
 
if (is_defined_in_discarded_section)
res->set_is_defined_in_discarded_section();
1346,6 → 1346,11
return;
}
 
// FIXME: For incremental links, we don't store version information,
// so we need to ignore version symbols for now.
if (parameters->incremental_update())
versym = NULL;
 
if (versym != NULL && versym_size / 2 < count)
{
dynobj->error(_("too few symbol versions"));
1683,7 → 1688,9
return NULL;
 
*pname = oldsym->name();
if (!is_default_version)
if (is_default_version)
*pversion = this->namepool_.add(*pversion, true, NULL);
else
*pversion = oldsym->version();
}
else
2807,6 → 2814,12
typename elfcpp::Elf_types<size>::Elf_Addr sym_value = sym->value();
typename elfcpp::Elf_types<size>::Elf_Addr dynsym_value = sym_value;
elfcpp::STB binding = sym->binding();
 
// If --no-gnu-unique is set, change STB_GNU_UNIQUE to STB_GLOBAL.
if (binding == elfcpp::STB_GNU_UNIQUE
&& !parameters->options().gnu_unique())
binding = elfcpp::STB_GLOBAL;
 
switch (sym->source())
{
case Symbol::FROM_OBJECT:
/symtab.h
993,7 → 993,12
// index, not one of the special codes from SHN_LORESERVE to
// SHN_HIRESERVE (bit 29).
bool is_ordinary_shndx_ : 1;
// True if we've seen this symbol in a real ELF object (bit 30).
// True if we've seen this symbol in a "real" ELF object (bit 30).
// If the symbol has been seen in a relocatable, non-IR, object file,
// it's known to be referenced from outside the IR. A reference from
// a dynamic object doesn't count as a "real" ELF, and we'll simply
// mark the symbol as "visible" from outside the IR. The compiler
// can use this distinction to guide its handling of COMDAT symbols.
bool in_real_elf_ : 1;
// True if this symbol is defined in a section which was discarded
// (bit 31).
1308,10 → 1313,9
void
gc_mark_undef_symbols(Layout*);
 
// During garbage collection, this ensures externally visible symbols
// are not treated as garbage while building shared objects.
// This tells garbage collection that this symbol is referenced.
void
gc_mark_symbol_for_shlib(Symbol* sym);
gc_mark_symbol(Symbol* sym);
 
// During garbage collection, this keeps sections that correspond to
// symbols seen in dynamic objects.
/output.h
1033,12 → 1033,14
Output_reloc(Sized_relobj<size, big_endian>* relobj,
unsigned int local_sym_index, unsigned int type,
Output_data* od, Address address, bool is_relative,
bool is_symbolless, bool is_section_symbol);
bool is_symbolless, bool is_section_symbol,
bool use_plt_offset);
 
Output_reloc(Sized_relobj<size, big_endian>* relobj,
unsigned int local_sym_index, unsigned int type,
unsigned int shndx, Address address, bool is_relative,
bool is_symbolless, bool is_section_symbol);
bool is_symbolless, bool is_section_symbol,
bool use_plt_offset);
 
// A reloc against the STT_SECTION symbol of an output section.
 
1216,7 → 1218,7
// input file.
unsigned int local_sym_index_;
// The reloc type--a processor specific code.
unsigned int type_ : 29;
unsigned int type_ : 28;
// True if the relocation is a RELATIVE relocation.
bool is_relative_ : 1;
// True if the relocation is one which should not use
1224,6 → 1226,10
bool is_symbolless_ : 1;
// True if the relocation is against a section symbol.
bool is_section_symbol_ : 1;
// True if the addend should be the PLT offset. This is used only
// for RELATIVE relocations to local symbols.
// (Used only for RELA, but stored here for space.)
bool use_plt_offset_ : 1;
// If the reloc address is an input section in an object, the
// section index. This is INVALID_CODE if the reloc address is
// specified in some other way.
1268,9 → 1274,10
unsigned int local_sym_index, unsigned int type,
Output_data* od, Address address,
Addend addend, bool is_relative,
bool is_symbolless, bool is_section_symbol)
bool is_symbolless, bool is_section_symbol,
bool use_plt_offset)
: rel_(relobj, local_sym_index, type, od, address, is_relative,
is_symbolless, is_section_symbol),
is_symbolless, is_section_symbol, use_plt_offset),
addend_(addend)
{ }
 
1278,9 → 1285,10
unsigned int local_sym_index, unsigned int type,
unsigned int shndx, Address address,
Addend addend, bool is_relative,
bool is_symbolless, bool is_section_symbol)
bool is_symbolless, bool is_section_symbol,
bool use_plt_offset)
: rel_(relobj, local_sym_index, type, shndx, address, is_relative,
is_symbolless, is_section_symbol),
is_symbolless, is_section_symbol, use_plt_offset),
addend_(addend)
{ }
 
1571,7 → 1579,7
Output_data* od, Address address)
{
this->add(od, Output_reloc_type(relobj, local_sym_index, type, od,
address, false, false, false));
address, false, false, false, false));
}
 
void
1580,7 → 1588,7
Output_data* od, unsigned int shndx, Address address)
{
this->add(od, Output_reloc_type(relobj, local_sym_index, type, shndx,
address, false, false, false));
address, false, false, false, false));
}
 
// Add a RELATIVE reloc against a local symbol.
1591,7 → 1599,7
Output_data* od, Address address)
{
this->add(od, Output_reloc_type(relobj, local_sym_index, type, od,
address, true, true, false));
address, true, true, false, false));
}
 
void
1600,7 → 1608,7
Output_data* od, unsigned int shndx, Address address)
{
this->add(od, Output_reloc_type(relobj, local_sym_index, type, shndx,
address, true, true, false));
address, true, true, false, false));
}
 
// Add a local relocation which does not use a symbol for the relocation,
1612,7 → 1620,7
Output_data* od, Address address)
{
this->add(od, Output_reloc_type(relobj, local_sym_index, type, od,
address, false, true, false));
address, false, true, false, false));
}
 
void
1622,7 → 1630,7
Address address)
{
this->add(od, Output_reloc_type(relobj, local_sym_index, type, shndx,
address, false, true, false));
address, false, true, false, false));
}
 
// Add a reloc against a local section symbol. This will be
1635,7 → 1643,7
Output_data* od, Address address)
{
this->add(od, Output_reloc_type(relobj, input_shndx, type, od,
address, false, false, true));
address, false, false, true, false));
}
 
void
1644,7 → 1652,7
Output_data* od, unsigned int shndx, Address address)
{
this->add(od, Output_reloc_type(relobj, input_shndx, type, shndx,
address, false, false, true));
address, false, false, true, false));
}
 
// A reloc against the STT_SECTION symbol of an output section.
1767,7 → 1775,7
Output_data* od, Address address, Addend addend)
{
this->add(od, Output_reloc_type(relobj, local_sym_index, type, od, address,
addend, false, false, false));
addend, false, false, false, false));
}
 
void
1777,7 → 1785,8
Addend addend)
{
this->add(od, Output_reloc_type(relobj, local_sym_index, type, shndx,
address, addend, false, false, false));
address, addend, false, false, false,
false));
}
 
// Add a RELATIVE reloc against a local symbol.
1785,10 → 1794,12
void
add_local_relative(Sized_relobj<size, big_endian>* relobj,
unsigned int local_sym_index, unsigned int type,
Output_data* od, Address address, Addend addend)
Output_data* od, Address address, Addend addend,
bool use_plt_offset)
{
this->add(od, Output_reloc_type(relobj, local_sym_index, type, od, address,
addend, true, true, false));
addend, true, true, false,
use_plt_offset));
}
 
void
1795,10 → 1806,11
add_local_relative(Sized_relobj<size, big_endian>* relobj,
unsigned int local_sym_index, unsigned int type,
Output_data* od, unsigned int shndx, Address address,
Addend addend)
Addend addend, bool use_plt_offset)
{
this->add(od, Output_reloc_type(relobj, local_sym_index, type, shndx,
address, addend, true, true, false));
address, addend, true, true, false,
use_plt_offset));
}
 
// Add a local relocation which does not use a symbol for the relocation,
1810,7 → 1822,7
Output_data* od, Address address, Addend addend)
{
this->add(od, Output_reloc_type(relobj, local_sym_index, type, od, address,
addend, false, true, false));
addend, false, true, false, false));
}
 
void
1820,7 → 1832,8
Address address, Addend addend)
{
this->add(od, Output_reloc_type(relobj, local_sym_index, type, shndx,
address, addend, false, true, false));
address, addend, false, true, false,
false));
}
 
// Add a reloc against a local section symbol. This will be
1833,7 → 1846,7
Output_data* od, Address address, Addend addend)
{
this->add(od, Output_reloc_type(relobj, input_shndx, type, od, address,
addend, false, false, true));
addend, false, false, true, false));
}
 
void
1843,7 → 1856,8
Addend addend)
{
this->add(od, Output_reloc_type(relobj, input_shndx, type, shndx,
address, addend, false, false, true));
address, addend, false, false, true,
false));
}
 
// A reloc against the STT_SECTION symbol of an output section.
2761,7 → 2775,7
typedef std::map<Section_id, unsigned int> Section_layout_order;
 
void
update_section_layout(const Section_layout_order& order_map);
update_section_layout(const Section_layout_order* order_map);
 
// Update the output section flags based on input section flags.
void
/sparc.cc
265,7 → 265,7
{
public:
Relocate()
: ignore_gd_add_(false)
: ignore_gd_add_(false), reloc_adjust_addr_(NULL)
{ }
 
~Relocate()
302,6 → 302,9
 
// Ignore the next relocation which should be R_SPARC_TLS_GD_ADD
bool ignore_gd_add_;
 
// If we hit a reloc at this view address, adjust it back by 4 bytes.
unsigned char *reloc_adjust_addr_;
};
 
// A class which returns the size required for a relocation type,
1852,7 → 1855,7
rela_dyn->add_local_relative(object, r_sym, elfcpp::R_SPARC_RELATIVE,
output_section, data_shndx,
reloc.get_r_offset(),
reloc.get_r_addend());
reloc.get_r_addend(), false);
}
break;
 
1943,7 → 1946,7
object->set_local_got_offset(r_sym, GOT_TYPE_STANDARD, off);
rela_dyn->add_local_relative(object, r_sym,
elfcpp::R_SPARC_RELATIVE,
got, off, 0);
got, off, 0, false);
}
}
else
2622,6 → 2625,8
return false;
}
}
if (this->reloc_adjust_addr_ == view)
view -= 4;
 
typedef Sparc_relocate_functions<size, big_endian> Reloc;
 
3101,7 → 3106,15
wv += 1;
this->ignore_gd_add_ = true;
}
 
else
{
// Even if the delay slot isn't the TLS_GD_ADD
// instruction, we still have to handle the case
// where it sets up %o0 in some other way.
elfcpp::Swap<32, true>::writeval(wv, val);
wv += 1;
this->reloc_adjust_addr_ = view + 4;
}
// call __tls_get_addr --> add %g7, %o0, %o0
elfcpp::Swap<32, true>::writeval(wv, 0x9001c008);
break;
/resolve.cc
296,7 → 296,7
 
// Record if we've seen this symbol in a real ELF object (i.e., the
// symbol is referenced from outside the world known to the plugin).
if (object->pluginobj() == NULL)
if (object->pluginobj() == NULL && !object->is_dynamic())
to->set_in_real_elf();
 
// If we're processing replacement files, allow new symbols to override
/readsyms.cc
161,8 → 161,10
Read_symbols::run(Workqueue* workqueue)
{
// If we didn't queue a new task, then we need to explicitly unblock
// the token.
if (!this->do_read_symbols(workqueue))
// the token. If the object is a member of a lib group, however,
// the token was already added to the list of locks for the task,
// and it will be unblocked automatically at the end of the task.
if (!this->do_read_symbols(workqueue) && this->member_ == NULL)
workqueue->queue_soon(new Unblock_token(this->this_blocker_,
this->next_blocker_));
}
/script-sections.cc
680,7 → 680,7
set_section_addresses(Symbol_table* symtab, Layout* layout,
uint64_t* dot_value, uint64_t*, uint64_t*)
{
this->assignment_.set_if_absolute(symtab, layout, true, *dot_value);
this->assignment_.set_if_absolute(symtab, layout, true, *dot_value, NULL);
}
 
// Print for debugging.
714,7 → 714,7
// output section definition the dot symbol is always considered
// to be absolute.
*dot_value = this->val_->eval_with_dot(symtab, layout, true, *dot_value,
NULL, NULL, NULL);
NULL, NULL, NULL, false);
}
 
// Update the dot symbol while setting section addresses.
724,7 → 724,7
uint64_t* load_address)
{
*dot_value = this->val_->eval_with_dot(symtab, layout, false, *dot_value,
NULL, NULL, dot_alignment);
NULL, NULL, dot_alignment, false);
*load_address = *dot_value;
}
 
866,9 → 866,11
void
set_section_addresses(Symbol_table* symtab, Layout* layout, Output_section*,
uint64_t, uint64_t* dot_value, uint64_t*,
Output_section**, std::string*, Input_section_list*)
Output_section** dot_section, std::string*,
Input_section_list*)
{
this->assignment_.set_if_absolute(symtab, layout, true, *dot_value);
this->assignment_.set_if_absolute(symtab, layout, true, *dot_value,
*dot_section);
}
 
// Print for debugging.
892,6 → 894,12
: val_(val)
{ }
 
// An assignment to dot within an output section is enough to force
// the output section to exist.
bool
needs_output_section() const
{ return true; }
 
// Finalize the symbol.
void
finalize_symbols(Symbol_table* symtab, const Layout* layout,
898,7 → 906,8
uint64_t* dot_value, Output_section** dot_section)
{
*dot_value = this->val_->eval_with_dot(symtab, layout, true, *dot_value,
*dot_section, dot_section, NULL);
*dot_section, dot_section, NULL,
true);
}
 
// Update the dot symbol while setting section addresses.
905,7 → 914,8
void
set_section_addresses(Symbol_table* symtab, Layout* layout, Output_section*,
uint64_t, uint64_t* dot_value, uint64_t*,
Output_section**, std::string*, Input_section_list*);
Output_section** dot_section, std::string*,
Input_section_list*);
 
// Print for debugging.
void
936,7 → 946,8
{
uint64_t next_dot = this->val_->eval_with_dot(symtab, layout, false,
*dot_value, *dot_section,
dot_section, dot_alignment);
dot_section, dot_alignment,
true);
if (next_dot < *dot_value)
gold_error(_("dot may not move backward"));
if (next_dot > *dot_value && output_section != NULL)
1037,7 → 1048,8
{
uint64_t val = this->val_->eval_with_dot(this->symtab_, this->layout_,
true, this->dot_value_,
this->dot_section_, NULL, NULL);
this->dot_section_, NULL, NULL,
false);
 
if (parameters->target().is_big_endian())
this->endian_write_to_buffer<true>(val, buf);
1187,7 → 1199,7
Output_section* fill_section;
uint64_t fill_val = this->val_->eval_with_dot(symtab, layout, false,
*dot_value, *dot_section,
&fill_section, NULL);
&fill_section, NULL, false);
if (fill_section != NULL)
gold_warning(_("fill value is not absolute"));
// FIXME: The GNU linker supports fill values of arbitrary length.
2108,13 → 2120,13
{
address = this->address_->eval_with_dot(symtab, layout, true,
*dot_value, NULL,
NULL, NULL);
NULL, NULL, false);
}
if (this->align_ != NULL)
{
uint64_t align = this->align_->eval_with_dot(symtab, layout, true,
*dot_value, NULL,
NULL, NULL);
NULL, NULL, false);
address = align_address(address, align);
}
*dot_value = address;
2303,7 → 2315,7
else
address = this->address_->eval_with_dot(symtab, layout, true,
*dot_value, NULL, NULL,
dot_alignment);
dot_alignment, false);
uint64_t align;
if (this->align_ == NULL)
{
2316,7 → 2328,7
{
Output_section* align_section;
align = this->align_->eval_with_dot(symtab, layout, true, *dot_value,
NULL, &align_section, NULL);
NULL, &align_section, NULL, false);
if (align_section != NULL)
gold_warning(_("alignment of section %s is not absolute"),
this->name_.c_str());
2401,7 → 2413,7
laddr = this->load_address_->eval_with_dot(symtab, layout, true,
*dot_value,
this->output_section_,
NULL, NULL);
NULL, NULL, false);
if (this->output_section_ != NULL)
this->output_section_->set_load_address(laddr);
}
2416,7 → 2428,8
Output_section* subalign_section;
subalign = this->subalign_->eval_with_dot(symtab, layout, true,
*dot_value, NULL,
&subalign_section, NULL);
&subalign_section, NULL,
false);
if (subalign_section != NULL)
gold_warning(_("subalign of section %s is not absolute"),
this->name_.c_str());
2431,7 → 2444,7
uint64_t fill_val = this->fill_->eval_with_dot(symtab, layout, true,
*dot_value,
NULL, &fill_section,
NULL);
NULL, false);
if (fill_section != NULL)
gold_warning(_("fill of section %s is not absolute"),
this->name_.c_str());
/po/es.po
1,4 → 1,4
# Mensajes en español para gold 2.20.90.
# Mensajes en español para gold 2.21.53.
# Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
# This file is distributed under the same license as the binutils package.
# Cristian Othón Martínez Vera <cfuga@cfuga.mx>, 2008, 2009, 2010, 2011.
5,10 → 5,10
#
msgid ""
msgstr ""
"Project-Id-Version: gold 2.20.90\n"
"Project-Id-Version: gold 2.21.53\n"
"Report-Msgid-Bugs-To: bug-binutils@gnu.org\n"
"POT-Creation-Date: 2010-03-03 15:08+0100\n"
"PO-Revision-Date: 2011-08-24 11:49-0500\n"
"PO-Revision-Date: 2011-09-25 20:48-0500\n"
"Last-Translator: Cristian Othón Martínez Vera <cfuga@cfuga.mx>\n"
"Language-Team: Spanish <es@li.org>\n"
"Language: es\n"
/po/fi.po
1,81 → 1,171
# Finnish messages for gold.
# Copyright © 2010 Free Software Foundation, Inc.
# Copyright © 2010, 2011 Free Software Foundation, Inc.
# This file is distributed under the same license as the binutils package.
# Jorma Karvonen <karvonen.jorma@gmail.com>, 2010.
# Jorma Karvonen <karvonen.jorma@gmail.com>, 2010-2011.
#
msgid ""
msgstr ""
"Project-Id-Version: gold 2.20\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2008-09-09 17:16+0930\n"
"PO-Revision-Date: 2010-03-02 17:04+0200\n"
"Project-Id-Version: gold 2.21.53\n"
"Report-Msgid-Bugs-To: bug-binutils@gnu.org\n"
"POT-Creation-Date: 2010-03-03 15:08+0100\n"
"PO-Revision-Date: 2011-09-23 13:25+0200\n"
"Last-Translator: Jorma Karvonen <karvonen.jorma@gmail.com>\n"
"Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n"
"Language: fi\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
#: archive.cc:107
#: archive.cc:119
#, c-format
msgid "%s: no archive symbol table (run ranlib)"
msgstr "%s: ei arkistosymbolitaulua (suorita ranlib)"
 
#: archive.cc:189
#: archive.cc:204
#, c-format
msgid "%s: bad archive symbol table names"
msgstr "%s: virheelliset arkistosymbolitaulunimet"
 
#: archive.cc:221
#: archive.cc:236
#, c-format
msgid "%s: malformed archive header at %zu"
msgstr "%s: vääränmuotoinen arkisto-otsake siirrososoitteessa %zu"
 
#: archive.cc:241
#: archive.cc:256
#, c-format
msgid "%s: malformed archive header size at %zu"
msgstr "%s: vääränmuotoinen arkisto-otsakekoko siirrososoitteessa %zu"
 
#: archive.cc:252
#: archive.cc:267
#, c-format
msgid "%s: malformed archive header name at %zu"
msgstr "%s: vääränmuotoinen arkisto-otsakenimi siirrososoitteessa %zu"
 
#: archive.cc:282
#: archive.cc:297
#, c-format
msgid "%s: bad extended name index at %zu"
msgstr "%s: väärä laajennettu nimi-indeksi siirrososoitteessa %zu"
 
#: archive.cc:292
#: archive.cc:307
#, c-format
msgid "%s: bad extended name entry at header %zu"
msgstr "%s: väärä laajennettu nimimerkintä otsakeosoitteessa %zu"
 
#: archive.cc:389
#: archive.cc:404
#, c-format
msgid "%s: short archive header at %zu"
msgstr "%s: lyhyt arkisto-otsake siirrososoitteessa %zu"
 
#: archive.cc:530 archive.cc:545
#: archive.cc:560
#, c-format
msgid "%s: member at %zu is not an ELF object"
msgstr "%s: jäsen siirrososoitteessa %zu ei ole ELF-objekti"
 
#: archive.cc:775
#: archive.cc:879
#, c-format
msgid "%s: archive libraries: %u\n"
msgstr "%s: arkistokirjastot: %u\n"
 
#: archive.cc:777
#: archive.cc:881
#, c-format
msgid "%s: total archive members: %u\n"
msgstr "%s: yhteensä arkistojäseniä: %u\n"
 
#: archive.cc:779
#: archive.cc:883
#, c-format
msgid "%s: loaded archive members: %u\n"
msgstr "%s: ladattuja arkistojäseniä: %u\n"
 
#: arm.cc:1149 i386.cc:536 sparc.cc:1087 x86_64.cc:565
msgid "** PLT"
msgstr "** PLT"
 
# Report an unsupported relocation against a local symbol.
#: arm.cc:1364 i386.cc:880 powerpc.cc:1014 sparc.cc:1502 x86_64.cc:955
#: x86_64.cc:1265
#, c-format
msgid "%s: unsupported reloc %u against local symbol"
msgstr "%s: tukematon sijoitus %u paikallista symbolia kohtaan"
 
#: arm.cc:1404 powerpc.cc:1105 sparc.cc:1592 x86_64.cc:992
msgid "requires unsupported dynamic reloc; recompile with -fPIC"
msgstr "vaatii tukematonta dynaamista reloc-tietuetta, käännä uudelleen valitsimella -fPIC"
 
#. These are relocations which should only be seen by the
#. dynamic linker, and should never be seen here.
#: arm.cc:1519 arm.cc:1739 arm.cc:2354 i386.cc:1002 i386.cc:1334
#: powerpc.cc:1223 powerpc.cc:1432 sparc.cc:1877 sparc.cc:2238 x86_64.cc:1145
#: x86_64.cc:1453
#, c-format
msgid "%s: unexpected reloc %u in object file"
msgstr "%s: odottamaton sijoitus %u objektitiedostossa"
 
# Report an unsupported relocation against a global symbol.
#: arm.cc:1538 i386.cc:1171 powerpc.cc:1242 sparc.cc:1896 x86_64.cc:1279
#: x86_64.cc:1571
#, c-format
msgid "%s: unsupported reloc %u against global symbol %s"
msgstr "%s: tukematon sijoitus %u yleissymbolia %s kohtaan"
 
# Scan relocations for a section.
#: arm.cc:1804 i386.cc:1542
#, c-format
msgid "%s: unsupported RELA reloc section"
msgstr "%s: tukematon RELA-sijoituslohko"
 
#: arm.cc:2047
msgid "relocation R_ARM_MOVW_ABS_NC cannot be used when makinga shared object; recompile with -fPIC"
msgstr "sijoitusta R_ARM_MOVW_ABS_NC ei voi käyttää kun tehdään jaettua objektia: käännä uudelleen valitsimella -fPIC"
 
#: arm.cc:2056
msgid "relocation R_ARM_MOVT_ABS cannot be used when makinga shared object; recompile with -fPIC"
msgstr "sijoitusta R_ARM_MOVT_ABS ei voi käyttää kun tehdään jaettua objektia: käännä uudelleen valitsimella -fPIC"
 
#: arm.cc:2067
msgid "relocation R_ARM_THM_MOVW_ABS_NC cannot be used whenmaking a shared object; recompile with -fPIC"
msgstr "sijoitusta R_ARM_THM_MOVW_ABS_NC ei voi käyttää kun tehdään jaettua objektia: käännä uudelleen valitsimella -fPIC"
 
#: arm.cc:2077
msgid "relocation R_ARM_THM_MOVT_ABS cannot be used whenmaking a shared object; recompile with -fPIC"
msgstr "sijoitusta R_ARM_THM_MOVT_ABS ei voi käyttää kun tehdään jaettua objektia: käännä uudelleen valitsimella -fPIC"
 
#: arm.cc:2141
msgid "cannot find origin of R_ARM_BASE_PREL"
msgstr "ei voida löytää R_ARM_BASE_PREL-alkua"
 
#: arm.cc:2169
msgid "cannot find origin of R_ARM_BASE_ABS"
msgstr "ei voida löytää R_ARM_BASE_ABS-alkua"
 
#: arm.cc:2230 i386.cc:1820 i386.cc:2521 powerpc.cc:1798 sparc.cc:2711
#: x86_64.cc:1935 x86_64.cc:2518
#, c-format
msgid "unexpected reloc %u in object file"
msgstr "tukematon sijoitus %u objektitiedostossa"
 
#: arm.cc:2236 i386.cc:1852 i386.cc:1931 i386.cc:1983 i386.cc:2014
#: i386.cc:2076 powerpc.cc:1804 sparc.cc:2717 sparc.cc:2900 sparc.cc:2961
#: sparc.cc:3068 x86_64.cc:1956 x86_64.cc:2039 x86_64.cc:2094 x86_64.cc:2119
#, c-format
msgid "unsupported reloc %u"
msgstr "tukematon sijoitus %u"
 
#: arm.cc:2248
#, c-format
msgid "relocation overflow in relocation %u"
msgstr "sijoitusylivuoto sijoituksessa %u"
 
#: arm.cc:2256
#, c-format
msgid "unexpected opcode while processing relocation %u"
msgstr "odottamaton käskykoodi käsiteltäessä sijoitusta %u"
 
#: arm.cc:2359 i386.cc:2535
#, c-format
msgid "unsupported reloc %u in object file"
msgstr "tukematon sijoitus %u objektitiedostossa"
 
#: binary.cc:129
#, c-format
msgid "cannot open %s: %s:"
90,16 → 180,16
msgid "cannot open symbol count file %s: %s"
msgstr "ei voi avata symbolilukumäärätiedostoa %s: %s"
 
#: descriptors.cc:94
#: descriptors.cc:116
#, c-format
msgid "file %s was removed during the link"
msgstr "tiedosto %s poistettiin linkityksen aikana"
 
#: descriptors.cc:133
#: descriptors.cc:169
msgid "out of file descriptors and couldn't close any"
msgstr "ei ole enää tiedostokuvaajia eikä voitu sulkea yhtään"
 
#: descriptors.cc:154 descriptors.cc:189
#: descriptors.cc:190 descriptors.cc:226
#, c-format
msgid "while closing %s: %s"
msgstr "suljetaessa tiedostokuvaajaa %s: %s"
113,115 → 203,115
msgid "Unusually large LEB128 decoded, debug information may be corrupted"
msgstr "Epätavallisen iso LEB128 dekoodattu, vianjäljitystiedot saattavat olla vääristyneitä"
 
#: dynobj.cc:169
#: dynobj.cc:164
#, c-format
msgid "unexpected duplicate type %u section: %u, %u"
msgstr "odottamaton kaksoiskappaletyyppi %u lohko: %u, %u"
 
#: dynobj.cc:205
#: dynobj.cc:200
#, c-format
msgid "unexpected link in section %u header: %u != %u"
msgstr "odottamaton linkitys lohkossa %u otsake: %u != %u"
 
#: dynobj.cc:241
#: dynobj.cc:236
#, c-format
msgid "DYNAMIC section %u link out of range: %u"
msgstr "DYNAAMINEN lohko %u linkki lukualueen ulkopuolella: %u"
 
#: dynobj.cc:249
#: dynobj.cc:244
#, c-format
msgid "DYNAMIC section %u link %u is not a strtab"
msgstr "DYNAAMINEN lohko %u linkki %u ei ole ”strtab”"
 
#: dynobj.cc:278
#: dynobj.cc:273
#, c-format
msgid "DT_SONAME value out of range: %lld >= %lld"
msgstr "DT_SONAME-arvo lukualueen ulkopuolella: %lld >= %lld"
 
#: dynobj.cc:290
#: dynobj.cc:285
#, c-format
msgid "DT_NEEDED value out of range: %lld >= %lld"
msgstr "DT_NEEDED-arvo lukualueen ulkopuolella: %lld >= %lld"
 
#: dynobj.cc:303
#: dynobj.cc:298
msgid "missing DT_NULL in dynamic segment"
msgstr "puuttuva DT_NULL dynaamisessa segmentissä"
 
#: dynobj.cc:349
#: dynobj.cc:344
#, c-format
msgid "invalid dynamic symbol table name index: %u"
msgstr "virheellinen dynaaminen symbolitaulunimi-indeksi: %u"
 
#: dynobj.cc:356
#: dynobj.cc:351
#, c-format
msgid "dynamic symbol table name section has wrong type: %u"
msgstr "dynaamisella symbolitaulunimilohkolla on väärä tyyppi: %u"
 
#: dynobj.cc:443 object.cc:376 object.cc:884
#: dynobj.cc:438 object.cc:463 object.cc:1106
#, c-format
msgid "bad section name offset for section %u: %lu"
msgstr "väärä lohkonimisiirrososoite lohkolle %u: %lu"
 
#: dynobj.cc:472
#: dynobj.cc:468
#, c-format
msgid "duplicate definition for version %u"
msgstr "kaksoiskappalemäärittely versiolle %u"
 
#: dynobj.cc:501
#: dynobj.cc:497
#, c-format
msgid "unexpected verdef version %u"
msgstr "odottamaton verdef-versio %u"
 
#: dynobj.cc:517
#: dynobj.cc:513
#, c-format
msgid "verdef vd_cnt field too small: %u"
msgstr "verdef vd_cnt-kenttä liian pieni: %u"
 
#: dynobj.cc:525
#: dynobj.cc:521
#, c-format
msgid "verdef vd_aux field out of range: %u"
msgstr "verdef vd_aux-kenttä lukualueen ulkopuolella: %u"
 
#: dynobj.cc:536
#: dynobj.cc:532
#, c-format
msgid "verdaux vda_name field out of range: %u"
msgstr "verdaux vda_name -kenttä lukualueen ulkopuolella: %u"
 
#: dynobj.cc:546
#: dynobj.cc:542
#, c-format
msgid "verdef vd_next field out of range: %u"
msgstr "verdef vd_next -kenttää lukualueen ulkopuolella: %u"
msgstr "verdef vd_next -kenttä lukualueen ulkopuolella: %u"
 
#: dynobj.cc:580
#: dynobj.cc:576
#, c-format
msgid "unexpected verneed version %u"
msgstr "odottamaton verneed-versio %u"
 
#: dynobj.cc:589
#: dynobj.cc:585
#, c-format
msgid "verneed vn_aux field out of range: %u"
msgstr "verneed vn_aux-kenttä lukualueen ulkopuolella: %u"
 
#: dynobj.cc:603
#: dynobj.cc:599
#, c-format
msgid "vernaux vna_name field out of range: %u"
msgstr "vernaux vna_name-kenttä lukualueen ulkopuolella: %u"
 
#: dynobj.cc:614
#: dynobj.cc:610
#, c-format
msgid "verneed vna_next field out of range: %u"
msgstr "verneed vna_next-kenttä lukualueen ulkopuolella: %u"
 
#: dynobj.cc:625
#: dynobj.cc:621
#, c-format
msgid "verneed vn_next field out of range: %u"
msgstr "verneed vn_next-kenttä lukualueen ulkopuolella: %u"
 
#: dynobj.cc:673
#: dynobj.cc:670
msgid "size of dynamic symbols is not multiple of symbol size"
msgstr "dynaamisten symbolien koko ei ole symbolikoon monikerta"
 
#: dynobj.cc:1425
#: dynobj.cc:1435
#, c-format
msgid "symbol %s has undefined version %s"
msgstr "symbolilla %s on määrittelemätön versio %s"
234,27 → 324,42
msgid "** eh_frame"
msgstr "** eh_frame"
 
#: errors.cc:106
#: errors.cc:81
#, c-format
msgid "%s: fatal error: "
msgstr "%s: kohtalokas virhe: "
 
#: errors.cc:92
#, c-format
msgid "%s: error: "
msgstr "%s: virhe: "
 
#: errors.cc:104
#, c-format
msgid "%s: warning: "
msgstr "%s: varoitus: "
 
#: errors.cc:146
#: errors.cc:128
#, c-format
msgid "%s: %s: error: "
msgstr "%s: %s: virhe: "
 
#: errors.cc:144
#, c-format
msgid "%s: %s: warning: "
msgstr "%s: %s: varoitus: "
 
#: errors.cc:172
#: errors.cc:167
#, c-format
msgid "%s: %s: undefined reference to '%s'\n"
msgstr "%s: %s: määrittelemätön viite kohteeseen ’%s’\n"
msgid "%s: %s: error: undefined reference to '%s'\n"
msgstr "%s: %s: virhe: määrittelemätön viite kohteeseen ’%s’\n"
 
#: errors.cc:176
#: errors.cc:172
#, c-format
msgid "%s: %s: undefined reference to '%s', version '%s'\n"
msgstr "%s: %s: määrittelemätön viite kohteeseen ’%s’, versio ’%s’\n"
msgid "%s: %s: error: undefined reference to '%s', version '%s'\n"
msgstr "%s: %s: virhe: määrittelemätön viite kohteeseen ’%s’, versio ’%s’\n"
 
#: errors.cc:186
#: errors.cc:182
#, c-format
msgid "%s: "
msgstr "%s: "
274,10 → 379,6
msgid "unary "
msgstr "unaari "
 
#: expression.cc:278 expression.cc:400
msgid " applied to section relative value"
msgstr " sovellettu lohkosuhteelliseen arvoon"
 
#. Handle binary operators. We use a preprocessor macro as a hack to
#. capture the C operator. KEEP_LEFT means that if the left operand
#. is section relative and the right operand is not, the result uses
323,75 → 424,85
msgid "LENGTH not implemented"
msgstr "LENGTH on toteuttamatta"
 
#: fileread.cc:55
#: fileread.cc:65
#, c-format
msgid "munmap failed: %s"
msgstr "munmap epäonnistui: %s"
 
#: fileread.cc:119
#: fileread.cc:129
#, c-format
msgid "%s: fstat failed: %s"
msgstr "%s: fstat epäonnistui: %s"
 
#: fileread.cc:159
#: fileread.cc:169
#, c-format
msgid "could not reopen file %s"
msgstr "ei voitu avata uudelleen tiedostoa %s"
 
#: fileread.cc:292
#: fileread.cc:302
#, c-format
msgid "%s: pread failed: %s"
msgstr "%s: pread epäonnistui: %s"
 
#: fileread.cc:298
#: fileread.cc:308
#, c-format
msgid "%s: file too short: read only %lld of %lld bytes at %lld"
msgstr "%s: tiedosto on liian lyhyt: lue vain %lld / %lld tavua osoitteesta %lld"
 
#: fileread.cc:382
#: fileread.cc:372
#, c-format
msgid "%s: attempt to map %lld bytes at offset %lld exceeds size of file; the file may be corrupt"
msgstr "%s: yritys kuvata %lld tavua siirrososoitteessa %lld ylittää tiedoston koon; tiedosto on ehkä rikkinäinen"
 
#: fileread.cc:402
#, c-format
msgid "%s: mmap offset %lld size %lld failed: %s"
msgstr "%s: mmap siirrososoite %lld koko %lld epäonnistui: %s"
 
#: fileread.cc:528
#: fileread.cc:548
#, c-format
msgid "%s: lseek failed: %s"
msgstr "%s: lseek epäonnistui: %s"
 
#: fileread.cc:534
#: fileread.cc:554
#, c-format
msgid "%s: readv failed: %s"
msgstr "%s: readv epäonnistui: %s"
 
#: fileread.cc:537
#: fileread.cc:557
#, c-format
msgid "%s: file too short: read only %zd of %zd bytes at %lld"
msgstr "%s: tiedosto on liian lyhyt: lue vain %zd / %zd tavua osoitteesta %lld"
 
#: fileread.cc:686
#: fileread.cc:706
#, c-format
msgid "%s: total bytes mapped for read: %llu\n"
msgstr "%s: yhteensä tavuja kartoitettu lukemista varten: %llu\n"
msgstr "%s: yhteensä tavuja kuvattu lukemista varten: %llu\n"
 
#: fileread.cc:688
#: fileread.cc:708
#, c-format
msgid "%s: maximum bytes mapped for read at one time: %llu\n"
msgstr "%s: maksimitavuja kartoitettu lukemista varten kerrallaan: %llu\n"
msgstr "%s: maksimitavuja kuvattu kertalukemista varten: %llu\n"
 
#: fileread.cc:783
#: fileread.cc:791
#, c-format
msgid "cannot find -l%s"
msgstr "ei voi löytää -l%s"
msgid "%s: stat failed: %s"
msgstr "%s: stat epäonnistui: %s"
 
#: fileread.cc:810
#: fileread.cc:849
#, c-format
msgid "cannot find %s%s"
msgstr "ei voi löytää kohdetta %s%s"
 
#: fileread.cc:880
#, c-format
msgid "cannot find %s"
msgstr "ei voi löytää %s"
msgstr "ei voi löytää kohdetta %s"
 
#: fileread.cc:833
#: fileread.cc:904
#, c-format
msgid "cannot open %s: %s"
msgstr "ei voi avata %s: %s"
msgstr "ei voi avata kohdetta %s: %s"
 
#: gold-threads.cc:103
#, c-format
418,12 → 529,12
msgid "pthread_mutex_destroy failed: %s"
msgstr "pthread_mutex_destroy epäonnistui: %s"
 
#: gold-threads.cc:131
#: gold-threads.cc:131 gold-threads.cc:382
#, c-format
msgid "pthread_mutex_lock failed: %s"
msgstr "pthread_mutex_lock epäonnistui: %s"
 
#: gold-threads.cc:139
#: gold-threads.cc:139 gold-threads.cc:394
#, c-format
msgid "pthread_mutex_unlock failed: %s"
msgstr "pthread_mutex_unlock epäonnistui: %s"
453,124 → 564,156
msgid "pthread_cond_broadcast failed: %s"
msgstr "pthread_cond_broadcast epäonnistui: %s"
 
#: gold.cc:83
#: gold-threads.cc:388
#, c-format
msgid "pthread_once failed: %s"
msgstr "pthread_once epäonnistui: %s"
 
#: gold.cc:91
#, c-format
msgid "%s: internal error in %s, at %s:%d\n"
msgstr "%s: sisäinen virhe funktiossa %s, tiedostossa %s:%d\n"
 
#: gold.cc:130
#: gold.cc:173
msgid "no input files"
msgstr "ei syötetiedostoja"
 
#. We print out just the first .so we see; there may be others.
#: gold.cc:195
#: gold.cc:226
msgid "cannot mix -r with --gc-sections or --icf"
msgstr "ei voi sekoittaa valitsinta -r valitsimen --gc-sections tai --icf kanssa"
 
#: gold.cc:407
#, c-format
msgid "cannot mix -static with dynamic object %s"
msgstr "ei voi sekoittaa valitsinta -static dynaamisen objektin %s kanssa"
 
#: gold.cc:199
#: gold.cc:411
#, c-format
msgid "cannot mix -r with dynamic object %s"
msgstr "ei voi sekoittaa valitsinta -r dynaamisen objektin %s kanssa"
 
#: gold.cc:203
#: gold.cc:415
#, c-format
msgid "cannot use non-ELF output format with dynamic object %s"
msgstr "ei voi käyttää ei-ELF-tulostemuotoa dynaamisen objektin %s kanssa"
 
#: gold.cc:427
#, c-format
msgid "cannot mix split-stack '%s' and non-split-stack '%s' when using -r"
msgstr "ei voida sekoittaa jaettua pinoa ’%s’ ja ei-jaettua pinoa ’%s’ kun käytetään valitsinta -r"
 
#. FIXME: This needs to specify the location somehow.
#: i386.cc:193 i386.cc:1588 sparc.cc:211 sparc.cc:2322 x86_64.cc:208
#: x86_64.cc:1656
#: i386.cc:232 i386.cc:1669 sparc.cc:234 sparc.cc:2395 x86_64.cc:237
#: x86_64.cc:1732
msgid "missing expected TLS relocation"
msgstr "puuttuu odotettu TLS-sijoitus"
 
#: i386.cc:503 sparc.cc:1066 x86_64.cc:533
msgid "** PLT"
msgstr "** PLT"
 
# Report an unsupported relocation against a local symbol.
#: i386.cc:843 powerpc.cc:996 sparc.cc:1480 x86_64.cc:921 x86_64.cc:1230
#: i386.cc:944 x86_64.cc:1068
#, c-format
msgid "%s: unsupported reloc %u against local symbol"
msgstr "%s: tukematon sijoitus %u paikallista symbolia kohtaan"
 
#: i386.cc:907 x86_64.cc:1033
#, c-format
msgid "section symbol %u has bad shndx %u"
msgstr "lohkosymbolilla %u on virheellinen shndx-lohko %u"
 
# These are relocations which ...
#: i386.cc:965 i386.cc:1297 powerpc.cc:1204 powerpc.cc:1413 sparc.cc:1852
#: sparc.cc:2204 x86_64.cc:1110 x86_64.cc:1418
#: i386.cc:1036 i386.cc:1060 sparc.cc:1777 x86_64.cc:1176 x86_64.cc:1204
#, c-format
msgid "%s: unexpected reloc %u in object file"
msgstr "%s: odottamaton sijoitus %u objektitiedostossa"
 
#: i386.cc:999 i386.cc:1023 sparc.cc:1753 x86_64.cc:1141 x86_64.cc:1169
#, c-format
msgid "local symbol %u has bad shndx %u"
msgstr "paikallisella symbolilla %u on virheellinen shndx-lohko %u"
 
# Report an unsupported relocation against a global symbol.
#: i386.cc:1134 powerpc.cc:1223 sparc.cc:1871 x86_64.cc:1244 x86_64.cc:1536
#: i386.cc:1991
msgid "both SUN and GNU model TLS relocations"
msgstr "sekä SUN- että GNU-mallisia TLS-sijoituksia"
 
#: i386.cc:2730 x86_64.cc:2719
#, c-format
msgid "%s: unsupported reloc %u against global symbol %s"
msgstr "%s: tukematon sijoitus %u yleissymbolia %s kohtaan"
msgid "failed to match split-stack sequence at section %u offset %0zx"
msgstr "jaetun pinon täsmääminen epäonnistui lohkossa %u siirros %0zx"
 
# Scan relocations for a section.
#: i386.cc:1473
#: icf.cc:616
#, c-format
msgid "%s: unsupported RELA reloc section"
msgstr "%s: tukematon RELA-sijoituslohko"
msgid "%s: ICF Converged after %u iteration(s)"
msgstr "%s: ICF lähentyi %u iteroinnin jälkeen"
 
#: i386.cc:1735 i386.cc:2429 powerpc.cc:1740 sparc.cc:2637 x86_64.cc:1859
#: x86_64.cc:2435
#: icf.cc:619
#, c-format
msgid "unexpected reloc %u in object file"
msgstr "tukematon sijoitus %u objektitiedostossa"
msgid "%s: ICF stopped after %u iteration(s)"
msgstr "%s: ICF pysähtyi %u iteroinnin jälkeen"
 
#: i386.cc:1767 i386.cc:1846 i386.cc:1898 i386.cc:1929 i386.cc:1986
#: powerpc.cc:1746 sparc.cc:2643 sparc.cc:2826 sparc.cc:2887 sparc.cc:2994
#: x86_64.cc:1880 x86_64.cc:1963 x86_64.cc:2018 x86_64.cc:2043
#: icf.cc:633
#, c-format
msgid "unsupported reloc %u"
msgstr "tukematon sijoitus %u"
msgid "Could not find symbol %s to unfold\n"
msgstr "Ei voitu löytää symbolia %s paljastettavaksi\n"
 
#: i386.cc:1906
msgid "both SUN and GNU model TLS relocations"
msgstr "sekä SUN- että GNU-mallisia TLS-sijoituksia"
#: incremental.cc:242
#, c-format
msgid "the link might take longer: cannot perform incremental link: %s"
msgstr "linkki ei ehkä enää toimi: ei voida suorittaa askelkasvatuslinkitystä: %s"
 
#: i386.cc:2443
#: incremental.cc:302
msgid "no incremental data from previous build"
msgstr "ei askelkasvatusdataa edellisestä rakentamisesta"
 
#: incremental.cc:309 incremental.cc:332
msgid "invalid incremental build data"
msgstr "virheellinen askelkasvatusrakentamisdata"
 
#: incremental.cc:321
msgid "different version of incremental build data"
msgstr "askelkasvatusrakentamisdatan eri versio"
 
#: incremental.cc:338
msgid "command line changed"
msgstr "komentorivi vaihtunut"
 
#: incremental.cc:362
#, c-format
msgid "unsupported reloc %u in object file"
msgstr "tukematon sijoitus %u objektitiedostossa"
msgid "unsupported ELF machine number %d"
msgstr "tukematon ELF-konenumero %d"
 
#: layout.cc:1511
#: incremental.cc:387
msgid "output is not an ELF file."
msgstr "tuloste ei ole ELF-tiedosto."
 
#: incremental.cc:410
msgid "unsupported file: 32-bit, big-endian"
msgstr "tukematon tiedosto: 32-bittinen, big-endian"
 
#: incremental.cc:419
msgid "unsupported file: 32-bit, little-endian"
msgstr "tukematon tiedosto: 32-bittinen, little-endian"
 
#: incremental.cc:431
msgid "unsupported file: 64-bit, big-endian"
msgstr "tukematon tiedosto: 64-bittinen, big-endian"
 
#: incremental.cc:440
msgid "unsupported file: 64-bit, little-endian"
msgstr "tukematon tiedosto: 64-bittinen, little-endian"
 
#: layout.cc:1887
#, c-format
msgid "--build-id=uuid failed: could not open /dev/urandom: %s"
msgstr "--build-id=uuid epäonnistui: ei voitu avata merkkierikoistiedostoa /dev/urandom: %s"
 
#: layout.cc:1518
#: layout.cc:1894
#, c-format
msgid "/dev/urandom: read failed: %s"
msgstr "/dev/urandom: lukeminen epäonnistui: %s"
 
#: layout.cc:1520
#: layout.cc:1896
#, c-format
msgid "/dev/urandom: expected %zu bytes, got %zd bytes"
msgstr "/dev/urandom: odotettiin %zu tavua, saatiin %zd tavua"
 
#: layout.cc:1542
#: layout.cc:1918
#, c-format
msgid "--build-id argument '%s' not a valid hex number"
msgstr "--build-id argumentti ’%s’ ei ole oikea heksadesimaalinumero"
 
#: layout.cc:1548
#: layout.cc:1924
#, c-format
msgid "unrecognized --build-id argument '%s'"
msgstr "tunnistamaton --build-id argumentti ’%s’"
 
#: layout.cc:1866
#: layout.cc:2337
#, c-format
msgid "load segment overlap [0x%llx -> 0x%llx] and [0x%llx -> 0x%llx]"
msgstr "lataa segmenttilimitys [0x%llx -> 0x%llx] ja [0x%llx -> 0x%llx]"
578,12 → 721,12
#: mapfile.cc:70
#, c-format
msgid "cannot open map file %s: %s"
msgstr "ei voi avata map-tiedostoa %s: %s"
msgstr "ei voi avata kuvaustiedostoa %s: %s"
 
#: mapfile.cc:84
#, c-format
msgid "cannot close map file: %s"
msgstr "ei voi sulkea map-tiedostoa: %s"
msgstr "ei voi sulkea kuvaustiedostoa: %s"
 
#: mapfile.cc:116
#, c-format
620,7 → 763,7
"\n"
msgstr ""
"\n"
"Muistikartta\n"
"Muistikuvaus\n"
"\n"
 
#: mapfile.cc:361
634,185 → 777,162
"Hylätyt syötelohkot\n"
"\n"
 
#: merge.cc:449
#: merge.cc:455
#, c-format
msgid "%s: %s merged constants size: %lu; input: %zu; output: %zu\n"
msgstr "%s: %s yhdistetty vakioiden koko: %lu; syöte: %zu; tuloste: %zu\n"
 
#: merge.cc:472
#: merge.cc:478
msgid "mergeable string section length not multiple of character size"
msgstr "yhdistettävän merkkijonolohkon pituus ei ole merkkikoon monikerta"
 
#: merge.cc:488
msgid "entry in mergeable string section not null terminated"
msgstr "alkio yhdistettävässä merkkijonolohkossa ei ole null-päätteinen"
#: merge.cc:494
#, c-format
msgid "%s: last entry in mergeable string section '%s' not null terminated"
msgstr "%s: viimeinen alkio yhdistettävässä merkkijonolohkossa ’%s’ ei ole null-päätteinen"
 
#: merge.cc:605
#: merge.cc:613
#, c-format
msgid "%s: %s input: %zu\n"
msgstr "%s: %s syöte: %zu\n"
 
#: merge.h:289
#: merge.h:300
msgid "** merge constants"
msgstr "** yhdistä vakiot"
 
#: merge.h:411
#: merge.h:422
msgid "** merge strings"
msgstr "** yhdistä merkkijonot"
 
#: object.cc:73
#: object.cc:75
msgid "missing SHT_SYMTAB_SHNDX section"
msgstr "puuttuva SHT_SYMTAB_SHNDX-lohko"
 
#: object.cc:117
#: object.cc:119
#, c-format
msgid "symbol %u out of range for SHT_SYMTAB_SHNDX section"
msgstr "symboli %u lukualueen ulkopuolella lohkolle SHT_SYMTAB_SHNDX"
 
#: object.cc:124
#: object.cc:126
#, c-format
msgid "extended index for symbol %u out of range: %u"
msgstr "laajennettu hakemisto symbolille %u lukualueen ulkopuolella: %u"
 
#: object.cc:141
#: object.cc:148 object.cc:2331 output.cc:4052
#, c-format
msgid "%s: unsupported ELF machine number %d"
msgstr "%s: tukematon ELF-konenumero %d"
 
#: object.cc:159
#, c-format
msgid "%s: %s"
msgstr "%s: %s"
 
#: object.cc:196
#: object.cc:190
#, c-format
msgid "section name section has wrong type: %u"
msgstr "lohkonimilohko on väärän tyyppinen: %u"
 
#: object.cc:459
#: object.cc:546
#, c-format
msgid "invalid symbol table name index: %u"
msgstr "virheellinen symbolitaulunimi-indeksi: %u"
 
#: object.cc:465
#: object.cc:552
#, c-format
msgid "symbol table name section has wrong type: %u"
msgstr "symbolitaulunimilohko on väärän tyyppinen: %u"
 
#: object.cc:554
#: object.cc:641
#, c-format
msgid "section group %u info %u out of range"
msgstr "lohkoryhmä %u tiedot %u lukualueen ulkopuolella"
 
#: object.cc:573
#: object.cc:660
#, c-format
msgid "symbol %u name offset %u out of range"
msgstr "symbolin %u nimisiirros %u lukualueen ulkopuolella"
 
#: object.cc:591
#: object.cc:678
#, c-format
msgid "symbol %u invalid section index %u"
msgstr "symboli %u virheellinen lohkoindeksi %u"
 
#: object.cc:644
#: object.cc:723
#, c-format
msgid "section %u in section group %u out of range"
msgstr "lohko %u lohkoryhmässä %u lukualueen ulkopuolella"
 
#: object.cc:652
#: object.cc:731
#, c-format
msgid "invalid section group %u refers to earlier section %u"
msgstr "virheellinen lohkoryhmä %u viittaa aikaisempaan lohkoon %u"
 
#: object.cc:827 reloc.cc:215 reloc.cc:723
#: object.cc:1037 reloc.cc:271 reloc.cc:838
#, c-format
msgid "relocation section %u has bad info %u"
msgstr "uudelleensijoituslohkolla %u on väärät tiedot %u"
msgstr "sijoituslohkolla %u on väärät tiedot %u"
 
#: object.cc:1080
#: object.cc:1231
#, c-format
msgid "%s: removing unused section from '%s' in file '%s'"
msgstr "%s: poistetaan käyttämättömät lohkot kohteesta ’%s’ tiedostossa ’%s’"
 
#: object.cc:1257
#, c-format
msgid "%s: ICF folding section '%s' in file '%s'into '%s' in file '%s'"
msgstr "%s: ICF-laskostumislohko ’%s’ tiedostossa ’%s’ kohteeseen ’%s’ tiedostossa ’%s’"
 
#: object.cc:1454
msgid "size of symbols is not multiple of symbol size"
msgstr "symboleiden koko ei ole symbolikoon monikerta"
 
#: object.cc:1187
#: object.cc:1563
#, c-format
msgid "local symbol %u section name out of range: %u >= %u"
msgstr "paikallisen symbolin %u lohkonimi lukualueen ulkopuolella: %u >= %u"
 
#: object.cc:1245
#: object.cc:1652
#, c-format
msgid "unknown section index %u for local symbol %u"
msgstr "tuntematon lohkoindeksi %u paikalliselle symbolille %u"
 
#: object.cc:1254
#: object.cc:1661
#, c-format
msgid "local symbol %u section index %u out of range"
msgstr "paikallisen symbolin %u lohkoindeksi %u lukualueen ulkopuolella"
 
#: object.cc:1619
msgid "incompatible target"
msgstr "yhteensopimaton kohde"
 
#: object.cc:1816
#: object.cc:2169
#, c-format
msgid "%s: unsupported ELF file type %d"
msgstr "%s: tukematon ELF-tiedostotyyppi %d"
msgid "%s is not supported but is required for %s in %s"
msgstr "%s ei ole tuettu, mutta vaaditaan kohteelle %s kohteessa %s"
 
#: object.cc:1835 object.cc:1881 object.cc:1915
#: object.cc:2273
#, c-format
msgid "%s: ELF file too short"
msgstr "%s: ELF-tiedosto on liian lyhyt"
msgid "%s: unsupported ELF machine number %d"
msgstr "%s: tukematon ELF-konenumero %d"
 
#: object.cc:1843
#: object.cc:2283
#, c-format
msgid "%s: invalid ELF version 0"
msgstr "%s: virheellinen ELF-versio 0"
msgid "%s: incompatible target"
msgstr "%s: yhteensopimaton kohde"
 
#: object.cc:1845
#: object.cc:2347 plugin.cc:1019
#, c-format
msgid "%s: unsupported ELF version %d"
msgstr "%s: tukematon ELF-versio %d"
 
#: object.cc:1852
#, c-format
msgid "%s: invalid ELF class 0"
msgstr "%s: virheellinen ELF-luokka 0"
 
#: object.cc:1858
#, c-format
msgid "%s: unsupported ELF class %d"
msgstr "%s: tukematon ELF-luokka %d"
 
#: object.cc:1865
#, c-format
msgid "%s: invalid ELF data encoding"
msgstr "%s: virheellinen ELF-datakoodaus"
 
#: object.cc:1871
#, c-format
msgid "%s: unsupported ELF data encoding %d"
msgstr "%s: tukematon ELF-datakoodaus %d"
 
#: object.cc:1891
#, c-format
msgid "%s: not configured to support 32-bit big-endian object"
msgstr "%s: ei ole asetettu tukemaan 32-bittistä big-endian-objektia"
 
#: object.cc:1904
#: object.cc:2363 plugin.cc:1028
#, c-format
msgid "%s: not configured to support 32-bit little-endian object"
msgstr "%s: ei ole asetettu tukemaan 32-bittistä little-endian-objektia"
 
#: object.cc:1925
#: object.cc:2382 plugin.cc:1040
#, c-format
msgid "%s: not configured to support 64-bit big-endian object"
msgstr "%s: ei ole asetettu tukemaan 64-bittistä big-endian-objektia"
 
#: object.cc:1938
#: object.cc:2398 plugin.cc:1049
#, c-format
msgid "%s: not configured to support 64-bit little-endian object"
msgstr "%s: ei ole asetettu tukemaan 64-bittistä little-endian-objektia"
 
#: options.cc:142
#: options.cc:156
#, c-format
msgid ""
"Usage: %s [options] file...\n"
823,12 → 943,12
 
#. config.guess and libtool.m4 look in ld --help output for the
#. string "supported targets".
#: options.cc:150
#: options.cc:164
#, c-format
msgid "%s: supported targets:"
msgstr "%s: tuetut kohteet:"
 
#: options.cc:162
#: options.cc:176
#, c-format
msgid "Report bugs to %s\n"
msgstr ""
835,889 → 955,1147
"Ilmoita virheistä (englanniksi) osoitteeseen %s\n"
"Ilmoita suomennosvirheistä osoitteeseen <translation-team-fi@lists.sourceforge.net>\n"
 
#: options.cc:179 options.cc:189
#: options.cc:193 options.cc:203 options.cc:213
#, c-format
msgid "%s: invalid option value (expected an integer): %s"
msgstr "%s: virheellinen valitsinarvo (odotettiin kokonaislukua): %s"
 
#: options.cc:199
#: options.cc:223
#, c-format
msgid "%s: invalid option value (expected a floating point number): %s"
msgstr "%s: virheellinen valitsinarvo (odotettiin liukulukunumeroa): %s"
 
#: options.cc:208
#: options.cc:232
#, c-format
msgid "%s: must take a non-empty argument"
msgstr "%s: täytyy olla ei-tyhjä argumentti"
 
#: options.cc:249
#: options.cc:273
#, c-format
msgid "%s: must take one of the following arguments: %s"
msgstr "%s: täytyy olla yksi seuraavista argumenteista: %s"
 
#: options.cc:275
#: options.cc:300
#, c-format
msgid " Supported targets:\n"
msgstr " Tuetut kohteet:\n"
 
#: options.cc:329
#: options.cc:409
#, c-format
msgid "unable to parse script file %s"
msgstr "ei kyetä jäsentämään skriptitiedostoa %s"
 
#: options.cc:337
#: options.cc:417
#, c-format
msgid "unable to parse version script file %s"
msgstr "ei kyetä jäsentämään versioskriptitiedostoa %s"
 
#: options.cc:363
#: options.cc:425
#, c-format
msgid "unable to parse dynamic-list script file %s"
msgstr "ei kyetä jäsentämään dynaamisluetteloista skriptitiedostoa %s"
 
#: options.cc:522
#, c-format
msgid "format '%s' not supported; treating as elf (supported formats: elf, binary)"
msgstr "muotoa ’%s’ ei tueta; käsitellään elf-objektina (tuetut muodot: elf, binaari)"
 
#: options.cc:538
#, c-format
msgid "%s: use the --help option for usage information\n"
msgstr "%s: käytä valitsinta --help käyttötietojen saamiseksi\n"
 
#: options.cc:372
#: options.cc:547
#, c-format
msgid "%s: %s: %s\n"
msgstr "%s: %s: %s\n"
 
#: options.cc:393
#, c-format
msgid "format '%s' not supported; treating as elf (supported formats: elf, binary)"
msgstr "muotoa ’%s’ ei tueta; käsitellään elf-objektina (tuetut muodot: elf, binääri)"
 
#: options.cc:499
#: options.cc:651
msgid "unexpected argument"
msgstr "odottamaton argumentti"
 
#: options.cc:512 options.cc:573
#: options.cc:664 options.cc:725
msgid "missing argument"
msgstr "puuttuva argumentti"
 
#: options.cc:584
#: options.cc:736
msgid "unknown -z option"
msgstr "tuntematon valitsin -z"
 
#: options.cc:727
#: options.cc:935
#, c-format
msgid "ignoring --threads: %s was compiled without thread support"
msgstr "ei oteta huomioon valitsinta --threads: %s käännettiin ilman säietukea"
 
#: options.cc:734
#: options.cc:942
#, c-format
msgid "ignoring --thread-count: %s was compiled without thread support"
msgstr "ohitetaan --thread-count: %s käännettiin ilman säietukea"
 
#: options.cc:776
#: options.cc:981
#, c-format
msgid "unable to open -retain-symbols-file file %s: %s"
msgstr "ei kyetä avaamaan -retain-symbols-file -tiedostoa %s: %s"
 
#: options.cc:1003
msgid "-shared and -static are incompatible"
msgstr "valitsimet -shared ja -static ovat yhteensopimattomat"
 
#: options.cc:1005
msgid "-shared and -pie are incompatible"
msgstr "valitsimet -shared ja -pie ovat yhteensopimattomat"
 
#: options.cc:1008
msgid "-shared and -r are incompatible"
msgstr "valitsimet -shared ja -r ovat yhteensopimattomat"
 
#: options.cc:780
msgid "binary output format not compatible with -shared or -r"
msgstr "binääritulostemuoto ei ole yhteensopiva valitsimien -shared tai -r kanssa"
#: options.cc:1010
msgid "-pie and -r are incompatible"
msgstr "valitsimet -pie ja -r ovat yhteensopimattomat"
 
#: options.cc:785
#: options.cc:1014
msgid "-retain-symbols-file does not yet work with -r"
msgstr "-retain-symbols-file ei vielä toimi valitsimen -r kanssa"
 
#: options.cc:1020
msgid "binary output format not compatible with -shared or -pie or -r"
msgstr "binaaritulostemuoto ei ole yhteensopiva valitsimien -shared, -pie tai -r kanssa"
 
#: options.cc:1026
#, c-format
msgid "--hash-bucket-empty-fraction value %g out of range [0.0, 1.0)"
msgstr "--hash-bucket-empty-fraction arvo %g lukualueen ulkopuolella [0.0, 1.0)"
 
#: options.cc:852
#: options.cc:1031
msgid "Options --incremental-changed, --incremental-unchanged, --incremental-unknown require the use of --incremental"
msgstr "Valitsimet --incremental-changed, --incremental-unchanged, --incremental-unknown vaativat valitsimen --incremental käytön"
 
#: options.cc:1097
msgid "May not nest groups"
msgstr "Ei saa sisäkkäistää ryhmiä"
 
#: options.cc:864
#: options.cc:1109
msgid "Group end without group start"
msgstr "Ryhmäloppu ilman ryhmäalkua"
 
#. I guess it's neither a long option nor a short option.
#: options.cc:922
#: options.cc:1174
msgid "unknown option"
msgstr "tuntematon valitsin"
 
#: options.cc:948
#: options.cc:1201
#, c-format
msgid "%s: missing group end\n"
msgstr "%s: puuttuva ryhmäloppu\n"
 
#: options.h:536
#: options.h:571
msgid "Report usage information"
msgstr "Ilmoita käyttötiedot"
 
#: options.h:538
#: options.h:573
msgid "Report version information"
msgstr "Ilmoita versiotiedot"
 
#: options.h:540
#: options.h:575
msgid "Report version and target information"
msgstr "Ilmoita versio- ja kohdetiedot"
 
#: options.h:549
#: options.h:584 options.h:635
msgid "Not supported"
msgstr "Ei tuettu"
 
#: options.h:585 options.h:636
msgid "Do not copy DT_NEEDED tags from shared libraries"
msgstr "Älä kopioi DT_NEEDED-tunnisteita jaettuihin kirjastoihin"
 
#: options.h:588
msgid "Allow unresolved references in shared libraries"
msgstr "Salli ratkaisemattomat viitteet jaettuihin kirjastoihin"
 
#: options.h:550
#: options.h:589
msgid "Do not allow unresolved references in shared libraries"
msgstr "Älä salli ratkaisemattomia viitteitä jaettuihin kirjastoihin"
 
#: options.h:553
msgid "Only set DT_NEEDED for dynamic libs if used"
msgstr "Aseta DT_NEEDED dynaamisille kirjastoille vain jos käytetty"
#: options.h:592
msgid "Only set DT_NEEDED for shared libraries if used"
msgstr "Aseta DT_NEEDED jaetuille kirjastoille vain jos käytetty"
 
#: options.h:554
msgid "Always DT_NEEDED for dynamic libs"
msgstr "Aina DT_NEEDED dynaamisille kirjastoille"
#: options.h:593
msgid "Always DT_NEEDED for shared libraries"
msgstr "Aina DT_NEEDED jaetuille kirjastoille"
 
#: options.h:561
#: options.h:600
msgid "Set input format"
msgstr "Aseta syötemuoto"
 
#: options.h:564
#: options.h:603
msgid "-l searches for shared libraries"
msgstr "-l etsii jaettuja kirjastoja"
 
#: options.h:566
#: options.h:605
msgid "-l does not search for shared libraries"
msgstr "-l ei etsi jaettuja kirjastoja"
 
#: options.h:570
#: options.h:609
msgid "Bind defined symbols locally"
msgstr "Sido määritellyt symbolit paikallisesti"
 
#: options.h:573
#: options.h:612
msgid "Bind defined function symbols locally"
msgstr "Sido määritellyt funktiosymbolit paikallisesti"
 
#: options.h:576
#: options.h:615
msgid "Generate build ID note"
msgstr "Tuota rakentamistunnisteilmoitus"
 
#: options.h:577 options.h:612
#: options.h:616 options.h:655
msgid "[=STYLE]"
msgstr "[=TYYLI]"
 
#: options.h:580
#: options.h:619
msgid "Check segment addresses for overlaps (default)"
msgstr "Tarkista segmenttiosoitteet päällekkäisyyksien varalta (oletus)"
 
#: options.h:581
#: options.h:620
msgid "Do not check segment addresses for overlaps"
msgstr "Älä tarkista segmenttiosoitteiden päällekkäisyyksiä"
 
#: options.h:585 options.h:590
#: options.h:624 options.h:629
msgid "Compress .debug_* sections in the output file"
msgstr "Tiivistä .debug_* -lohkot tulostetiedostossa"
 
#: options.h:591
#: options.h:630
msgid "[none]"
msgstr "[ei mitään]"
 
#: options.h:596
#: options.h:639
msgid "Define common symbols"
msgstr "Anna yhteissymbolit"
 
#: options.h:597
#: options.h:640
msgid "Do not define common symbols"
msgstr "Älä anna yhteissymboleja"
 
#: options.h:599 options.h:601
#: options.h:642 options.h:644
msgid "Alias for -d"
msgstr "Alias valitsimelle -d"
 
#: options.h:604
#: options.h:647
msgid "Turn on debugging"
msgstr "Käännä päälle vianjäljitys"
 
#: options.h:605
#: options.h:648
msgid "[all,files,script,task][,...]"
msgstr "[kaikki,tiedostot,skripti,tehtävä][,...]"
 
#: options.h:608
#: options.h:651
msgid "Define a symbol"
msgstr "Määrittele symboli"
 
#: options.h:608
#: options.h:651
msgid "SYMBOL=EXPRESSION"
msgstr "SYMBOLI=LAUSEKE"
 
#: options.h:611
#: options.h:654
msgid "Demangle C++ symbols in log messages"
msgstr "Elvytä C++ -symbolit lokiviesteissä"
 
#: options.h:615
#: options.h:658
msgid "Do not demangle C++ symbols in log messages"
msgstr "Älä elvytä C++ -symboleja lokiviesteissä"
 
#: options.h:619
#: options.h:662
msgid "Try to detect violations of the One Definition Rule"
msgstr "Yritä havaita yhden määrittelysäännön rikkomukset"
 
#: options.h:623
#: options.h:666
msgid "Delete all temporary local symbols"
msgstr "Poista kaikki tilapäiset paikalliset symbolit"
 
#: options.h:669
msgid "Add data symbols to dynamic symbols"
msgstr "Lisää datasymbolit dynaamisiin symboleihin"
 
#: options.h:672
msgid "Add C++ operator new/delete to dynamic symbols"
msgstr "Lisää C++-operaattori new/delete dynaamisiin symboleihin"
 
#: options.h:675
msgid "Add C++ typeinfo to dynamic symbols"
msgstr "Lisää C++-typeinfo dynaamisiin symboleihin"
 
#: options.h:678
msgid "Read a list of dynamic symbols"
msgstr "Lue dynaamisten symbolien luettelo"
 
#: options.h:678 options.h:732 options.h:766 options.h:893 options.h:921
msgid "FILE"
msgstr "TIEDOSTO"
 
#: options.h:681
msgid "Set program start address"
msgstr "Aseta ohjelman aloitusosoite"
 
#: options.h:623 options.h:766 options.h:768 options.h:770
#: options.h:681 options.h:908 options.h:910 options.h:912
msgid "ADDRESS"
msgstr "OSOITE"
 
#: options.h:626
#: options.h:684
msgid "Exclude libraries from automatic export"
msgstr "Jätä kirjastot pois automaattisesta viennistä"
 
#: options.h:688
msgid "Export all dynamic symbols"
msgstr "Vie kaikki dynaamiset symbolit"
 
#: options.h:629
#: options.h:689
msgid "Do not export all dynamic symbols (default)"
msgstr "Älä vie kaikkia dynaamisia symboleita (oletus)"
 
#: options.h:692
msgid "Create exception frame header"
msgstr "Luo poikkeuskehysotsake"
 
#: options.h:632
#: options.h:695
msgid "Treat warnings as errors"
msgstr "Käsittele varoituksia virheinä"
 
#: options.h:633
#: options.h:696
msgid "Do not treat warnings as errors"
msgstr "Älä käsittele varoituksia virheinä"
 
#: options.h:636
#: options.h:699
msgid "Call SYMBOL at unload-time"
msgstr "Kutsu SYMBOLIa sulkemishetkellä"
 
#: options.h:699 options.h:729 options.h:873 options.h:915 options.h:936
#: options.h:939
msgid "SYMBOL"
msgstr "SYMBOLI"
 
#: options.h:702
msgid "Set shared library name"
msgstr "Aseta jaettu kirjastonimi"
 
#: options.h:636 options.h:696
#: options.h:702 options.h:792
msgid "FILENAME"
msgstr "TIEDOSTONIMI"
 
#: options.h:639
#: options.h:705
msgid "Min fraction of empty buckets in dynamic hash"
msgstr "Tyhjien lohkojen pienin murto-osa dynaamisessa hash-funktiossa"
 
#: options.h:640
#: options.h:706
msgid "FRACTION"
msgstr "FRACTION"
msgstr "MURTO-OSA"
 
#: options.h:643
#: options.h:709
msgid "Dynamic hash style"
msgstr "Dynaaminen hash-tyyli"
 
#: options.h:643
#: options.h:709
msgid "[sysv,gnu,both]"
msgstr "[sysv,gnu,both]"
 
#: options.h:647
#: options.h:713
msgid "Set dynamic linker path"
msgstr "Aseta dynaaminen linkittäjäpolku"
 
#: options.h:647
#: options.h:713
msgid "PROGRAM"
msgstr "OHJELMA"
 
#: options.h:650
#: options.h:716
msgid "Work in progress; do not use"
msgstr "Työ käynnissä; älä käytä"
 
#: options.h:717
msgid "Do a full build"
msgstr "Tee täysi rakentaminen"
 
#: options.h:720
msgid "Assume files changed"
msgstr "Otaksu tiedostojen muuttuneen"
 
#: options.h:723
msgid "Assume files didn't change"
msgstr "Otaksu, että tiedostot eivät ole muuttuneet"
 
#: options.h:726
msgid "Use timestamps to check files (default)"
msgstr "Käytä aikaleimoja tiedostojen tarkistamiseen (oletus)"
 
#: options.h:729
msgid "Call SYMBOL at load-time"
msgstr "Kutsu SYMBOLIa latausaikana"
 
#: options.h:732
msgid "Read only symbol values from FILE"
msgstr "Lue vain symboliarvot TIEDOSTOsta"
 
#: options.h:650 options.h:684 options.h:751 options.h:779
msgid "FILE"
msgstr "TIEDOSTO"
 
#: options.h:653
#: options.h:735
msgid "Search for library LIBNAME"
msgstr "Haku kirjastolle LIBNAME"
 
#: options.h:653
#: options.h:735
msgid "LIBNAME"
msgstr "LIBNAME"
 
#: options.h:656
#: options.h:738
msgid "Add directory to search path"
msgstr "Lisää hakemisto hakupolkuun"
 
#: options.h:656 options.h:714 options.h:717 options.h:721 options.h:745
#: options.h:738 options.h:813 options.h:816 options.h:820 options.h:887
msgid "DIR"
msgstr "DIR"
 
#: options.h:659
#: options.h:741
msgid "Ignored for compatibility"
msgstr "Ei oteta huomioon yhteensopivuussyistä"
 
#: options.h:659
#: options.h:741
msgid "EMULATION"
msgstr "EMULOINTI"
 
#: options.h:662
#: options.h:744
msgid "Write map file on standard output"
msgstr "Kirjoita karttatiedosto vakiotulosteeseen"
msgstr "Kirjoita kuvaustiedosto vakiotulosteeseen"
 
#: options.h:663
#: options.h:745
msgid "Write map file"
msgstr "Kirjoita map-tiedosto"
msgstr "Kirjoita kuvaustiedosto"
 
#: options.h:664
#: options.h:746
msgid "MAPFILENAME"
msgstr "MAPFILENAME"
msgstr "KUVAUSTIEDOSTONIMI"
 
#: options.h:667
#: options.h:749
msgid "Do not page align data"
msgstr "Älä tasaa dataa sivun kokoisiin osiin"
 
#: options.h:669
#: options.h:751
msgid "Do not page align data, do not make text readonly"
msgstr "Älä tasaa dataa sivun kokoisiin osiin, älä kirjoitussuojaa tekstiä"
 
#: options.h:670
#: options.h:752
msgid "Page align data, make text readonly"
msgstr "Sivutasausdataa, tee tekstistä kirjoitussuojattu"
 
#: options.h:673
#: options.h:755
msgid "Enable use of DT_RUNPATH and DT_FLAGS"
msgstr "Ota käyttöön DT_RUNPATH-hakemistot ja DT_FLAGS-liput"
 
#: options.h:674
#: options.h:756
msgid "Disable use of DT_RUNPATH and DT_FLAGS"
msgstr "Ota pois käytöstä DT_RUNPATH-hakemistot ja DT_FLAGS-liput"
 
#: options.h:677
#: options.h:759
msgid "Create an output file even if errors occur"
msgstr "Luo tulostetiedosto myös silloin kun tapahtuu virhe"
 
#: options.h:680 options.h:808
#: options.h:762 options.h:958
msgid "Report undefined symbols (even with --shared)"
msgstr "Ilmoita määrittelemättömistä symboleista (jopa valitsimella --shared)"
 
#: options.h:684
#: options.h:766
msgid "Set output file name"
msgstr "Aseta tulostetiedostonimi"
 
#: options.h:687
#: options.h:769
msgid "Optimize output file size"
msgstr "Optimoi tulostetiedostokoko"
 
#: options.h:687
#: options.h:769
msgid "LEVEL"
msgstr "TASO"
 
#: options.h:690
#: options.h:772
msgid "Set output format"
msgstr "Aseta tulostusmuoto"
 
#: options.h:690
#: options.h:772
msgid "[binary]"
msgstr "[binaari]"
 
#: options.h:693
#: options.h:775 options.h:777
msgid "Create a position independent executable"
msgstr "Luo paikkariippumaton suoritettava tiedosto"
 
#: options.h:782
msgid "Load a plugin library"
msgstr "Lataa lisäosakirjasto"
 
#: options.h:782
msgid "PLUGIN"
msgstr "LISÄOSA"
 
#: options.h:784
msgid "Pass an option to the plugin"
msgstr "Välitä valitsin lisäosalle"
 
#: options.h:784
msgid "OPTION"
msgstr "VALITSIN"
 
#: options.h:788
msgid "Preread archive symbols when multi-threaded"
msgstr "Ennakkoluetut arkistosymbolit monisäikeitä käytettäessä"
 
#: options.h:695
#: options.h:791
msgid "Print symbols defined and used for each input"
msgstr "Tulosta jokaiselle syötteelle määritellyt ja käytetyt symbolit"
 
#: options.h:699
#: options.h:795
msgid "Ignored for SVR4 compatibility"
msgstr "Älä ota huomioon SVR4-yhteensopivuutta"
 
#: options.h:702
#: options.h:798
msgid "Generate relocations in output"
msgstr "Luo sijoitukset tulosteeseen"
msgstr "Tuota sijoitukset tulosteeseen"
 
#: options.h:705
#: options.h:801
msgid "Generate relocatable output"
msgstr "Tuota uudelleensijoitettava tuloste"
msgstr "Tuota sijoitettava tuloste"
 
#: options.h:708
#: options.h:804
msgid "Relax branches on certain targets"
msgstr "Relax-projektin haarat tietyissä kohteissa"
 
#: options.h:714 options.h:717
#: options.h:807
msgid "keep only symbols listed in this file"
msgstr "pidä vain tässä tiedostossa luetellut symbolit"
 
#: options.h:807
msgid "[file]"
msgstr "[tiedosto]"
 
#: options.h:813 options.h:816
msgid "Add DIR to runtime search path"
msgstr "Lisää DIR ajoaikaiseen hakupolkuun"
 
#: options.h:720
#: options.h:819
msgid "Add DIR to link time shared library search path"
msgstr "Lisää DIR linkitysaikana jaettuun kirjastohakupolkuun"
 
#: options.h:724
#: options.h:823
msgid "Strip all symbols"
msgstr "Riisu kaikki symbolit"
 
#: options.h:726
#: options.h:825
msgid "Strip debugging information"
msgstr "Riisu vianjäljitystiedot"
 
#: options.h:728
#: options.h:827
msgid "Emit only debug line number information"
msgstr "Lähetä vain vianjäljitysrivinumerotiedot"
 
#: options.h:730
#: options.h:829
msgid "Strip debug symbols that are unused by gdb (at least versions <= 6.7)"
msgstr "Riisu vianjäljityssymbolit, joita gdb ei käytä (vähintään versioissa <= 6.7)"
 
#: options.h:734
#: options.h:832
msgid "Strip LTO intermediate code sections"
msgstr "Riisu LTO-keskikoodilohkot"
 
#: options.h:835
msgid "(ARM only) The maximum distance from instructions in a group of sections to their stubs. Negative values mean stubs are always after the group. 1 means using default size.\n"
msgstr "(vain ARM) Käskyjen enimmäisetäisyys niiden stub-koodeihin lohkojen ryhmässä. Negatiiviset arvot tarkoittavat, että stub-koodit ovat ryhmän jäljessä. 1 tarkoittaa oletuskokoa.\n"
 
#: options.h:838 options.h:852 options.h:956 options.h:975
msgid "SIZE"
msgstr "KOKO"
 
#: options.h:841
msgid "Use less memory and more disk I/O (included only for compatibility with GNU ld)"
msgstr "Käytä vähemmän muistia ja enemmän levysiirräntää (sisällytetty GNU ld -yhteensopivuussyistä)"
 
#: options.h:845 options.h:848
msgid "Generate shared library"
msgstr "Tuota jaettu kirjasto"
 
#: options.h:739
#: options.h:851
msgid "Stack size when -fsplit-stack function calls non-split"
msgstr "Pinokoko kun -fsplit-stack -funktio kutsuu non-split -pinoa"
 
#: options.h:857
msgid "Do not link against shared libraries"
msgstr "Älä linkitä jaettuihin kirjastoihin"
 
#: options.h:742
#: options.h:860
msgid "Identical Code Folding. '--icf=safe' folds only ctors and dtors."
msgstr "Identtinen koodilaskostuminen. ’--icf=safe’ laskostaa vain kohteet ctors ja dtors."
 
#: options.h:866
msgid "Number of iterations of ICF (default 2)"
msgstr "ICF-iterointien lukumäärä (oletus 2)"
 
#: options.h:866 options.h:899 options.h:901 options.h:903 options.h:905
msgid "COUNT"
msgstr "LASKURI"
 
#: options.h:869
msgid "List folded identical sections on stderr"
msgstr "Luettele laskostetut identtiset lohkot vakiovirheessä"
 
#: options.h:870
msgid "Do not list folded identical sections"
msgstr "Älä luettele laskostettuja identtisiä lohkoja"
 
#: options.h:873
msgid "Do not fold this symbol during ICF"
msgstr "Älä laskosta tätä symbolia ICF:n aikana"
 
#: options.h:876
msgid "Remove unused sections"
msgstr "Poista käyttämättömät lohkot"
 
#: options.h:877
msgid "Don't remove unused sections (default)"
msgstr "Älä poista käyttämättömiä lohkoja (oletus)"
 
#: options.h:880
msgid "List removed unused sections on stderr"
msgstr "Luettele poistetut käyttämättömät lohkot vakiovirheessä"
 
#: options.h:881
msgid "Do not list removed unused sections"
msgstr "Älä luettele poistettuja käyttämättömiä lohkoja"
 
#: options.h:884
msgid "Print resource usage statistics"
msgstr "Tulosta resurssikäyttötilastot"
 
#: options.h:745
#: options.h:887
msgid "Set target system root directory"
msgstr "Aseta kohdejärjestelmän juurihakemisto"
 
#: options.h:748
#: options.h:890
msgid "Print the name of each input file"
msgstr "Tulosta jokaisen syötetiedoston nimi"
 
#: options.h:751
#: options.h:893
msgid "Read linker script"
msgstr "Lue linkkeriskripti"
 
#: options.h:754
#: options.h:896
msgid "Run the linker multi-threaded"
msgstr "Suorita linkkeri monisäikeisesti"
 
#: options.h:755
#: options.h:897
msgid "Do not run the linker multi-threaded"
msgstr "Älä suorita linkkeriä monisäikeisesti"
 
#: options.h:757
#: options.h:899
msgid "Number of threads to use"
msgstr "Käytettävien säikeiden lukumäärä"
 
#: options.h:757 options.h:759 options.h:761 options.h:763
msgid "COUNT"
msgstr "LASKURI"
 
#: options.h:759
#: options.h:901
msgid "Number of threads to use in initial pass"
msgstr "Alustavassa ajossa käytettyjen säikeiden lukumäärä"
 
#: options.h:761
#: options.h:903
msgid "Number of threads to use in middle pass"
msgstr "Keskimmäisessä ajossa käytettyjen säikeiden lukumäärä"
 
#: options.h:763
#: options.h:905
msgid "Number of threads to use in final pass"
msgstr "Lopullisessa ajossa käytettyjen säikeiden lukumäärä"
 
#: options.h:766
#: options.h:908
msgid "Set the address of the bss segment"
msgstr "Aseta bss-lohkon osoite"
 
#: options.h:768
#: options.h:910
msgid "Set the address of the data segment"
msgstr "Aseta data-segmentin osoite"
 
#: options.h:770
#: options.h:912
msgid "Set the address of the text segment"
msgstr "Aseta text-segmentin osoite"
 
#: options.h:773
#: options.h:915
msgid "Create undefined reference to SYMBOL"
msgstr "Luo määrittelemätön viite SYMBOLIin"
 
#: options.h:773 options.h:786 options.h:789
msgid "SYMBOL"
msgstr "SYMBOLI"
 
#: options.h:776
#: options.h:918
msgid "Synonym for --debug=files"
msgstr "Synonyymi valitsimelle --debug=tiedostot"
 
#: options.h:779
#: options.h:921
msgid "Read version script"
msgstr "Lue versioskripti"
 
#: options.h:782
#: options.h:924
msgid "Warn about duplicate common symbols"
msgstr "Varoita yhteissymbolien kaksoiskappaleista"
 
#: options.h:925
msgid "Do not warn about duplicate common symbols (default)"
msgstr "Älä varoita yhteissymbolien kaksoiskappaleista (oletus)"
 
#: options.h:928
msgid "Warn when skipping an incompatible library"
msgstr "Varoita, kun ohitetaan yhteensopimaton kirjasto"
 
#: options.h:929
msgid "Don't warn when skipping an incompatible library"
msgstr "Älä varoita, kun ohitetaan yhteensopimaton kirjasto"
 
#: options.h:932
msgid "Include all archive contents"
msgstr "Sisällytä kaikki arkistosisällöt"
 
#: options.h:783
#: options.h:933
msgid "Include only needed archive contents"
msgstr "Sisällytä vain tarvitut arkistosisällöt"
 
#: options.h:786
#: options.h:936
msgid "Use wrapper functions for SYMBOL"
msgstr "Käytä käärinfunktioita symbolille SYMBOLI"
 
#: options.h:789
#: options.h:939
msgid "Trace references to symbol"
msgstr "Jäljitä viitteet symboliin"
 
#: options.h:792
#: options.h:942
msgid "Default search path for Solaris compatibility"
msgstr "Oletushakupolku Solaris-yhteensopivuutta varten"
 
#: options.h:793
#: options.h:943
msgid "PATH"
msgstr "POLKU"
 
#: options.h:796
#: options.h:946
msgid "Start a library search group"
msgstr "Aloita kirjastonetsimisryhmä"
 
#: options.h:798
#: options.h:948
msgid "End a library search group"
msgstr "Lopeta kirjastonetsimisryhmä"
 
#: options.h:803
#: options.h:953
msgid "Sort dynamic relocs"
msgstr "Lajittele dynaamiset relocs-tietueet"
 
#: options.h:804
#: options.h:954
msgid "Do not sort dynamic relocs"
msgstr "Älä lajittele dynaamisia relocs-tietueita"
 
#: options.h:806
#: options.h:956
msgid "Set common page size to SIZE"
msgstr "Aseta yhteissivun kooksi KOKO"
 
#: options.h:806 options.h:813
msgid "SIZE"
msgstr "KOKO"
 
#: options.h:811
#: options.h:961
msgid "Mark output as requiring executable stack"
msgstr "Merkitse tuloste vaadittuna suoritettavassa pinossa"
 
#: options.h:813
msgid "Set maximum page size to SIZE"
msgstr "Aseta suurimmaksi sivukooksi KOKO"
 
#: options.h:815
msgid "Mark output as not requiring executable stack"
msgstr "Merkitse, että tuloste ei vaadi suoritettavaa pinoa"
 
# DSO on ilmeisesti Dynamic shared object
#: options.h:817
#: options.h:963
msgid "Mark DSO to be initialized first at runtime"
msgstr "Merkitse dynaamisesti jaetut objektit alustettavaksi ensimmäiseksi ajoaikana"
 
#: options.h:820
#: options.h:966
msgid "Mark object to interpose all DSOs but executable"
msgstr "Merkitse objekti kaikkien dynaamisesti jaettujen objektien väliin paitsi suoritettavien"
 
#: options.h:823
#: options.h:969
msgid "Mark object for lazy runtime binding (default)"
msgstr "Merkitse objekti lazy-ajoaikaista sidontaa varten (oletus)"
 
#: options.h:972
msgid "Mark object requiring immediate process"
msgstr "Merkitse, että objekti vaatii välitöntä käsittelyä"
 
#: options.h:826
#: options.h:975
msgid "Set maximum page size to SIZE"
msgstr "Aseta suurimmaksi sivukooksi KOKO"
 
#: options.h:978
msgid "Do not create copy relocs"
msgstr "Älä luo kopio-relocs-tietueita"
 
#: options.h:980
msgid "Mark object not to use default search paths"
msgstr "Merkitse, että objekti ei käytä oletushakupolkuja"
 
#: options.h:829
#: options.h:983
msgid "Mark DSO non-deletable at runtime"
msgstr "Merkitse dynaamisesti jaettu objekti ei-poistettavaksi ajoaikana"
 
#: options.h:832
#: options.h:986
msgid "Mark DSO not available to dlopen"
msgstr "Merkitse, että dynaamisesti jaettu objekti ei ole saatavilla funktiolle dlopen"
 
#: options.h:835
#: options.h:989
msgid "Mark DSO not available to dldump"
msgstr "Merkitse, että dynaamisesti jaettu objekti ei saatavilla funktiolle dldump"
 
#: options.h:838
#: options.h:992
msgid "Mark output as not requiring executable stack"
msgstr "Merkitse, että tuloste ei vaadi suoritettavaa pinoa"
 
#: options.h:994
msgid "Mark object for immediate function binding"
msgstr "Merkitse, että objekti vaatii välitöntä funktion sidontaa"
 
#: options.h:997
msgid "Mark DSO to indicate that needs immediate $ORIGIN processing at runtime"
msgstr "Merkitse DSO osoittamaan, että se tarvitsee välittömän $ORIGIN-käsittelyn ajoaikaisesti"
 
#: options.h:1000
msgid "Where possible mark variables read-only after relocation"
msgstr "Missä mahdollista, merkitse muuttuja kirjoitussuojatuiksi uudelleensijoituksen jälkeen"
msgstr "Missä mahdollista, merkitse muuttuja kirjoitussuojatuiksi sijoituksen jälkeen"
 
#: options.h:839
#: options.h:1001
msgid "Don't mark variables read-only after relocation"
msgstr "Älä merkitse muuttujia kirjoitussuojatuiksi siirroksen jälkeen"
 
#: output.cc:1098
#: output.cc:1132
msgid "section group retained but group element discarded"
msgstr "lohkoryhmä palautettu, mutta ryhmän elementti hylätty"
 
#: output.cc:1800
#: output.cc:1860
#, c-format
msgid "invalid alignment %lu for section \"%s\""
msgstr "virheellinen tasaus %lu lohkolle ”%s”"
 
#: output.cc:3159
#: output.cc:3573
#, c-format
msgid "dot moves backward in linker script from 0x%llx to 0x%llx"
msgstr "piste siirtyy taaksepäin linkkeriskriptissä osoitteesta 0x%llx osoitteeseen 0x%llx"
 
#: output.cc:3576
#, c-format
msgid "address of section '%s' moves backward from 0x%llx to 0x%llx"
msgstr "lohkon ’%s’ osoite siirtyy taaksepäin osoitteesta 0x%llx osoitteeseen 0x%llx"
 
#: output.cc:3755
#, c-format
msgid "nobits section %s may not precede progbits section %s in same segment"
msgstr "nobits-lohko %s ei voi edeltää progbits-lohkoa %s samassa segmentissä"
 
#: output.cc:3329
#: output.cc:3907 output.cc:3975
#, c-format
msgid "%s: open: %s"
msgstr "%s: avaa tiedosto: %s"
 
#: output.cc:3350
#: output.cc:3996
#, c-format
msgid "%s: mremap: %s"
msgstr "%s: mremap epäonnistui: %s"
 
# Tätä ei löydy enää lähdekoodista
#: output.cc:3387
#: output.cc:4005
#, c-format
msgid "%s: lseek: %s"
msgstr "%s: lseek epäonnistui: %s"
msgid "%s: mmap: %s"
msgstr "%s: mmap epäonnistui: %s"
 
#: output.cc:3390 output.cc:3427
#: output.cc:4085
#, c-format
msgid "%s: write: %s"
msgstr "%s: write epäonnistui: %s"
msgid "%s: mmap: failed to allocate %lu bytes for output file: %s"
msgstr "%s: mmap: epäonnistuttiin varaamaan %lu tavua tulostetiedostolle: %s"
 
#: output.cc:3398
#: output.cc:4096
#, c-format
msgid "%s: mmap: %s"
msgstr "%s: mmap epäonnistui: %s"
 
#: output.cc:3408
#, c-format
msgid "%s: munmap: %s"
msgstr "%s: munmap epäonnistui: %s"
 
#: output.cc:3425
#: output.cc:4115
#, c-format
msgid "%s: write: unexpected 0 return-value"
msgstr "%s: write: odottamaton 0-paluuarvo"
 
#: output.cc:3439
#: output.cc:4117
#, c-format
msgid "%s: write: %s"
msgstr "%s: write epäonnistui: %s"
 
#: output.cc:4132
#, c-format
msgid "%s: close: %s"
msgstr "%s: close epäonnistui: %s"
 
#: output.h:415
#: output.h:520
msgid "** section headers"
msgstr "** lohko-otsakkeet"
 
#: output.h:451
#: output.h:565
msgid "** segment headers"
msgstr "** segmenttiotsakkeet"
 
#: output.h:490
#: output.h:613
msgid "** file header"
msgstr "** tiedosto-otsake"
 
#: output.h:696
#: output.h:833
msgid "** fill"
msgstr "** täyte"
 
#: output.h:850
#: output.h:987
msgid "** string table"
msgstr "** merkkijonotaulu"
 
#: output.h:1161
#: output.h:1300
msgid "** dynamic relocs"
msgstr "** dynaamiset sijoitukset"
 
#: output.h:1162 output.h:1498
#: output.h:1301 output.h:1637
msgid "** relocs"
msgstr "** sijoitukset"
 
#: output.h:1523
#: output.h:1662
msgid "** group"
msgstr "** ryhmä"
 
#: output.h:1630
#: output.h:1774
msgid "** GOT"
msgstr "** GOT"
 
#: output.h:1772
#: output.h:1916
msgid "** dynamic"
msgstr "** dynaaminen"
 
#: output.h:1890
#: output.h:2039
msgid "** symtab xindex"
msgstr "** symtab xindex"
 
#: parameters.cc:87
#: parameters.cc:172
#, c-format
msgid "unrecognized output format %s"
msgstr "tunnistamaton tulostemuoto %s"
 
#: powerpc.cc:1086 sparc.cc:1569 x86_64.cc:957
msgid "requires unsupported dynamic reloc; recompile with -fPIC"
msgstr "vaatii tukematonta dynaamista reloc-tietuetta, käännä uudelleen valitsimella -fPIC"
#: plugin.cc:106
#, c-format
msgid "%s: could not load plugin library"
msgstr "%s: ei voitu ladata lisäosakirjastoa"
 
#: powerpc.cc:1447 sparc.cc:2237 x86_64.cc:1561
#: plugin.cc:116
#, c-format
msgid "%s: could not find onload entry point"
msgstr "%s: ei kyetty löytämään sulkemistulokohtaa"
 
#: plugin.cc:426
msgid "Input files added by plug-ins in --incremental mode not supported yet.\n"
msgstr "Lisäosien lisäämiä syötetiedostoja ei tueta vielä --incremental -tilassa.\n"
 
#: powerpc.cc:1502 sparc.cc:2307 x86_64.cc:1632
#, c-format
msgid "%s: unsupported REL reloc section"
msgstr "%s: tukematon REL-sijoituslohko"
 
#: readsyms.cc:150
#: readsyms.cc:191
#, c-format
msgid "%s: file is empty"
msgstr "%s: tiedosto on tyhjä"
 
#. Here we have to handle any other input file types we need.
#: readsyms.cc:471
#: readsyms.cc:575
#, c-format
msgid "%s: not an object or archive"
msgstr "%s: ei ole objekti tai arkisto"
 
#: reduced_debug_output.cc:240
#: reduced_debug_output.cc:236
msgid "Debug abbreviations extend beyond .debug_abbrev section; failed to reduce debug abbreviations"
msgstr "Vianjäljityslyhennykset laajenevat .debug_abbrev-lohkon ylitse; vianjäljityslyhenteiden vähentäminen epäonnistui"
 
#: reduced_debug_output.cc:326
#: reduced_debug_output.cc:322
msgid "Extremely large compile unit in debug info; failed to reduce debug info"
msgstr "Äärimmäisen laaja käännösyksikkö vianjäljitystiedoissa; vianjäljitystietojen vähentäminen epäonnistui"
 
#: reduced_debug_output.cc:334
#: reduced_debug_output.cc:330
msgid "Debug info extends beyond .debug_info section;failed to reduce debug info"
msgstr "Vianjäljitystiedot laajentuvat .debug_info-lohkon ylitse; vianjäljitystietojen vähentäminen epäonnistui"
 
#: reduced_debug_output.cc:354 reduced_debug_output.cc:396
#: reduced_debug_output.cc:350 reduced_debug_output.cc:392
msgid "Invalid DIE in debug info; failed to reduce debug info"
msgstr "Virheellinen DIE vianjäljitystiedoissa; vianjäljitystietojen vähentäminen epäonnistui"
 
#: reduced_debug_output.cc:377
#: reduced_debug_output.cc:373
msgid "Debug info extends beyond .debug_info section; failed to reduce debug info"
msgstr "Vianjäljitystiedot laajenevat .debug_info-lohkon ylitse; vianjäljitystietojen vähentäminen epäonnistui"
 
#: reloc.cc:239 reloc.cc:743
#: reloc.cc:297 reloc.cc:858
#, c-format
msgid "relocation section %u uses unexpected symbol table %u"
msgstr "uudelleensijoituslohko %u käyttää odottomatonta symbolitaulua %u"
msgstr "sijoituslohko %u käyttää odottomatonta symbolitaulua %u"
 
#: reloc.cc:254 reloc.cc:761
#: reloc.cc:312 reloc.cc:875
#, c-format
msgid "unexpected entsize for reloc section %u: %lu != %u"
msgstr "odottamaton entsize reloc-lohkolle %u: %lu != %u"
 
#: reloc.cc:263 reloc.cc:770
#: reloc.cc:321 reloc.cc:884
#, c-format
msgid "reloc section %u size %lu uneven"
msgstr "reloc-lohko %u koko %lu pariton"
 
#: reloc.cc:992
#: reloc.cc:1203
#, c-format
msgid "could not convert call to '%s' to '%s'"
msgstr "ei voitu muuntaa kutsua kohteeseen ’%s’ kutsuksi kohteeseen ’%s’"
 
#: reloc.cc:1343
#, c-format
msgid "reloc section size %zu is not a multiple of reloc size %d\n"
msgstr "reloc-lohkokoko %zu ei ole reloc-koon %d monikerta\n"
 
#. We should only see externally visible symbols in the symbol
#. table.
#: resolve.cc:170
#: resolve.cc:191
msgid "invalid STB_LOCAL symbol in external symbols"
msgstr "virheellinen STB_LOCAL-symboli ulkoisissa symboleissa"
 
#. Any target which wants to handle STB_LOOS, etc., needs to
#. define a resolve method.
#: resolve.cc:176
#: resolve.cc:197
msgid "unsupported symbol binding"
msgstr "tukematon symbolisidos"
 
#. FIXME: Do a better job of reporting locations.
#: resolve.cc:367
#. A dynamic object cannot reference a hidden or internal symbol
#. defined in another object.
#: resolve.cc:266
#, c-format
msgid "%s: multiple definition of %s"
msgstr "%s: useita %s-määrittelyjä"
msgid "%s symbol '%s' in %s is referenced by DSO %s"
msgstr "%s symboli ’%s’ kohteessa %s on DSO %s:n viittaama"
 
#: resolve.cc:368 resolve.cc:373
#: resolve.cc:326
#, c-format
msgid "common of '%s' overriding smaller common"
msgstr "’%s’-yhteissymboli korvaa pienemmän yhteissymbolin"
 
#: resolve.cc:331
#, c-format
msgid "common of '%s' overidden by larger common"
msgstr "’%s’-yhteissymboli korvattu laajemmalla yhteissymbolilla"
 
#: resolve.cc:336
#, c-format
msgid "multiple common of '%s'"
msgstr "useita ’%s’-yhteissymboleja."
 
#: resolve.cc:442
#, c-format
msgid "multiple definition of '%s'"
msgstr "useita ’%s’-määrittelyjä"
 
#: resolve.cc:481
#, c-format
msgid "definition of '%s' overriding common"
msgstr "’%s’-määrittely korvaa yhteissymbolin"
 
#: resolve.cc:516
#, c-format
msgid "definition of '%s' overriding dynamic common definition"
msgstr "’%s’-määrittely korvaa dynaamisen yhteismäärittelyn"
 
#: resolve.cc:636
#, c-format
msgid "common '%s' overridden by previous definition"
msgstr "yhteinen ’%s’ korvattu edellisellä määrittelyllä"
 
#: resolve.cc:766 resolve.cc:778
msgid "command line"
msgstr "komentorivi"
 
#: resolve.cc:370
#, c-format
msgid "%s: previous definition here"
msgstr "%s: edellinen määrittely tässä"
 
#: script-sections.cc:432
#: script-sections.cc:690
msgid "dot may not move backward"
msgstr "piste ei voi siirtyä taaksepäin"
 
#: script-sections.cc:498
#: script-sections.cc:757
msgid "** expression"
msgstr "** lauseke"
 
#: script-sections.cc:684
#: script-sections.cc:941
msgid "fill value is not absolute"
msgstr "täytearvo ei ole absoluuttinen"
 
#: script-sections.cc:1693
#: script-sections.cc:1913
#, c-format
msgid "alignment of section %s is not absolute"
msgstr "lohkon %s tasaus ei ole absoluuttinen"
 
#: script-sections.cc:1737
#: script-sections.cc:1957
#, c-format
msgid "subalign of section %s is not absolute"
msgstr "lohkon %s alitasaus ei ole absoluuttinen"
 
#: script-sections.cc:1752
#: script-sections.cc:1972
#, c-format
msgid "fill of section %s is not absolute"
msgstr "lohkon %s täyte ei ole absoluuttinen"
 
#: script-sections.cc:1828
#: script-sections.cc:2048
msgid "SPECIAL constraints are not implemented"
msgstr "SPECIAL-rajoitteita ei ole toteutettu"
 
#: script-sections.cc:1870
#: script-sections.cc:2090
msgid "mismatched definition for constrained sections"
msgstr "täsmäämätön määrittely rajoitetuille lohkoille"
 
# DATA_SEGMENT_ALIGN on sisäänrakennettu funktio linkittäjän skriptikielessä.
#: script-sections.cc:2395
#: script-sections.cc:2634
msgid "DATA_SEGMENT_ALIGN may only appear once in a linker script"
msgstr "DATA_SEGMENT_ALIGN-funktio voi esiintyä vain kerran linkkeriskriptissä"
 
#: script-sections.cc:2406
#: script-sections.cc:2649
msgid "DATA_SEGMENT_RELRO_END may only appear once in a linker script"
msgstr "DATA_SEGMENT_RELRO_END-funktio voi esiintyä vain kerran linkkeriskriptissä"
 
#: script-sections.cc:2411
#: script-sections.cc:2654
msgid "DATA_SEGMENT_RELRO_END must follow DATA_SEGMENT_ALIGN"
msgstr "DATA_SEGMENT_RELRO_END-funktion on seurattava DATA_SEGMENT_ALIGN-funktiota"
 
#: script-sections.cc:2570
#: script-sections.cc:2826
msgid "no matching section constraint"
msgstr "ei täsmäävää lohkorajoitusta"
 
#: script-sections.cc:2890
#: script-sections.cc:3151
msgid "TLS sections are not adjacent"
msgstr "TLS-lohkot eivät ole vierekkäisiä"
 
#: script-sections.cc:3016
#: script-sections.cc:3280
msgid "allocated section not in any segment"
msgstr "varattu lohko ei ole missään segmentissä"
 
#: script-sections.cc:3048
#: script-sections.cc:3309
#, c-format
msgid "no segment %s"
msgstr "ei segmenttiä %s"
 
#: script-sections.cc:3058
#: script-sections.cc:3323
msgid "section in two PT_LOAD segments"
msgstr "lohko kahdessa PT_LOAD-segmentissä"
 
#: script-sections.cc:3065
#: script-sections.cc:3330
msgid "allocated section not in any PT_LOAD segment"
msgstr "varattu lohko ei ole missään PT_LOAD-segmentissä"
 
#: script-sections.cc:3093
#: script-sections.cc:3358
msgid "may only specify load address for PT_LOAD segment"
msgstr "voi vain antaa latausosoitteen PT_LOAD-segmentille"
 
#: script-sections.cc:3117
#: script-sections.cc:3382
#, c-format
msgid "PHDRS load address overrides section %s load address"
msgstr "PHDRS-komennon latausosoite korvaa lohkon %s latausosoitteen"
 
#. We could support this if we wanted to.
#: script-sections.cc:3128
#: script-sections.cc:3393
msgid "using only one of FILEHDR and PHDRS is not currently supported"
msgstr "vain yhden avainsanoista FILEHDR ja PHDRS käyttämistä ei nykyisin tueta"
 
#: script-sections.cc:3143
#: script-sections.cc:3408
msgid "sections loaded on first page without room for file and program headers are not supported"
msgstr "ei tueta ensimmäisellä sivulla ladattuja lohkoja ilman tilaa tiedostolle ja ohjelmaotsakkeille"
 
#: script-sections.cc:3149
#: script-sections.cc:3414
msgid "using FILEHDR and PHDRS on more than one PT_LOAD segment is not currently supported"
msgstr "avainsanojen FILEHDR ja PHDRS käyttämistä useammassa kuin yhdessä PT_LOAD-segmentissä ei nykyisin tueta"
 
#: script.cc:1063
#: script.cc:1072
msgid "invalid use of PROVIDE for dot symbol"
msgstr "virheellinen PROVIDE-käyttö dot-symbolille"
 
#: script.cc:1065
msgid "invalid assignment to dot outside of SECTIONS"
msgstr "virheellinen arvonasetus dot-symbolille SECTIONS-lauseen ulkopuolella"
 
#: script.cc:1995
#: script.cc:2132
#, c-format
msgid "%s:%d:%d: %s"
msgstr "%s:%d:%d: %s"
1724,135 → 2102,135
 
#. There are some options that we could handle here--e.g.,
#. -lLIBRARY. Should we bother?
#: script.cc:2143
#: script.cc:2297
#, c-format
msgid "%s:%d:%d: ignoring command OPTION; OPTION is only valid for scripts specified via -T/--script"
msgstr "%s:%d:%d: ohitetaan komento OPTION; OPTION on kelvollinen vain skripteillä, jotka määritellään valitsimilla -T/--script"
 
#: script.cc:2168
#: script.cc:2362
#, c-format
msgid "%s:%d:%d: ignoring SEARCH_DIR; SEARCH_DIR is only valid for scripts specified via -T/--script"
msgstr "%s:%d:%d: ohitetaan SEARCH_DIR; SEARCH_DIR on kelvollinen vain skripteille, jotka on määritelty valitsimien -T/--script kautta"
 
#: script.cc:2411 script.cc:2425
#: script.cc:2606 script.cc:2620
#, c-format
msgid "%s:%d:%d: DATA_SEGMENT_ALIGN not in SECTIONS clause"
msgstr "%s:%d:%d: DATA_SEGMENT_ALIGN-funktio ei ole SECTIONS-lauseessa"
 
#: script.cc:2543
#: script.cc:2739
msgid "unknown PHDR type (try integer)"
msgstr "tuntematon PHDR-tyyppi (yritä kokonaislukua)"
 
# Esimerkiksi puhelinluettelossa A-kirjaimella alkavat nimet muodostavat yhden bucketin, B-kirjaimella alkavat toisen jne. A ja B ovat hash key -avaimia.
#: stringpool.cc:526
#: stringpool.cc:528
#, c-format
msgid "%s: %s entries: %zu; buckets: %zu\n"
msgstr "%s: %s alkiota: %zu; lohkot: %zu\n"
 
#: stringpool.cc:530
#: stringpool.cc:532
#, c-format
msgid "%s: %s entries: %zu\n"
msgstr "%s: %s alkiota: %zu\n"
 
#: stringpool.cc:533
#: stringpool.cc:535
#, c-format
msgid "%s: %s Stringdata structures: %zu\n"
msgstr "%s: %s Stringdata-rakenteet: %zu\n"
 
# ensimmäinen argumentti on objektinimi, toinen nimi
#: symtab.cc:623
#: symtab.cc:857
#, c-format
msgid "%s: reference to %s"
msgstr "%s: viite nimeen %s"
 
# ensimmäinen argumentti on objektinimi, toinen nimi
#: symtab.cc:625
#: symtab.cc:859
#, c-format
msgid "%s: definition of %s"
msgstr "%s: %s-määrittely"
 
#: symtab.cc:860
#: symtab.cc:1052
#, c-format
msgid "bad global symbol name offset %u at %zu"
msgstr "väärä yleissymbolinimisiirros %u osoitteessa %zu"
 
#: symtab.cc:999
#: symtab.cc:1278
msgid "--just-symbols does not make sense with a shared object"
msgstr "--just-symbols ei tunnu järkevältä jaetuille objekteille"
 
#: symtab.cc:1005
#: symtab.cc:1284
msgid "too few symbol versions"
msgstr "liian harvoja symboliversioita"
 
#: symtab.cc:1054
#: symtab.cc:1333
#, c-format
msgid "bad symbol name offset %u at %zu"
msgstr "väärä symbolinimisiirros %u osoitteessa %zu"
 
#: symtab.cc:1117
#: symtab.cc:1396
#, c-format
msgid "versym for symbol %zu out of range: %u"
msgstr "versym symbolille %zu lukualueen ulkopuolella: %u"
 
#: symtab.cc:1125
#: symtab.cc:1404
#, c-format
msgid "versym for symbol %zu has no name: %u"
msgstr "versym symbolille %zu ei ole nimeä: %u"
 
#: symtab.cc:2035 symtab.cc:2251
#: symtab.cc:2549 symtab.cc:2681
#, c-format
msgid "%s: unsupported symbol section 0x%x"
msgstr "%s: tukematon symbolilohko 0x%x"
 
#: symtab.cc:2409
#: symtab.cc:2933
#, c-format
msgid "%s: undefined reference to '%s', version '%s'"
msgstr "%s: määrittelemätön viite kohteeseen ’%s’, versio ’%s’"
 
#: symtab.cc:2414
#, c-format
msgid "%s: undefined reference to '%s'"
msgstr "%s: määrittelemätön viite kohteeseen ’%s’"
 
#: symtab.cc:2498
#, c-format
msgid "%s: symbol table entries: %zu; buckets: %zu\n"
msgstr "%s: symbolitaulualkiot: %zu; lohkot: %zu\n"
 
#: symtab.cc:2501
#: symtab.cc:2936
#, c-format
msgid "%s: symbol table entries: %zu\n"
msgstr "%s: symbolitaulutuloja: %zu\n"
 
#: symtab.cc:2572
#: symtab.cc:3007
#, c-format
msgid "while linking %s: symbol '%s' defined in multiple places (possible ODR violation):"
msgstr "kun linkitetään %s: symboli ’%s’ määritellään useissa paikoissa (mahdollinen ODR-ristiriita):"
 
#: target-reloc.h:247
msgid "Relocation refers to discarded comdat section"
msgstr "Uudelleensijoitus viittaa hylättyyn comdat-lohkoon"
#: target-reloc.h:259
msgid "relocation refers to discarded comdat section"
msgstr "sijoitus viittaa hylättyyn comdat-lohkoon"
 
#: target-reloc.h:278
#: target-reloc.h:298
#, c-format
msgid "reloc has bad offset %zu"
msgstr "reloc-tietueella on väärä siirros %zu"
 
#: target.cc:90
#, c-format
msgid "%s: unsupported ELF file type %d"
msgstr "%s: tukematon ELF-tiedostotyyppi %d"
 
#: target.cc:157
#, c-format
msgid "linker does not include stack split support required by %s"
msgstr "linkkeri ei sisällä kohteen %s vaatiman pinojakamisen tukea"
 
#: tls.h:59
msgid "TLS relocation out of range"
msgstr "TLS-uudelleensijoitus lukualueen ulkopuolella"
msgstr "TLS-sijoitus lukualueen ulkopuolella"
 
#: tls.h:73
msgid "TLS relocation against invalid instruction"
msgstr "TLS-uudelleensijoitus virhellistä käskyä vastaan"
msgstr "TLS-sijoitus virheellistä käskyä vastaan"
 
#. This output is intended to follow the GNU standards.
#: version.cc:64
#: version.cc:65
#, c-format
msgid "Copyright 2008 Free Software Foundation, Inc.\n"
msgstr "Copyright 2008 Free Software Foundation, Inc.\n"
 
#: version.cc:65
#: version.cc:66
#, c-format
msgid ""
"This program is free software; you may redistribute it under the terms of\n"
1868,24 → 2246,39
msgid "%s failed: %s"
msgstr "%s epäonnistui: %s"
 
#: x86_64.cc:2104
#: x86_64.cc:2184
#, c-format
msgid "unsupported reloc type %u"
msgstr "tukematon reloc-tietuetyyppi %u"
 
#: x86_64.cc:2441
#: x86_64.cc:2524
#, c-format
msgid "unsupported reloc %u against local symbol"
msgstr "tukematon reloc %u -tietue paikallista symbolia vastaan"
 
#~ msgid "Copyright 2009 Free Software Foundation, Inc.\n"
#~ msgstr "Copyright 2009 Free Software Foundation, Inc.\n"
#~ msgid " applied to section relative value"
#~ msgstr " sovellettu lohkosuhteelliseen arvoon"
 
#~ msgid "symbols %s %zu %zu\n"
#~ msgstr "symbolit %s %zu %zu\n"
#~ msgid "cannot find -l%s"
#~ msgstr "ei voi löytää -l%s"
 
#~ msgid "archive %s %zu %zu\n"
#~ msgstr "arkisto %s %zu %zu\n"
#~ msgid "%s: ELF file too short"
#~ msgstr "%s: ELF-tiedosto on liian lyhyt"
 
#~ msgid "Incremental linking might be possible (not implemented yet)\n"
#~ msgstr "Kasvava linkitys saattaisi olla mahdollista (ei ole vielä toteutettu)\n"
#~ msgid "%s: invalid ELF version 0"
#~ msgstr "%s: virheellinen ELF-versio 0"
 
#~ msgid "%s: unsupported ELF version %d"
#~ msgstr "%s: tukematon ELF-versio %d"
 
#~ msgid "%s: invalid ELF class 0"
#~ msgstr "%s: virheellinen ELF-luokka 0"
 
#~ msgid "%s: unsupported ELF class %d"
#~ msgstr "%s: tukematon ELF-luokka %d"
 
#~ msgid "%s: invalid ELF data encoding"
#~ msgstr "%s: virheellinen ELF-datakoodaus"
 
#~ msgid "%s: unsupported ELF data encoding %d"
#~ msgstr "%s: tukematon ELF-datakoodaus %d"
/x86_64.cc
1549,7 → 1549,7
case GOT_TYPE_STANDARD:
if (parameters->options().output_is_position_independent())
rela_dyn->add_local_relative(obj, r_sym, elfcpp::R_X86_64_RELATIVE,
this->got_, got_offset, 0);
this->got_, got_offset, 0, false);
break;
case GOT_TYPE_TLS_OFFSET:
rela_dyn->add_local(obj, r_sym, elfcpp::R_X86_64_TPOFF64,
1953,8 → 1953,8
const elfcpp::Sym<64, false>& lsym)
{
// A local STT_GNU_IFUNC symbol may require a PLT entry.
if (lsym.get_st_type() == elfcpp::STT_GNU_IFUNC
&& this->reloc_needs_plt_for_ifunc(object, r_type))
bool is_ifunc = lsym.get_st_type() == elfcpp::STT_GNU_IFUNC;
if (is_ifunc && this->reloc_needs_plt_for_ifunc(object, r_type))
{
unsigned int r_sym = elfcpp::elf_r_sym<64>(reloc.get_r_info());
target->make_local_ifunc_plt_entry(symtab, layout, object, r_sym);
1982,7 → 1982,7
elfcpp::R_X86_64_RELATIVE,
output_section, data_shndx,
reloc.get_r_offset(),
reloc.get_r_addend());
reloc.get_r_addend(), is_ifunc);
}
break;
 
2058,7 → 2058,7
// lets function pointers compare correctly with shared
// libraries. Otherwise we would need an IRELATIVE reloc.
bool is_new;
if (lsym.get_st_type() == elfcpp::STT_GNU_IFUNC)
if (is_ifunc)
is_new = got->add_local_plt(object, r_sym, GOT_TYPE_STANDARD);
else
is_new = got->add_local(object, r_sym, GOT_TYPE_STANDARD);
2076,7 → 2076,7
object->local_got_offset(r_sym, GOT_TYPE_STANDARD);
rela_dyn->add_local_relative(object, r_sym,
elfcpp::R_X86_64_RELATIVE,
got, got_offset, 0);
got, got_offset, 0, is_ifunc);
}
else
{
3181,12 → 3181,6
}
if (optimized_type == tls::TLSOPT_TO_IE)
{
if (tls_segment == NULL)
{
gold_assert(parameters->errors()->error_count() > 0
|| issue_undefined_symbol_error(gsym));
return;
}
value = target->got_plt_section()->address() + got_offset;
this->tls_gd_to_ie(relinfo, relnum, tls_segment, rela, r_type,
value, view, address, view_size);
/output.cc
119,7 → 119,9
static int
posix_fallocate(int o, off_t offset, off_t len)
{
return ftruncate(o, offset + len);
if (ftruncate(o, offset + len) < 0)
return errno;
return 0;
}
#endif // !defined(HAVE_POSIX_FALLOCATE)
 
706,7 → 708,7
bool is_symbolless)
: address_(address), local_sym_index_(GSYM_CODE), type_(type),
is_relative_(is_relative), is_symbolless_(is_symbolless),
is_section_symbol_(false), shndx_(INVALID_CODE)
is_section_symbol_(false), use_plt_offset_(false), shndx_(INVALID_CODE)
{
// this->type_ is a bitfield; make sure TYPE fits.
gold_assert(this->type_ == type);
727,7 → 729,7
bool is_symbolless)
: address_(address), local_sym_index_(GSYM_CODE), type_(type),
is_relative_(is_relative), is_symbolless_(is_symbolless),
is_section_symbol_(false), shndx_(shndx)
is_section_symbol_(false), use_plt_offset_(false), shndx_(shndx)
{
gold_assert(shndx != INVALID_CODE);
// this->type_ is a bitfield; make sure TYPE fits.
749,10 → 751,12
Address address,
bool is_relative,
bool is_symbolless,
bool is_section_symbol)
bool is_section_symbol,
bool use_plt_offset)
: address_(address), local_sym_index_(local_sym_index), type_(type),
is_relative_(is_relative), is_symbolless_(is_symbolless),
is_section_symbol_(is_section_symbol), shndx_(INVALID_CODE)
is_section_symbol_(is_section_symbol), use_plt_offset_(use_plt_offset),
shndx_(INVALID_CODE)
{
gold_assert(local_sym_index != GSYM_CODE
&& local_sym_index != INVALID_CODE);
773,10 → 777,12
Address address,
bool is_relative,
bool is_symbolless,
bool is_section_symbol)
bool is_section_symbol,
bool use_plt_offset)
: address_(address), local_sym_index_(local_sym_index), type_(type),
is_relative_(is_relative), is_symbolless_(is_symbolless),
is_section_symbol_(is_section_symbol), shndx_(shndx)
is_section_symbol_(is_section_symbol), use_plt_offset_(use_plt_offset),
shndx_(shndx)
{
gold_assert(local_sym_index != GSYM_CODE
&& local_sym_index != INVALID_CODE);
799,7 → 805,7
Address address)
: address_(address), local_sym_index_(SECTION_CODE), type_(type),
is_relative_(false), is_symbolless_(false),
is_section_symbol_(true), shndx_(INVALID_CODE)
is_section_symbol_(true), use_plt_offset_(false), shndx_(INVALID_CODE)
{
// this->type_ is a bitfield; make sure TYPE fits.
gold_assert(this->type_ == type);
820,7 → 826,7
Address address)
: address_(address), local_sym_index_(SECTION_CODE), type_(type),
is_relative_(false), is_symbolless_(false),
is_section_symbol_(true), shndx_(shndx)
is_section_symbol_(true), use_plt_offset_(false), shndx_(shndx)
{
gold_assert(shndx != INVALID_CODE);
// this->type_ is a bitfield; make sure TYPE fits.
842,7 → 848,7
Address address)
: address_(address), local_sym_index_(0), type_(type),
is_relative_(false), is_symbolless_(false),
is_section_symbol_(false), shndx_(INVALID_CODE)
is_section_symbol_(false), use_plt_offset_(false), shndx_(INVALID_CODE)
{
// this->type_ is a bitfield; make sure TYPE fits.
gold_assert(this->type_ == type);
858,7 → 864,7
Address address)
: address_(address), local_sym_index_(0), type_(type),
is_relative_(false), is_symbolless_(false),
is_section_symbol_(false), shndx_(shndx)
is_section_symbol_(false), use_plt_offset_(false), shndx_(shndx)
{
gold_assert(shndx != INVALID_CODE);
// this->type_ is a bitfield; make sure TYPE fits.
877,7 → 883,7
Address address)
: address_(address), local_sym_index_(TARGET_CODE), type_(type),
is_relative_(false), is_symbolless_(false),
is_section_symbol_(false), shndx_(INVALID_CODE)
is_section_symbol_(false), use_plt_offset_(false), shndx_(INVALID_CODE)
{
// this->type_ is a bitfield; make sure TYPE fits.
gold_assert(this->type_ == type);
894,7 → 900,7
Address address)
: address_(address), local_sym_index_(TARGET_CODE), type_(type),
is_relative_(false), is_symbolless_(false),
is_section_symbol_(false), shndx_(shndx)
is_section_symbol_(false), use_plt_offset_(false), shndx_(shndx)
{
gold_assert(shndx != INVALID_CODE);
// this->type_ is a bitfield; make sure TYPE fits.
1121,6 → 1127,12
Sized_relobj_file<size, big_endian>* relobj =
this->u1_.relobj->sized_relobj();
gold_assert(relobj != NULL);
if (this->use_plt_offset_)
{
uint64_t plt_address =
parameters->target().plt_address_for_local(relobj, lsi);
return plt_address + relobj->local_plt_offset(lsi);
}
const Symbol_value<size>* symval = relobj->local_symbol(lsi);
return symval->value(relobj, addend);
}
1949,7 → 1961,8
void
Output_fill_debug_info::do_write(Output_file* of, off_t off, size_t len) const
{
gold_debug(DEBUG_INCREMENTAL, "fill_debug_info(%08lx, %08lx)", off, len);
gold_debug(DEBUG_INCREMENTAL, "fill_debug_info(%08lx, %08lx)",
static_cast<long>(off), static_cast<long>(len));
 
gold_assert(len >= this->do_minimum_hole_size());
 
1960,15 → 1973,15
// address_size.
if (this->is_big_endian())
{
elfcpp::Swap<32, true>::writeval(pov, len - 4);
elfcpp::Swap<16, true>::writeval(pov + 4, this->version);
elfcpp::Swap<32, true>::writeval(pov + 6, 0);
elfcpp::Swap_unaligned<32, true>::writeval(pov, len - 4);
elfcpp::Swap_unaligned<16, true>::writeval(pov + 4, this->version);
elfcpp::Swap_unaligned<32, true>::writeval(pov + 6, 0);
}
else
{
elfcpp::Swap<32, false>::writeval(pov, len - 4);
elfcpp::Swap<16, false>::writeval(pov + 4, this->version);
elfcpp::Swap<32, false>::writeval(pov + 6, 0);
elfcpp::Swap_unaligned<32, false>::writeval(pov, len - 4);
elfcpp::Swap_unaligned<16, false>::writeval(pov + 4, this->version);
elfcpp::Swap_unaligned<32, false>::writeval(pov + 6, 0);
}
pov += 4 + 2 + 4;
*pov++ = 4;
2005,7 → 2018,8
void
Output_fill_debug_line::do_write(Output_file* of, off_t off, size_t len) const
{
gold_debug(DEBUG_INCREMENTAL, "fill_debug_line(%08lx, %08lx)", off, len);
gold_debug(DEBUG_INCREMENTAL, "fill_debug_line(%08lx, %08lx)",
static_cast<long>(off), static_cast<long>(len));
 
gold_assert(len >= this->do_minimum_hole_size());
 
2019,15 → 2033,15
// line number program is empty.
if (this->is_big_endian())
{
elfcpp::Swap<32, true>::writeval(pov, len - 4);
elfcpp::Swap<16, true>::writeval(pov + 4, this->version);
elfcpp::Swap<32, true>::writeval(pov + 6, len - (4 + 2 + 4));
elfcpp::Swap_unaligned<32, true>::writeval(pov, len - 4);
elfcpp::Swap_unaligned<16, true>::writeval(pov + 4, this->version);
elfcpp::Swap_unaligned<32, true>::writeval(pov + 6, len - (4 + 2 + 4));
}
else
{
elfcpp::Swap<32, false>::writeval(pov, len - 4);
elfcpp::Swap<16, false>::writeval(pov + 4, this->version);
elfcpp::Swap<32, false>::writeval(pov + 6, len - (4 + 2 + 4));
elfcpp::Swap_unaligned<32, false>::writeval(pov, len - 4);
elfcpp::Swap_unaligned<16, false>::writeval(pov + 4, this->version);
elfcpp::Swap_unaligned<32, false>::writeval(pov + 6, len - (4 + 2 + 4));
}
pov += 4 + 2 + 4;
*pov++ = 1; // minimum_instruction_length
2474,7 → 2488,10
|| layout->is_section_ordering_specified())
{
Input_section isecn(object, shndx, input_section_size, addralign);
if (layout->is_section_ordering_specified())
/* If section ordering is requested by specifying a ordering file,
using --section-ordering-file, match the section name with
a pattern. */
if (parameters->options().section_ordering_file())
{
unsigned int section_order_index =
layout->find_section_order_index(std::string(secname));
3483,7 → 3500,7
 
void
Output_section::update_section_layout(
const Section_layout_order& order_map)
const Section_layout_order* order_map)
{
for (Input_section_list::iterator p = this->input_sections_.begin();
p != this->input_sections_.end();
3497,8 → 3514,8
: p->relaxed_input_section()->relobj());
unsigned int shndx = p->shndx();
Section_layout_order::const_iterator it
= order_map.find(Section_id(obj, shndx));
if (it == order_map.end())
= order_map->find(Section_id(obj, shndx));
if (it == order_map->end())
continue;
unsigned int section_order_index = it->second;
if (section_order_index != 0)
4878,17 → 4895,27
if (use_base_file)
{
this->open(s.st_size);
ssize_t len = ::read(o, this->base_, s.st_size);
if (len < 0)
{
gold_info(_("%s: read failed: %s"), base_name, strerror(errno));
return false;
}
if (len < s.st_size)
{
gold_info(_("%s: file too short"), base_name);
return false;
}
ssize_t bytes_to_read = s.st_size;
unsigned char* p = this->base_;
while (bytes_to_read > 0)
{
ssize_t len = ::read(o, p, bytes_to_read);
if (len < 0)
{
gold_info(_("%s: read failed: %s"), base_name, strerror(errno));
return false;
}
if (len == 0)
{
gold_info(_("%s: file too short: read only %lld of %lld bytes"),
base_name,
static_cast<long long>(s.st_size - bytes_to_read),
static_cast<long long>(s.st_size));
return false;
}
p += len;
bytes_to_read -= len;
}
::close(o);
return true;
}
5050,8 → 5077,12
// output file will wind up incomplete, but we will have already
// exited. The alternative to fallocate would be to use fdatasync,
// but that would be a more significant performance hit.
if (writable && ::posix_fallocate(o, 0, this->file_size_) < 0)
gold_fatal(_("%s: %s"), this->name_, strerror(errno));
if (writable)
{
int err = ::posix_fallocate(o, 0, this->file_size_);
if (err != 0)
gold_fatal(_("%s: %s"), this->name_, strerror(err));
}
 
// Map the file into memory.
int prot = PROT_READ;
/plugin.h
243,7 → 243,7
// and we are still in the initial input phase.
bool
should_defer_layout() const
{ return !this->objects_.empty() && !this->in_replacement_phase_; }
{ return this->any_claimed_ && !this->in_replacement_phase_; }
 
// Add a regular object to the deferred layout list. These are
// objects whose layout has been deferred until after the
393,7 → 393,9
 
// Fill in the symbol resolution status for the given plugin symbols.
ld_plugin_status
get_symbol_resolution_info(int nsyms, ld_plugin_symbol* syms) const;
get_symbol_resolution_info(int nsyms,
ld_plugin_symbol* syms,
int version) const;
 
// Store the incoming symbols from the plugin for later processing.
void
/incremental.h
81,6 → 81,11
 
static const int INCREMENTAL_SHLIB_SYM_FLAGS_SHIFT = 30;
 
// Return TRUE if a section of type SH_TYPE can be updated in place
// during an incremental update.
bool
can_incremental_update(unsigned int sh_type);
 
// Create an Incremental_binary object for FILE. Returns NULL is this is not
// possible, e.g. FILE is not an ELF file or has an unsupported target.
 
1991,6 → 1996,8
unsigned int local_dynsym_offset_;
// The entries in the symbol table for the external symbols.
Symbols symbols_;
// Number of symbols defined in object file itself.
size_t defined_count_;
// The offset of the first incremental relocation for this object.
unsigned int incr_reloc_offset_;
// The number of incremental relocations for this object.
2122,6 → 2129,8
Input_entry_reader input_reader_;
// The entries in the symbol table for the external symbols.
Symbols symbols_;
// Number of symbols defined in object file itself.
size_t defined_count_;
};
 
// Allocate an incremental object of the appropriate size and endianness.
/reloc.h
247,6 → 247,8
RELOC_ADJUST_FOR_SECTION_2,
RELOC_ADJUST_FOR_SECTION_4,
RELOC_ADJUST_FOR_SECTION_8,
// Like RELOC_ADJUST_FOR_SECTION_4 but for unaligned relocs.
RELOC_ADJUST_FOR_SECTION_4_UNALIGNED,
// Discard the input reloc--process it completely when relocating
// the data section contents.
RELOC_DISCARD,
331,6 → 333,18
elfcpp::Swap<valsize, big_endian>::writeval(wv, x + value);
}
 
// Like the above but for relocs at unaligned addresses.
template<int valsize>
static inline void
rel_unaligned(unsigned char* view,
typename elfcpp::Swap<valsize, big_endian>::Valtype value)
{
typedef typename elfcpp::Swap_unaligned<valsize, big_endian>::Valtype
Valtype;
Valtype x = elfcpp::Swap_unaligned<valsize, big_endian>::readval(view);
elfcpp::Swap_unaligned<valsize, big_endian>::writeval(view, x + value);
}
 
// Do a simple relocation using a Symbol_value with the addend in
// the section contents. VALSIZE is the size of the value to
// relocate.
347,6 → 361,20
elfcpp::Swap<valsize, big_endian>::writeval(wv, x);
}
 
// Like the above but for relocs at unaligned addresses.
template<int valsize>
static inline void
rel_unaligned(unsigned char* view,
const Sized_relobj_file<size, big_endian>* object,
const Symbol_value<size>* psymval)
{
typedef typename elfcpp::Swap_unaligned<valsize, big_endian>::Valtype
Valtype;
Valtype x = elfcpp::Swap_unaligned<valsize, big_endian>::readval(view);
x = psymval->value(object, x);
elfcpp::Swap_unaligned<valsize, big_endian>::writeval(view, x);
}
 
// Do a simple relocation with the addend in the relocation.
// VALSIZE is the size of the value.
template<int valsize>
389,6 → 417,19
elfcpp::Swap<valsize, big_endian>::writeval(wv, x + value - address);
}
 
// Like the above but for relocs at unaligned addresses.
template<int valsize>
static inline void
pcrel_unaligned(unsigned char* view,
typename elfcpp::Swap<valsize, big_endian>::Valtype value,
typename elfcpp::Elf_types<size>::Elf_Addr address)
{
typedef typename elfcpp::Swap<valsize, big_endian>::Valtype Valtype;
Valtype x = elfcpp::Swap_unaligned<valsize, big_endian>::readval(view);
elfcpp::Swap_unaligned<valsize, big_endian>::writeval(view,
x + value - address);
}
 
// Do a simple PC relative relocation with a Symbol_value with the
// addend in the section contents. VALSIZE is the size of the
// value.
552,12 → 593,24
rel32(unsigned char* view, elfcpp::Elf_Word value)
{ This::template rel<32>(view, value); }
 
// Like above but for relocs at unaligned addresses.
static inline void
rel32_unaligned(unsigned char* view, elfcpp::Elf_Word value)
{ This::template rel_unaligned<32>(view, value); }
 
static inline void
rel32(unsigned char* view,
const Sized_relobj_file<size, big_endian>* object,
const Symbol_value<size>* psymval)
{ This::template rel<32>(view, object, psymval); }
 
// Like above but for relocs at unaligned addresses.
static inline void
rel32_unaligned(unsigned char* view,
const Sized_relobj_file<size, big_endian>* object,
const Symbol_value<size>* psymval)
{ This::template rel_unaligned<32>(view, object, psymval); }
 
// Do an 32-bit RELA relocation with the addend in the relocation.
static inline void
rela32(unsigned char* view, elfcpp::Elf_Word value, elfcpp::Elf_Word addend)
577,7 → 630,13
typename elfcpp::Elf_types<size>::Elf_Addr address)
{ This::template pcrel<32>(view, value, address); }
 
// Unaligned version of the above.
static inline void
pcrel32_unaligned(unsigned char* view, elfcpp::Elf_Word value,
typename elfcpp::Elf_types<size>::Elf_Addr address)
{ This::template pcrel_unaligned<32>(view, value, address); }
 
static inline void
pcrel32(unsigned char* view,
const Sized_relobj_file<size, big_endian>* object,
const Symbol_value<size>* psymval,
/layout.cc
410,6 → 410,7
script_output_section_data_list_(),
segment_states_(NULL),
relaxation_debug_check_(NULL),
section_order_map_(),
input_section_position_(),
input_section_glob_(),
incremental_base_(NULL),
898,11 → 899,10
{
unsigned int sh_type = shdr.get_sh_type();
 
// We preserve the layout of PROGBITS, NOBITS, and NOTE sections.
// We preserve the layout of PROGBITS, NOBITS, INIT_ARRAY, FINI_ARRAY,
// PRE_INIT_ARRAY, and NOTE sections.
// All others will be created from scratch and reallocated.
if (sh_type != elfcpp::SHT_PROGBITS
&& sh_type != elfcpp::SHT_NOBITS
&& sh_type != elfcpp::SHT_NOTE)
if (!can_incremental_update(sh_type))
return NULL;
 
typename elfcpp::Elf_types<size>::Elf_Addr sh_addr = shdr.get_sh_addr();
1442,6 → 1442,7
&& order != ORDER_FINI
&& order != ORDER_RELRO_LAST
&& order != ORDER_NON_RELRO_FIRST
&& strcmp(name, ".eh_frame") != 0
&& strcmp(name, ".ctors") != 0
&& strcmp(name, ".dtors") != 0
&& strcmp(name, ".jcr") != 0)
2975,8 → 2976,9
 
// We shouldn't get here--we shouldn't create segments which we
// can't distinguish. Unless of course we are using a weird linker
// script.
gold_assert(this->script_options_->saw_phdrs_clause());
// script or overlapping --section-start options.
gold_assert(this->script_options_->saw_phdrs_clause()
|| parameters->options().any_section_start());
return false;
}
 
/timer.h
48,10 → 48,18
TimeStats
get_elapsed_time();
 
// Return the stats for pass N (0 <= N <= 2).
TimeStats
get_pass_time(int n);
 
// Start counting the time.
void
start();
 
// Record the time used by pass N (0 <= N <= 2).
void
stamp(int n);
 
private:
// This class cannot be copied.
Timer(const Timer&);
63,6 → 71,9
 
// The time of the last call to start.
TimeStats start_time_;
 
// Times for each pass.
TimeStats pass_times_[3];
};
 
}
/Makefile.am
15,7 → 15,7
-I$(srcdir) -I$(srcdir)/../include -I$(srcdir)/../elfcpp \
-DLOCALEDIR="\"$(datadir)/locale\"" \
-DBINDIR="\"$(bindir)\"" -DTOOLBINDIR="\"$(tooldir)/bin\"" \
@INCINTL@
-DTOOLLIBDIR="\"$(tooldir)/lib\"" @INCINTL@
 
LIBIBERTY = ../libiberty/libiberty.a
 
151,12 → 151,14
 
sources_var = main.cc
deps_var = $(TARGETOBJS) libgold.a $(LIBIBERTY) $(LIBINTL_DEP)
ldadd_var = $(TARGETOBJS) libgold.a $(LIBIBERTY) $(LIBINTL) \
ldadd_var = $(TARGETOBJS) libgold.a $(LIBIBERTY) $(GOLD_LDADD) $(LIBINTL) \
$(THREADSLIB) $(LIBDL)
ldflags_var = $(GOLD_LDFLAGS)
 
ld_new_SOURCES = $(sources_var)
ld_new_DEPENDENCIES = $(deps_var)
ld_new_LDADD = $(ldadd_var)
ld_new_LDFLAGS = $(ldflags_var)
 
EXTRA_ld_new_SOURCES = $(TARGETSOURCES)
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.