binutils-gdb.git
18 months agoOnly use the per-BFD object to write a DWARF index
Tom Tromey [Wed, 13 Apr 2022 17:21:20 +0000 (11:21 -0600)]
Only use the per-BFD object to write a DWARF index

The DWARF index does not need access to the objfile or per-objfile
objects when writing -- it's entirely based on the objfile-independent
per-BFD data.

This patch implements this idea by changing the entire API to only be
passed the per-BFD object.  This simplifies some lifetime reasoning
for the next patch.

This patch removes some code that ensures that the BFD came from a
file.  It seems to me that checking for the existence of a build-id is
good enough for the index cache.

18 months agogdb: fix parenthesis position in comment
Simon Marchi [Fri, 24 Feb 2023 17:31:39 +0000 (12:31 -0500)]
gdb: fix parenthesis position in comment

Change-Id: I535b597ab4482378910570d8dd69c090419941eb

18 months agotestsuite: prune DOS drive letter in test outputs
Clément Chigot [Tue, 21 Feb 2023 14:07:58 +0000 (15:07 +0100)]
testsuite: prune DOS drive letter in test outputs

On DOS systems, absolute paths start with the drive letter. This can
trigger failures in the regexp from dump tests, especially for those
checking for warnings or errors. They are usually skipping everything
before the first ":" as it has to be the file path.
  | [^:]*: warning: ...

In order to avoid modifying many regexps to allow such drive letters,
prune them from all the outputs if they are found at the beginning of
a line.

binutils/ChangeLog:

* testsuite/lib/binutils-common.exp (prune_dump_output): New
(run_dump_test): Use it.

ld/ChangeLog:

* testsuite/ld-elf/noinit-sections-2.l: Remove DOS drive letter
handler.

18 months agox86: allow to request ModR/M encoding
Jan Beulich [Fri, 24 Feb 2023 13:00:11 +0000 (14:00 +0100)]
x86: allow to request ModR/M encoding

