summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2022-08-08Fix regression from gdbarch registry changelinaro-local/ci/tcwg_kernel/llvm-master-arm-stable-allmodconfiglinaro-local/ci/tcwg_kernel/llvm-master-arm-norov-defconfiglinaro-local/ci/tcwg_kernel/llvm-master-aarch64-lts-defconfiglinaro-local/ci/tcwg_kernel/gnu-master-arm-next-allmodconfiglinaro-local/ci/tcwg_kernel/gnu-master-arm-mainline-allyesconfiglinaro-local/ci/tcwg_kernel/gnu-master-arm-lts-allmodconfiglinaro-local/ci/tcwg_kernel/gnu-master-aarch64-lts-allnoconfiglinaro-local/ci/tcwg_kernel/gnu-master-aarch64-lts-allmodconfiglinaro-local/ci/tcwg_gnu_native_check_gdb/master-armlinaro-local/ci/tcwg_gnu_native_check_gcc/master-armlinaro-local/ci/tcwg_gnu_native_check_gcc/master-aarch64linaro-local/ci/tcwg_gnu_native_build/master-armlinaro-local/ci/tcwg_gcc_bootstrap/master-arm-bootstrap_profiledlinaro-local/ci/tcwg_gcc_bootstrap/master-aarch64-bootstrap_profiledlinaro-local/ci/tcwg_gcc_bootstrap/master-aarch64-bootstrap_ltolinaro-local/ci/tcwg_gcc_bootstrap/master-aarch64-bootstrap_O3linaro-local/ci/tcwg_bmk_llvm_tx1/llvm-master-aarch64-spec2k6-O3_LTOlinaro-local/ci/tcwg_bmk_llvm_tx1/llvm-master-aarch64-spec2k6-O2linaro-local/ci/tcwg_bmk_llvm_tk1/llvm-master-arm-spec2k6-O3_LTOlinaro-local/ci/tcwg_bmk_llvm_apm/llvm-master-arm-spec2k6-Oslinaro-local/ci/tcwg_bmk_gnu_eabi_stm32/gnu_eabi-master-arm_eabi-coremark-O2_LTOTom Tromey
The gdbarch registry patch introduced a regression that could cause a crash when opening files in gdb. The bug is that, previously, the solib ops would default to current_target_so_ops; but the patch changed this code to default to nullptr. This patch fixes the bug by reintroducing the earlier behavior. This is PR gdb/29449. I managed to reproduce the bug with a riscv-elf build and then verified that this fixes the problem. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29449
2022-08-08add splay tree for info_ptr -> CU mappinglinaro-local/ci/tcwg_kernel/gnu-master-arm-stable-defconfiglinaro-local/ci/tcwg_gnu_native_build/master-aarch64linaro-local/ci/tcwg_gcc_check_bootstrap/master-aarch64-check_bootstrap_ltolinaro-local/ci/tcwg_gcc_bootstrap/master-arm-bootstrap_ubsanlinaro-local/ci/tcwg_gcc_bootstrap/master-arm-bootstrap_ltolinaro-local/ci/tcwg_bmk_gnu_apm/gnu-master-arm-spec2k6-Os_LTOMartin Liska
While using perf top for MozillaThunderbird I noticed quite some slow dissably call with source code involved. E.g. time ./objdump --start-address=0x0000000004e0dcd0 --stop-address=0x0000000004e0df8b -l -d --no-show-raw-insn -S -C /usr/lib64/thunderbird/libxul.so took 2.071s and I noticed quite some time is spent in find_abstract_instance: 33.46% objdump objdump [.] find_abstract_instance 18.22% objdump objdump [.] arange_add 13.77% objdump objdump [.] read_attribute_value 4.82% objdump objdump [.] comp_unit_maybe_decode_line_info 3.10% objdump libc.so.6 [.] __memset_avx2_unaligned_erms where linked list of CU is iterated when searing for where info_ptr belongs to: : 3452 for (u = unit->prev_unit; u != NULL; u = u->prev_unit) 0.00 : 4c61f7: mov 0x10(%rbx),%rax 0.00 : 4c61fb: test %rax,%rax 0.00 : 4c61fe: je 4c6215 <find_abstract_instance+0x365> : 3453 if (info_ptr >= u->info_ptr_unit && info_ptr < u->end_ptr) 0.00 : 4c6200: cmp 0x60(%rax),%rdx 83.20 : 4c6204: jb 4c620c <find_abstract_instance+0x35c> 0.00 : 4c6206: cmp 0x78(%rax),%rdx 6.89 : 4c620a: jb 4c6270 <find_abstract_instance+0x3c0> : 3452 for (u = unit->prev_unit; u != NULL; u = u->prev_unit) 0.00 : 4c620c: mov 0x10(%rax),%rax 7.90 : 4c6210: test %rax,%rax 0.00 : 4c6213: jne 4c6200 <find_abstract_instance+0x350> The following scan can be replaced with search in a splay tree and with that I can get to 1.5s and there are other symbols where the difference is even bigger. bfd/ChangeLog: PR 29081 * dwarf2.c (struct addr_range): New. (addr_range_intersects): Likewise. (splay_tree_compare_addr_range): Likewise. (splay_tree_free_addr_range): Likewise. (struct dwarf2_debug_file): Add comp_unit_tree. (find_abstract_instance): Use the splay tree when searching for a info_ptr. (stash_comp_unit): Insert to the splay tree. (_bfd_dwarf2_cleanup_debug_info): Clean up the splay tree.
2022-08-08dwarf: use find_abstract_instance for vars and DW_AT_specificationMartin Liska
The following simple test case fails when dwz is used: $ cat demo.C namespace std { enum { _S_fixed, _S_floatfield = _S_fixed }; struct { struct {}; } __ioinit; } int main() { return 0; } $ g++ demo.C -g && cp a.out b.out && dwz -m xxx.so a.out b.out && objdump -S a.out >/dev/null objdump: DWARF error: could not find variable specification at offset 0x3d3 As seen the reference is defined in xxx.so shared part: $ eu-readelf -w -N a.out | grep -A3 -B3 3d3 decl_column (data1) 11 sibling (ref_udata) [ 387] [ 387] variable abbrev: 30 specification (GNU_ref_alt) [ 3d3] location (exprloc) [ 0] addr 0x404019 [ 396] subprogram abbrev: 32 $ eu-readelf -w -N a.out | less ... Compilation unit at offset 920: Version: 5, Abbreviation section offset: 0, Address size: 8, Offset size: 4 Unit type: partial (3) ... [ 3d3] variable abbrev: 31 name (strp) "__ioinit" decl_file (data1) demo.C (10) decl_line (data1) 6 decl_column (data1) 3 type (ref_udata) [ 3c4] declaration (flag_present) yes With the patch the same output is emitted as before usage of dwz. bfd/ChangeLog: PR 29442 * dwarf2.c (struct varinfo): Use const char * type. (scan_unit_for_symbols): Call find_abstract_instance for DW_AT_specification for variables that can be in a different CU (e.g. done by dwz)
2022-08-08Mach-O: i18n enablement on some error messages.Tsukasa OI
* config/obj-macho.c (obj_mach_o_get_section_names): Wrap two string literals within with gettext macro.
2022-08-08ld: fix NEWS typoslinaro-local/ci/tcwg_gcc_bootstrap/master-arm-bootstrap_O3linaro-local/ci/tcwg_gcc_bootstrap/master-aarch64-bootstrap_ubsanMartin Liska
ld/ChangeLog: * NEWS: Fix 2 typos.
2022-08-08Add a link to the NEWS files in the release announcement email.linaro-local/ci/tcwg_kernel/llvm-master-arm-stable-allnoconfigNick Clifton
2022-08-08gdb/csky support .reg2 for kernel 4.x and laterlinaro-local/ci/tcwg_kernel/llvm-master-arm-norov-allmodconfiglinaro-local/ci/tcwg_kernel/llvm-master-aarch64-norov-allyesconfiglinaro-local/ci/tcwg_kernel/gnu-master-arm-next-defconfiglinaro-local/ci/tcwg_kernel/gnu-master-arm-lts-allnoconfiglinaro-local/ci/tcwg_kernel/gnu-master-aarch64-stable-allmodconfiglinaro-local/ci/tcwg_kernel/gnu-master-aarch64-mainline-allyesconfiglinaro-local/ci/tcwg_kernel/gnu-master-aarch64-mainline-allnoconfiglinaro-local/ci/tcwg_kernel/gnu-master-aarch64-mainline-allmodconfiglinaro-local/ci/tcwg_gnu_native_check_binutils/master-armlinaro-local/ci/tcwg_gnu_native_check_binutils/master-aarch64linaro-local/ci/tcwg_gcc_check_bootstrap/master-aarch64-check_bootstraplinaro-local/ci/tcwg_gcc_bootstrap/master-aarch64-bootstrap_debuglinaro-local/ci/tcwg_bmk_llvm_tx1/llvm-master-aarch64-spec2k6-O3linaro-local/ci/tcwg_bmk_llvm_apm/llvm-master-arm-spec2k6-Os_LTOlinaro-local/ci/tcwg_bmk_llvm_apm/llvm-master-aarch64-spec2k6-Ozlinaro-local/ci/tcwg_bmk_gnu_tk1/gnu-master-arm-spec2k6-O3_LTOlinaro-local/ci/tcwg_bmk_gnu_tk1/gnu-master-arm-spec2k6-O3linaro-local/ci/tcwg_bmk_gnu_eabi_stm32/gnu_eabi-master-arm_eabi-coremark-O3Jiangshuai Li
When kernel's version >= 4.x, the size of .reg2 section will be 400. Contents of .reg2 are { unsigned long vr[96]; unsigned long fcr; unsigned long fesr; unsigned long fid; unsigned long reserved; }; VR[96] means: (vr0~vr15) + (fr16~fr31), each Vector register is 128-bits, each Float register is 64 bits, the total size is (4*96). In addition, for fr0~fr15, each FRx is the lower 64 bits of the corresponding VRx. So fr0~fr15 and vr0~vr15 regisetrs use the same offset.
2022-08-08Automatic date update in version.inlinaro-local/ci/tcwg_kernel/llvm-master-arm-mainline-defconfiglinaro-local/ci/tcwg_kernel/gnu-master-aarch64-norov-allyesconfiglinaro-local/ci/tcwg_gcc_bootstrap/master-arm-bootstrap_profiled_ltolinaro-local/ci/tcwg_bmk_llvm_apm/llvm-master-aarch64-spec2k6-Os_LTOlinaro-local/ci/tcwg_bmk_gnu_tk1/gnu-master-arm-spec2k6-O2linaro-local/ci/tcwg_bmk_gnu_apm/gnu-master-arm-spec2k6-OsGDB Administrator
2022-08-07[gdb/build] Fix build with gcc 4.8.5linaro-local/ci/tcwg_kernel/llvm-master-arm-stable-defconfiglinaro-local/ci/tcwg_kernel/llvm-master-arm-next-allyesconfiglinaro-local/ci/tcwg_kernel/llvm-master-arm-lts-defconfiglinaro-local/ci/tcwg_kernel/llvm-master-aarch64-norov-allmodconfiglinaro-local/ci/tcwg_kernel/llvm-master-aarch64-next-allyesconfiglinaro-local/ci/tcwg_kernel/llvm-master-aarch64-next-allnoconfiglinaro-local/ci/tcwg_kernel/llvm-master-aarch64-mainline-allyesconfiglinaro-local/ci/tcwg_kernel/llvm-master-aarch64-lts-allnoconfiglinaro-local/ci/tcwg_kernel/gnu-master-arm-norov-allmodconfiglinaro-local/ci/tcwg_kernel/gnu-master-arm-lts-defconfiglinaro-local/ci/tcwg_kernel/gnu-master-aarch64-next-allnoconfiglinaro-local/ci/tcwg_bmk_llvm_apm/llvm-master-arm-spec2k6-Ozlinaro-local/ci/tcwg_bmk_gnu_fx/gnu-master-aarch64-cpu2017-O2linaro-local/ci/tcwg_bmk_gnu_eabi_stm32/gnu_eabi-master-arm_eabi-coremark-Os_LTOlinaro-local/ci/tcwg_bmk_gnu_eabi_stm32/gnu_eabi-master-arm_eabi-coremark-O3_LTOTom de Vries
When building with gcc 4.8.5, I run into: ... user-regs.c:85:1: error: could not convert \ ‘{0l, (& builtin_user_regs.gdb_user_regs::first)}’ from \ ‘<brace-enclosed initializer list>’ to ‘gdb_user_regs’ }; ^ ... Fix this by removing the initialization and handling regs.last == nullptr in append_user_reg. Tested on x86_64-linux.
2022-08-07[gdb/symtab] Fix assert in read_addrmap_from_arangeslinaro-local/ci/tcwg_kernel/llvm-master-arm-norov-allyesconfiglinaro-local/ci/tcwg_kernel/llvm-master-aarch64-stable-allyesconfiglinaro-local/ci/tcwg_kernel/llvm-master-aarch64-lts-allyesconfiglinaro-local/ci/tcwg_kernel/gnu-master-arm-norov-allnoconfiglinaro-local/ci/tcwg_kernel/gnu-master-arm-mainline-defconfiglinaro-local/ci/tcwg_kernel/gnu-master-aarch64-norov-allnoconfiglinaro-local/ci/tcwg_bmk_llvm_tk1/llvm-master-arm-spec2k6-O2linaro-local/ci/tcwg_bmk_llvm_sq/llvm-master-aarch64-spec2k6-Oslinaro-local/ci/tcwg_bmk_llvm_apm/llvm-master-aarch64-spec2k6-Oslinaro-local/ci/tcwg_bmk_gnu_eabi_stm32/gnu_eabi-master-arm_eabi-coremark-O2linaro-local/ci/tcwg_bmk_gnu_apm/gnu-master-aarch64-spec2k6-Os_LTOTom de Vries
When loading the debug-names-duplicate-cu executable included in this test-case, we run into: ... (gdb) file debug-names-duplicate-cu^M Reading symbols from debug-names-duplicate-cu...^M src/gdb/dwarf2/read.c:2353: internal-error: read_addrmap_from_aranges: \ Assertion `insertpair.second' failed.^M ... This assert was added in recent commit 75337cbc147 ("[gdb/symtab] Fix .debug_aranges duplicate offset warning"). The assert triggers because the CU table in the .debug_names section contains a duplicate: ... Version 5 Augmentation string: 47 44 42 00 ("GDB") CU table: [ 0] 0x0 [ 1] 0x0 ... Fix this by rejecting the .debug_names index: ... (gdb) file debug-names-duplicate-cu^M Reading symbols from debug-names-duplicate-cu...^M warning: Section .debug_names has duplicate entry in CU table, \ ignoring .debug_names.^M ... Likewise for the case where the CU table is not sorted by increasing offset. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29436
2022-08-07[gdb/testsuite] Add support for .debug_names in dwarf assemblerTom de Vries
Add: - support for a per-module .debug_names section in the dwarf assembler, and - a test-case excercising this new functionality. A per-module .debug_names section needs to have an entry in the CU list for each CU in the module, which is made more difficult by two things: - linking in other objects, which may contain additional CUs (typically the case on openSUSE), and - adding dummy CUs in the dwarf assembler. We handle this by: - compiling with -nostartfiles (so the test-case contains _start rather than main), and - disabling the dummy CU generation for the test-case. I've kept things simple by having the test-case specify the hash value, rather than adding that functionality in the dwarf assembler. Also I've kept the bucket count to 1, which makes it trivial to satisfy the requirement that "the symbol is entered into a bucket whose index is the hash value modulo bucket_count". The readelf dump of the .debug_names section from the test-case looks like: ... Version 5 Augmentation string: 47 44 42 00 ("GDB") CU table: [ 0] 0x0 TU table: Foreign TU table: Used 1 of 1 bucket. Out of 2 items there are 1 bucket clashes (longest of 1 entries). Symbol table: [ 0] #eddb6232 _start: <1> DW_TAG_subprogram DW_IDX_compile_unit=0 [ 1] #0b888030 int: <2> DW_TAG_base_type DW_IDX_compile_unit=0 ... Tested on x86_64-linux.
2022-08-07Automatic date update in version.inlinaro-local/ci/tcwg_kernel/llvm-master-aarch64-next-defconfiglinaro-local/ci/tcwg_kernel/llvm-master-aarch64-mainline-defconfiglinaro-local/ci/tcwg_kernel/gnu-master-arm-next-allnoconfiglinaro-local/ci/tcwg_kernel/gnu-master-aarch64-norov-allmodconfiglinaro-local/ci/tcwg_kernel/gnu-master-aarch64-next-allmodconfiglinaro-local/ci/tcwg_kernel/gnu-master-aarch64-lts-allyesconfigGDB Administrator
2022-08-06asan: heap buffer overflow in _bfd_error_handlerlinaro-local/ci/tcwg_kernel/llvm-master-arm-next-defconfiglinaro-local/ci/tcwg_kernel/llvm-master-arm-next-allnoconfiglinaro-local/ci/tcwg_kernel/llvm-master-arm-lts-allyesconfiglinaro-local/ci/tcwg_kernel/llvm-master-aarch64-stable-defconfiglinaro-local/ci/tcwg_kernel/llvm-master-aarch64-stable-allnoconfiglinaro-local/ci/tcwg_kernel/llvm-master-aarch64-next-allmodconfiglinaro-local/ci/tcwg_kernel/llvm-master-aarch64-mainline-allmodconfiglinaro-local/ci/tcwg_kernel/gnu-master-arm-stable-allyesconfiglinaro-local/ci/tcwg_kernel/gnu-master-arm-mainline-allmodconfiglinaro-local/ci/tcwg_kernel/gnu-master-aarch64-stable-defconfiglinaro-local/ci/tcwg_kernel/gnu-master-aarch64-next-defconfiglinaro-local/ci/tcwg_kernel/gnu-master-aarch64-lts-defconfiglinaro-local/ci/tcwg_bmk_llvm_tx1/llvm-master-aarch64-spec2k6-O2_LTOlinaro-local/ci/tcwg_bmk_llvm_tk1/llvm-master-arm-spec2k6-O3linaro-local/ci/tcwg_bmk_gnu_tx1/gnu-master-aarch64-spec2k6-O2_LTOlinaro-local/ci/tcwg_bmk_gnu_tk1/gnu-master-arm-spec2k6-O2_LTOAlan Modra
On coff_slurp_symbol_table printing "unrecognized storage class" for a symbol error. If the symbol name is the last string in its section and not terminated, we run off the end of the buffer. * coffgen.c (build_debug_section): Terminate the section with an extra 0.
2022-08-06asan: segfault in coff_write_auxent_fnameAlan Modra
More fuzzed input file nonsense. * coffgen.c (coff_write_symbol): Don't call coff_write_auxent_fname when extrap is NULL.
2022-08-06msan: bfd_mach_o_layout_commands use of uninitialised valueAlan Modra
Catches fuzzed input with unterminated strings that later run off the end of their buffers when calling strlen. * mach-o.c: Use size_t vars where approprite. (bfd_mach_o_alloc_and_read): Add "extra" param. Allocate that much extra and clear. Update all callers, those that set up strings with one extra byte.
2022-08-06objcopy section alignmentAlan Modra
bfd_set_section_alignment currently always returns true. This patch changes it to return false on silly alignment values, avoiding yet another way to trigger ubsan errors like coffcode.h:3192:12: runtime error: shift exponent 299 is too large for 32-bit type 'int'. We'll catch that one in objcopy.c:setup_sections. However, setup_sections gives up on other setup operations that are necessary even after an error of some sort. Change that to keep going, which might change the error message but that shouldn't matter in the least. bfd/ * section.c (bfd_set_section_alignment): Return false and don't set alignment_power for stupidly large alignments. * bfd-in2.h: Regenerate. * coffcode.h (coff_compute_section_file_positions): Don't use an int constant when calculating alignment. binutils/ * objcopy.c (setup_section): Keep on going after hitting non-fatal errors.
2022-08-06ubsan: som.c undefined shift in som_set_reloc_infoAlan Modra
Do the shift using unsigned variables to avoid UB on << 8. * som.c (som_set_reloc_info): Make v unsigned. Localise some variables to their blocks.
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.