+2017-10-05 Alan Modra <amodra@gmail.com>
+
+ * elflink.c (elf_link_input_bfd): Correct ctor/dtor in init_array/
+ fini_array error value.
+
+2017-10-04 Pavel I. Kryukov <kryukov@frtk.ru>
+
+ PR 22245
+ * bfd.c (bfd_set_error): Avoid UB on passing arg to va_start that
+ undergoes default promotion.
+ * bfd-in2.h: Regenerate.
+
+2017-09-28 Alan Modra <amodra@gmail.com>
+
+ PR 22220
+ * elflink.c (_bfd_elf_merge_symbol): Set non_ir_ref_dynamic in
+ a case where plugin_notice isn't called.
+
+2017-09-26 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/22199
+ * elf64-x86-64.c (elf_x86_64_finish_dynamic_symbol): Don't pass
+ output_bfd to info->callbacks->minfo.
+
+2017-09-22 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR binutils/22170
+ * elf32-i386.c (elf_i386_get_synthetic_symtab): Guard against
+ corrupted PLT.
+ * elf64-x86-64.c (elf_x86_64_get_synthetic_symtab): Likewise.
+
+2017-09-22 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR binutils/22163
+ * elf32-i386.c (elf_i386_get_synthetic_symtab): Also return -1
+ if bfd_canonicalize_dynamic_reloc returns 0.
+ * elf64-x86-64.c (elf_x86_64_get_synthetic_symtab): Likewise.
+
+2017-09-21 Nick Clifton <nickc@redhat.com>
+
+ * development.sh (development): Revert previous delta.
+
+2017-09-20 Nick Clifton <nickc@redhat.com>
+
+ * development.sh (development): Set to false.
+
2017-09-19 Nick Clifton <nickc@redhat.com>
2.29.1 Release
bfd_error_type bfd_get_error (void);
-void bfd_set_error (bfd_error_type error_tag, ...);
+void bfd_set_error (int error_tag, ...);
const char *bfd_errmsg (bfd_error_type error_tag);
bfd_set_error
SYNOPSIS
- void bfd_set_error (bfd_error_type error_tag, ...);
+ void bfd_set_error (int error_tag, ...);
DESCRIPTION
Set the BFD error condition to be @var{error_tag}.
*/
void
-bfd_set_error (bfd_error_type error_tag, ...)
+bfd_set_error (int error_tag, ...)
{
bfd_error = error_tag;
if (error_tag == bfd_error_on_input)
dynrelcount = bfd_canonicalize_dynamic_reloc (abfd, dynrelbuf,
dynsyms);
- if (dynrelcount < 0)
+ if (dynrelcount <= 0)
return -1;
/* Sort the relocs by address. */
size += sizeof ("+0x") - 1 + 8;
n++;
s++;
+ /* There should be only one entry in PLT for a given
+ symbol. Set howto to NULL after processing a PLT
+ entry to guard against corrupted PLT. */
+ p->howto = NULL;
}
offset += plt_entry_size;
}
if (SYMBOL_REFERENCES_LOCAL (info, h))
{
info->callbacks->minfo (_("Local IFUNC function `%s' in %B\n"),
- output_bfd,
h->root.root.string,
h->root.u.def.section->owner);
dynrelcount = bfd_canonicalize_dynamic_reloc (abfd, dynrelbuf,
dynsyms);
- if (dynrelcount < 0)
+ if (dynrelcount <= 0)
return -1;
/* Sort the relocs by address. */
size += sizeof ("+0x") - 1 + 8 + 8 * ABI_64_P (abfd);
n++;
s++;
+ /* There should be only one entry in PLT for a given
+ symbol. Set howto to NULL after processing a PLT
+ entry to guard against corrupted PLT. */
+ p->howto = NULL;
}
offset += plt_entry_size;
}
olddyn = (oldsec->symbol->flags & BSF_DYNAMIC) != 0;
}
+ /* Handle a case where plugin_notice won't be called and thus won't
+ set the non_ir_ref flags on the first pass over symbols. */
+ if (oldbfd != NULL
+ && (oldbfd->flags & BFD_PLUGIN) != (abfd->flags & BFD_PLUGIN)
+ && newdyn != olddyn)
+ {
+ h->root.non_ir_ref_dynamic = TRUE;
+ hi->root.non_ir_ref_dynamic = TRUE;
+ }
+
/* NEWDEF and OLDDEF indicate whether the new or old symbol,
respectively, appear to be a definition rather than reference. */
(_("error: %B: size of section %A is not "
"multiple of address size"),
input_bfd, o);
- bfd_set_error (bfd_error_on_input);
+ bfd_set_error (bfd_error_bad_value);
return FALSE;
}
o->flags |= SEC_ELF_REVERSE_COPY;
-#define BFD_VERSION_DATE 20170919
+#define BFD_VERSION_DATE 20171017
#define BFD_VERSION @bfd_version@
#define BFD_VERSION_STRING @bfd_version_package@ @bfd_version_string@
#define REPORT_BUGS_TO @report_bugs_to@
+2017-09-21 Maciej W. Rozycki <macro@imgtec.com>
+
+ * readelf.c (get_machine_flags) <E_MIPS_MACH_5900>: New case.
+
2017-09-15 Nick Clifton <nickc@redhat.com>
2.29.1 Release
case E_MIPS_MACH_4650: strcat (buf, ", 4650"); break;
case E_MIPS_MACH_5400: strcat (buf, ", 5400"); break;
case E_MIPS_MACH_5500: strcat (buf, ", 5500"); break;
+ case E_MIPS_MACH_5900: strcat (buf, ", 5900"); break;
case E_MIPS_MACH_SB1: strcat (buf, ", sb1"); break;
case E_MIPS_MACH_9000: strcat (buf, ", 9000"); break;
case E_MIPS_MACH_LS2E: strcat (buf, ", loongson-2e"); break;
+2017-09-21 Maciej W. Rozycki <macro@imgtec.com>
+
+ * testsuite/gas/mips/elf_mach_5900.d: New test.
+ * testsuite/gas/mips/mips.exp: Run it.
+
2017-09-15 Nick Clifton <nickc@redhat.com>
2.29.1 Release
--- /dev/null
+#readelf: -Ah
+#name: ELF R5900 markings
+#as: -32 -march=r5900
+#source: empty.s
+
+ELF Header:
+#...
+ Flags: +0x..92...., .*5900.*
+#...
+
+MIPS ABI Flags Version: 0
+
+ISA: MIPS3
+GPR size: 32
+CPR1 size: 32
+CPR2 size: 0
+FP ABI: .*
+ISA Extension: Toshiba R5900
+ASEs:
+ None
+FLAGS 1: .*
+FLAGS 2: .*
run_dump_test "elf_ase_micromips-2"
# Verify that machine markings are handled properly.
+ run_dump_test "elf_mach_5900"
run_dump_test "elf_mach_interaptiv-mr2"
run_dump_test "mips-gp32-fp32-pic"
+2017-09-28 Alan Modra <amodra@gmail.com>
+
+ * powerpc.cc (Target_powerpc<64,*>::powerpc_info): Set
+ is_default_stack_executable false.
+
+2017-08-03 James Clarke <jrtc27@jrtc27.com>
+
+ * options.h (General_options): Set a non-NULL second help string
+ argument for relax to allow --no-relax.
+
+2017-09-20 Alan Modra <amodra@gmail.com>
+
+ * powerpc.cc (Target_powerpc::Branch_info::make_stub): Put
+ stubs for ppc32 non-branch relocs in first stub table.
+ (Target_powerpc::Relocate::relocate): Resolve similarly.
+
2017-09-19 Alan Modra <amodra@gmail.com>
* options.h (stub-group-multi): Default to true. Add
N_("Generate relocatable output"), NULL);
DEFINE_bool(relax, options::TWO_DASHES, '\0', false,
- N_("Relax branches on certain targets"), NULL);
+ N_("Relax branches on certain targets"),
+ N_("Do not relax branches"));
DEFINE_string(retain_symbols_file, options::TWO_DASHES, '\0', NULL,
N_("keep only symbols listed in this file"), N_("FILE"));
false, // has_make_symbol
true, // has_resolve
false, // has_code_fill
- true, // is_default_stack_executable
+ false, // is_default_stack_executable
false, // can_icf_inline_merge_sections
'\0', // wrap_char
"/usr/lib/ld.so.1", // dynamic_linker
false, // has_make_symbol
true, // has_resolve
false, // has_code_fill
- true, // is_default_stack_executable
+ false, // is_default_stack_executable
false, // can_icf_inline_merge_sections
'\0', // wrap_char
"/usr/lib/ld.so.1", // dynamic_linker
target->glink_section()->add_global_entry(gsym);
else
{
- if (stub_table == NULL)
+ if (stub_table == NULL
+ && !(size == 32
+ && gsym != NULL
+ && !parameters->options().output_is_position_independent()
+ && !is_branch_reloc(this->r_type_)))
stub_table = this->object_->stub_table(this->shndx_);
if (stub_table == NULL)
{
- // This is a ref from a data section to an ifunc symbol.
+ // This is a ref from a data section to an ifunc symbol,
+ // or a non-branch reloc for which we always want to use
+ // one set of stubs for resolving function addresses.
stub_table = ifunc_stub_table;
}
gold_assert(stub_table != NULL);
}
else
{
- Stub_table<size, big_endian>* stub_table
- = object->stub_table(relinfo->data_shndx);
+ Stub_table<size, big_endian>* stub_table = NULL;
+ if (target->stub_tables().size() == 1)
+ stub_table = target->stub_tables()[0];
+ if (stub_table == NULL
+ && !(size == 32
+ && gsym != NULL
+ && !parameters->options().output_is_position_independent()
+ && !is_branch_reloc(r_type)))
+ stub_table = object->stub_table(relinfo->data_shndx);
if (stub_table == NULL)
{
- // This is a ref from a data section to an ifunc symbol.
+ // This is a ref from a data section to an ifunc symbol,
+ // or a non-branch reloc for which we always want to use
+ // one set of stubs for resolving function addresses.
if (target->stub_tables().size() != 0)
stub_table = target->stub_tables()[0];
}
+2017-09-28 Alan Modra <amodra@gmail.com>
+
+ * testsuite/ld-plugin/pr22220.h,
+ * testsuite/ld-plugin/pr22220lib.cc,
+ * testsuite/ld-plugin/pr22220lib.ver,
+ * testsuite/ld-plugin/pr22220main.cc: New test.
+ * testsuite/ld-plugin/lto.exp: Run it.
+
2017-09-19 Nick Clifton <nickc@redhat.com>
2.29.1 Release
[list "Build pr21382.so" \
"-shared" "-O2 -fpic" \
{pr21382b.c} {} "pr21382.so" "c"] \
+ [list {Build pr22220lib.so} \
+ {-shared -Wl,--version-script=pr22220lib.ver} {-fPIC} \
+ {pr22220lib.cc} {} {pr22220lib.so} {c++}] \
+ [list {Build pr22220main.o} \
+ {} {-flto} \
+ {pr22220main.cc} {} {} {c++}] \
]
# Check final symbols in executables.
[list "Run pr21382" \
"-O2 -flto -fuse-linker-plugin -Wl,--as-needed tmpdir/pr21382a.o tmpdir/pr21382.so" "" \
{dummy.c} "pr21382.exe" "pass.out" "" "c"] \
+ [list {pr22220a} \
+ {-flto -fuse-linker-plugin tmpdir/pr22220main.o tmpdir/pr22220lib.so} {} \
+ {dummy.c} {pr22220a.exe} {pass.out} {} {c++}] \
+ [list {pr22220b} \
+ {-flto -fuse-linker-plugin -Wl,--no-as-needed tmpdir/pr22220lib.so tmpdir/pr22220main.o} {} \
+ {dummy.c} {pr22220b.exe} {pass.out} {} {c++}] \
]
# LTO run-time tests for ELF
--- /dev/null
+extern int doo();
+
+inline int *goo() {
+ static int xyz;
+ return &xyz;
+}
+
+int *boo();
--- /dev/null
+#include "pr22220.h"
+
+int* boo()
+{
+ return goo ();
+}
--- /dev/null
+BAR { global: *; };
--- /dev/null
+#include <stdio.h>
+#include "pr22220.h"
+
+int main()
+{
+ if (boo() == goo())
+ {
+ printf ("PASS\n");
+ return 0;
+ }
+ return 1;
+}