summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2022-08-06Automatic date update in version.inlinaro-local/ci/tcwg_kernel/llvm-master-arm-stable-allyesconfiglinaro-local/ci/tcwg_kernel/llvm-master-arm-lts-allnoconfiglinaro-local/ci/tcwg_kernel/llvm-master-arm-lts-allmodconfiglinaro-local/ci/tcwg_kernel/llvm-master-aarch64-norov-defconfiglinaro-local/ci/tcwg_kernel/llvm-master-aarch64-mainline-allnoconfiglinaro-local/ci/tcwg_bmk_llvm_fx/llvm-master-aarch64-cpu2017-O3linaro-local/ci/tcwg_bmk_gnu_tx1/gnu-master-aarch64-spec2k6-O2linaro-local/ci/tcwg_bmk_gnu_apm/gnu-master-aarch64-spec2k6-OsGDB Administrator
2022-08-06Get rid of BFD_VMA_FMTlinaro-local/ci/tcwg_bmk_gnu_fx/gnu-master-aarch64-cpu2017-O3Alan Modra
Remove the BFD_VMA_FMT defines in bfd.h and configure support. * bfd-in.h (BFD_VMA_FMT): Don't define. * configure.ac (BFD_INT64_FMT): Remove configure test. * configure.com: Likewise. * Makefile.in: Regenerate. * bfd-in2.h: Regenerate. * configure: Regenerate.
2022-08-06Don't use BFD_VMA_FMT in gdb and simAlan Modra
Like commit b82817674f, this replaces BFD_VMA_FMT "x" in sim/ with PRIx64 and casts to promote bfd_vma to uint64_t. The one file using BFD_VMA_FMT in gdb/ instead now uses hex_string, and a typo in the warning message is fixed.
2022-08-05[gdb/build] Fix build breaker in language.c with gcc 7.5.0linaro-local/ci/tcwg_kernel/llvm-master-arm-mainline-allnoconfiglinaro-local/ci/tcwg_kernel/gnu-master-arm-stable-allnoconfiglinaro-local/ci/tcwg_kernel/gnu-master-arm-norov-defconfiglinaro-local/ci/tcwg_kernel/gnu-master-aarch64-stable-allyesconfigTom de Vries
When building gdb on openSUSE Leap 15.3, using gcc 7.5.0, I run into: ... gdb/language.c: In constructor ‘constexpr language_gdbarch::language_gdbarch()’: gdb/language.c:921:8: error: use of deleted function \ ‘language_arch_info::language_arch_info(const language_arch_info&)’ struct language_gdbarch ^~~~~~~~~~~~~~~~ In file included from gdbsupport/common-defs.h:104:0, from gdb/defs.h:28, from gdb/language.c:31: gdb/language.h:95:28: note: declared here DISABLE_COPY_AND_ASSIGN (language_arch_info); ^ include/ansidecl.h:342:3: note: in definition of macro \ ‘DISABLE_COPY_AND_ASSIGN’ TYPE (const TYPE&) = delete; \ ^~~~ gdb/language.c: In function ‘language_gdbarch* get_language_gdbarch(gdbarch*)’: gdb/language.c:936:22: note: synthesized method ‘constexpr \ language_gdbarch::language_gdbarch()’ first required here l = new struct language_gdbarch; ^~~~~~~~~~~~~~~~ ... This seems to be fixed by this change in the struct language_gdbarch definition: ... - struct language_arch_info arch_info[nr_languages] {}; + struct language_arch_info arch_info[nr_languages]; ... Tested on x86_64-linux.
2022-08-05[gdb] Add unit test for gdb::sequential_for_eachlinaro-local/ci/tcwg_kernel/gnu-master-aarch64-next-allyesconfigTom de Vries
With commit 18a5766d09c ("[gdbsupport] Add sequential_for_each") I added a drop-in replacement for gdb::parallel_for_each, but there's nothing making sure that the two remain in sync. Extend the unit test for gdb::parallel_for_each to test both. Do this using a slightly unusual file-self-inclusion. Doing so keep things readable and maintainable, and avoids macrofying functions. Tested on x86_64-linux.
2022-08-05[gdb/symtab] Use task size in parallel_for_each in dwarf2_build_psymtabs_hardTom de Vries
In dwarf2_build_psymtabs_hard, we use a parallel_for_each to distribute CUs over threads. Ensuring a fair distribution over the worker threads and main thread in terms of number of CUs might not be the most efficient way, given that CUs can vary in size. Fix this by using per_cu->get_length () as the task size. I've used this experiment to verify the performance impact: ... $ for n in $(seq 1 10); do \ time gdb -q -batch ~/firefox/libxul.so-93.0-1.1.x86_64.debug \ 2>&1 \ | grep "real:"; \ done ... and without the patch got: ... real: 4.71 real: 4.88 real: 4.29 real: 4.30 real: 4.65 real: 4.27 real: 4.27 real: 4.27 real: 4.75 real: 4.41 ... and with the patch: ... real: 3.68 real: 3.81 real: 3.80 real: 3.68 real: 3.75 real: 3.69 real: 3.69 real: 3.74 real: 3.67 real: 3.74 ... so that seems a reasonable improvement. With parallel_for_each_debug set to true, we get some more detail about the difference in behaviour. Without the patch we have: ... Parallel for: n_elements: 2818 Parallel for: minimum elements per thread: 1 Parallel for: elts_per_thread: 704 Parallel for: elements on worker thread 0 : 705 Parallel for: elements on worker thread 1 : 705 Parallel for: elements on worker thread 2 : 704 Parallel for: elements on worker thread 3 : 0 Parallel for: elements on main thread : 704 ... and with the patch: ... Parallel for: n_elements: 2818 Parallel for: total_size: 1483674865 Parallel for: size_per_thread: 370918716 Parallel for: elements on worker thread 0 : 752 (size: 371811790) Parallel for: elements on worker thread 1 : 360 (size: 371509370) Parallel for: elements on worker thread 2 : 1130 (size: 372681710) Parallel for: elements on worker thread 3 : 0 (size: 0) Parallel for: elements on main thread : 576 (size: 367671995) ... Tested on x86_64-linux.
2022-08-05[gdbsupport] Add task size parameter in parallel_for_eachTom de Vries
Add a task_size parameter to parallel_for_each, defaulting to nullptr, and use the task size to distribute similarly-sized chunks to the threads. Tested on x86_64-linux.
2022-08-05Introduce gdb::make_function_viewPedro Alves
This adds gdb::make_function_view, which lets you create a function view from a callable without specifying the function_view's template parameter. For example, this: auto lambda = [&] (int) { ... }; auto fv = gdb::make_function_view (lambda); instead of: auto lambda = [&] (int) { ... }; gdb::function_view<void (int)> fv = lambda; It is particularly useful if you have a template function with an optional function_view parameter, whose type depends on the function's template parameters. Like: template<typename T> void my_function (T v, gdb::function_view<void(T)> callback = nullptr); For such a function, the type of the callback argument you pass must already be a function_view. I.e., this wouldn't compile: auto lambda = [&] (int) { ... }; my_function (1, lambda); With gdb::make_function_view, you can write the call like so: auto lambda = [&] (int) { ... }; my_function (1, gdb::make_function_view (lambda)); Unit tests included. Tested by building with GCC 9.4, Clang 10, and GCC 4.8.5, on x86_64 GNU/Linux, and running the unit tests. Change-Id: I5c4b3b4455ed6f0d8878cf1be189bea3ee63f626
2022-08-05Update following 2.39 releaselinaro-local/ci/tcwg_kernel/llvm-master-aarch64-stable-allmodconfiglinaro-local/ci/tcwg_kernel/gnu-master-arm-stable-allmodconfigNick Clifton
2022-08-05asan: ppc64_elf_get_synthetic_symtab heap buffer overflowlinaro-local/ci/tcwg_kernel/llvm-master-arm-norov-allnoconfiglinaro-local/ci/tcwg_kernel/llvm-master-aarch64-norov-allnoconfiglinaro-local/ci/tcwg_kernel/gnu-master-aarch64-norov-defconfigAlan Modra
Fuzzed input files with sizes of .dynamic not a multiple of dynamic tag size can result in reading past the end of the buffer with the current simple checks. Fix that, and use the same check in other files that process input object .dynamic section. (There is no need for buffer overflow checks in the linker's generated .dynamic section.) * elf32-ppc.c (ppc_elf_get_synthetic_symtab): Sanity check .dynamic content buffer reads. * elf64-ppc.c (ppc64_elf_get_synthetic_symtab): Likewise. * elf64-ia64-vms.c (elf64_vms_link_add_object_symbols): Likewise. * elf.c (_bfd_elf_print_private_bfd_data): Simplify .dynamic buffer sanity checks. * elflink.c (elf_link_add_object_symbols): Avoid possible UB subtracting sizeof_dyn from pointer.
2022-08-05Sanity check loc_offsets indexAlan Modra
Fixes a segfault found by the fuzzers. * dwarf.c (fetch_indexed_value): Return -1 on error. (read_and_display_attr_value): Don't display string when fetch_indexed_value returns an error. Sanity check loc_offsets index.
2022-08-05binutils/Dwarf: avoid "shadowing" of glibc function nameJan Beulich
As before: Old enough glibc has an (unguarded) declaration of index() in string.h, which triggers a "shadows a global declaration" warning.
2022-08-05gas: fix a testcase broken by new ZSTD supportTsukasa OI
The commit 1369522f36eece1b37139a81f7f2139ba3915172 ("Recognize the new ELF compression type for ZSTD.") added the new ELF compression type but it accidentally broke a GAS testcase. Since testing for the section type "2048" (SHF_COMPRESSED) is not going to be portable in the long term, it now tests SHF_LINK_ORDER ("128") instead. Using SHF_LINK_ORDER (with possibly sh_link == 0) is an idea by Jan Beulich. gas/ChangeLog: * testsuite/gas/elf/section10.s: Use SHF_LINK_ORDER to test mixed numeric and alpha values. * testsuite/gas/elf/section10.d: Reflect the change above.
2022-08-05When gas/read.c calls mbstowcs with a NULL destination, it should set size to 0Nick Clifton
PR 29447 * read.c (read_symbol_name): Pass 0 as the length parameter when invoking mbstowc in order to check the validity of a wide string.
2022-08-05[gdb] Add debug_{exp,val}linaro-local/ci/tcwg_kernel/llvm-master-arm-next-allmodconfiglinaro-local/ci/tcwg_kernel/llvm-master-aarch64-lts-allmodconfiglinaro-local/ci/tcwg_kernel/gnu-master-arm-lts-allyesconfiglinaro-local/ci/tcwg_kernel/gnu-master-aarch64-stable-allnoconfiglinaro-local/ci/tcwg_bmk_llvm_fx/llvm-master-aarch64-spec2k6-O2Tom de Vries
When debugging cc1 I heavily rely on simple one-parameter debug functions that allow me to inspect a variable of a common type, like: - debug_generic_expr - debug_gimple_stmt - debug_rtx and I miss similar functions in gdb. Add functions to dump variables of types 'value' and 'expression': - debug_exp, and - debug_val. Tested on x86_64-linux, by breaking on varobj_create, and doing: ... (gdb) call debug_exp (var->root->exp.get ()) &"Operation: OP_VAR_VALUE\n" &" Block symbol:\n" &" Symbol: aaa\n" &" Block: 0x2d064f0\n" (gdb) ... and: ... (gdb) call debug_val (value) &"5" (gdb) ...
2022-08-04Add gold support for --package-metadata option.Luca Boccassi
Following the same format as the implementation in ld: 9e2bb0cb5e74aed4158f08495534922d7108f928 Generate a .note.package FDO package metadata ELF note, following the spec: https://systemd.io/ELF_PACKAGE_METADATA/ If the jansson library is available at build time (and it is explicitly enabled), link ld to it, and use it to validate that the input is correct JSON, to avoid writing garbage to the file. The configure option --enable-jansson has to be used to explicitly enable it (error out when not found). This allows bootstrappers (or others who are not interested) to seamlessly skip it without issues. elfcpp/ * elfcpp.h: Add FDO_PACKAGING_METADATA note type. gold/ * Makefile.am: Add jansson flags and libraries. * configure.ac: Check for jansson library. * layout.cc (Layout::create_notes): Call create_package_metadata(). (Layout::create_package_metadata): New function. * layout.h (Layout::create_package_metadata): New function. (Layout::package_metadata_note_): New data member. * options.h (class General_options): Add --package-metadata option. * testsuite/Makefile.am (object_unittest): Add jansson libraries. (binary_unittest): Likewise. (leb128_unittest): Likewise. (overflow_unittest): Likewise. (package_metadata_test): New test. * testsuite/package_metadata_main.c: New test source.
2022-08-04Recognize the new ELF compression type for ZSTD.Cary Coutant
There is more work to be done to actually support compression and decompression using the zstd library, but I will leave that to the champions of the new compression option. binutils/ * binutils/readelf.c (process_section_headers): Add support for ELFCOMPRESS_ZSTD.
2022-08-05Automatic date update in version.inGDB Administrator
2022-08-04Use registry in gdbarchTom Tromey
gdbarch implements its own registry-like approach. This patch changes it to instead use registry.h. It's a rather large patch but largely uninteresting -- it's mostly a straightforward conversion from the old approach to the new one. The main benefit of this change is that it introduces type safety to the gdbarch registry. It also removes a bunch of code. One possible drawback is that, previously, the gdbarch registry differentiated between pre- and post-initialization setup. This doesn't seem very important to me, though.
2022-08-04Allow registry to refer to const typesTom Tromey
So far, the registry hasn't been used to refer to a 'const' type, but this changes with the gdbarch change. This patch arranges to let the registry store a pointer-to-const, by removing const in the 'set' method.
2022-08-04Use new and delete for gdbarchTom Tromey
This changes gdbarch to use new and delete.
2022-08-04Use bool in gdbarchTom Tromey
This changes gdbarch to use bool for initialized_p.
2022-08-04[gdb/testsuite] Fix .debug_aranges in gdb.dwarf2/fission-loclists.Slinaro-local/ci/tcwg_bmk_llvm_fx/llvm-master-aarch64-cpu2017-O2Tom de Vries
When running test-case gdb.dwarf2/fission-loclists.exp, I noticed: ... warning: Section .debug_aranges in fission-loclists has duplicate \ debug_info_offset 0x8f, ignoring .debug_aranges.^M ... Fix this by removing the duplicate .debug_aranges entry. Tested on x86_64-linux.
2022-08-04[gdb/testsuite] Fix ERROR in gdb.base/watchpoint-unaligned.expTom de Vries
In PR23888 an error is reported: ... ERROR: tcl error sourcing watchpoint-unaligned.exp. ERROR: expected boolean value but got "" while executing "if {$wpnum} { ... This presumably happens when: - skip_hw_watchpoint_tests returns 0 meaning hw watchpoints are supported - gdb fails to set a hw watchpoint and instead sets a sw watchpoint That particular situation is handled for arm: ... -re "Watchpoint (\[0-9\]+): .*\r\n$gdb_prompt $" { if {[istarget "arm*-*-*"]} { untested $test set wpnum 0 } } ... but not for any other targets so wpnum remains "", triggering the ERROR. Possibly this has been fixed for powerpc by commit 8d4e4d13afb ("gdb Power 9 add test for HW watchpoint support."), but it's still possible for other targets. Fix this by: - initializing wpnum to 0 instead of "" - signalling the failure to set a hw watchpoint by a fail Tested on x86_64-linux, also by adding: ... gdb_test_no_output "set can-use-hw-watchpoints 0" ... and verifying that it triggers the fail. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=23888
2022-08-04[gdb/tdep] Fix gdb.base/large-frame.exp for aarch64Tom de Vries
On aarch64, I run into: ... FAIL: gdb.base/large-frame.exp: optimize=-O0: backtrace ... The problem is that the architecture-specific prologue analyzer fails to handle the first two insns in the prologue properly: ... 0000000000400610 <func>: 400610: d2880210 mov x16, #0x4010 400614: cb3063ff sub sp, sp, x16 400618: a9007bfd stp x29, x30, [sp] 40061c: 910003fd mov x29, sp 400620: 910043a0 add x0, x29, #0x10 400624: 97fffff0 bl 4005e4 <blah> ... so we get: ... $ gdb -q -batch ./outputs/gdb.base/large-frame/large-frame-O0 -ex "b func" Breakpoint 1 at 0x400614 ... Fix this by: - fixing the support for the first insn to extract the immediate operand, and - adding support for the second insn, such that we have: ... Breakpoint 1 at 0x400624 ... Note that we're overshooting by one insn (0x400620 is the first insn after the prologue), but that's a pre-existing problem. Tested on aarch64-linux. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29408
2022-08-04Don't use BFD_VMA_FMT in binutilsAlan Modra
BFD_VMA_FMT can't be used in format strings that need to be translated, because the translation won't work when the type of bfd_vma differs from the machine used to compile .pot files. We've known about this for a long time, but patches slip through review. So just get rid of BFD_VMA_FMT, instead using the appropriate PRId64, PRIu64, PRIx64 or PRIo64 and SCN variants for scanf. The patch is mostly mechanical, the only thing requiring any thought is casts needed to preserve PRId64 output from bfd_vma values, or to preserve one of the unsigned output formats from bfd_signed_vma values.
2022-08-04Re: Get rid of fprintf_vma and sprintf_vmaAlan Modra
Commit f493c2174e messed the formatting in linker map files, particularly for 32-bit builds where a number of tests using map files regressed. I should have noticed the BFD64 conditional printing of spaces to line up output due to the original %V printing hex vmas with 16 digits when BFD64 and 8 digits when not. Besides that, it is nicer to print 32-bit vmas for 32-bit targets. So change %V back to be target dependent, now using bfd_sprintf_vma. Since minfo doesn't return the number of chars printed, that means some places that currently use %V must instead sprintf to a buffer in order to find the length printed. * ldmisc.h (print_spaces): Declare. (print_space): Change to a macro. * ldmisc.c (vfinfo): Use bfd_sprintf_vma for %V. Tidy %W case. (print_space): Delete. (print_spaces): New function. * emultempl/aix.em (print_symbol): Use print_spaces. * ldctor.c (ldctor_build_sets): Likewise. * ldmain.c (add_archive_element): Likewise. * ldlang.c (print_one_symbol, lang_print_asneeded): Likewise. (print_output_section_statement, print_data_statement): Likewise. (print_reloc_statement, print_padding_statement): Likewise. (print_assignment): Likewise. Also replace %V printing of vmas with printing to a buffer in order to properly format output. (print_input_section, lang_one_common): Likewise.
2022-08-04MIPS: Use R_MIPS_REL16 for BFD_RELOC_16Alan Modra
R_MIPS_REL16 isn't a pc-relative reloc as the name might indicate. * elf64-mips.c (mips_reloc_map): Map BFD_RELOC_16 to R_MIPS_REL16. * elfn32-mips.c (mips_reloc_map): Likewise.
2022-08-04Automatic date update in version.inGDB Administrator
2022-08-03elf: Reset alignment for each PT_LOAD segmentH.J. Lu
Reset alignment for each PT_LOAD segment to avoid using alignment from the previous PT_LOAD segment. bfd/ PR ld/29435 * elf.c (assign_file_positions_for_load_sections): Reset alignment for each PT_LOAD segment. ld/ PR ld/29435 * testsuite/ld-elf/pr29435.d: New file. * testsuite/ld-elf/pr29435.s: Likewise.
2022-08-03Use unique_ptr to destroy per-bfd objectTom Tromey
In some cases, the objfile owns the per-bfd object. This is yet another object that can sometimes be destroyed before the registry is destroyed, possibly reslting in a use-after-free. Also, I noticed that the condition for deleting the object is not the same as the condition used to create it -- so it could possibly result in a memory leak in some situations. This patch fixes the problem by introducing a new unique_ptr that holds this object when necessary.
2022-08-03Use auto_obstack in objfileTom Tromey
This changes objfile to use an auto_obstack. This helps prevent use-after-free bugs, because it ensures that anything allocated on the objfile obstack will live past the point at which the registry object is destroyed.
2022-08-03Use gdb_bfd_ref_ptr in objfileTom Tromey
This changes struct objfile to use a gdb_bfd_ref_ptr. In addition to removing some manual memory management, this fixes a use-after-free that was introduced by the registry rewrite series. The issue there was that, in some cases, registry shutdown could refer to memory that had already been freed. This help fix the bug by delaying the destruction of the BFD reference (and thus the per-bfd object) until after the registry has been shut down.
2022-08-03gprofng: fix bug 29410 - Argument "&nbsp;0." isn't numeric in numeric gt (>)Ruud van der Pas
gprofng/Changelog: 2022-08-02 Ruud van der Pas <ruud.vanderpas@oracle.com> PR gprofng/29410 * gp-display-html/gp-display-html.in: Remove non-breaking spaces.
2022-08-03Fix a conflict between the linker's need to rename some PE format input ↵Alan Modra
libraries and the BFD library's file caching mechanism. PR 29389 bfd * bfd.c (BFD_CLOSED_BY_CACHE): New bfd flag. * cache.c (bfd_cache_delete): Set BFD_CLOSED_BY_DELETE on the closed bfd. (bfd_cache_lookup_worker): Clear BFD_CLOSED_BY_DELETE on the newly reopened bfd. * opncls.c (bfd_set_filename): Refuse to change the name of a bfd that has been closed by bfd_cache_delete. Mark changed bfds as uncacheable. * bfd-in2.h: Regenerate. ld * ldlang.h (lang_input_statement_struct): Add sort_key field. * emultempl/pe.em (after_open): If multiple import libraries refer to the same bfd, store their names in the sort_key field. * emultempl/pep.em (after_open): Likewise. * ldlang.c (sort_filename): New function. Returns the filename to be used when sorting input files. (wild_sort): Use the sort_filename function.
2022-08-03gdb/amd64: clean up unused variableEnze Li
When building with clang 15, I got this, CXX amd64-tdep.o amd64-tdep.c:1410:13: error: variable 'insn' set but not used[-Werror,-Wunused-but-set-variable] gdb_byte *insn = insn_details->raw_insn + modrm_offset; ^ 1 error generated. The function that uses this variable has been removed in this commit, commit 870f88f7551b0f2d6aaaa36fb684b5ff8f468107 Date: Mon Apr 18 13:16:27 2016 -0400 remove trivialy unused variables Fix this by removing unused variable. Tested by rebuilding on x86_64-linux with clang 15 and gcc 12.
2022-08-03gdb: Fix regression in varobj recreationLancelot SIX
Commit bc20e562ec0 "Fix use after free in varobj" introduced a regression. This commit makes sure that the varobj object does not keeps stale references to object being freed when we unload an objfile. This includes the "valid_block" field which is reset to nullptr if the pointed to block is tied to an objfile being freed. However, at some point varobj_invalidate_iter might try to recreate varobjs tracking either floating or globals. Varobj tracking globals are identified as having the "valid_block" field set nullptr, but as bc20e562ec0 might clear this field, we have lost the ability to distinguish between varobj referring to globals and non globals. Fix this by introducing a "global" flag which tracks if a given varobj was initially created as tracking a global. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29426
2022-08-03Re: PE objdump -xAlan Modra
All of these buffer overrun tests are better written as a comparison against size remaining, due to ISO C 9899 standard 6.5.2 para 8 regarding adding a constant to a pointer: "If both the pointer operand and the result point to elements of the same array object, or one past the last element of the array object, the evaluation shall not produce an overflow; otherwise, the behavior is undefined." So "ex_dta + 4" might be undefined behaviour, if you interpret "the array object" in this case to be the malloc'd section contents! * pei-x86_64.c (pex64_get_unwind_info): Tidy sanity checks. (pex64_xdata_print_uwd_codes): Likewise.
2022-08-03x86: improve/shorten vector zeroing-idiom optimization conditionalJan Beulich
- Drop the rounding type check: We're past template matching, and none of the involved insns support embedded rounding. - Drop the extension opcode check: None of the involved opcodes have variants with it being other than None. - Instead check opcode space, even if just to be on the safe side going forward. - Reduce the number of comparisons by folding two groups.
2022-08-03x86: properly mark i386-only insnsJan Beulich
Just like all Size64 insns are marked Cpu64, all Size32 insns ought to be marked Cpu386.
2022-08-03x86: also use D for MOVBEJan Beulich
First of all rename the meanwhile misleading Opcode_SIMD_FloatD, as it has also been used for KMOV* and BNDMOV. Then simplify the condition selecting which form if "reversing" to use - except for the MOV to/from control/debug/test registers all extended opcode space insns use bit 0 (rather than bit 1) to indicate the direction (from/to memory) of an operation. With that, D can simply be set on the first of the two templates, while the other can be dropped.
2022-08-03Automatic date update in version.inGDB Administrator
2022-08-02Add ELFCOMPRESS_ZSTD.Cary Coutant
include/elf/ * common.h: Add ELFCOMPRESS_ZSTD.
2022-08-02fbsd-nat: Correct the return type of the have_regset method.John Baldwin
During the development of 40c23d880386d6e8202567eaa2a6b041feb1a652, the return value of fbsd_nat_target::have_regset was changed from a simple boolean to returning the size of the register set. The comments and callers were all updated for this change, but the actual return type was accidentally left as a bool. This change fixes the return type to be a size_t. Current callers of this only checked the value against 0 and thus still worked correctly.
2022-08-02ELF: emit symbol table when there are relocationsJan Beulich
Even when there are no symbols (e.g. all relocations being against absolute values), a symbol table (with just the first placeholder entry) needs to be emitted. Otherwise tools like objdump won't properly process the relocations. The respective checks in assign_section_numbers() and _bfd_elf_compute_section_file_positions() support also this view. Oddly enough so far HAS_RELOC was only set when reading in an object file, but not when generating one anew; the flag would only have been cleared when no relocations were found (anymore). While there also amend the affected function's leading comment to also mention gas.
2022-08-02ld: aarch64: Adjust TLS relaxation conditionMatthew Malcomson
In aarch64_tls_transition_without_check and elfNN_aarch64_tls_relax we choose whether to perform a relaxation to an IE access model or an LE access model based on whether the symbol itself is marked as local (i.e. `h == NULL`). This is problematic in two ways. The first is that sometimes a global dynamic access can be relaxed to an initial exec access when creating a shared library, and if that happens on a local symbol then we currently relax it to a local exec access instead. This usually does not happen since we only relax an access if aarch64_can_relax_tls returns true and aarch64_can_relax_tls does not have the same problem. However, it can happen when we have seen both an IE and GD access on the same symbol. This case is exercised in the newly added testcase tls-relax-gd-ie-2. The second problem is that deciding based on whether the symbol is local misses the case when the symbol is global but is still non-interposable and known to be located in the executable. This happens on all global symbols in executables. This case is exercised in the newly added testcase tls-relax-ie-le-4. Here we adjust the condition we base our relaxation on so that we relax to local-exec if we are creating an executable and the relevant symbol we're accessing is stored inside that executable. -- Updating tests for new relaxation criteria Many of the tests added to check our relaxation to IE were implemented by taking advantage of the fact that we did not relax a global symbol defined in an executable. Since a global symbol defined in an executable is still not interposable, we know that a TLS version of such a symbol will be in the main TLS block. This means that we can perform a stronger relaxation on such symbols and relax their accesses to a local-exec access. Hence we have to update all tests that relied on the older suboptimal decision making. The two cases when we still would want to relax a general dynamic access to an initial exec one are: 1) When in a shared library and accessing a symbol which we have already seen accessed with an initial exec access sequence. 2) When in an executable and accessing a symbol defined in a shared library. Both of these require shared library support, which means that these tests are now only available on targets with that. I have chosen to switch the existing testcases from a plain executable to one dynamically linked to a shared object as that doesn't require changing the testcases quite so much (just requires accessing a different variable rather than requiring adding another code sequence). The tls-relax-all testcase was an outlier to the above approach, since it included a general dynamic access to both a local and global symbol and inspected for the difference accordingly.
2022-08-02ld: aarch64: Update test linker scripts relocs.ld and relocs-ilp32.ldMatthew Malcomson
The updates are to ensure that the .data section exists. This means that we always have a data section. That means that we don't create a RWX segment and avoid the corresponding warning. We get this warning when testing aarch64-none-elf with -mcmodel=tiny. N.b. this changes quite a few testcases from fail to pass.
2022-08-02arm: Add cfi expression support for ra_auth_codeVictor Do Nascimento
This patch extends assembler support for the use of register names to allow for pseudo-registers, e.g. ra_auth_code register. This is done particularly with CFI directives in mind, allowing for expressions of the type: .cfi_register ra_auth_code, 12 gas/Changelog: * config/tc-arm.c (tc_arm_regname_to_dw2regnum): Add REG_TYPE_PSEUDO handling. * testsuite/gas/arm/cfi-pacbti-m-readelf.d: New. * testsuite/gas/arm/cfi-pacbti-m.s: New.
2022-08-02arm: Use DWARF numbering convention for pseudo-register representationVictor Do Nascimento
This patch modifies the internal `struct reg_entry' numbering of DWARF pseudo-registers to match values assigned in DWARF standards (see "4.1 DWARF register names" in [1])so ra_auth_code goes from 12 to 143 and amends the unwinder .save directive-processing code to correctly handle mixed register-type save directives. The mechanism for splitting the register list is also re-written to comply with register ordering on push statements, being that registers are stored on the stack in numerical order, with the lowest numbered register at the lowest address [2]. Consequently, the parsing of the hypothetical directive .save{r4-r7, r10, ra_auth_core, lr} has been changed such as rather than producing .save{r4-r7, r10} .save{ra_auth_code} .save{lr} as was the case with previous implementation, now produces: .save{lr} .save{ra_auth_code} .save{r4-r7, r10} [1] <https://github.com/ARM-software/abi-aa/blob/main/aadwarf32/aadwarf32.rst> [2] <https://developer.arm.com/documentation/dui0473/j/arm-and-thumb-instructions/push> gas/Changelog: * config/tc-arm.c (REG_RA_AUTH_CODE): New. (parse_dot_save): Likewise. (parse_reg_list): Remove obsolete code. (reg_names): Set ra_auth_code to 143. (s_arm_unwind_save): Handle core and pseudo-register lists via parse_dot_save. (s_arm_unwind_save_mixed): Deleted. (s_arm_unwind_save_pseudo): Handle one register at a time. * testsuite/gas/arm/unwind-pacbti-m-readelf.d: Fix test. * testsuite/gas/arm/unwind-pacbti-m.d: Likewise.
2022-08-02PE objdump -xAlan Modra
objdump -x on PE executables produces lots of "xdata section corrupt" and "corrupt unwind data" warnings, and refuses to dump that info. It turns out that the sanity checks were bad, not the data. Fix them. * pei-x86_64.c (pex64_get_unwind_info): Correct buffer overrun sanity checks. (pex64_xdata_print_uwd_codes): Similarly.