aboutsummaryrefslogtreecommitdiff
path: root/bfd
AgeCommit message (Collapse)AuthorFilesLines
2024-11-11ld, LoongArch: print error about linking without -fPIC or -fPIE flag in more ↵Xin Wang1-10/+26
detail
2024-11-11Automatic date update in version.inGDB Administrator1-1/+1
2024-11-10Automatic date update in version.inGDB Administrator1-1/+1
2024-11-09Automatic date update in version.inGDB Administrator1-1/+1
2024-11-08bfd: Remove unused static find function from doc/chew.cMark Wielaard1-16/+0
After commit 2e60790cf7c27d79f90f2dcb81e1930dc980bc1c "Remove the paramstuff word" there is no caller left of the static find function in doc/chew.c, so it should be removed. * doc/chew.c (find): Remove.
2024-11-08Automatic date update in version.inGDB Administrator1-1/+1
2024-11-07Automatic date update in version.inGDB Administrator1-1/+1
2024-11-06Automatic date update in version.inGDB Administrator1-1/+1
2024-11-05Automatic date update in version.inGDB Administrator1-1/+1
2024-11-04Automatic date update in version.inGDB Administrator1-1/+1
2024-11-03Automatic date update in version.inGDB Administrator1-1/+1
2024-11-02Automatic date update in version.inGDB Administrator1-1/+1
2024-11-01ld: generate SFrame stack trace info for .plt.gotIndu Bhagat3-9/+125
PR/32298 sframe: no SFrame stack trace info generated for .plt.got Add support to generate SFrame stack trace info for .plt.got section. Enhance the current definition of struct elf_x86_sframe_plt to include initialized SFrame FDE/FREs applicable for .plt.got section. There are two variants of .plt.got entries: 16 byte and 8 byte. 8 byte: ff 25 00 00 00 00 jmpq *name@GOTPCREL(%rip) 66 90 xchg %ax,%ax 16 byte: f3 0f 1e fa endbr64 ff 25 66 2f 00 00 jmpq *name@GOTPCREL(%rip) 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) For the testcase, define some application symbols such that their PLT entry is placed in .plt.got and ensure SFrame information is generated with and without -z ibtplt. ChangeLog: PR/32298 * bfd/elf64-x86-64.c (elf_x86_64_link_setup_gnu_properties): PLT GOT entry size is different for IBT vs non IBT PLTs. * bfd/elfxx-x86.c (enum dynobj_sframe_plt_type): New enum for SFRAME_PLT_GOT. (_bfd_x86_elf_create_sframe_plt): Handle SFRAME_PLT_GOT. (_bfd_x86_elf_write_sframe_plt): Likewise. (_bfd_x86_elf_late_size_sections): Likewise. (_bfd_x86_elf_finish_dynamic_sections): Likewise. * bfd/elfxx-x86.h (struct elf_x86_sframe_plt): Add new members to keep information about PLT GOT entries. (struct elf_x86_link_hash_table): Add support for creating SFrame section for .plt.got. * ld/testsuite/ld-x86-64/x86-64.exp: Add new tests. * ld/testsuite/ld-x86-64/sframe-pltgot-1.d: New test. * ld/testsuite/ld-x86-64/sframe-pltgot-1.s: New test. * ld/testsuite/ld-x86-64/sframe-pltgot-2.d: New test.
2024-11-01ld: fix wrong SFrame info for lazy IBT PLTJosh Poimboeuf2-18/+45
Fix PR/32296 sframe: wrong SFrame info for pltN and .plt.sec for -z ibtplt The x86 psABI defines a 2-PLT scheme for IBT which uses .plt and .plt.sec entries. It was observed that SFrame information for .plt.sec section was incorrect. The erroneous assumption was that SFrame stack trace information for .plt.sec with lazy binding is the same as SFrame stack trace information for .plt with lazy binding. This is corrected now by initializing a new SFrame PLT helper object elf_x86_64_sframe_ibt_plt for lazy PLT with IBT. Add a testcase where linking with -z ibtplt generates .plt.sec entries and ensure correct SFrame information for it. Committed by Indu Bhagat. ChangeLog: PR/32296 * bfd/elf64-x86-64.c (elf_x86_64_sframe_ibt_pltn_fre2): New definition elf_x86_64_sframe_ibt_plt. Use it in elf_x86_64_sframe_plt. (elf_x86_64_link_setup_gnu_properties): Lazy IBT PLT entries are different from lazy PLT. * bfd/elfxx-x86.c (_bfd_x86_elf_create_sframe_plt): Adjust for SFrame for IBT PLT. * ld/testsuite/ld-x86-64/x86-64.exp: Add new test. * ld/testsuite/ld-x86-64/sframe-ibt-plt-1.d: New test.
2024-11-01ld: fix PR/32297Josh Poimboeuf1-2/+2
When _creating_ SFrame information for the linker created .plt.sec, the code correctly checks for presence of .plt.sec. When _writing_ the SFrame section for the corresponding .plt.sec, however, the conditionals were wrongly checking for splt. This was causing an assertion at link time. This issue has been known to affect glibc build with SFrame enabled. No testcase is added just yet. A later commit ensures correct SFrame stack trace information is created for .plt.got. A test case (where only .plt and .plt.got are created) is added then. PR/32297 sframe: bfd assertion with empty main on IBT enabled system Committed by Indu Bhagat. ChangeLog: PR/32297 * bfd/elfxx-x86.c (_bfd_x86_elf_late_size_sections): Check for plt_second member not for splt.
2024-11-01Automatic date update in version.inGDB Administrator1-1/+1
2024-10-31Automatic date update in version.inGDB Administrator1-1/+1
2024-10-30Automatic date update in version.inGDB Administrator1-1/+1
2024-10-29LoongArch: Corrected to GNU style codeLulu Cai1-15/+15
2024-10-29Automatic date update in version.inGDB Administrator1-1/+1
2024-10-28Automatic date update in version.inGDB Administrator1-1/+1
2024-10-27Automatic date update in version.inGDB Administrator1-1/+1
2024-10-26tekhex.c tidy writesymAlan Modra1-13/+5
Simplifies the code a little. No functional changes.
2024-10-25Automatic date update in version.inGDB Administrator1-1/+1
2024-10-24tekhex object file output fixesAlan Modra1-18/+7
writevalue didn't handle 64-bit values, dropping the high 32 bits, and also wrote any value in the range [0,15] as 0. * tekhex.c (first_phase): Handle *ABS* symbols. (writevalue): Rewrite.
2024-10-24Automatic date update in version.inGDB Administrator1-1/+1
2024-10-23Automatic date update in version.inGDB Administrator1-1/+1
2024-10-22stringmerge: don't presize hash tableMichael Matz1-39/+31
originally the reason for pre-sizing was that that's easier for a multi-threaded use of the hash table. That hasn't materialized yet, so there's not much sense in using the very very conservative estimates for pre-sizing. Doing the resize on-demand, whenever we actually need to add a new entry doesn't change performance. bfd/ merge.c (sec_merge_hash_insert): Resize as needed from here ... (record_section): ... not from here. Don't calculate estimates, return bool instead of three-state, regard all errors as soft errors. (_bfd_merge_sections): Adjust.
2024-10-22LoongArch: Force relocation for every reference to the global offset tableLulu Cai1-8/+8
Local absolute symbols are resolved at assembly stage and the symbol value is placed in the relocation addend. But non-zero addend will cause an assertion failure during linking. Forces emission of relocations to defer resolution of local abs symbols until link time. bfd/ * elfnn-loongarch.c (loongarch_elf_relax_section): Determine absolute symbols in advance to avoid ld crash. gas/ * config/tc-loongarch.c (loongarch_force_relocation): New function to force relocation. * config/tc-loongarch.h (TC_FORCE_RELOCATION): New macros to force relocation. (loongarch_force_relocation): Function declaration. * testsuite/gas/loongarch/localpic.d: New test. * testsuite/gas/loongarch/localpic.s: New test.
2024-10-22Automatic date update in version.inGDB Administrator1-1/+1
2024-10-21Automatic date update in version.inGDB Administrator1-1/+1
2024-10-20Report bfd_merge_sections errorAlan Modra2-9/+10
PR 32260 bfd/ * elfxx-target.h (bfd_elfNN_bfd_merge_sections): Default to bfd_generic_merge_sections when using the generic linker. * elflink.c (_bfd_elf_merge_sections): Return error from _bfd_merge_sections. Abort on wrong hash table. ld/ * ldlang.c (lang_process): Report bfd_merge_sections error.
2024-10-20Automatic date update in version.inGDB Administrator1-1/+1
2024-10-19Automatic date update in version.inGDB Administrator1-1/+1
2024-10-18Automatic date update in version.inGDB Administrator1-1/+1
2024-10-17Fix for -Wstringop-overflow false positiveMichael Matz1-2/+2
the way the overflow check was written wasn't understood by some GCC versions and produced false positives for the memset call being called potentially with object sizes that are larger than half address-space.
2024-10-17PR32260: Improve error handling on string mergingMichael Matz1-13/+25
if the input sections are near the max supported size (4G) we might fail to enlarge the hash table. The error handling for this case didn't quite work. When this happens we can gracefully fall back to just not deduplicate this section (and continue with further mergable sections). We were mixing that with the case of not being able to even allocate a small structure (in which case we can as well error out completely), this disentables both cases. bfd/ PR ld/32260 * merge.c (sec_merge_maybe_resize): Check overflow in ultimate target type. (record_section): Return three-state, use new state when unable to enlarge hash table. (_bfd_merge_sections): Remove current section from merging consideration when hashtable can't be enlarged.
2024-10-17LoongArch: Check PC-relative relocations for shared librariesLulu Cai1-0/+21
Building shared libraries should not be allowed for PC-relative relocations against external symbols. Currently LoongArch has no corresponding checks and silently generates wrong shared libraries. However, In the first version of the medium cmodel, pcalau12i+jirl was used for function calls, in which case PC-relative relocations were allowed.
2024-10-17Automatic date update in version.inGDB Administrator1-1/+1
2024-10-16Assertion fail at peicode.h:607Alan Modra1-2/+2
This is the assertion that vars->string_ptr < vars->end_string_ptr, ie. when it fails we've overflowed the string buffer area. Caused by allocating space for import_name but writing symbol_name, and they can be different. * peicode.h (SIZEOF_ILF_STRINGS): Revert 042f14505e change.
2024-10-16PR32266, segv when linking libclang_rt.asan-powerpc64.soAlan Modra5-96/+90
Change the mmap support added with commit 9ba56acee518 to always mmap memory with PROT_READ | PROT_WRITE. Prior to that commit most file contents were read into a buffer allocated with bfd_alloc or bfd_malloc and thus the memory was read/write. Even after that commit any section contents with relocations must be read/write to apply the relocs. Making them all read/write is not a major change, and it should not introduce any measurable linker slowdown for contents that are not modified. More importantly, it removes a BFD behaviour difference that only triggers when large files are involved. PR 32266 PR 32109 * libbfd.c (bfd_mmap_local): Remove prot param. Always mmap with PROT_READ | PROT_WRITE. Adjust all calls. (_bfd_mmap_temporary): Rename from _bfd_mmap_readonly_temporary. (_bfd_munmap_temporary): Rename from _bfd_munmap_readonly_temporary. _bfd_mmap_persistent): Rename from _bfd_mmap_readonly_persistent. (_bfd_generic_get_section_contents): Use PROT_READ | PROT_WRITE regardless of relocs. * libbfd-in.h: Update decls to suit. Make non-USE_MMAP variants static inline functions. * elflink.c: Update all uses of _bfd_mmap functions. * elf.c: Likewise. (bfd_elf_get_str_section): Revert commit 656f8fbaae. * libbfd.h: Regenerate.
2024-10-16Automatic date update in version.inGDB Administrator1-1/+1
2024-10-15LoongArch: Add more relaxation support for call36mengqinggang1-3/+18
Add relaxation support for call36 that jump to PLT entry. Add relaxation support for call36 with IFUNC symbol. Add relaxation support for call36 that jump to undefweak symbol. For undefweak symbol, it can always be relaxed if it have no PLT entry. Because we set the address of undefweak symbol without PLT entry to PC like relocate_section.
2024-10-15LoongArch: Optimize the relaxation processmengqinggang1-142/+139
The symbol value is only calculated when the relocation can be relaxed.
2024-10-15Automatic date update in version.inGDB Administrator1-1/+1
2024-10-14Automatic date update in version.inGDB Administrator1-1/+1
2024-10-13Automatic date update in version.inGDB Administrator1-1/+1
2024-10-12Automatic date update in version.inGDB Administrator1-1/+1
2024-10-11bfd/ELF: drop align_file_position()Jan Beulich1-10/+1
Switch the sole user to BFD_ALIGN() instead. (It's comment was partly wrong [stale?] anyway, talking of some maximum that was nowhere in sight.)
2024-10-11bfd/ELF: restrict file alignment for object filesJan Beulich3-18/+34
While for executables properly aligning sections within the file can be quite relevant, the same is of pretty little importance for relocatable object files. Avoid passing "true" into _bfd_elf_assign_file_position_for_section() when dealing with object files, but compensate minimally by applying log_file_align in such cases as a cap to the alignment put in place.