aboutsummaryrefslogtreecommitdiff
path: root/bfd
AgeCommit message (Collapse)AuthorFilesLines
2023-02-23Test SEC_HAS_CONTENTS in relax routinesAlan Modra23-25/+51
More places that generally expect instructions, so not zeros. * coff-sh.c (sh_relax_section, sh_relax_delete_bytes): Exclude sections without SEC_HAS_CONTENTS set. * elf-m10200.c (mn10200_elf_relax_section): Likewise. * elf32-arc.c (arc_elf_relax_section): Likewise. * elf32-avr.c (elf32_avr_relax_section): Likewise. * elf32-cr16.c (elf32_cr16_relax_section): Likewise. * elf32-crx.c (elf32_crx_relax_section): Likewise. * elf32-epiphany.c (epiphany_elf_relax_section): Likewise. * elf32-ft32.c (ft32_elf_relax_section): Likewise. * elf32-h8300.c (elf32_h8_relax_section): Likewise. * elf32-ip2k.c (ip2k_elf_relax_section): Likewise. * elf32-m32c.c (m32c_elf_relax_section): Likewise. * elf32-m68hc11.c (m68hc11_elf_relax_section): Likewise. * elf32-msp430.c (msp430_elf_relax_section): Likewise. * elf32-pru.c (pru_elf32_relax_section): Likewise. * elf32-rl78.c (rl78_elf_relax_section): Likewise. * elf32-rx.c (elf32_rx_relax_section): Likewise. * elf32-sh.c (sh_elf_relax_section): Likewise. (sh_elf_relax_delete_bytes): Likewise. * elf32-v850.c (v850_elf_relax_section): Likewise. * elf64-alpha.c (elf64_alpha_relax_section): Likewise. * elf64-ia64-vms.c (elf64_ia64_relax_section): Likewise. * elfnn-ia64.c (elfNN_ia64_relax_section): Likewise. * elfnn-riscv.c (_bfd_riscv_relax_section): Likewise. * elfxx-mips.c (_bfd_mips_elf_relax_section): Likewise.
2023-02-23Test SEC_HAS_CONTENTS before reading section contentsAlan Modra21-49/+93
bfd_malloc_and_get_section does size sanity checking before allocating memory and reading contents. These size checks are not done for bss style sections, because they typically don't occupy file space and thus can't be compared against file size. However, if you are expecting to look at something other than a whole lot of zeros, don't allow fuzzers to avoid the size checking. * cofflink.c (process_embedded_commands): Don't look at sections without SEC_HAS_CONTENTS set. * cpu-arm.c (bfd_arm_update_notes): Likewise. (bfd_arm_get_mach_from_notes): Likewise. * elf-eh-frame.c (_bfd_elf_parse_eh_frame): Likewise. * elf-hppa.h (elf_hppa_sort_unwind): Likewise. * elf-m10300.c (mn10300_elf_relax_section): Likewise. * elf-sframe.c (_bfd_elf_parse_sframe): Likewise. * elf.c (_bfd_elf_print_private_bfd_data): Likewise. * elf32-arm.c (bfd_elf32_arm_process_before_allocation): Likewise. * elf32-avr.c (avr_elf32_load_property_records): Likewise. * elf32-ppc.c (_bfd_elf_ppc_set_arch): Likewise. (ppc_elf_get_synthetic_symtab, ppc_elf_relax_section): Likewise. * elf64-ppc.c (ppc64_elf_get_synthetic_symtab): Likewise. (opd_entry_value, ppc64_elf_edit_opd, ppc64_elf_edit_toc): Likewise. * elf64-x86-64.c (elf_x86_64_get_synthetic_symtab): Likewise. * elflink.c (elf_link_add_object_symbols): Likewise. (bfd_elf_get_bfd_needed_list): Likewise. * elfnn-aarch64.c (get_plt_type): Likewise. * elfxx-mips.c (_bfd_mips_elf_get_synthetic_symtab): Likewise. * linker.c (_bfd_handle_already_linked): Likewise. * opncls.c (bfd_get_debug_link_info_1): Likewise. (bfd_get_alt_debug_link_info, get_build_id): Likewise. * peXXigen.c (pe_print_idata, pe_print_pdata): Likewise. (_bfd_XX_print_ce_compressed_pdata, pe_print_reloc): Likewise. * pei-x86_64.c (pex64_bfd_print_pdata_section): Likewise. * stabs.c (_bfd_link_section_stabs): Likewise. (_bfd_discard_section_stabs): Likewise. * xcofflink.c (_bfd_xcoff_get_dynamic_symtab_upper_bound): Likewise. (_bfd_xcoff_canonicalize_dynamic_symtab): Likewise. (_bfd_xcoff_get_dynamic_reloc_upper_bound): Likewise. (_bfd_xcoff_canonicalize_dynamic_reloc): Likewise. (xcoff_link_add_dynamic_symbols): Likewise. (xcoff_link_check_dynamic_ar_symbols): Likewise. (bfd_xcoff_build_dynamic_sections): Likewise.
2023-02-23Automatic date update in version.inGDB Administrator1-1/+1
2023-02-22Automatic date update in version.inGDB Administrator1-1/+1
2023-02-22debug_link duplicate file size checksAlan Modra1-6/+2
bfd_malloc_and_get_section does these checks. * opncls.c (bfd_get_debug_link_info_1): Don't check section size against file size. (bfd_get_alt_debug_link_info): Likewise.
2023-02-21Update the description of the bfd_fill_in_gnu_debuglink_section functionNick Clifton2-8/+8
2023-02-21Updated translatios for the bfd and gprof directories.Nick Clifton1-1403/+1515
2023-02-21Automatic date update in version.inGDB Administrator1-1/+1
2023-02-20Redefine FUNCTION in doc.strTom Tromey2-9/+5
FUNCTION is identical to func, so simplify doc.str. 2023-02-17 Tom Tromey <tom@tromey.com> * doc/doc.str (FUNCTION): Call func.
2023-02-20Hoist the SECTION comment in opncls.cTom Tromey2-8/+12
The opening and closing node in BFD starts: File: bfd.info, [...] /* Set to N to open the next N BFDs using an alternate id space. */ extern unsigned int bfd_use_reserved_id; 2.13 Opening and closing BFDs ============================= That is, there's a stray C comment and declaration before any other text or subsections. This occurs because the code fragment for bfd_use_reserved_id comes before the SECTION comment. Hoisting it makes this a little nicer. 2023-02-17 Tom Tromey <tom@tromey.com> * opncls.c: Hoist the SECTION comment.
2023-02-20Don't use chew comments for static functionsTom Tromey2-119/+58
I found a few static functions in the BFD manual. These can't be called by any user of the library, so I don't think it's useful to put them in the manual. This patch removes the chew markup from their comments. 2023-02-17 Tom Tromey <tom@tromey.com> * opncls.c (bfd_get_debug_link_info_1, separate_debug_file_exists) (separate_alt_debug_file_exists, find_separate_debug_file) (get_build_id, get_build_id_name, check_build_id_file): Don't use chew comments.
2023-02-20Fix formatting of long function description in chew outputTom Tromey3-0/+41
Currently, if a function description spans a line, the resulting info can look like this: -- Function: long bfd_canonicalize_reloc (bfd *abfd, asection *sec, arelent **loc, asymbol **syms); Call the back end associated with the open BFD ABFD and translate the external form of the relocation information attached to SEC into the internal canonical form. Place the table into memory at LOC, That is, the function prototype runs together with the text in an ugly way. This patch fixes this by introducing a new primitive, so that the generated Texinfo can be a bit nicer. Now this output looks like: -- Function: long bfd_canonicalize_reloc (bfd *abfd, asection *sec, arelent **loc, asymbol **syms); Call the back end associated with the open BFD ABFD and translate the external form of the relocation information attached to SEC 2023-02-17 Tom Tromey <tom@tromey.com> * doc/doc.str (SYNOPSIS): Use collapse_whitespace. * doc/chew.c (collapse_whitespace): New function. (main): Register collapse_whitespace.
2023-02-20In-memory nested archivesAlan Modra1-0/+6
alpha-linuxecoff has compressed archives that are decompressed to a bfd-in-memory. We'd need to handle quite a lot of corner cases to support nesting of such archives, so just stop it before we run into segfaults later. * opncls.c (_bfd_new_bfd_contained_in): Prohibit nested archives in memory.
2023-02-20Automatic date update in version.inGDB Administrator1-1/+1
2023-02-19Buffer overflow in evax_bfd_print_eobjAlan Modra1-63/+48
* vms-alpha.c (evax_bfd_print_eobj): Rewrite header handling, sanity checking rec_len. Check bfd_malloc return.
2023-02-19Avoid memory leak in chewTom Tromey1-3/+9
An earlier patch of mine introduced a memory leak in chew. The bug was that the new "variable" word didn't free the following word. This patch fixes it by arranging to transfer ownership of the name to the variable itself. * doc/chew.c (add_variable): New function, from add_intrinsic_variable. (add_intrinsic_variable): Call add_variable. (compile): Call add_variable.
2023-02-19Automatic date update in version.inGDB Administrator1-1/+1
2023-02-18Automatic date update in version.inGDB Administrator1-1/+1
2023-02-17Wild pointer reads in _bfd_ecoff_locate_lineAlan Modra1-6/+21
* ecofflink.c (mk_fdrtab): Sanity check fdr procedure descriptor pointer and isymBase. Set fdrtab_len after possible discards. Use size_t vars and catch possible size overflows.
2023-02-17Automatic date update in version.inGDB Administrator1-1/+1
2023-02-16Automatic date update in version.inGDB Administrator1-1/+1
2023-02-15Remove RETURNS from BFD chew commentsTom Tromey7-51/+26
When reading the BFD manual, I noticed text like this: -- Function: bool bfd_close (bfd *abfd); Close a BFD. If the BFD was open for writing, then pending operations are completed and the file written out and closed. If ... *Returns* 'TRUE' is returned if all is ok, otherwise 'FALSE'. The *Returns*, like the *Synopsis* in the earlier patch, is un-info-like. It's also used inconsistently. This patch removes all the uses of the RETURNS word and removes it entirely from the chew scripts. Now this example reads: -- Function: bool bfd_close (bfd *abfd); Close a BFD. If the BFD was open for writing, then pending operations are completed and the file written out and closed. If ... 'TRUE' is returned if all is ok, otherwise 'FALSE'. In a few cases I had to slightly reword the comment. There were also a couple of cases where there was redundant text. In these cases I just dropped the RETURNS copy. 2023-02-07 Tom Tromey <tom@tromey.com> * bfd.c, cache.c, compress.c, opncls.c: Remove RETURNS from documentation comments. * doc/doc.str, doc/proto.str (RETURNS): Remove.
2023-02-15Use @deftypefn in chew outputTom Tromey4-14/+59
When reading the BFD info manual, function definitions looked very strange to me: *Synopsis* long bfd_get_mtime (bfd *abfd); *Description* Return the file modification time (as read from the file system, or from the archive header for archive members). The *Synopsis* and *Description* text in particular is very un-info-like. To fix this, I tried removing the *Synopsis* text and having FUNCTION use @deftypefn instead. However, this ended up requiring some new state, because SYNOPSIS can appear without FUNCTION. This in turn required "catstrif" (I considered adding FORTH-style if-else-then, but in the end decided on an ad hoc approach). After this the result looks like: -- Function: long bfd_get_mtime (bfd *abfd); Return the file modification time (as read from the file system, or from the archive header for archive members). This patch also reorders a few documentation comments to ensure that SYNOPSIS comes before DESCRIPTION. This is the more common style and is also now required by doc.str. 2023-02-07 Tom Tromey <tom@tromey.com> * syms.c (bfd_decode_symclass, bfd_is_undefined_symclass) (bfd_symbol_info): Reorder documentation comment. * doc/doc.str (synopsis_seen): New variable. (SYNOPSIS): Set synopsis_seen. Emit @deftypefn. (DESCRIPTION): Use synopsis_seen. * doc/chew.c (catstrif): New function. (main): Add catstrif intrinsic. (compile): Recognize "variable" command.
2023-02-15Change internalmode to be an intrinsic variableTom Tromey3-19/+50
Currently, internalmode is a special word to set an internal state variable. Because this series adds variables anyway, change this to be a variable instead. I saw some commits in the history that made sure that chew did not leak memory, so I put some extra effort into trying to handle this for variables as well. 2023-02-07 Tom Tromey <tom@tromey.com> * doc/proto.str (external, internal, ifinternal, ENUMEQ, ENUMDOC): Update. * doc/chew.c (internalmode): Remove. (add_intrinsic_variable): New function. (main): Add internalmode as intrinsic. (internal_mode): Remove global. (maybecatstr): Update. (free_words): Free variables.
2023-02-15Use intptr_t rather than long in chewTom Tromey2-6/+13
To implement variables in chew, it's convenient to have a pointer-sized integer on the stack. To this end, use intptr_t rather than long. 2023-02-07 Tom Tromey <tom@tromey.com> * doc/chew.c (pcu) <l>: Now intptr_t. (internal_mode, istack, isp): Likewise. (bang, atsign): Use intptr_t.
2023-02-15Remove the paramstuff wordTom Tromey3-81/+6
The chew "paramstuff" word has been a no-op since: commit c58b95236ce4c9345c4fa76e7ef16762e5229380 Author: Alan Modra <amodra@gmail.com> Date: Sun Jun 29 10:06:40 2003 +0000 Convert to C90 and a few tweaks. Remove it and its one use. 2023-02-07 Tom Tromey <tom@tromey.com> * doc/proto.str (SYNOPSIS): Don't use paramstuff. * doc/chew.c (paramstuff): Remove. (main): Don't add paramstuff intrinsic.
2023-02-15Add copyright headers to the .str filesTom Tromey3-0/+39
The .str script files don't have copyright headers, but I think they should. I used the same dates that chew.c uses, which I think makes sense because these are inputs to chew. 2023-02-07 Tom Tromey <tom@tromey.com> * doc/doc.str, doc/proto.str: Add copyright header.
2023-02-15Simplify @node use in BFD documentationTom Tromey3-29/+35
The BFD docs currently specify all the parameters to @node. However, this results in bad navigation in certain nodes -- the "space" command in info doesn't know how to find the next node. I think this style of @node is a leftover from ancient times. Makeinfo can figure out the node structure on its own now, so simplify everything to a single-argument @node. 2023-02-07 Tom Tromey <tom@tromey.com> * doc/webassembly.texi (File layout): Remove second argument from @node. * doc/bfd.texi: Use single-argument @node everywhere.
2023-02-15Remove H_CFLAGS from doc/local.mkTom Tromey3-2/+7
I couldn't see that H_CFLAGS is defined anywhere, so remove it. 2023-02-07 Tom Tromey <tom@tromey.com> * Makefile.in: Rebuild. * doc/local.mk (%D%/chew.stamp): Don't use H_CFLAGS.
2023-02-15More ecoff sanity checksAlan Modra1-20/+24
Change FIX so that unused pointers that escape the UPDATE_RAW_END sanity checks won't result in overflows. Also sanity check the local sym fdr isymBase and csym values. * ecoff.c (_bfd_ecoff_slurp_symbolic_info): Define FIX to set pointers into swapped internal data to NULL if count is zero. Sanity check local sym fdr_ptr->isymBase and fdr_ptr->csym.
2023-02-15Automatic date update in version.inGDB Administrator1-1/+1
2023-02-14Automatic date update in version.inGDB Administrator1-1/+1
2023-02-13_bfd_ecoff_slurp_symbol_table buffer overflowAlan Modra1-12/+20
Add missing bounds check, and tidy the existing bounds checking. * ecoff.c (_bfd_ecoff_slurp_symbol_table): Break overlong lines. Set bfd_error. Bounds check internal_sym.iss.
2023-02-13Automatic date update in version.inGDB Administrator1-1/+1
2023-02-12Automatic date update in version.inGDB Administrator1-1/+1
2023-02-11.debug sections without contentsAlan Modra1-1/+2
* dwarf1.c (_bfd_dwarf1_find_nearest_line): Exclude .debug sections without contents.
2023-02-11Automatic date update in version.inGDB Administrator1-1/+1
2023-02-10RISC-V: Reduce effective linker relaxation passsesTsukasa OI1-3/+3
Commit 43025f01a0c9 ("RISC-V: Improve link time complexity.") reduced the time complexity of the linker relaxation but some code portions did not reflect this change. This commit fixes a comment describing each relaxation pass and reduces actual number of passes for the RISC-V linker relaxation from 3 to 2. Though it does not change the functionality, it marginally improves the performance while linking large programs (with many relocations). bfd/ChangeLog: * elfnn-riscv.c (_bfd_riscv_relax_section): Fix a comment to reflect current roles of each relaxation pass. ld/ChangeLog: * emultempl/riscvelf.em: Reduce the number of linker relaxation passes from 3 to 2.
2023-02-10Fix mmo memory leaksAlan Modra1-7/+6
The main one here is the section buffer, which can be quite large. By using alloc rather than malloc we can leave tidying memory to the generic bfd code when the bfd is closed. bfd_check_format also releases memory when object_p fails, so while it wouldn't be wrong to bfd_release at bad_format_free in mmo_object_p, it's a little extra code and work for no gain. * mmo.c (mmo_object_p): bfd_alloc rather than bfd_malloc lop_stab_symbol. Don't free/release on error. (mmo_get_spec_section): bfd_zalloc rather than bfd_zmalloc section buffer. (mmo_scan): Free fname on another error path.
2023-02-10objcopy of mach-o indirect symbolsAlan Modra1-0/+9
Anti-fuzzer measure. I'm not sure what the correct fix is for objcopy. Probably the BFD_MACH_O_S_NON_LAZY_SYMBOL_POINTERS, BFD_MACH_O_S_LAZY_SYMBOL_POINTERS and BFD_MACH_O_S_SYMBOL_STUBS contents should be read. * mach-o.c (bfd_mach_o_section_get_nbr_indirect): Omit sections with NULL sec->indirect_syms.
2023-02-10Automatic date update in version.inGDB Administrator1-1/+1
2023-02-09coff keep_relocs and keep_contentsAlan Modra3-43/+28
keep_relocs is set by pe_ILF_save_relocs but not used anywhere in the coff/pe code. It is tested by the xcoff backend but not set. keep_contents is only used by the xcoff backend when dealing with the .loader section, and it's easy enough to dispense with it there. keep_contents is set in various places but that's fairly useless when the contents aren't freed anyway until later linker support functions, add_dynamic_symbols and check_dynamic_ar_symbols. There the contents were freed if keep_contents wasn't set. I reckon we can free them unconditionally. * coff-bfd.h (struct coff_section_tdata): Delete keep_relocs and keep_contents. * peicode.h (pe_ILF_save_relocs): Don't set keep_relocs. * xcofflink.c (xcoff_get_section_contents): Cache contents. Return the contents. Update callers. (_bfd_xcoff_canonicalize_dynamic_symtab): Don't set keep_contents for .loader. (xcoff_link_add_dynamic_symbols): Free .loader contents unconditionally. (xcoff_link_check_dynamic_ar_symbols): Likewise.
2023-02-09Automatic date update in version.inGDB Administrator1-1/+1
2023-02-09coff-sh.c keep_relocs, keep_contents and keep_symsAlan Modra1-12/+0
keep_relocs and keep_contents are unused nowadays except by xcofflink.c, and I can't see a reason why keep_syms needs to be set. The external syms are read and used by sh_relax_section and used by sh_relax_delete_bytes. There doesn't appear to be any way that freeing them will cause trouble. * coff-sh.c (sh_relax_section): Don't set keep_relocs, keep_contents or keep_syms. (sh_relax_delete_bytes): Don't set keep_contents.
2023-02-09Memory leak in bfd_init_section_compress_statusAlan Modra1-1/+4
* compress.c (bfd_init_section_compress_status): Free uncompressed_buffer on error return.
2023-02-09Clear cached file size when bfd changed to BFD_IN_MEMORYAlan Modra3-0/+3
If file size is calculated by bfd_get_file_size, as it is by _bfd_alloc_and_read calls in coff_object_p, then it is cached and when pe_ILF_build_a_bfd converts an archive entry over to BFD_IN_MEMORY, the file size is no longer valid. Found when attempting objdump -t on a very small (27 bytes) ILF file and hitting the pr24707 fix (commit 781152ec18f5). So, clear file size when setting BFD_IN_MEMORY on bfds that may have been read. (It's not necessary in writable bfds, because caching is ignored by bfd_get_size when bfd_write_p.) I also think the PR 24707 fix is no longer neeeded. All of the testcases in that PR and in PR24712 are caught earlier by file size checks when reading the symbols from file. So I'm reverting that fix, which just compared the size of an array of symbol pointers against file size. That's only valid if on-disk symbols are larger than a host pointer, so the test is better done in format-specific code. bfd/ * coff-alpha.c (alpha_ecoff_get_elt_at_filepos): Clear cached file size when making a BFD_IN_MEMORY bfd. * opncls.c (bfd_make_readable): Likewise. * peicode.h (pe_ILF_build_a_bfd): Likewise. binutils/ PR 24707 * objdump.c (slurp_symtab): Revert PR24707 fix. Tidy. (slurp_dynamic_symtab): Tidy.
2023-02-08Re: Resetting section vma after _bfd_dwarf2_find_nearest_lineAlan Modra1-1/+1
f.bfd_ptr is set too early to be a reliable indicator of good debug info. * dwarf2.c (_bfd_dwarf2_slurp_debug_info): Correct test for debug info being previously found.
2023-02-08Automatic date update in version.inGDB Administrator1-1/+1
2023-02-07Automatic date update in version.inGDB Administrator1-1/+1
2023-02-06ppc32 and "LOAD segment with RWX permissions"Alan Modra1-5/+12
When using a bss-plt we'll always trigger the RWX warning, which disturbs gcc test results. On the other hand, there may be reason to want the warning when gcc is configured with --enable-secureplt. So turning off the warning entirely for powerpc might not be the best solution. Instead, we'll turn off the warning whenever a bss-plt is generated, unless the user explicitly asked for the warning. bfd/ * elf32-ppc.c (ppc_elf_select_plt_layout): Set no_warn_rwx_segments on generating a bss plt, unless explicity enabled by the user. Also show the bss-plt warning when --warn-rwx-segments is given without --bss-plt. include/ * bfdlink.h (struct bfd_link_info): Add user_warn_rwx_segments. ld/ * lexsup.c (parse_args): Set user_warn_rwx_segments. * testsuite/ld-elf/elf.exp: Pass --secure-plt for powerpc to the rwx tests.