Several insns have a (typically shorter) non-ModR/M and a (typically
longer) ModR/M encoding. In most cases the former is used by default.
This isn't too dissimilar from register-only insns sometimes having two
encoding forms. In those cases {load} or {store} can be used to control
the encoding used. Extend this to ModR/M-less encodings which have a
ModR/M counterpart (note that BSWAP hasn't). For insn reading and
writing their (explicit) memory operand, both prefixes are honored;
otherwise only the applicable one is.

Note that for some forms of XCHG, {store} has already been performing
this function, apparently as an unnoticed side effect of adding D to
the template.

18 months agox86: MONITOR/MWAIT are not SSE3 insns
Jan Beulich [Fri, 24 Feb 2023 12:59:35 +0000 (13:59 +0100)]
x86: MONITOR/MWAIT are not SSE3 insns

These have their own CPUID bit and hence they should also have their own
separate control.

18 months agox86-64: don't permit LAHF/SAHF with "generic64"
Jan Beulich [Fri, 24 Feb 2023 12:58:35 +0000 (13:58 +0100)]
x86-64: don't permit LAHF/SAHF with "generic64"

The feature isn't universally available on 64-bit CPUs.

Note that in i386-gen.c:isa_dependencies[] I'm only adding it to models
where I'm certain the functionality exists. For Nocona and Core I'm
uncertain in particular.

18 months agox86: have insns acting on segment selector values allow for consistent operands
Jan Beulich [Fri, 24 Feb 2023 12:57:31 +0000 (13:57 +0100)]
x86: have insns acting on segment selector values allow for consistent operands

While MOV to/from segment register as well as selector storing insns
already permit 32- and 64-bit GPR operands, selector loading insns and
ARPL do not. Split templates accordingly.

18 months agox86: restrict insn templates accepting negative 8-bit immediates
Jan Beulich [Fri, 24 Feb 2023 12:56:57 +0000 (13:56 +0100)]
x86: restrict insn templates accepting negative 8-bit immediates

For shifts (but not ordinary rotates) and other cases where an immediate
describes e.g. a bit count or position, allowing negative operands is at
best confusing. An extreme example would be the two rotate-through-carry
insns, where a negative value would _not_ mean rotating the
corresponding number of bits in the other direction. To refuse such,
give meaning to the combination of Imm8 and Imm8S in templates (so far
these weren't used together anywhere). The issue was with
smallest_imm_type() blindly setting .imm8 for signed numbers determined
to fit in a byte.

VPROT{B,W,D,Q} is a little special: The rotate count there is a signed
quantity, so Imm8 is replaced by Imm8S. Adjust affected testcases
accordingly as well.

Another small adjustment to the testsuite is necessary: AAM and AAD were
never sensible to use with 0xffffff90 operands. This should have been an
error.

18 months ago[gdb/testsuite] Cleanup unnecessary expr from require line
Tom de Vries [Fri, 24 Feb 2023 12:52:12 +0000 (13:52 +0100)]
[gdb/testsuite] Cleanup unnecessary expr from require line

In a recent commit I've added:
...
require {expr [have_compile_flag -fsplit-stack]}
...
but actually the expr bit is unnecessary, and we can just use:
...
require {have_compile_flag -fsplit-stack}
...

Reported-By: Tom Tromey <tom@tromey.com>
18 months agoGDB: Fix out of bounds accesses with limited-length values
Maciej W. Rozycki [Fri, 24 Feb 2023 12:37:22 +0000 (12:37 +0000)]
GDB: Fix out of bounds accesses with limited-length values

Fix accesses to limited-length values in `contents_copy_raw' and
`contents_copy_raw_bitwise' so that they observe the limit of the
original allocation.

Reported by Simon Marchi as a heap-buffer-overflow AddressSanitizer
issue triggered with gdb.ada/limited-length.exp.

Approved-By: Simon Marchi <simon.marchi@efficios.com>
18 months agoEnhance better_fit() function to prefer function symbols over non-function symbols.
Nick Clifton [Fri, 24 Feb 2023 12:25:50 +0000 (12:25 +0000)]
Enhance better_fit() function to prefer function symbols over non-function symbols.

18 months agoPR30155, ld segfault in _bfd_nearby_section
Alan Modra [Thu, 23 Feb 2023 07:53:12 +0000 (18:23 +1030)]
PR30155, ld segfault in _bfd_nearby_section

The segfault was a symptom of messing with the absolute section next
field, confusing bfd_section_removed_from_list in linker.c:fix_syms.
That's not all that was going wrong.  The INSERT list of output
sections was being inserted into itself, ie. lost from the main
list of linker statements.

PR 30155
* ldlang.c (process_insert_statements): Handle pathological
case of the insert script being inserted before the first
output section statement in the default script.
(output_prev_sec_find): Don't test section owner here.
(insert_os_after): Change parameter to a list union pointer.
(lang_insert_orphan): Test section owner here and adjust
insert_os_after call.

18 months agoRISC-V: Add --[no-]relax-gp to ld
Fangrui Song [Fri, 24 Feb 2023 06:11:14 +0000 (22:11 -0800)]
RISC-V: Add --[no-]relax-gp to ld

--relax enables all relaxations.  --no-relax-gp disables GP relaxation to
allow measuring its effect.

The option can test effectiveness of GP relaxation and support some ABI
variants that use GP for other purposes.

Link: https://github.com/riscv-non-isa/riscv-elf-psabi-doc/issues/298
bfd/
    * elfnn-riscv.c (struct riscv_elf_link_hash_table): Add params.
    (riscv_elfNN_set_options): New.
    (riscv_info_to_howto_rela): Check relax_gp.
    (_bfd_riscv_relax_section): Likewise.
    * elfxx-riscv.h (struct riscv_elf_params): New.
    (riscv_elf32_set_options): New.
    (riscv_elf64_set_options): New.
ld/
    * emultempl/riscvelf.em: Add option parsing.
    * testsuite/ld-riscv-elf/code-model-relax-medlow-01-norelaxgp.d: New.
    * testsuite/ld-riscv-elf/pcgp-relax-01-norelaxgp.d: New.
    * testsuite/ld-riscv-elf/pcgp-relax-02.d: Test --relax --relax-gp can be
      used together.

18 months agoAutomatic date update in version.in
GDB Administrator [Fri, 24 Feb 2023 00:00:11 +0000 (00:00 +0000)]
Automatic date update in version.in

18 months agogdb/doc: The RISC-V vector registers didn't change
Palmer Dabbelt [Thu, 26 Jan 2023 23:09:29 +0000 (15:09 -0800)]
gdb/doc: The RISC-V vector registers didn't change

When we merged the GDB vector register support we did it a bit early,
just eating the risk in the very unlikely case that the vector register
names changed.  They didn't, so we can now remove the caveat in the docs
that they might.

18 months agogdb: remove --disable-gdbmi configure option
Simon Marchi [Tue, 14 Feb 2023 16:13:43 +0000 (11:13 -0500)]
gdb: remove --disable-gdbmi configure option

I noticed that the --disable-gdbmi option was broken for almost a year
(since 740b42ceb7c "gdb/python/mi: create MI commands using python").

The problem today is the python/py-cmd.c file.  It is included in the
build if Python support is enabled, and it calls into some MI functions
(e.g. insert_mi_cmd_entry).  If MI support is disabled, we get some
undefined symbols like:

    mold: error: undefined symbol: insert_mi_cmd_entry(std::unique_ptr<mi_command, std::default_delete<mi_command> >)
    >>> referenced by py-micmd.c
    >>>               python/py-micmd.o:(micmdpy_install_command(micmdpy_object*))

The python/py-cmd.c file should be included in the build if both Python
and MI support are enabled.  It is not a case we support today, but it
could be done with a bit more configure code.  However, I think we
should just remove the --disable-gdbmi option, and just include MI
support unconditionally.

Tom Tromey proposed a while ago to remove this option, but it ended
staying:

  https://inbox.sourceware.org/gdb-patches/20180628172132.28843-1-tom@tromey.com/

However, there was no strong opposition to remove it.  The argument was
just "bah, it doesn't hurt anybody".

But given today's case, I would rather remove complexity rather than add
some.  I couldn't find anybody caring deeply for that option, and it's
not like MI adds any external dependency.  It's just a bit more code.

Removing the option will not break anybody using --disable-gdbmi (it can
be found in many build scripts [1]), since we don't flag invalid
configure flags.

So, remove the option from configure.ac, and adjust Makefile.in
accordingly to always include the MI objects in the build.

[1] https://github.com/search?q=%22--disable-gdbmi%22&type=code

Change-Id: Ifcaa8c9fc4abc6fa686ed5fd984598644f745240
Approved-By: Tom Tromey <tom@tromey.com>
18 months agoFix Tcl quoting in gdb_assert
Tom Tromey [Wed, 15 Feb 2023 21:57:10 +0000 (14:57 -0700)]
Fix Tcl quoting in gdb_assert

The gdb_assert proc under-quotes the expression that is passed in.
This leads to weird code in a couple of spots that tries to
compensate:

    gdb_assert {{$all_regs eq $completed_regs}} ...

The fix is to add a bit of quoting when evaluating the expression.

18 months agoFix _bfd_elf_find_function so that it can cope with overlapping symbols
Nick Clifton [Thu, 23 Feb 2023 17:27:07 +0000 (17:27 +0000)]
Fix _bfd_elf_find_function so that it can cope with overlapping symbols

18 months agogdb: add AMDGPU header files to HFILES_NO_SRCDIR
Simon Marchi [Thu, 23 Feb 2023 16:27:23 +0000 (11:27 -0500)]
gdb: add AMDGPU header files to HFILES_NO_SRCDIR

Commit 18b4d0736bc5 ("gdb: initial support for ROCm platform (AMDGPU)
debugging") missed adding these header files to the HFILES_NO_SRCDIR
list in the Makefile.  Fix that now.

Change-Id: Ifd387096aef3d147b51aefa2037da5bf6373ea64

18 months agoRemove 'eval' from gdb_breakpoint
Tom Tromey [Wed, 22 Feb 2023 22:21:45 +0000 (15:21 -0700)]
Remove 'eval' from gdb_breakpoint

Now that Tcl has the {*} operator, we can remove the use of eval from
gdb_breakpoint.  Tested on x86-64 Fedora 36.

18 months agogdb: LoongArch: Support reg aliases in info reg command
Hui Li [Thu, 16 Feb 2023 01:22:25 +0000 (09:22 +0800)]
gdb: LoongArch: Support reg aliases in info reg command

According to LoongArch ELF ABI specification [1], support the register
aliases in "info register" command.

Without this patch:
```
(gdb) info reg a0
Invalid register `a0'

```
With this patch:

```
(gdb) info reg a0

a0             0x1                 1

```
[1] https://loongson.github.io/LoongArch-Documentation/LoongArch-ELF-ABI-EN.html#_register_convention

Signed-off-by: Hui Li <lihui@loongson.cn>
Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
18 months agogdb: LoongArch: Modify the result of the info reg command
Hui Li [Thu, 16 Feb 2023 00:59:10 +0000 (08:59 +0800)]
gdb: LoongArch: Modify the result of the info reg command

The "info register" command should only display general registers,
but it shows the information of all registers in the current code,
add loongarch_register_reggroup_p() so that we can get the expected
result.

Signed-off-by: Hui Li <lihui@loongson.cn>
Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
18 months agobfd: xtensa: fix __stop_SECTION literal drop
Alexey Lapshin [Thu, 23 Feb 2023 10:48:16 +0000 (10:48 +0000)]
bfd: xtensa: fix __stop_SECTION literal drop

18 months agoFix the BFD library's find_nearest_line feature to produce consistent results.
Nick Clifton [Thu, 23 Feb 2023 09:44:50 +0000 (09:44 +0000)]
Fix the BFD library's find_nearest_line feature to produce consistent results.

 PR 30150
 * dwarf2.c (comp_unit_contains_address): Renamed to ... (comp_unit_may_contain_address): this,
 and added code to return true if the CU's ranges have not yet been computed.
 (_bfd_dwarf2_find_nearest_line_with_alt): Use the renamed function, simplifying code in the process.

18 months agodwarf1 .line SEC_HAS_CONTENTS
Alan Modra [Thu, 23 Feb 2023 02:24:09 +0000 (12:54 +1030)]
dwarf1 .line SEC_HAS_CONTENTS

* dwarf1.c (parse_line_table): Ignore .line without SEC_HAS_CONTENTS.
Formatting.

18 months agoip2k: don't look at stab sections without relocs
Alan Modra [Wed, 22 Feb 2023 07:41:25 +0000 (18:11 +1030)]
ip2k: don't look at stab sections without relocs

No need to read contents if we won't do anything.

* elf32-ip2k.c (adjust_all_relocations): Skip stab sections
without relocs.

18 months agoTest SEC_HAS_CONTENTS in relax routines
Alan Modra [Wed, 22 Feb 2023 07:07:26 +0000 (17:37 +1030)]
Test SEC_HAS_CONTENTS in relax routines

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.

18 months agoTest SEC_HAS_CONTENTS before reading section contents
Alan Modra [Tue, 21 Feb 2023 21:17:36 +0000 (07:47 +1030)]
Test SEC_HAS_CONTENTS before reading section contents

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.

18 months agoAutomatic date update in version.in
GDB Administrator [Thu, 23 Feb 2023 00:00:26 +0000 (00:00 +0000)]
Automatic date update in version.in

18 months agogdb.reverse/time-reverse.exp: test both time syscall and C time function
Pedro Alves [Wed, 22 Feb 2023 15:40:58 +0000 (15:40 +0000)]
gdb.reverse/time-reverse.exp: test both time syscall and C time function

Instead of only testing this on systems that have a SYS_time syscall,
test it everywhere using the time(2) C function, and in addition, run
the tests again using the SYS_time syscall.

The C variant ensures that if some platform uses some syscall we are
not aware of yet, we'll still exercise it, and likely fail, at which
point we should teach GDB about the syscall.

The explicit syscall variant is useful on platforms where the C
function does not call a syscall at all by default, e.g., on some
systems the C time function wraps an implementation provided by the
vDSO.

Approved-By: Tom de Vries <tdevries@suse.de>
Change-Id: Id4b755d76577d02c46b8acbfa249d9c31b587633

18 months agox86-64: LAR and LSL don't need REX.W
Jan Beulich [Wed, 22 Feb 2023 13:12:52 +0000 (14:12 +0100)]
x86-64: LAR and LSL don't need REX.W

Just like we suppress emitting REX.W for e.g. MOV from/to segment
register, there's also no need for it for LAR and LSL - these can only
ever return 32-bit values and hence always zero-extend their results
anyway.

While there also drop the redundant Word from the first operand of
the second template each - this is already implied by Reg16.

18 months agox86: optimize BT{,C,R,S} $imm,%reg
Jan Beulich [Wed, 22 Feb 2023 13:12:24 +0000 (14:12 +0100)]
x86: optimize BT{,C,R,S} $imm,%reg

In 64-bit mode BT can have REX.W or a data size prefix dropped in
certain cases. Outside of 64-bit mode all 4 insns can have the data
size prefix dropped in certain cases.

18 months agoset bfd_error on make_tempname or make_tempdir failure
Alan Modra [Wed, 22 Feb 2023 01:22:46 +0000 (11:52 +1030)]
set bfd_error on make_tempname or make_tempdir failure

* bucomm.c (make_tempname, make_tempdir): Set bfd_error on error.

18 months agoAutomatic date update in version.in
GDB Administrator [Wed, 22 Feb 2023 00:00:23 +0000 (00:00 +0000)]
Automatic date update in version.in

18 months agoRe: objdump read_section_stabs
Alan Modra [Tue, 21 Feb 2023 23:27:53 +0000 (09:57 +1030)]
Re: objdump read_section_stabs

Also fix ubsan "applying zero offset to null pointer".

* objdump.c (print_section_stabs): Avoid ubsan warning.

18 months agoRe: objdump read_section_stabs
Alan Modra [Tue, 21 Feb 2023 22:34:57 +0000 (09:04 +1030)]
Re: objdump read_section_stabs

Commit f9c36cc99518 changed (and renamed) read_section_stabs with one
difference in overall behaviour.  Previously read_section_stabs would
return a NULL for an empty section, which was then treated the same as
a missing section.  Now an empty section is recognized and dumped.
This leads to NULL stabp and stabs_end in print_section_stabs.  Since
stabs_end - STABSIZE is then a pointer to a very large address, the
test "stabp < stabs_end - STABSIZE" succeeds.

* objdump.c (print_section_stabs): Correct STABSIZE comparison.

18 months agodebug_link duplicate file size checks
Alan Modra [Tue, 21 Feb 2023 21:45:26 +0000 (08:15 +1030)]
debug_link duplicate file size checks

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.

18 months agoIssue error on erroneous expression
Tom Tromey [Sat, 18 Feb 2023 00:55:50 +0000 (19:55 -0500)]
Issue error on erroneous expression

A while back I discovered that this does not issue an error:

    (gdb) p $x = (void * ) 57
    $3 = (void *) 0x39
    (gdb) p $x + 7 = 3
    $6 = (void *) 0x3

This patch fixes the bug.
Regression tested on x86-64 Fedora 36.

Reviewed-By: Bruno Larsen <blarsen@redhat.com>
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=19312

18 months agogdb: add --with-curses to --configuration output
Philippe Blain [Sun, 19 Feb 2023 22:37:35 +0000 (17:37 -0500)]
gdb: add --with-curses to --configuration output

'gdb --configuration' does not mention if GDB was built with curses.
Since b5075fb68d4 (Rename to allow_tui_tests, 2023-01-08) it does show
--enable-tui (or --disable-tui), but one might want to know if GDB was
built with curses independently of the availability of the TUI.

Since configure.ac uses AC_SEARCH_LIBS to check for the curses library,
we do not get an automatically defined HAVE_LIBCURSES symbol in
config.in. We do have symbols defined by AC_CHECK_HEADERS
(HAVE_CURSES_H, etc.) but it would be cumbersome to use those in
print_gdb_configuration because we would have to check for all 6 symbols
corresponding the 6 headers listed. This would also increase the
maintenance burden if support for other variations of curses are added.

Instead, define 'HAVE_LIBCURSES' ourselves by adding an
'action-if-found' argument to AC_SEARCH_LIBS, and use it in
print_gdb_configuration.

While at it, remove the condition on 'ac_cv_search_waddstr' and set
'curses_found' directly in 'action-if-found'.

Change-Id: Id90e3d73990e169cee51bcc3e1d52072cfacd5b8
Approved-By: Simon Marchi <simon.marchi@efficios.com>
18 months ago[gdb/testsuite] Require compilation flags in two gdb.arch/aarch64 test-cases
Tom de Vries [Tue, 21 Feb 2023 14:26:24 +0000 (15:26 +0100)]
[gdb/testsuite] Require compilation flags in two gdb.arch/aarch64 test-cases

With test-cases gdb.arch/aarch64-mte-core.exp and gdb.arch/aarch64-pauth.exp I
run into compilation errors due to unsupported compilation flags.

Fix this by requiring the compilation flags, such that I have instead:
...
UNSUPPORTED: gdb.arch/aarch64-mte-core.exp: require failed: \
  have_compile_flag -march=armv8.5-a+memtag
UNSUPPORTED: gdb.arch/aarch64-pauth.exp: require failed: \
  have_compile_flag -mbranch-protection=pac-ret+leaf
...

Tested on aarch64-linux.

18 months ago[gdb/testsuite] Require istarget x86* in gdb.reverse/step-indirect-call-thunk.exp
Tom de Vries [Tue, 21 Feb 2023 14:06:50 +0000 (15:06 +0100)]
[gdb/testsuite] Require istarget x86* in gdb.reverse/step-indirect-call-thunk.exp

On aarch64-linux, I run into:
...
Running gdb.reverse/step-indirect-call-thunk.exp ...
gdb compile failed, gcc: error: unrecognized command line option \
  '-mindirect-branch=thunk'; did you mean '-findirect-inlining'?
gcc: error: unrecognized command line option '-mfunction-return=thunk'; \
  did you mean '-Wfunction-elimination'?
UNTESTED: gdb.reverse/step-indirect-call-thunk.exp: failed to prepare
...

Fix this by requiring istarget "x86*", similar to what was added in
gdb.base/step-indirect-call-thunk.exp by commit 43127ae5714 ("Fix
gdb.base/step-indirect-call-thunk.exp"), such that we have instead:
...
UNSUPPORTED: gdb.reverse/step-indirect-call-thunk.exp: require failed: \
  istarget "x86*
...

Tested on x86_64-linux and aarch64-linux.

18 months ago[gdb/testsuite] Require -fsplit-stack in gdb.base/morestack.exp
Tom de Vries [Tue, 21 Feb 2023 13:41:14 +0000 (14:41 +0100)]
[gdb/testsuite] Require -fsplit-stack in gdb.base/morestack.exp

On aarch64-linux, I run into:
...
gdb compile failed, cc1: error: '-fsplit-stack' is not supported by this \
  compiler configuration
UNTESTED: gdb.base/morestack.exp: failed to prepare
...

Fix this by requiring -fsplit-stack, such that we have instead:
...
UNSUPPORTED: gdb.base/morestack.exp: require failed: \
  expr [have_compile_flag -fsplit-stack]
...

Tested on x86_64-linux and aarch64-linux.

18 months ago[gdb/testsuite] Require syscall time in gdb.reverse/time-reverse.exp
Tom de Vries [Tue, 21 Feb 2023 13:10:12 +0000 (14:10 +0100)]
[gdb/testsuite] Require syscall time in gdb.reverse/time-reverse.exp

On aarch64-linux, I run into:
...
Running gdb.reverse/time-reverse.exp ...
gdb compile failed, gdb.reverse/time-reverse.c: In function 'main':
gdb.reverse/time-reverse.c:39:12: error: 'SYS_time' undeclared \
  (first use in this function); did you mean 'SYS_times'?
   syscall (SYS_time, &time_global);
            ^~~~~~~~
            SYS_times
gdb.reverse/time-reverse.c:39:12: note: each undeclared identifier is \
  reported only once for each function it appears in
UNTESTED: gdb.reverse/time-reverse.exp: failed to prepare
...

Fix this by adding a new proc have_syscall, and requiring syscall time, such
that we have instead:
...
UNSUPPORTED: gdb.reverse/time-reverse.exp: require failed: \
  expr [have_syscall time]
...

Tested on x86_64-linux and aarch64-linux.

18 months ago[gdb/testsuite] Require python in gdb.dap/basic-dap.exp
Tom de Vries [Tue, 21 Feb 2023 11:47:28 +0000 (12:47 +0100)]
[gdb/testsuite] Require python in gdb.dap/basic-dap.exp

When running test-case gdb.dap/basic-dap.exp with a gdb without python
support, I run into:
...
builtin_spawn gdb -nw -nx -iex set height 0 -iex set width 0 \
  -data-directory data-directory -iex set debug dap-log-file dap.log.1 -q \
  -i=dap
>>> {"seq": 1, "type": "request", "command": "initialize"}
Interpreter `dap' unrecognized
ERROR: eof reading json header
...

Fix this by requiring python in the test-case.

Tested on x86_64-linux, both with a gdb without and with python.

18 months agoUpdate the description of the bfd_fill_in_gnu_debuglink_section function
Nick Clifton [Tue, 21 Feb 2023 11:15:52 +0000 (11:15 +0000)]
Update the description of the bfd_fill_in_gnu_debuglink_section function

18 months agoUpdated translatios for the bfd and gprof directories.
Nick Clifton [Mon, 20 Feb 2023 12:31:56 +0000 (12:31 +0000)]
Updated translatios for the bfd and gprof directories.

18 months agogas/testsuite: adjust a test for case insensitive file systems
Clément Chigot [Wed, 11 Jan 2023 14:12:47 +0000 (15:12 +0100)]
gas/testsuite: adjust a test for case insensitive file systems

When dealing with case insensitive file systems, ".file line.s" and
".file Line.s" are identical and thus gas won't change the current
input file.
However, in line.l test, it's expecting to trigger an input file switch.
As the second filename doesn't matter in it, change it to fit for those
file systems.

gas/ChangeLog:

* testsuite/gas/elf/line.l: Change Line.s to Line2.s.
* testsuite/gas/elf/line.s: Adjust output.

18 months ago[aarch64] Enable pointer authentication support for aarch64 bare metal/kernel mode...
Luis Machado [Sun, 11 Sep 2022 19:47:18 +0000 (20:47 +0100)]
[aarch64] Enable pointer authentication support for aarch64 bare metal/kernel mode addresses

At the moment GDB only handles pointer authentication (pauth) for userspace
addresses and if we're debugging a Linux-hosted program.

The Linux Kernel can be configured to use pauth instructions for some
additional security hardening, but GDB doesn't handle this well.

To overcome this limitation, GDB needs a couple things:

1 - The target needs to advertise pauth support.
2 - The hook to remove non-address bits from a pointer needs to be registered
    in aarch64-tdep.c as opposed to aarch64-linux-tdep.c.

There is a patch for QEMU that addresses the first point, and it makes
QEMU's gdbstub expose a couple more pauth mask registers, so overall we will
have up to 4 pauth masks (2 masks or 4 masks):

pauth_dmask
pauth_cmask
pauth_dmask_high
pauth_cmask_high

pauth_dmask and pauth_cmask are the masks used to remove pauth signatures
from userspace addresses. pauth_dmask_high and pauth_cmask_high masks are used
to remove pauth signatures from kernel addresses.

The second point is easily addressed by moving code around.

When debugging a Linux Kernel built with pauth with an unpatched GDB, we get
the following backtrace:

 #0  __fput (file=0xffff0000c17a6400) at /repos/linux/fs/file_table.c:296
 #1  0xffff8000082bd1f0 in ____fput (work=<optimized out>) at /repos/linux/fs/file_table.c:348
 #2  0x30008000080ade30 [PAC] in ?? ()
 #3  0x30d48000080ade30 in ?? ()
 Backtrace stopped: previous frame identical to this frame (corrupt stack?)

With a patched GDB, we get something a lot more meaningful:

 #0  __fput (file=0xffff0000c1bcfa00) at /repos/linux/fs/file_table.c:296
 #1  0xffff8000082bd1f0 in ____fput (work=<optimized out>) at /repos/linux/fs/file_table.c:348
 #2  0xffff8000080ade30 [PAC] in task_work_run () at /repos/linux/kernel/task_work.c:179
 #3  0xffff80000801db90 [PAC] in resume_user_mode_work (regs=0xffff80000a96beb0) at /repos/linux/include/linux/resume_user_mode.h:49
 #4  do_notify_resume (regs=regs@entry=0xffff80000a96beb0, thread_flags=4) at /repos/linux/arch/arm64/kernel/signal.c:1127
 #5  0xffff800008fb9974 [PAC] in prepare_exit_to_user_mode (regs=0xffff80000a96beb0) at /repos/linux/arch/arm64/kernel/entry-common.c:137
 #6  exit_to_user_mode (regs=0xffff80000a96beb0) at /repos/linux/arch/arm64/kernel/entry-common.c:142
 #7  el0_svc (regs=0xffff80000a96beb0) at /repos/linux/arch/arm64/kernel/entry-common.c:638
 #8  0xffff800008fb9d34 [PAC] in el0t_64_sync_handler (regs=<optimized out>) at /repos/linux/arch/arm64/kernel/entry-common.c:655
 #9  0xffff800008011548 [PAC] in el0t_64_sync () at /repos/linux/arch/arm64/kernel/entry.S:586
 Backtrace stopped: Cannot access memory at address 0xffff80000a96c0c8

18 months agold/testsuite: don't output to /dev/null
Clément Chigot [Fri, 13 Jan 2023 09:21:07 +0000 (10:21 +0100)]
ld/testsuite: don't output to /dev/null

Mingw doesn't have /dev/null and thus "-o /dev/null" will fail.
Currently, all the options are checked using this "-o /dev/null",
resulting in them being disabled on mingw hosts.
Fix that by outputting to a real file for all targets.

ld/ChangeLog:

* testsuite/config/default.exp: Replace "-o /dev/null" by a
file.

18 months agoBoth FAIL and PASS "check sections 2"?
Alan Modra [Tue, 21 Feb 2023 05:45:59 +0000 (16:15 +1030)]
Both FAIL and PASS "check sections 2"?

* testsuite/ld-checks/checks.exp (check sections 2): Don't
continue on with rest of test past first fail.

18 months agold-libs test on alpha-vms
Alan Modra [Tue, 21 Feb 2023 05:49:51 +0000 (16:19 +1030)]
ld-libs test on alpha-vms

* testsuite/ld-libs/libs.exp: Don't run for alpha-vms.

18 months agoalpha-*-vms missing libraries
Alan Modra [Mon, 20 Feb 2023 23:27:49 +0000 (09:57 +1030)]
alpha-*-vms missing libraries

For this:
./ld-new: cannot find -limagelib: No such file or directory
./ld-new: cannot find -lstarlet: No such file or directory
./ld-new: cannot find -lsys$public_vectors: No such file or directory
the logs showed
creating dummy tmpdir/libimagelib:
creating dummy No
creating dummy such
etc.
So rubbish instead of tmpdir/libimagelib.a and the other required libs.

* testsuite/config/default.exp: Correct regex detecting missing
libraries automatically searched by alpha-dec-vms-ld.

18 months agoAutomatic date update in version.in
GDB Administrator [Tue, 21 Feb 2023 00:00:24 +0000 (00:00 +0000)]
Automatic date update in version.in

18 months agoRedefine FUNCTION in doc.str
Tom Tromey [Fri, 17 Feb 2023 19:12:11 +0000 (12:12 -0700)]
Redefine FUNCTION in doc.str

FUNCTION is identical to func, so simplify doc.str.

2023-02-17  Tom Tromey  <tom@tromey.com>

* doc/doc.str (FUNCTION): Call func.

18 months agoHoist the SECTION comment in opncls.c
Tom Tromey [Fri, 17 Feb 2023 19:12:11 +0000 (12:12 -0700)]
Hoist the SECTION comment in opncls.c

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.

18 months agoDon't use chew comments for static functions
Tom Tromey [Fri, 17 Feb 2023 19:12:11 +0000 (12:12 -0700)]
Don't use chew comments for static functions

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.

18 months agoFix formatting of long function description in chew output
Tom Tromey [Fri, 17 Feb 2023 19:12:11 +0000 (12:12 -0700)]
Fix formatting of long function description in chew output

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.

18 months agoopcodes: style m68k disassembler output
Andreas Schwab [Tue, 14 Feb 2023 17:07:19 +0000 (18:07 +0100)]
opcodes: style m68k disassembler output

18 months agogdb: revert one erroneous bool-ification change
Simon Marchi [Mon, 20 Feb 2023 16:52:40 +0000 (11:52 -0500)]
gdb: revert one erroneous bool-ification change

Commit 42c13555ff88 ("Change value::m_stack to bool") erroneously
changed a `0` to `false` in this call to read_value_memory.  This
parameter is `LONGEST bit_offset`, it should stay `0`.

Change-Id: I128df6834cf8055ec6a7051e237e379978d3d651

18 months agold/testsuite: handle Windows drive letter in a noinit test
Clément Chigot [Wed, 18 Jan 2023 13:44:39 +0000 (14:44 +0100)]
ld/testsuite: handle Windows drive letter in a noinit test

The regexp in "noinit sections (ld -r)" is skipping the file path before
the first ":". However, on Windows, a path can start with "C:". Adjust
the regexp to allow such cases.

ld/ChangeLog:

* testsuite/ld-elf/noinit-sections-2.l: Allow Windows paths
(starting with C:).

18 months agold/testsuite: adjust to Windows path separator.
Clément Chigot [Thu, 12 Jan 2023 10:02:25 +0000 (11:02 +0100)]
ld/testsuite: adjust to Windows path separator.

In some tests, the path reported on Windows will have a \ instead of a
/. This occurs when a file is concatened with the search path in
ldfile.c.:  "ld -Ltmpdir -ltext" will result into "tmpdir\libtext.a".

ld/ChangeLog:

* testsuite/ld-elf/retain5.map: Allow \ path separator.
* testsuite/ld-plugin/plugin-10.d: Likewise.
* testsuite/ld-plugin/plugin-11.d: Likewise.
* testsuite/ld-plugin/plugin-18.d: Likewise.
* testsuite/ld-plugin/plugin-19.d: Likewise.
* testsuite/ld-plugin/plugin-20.d: Likewise.
* testsuite/ld-plugin/plugin-22.d: Likewise.

18 months agogdb/doc: Consistency fixes for GDB/MI documentation
Andrew Burgess [Thu, 16 Feb 2023 09:22:43 +0000 (09:22 +0000)]
gdb/doc: Consistency fixes for GDB/MI documentation

I noticed two inconsistencies in the GDB/MI documentation, which this
commit addresses:

  1. Each MI command is introduced like this:

     @subheading The @code{-command-name} Command

     Except for a few of the tracing command, which just use:

     @subheading -command-name

     In this commit I've updated all these trace commands to use the
     more common format.

  2. Each MI command starts with a @subheading, and then the details
     of that command are split up using multiple @subsubheading
     entries.

     Except for a few commands which use @subheading for the top-level
     command, and then continue to use @subheading for each part of
     the command description.

     In this commit I've updated these to use @subsubheading where
     appropriate.

18 months agoSo the linker from producing an export data table when run with --exclude-all-symbols.
Nick Clifton [Mon, 20 Feb 2023 11:32:52 +0000 (11:32 +0000)]
So the linker from producing an export data table when run with --exclude-all-symbols.

 PR 30004 * pe-dll.c (pe_dll_build_sections): Do not build an edata section if all symbols are being excluded.

18 months ago[gdb/symtab] Trust epilogue unwind info for unknown or non-gcc producer
Tom de Vries [Mon, 20 Feb 2023 11:20:14 +0000 (12:20 +0100)]
[gdb/symtab] Trust epilogue unwind info for unknown or non-gcc producer

Currently we only trust epilogue unwind info only for gcc >= 4.5.0.

This has the effect that we don't trust epilogue unwind info for:
- unknown producers (CU without DW_AT_producer attribute)
- non-gcc producers (say, clang).

Instead, only distrust epilogue unwind info only for gcc < 4.5.0.

18 months ago[gdb/symtab] Trust epilogue unwind info for unknown producer (-g0 case)
Tom de Vries [Mon, 20 Feb 2023 11:20:14 +0000 (12:20 +0100)]
[gdb/symtab] Trust epilogue unwind info for unknown producer (-g0 case)

For a -g0 -fasynchronous-unwind-tables exec (without .debug_info but with
.eh_frame section), start using the dwarf2 unwinder instead of the
"amd64 epilogue override" unwinder, by returning true in
compunit_epilogue_unwind_valid for cust == nullptr.

This has effect both on the amd64 and i386 targets, but only add amd64
test-case gdb.base/unwind-on-each-insn-amd64-2.exp.

18 months ago[gdb/tdep] Add amd64/i386 epilogue override unwinders
Tom de Vries [Mon, 20 Feb 2023 11:20:14 +0000 (12:20 +0100)]
[gdb/tdep] Add amd64/i386 epilogue override unwinders

For amd64 the current frame-unwinders are:
...
$ gdb -q -batch -ex "set arch i386:x86-64" -ex "maint info frame-unwinders"
The target architecture is set to "i386:x86-64".
dummy                   DUMMY_FRAME
dwarf2 tailcall         TAILCALL_FRAME
inline                  INLINE_FRAME
python                  NORMAL_FRAME
amd64 epilogue          NORMAL_FRAME
dwarf2                  NORMAL_FRAME
dwarf2 signal           SIGTRAMP_FRAME
amd64 sigtramp          SIGTRAMP_FRAME
amd64 prologue          NORMAL_FRAME
...

For a -g0 -fasynchronous-unwind-tables exec (without .debug_info but with
.eh_frame section), we'd like to start using the dwarf2 unwinder instead of
the "amd64 epilogue" unwinder, by returning true in
compunit_epilogue_unwind_valid for cust == nullptr.

But we'd run into the following problem for a -g0
-fno-asynchronous-unwind-tables (without .debug_info and .eh_frame section)
exec:
- the "amd64 epilogue" unwinder would not run
  (because compunit_epilogue_unwind_valid () == true)
- the dwarf2 unwinder would also not run
  (because there's no .eh_frame info).

Fix this by:
- renaming the "amd64 epilogue" unwinder to "amd64 epilogue override", and
- adding a fallback "amd64 epilogue" after the dwarf unwinders,
while making sure that only one of the two is active.  Likewise for i386.  NFC.

For amd64, this results in this change:
...
 $ gdb -q -batch -ex "set arch i386:x86-64" -ex "maint info frame-unwinders"
 The target architecture is set to "i386:x86-64".
 dummy                   DUMMY_FRAME
 dwarf2 tailcall         TAILCALL_FRAME
 inline                  INLINE_FRAME
 python                  NORMAL_FRAME
-amd64 epilogue          NORMAL_FRAME
+amd64 epilogue override NORMAL_FRAME
 dwarf2                  NORMAL_FRAME
 dwarf2 signal           SIGTRAMP_FRAME
+amd64 epilogue          NORMAL_FRAME
 amd64 sigtramp          SIGTRAMP_FRAME
 amd64 prologue          NORMAL_FRAME
...

And for i386:
...
 $ gdb -q -batch -ex "set arch i386" -ex "maint info frame-unwinders"
 The target architecture is set to "i386".
 dummy                   DUMMY_FRAME
 dwarf2 tailcall         TAILCALL_FRAME
 iline                  INLINE_FRAME
-i386 epilogue           NORMAL_FRAME
+i386 epilogue override  NORMAL_FRAME
 dwarf2                  NORMAL_FRAME
 dwarf2 signal           SIGTRAMP_FRAME
+i386 epilogue           NORMAL_FRAME
 i386 stack tramp        NORMAL_FRAME
 i386 sigtramp           SIGTRAMP_FRAME
 i386 prologue           NORMAL_FRAME
...

18 months ago[gdb/tdep] Fix amd64/i386_stack_frame_destroyed_p
Tom de Vries [Mon, 20 Feb 2023 11:20:14 +0000 (12:20 +0100)]
[gdb/tdep] Fix amd64/i386_stack_frame_destroyed_p

The use of compunit_epilogue_unwind_valid in both amd64_stack_frame_destroyed_p
and i386_stack_frame_destroyed_p is problematic, in the sense that the
functions no longer match their documented behaviour.

Fix this by moving the use of compunit_epilogue_unwind_valid to
amd64_epilogue_frame_sniffer and i386_epilogue_frame_sniffer.  No functional
changes.

18 months ago[gdb/symtab] Factor out compunit_epilogue_unwind_valid
Tom de Vries [Mon, 20 Feb 2023 11:20:14 +0000 (12:20 +0100)]
[gdb/symtab] Factor out compunit_epilogue_unwind_valid

Factor out compunit_epilogue_unwind_valid from both
amd64_stack_frame_destroyed_p and i386_stack_frame_destroyed_p.  No functional
changes.

Also add a comment in the new function about the assumption that in absence of
producer information, epilogue unwind info is invalid.

Approved-By: Tom Tromey <tom@tromey.com>
18 months ago[gdb/testsuite] Add xfail case in gdb.python/py-record-btrace.exp
Tom de Vries [Mon, 20 Feb 2023 10:16:02 +0000 (11:16 +0100)]
[gdb/testsuite] Add xfail case in gdb.python/py-record-btrace.exp

I came across:
...
gdb) PASS: gdb.python/py-record-btrace.exp: prepare record: stepi 100
python insn = r.instruction_history^M
warning: Non-contiguous trace at instruction 1 (offset = 0x3e10).^M
(gdb) FAIL: gdb.python/py-record-btrace.exp: prepare record: python insn = r.i\
nstruction_history
...

I'm assuming it's the same root cause as for the already present XFAIL.

Fix this by recognizing above warning in the xfail regexp.

Tested on x86_64-linux, although sofar I was not able to trigger the warning
again.

Approved-By: Markus T. Metzger <markus.t.metzger@intel.com>
18 months ago[gdb/testsuite] Fix gdb.threads/schedlock.exp for gcc 4.8.5
Tom de Vries [Mon, 20 Feb 2023 10:16:02 +0000 (11:16 +0100)]
[gdb/testsuite] Fix gdb.threads/schedlock.exp for gcc 4.8.5

Since commit 9af467b8240 ("[gdb/testsuite] Fix gdb.threads/schedlock.exp on
fast cpu"), the test-case fails for gcc 4.8.5.

The problem is that for gcc 4.8.5, the commit turned a two-line loop:
...
(gdb) next
78          while (*myp > 0)
(gdb) next
81              MAYBE_CALL_SOME_FUNCTION(); (*myp) ++;
(gdb) next
78          while (*myp > 0)
...
into a three-line loop:
...
(gdb) next
83              MAYBE_CALL_SOME_FUNCTION(); (*myp) ++;
(gdb) next
84              cnt++;
(gdb) next
85            }
(gdb) next
83              MAYBE_CALL_SOME_FUNCTION(); (*myp) ++;
(gdb)
...
and the test-case doesn't expect this.

Fix this by reverting back to the original loop shape as much as possible by:
- removing the cnt++ line
- replacing "while (1)" with "while (one)", where one is a volatile variable
  set to 1.

Tested on x86_64-linux, using compilers:
- gcc 4.8.5, 7.5.0, 12.2.1
- clang 4.0.1, 13.0.1

18 months agoIn-memory nested archives
Alan Modra [Mon, 20 Feb 2023 00:44:59 +0000 (11:14 +1030)]
In-memory nested archives

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.

18 months agoAutomatic date update in version.in
GDB Administrator [Mon, 20 Feb 2023 00:00:14 +0000 (00:00 +0000)]
Automatic date update in version.in

18 months agoConvert contained_in to method
Tom Tromey [Fri, 20 Jan 2023 14:46:51 +0000 (07:46 -0700)]
Convert contained_in to method

This converts contained_in to be a method of block.

18 months agoMake block members 'private'
Tom Tromey [Fri, 20 Jan 2023 14:20:38 +0000 (07:20 -0700)]
Make block members 'private'

This changes block to make the data members 'private'.

18 months agoRemove allocate_block and allocate_global_block
Tom Tromey [Fri, 20 Jan 2023 14:16:34 +0000 (07:16 -0700)]
Remove allocate_block and allocate_global_block

This removes allocate_block and allocate_global_block in favor of
simply calling 'new'.

18 months agoHave global_block inherit from block
Tom Tromey [Fri, 20 Jan 2023 14:14:46 +0000 (07:14 -0700)]
Have global_block inherit from block

This changes global_block to inherit from block, which is what was
always intended.

18 months agoUse 'new' for block and global_block
Tom Tromey [Fri, 20 Jan 2023 14:12:02 +0000 (07:12 -0700)]
Use 'new' for block and global_block

This changes block and global_block to add initializers, and then to
use 'new' for allocation.

18 months agoFix memory leak in mdebugread.c
Tom Tromey [Fri, 20 Jan 2023 14:11:46 +0000 (07:11 -0700)]
Fix memory leak in mdebugread.c

mdebugread.c allocates blocks on the heap.  However, this is a memory
leak if the corresponding objfile is ever destroyed.

This patch changes this code to use allocate_block instead, fixing a
FIXME from 2003.

I don't know how to test this patch.

18 months agoRemove ALL_BLOCK_SYMBOLS
Tom Tromey [Fri, 20 Jan 2023 03:25:55 +0000 (20:25 -0700)]
Remove ALL_BLOCK_SYMBOLS

This removes ALL_BLOCK_SYMBOLS in favor of foreach.

18 months agoRemove ALL_BLOCK_SYMBOLS_WITH_NAME
Tom Tromey [Fri, 20 Jan 2023 03:21:10 +0000 (20:21 -0700)]
Remove ALL_BLOCK_SYMBOLS_WITH_NAME

This removes ALL_BLOCK_SYMBOLS_WITH_NAME in favor of foreach.

18 months agoConvert explicit iterator uses to foreach
Tom Tromey [Fri, 20 Jan 2023 03:14:25 +0000 (20:14 -0700)]
Convert explicit iterator uses to foreach

This converts most existing explicit uses of block_iterator to use
foreach with the range iterator instead.

18 months agoIntroduce a block iterator wrapper
Tom Tromey [Fri, 20 Jan 2023 01:44:38 +0000 (18:44 -0700)]
Introduce a block iterator wrapper

This introduces a C++-style iterator that wraps the existing
block_iterator.  It also adds a range adapter.  These will be used in
a later patch.

18 months agoCombine both styles of block iterator
Tom Tromey [Fri, 20 Jan 2023 01:41:21 +0000 (18:41 -0700)]
Combine both styles of block iterator

This merges the two styles of block iterator, having the
initialization API decide which to use based on an optional parameter.

18 months agoStore 'name' in block_iterator
Tom Tromey [Fri, 20 Jan 2023 01:36:17 +0000 (18:36 -0700)]
Store 'name' in block_iterator

This changes the block_iterator to store the 'name' that is used by
block_iter_match_next.  This avoids any problem where the name could
be passed inconsistently, and also makes the subsequent patches easier
to understand.

18 months agoConvert block_static_link to method
Tom Tromey [Fri, 20 Jan 2023 00:50:30 +0000 (17:50 -0700)]
Convert block_static_link to method

This converts block_static_link to be a method.  This was mostly
written by script.

18 months agoConvert set_block_compunit_symtab to method
Tom Tromey [Tue, 17 Jan 2023 13:39:07 +0000 (06:39 -0700)]
Convert set_block_compunit_symtab to method

This converts set_block_compunit_symtab to be a method.  This was
mostly written by script.

18 months agoConvert block_static_block and block_global_block to methods
Tom Tromey [Tue, 17 Jan 2023 01:14:47 +0000 (18:14 -0700)]
Convert block_static_block and block_global_block to methods

This converts block_static_block and block_global_block to be methods.
This was mostly written by script.  It was simpler to convert them at
the same time because they're often used near each other.

18 months agoConvert block_containing_function to method
Tom Tromey [Tue, 17 Jan 2023 00:48:19 +0000 (17:48 -0700)]
Convert block_containing_function to method

This converts block_containing_function to be a method.  This was
mostly written by script.

18 months agoConvert block_linkage_function to method
Tom Tromey [Tue, 17 Jan 2023 00:44:20 +0000 (17:44 -0700)]
Convert block_linkage_function to method

This converts block_linkage_function to be a method.  This was mostly
written by script.

18 months agoConvert more block functions to methods
Tom Tromey [Tue, 17 Jan 2023 00:39:55 +0000 (17:39 -0700)]
Convert more block functions to methods

This converts block_scope, block_set_scope, block_using, and
block_set_using to be methods.  These are all done at once to make it
easier to also convert block_initialize_namespace at the same time.
This was mostly written by script.

18 months agoConvert block_inlined_p to method
Tom Tromey [Tue, 17 Jan 2023 00:27:28 +0000 (17:27 -0700)]
Convert block_inlined_p to method

This converts block_inlined_p to be a method.  This was mostly written
by script.

18 months agoConvert block_gdbarch to method
Tom Tromey [Tue, 17 Jan 2023 00:24:16 +0000 (17:24 -0700)]
Convert block_gdbarch to method

This converts block_gdbarch to be a method.  This was mostly written
by script.

18 months agoConvert block_objfile to method
Tom Tromey [Tue, 17 Jan 2023 00:16:44 +0000 (17:16 -0700)]
Convert block_objfile to method

This converts block_objfile to be a method.  This was mostly written
by script.

18 months agoDon't allow NULL as an argument to block_global_block
Tom Tromey [Fri, 20 Jan 2023 00:22:04 +0000 (17:22 -0700)]
Don't allow NULL as an argument to block_global_block

block_global_block has special behavior when the block is NULL.
Remove this and patch up the callers instead.

18 months agoDon't allow NULL as an argument to block_static_block
Tom Tromey [Fri, 20 Jan 2023 00:20:09 +0000 (17:20 -0700)]
Don't allow NULL as an argument to block_static_block

block_static_block has special behavior when the block is NULL.
Remove this and patch up the callers instead.

18 months agoDon't allow NULL as an argument to block_using
Tom Tromey [Fri, 20 Jan 2023 00:13:22 +0000 (17:13 -0700)]
Don't allow NULL as an argument to block_using

block_using has special behavior when the block is NULL.
Remove this.  No caller seems to be affected.

18 months agoDon't allow NULL as an argument to block_scope
Tom Tromey [Fri, 20 Jan 2023 00:37:15 +0000 (17:37 -0700)]
Don't allow NULL as an argument to block_scope

block_scope has special behavior when the block is NULL.
Remove this and patch up the callers instead.

18 months agoAvoid extra allocations in block
Tom Tromey [Tue, 17 Jan 2023 00:04:39 +0000 (17:04 -0700)]
Avoid extra allocations in block

block_set_scope and block_set_using unconditionally allocate the block
namespace object.  However, this isn't truly needed, so arrange to
only allocate when it is.

18 months agoRearrange block.c to avoid a forward declaration
Tom Tromey [Tue, 17 Jan 2023 00:04:55 +0000 (17:04 -0700)]
Rearrange block.c to avoid a forward declaration

Moving block_initialize_namespace before its callers lets us avoid a
forward declaration.

18 months agoBuffer overflow in evax_bfd_print_eobj
Alan Modra [Sat, 18 Feb 2023 04:01:45 +0000 (14:31 +1030)]
Buffer overflow in evax_bfd_print_eobj

* vms-alpha.c (evax_bfd_print_eobj): Rewrite header handling,
sanity checking rec_len.  Check bfd_malloc return.