aboutsummaryrefslogtreecommitdiff
path: root/bfd
AgeCommit message (Collapse)AuthorFilesLines
2020-01-14som: Don't loop forever reading symbol chainsAlan Modra2-2/+16
* som.c (som_bfd_count_ar_symbols): Error when file position of symbols on chains is not strictly increasing.
2020-01-14ubsan: alpha-vms: segvAlan Modra3-10/+20
I thought the fuzzers were really going overboard by defining VMS_DEBUG but that wasn't the case. VMS_DEBUG is defined by default. Let's not do that, and fix the segv as well. * vms.h (VMS_DEBUG): Define as 0. * vms-alpha.c (image_write): Move debug output after bounds check. Tidy bounds check. (_bfd_vms_slurp_eihd): Warning fix. (_bfd_vms_slurp_etir): Init variables to avoid bogus warnings.
2020-01-14Automatic date update in version.inGDB Administrator1-1/+1
2020-01-13ubsan: alpha-vma: timeoutAlan Modra2-8/+16
* vms-alpha.c (_bfd_vms_slurp_egsd): Ensure minimum size even for "ignored" records.
2020-01-13Memory leaks and ineffective bounds checking in wasm_scanAlan Modra2-56/+56
It's always a bad idea to perform arithmetic on an unknown value read from an object file before comparing against bounds. Code like the following attempting to bounds check "len", a 64-bit value, isn't effective because the pointer arithmetic ignores the high 32 bits when compiled for a 32-bit host. READ_LEB128 (len, p, end); if (p + len < p || p + len > end) goto error_return; Instead, perform any arithmetic on known values where we don't need to worry about overflows: READ_LEB128 (len, p, end); if (len > (size_t) (end - p)) goto error_return; I'll note that this check does do things the right way: READ_LEB128 (symcount, p, end); /* Sanity check: each symbol has at least two bytes. */ if (symcount > payload_size / 2) return FALSE; "symcount * 2 > payload_size" would be wrong since the multiply could overflow. * wasm-module.c (wasm_scan_name_function_section): Formatting. Delete asect name check. Move asect NULL check to wasm_object_p. Correct bounds check of sizes against end. Replace uses of bfd_zalloc with bfd_alloc, zeroing only necessary bytes. Use just one bfd_release. (wasm_scan): Don't use malloc/strdup for section names, bfd_alloc instead. Simplify code prefixing section name. Formatting. Don't attempt to free memory here.. (wasm_object_p): ..do so here. Formatting.
2020-01-13Automatic date update in version.inGDB Administrator1-1/+1
2020-01-12Automatic date update in version.inGDB Administrator1-1/+1
2020-01-11Automatic date update in version.inGDB Administrator1-1/+1
2020-01-10[PR ld/22269] arm: Avoid dynamic relocs for undefweak symbols in static PIESzabolcs Nagy2-4/+9
With static PIE linking undefined weak symbols are resolved to 0, so no dynamic relocation is needed for them. The UNDEFWEAK_NO_DYNAMIC_RELOC macro was introduced so this case can be handled easily, but it was not applied consistently in the first attempt to fix ld/22269 for arm: commit 95b03e4ad68e7a90f5096b47df595636344b783a arm: Check UNDEFWEAK_NO_DYNAMIC_RELOC This patch fixes spurious relative relocs in static PIE binaries against GOT entries created for undefined weak symbols on arm*-*, this fixes FAIL: pr22269-1 (static pie undefined weak) bfd/ChangeLog: PR ld/22269 * elf32-arm.c (elf32_arm_final_link_relocate): Use UNDEFWEAK_NO_DYNAMIC_RELOC. (allocate_dynrelocs_for_symbol): Likewise.
2020-01-10AArch64: Revert setting of elf class in linker stub.Tamar Christina2-4/+5
This changes the fix to PR 25210 by removing the ELF class change. As it turns out the correct change was only the change in compress.c. Everything else is unneeded and setting the elf class is making the linker behave very oddly under LTO. The first stub is correctly written out but for the rest the suddenly don't have a pointer to the stub section anymore. This caused SPEC to fail as the program would branch to the stub and it wouldn't be filled in. Committed to master under the trivial rule as this is partially reverting a previous commit. bfd/ChangeLog: PR 25210 * elfnn-aarch64.c (_bfd_aarch64_create_stub_section): Remove elfclass.
2020-01-10ubsan: alpha-coff: signed integer overflowAlan Modra2-1/+5
* coff-alpha.c (alpha_ecoff_object_p): Calculate size in bfd_size_type.
2020-01-10Automatic date update in version.inGDB Administrator1-1/+1
2020-01-09Fix an illegal memory access triggered when trying to examine an input file ↵Nick Clifton2-2/+20
containing corrupt compressed sections. PR 25221 * bfd.c (bfd_convert_section_contents): Check for a compress header size that is larger than the actual section size.
2020-01-09Automatic date update in version.inGDB Administrator1-1/+1
2020-01-08PR25351 .ARM.attributes not found for symbolAlan Modra2-0/+11
PR 25351 * elflink.c (bfd_elf_final_link): Call _bfd_fix_excluded_sec_syms after removing sections.
2020-01-08Automatic date update in version.inGDB Administrator1-1/+1
2020-01-07Automatic date update in version.inGDB Administrator1-1/+1
2020-01-06RISC-V: Fix weak function call reloc overflow on llvm build.Jim Wilson2-3/+16
bfd/ PR 25205 * elfnn-riscv.c (riscv_elf_relocate_section) <R_RISCV_CALL>: Add check for !bfd_link_pic (info). <R_RISCV_CALL_PLT>: Move next to R_RISCV_CALL. <R_RISCV_JAL>: Add comment. (_bfd_riscv_relax_section): For plt.offset check, add check for bfd_link_pic (info). Add comment. Change-Id: Ie769bc3d5adf096a51df5cc12efe3d50e80acb8f
2020-01-06bfd_check_format: ignore errors from coff_real_object_pAlan Modra2-8/+6
Since 1993-11-05 git commit c188b0bec3b, bfd_check_format has failed if any of the target object_p functions returns false with any error but bfd_error_wrong_format. That's just weird. There is really no reason why coff_real_object_p should be fixed to only return that error instead of numerous other possible errors. Even an out of memory condition for one target doesn't necessarily mean other targets can't match, assuming the failing target nicely returns all memory it might have used. * format.c (bfd_check_format_matches): Ignore bfd_error on target match failures. Don't init to bfd_error_wrong_format before calling _bfd_check_format.
2020-01-06alpha-vms: don't exit on stack underflow/overflowAlan Modra2-53/+108
BFD is not supposed to exit or abort on anything the user can do. * vms-alpha.c (_bfd_vms_push, _bfd_vms_pop): Return pass/fail status rather than exiting on stack overflow or underflow. (_bfd_vms_slurp_etir): Adjust to suit.
2020-01-06som_bfd_fill_in_ar_symbols buffer overflowAlan Modra2-6/+21
* som.c (som_bfd_fill_in_ar_symbols): Bounds check som_dict index.
2020-01-06Basic error checking for mach-oAlan Modra2-17/+84
Fixes lots of places the fuzzers are going to find, and the one they already hit. * mach-o.c (bfd_mach_o_read_dylinker): Don't read past end of command. Check name offset is within command. (bfd_mach_o_read_dylib, bfd_mach_o_read_prebound_dylib), (bfd_mach_o_read_prebind_cksum, bfd_mach_o_read_twolevel_hints), (bfd_mach_o_read_fvmlib, bfd_mach_o_read_dysymtab), (bfd_mach_o_read_symtab, bfd_mach_o_read_uuid), (bfd_mach_o_read_linkedit, bfd_mach_o_read_str), (bfd_mach_o_read_dyld_info, bfd_mach_o_read_version_min), (bfd_mach_o_read_encryption_info, bfd_mach_o_read_source_version), (bfd_mach_o_read_encryption_info_64, bfd_mach_o_read_main), (bfd_mach_o_read_note, bfd_mach_o_read_build_version), (bfd_mach_o_read_segment): Similarly. (bfd_mach_o_read_thread): Properly bound check thread struct. Don't repeat checks on second loop. (bfd_mach_o_read_command): Fail on invalid command length.
2020-01-06Automatic date update in version.inGDB Administrator1-1/+1
2020-01-05Automatic date update in version.inGDB Administrator1-1/+1
2020-01-04Release bfd_alloc memory in bfd_check_format_matchesAlan Modra2-13/+45
It's a little tricky. We can release any memory back when we have a match failure, but after a match success which we might want to preserve for later use the high water mark must change to that of the matched bfd. * format.c (bfd_check_format_matches): Add preserve_match. Save initial bfd state in "preserve", matched bfd state in "preserve_match". Save just the first match. Release bfd_alloc memory. Restore and finish preserved state as appropriate on all function exit paths.
2020-01-04mmo tdata leakAlan Modra2-1/+5
malloc'd tdata isn't freed. * mmo.c (mmo_mkobject): Allocate tdata with bfd_zalloc.
2020-01-04coff: free malloc'd memory on successful target match tooAlan Modra2-0/+8
object_p functions cannot allocate memory by malloc and not free it before returning. Even a successful target match may not be the best match. If a match isn't used then those malloc'd blocks won't be freed. * coffgen.c (coff_real_object_p): Free malloc'd memory on target match too.
2020-01-04Automatic date update in version.inGDB Administrator1-1/+1
2020-01-03Fix potential illegal memory access when parsing a corrupt PEF format file.Nick Clifton2-1/+8
PR 25307 (bfd_pef_parse_function_stubs): Correct the test that ensures that there is enough data remaining in the code buffer before attempting to read a function stub.
2020-01-03Fix potential illegal memory access failures in the BFD library by ensuring ↵Nick Clifton5-5/+42
that the return value from bfd_malloc() is checked before it is used. PR 25308 * elf-properties.c (_bfd_elf_convert_gnu_properties): Check the return value from bfd_malloc. * elf32-arm.c (bfd_elf32_arm_vfp11_fix_veneer_locations): Likewise. (bfd_elf32_arm_stm32l4xx_fix_veneer_locations): Likewise. (elf32_arm_filter_cmse_symbols): Likewise. (elf32_arm_write_section): Likewise. * mach-o.c (bfd_mach_o_core_fetch_environment): Likewise. (bfd_mach_o_follow_dsym): Likewise. * pef.c (bfd_pef_print_loader_section): Likewise. (bfd_pef_scan_start_address): Likewise. (bfd_pef_parse_function_stubs): Likewise. (bfd_pef_parse_symbols): Likewise.
2020-01-03Fix ld/PR25316 for the ia64 target by refusing to support binary merging.Sergei Trofimovich2-4/+13
ld/PR25316 * elfnn-ia64.c (elfNN_ia64_merge_private_bfd_data): don't fail on binary inputs ld/PR25316. (is_ia64_elf): new helper to filter on ia64 objects.
2020-01-03Mach-O: misc build adjustmentsJan Beulich2-19/+25
Oldish gcc warns about local variables shadowing outer scope ones. Additionally %lx is not (always) suitable to print the result of bfd_get_32().
2020-01-03Automatic date update in version.inGDB Administrator1-1/+1
2020-01-02Add support for the GBZ80, Z180, and eZ80 variants of the Z80 architecure. ↵Sergey Belyashov17-1662/+2523
Add an ELF based target for these as well. PR 25224 bfd * Makefile.am: Add z80-elf target support. * configure.ac: Likewise. * targets.c: Likewise. * config.bfd: Add z80-elf target support and new arches: ez80 and z180. * elf32-z80.c: New file. * archures.c: Add new z80 architectures: eZ80 and Z180. * coffcode.h: Likewise. * cpu-z80.c: Likewise. * bfd-in2.h: Likewise plus additional Z80 relocations. * coff-z80.c: Add new relocations for Z80 target and local label check. gas * config/tc-z80.c: Add new architectures: Z180 and eZ80. Add support for assembler code generated by SDCC. Add new relocation types. Add z80-elf target support. * config/tc-z80.h: Add z80-elf target support. Enable dollar local labels. Local labels starts from ".L". * testsuite/gas/all/fwdexp.d: Fix failure due to symbol conflict. * testsuite/gas/all/fwdexp.s: Likewise. * testsuite/gas/z80/suffix.d: Fix failure on ELF target. * testsuite/gas/z80/z80.exp: Add new tests * testsuite/gas/z80/dollar.d: New file. * testsuite/gas/z80/dollar.s: New file. * testsuite/gas/z80/ez80_adl_all.d: New file. * testsuite/gas/z80/ez80_adl_all.s: New file. * testsuite/gas/z80/ez80_adl_suf.d: New file. * testsuite/gas/z80/ez80_isuf.s: New file. * testsuite/gas/z80/ez80_z80_all.d: New file. * testsuite/gas/z80/ez80_z80_all.s: New file. * testsuite/gas/z80/ez80_z80_suf.d: New file. * testsuite/gas/z80/r800_extra.d: New file. * testsuite/gas/z80/r800_extra.s: New file. * testsuite/gas/z80/r800_ii8.d: New file. * testsuite/gas/z80/r800_z80_doc.d: New file. * testsuite/gas/z80/z180.d: New file. * testsuite/gas/z80/z180.s: New file. * testsuite/gas/z80/z180_z80_doc.d: New file. * testsuite/gas/z80/z80_doc.d: New file. * testsuite/gas/z80/z80_doc.s: New file. * testsuite/gas/z80/z80_ii8.d: New file. * testsuite/gas/z80/z80_ii8.s: New file. * testsuite/gas/z80/z80_in_f_c.d: New file. * testsuite/gas/z80/z80_in_f_c.s: New file. * testsuite/gas/z80/z80_op_ii_ld.d: New file. * testsuite/gas/z80/z80_op_ii_ld.s: New file. * testsuite/gas/z80/z80_out_c_0.d: New file. * testsuite/gas/z80/z80_out_c_0.s: New file. * testsuite/gas/z80/z80_reloc.d: New file. * testsuite/gas/z80/z80_reloc.s: New file. * testsuite/gas/z80/z80_sli.d: New file. * testsuite/gas/z80/z80_sli.s: New file. ld * Makefile.am: Add new target z80-elf * configure.tgt: Likewise. * emultempl/z80.em: Add support for eZ80 and Z180 architectures. * emulparams/elf32z80.sh: New file. * emultempl/z80elf.em: Likewise. * testsuite/ld-z80/arch_ez80_adl.d: Likewise. * testsuite/ld-z80/arch_ez80_z80.d: Likewise. * testsuite/ld-z80/arch_r800.d: Likewise. * testsuite/ld-z80/arch_z180.d: Likewise. * testsuite/ld-z80/arch_z80.d: Likewise. * testsuite/ld-z80/comb_arch_ez80_z80.d: Likewise. * testsuite/ld-z80/comb_arch_z180.d: Likewise. * testsuite/ld-z80/labels.s: Likewise. * testsuite/ld-z80/relocs.s: Likewise. * testsuite/ld-z80/relocs_b_ez80.d: Likewise. * testsuite/ld-z80/relocs_b_z80.d: Likewise. * testsuite/ld-z80/relocs_f_z80.d: Likewise. * testsuite/ld-z80/z80.exp: Likewise. opcodes * z80-dis.c: Add support for eZ80 and Z80 instructions.
2020-01-02AArch64: Set the correct ELF class for AArch64 stubs (PR/25210)Tamar Christina2-0/+10
This fixes PR 25210 by specifying the the correct ELF class for AArch64 stubs. After doing this the stub section starts behaving like a normal object file loaded from disk. That is SEC_LINKER_CREATED causes us to have to write the section manually. This flag was added as a fix for PR 24753. I believe that fix to still be correct as linker created sections don't have a size on disk and it fixes the Arm bootstrap regression. But in this case specifying the correct section class also makes the stub section not be considered by compress.c. So I'm partially revert this change so that we don't have to manage the section manually as implied by SEC_LINKER_CREATED. bfd/ChangeLog: PR 25210 PR 24753 * elfnn-aarch64.c (_bfd_aarch64_create_stub_section): Set ELF class. ld/ChangeLog: PR 25210 PR 24753 * emultempl/aarch64elf.em (elf${ELFSIZE}_aarch64_add_stub_section): Remove SEC_LINKER_CREATED. * testsuite/ld-aarch64/aarch64-elf.exp: Add erratum835769-843419. * testsuite/ld-aarch64/erratum835769-843419.d: New test.
2020-01-02Automatic date update in version.inGDB Administrator1-1/+1
2020-01-01Re: Update year range in copyright notice of binutils filesAlan Modra1-0/+4
Add the ChangeLog entry.
2020-01-01Update year range in copyright notice of binutils filesAlan Modra429-434/+434
2020-01-01ChangeLog rotationAlan Modra2-3173/+3187
2020-01-01Automatic date update in version.inGDB Administrator1-1/+1
2019-12-31asan: alpha-vms: Heap-buffer-overflowAlan Modra2-51/+53
This fixes yet more errors in the alpha-vms buffer size checks. * vms-alpha.c (_bfd_vms_slurp_eisd): Don't overflow when checking offset. Don't overflow when checking rec_size, and do allow rec_size to the end of the buffer. Ensure eisd->type can be accessed, not just the first 32 bytes. Don't call _bfd_vms_save_counted_string with zero length remaining. Fail on empty string section name. (_bfd_vms_slurp_egsd): Formatting. Catch more reads past end of record size. Correct remaining length calculation. Fail on empty string section name. Consolidate error paths.
2019-12-31Automatic date update in version.inGDB Administrator1-1/+1
2019-12-30vms-alpha.c object_p memory leaksAlan Modra2-12/+28
* vms-alpha.c (alpha_vms_free_private): New function, extracted.. (vms_close_and_cleanup): ..from here. (alpha_vms_object_p): Call alpha_vms_free_private on failure.
2019-12-30coff object_p memory leaksAlan Modra2-0/+7
* coffgen.c (coff_real_object_p): Free malloc'd memory on failure.
2019-12-30archive.c bfd_zallocAlan Modra2-25/+32
Quite a few bfd_zalloc calls are wasting time clearing memory, and should be bfd_alloc instead. * archive.c (do_slurp_bsd_armap): Use bfd_alloc rather than bfd_zalloc when memory is all written after the call. (do_slurp_coff_armap): Likewise. Set bfd_error on ridiculously large allocations that overflow bfd_size_type. Use just one bfd_release on error exit. (_bfd_slurp_extended_name_table): Use bfd_alloc for extended_names, clear last byte rather than the entire array. Use bfd_alloc for string table. Rearrange and simplify code copying file names.
2019-12-30Automatic date update in version.inGDB Administrator1-1/+1
2019-12-29ubsan: alpha-vms: shift exponent is too largeAlan Modra2-9/+14
* vms-alpha.c (_bfd_vms_slurp_egsd): Make base_addr a bfd_vma. Limit alignment power. Correct and simplify alignment expression. (evax_bfd_print_relocation_records): Avoid signed shift left.
2019-12-29asan: alpha-vms: memory leaksAlan Modra4-50/+99
* vms-misc.c (_bfd_vms_save_sized_string): Add abfd param, make size a size_t. Use bfd_alloc rather than bfd_malloc. (_bfd_vms_save_counted_string): Similarly. * vms.h (_bfd_vms_save_sized_string): Update prototype. (_bfd_vms_save_counted_string): Likewise. * vms-alpha.c (_bfd_vms_slurp_ehdr): Adjust _bfd_vms_save_counted_string and bfd_vms_save_sized_string calls. (_bfd_vms_slurp_egsd, parse_module): Likewise. (_bfd_vms_slurp_eisd): Likewise. Check return status. (alpha_vms_bfd_link_hash_table_free): New function. (alpha_vms_bfd_link_hash_table_create): Arrange to call it. (vms_close_and_cleanup): Free more memory. Don't release tdata.
2019-12-29coff_close_and_cleanupAlan Modra5-1/+27
Fixes leaks in _bfd_coff_get_external_symbols and _bfd_coff_read_string_table. * coffcode.h (coff_close_and_cleanup): Redefine to.. * coffgen.c (_bfd_coff_close_and_cleanup): ..this. New function. * libcoff-in.h (_bfd_coff_close_and_cleanup): Declare. * libcoff.h: Regenerate.
2019-12-29PR15350, Fix compressed debug sections for PE targetsAlan Modra2-43/+48
PR 15350 * bfd.c (bfd_update_compression_header): Write zlib header for formats other than ELF too.