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, |
§ion, NULL); |
§ion, 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) |
|