binutils-gdb.git
2 years ago[gdb] Handle pending ^C after rl_callback_read_char
Tom de Vries [Fri, 16 Sep 2022 13:53:47 +0000 (15:53 +0200)]
[gdb] Handle pending ^C after rl_callback_read_char

In completion tests in various test-cases, we've been running into these
"clearing input line" timeouts:
...
(gdb) $cmd^GPASS: gdb.gdb/unittest.exp: tab complete "$cmd"
FAIL: gdb.gdb/unittest.exp: tab complete "$cmd" (clearing input line) (timeout)
...
where $cmd == "maintenance selftest name_that_does_not_exist".

AFAIU, the following scenario happens:
- expect sends "$cmd\t"
- gdb detects the stdin event, and calls rl_callback_read_char until it
  comes to handle \t
- readline interprets the \t as completion, tries to complete, fails to do so,
  outputs a bell (^G)
- expect sees the bell, and proceeds to send ^C
- readline is still in the call to rl_callback_read_char, and stores the
  signal in _rl_caught_signal
- readline returns from the call to rl_callback_read_char, without having
  handled _rl_caught_signal
- gdb goes to wait for the next event
- expect times out waiting for "Quit", the expected reaction for ^C

Fix this by handling pending signals after each call to rl_callback_read_char.

The fix is only available for readline 8.x, if --with-system-readline provides
an older version, then the fix is disabled due to missing function
rl_check_signals.

Tested on x86_64-linux.

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=27813

2 years agoPowerPC64 pcrel got relocs against local symbols
Alan Modra [Fri, 16 Sep 2022 08:38:44 +0000 (18:08 +0930)]
PowerPC64 pcrel got relocs against local symbols

Not that anyone would want to indirect via the GOT when an address can
be loaded directly with pla, the following:

 pld 3,x@got@pcrel
x:

leads to "Internal error in md_apply_fix", because the generic parts
of assembler fixup handling convert the fx_pcrel fixup to one without
a symbol.  Stop that happening.

* config/tc-ppc.c (ppc_force_relocation): Add PLT_PCREL34 and
assorted GOT_PCREL34 relocs.

2 years agopdb sanity check block_size
Alan Modra [Thu, 15 Sep 2022 11:15:57 +0000 (20:45 +0930)]
pdb sanity check block_size

* pdb.c (pdb_get_elt_at_index): Only allow block_size to be
512, 1024, 2048, or 4096.

2 years agoRISC-V: Make g imply zmmul extension.
Nelson Chu [Fri, 16 Sep 2022 01:11:52 +0000 (09:11 +0800)]
RISC-V: Make g imply zmmul extension.

bfd/
* elfxx-riscv.c (riscv_implicit_subset): Moved entry of m after g,
so that g can imply zmmul.
gas/
* testsuite/gas/riscv/attribute-01.d: Updated.
* testsuite/gas/riscv/attribute-02.d: Likewise.
* testsuite/gas/riscv/attribute-03.d: Likewise.
* testsuite/gas/riscv/attribute-04.d: Likewise.
* testsuite/gas/riscv/attribute-05.d: Likewise.
* testsuite/gas/riscv/attribute-10.d: Likewise.
* testsuite/gas/riscv/march-imply-g.d: Likewise.
* testsuite/gas/riscv/march-imply-unsupported.d: Likewise.

2 years agoAutomatic date update in version.in
GDB Administrator [Fri, 16 Sep 2022 00:00:10 +0000 (00:00 +0000)]
Automatic date update in version.in

2 years agobfd, binutils, gas: Remove/mark unused variables
Tsukasa OI [Thu, 15 Sep 2022 04:06:09 +0000 (04:06 +0000)]
bfd, binutils, gas: Remove/mark unused variables

Clang generates a warning on unused (technically, written but not read
thereafter) variables.  By the default configuration (with "-Werror"), it
causes a build failure (unless "--disable-werror" is specified).

This commit adds ATTRIBUTE_UNUSED attribute to some of them, which means
they are *possibly* unused (can be used but no warnings occur when
unused) and removes others.

bfd/ChangeLog:

* elf32-lm32.c (lm32_elf_size_dynamic_sections): Mark unused
rgot_count variable.
* elf32-nds32.c (elf32_nds32_unify_relax_group): Remove unused
count variable.
* mmo.c (mmo_scan): Mark unused lineno variable.

binutils/ChangeLog:

* windmc.c (write_rc): Remove unused i variable.

gas/ChangeLog:

* config/tc-riscv.c (riscv_ip): Remove unused argnum variable.

ld/ChangeLog:

* pe-dll.c (generate_reloc): Remove unused bi and page_count
variables.

2 years agogprofng: fix build issues on musl
Vladimir Mezentsev [Wed, 14 Sep 2022 08:11:45 +0000 (01:11 -0700)]
gprofng: fix build issues on musl

gprofng/ChangeLog
2022-09-14  Vladimir Mezentsev  <vladimir.mezentsev@oracle.com>

PR gprofng/29477
* configure.ac: Set __MUSL_LIBC.
* configure: Rebuild.
* common/config.h.in: Rebuild.
* src/collector_module.h: Fix compiler errors because mmap64, open64,
pwrite64 are macros and getcontext() is absent on musl.
* libcollector/collector.c: Likewise.
* libcollector/hwprofile.c: Likewise.
* libcollector/iolib.c: Likewise.
* libcollector/libcol_util.c: Likewise.
* libcollector/linetrace.c: Likewise.
* libcollector/memmgr.c: Likewise.
* libcollector/profile.c: Likewise.
* libcollector/unwind.c: Likewise.
* libcollector/dispatcher.c: Likewise.
* src/Experiment.cc: Likewise.
* libcollector/collector.h: Use dlsym() because dlvsym() is not defined
on musl.
* libcollector/iotrace.c: Remove interposition of versioned functions.
* libcollector/mmaptrace.c: Likewise.
* libcollector/libcol_util.h: Fix -Wint-to-pointer-cast warnings.
* libcollector/jprofile.c: Likewise.
* libcollector/synctrace.c: Include "collector.h".
* src/Print.cc: Use get_basename() because basename() is not defined
on musl.
* common/hwcdrv.c: Fix -Wformat= warnings.

2 years agoAutomatic date update in version.in
GDB Administrator [Thu, 15 Sep 2022 00:00:13 +0000 (00:00 +0000)]
Automatic date update in version.in

2 years agoBinutils: Readelf testcase failing with clang
Rupesh Potharla [Wed, 14 Sep 2022 09:27:38 +0000 (10:27 +0100)]
Binutils: Readelf testcase failing with clang

* testsuite/binutils-all/readelf.exp (readelf_wi_test): Extend
regexps to allow for output genreated by the Clang compiler.

2 years agolooping in bfd_mach_o_fat_openr_next_archived_file
Alan Modra [Wed, 14 Sep 2022 07:27:42 +0000 (16:57 +0930)]
looping in bfd_mach_o_fat_openr_next_archived_file

mach-o.c doesn't sanity check mach-o-fat archives, making it easy for
fuzzers to create an archive with mach_o_fat_archentry headers that
point to the same offset.  bfd_mach_o_fat_openr_next_archived_file
uses the previous element offset to find its header, and thus the next
element.  If two offsets are the same, any tool reading the archive
will get stuck.  This patch rejects such archives, and any with
overlapping elements.

* mach-o.c (overlap_previous): New function.
(bfd_mach_o_fat_archive_p): Sanity check that elements do not
overlap each other or the file and archive headers.

2 years agoregen pofiles
Alan Modra [Wed, 14 Sep 2022 05:23:21 +0000 (14:53 +0930)]
regen pofiles

2 years agobfd: Stop using -Wstack-usage=262144 when built with Clang
Tsukasa OI [Sat, 10 Sep 2022 17:08:13 +0000 (17:08 +0000)]
bfd: Stop using -Wstack-usage=262144 when built with Clang

Some components of GNU Binutils will pass "-Wstack-usage=262144" when
"GCC >= 5.0" is detected.  However, Clang does not support "-Wstack-usage",
despite that related configuration part in bfd/warning.m4 handles the latest
Clang (15.0.0 as of this writing) as "GCC >= 5.0".

The option "-Wstack-usage" was ignored when the first version of Clang is
released but even this "ignoring" behavior is removed before Clang 4.0.0.
So, if we give Clang "-Wstack-usage=262144", it generates a warning, making
the build failure.

This commit checks "__clang__" macro to prevent adding the option if the
compiler is identified as Clang.

bfd/ChangeLog:

* warning.m4: Stop appending "-Wstack-usage=262144" option when
compiled with Clang.
* configure: Regenerate.

binutils/ChangeLog:

* configure: Regenerate.

gas/ChangeLog:

* configure: Regenerate.

gold/ChangeLog:

* configure: Regenerate.

gprof/ChangeLog:

* configure: Regenerate.

ld/ChangeLog:

* configure: Regenerate.

opcodes/ChangeLog:

* configure: Regenerate.

2 years agoModify ld-ctf test files to suit ARM
Alan Modra [Tue, 13 Sep 2022 22:30:07 +0000 (08:00 +0930)]
Modify ld-ctf test files to suit ARM

The "@" char starts a comment on ARM.

* testsuite/ld-ctf/diag-ctf-version-0.s: Replace @progbits with
%progbits.
* testsuite/ld-ctf/diag-ctf-version-2-unsupported-feature.s: Likewise.
* testsuite/ld-ctf/diag-ctf-version-f.s: Likewise.
* testsuite/ld-ctf/diag-cttname-invalid.s: Likewise.
* testsuite/ld-ctf/diag-cttname-null.s: Likewise.
* testsuite/ld-ctf/diag-cuname.s: Likewise.
* testsuite/ld-ctf/diag-decompression-failure.s: Likewise.
* testsuite/ld-ctf/diag-parlabel.s: Likewise.
* testsuite/ld-ctf/diag-parname.s: Likewise.
* testsuite/ld-ctf/diag-strlen-invalid.s: Likewise.
* testsuite/ld-ctf/diag-unsupported-flag.s: Likewise.
* testsuite/ld-ctf/diag-wrong-magic-number.s: Likewise.

2 years agoasan: som_set_reloc_info heap buffer overflow
Alan Modra [Mon, 12 Sep 2022 09:45:01 +0000 (19:15 +0930)]
asan: som_set_reloc_info heap buffer overflow

Also a bugfix.  The first time the section was read, the contents
didn't supply an addend.

* som.c (som_set_reloc_info): Sanity check offset.  Do process
contents after reading.  Tidy section->contents after freeing.

2 years agoubsan: som_is_space null dereference
Alan Modra [Mon, 12 Sep 2022 09:28:53 +0000 (18:58 +0930)]
ubsan: som_is_space null dereference

On objcopy of fuzzed file.

* som.c (som_write_fixups): Exit loop if space sections all
processed.

2 years agomsan: vms-alpha use-of-uninitialized-value in dst_retrieve_location
Alan Modra [Mon, 12 Sep 2022 09:20:53 +0000 (18:50 +0930)]
msan: vms-alpha use-of-uninitialized-value in dst_retrieve_location

* vms-alpha.c (dst_define_location): Init any unused entries.

2 years agoubsan: arm-dis.c index out of bounds
Alan Modra [Mon, 12 Sep 2022 08:39:24 +0000 (18:09 +0930)]
ubsan: arm-dis.c index out of bounds

We are way off in the weeds with this one, and will be printing
<UNPREDICTABLE> for S > 10.

* arm-dis.c (print_insn_cde): Wrap 'T' value.

2 years agoPR29540, R_PPC64_NONE in .rela.dyn when linking Linux vdso
Alan Modra [Sat, 10 Sep 2022 03:28:44 +0000 (12:58 +0930)]
PR29540, R_PPC64_NONE in .rela.dyn when linking Linux vdso

PR 29540
* elf64-ppc.c (allocate_dynrelocs): Don't alloc space for relocs
against discarded sections.
(ppc64_elf_size_dynamic_sections): Use standard test for discarded
sections.
* elf32-ppc.c (allocate_dynrelocs): Don't alloc space for relocs
against discarded sections.
(ppc_elf_size_dynamic_sections): Use standard test for discarded
sections.

2 years agoAutomatic date update in version.in
GDB Administrator [Wed, 14 Sep 2022 00:00:17 +0000 (00:00 +0000)]
Automatic date update in version.in

2 years agoobjdump: '-S' should trigger search for separate debuginfo.
Aaron Merey [Mon, 12 Sep 2022 22:57:38 +0000 (18:57 -0400)]
objdump: '-S' should trigger search for separate debuginfo.

Add with_source_code to the command line options that trigger
might_need_separate_debug_info and dump_any_debugging.  This helps
'objdump -S' download missing files via debuginfod without the need for
specifying extra command line options like '-L'.

2 years agogdb/testsuite: Update gdb.base/so-impl-ld.exp
Bruno Larsen [Wed, 20 Jul 2022 19:44:37 +0000 (16:44 -0300)]
gdb/testsuite: Update gdb.base/so-impl-ld.exp

gdb.base/so-impl-ld.exp was setup assuming that the compiler would add
epilogue information and that GDB would stop in the } line.  This would
make clang tests fail like so:

 step^M
 solib_main (arg=10000) at ../../../common/git-repos/binutils-gdb/gdb/testsuite/gdb.base/solib1.c:7^M
 7|__  return arg*arg;|__|___/* HERE */^M
 (gdb) PASS: gdb.base/so-impl-ld.exp: step into solib call
 next^M
 main () at ../../../common/git-repos/binutils-gdb/gdb/testsuite/gdb.base/so-impl-ld.c:22^M
 22|_  return 0;^M
 (gdb) FAIL: gdb.base/so-impl-ld.exp: step in solib call
 next^M
 0x00007ffff7cef560 in __libc_start_call_main () from /lib64/libc.so.6^M
 (gdb) FAIL: gdb.base/so-impl-ld.exp: step out of solib call

This patch changes it so solib_main has 2 lines where GDB can stop
regardless of compiler choices, and updates the exp file to
generically deal with unknown number of steps until leaving that
function.

2 years agogdb/testsuite: introduce gdb_step_until
Bruno Larsen [Wed, 20 Jul 2022 19:44:26 +0000 (16:44 -0300)]
gdb/testsuite: introduce gdb_step_until

Currently, GDB's testsuite uses a set amount of step commands to exit
functions. This is a problem if a compiler emits different epilogue
information from gcc, or emits no epilogue information at all. It was
most noticeable if Clang was used to test GDB.

To fix this unreliability, this commit introduces a new proc that will
step the inferior until it is stopped at a line that matches the given
regexp, or until it steps too many times - defined as an optional
argument. If the line is found, it shows up as a single PASS in the
test, and if the line is not found, a single FAIL is emitted.

This patch only introduces this proc, but does not add it to any
existing tests, these will be introduced in the following commit.

2 years agoexplicitly test for stderr in gdb.base/dprintf.exp
Bruno Larsen [Wed, 20 Jul 2022 19:44:36 +0000 (16:44 -0300)]
explicitly test for stderr in gdb.base/dprintf.exp

Not all compilers add stderr debug information when compiling a
program. Clang, for instance, prefers to add nothing from standard
libraries and let an external debug package have this information.
Because of this, gdb.base/dprintf.exp was failing when GDB attempted to
use dprintf as a call to fprintf(stderrr, ...), like this:

 (gdb) PASS: gdb.base/dprintf.exp: call: fprintf: set dprintf style to call
 continue
 Continuing.
 kickoff 1234
 also to stderr 1234
 'stderr' has unknown type; cast it to its declared type
 (gdb) FAIL: gdb.base/dprintf.exp: call: fprintf: 1st dprintf (timeout)

To avoid this false positive, we explicitly test to see if
the compiler has added information about stderr at all, and abort
testing dprintf as an fprintf call if it is unavailable.

2 years agoAdd pdb archive format
Mark Harmstone [Tue, 13 Sep 2022 09:31:05 +0000 (10:31 +0100)]
Add pdb archive format

Resubmitted with changes in
https://sourceware.org/pipermail/binutils/2022-September/122791.html
made.

2 years agogdb/csky rm csky_print_registers_info
Jiangshuai Li [Tue, 13 Sep 2022 06:24:39 +0000 (14:24 +0800)]
gdb/csky rm csky_print_registers_info

The reason for implementing this interface is that we want to print
GPR, PC, EPC, PSR and EPSR when the "info register" command
is executed.

A prev patch has added PC, EPC, PSR and EPSR to reggroup
general_group, the purpose has been achieved, so this function is
no longer required.

2 years agogdb/csky rm csky_memory_insert/remove_breakpoint
Jiangshuai Li [Tue, 13 Sep 2022 06:21:55 +0000 (14:21 +0800)]
gdb/csky rm csky_memory_insert/remove_breakpoint

Software breakpoints are inserted or removed by the gdb stub via
remote protocol, these two functions are no longer needed.

2 years agogdb/csky add unwinder for long branch cases
Jiangshuai Li [Tue, 13 Sep 2022 06:19:26 +0000 (14:19 +0800)]
gdb/csky add unwinder for long branch cases

There are two sequences of instructions for long branch:
1. jmpi [pc+4]    //insn code: 0xeac00001
   .long addr

2. lrw t1, [pc+8] //insn code: 0xea8d0002
   jmp t1         //insn code: 0x7834
   nop            //insn code: 0x6c03
   .long addr

2 years agogdbserver/csky add csky gdbserver support
Jiangshuai Li [Tue, 13 Sep 2022 03:20:54 +0000 (11:20 +0800)]
gdbserver/csky add csky gdbserver support

Add new files:
  gdb/arch/csky.c
  gdb/arch/csky.h
  gdb/features/cskyv2-linux.c
  gdbserver/linux-csky-low.cc

1. In gdb/arch/csky.c file, add function "csky_create_target_description()"
for csky_target::low_arch_setup(). later, it can be used for csky native gdb.

2. In gdb/features/cskyv2-linux.c file, create target_tdesc for csky, include
gprs, pc, hi, lo, float, vector and float control registers.

3. In gdbserver/linux-csky-low.cc file, using PTRACE_GET/SET_RGESET to
get/set registers. The main data structures in asm/ptrace.h are:
struct pt_regs {
    unsigned long   tls;
    unsigned long   lr;
    unsigned long   pc;
    unsigned long   sr;
    unsigned long   usp;

    /*
     * a0, a1, a2, a3:
     * r0, r1, r2, r3
     */
    unsigned long   orig_a0;
    unsigned long   a0;
    unsigned long   a1;
    unsigned long   a2;
    unsigned long   a3;

    /*
     * r4 ~ r13
     */
    unsigned long   regs[10];

    /* r16 ~ r30 */
    unsigned long   exregs[15];

    unsigned long   rhi;
    unsigned long   rlo;
    unsigned long   dcsr;
};

struct user_fp {
    unsigned long   vr[96];
    unsigned long   fcr;
    unsigned long   fesr;
    unsigned long   fid;
    unsigned long   reserved;
};

2 years agoAutomatic date update in version.in
GDB Administrator [Tue, 13 Sep 2022 00:00:19 +0000 (00:00 +0000)]
Automatic date update in version.in

2 years agoUse checked_static_cast in more places
Tom Tromey [Wed, 17 Aug 2022 17:47:17 +0000 (11:47 -0600)]
Use checked_static_cast in more places

I went through all the uses of dynamic_cast<> in gdb, looking for ones
that could be replaced with checked_static_cast.  This patch is the
result.  Regression tested on x86-64 Fedora 34.

2 years agoppc: Document the -mfuture and -Mfuture options and make them usable
Peter Bergner [Mon, 12 Sep 2022 19:56:20 +0000 (14:56 -0500)]
ppc: Document the -mfuture and -Mfuture options and make them usable

The -mfuture and -Mfuture options which are used for adding potential
new ISA instructions were not documented.  They also lacked a bitmask
so new instructions could not be enabled by those options.  Fixed.

binutils/
* doc/binutils.texi: Document -Mfuture.

gas/
* config/tc-ppc.c: Document -mfuture
* doc/c-ppc.texi: Likewise.

include/
* opcode/ppc.h (PPC_OPCODE_FUTURE): Define.

opcodes/
* ppc-dis.c (ppc_opts) <future>: Use it.
* ppc-opc.c (FUTURE): Define.

2 years agoadd xfails to gdb.base/complex-parts.exp when testing with clang
Bruno Larsen [Wed, 20 Jul 2022 19:44:34 +0000 (16:44 -0300)]
add xfails to gdb.base/complex-parts.exp when testing with clang

clang doesn't add encoding to the name of complex variables, only says
that the type name is complex, making the relevant tests fail.
This patch adds the xfails to the tests that expect the variable name to
include it.

2 years agoFix gdb.base/call-ar-st to work with Clang
Bruno Larsen [Wed, 20 Jul 2022 19:44:33 +0000 (16:44 -0300)]
Fix gdb.base/call-ar-st to work with Clang

When running gdb.base/call-ar-st.exp against Clang, we see one FAIL,
like so:

 print_all_arrays (array_i=<main.integer_array>, array_c=<main.char_array> "ZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZa
 ZaZaZaZaZaZaZaZaZaZaZaZa", array_f=<main.float_array>, array_d=<main.double_array>) at ../../../src/gdb/testsuite/gdb.base/call-ar-st.c:274
 274       print_int_array(array_i);     /* -step1- */
 (gdb) FAIL: gdb.base/call-ar-st.exp: step inside print_all_arrays

With GCC we instead see:

 print_all_arrays (array_i=<integer_array>, array_c=<char_array> "ZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZa", array_f=<float_array>, array_d=<double_array>) at /home/pedro/gdb/build/gdb/testsuite/../../../src/gdb/testsuite/gdb.base/call-ar-st.c:274
 274       print_int_array(array_i);     /* -step1- */
 (gdb) PASS: gdb.base/call-ar-st.exp: step inside print_all_arrays

The difference is that with Clang we get:

 array_i=<main.integer_array>, ...

instead of

 array_i = <integer_array>, ...

These symbols are local static variables, and "main" is the name of
the function they are defined in.  GCC instead appends a sequence
number to the linkage name:

 $ nm -A call-ar-st.gcc | grep integer_
 call-ar-st/call-ar-st:00000000000061a0 b integer_array.3968

 $ nm -A call-ar-st.clang | grep integer_
 call-ar-st:00000000004061a0 b main.integer_array

This commit changes the testcase to accept both outputs, as they are
functionally identical.

Co-Authored-By: Pedro Alves <pedro@palves.net>
Change-Id: Iaf2ccdb9d5996e0268ed12f595a6e04b368bfcb4

2 years agofix gdb.base/access-mem-running.exp for clang testing
Bruno Larsen [Wed, 20 Jul 2022 19:44:32 +0000 (16:44 -0300)]
fix gdb.base/access-mem-running.exp for clang testing

Clang was optimizing global_var away because it was not being used
anywhere. this commit fixes that by adding the attribute used it.

2 years agoupdate gdb.base/info-program.exp to not fail with clang
Bruno Larsen [Wed, 20 Jul 2022 19:44:31 +0000 (16:44 -0300)]
update gdb.base/info-program.exp to not fail with clang

The test specifically mentions that it doesn't care where the program
stops, however it was still testing for a specific location.  The clang
compiler emits different line information for epilogue, so GDB reports a
different stopping location, depending on the used compiler.  With this
patch the test works even with clang.

2 years agogdb/testsuite: change gdb.base/nodebug.exp to not fail with clang
Bruno Larsen [Wed, 20 Jul 2022 19:44:30 +0000 (16:44 -0300)]
gdb/testsuite: change gdb.base/nodebug.exp to not fail with clang

Clang organizes the variables differently to gcc in the original version
of this code, leading to the following differences when testing
p (int*) &dataglobal + 1

gcc:
$16 = (int *) 0x404034 <datalocal>

clang:
$16 = (int *) 0x404034 <dataglobal8>

However, since the important part of this test doesn't seem to be which
symbol is linked, but rather if GDB is correctly increasing the
address. This test was changed to actually measure address changes,
instead of assuming the ordering and naming of symbols.

Co-Authored-By: Andrew Burgess <aburgess@redhat.com>
2 years agold: pe: Apply review suggestions on the existing exports/imports arrays
Martin Storsjö [Tue, 6 Sep 2022 15:39:07 +0000 (18:39 +0300)]
ld: pe: Apply review suggestions on the existing exports/imports arrays

Use a separate explicit max_exports/imports field, instead of
deducing it from the number of allocated elements. Use a named
constant for the incremental growth of the array.

Use bool instead of int for boolean values.

Remove an unnecessary if statement/scope in the def_file_free
function.

Add more verbose comments about parameters, and about insertion
into an array of structs.

Generally use unsigned integers for all array indices and sizes.
The num_exports/imports fields are kept as is as signed integers,
since changing them to unsigned would require a disproportionate
amount of changes ti pe-dll.c to avoid comparisons between signed
and unsigned.

Simply use xrealloc instead of a check and xmalloc/xrealloc;
xrealloc can take NULL as the first parameter (and does a similar
check internally). (This wasn't requested in review though,
but noticed while working on the code.)

2 years agold: pe: Improve performance of object file exclude symbol directives
Martin Storsjö [Fri, 2 Sep 2022 09:22:29 +0000 (12:22 +0300)]
ld: pe: Improve performance of object file exclude symbol directives

Store the list of excluded symbols in a sorted list, speeding up
checking for duplicates when inserting new entries.

This is done in the same way as is done for exports and imports
(while the previous implementation was done with a linked list,
based on the implementation for aligncomm).

When linking object files with excluded symbols, there can potentially
be very large numbers of excluded symbols (just like builds with
exports can have a large number of exported symbols).

This improves the link performance somewhat, when linking with large
numbers of excluded symbols.

The later actual use of the excluded symbols within pe-dll.c
handles them via an unordered linked list still, though.

2 years ago[gdb] Fix abort in selftest run_on_main_thread with ^C
Tom de Vries [Mon, 12 Sep 2022 08:05:18 +0000 (10:05 +0200)]
[gdb] Fix abort in selftest run_on_main_thread with ^C

When running selftest run_on_main_thread and pressing ^C, we can run into:
...
Running selftest run_on_main_thread.
terminate called without an active exception

Fatal signal: Aborted
...

The selftest function looks like this:
...
static void
run_tests ()
{
  std::thread thread;

  done = false;

  {
    gdb::block_signals blocker;

    thread = std::thread (set_done);
  }

  while (!done && gdb_do_one_event () >= 0)
    ;

  /* Actually the test will just hang, but we want to test
     something.  */
  SELF_CHECK (done);

  thread.join ();
}
...

The error message we see is due to the destructor of thread being called while
thread is joinable.

This is supposed to be taken care of by thread.join (), but the ^C prevents
that one from being called, while the destructor is still called.

Fix this by ensuring thread.join () is called (if indeed required) before the
destructor using SCOPE_EXIT.

Tested on x86_64-linux.

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29549

2 years ago[gdb/symtab] Support .gdb_index section with TUs in .debug_info
Tom de Vries [Mon, 12 Sep 2022 08:05:18 +0000 (10:05 +0200)]
[gdb/symtab] Support .gdb_index section with TUs in .debug_info

The .gdb_index variant of commit d878bb39e41 ("[gdb/symtab] Support
.debug_names section with TUs in .debug_info").

Tested on x86_64-linux.

2 years ago[gdb/testsuite] Fix gdb.dwarf2/dw2-dir-file-name.exp for ppc64le
Tom de Vries [Mon, 12 Sep 2022 08:05:18 +0000 (10:05 +0200)]
[gdb/testsuite] Fix gdb.dwarf2/dw2-dir-file-name.exp for ppc64le

In commit cd919f5533c ("[gdb/testsuite] Fix
gdb.dwarf2/dw2-dir-file-name.exp"), I made gdb.dwarf2/dw2-dir-file-name.exp
independent of prologue analyzers, using this change:
...
-       gdb_breakpoint $func
+       gdb_breakpoint *$func
...

That however caused a regression on ppc64le.  For PowerPC, as described in the
ELFv2 ABI, a function can have a global and local entry point.

Setting a breakpoint on *$func effectively creates a breakpoint for the global
entry point, so if the function is entered through the local entry point, the
breakpoint doesn't trigger.

Fix this by reverting commit cd919f5533c, and setting the breakpoint on
${func}_label instead.

Tested on x86_64-linux and ppc64le-linux.

2 years ago[gdb/testsuite] Fix gdb.dwarf2/dw2-dir-file-name.exp with clang
Tom de Vries [Mon, 12 Sep 2022 08:05:18 +0000 (10:05 +0200)]
[gdb/testsuite] Fix gdb.dwarf2/dw2-dir-file-name.exp with clang

When running test-case gdb.dwarf2/dw2-dir-file-name.exp with clang, we run
into:
...
(gdb) break *compdir_missing__ldir_missing__file_basename^M
Breakpoint 2 at 0x400580^M
(gdb) continue^M
Continuing.^M
^M
Breakpoint 2, 0x0000000000400580 in \
  compdir_missing.ldir_missing.file_basename ()^M
(gdb) FAIL: gdb.dwarf2/dw2-dir-file-name.exp: \
  compdir_missing__ldir_missing__file_basename: continue to breakpoint: \
  compdir_missing__ldir_missing__file_basename
...

The problem is that the test-case uses labels outside functions, which is know
to cause problem with clang, as documented in the comment for proc
function_range.

Fix this by using get_func_info instead.

Tested on x86_64-linux, with both gcc 7.5.0 and clang 13.0.0.

2 years agox86: avoid i386_dis_printf()'s staging area for a fair part of output
Jan Beulich [Mon, 12 Sep 2022 06:19:55 +0000 (08:19 +0200)]
x86: avoid i386_dis_printf()'s staging area for a fair part of output

While PR binutils/29483 has now been addressed differently, this
originally proposed change still has its merits: Avoiding vsnprintf()
for typically far more than half of the overall output results in a 2-3%
performance gain in my testing (with debug builds of objdump, libbfd,
and libopcodes).

With that part of output no longer using staging_area[], the array also
doesn't need to be quite as large anymore (the largest presently used
size is 27, from "64-bit address is disabled").

While limiting the scope of "res" it became apparent that
- no caller cares about the function's return value,
- the comment about the return value was wrong,
- a particular positive return value would have been meaningless to the
  caller.
Therefore convert the function to return "void" at the same time.

2 years agoRISC-V: PR28509, the default visibility symbol cannot be referenced by R_RISCV_JAL.
Nelson Chu [Mon, 12 Sep 2022 01:26:52 +0000 (09:26 +0800)]
RISC-V: PR28509, the default visibility symbol cannot be referenced by R_RISCV_JAL.

When generating the shared object, the default visibility symbols may bind
externally, which means they will be exported to the dynamic symbol table,
and are preemptible by default.  These symbols cannot be referenced by the
non-pic R_RISCV_JAL and R_RISCV_RVC_JUMP.  However, consider that linker
may relax the R_RISCV_CALL relocations to R_RISCV_JAL or R_RISCV_RVC_JUMP,
if these relocations are relocated to the plt entries, then we won't report
error for them.  Perhaps we also need the similar checks for the
R_RISCV_BRANCH and R_RISCV_RVC_BRANCH relocations.

After applying this patch, and revert the following glibc patch,
riscv: Fix incorrect jal with HIDDEN_JUMPTARGET
https://sourceware.org/git/?p=glibc.git;a=commit;h=68389203832ab39dd0dbaabbc4059e7fff51c29b

I get the expected errors as follows,
ld: relocation R_RISCV_RVC_JUMP against `__sigsetjmp' which may bind externally can not be used when making a shared object; recompile with -fPIC
ld: relocation R_RISCV_JAL against `exit' which may bind externally can not be used when making a shared object; recompile with -fPIC

Besides, we also have similar changes for libgcc,
RISC-V: jal cannot refer to a default visibility symbol for shared object
https://github.com/gcc-mirror/gcc/commit/45116f342057b7facecd3d05c2091ce3a77eda59

bfd/
pr 28509
* elfnn-riscv.c (riscv_elf_relocate_section): Report errors when
makeing a shard object, and the referenced symbols of R_RISCV_JAL
relocations are default visibility.  Besides, we should handle most
of the cases here, so don't need the unresolvable check later for
R_RISCV_JAL and R_RISCV_RVC_JUMP.
ld/
pr 28509
* testsuite/ld-riscv-elf/ld-riscv-elf.exp: Updated.
* testsuite/ld-riscv-elf/lib-nopic-01a.s: Removed.
* testsuite/ld-riscv-elf/lib-nopic-01b.d: Likewise.
* testsuite/ld-riscv-elf/lib-nopic-01b.s: Likewise.
* testsuite/ld-riscv-elf/shared-lib-nopic-01.d: New testcase.
* testsuite/ld-riscv-elf/shared-lib-nopic-01.s: Likewise.
* testsuite/ld-riscv-elf/shared-lib-nopic-02.d: Likewise.
* testsuite/ld-riscv-elf/shared-lib-nopic-02.s: Likewise.
* testsuite/ld-riscv-elf/shared-lib-nopic-03.d: Likewise.
* testsuite/ld-riscv-elf/shared-lib-nopic-03.s: Likewise.
* testsuite/ld-riscv-elf/shared-lib-nopic-04.d: Likewise.
* testsuite/ld-riscv-elf/shared-lib-nopic-04.s: Likewise.

2 years agoAutomatic date update in version.in
GDB Administrator [Mon, 12 Sep 2022 00:00:10 +0000 (00:00 +0000)]
Automatic date update in version.in

2 years ago[gdb/symtab] Fix handling of DW_TAG_unspecified_type
Tom de Vries [Sun, 11 Sep 2022 07:01:03 +0000 (09:01 +0200)]
[gdb/symtab] Fix handling of DW_TAG_unspecified_type

Currently, the test-case contained in this patch fails:
...
(gdb) p (int) foo ()^M
Invalid cast.^M
(gdb) FAIL: gdb.dwarf2/dw2-unspecified-type.exp: p (int) foo ()
...
because DW_TAG_unspecified_type is translated as void.

There's some code in read_unspecified_type that marks the type as stub, but
that's only active for ada:
...
  if (cu->lang () == language_ada)
    type->set_is_stub (true);
...

Fix this by:
- marking the type as a stub for all languages, and
- handling the stub return type case in call_function_by_hand_dummy.

Tested on x86_64-linux.

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29558

2 years agoAutomatic date update in version.in
GDB Administrator [Sun, 11 Sep 2022 00:00:12 +0000 (00:00 +0000)]
Automatic date update in version.in

2 years agoRe: PR29466, APP/NO_APP with linefile
Alan Modra [Fri, 9 Sep 2022 22:00:57 +0000 (07:30 +0930)]
Re: PR29466, APP/NO_APP with linefile

It looks like I copied the SIZE init across from
binutils/testsuite/config/default.exp without some necessary editing.

* testsuite/config/default.exp (SIZE): Adjust relative path.

2 years agoAutomatic date update in version.in
GDB Administrator [Sat, 10 Sep 2022 00:00:07 +0000 (00:00 +0000)]
Automatic date update in version.in

2 years agoSupport debuginfo files with empty group sections.
Nick Clifton [Fri, 9 Sep 2022 11:01:08 +0000 (12:01 +0100)]
Support debuginfo files with empty group sections.

PR 29532
bfd * elf.c (setup_group): Do not return false if there is no group
information available.

bionutils* objcopy.c (setup_section): Leave group sections intact when
creating separate debuginfo files.

2 years agoRISC-V: Fix vector CSR requirements
Tsukasa OI [Mon, 5 Sep 2022 07:54:51 +0000 (07:54 +0000)]
RISC-V: Fix vector CSR requirements

Vector CSRs are also required on smaller vector subsets.

Not only that the most of vector CSRs are general purpose (and must be
accessible for every vector subsets), current minimum vector subset 'Zve32x'
requires fixed point arithmetic, making remaining non-general purpose
(fixed point arithmetic only) CSRs mandatory for such subsets.

So, those CSRs must be accessible from 'Zve32x', not just from 'V'.
This commit fixes this issue which caused CSR accessibility warnings.

gas/ChangeLog:

* config/tc-riscv.c (riscv_csr_address): Change vector CSR
requirement from 'V' to 'Zve32x'.
* testsuite/gas/riscv/csr-version-1p9p1.l: Change vector CSR
requirement from 'V' to 'Zve32x'.
* testsuite/gas/riscv/csr-version-1p10.l: Likewise.
* testsuite/gas/riscv/csr-version-1p11.l: Likewise.
* testsuite/gas/riscv/csr-version-1p12.l: Likewise.

2 years agoAutomatic date update in version.in
GDB Administrator [Fri, 9 Sep 2022 00:00:26 +0000 (00:00 +0000)]
Automatic date update in version.in

2 years agoFix hardware watchpoint check in test gdb.base/watchpoint-reuse-slot.exp
Carl Love [Thu, 8 Sep 2022 15:13:03 +0000 (15:13 +0000)]
Fix hardware watchpoint check in test gdb.base/watchpoint-reuse-slot.exp

This test generates 48 failures on Power 9 when testing with HW watchpoints
enabled.  Note HW watchpoint support is disabled on Power 9 due to a HW bug.
The skip_hw_watchpoint_tests proc must be used to correctly determine
if the processor supports HW watchpoints.

This patch replaces the [target_info exists gdb,no_hardware_watchpoints]
with the skip_hw_watchpoint_tests check.

This patch was tested on Power 9, Power 10 and X86-64 with no regressions.

2 years agoGas generated incorrect debug info (top-level DW_TAG_unspecified_type DIE)
Nick Clifton [Thu, 8 Sep 2022 11:43:33 +0000 (12:43 +0100)]
Gas generated incorrect debug info (top-level DW_TAG_unspecified_type DIE)

PR 29559
* dwarf2dbg.c (out_debug_info): Place DW_TAG_unspecified_type at
the end of the list of children, not at the start of the CU
information.
* testsuite/gas/elf/dwarf-3-func.d: Update expected output.
* testsuite/gas/elf/dwarf-5-func-global.d: Likewise.
* testsuite/gas/elf/dwarf-5-func-local.d: Likewise.
* testsuite/gas/elf/dwarf-5-func.d: Likewise.

2 years agogdbsupport: Fix config.status dependency
Tsukasa OI [Thu, 8 Sep 2022 02:54:15 +0000 (02:54 +0000)]
gdbsupport: Fix config.status dependency

Commit 171fba11ab27 ("Make GDBserver abort on internal error in development mode")
created a new substitution CONFIG_STATUS_DEPENDENCIES but this is used by
Makefile.in (which is not regenerated by that commit).  After regenerating
it, it is found that CONFIG_STATUS_DEPENDENCIES value is not valid, making
gdbsupport fail to build.

Since the CONFIG_STATUS_DEPENDENCIES value is used in the Makefile, macro
substitution must have a Makefile format but commit 171fba11ab27 used shell
format "$srcdir/../bfd/development.sh".

This commit fixes this issue by substituting "$srcdir" (shell format) to
"$(srcdir)" (Makefile format).  It preserves the dependency as Pedro
intended and fixes the build problem.

It also regenerates corresponding files with the maintainer mode.

gdbsupport/ChangeLog:

* configure.ac: Fix config.status dependency.
* Makefile.in: Regenerate.
* configure: Regenerate.

2 years agoMaintainer mode: wrong gettext version?
Nick Clifton [Thu, 8 Sep 2022 09:03:04 +0000 (10:03 +0100)]
Maintainer mode: wrong gettext version?

* README-maintainer-mode: Update minimum version  of gettext
required.

2 years agoi686-w64-mingw32-objdump -WL returns incorrect file paths
Nick Clifton [Thu, 8 Sep 2022 08:56:39 +0000 (09:56 +0100)]
i686-w64-mingw32-objdump -WL returns incorrect file paths

PR 29523
* dwarf.c (display_debug_lines_decoded): Correctly handle DWARF-5
directory and filename tables.

2 years agoAutomatic date update in version.in
GDB Administrator [Thu, 8 Sep 2022 00:00:07 +0000 (00:00 +0000)]
Automatic date update in version.in

2 years ago[gdb/testsuite] xfail gdb.ada/O2_float_param.exp for aarch64 and gcc 7.5.0
Tom de Vries [Wed, 7 Sep 2022 17:14:17 +0000 (19:14 +0200)]
[gdb/testsuite] xfail gdb.ada/O2_float_param.exp for aarch64 and gcc 7.5.0

On aarch64-linux, with gcc 7.5.0, we run into:
...
 (gdb) frame^M
 #0  callee.increment (val=99.0, val@entry=9.18340949e-41, msg=...) at \
   callee.adb:21^M
 21            if Val > 200.0 then^M
 (gdb) FAIL: gdb.ada/O2_float_param.exp: scenario=all: frame
...

The problem is a GCC bug, filed as "PR98148 - [AArch64] Wrong location
expression for function entry values" (
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98148 ).

Xfail the test for aarch64 and gcc 7.

Tested on x86_64-linux and aarch64-linux.

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29418

2 years ago[gdb/testsuite] Fix gdb.ada/access_tagged_param.exp for aarch64
Tom de Vries [Wed, 7 Sep 2022 09:29:11 +0000 (11:29 +0200)]
[gdb/testsuite] Fix gdb.ada/access_tagged_param.exp for aarch64

On aarch64-linux, I run into:
...
Breakpoint 2, pck.inspect (obj=0x430eb0 \
  <system.pool_global.global_pool_object>, <objL>=0) at pck.adb:17^M
17         procedure Inspect (Obj: access Top_T'Class) is^M
(gdb) FAIL: gdb.ada/access_tagged_param.exp: continue
...
while on x86_64-linux, I see:
...
Breakpoint 2, pck.inspect (obj=0x62b2a0, <objL>=2) at pck.adb:19^M
19            null;^M
(gdb) PASS: gdb.ada/access_tagged_param.exp: continue
...
Note the different line numbers, 17 vs 19.

The difference comes from the gdbarch_skip_prologue implementation.

The amd64_skip_prologue implementation doesn't use gcc line numbers, and falls
back to the architecture-specific prologue analyzer, which correctly skips
past the prologue, to address 0x4022f7:
...
00000000004022ec <pck__inspect>:
  4022ec:       55                      push   %rbp
  4022ed:       48 89 e5                mov    %rsp,%rbp
  4022f0:       48 89 7d f8             mov    %rdi,-0x8(%rbp)
  4022f4:       89 75 f4                mov    %esi,-0xc(%rbp)
  4022f7:       90                      nop
  4022f8:       90                      nop
  4022f9:       5d                      pop    %rbp
  4022fa:       c3                      ret
...

The aarch64_skip_prologue implementation does use gcc line numbers, which are:
...
File name                    Line number    Starting address    View    Stmt
pck.adb                               17            0x402580               x
pck.adb                               17            0x402580       1       x
pck.adb                               19            0x40258c               x
pck.adb                               20            0x402590               x
...
and which are represented like this internally in gdb:
...
INDEX  LINE   ADDRESS            IS-STMT PROLOGUE-END
0      17     0x0000000000402580 Y
1      17     0x0000000000402580 Y
2      19     0x000000000040258c Y
3      20     0x0000000000402590 Y
4      END    0x00000000004025a0 Y
...

The second entry is interpreted as end-of-prologue, so 0x402580 is used, while
the actual end of the prologue is at 0x40258c:
...
0000000000402580 <pck__inspect>:
  402580:       d10043ff        sub     sp, sp, #0x10
  402584:       f90007e0        str     x0, [sp, #8]
  402588:       b90007e1        str     w1, [sp, #4]
  40258c:       d503201f        nop
  402590:       d503201f        nop
  402594:       910043ff        add     sp, sp, #0x10
  402598:       d65f03c0        ret
  40259c:       d503201f        nop
...

Note that the architecture-specific prologue analyzer would have gotten this
right:
...
(gdb) p /x aarch64_analyze_prologue (gdbarch, pc, pc + 128, 0)
$2 = 0x40258c
...

Fix the FAIL by making the test-case more robust against problems in prologue
skipping, by setting the breakpoint on line 19 instead.

Likewise in a few similar test-cases.

Tested on x86_64-linux and aarch64-linux.

2 years agoFix endianness handling for arm record self tests
Luis Machado [Wed, 3 Aug 2022 23:00:26 +0000 (00:00 +0100)]
Fix endianness handling for arm record self tests

v2:

- Add 32-bit Arm instruction selftest
- Refactored abstract memory reader into abstract instruction reader
- Adjusted code to use templated type and to use host endianness as
  opposed to target endianness.

The arm record tests handle 16-bit and 32-bit thumb instructions, but the
code is laid out in a way that handles the 32-bit thumb instructions as
two 16-bit parts.

This is fine, but it is prone to host-endianness issues given how the two
16-bit parts are stored and how they are accessed later on. Arm is
little-endian by default, so running this test with a GDB built with
--enable-targets=all and on a big endian host will run into the following:

Running selftest arm-record.
Process record and replay target doesn't support syscall number -2036195
Process record does not support instruction 0x7f70ee1d at address 0x0.
Self test failed: self-test failed at ../../binutils-gdb/gdb/arm-tdep.c:14482

It turns out the abstract memory reader class is more generic than it needs to
be, and we can simplify the code a bit by assuming we have a simple instruction
reader that only reads up to 4 bytes, which is the length of a 32-bit
instruction.

Instead of returning a bool, we return instead the instruction that has been
read. This way we avoid having to deal with the endianness conversion, and use
the host endianness instead. The Arm selftests can be executed on non-Arm
hosts.

While at it, Tom suggested adding a 32-bit Arm instruction selftest to increase
the coverage of the selftests.

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29432

Co-authored-by: Tom de Vries <tdevries@suse.de>
2 years ago[gdb/testsuite] Use prototype to call libc functions
Tom de Vries [Wed, 7 Sep 2022 07:59:12 +0000 (09:59 +0200)]
[gdb/testsuite] Use prototype to call libc functions

On openSUSE Tumbleweed (using glibc 2.36), I run into:
...
(gdb) print /d (int) munmap (4198400, 4096)^M
Invalid cast.^M
(gdb) FAIL: gdb.base/break-main-file-remove-fail.exp: cmdline: \
  get integer valueof "(int) munmap (4198400, 4096)"
...

The problem is that after starting the executable, the symbol has type
"void (*) (void)":
...
(gdb) p munmap
$1 = {<text variable, no debug info>} 0x401030 <munmap@plt>
(gdb) start
  ...
(gdb) p munmap
$2 = {void (void)} 0x7ffff7feb9a0 <__GI_munmap>
...
which causes the "Invalid cast" error.

Looking at the debug info for glibc for symbol __GI_munmap:
...
 <0><189683>: Abbrev Number: 1 (DW_TAG_compile_unit)
    <189691>   DW_AT_name        : ../sysdeps/unix/syscall-template.S
    <189699>   DW_AT_producer    : GNU AS 2.39.0
<1><1896ae>: Abbrev Number: 2 (DW_TAG_subprogram)
    <1896af>   DW_AT_name        : __GI___munmap
    <1896b3>   DW_AT_external    : 1
    <1896b4>   DW_AT_low_pc      : 0x10cad0
    <1896bc>   DW_AT_high_pc     : 37
...
that's probably caused by this bit (or similar bits for other munmap aliases).

This is fixed in gas on trunk by commit 5578fbf672e ("GAS: Add a return type
tag to DWARF DIEs generated for function symbols").

Work around this (for say gas 2.39) by explicitly specifying the prototype for
munmap.

Likewise for getpid in a couple of other test-cases.

Tested on x86_64-linux.

2 years agoLoongArch: fix gas BFD_RELOC_8/16/24 bug
mengqinggang [Tue, 30 Aug 2022 08:27:55 +0000 (16:27 +0800)]
LoongArch: fix gas BFD_RELOC_8/16/24 bug

If fixP->fx_subsy is NULL, BFD_RELOC_8/16/24 can't convert to
BFD_RELOC_LARCH_xxx.

gas/config/tc-loongarch.c

2 years agoAutomatic date update in version.in
GDB Administrator [Wed, 7 Sep 2022 00:00:08 +0000 (00:00 +0000)]
Automatic date update in version.in

2 years agoAdd debuginfod support for objdump -S
Aaron Merey [Fri, 2 Sep 2022 23:01:56 +0000 (19:01 -0400)]
Add debuginfod support for objdump -S

Currently objdump -S is not able to make use files downloaded from debuginfod.
This is due to bfd_find_nearest_line_discriminator being unable to locate any
separate debuginfo files in the debuginfod cache. Additionally objdump lacked
a call to debuginfod_find_source in order to download missing source files.

Fix this by using bfd_find_nearest_line_with_alt instead of
bfd_find_nearest_line_discriminator. Also add a call to
debuginfod_find_source in order to download missing source files.

Co-authored-by: Nick Clifton <nickc@redhat.com>
2 years agobfd: Add bfd_find_nearest_line_with_alt
Aaron Merey [Fri, 2 Sep 2022 18:16:30 +0000 (14:16 -0400)]
bfd: Add bfd_find_nearest_line_with_alt

bfd_find_nearest_line_with_alt functions like bfd_find_nearest_line with
the addition of a parameter for specifying the filename of a supplementary
debug file such as one referenced by .gnu_debugaltlink or .debug_sup.

This patch focuses on implementing bfd_find_nearest_line_with_alt
support for ELF/DWARF2 .gnu_debugaltlink. For other targets this
function simply sets the invalid_operation bfd_error.

2 years agogdb: add Tsukasa Oi to gdb/MAINTAINERS
Tsukasa OI [Tue, 6 Sep 2022 08:51:15 +0000 (08:51 +0000)]
gdb: add Tsukasa Oi to gdb/MAINTAINERS

2 years agogdb: move a write after approval entry into the correct place
Andrew Burgess [Tue, 6 Sep 2022 08:47:04 +0000 (09:47 +0100)]
gdb: move a write after approval entry into the correct place

Noticed in passing that an entry in the MAINTAINERS write after
approval list was in the wrong place.

2 years agogdb: Add non-enum disassembler options
Tsukasa OI [Tue, 30 Aug 2022 12:21:13 +0000 (12:21 +0000)]
gdb: Add non-enum disassembler options

This is paired with "opcodes: Add non-enum disassembler options".

There is a portable mechanism for disassembler options and used on some
architectures:

-   ARC
-   Arm
-   MIPS
-   PowerPC
-   RISC-V
-   S/390

However, it only supports following forms:

-   [NAME]
-   [NAME]=[ENUM_VALUE]

Valid values for [ENUM_VALUE] must be predefined in
disasm_option_arg_t.values. For instance, for -M cpu=[CPU] in ARC
architecture, opcodes/arc-dis.c builds valid CPU model list from
include/elf/arc-cpu.def.

In this commit, it adds following format:

-   [NAME]=[ARBITRARY_VALUE] (cannot contain "," though)

This is identified by NULL value of disasm_option_arg_t.values
(normally, this is a non-NULL pointer to a NULL-terminated list).

gdb/ChangeLog:

* gdb/disasm.c (set_disassembler_options): Add support for
non-enum disassembler options.
(show_disassembler_options_sfunc): Likewise.

2 years ago[gdb/symtab] Support .debug_names section with TUs in .debug_info
Tom de Vries [Tue, 6 Sep 2022 08:15:01 +0000 (10:15 +0200)]
[gdb/symtab] Support .debug_names section with TUs in .debug_info

When running test-case gdb.cp/cpexprs-debug-types.exp on target board
cc-with-debug-names/gdb:debug_flags=-gdwarf-5, we get an executable with
a .debug_names section, but no .debug_types section.  For dwarf-5, the TUs
are no longer put in a separate unit, but instead they're put in the
.debug_info section.

When loading the executable, the .debug_names section is silently ignored
because of this check in dwarf2_read_debug_names:
...
  if (map->tu_count != 0)
    {
      /* We can only handle a single .debug_types when we have an
         index.  */
      if (per_bfd->types.size () != 1)
        return false;
...
which triggers because per_bfd->types.size () == 0.

The intention of the check is to make sure we don't have more that one
.debug_types section, as can happen in a object file (see PR12984):
...
$ grep "\.debug_types" 11.s
        .section        .debug_types,"G",@progbits,wt.75c042c23a9a07ee,comdat
        .section        .debug_types,"G",@progbits,wt.c59c413bf50a4607,comdat
...

Fix this by:
- changing the check condition to "per_bfd->types.size () > 1", and
- handling per_bfd->types.size () == 0.

Tested on x86_64-linux.

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29385

2 years ago[gdb/testsuite] Add gdb.dwarf2/debug-names-bad-cu-index.exp
Tom de Vries [Tue, 6 Sep 2022 08:15:00 +0000 (10:15 +0200)]
[gdb/testsuite] Add gdb.dwarf2/debug-names-bad-cu-index.exp

Add test-case gdb.dwarf2/debug-names-bad-cu-index.exp, a regression test for
commit 2fe9a3c41fa ("[gdb/symtab] Fix bad compile unit index complaint").

Tested on x86_64-linux.

2 years ago[gdb/testsuite] Add gdb.dwarf2/debug-names-tu.exp
Tom de Vries [Tue, 6 Sep 2022 08:15:00 +0000 (10:15 +0200)]
[gdb/testsuite] Add gdb.dwarf2/debug-names-tu.exp

Add a test-case gdb.dwarf2/debug-names-tu.exp, that uses the dwarf assembler
to specify a .debug_names index with the TU list referring to a TU from the
.debug_types section.

This is intended to produce something similar to:
...
$ gcc -g -fdebug-types-section ~/hello.c -gdwarf-4
$ gdb-add-index -dwarf-5 a.out
...

Tested on x86_64-linux.

2 years agoopcodes: Add non-enum disassembler options
Tsukasa OI [Tue, 30 Aug 2022 12:20:30 +0000 (12:20 +0000)]
opcodes: Add non-enum disassembler options

This is paired with "gdb: Add non-enum disassembler options".

There is a portable mechanism for disassembler options and used on some
architectures:

-   ARC
-   Arm
-   MIPS
-   PowerPC
-   RISC-V
-   S/390

However, it only supports following forms:

-   [NAME]
-   [NAME]=[ENUM_VALUE]

Valid values for [ENUM_VALUE] must be predefined in
disasm_option_arg_t.values. For instance, for -M cpu=[CPU] in ARC
architecture, opcodes/arc-dis.c builds valid CPU model list from
include/elf/arc-cpu.def.

In this commit, it adds following format:

-   [NAME]=[ARBITRARY_VALUE] (cannot contain "," though)

This is identified by NULL value of disasm_option_arg_t.values
(normally, this is a non-NULL pointer to a NULL-terminated list).

include/ChangeLog:

* dis-asm.h (disasm_option_arg_t): Update comment of values
to allow non-enum disassembler options.

opcodes/ChangeLog:

* riscv-dis.c (print_riscv_disassembler_options): Support
non-enum disassembler options on printing disassembler help.
* arc-dis.c (print_arc_disassembler_options): Likewise.
* mips-dis.c (print_mips_disassembler_options): Likewise.

2 years agoAutomatic date update in version.in
GDB Administrator [Tue, 6 Sep 2022 00:00:07 +0000 (00:00 +0000)]
Automatic date update in version.in

2 years agosim/riscv: Complete tidying up with SBREAK
Tsukasa OI [Sun, 4 Sep 2022 07:45:06 +0000 (07:45 +0000)]
sim/riscv: Complete tidying up with SBREAK

This commit removes SBREAK-related references on the simulator as it's
renamed to EBREAK in 2016 (the RISC-V ISA, version 2.1).

sim/ChangeLog:

* riscv/sim-main.c (execute_i): Use "ebreak" instead of "sbreak".

2 years agoAutomatic date update in version.in
GDB Administrator [Mon, 5 Sep 2022 00:00:07 +0000 (00:00 +0000)]
Automatic date update in version.in

2 years agosim/erc32: fix gdb with simulator build
Andrew Burgess [Sun, 4 Sep 2022 16:49:11 +0000 (17:49 +0100)]
sim/erc32: fix gdb with simulator build

In commit:

  commit 7b01c1cc1d111ba0afa51e60fa9842d3b971e2d1
  Date:   Mon Apr 4 22:38:04 2022 +0100

      sim: fixes for libopcodes styled disassembler

changes were made to the simulator source to handle the new libopcodes
disassembler styling API.

Unfortunately, these changes broke building GDB with the erc32 (sparc)
simulator, like this:

  ../src/configure --target=sparc-linux
  make all-gdb
  ....
  /usr/bin/ld: ../sim/erc32/libsim.a(interf.o): in function `sim_open':
  /tmp/build/sim/../../src/sim/erc32/interf.c:247: undefined reference to `fprintf_styled'
  collect2: error: ld returned 1 exit status

The problem is that in commit 7b01c1cc1d11 the fprintf_styled function
was added into sis.c.  This file is only used when building the 'run'
binary, that is, the standalone simulator, and is not included in the
libsim.a library.

Now, the obvious fix would be to move fprintf_styled into libsim.a,
however, that turns out to be tricky.

The erc32 simulator currently has two copies of the function run_sim,
one in sis.c, and one in interf.c, both of these copies are global.

Currently, the 'run' binary links fine, though I suspect this might be
pure luck.  When I tried moving fprintf_styled into interf.c, I ran
into multiple-definition (of run_sim) errors.  I suspect that by
requiring the linker to pull in fprintf_styled from libsim.a I was
changing the order in which symbols were loaded, and the linker was
now seeing both copies of run_sim, while currently we only see one
copy.

The ideal solution of course, would be to merge the two similar, but
slightly different copies of run_sim, and just use the one copy.  Then
we could safely move fprintf_styled into interf.c too, and all would
be good.

But I don't have time right now to start debugging the erc32
simulator, so I wanted a solution that fixes the build without
introducing multiple definition errors.

The easiest solution I think is to just have two copies of
fprintf_styled, one in sis.c, and one in interf.c.  Unlike run_sim,
these two copies are both static, so we will not run into multiple
definition issues with this function.  The functions themselves are
not very big, so it's not a huge amount of duplicate code.

I am very aware that this is not an ideal solution, and I would
welcome anyone who wants to take on fixing the run_sim problem
properly, and then cleanup the fprintf_styled duplication.

2 years agoAutomatic date update in version.in
GDB Administrator [Sun, 4 Sep 2022 00:00:07 +0000 (00:00 +0000)]
Automatic date update in version.in

2 years agoAutomatic date update in version.in
GDB Administrator [Sat, 3 Sep 2022 00:00:08 +0000 (00:00 +0000)]
Automatic date update in version.in

2 years agoxtensa: bfd: fix TLS relocations generated for PIE
Max Filippov [Tue, 23 Aug 2022 12:25:55 +0000 (05:25 -0700)]
xtensa: bfd: fix TLS relocations generated for PIE

When generating TLS dynamic relocations the existing xtensa BFD code
treats linking to a PIE exactly as linking to a shared object, resulting
in generation of wrong relocations for TLS entries. Fix that and add
tests.

bfd/
* elf32-xtensa.c (elf_xtensa_check_relocs): Use bfd_link_dll
instead of bfd_link_pic. Add elf_xtensa_dynamic_symbol_p test
when generating GOT entries.
(elf_xtensa_relocate_section): Use bfd_link_dll instead of
bfd_link_pic.
ld/
* testsuite/ld-xtensa/tlspie.dd: New file.
* testsuite/ld-xtensa/tlspie.rd: New file.
* testsuite/ld-xtensa/tlspie.sd: New file.
* testsuite/ld-xtensa/tlspie.td: New file.
* testsuite/ld-xtensa/xtensa-linux.exp (TLS PIE transitions):
New test.

2 years agoxtensa: adjust expected output in ld TLS tests
Max Filippov [Thu, 18 Aug 2022 09:46:38 +0000 (02:46 -0700)]
xtensa: adjust expected output in ld TLS tests

objdump output for l32r opcode was changed in commit b3ea76397a07
("opcodes: xtensa: display loaded literal value"), but xtensa linker TLS
relaxation tests weren't adjusted accordingly.
readelf output was changed in commit 23356397449a ("Adjust readelf's
output so that section symbols without a name as shown with their
section name."), but xtensa linker TLS relaxation tests weren't adjusted
accordingly.
Fix expected output changes in xtensa ld TLS relaxation tests.

ld/
* testsuite/ld-xtensa/tlsbin.dd: Adjust expected output for l32r
opcodes.
* testsuite/ld-xtensa/tlsbin.rd: Adjust expected output to allow
for named section symbols.
* testsuite/ld-xtensa/tlspic.dd: Adjust expected output for l32r
opcodes.
* testsuite/ld-xtensa/tlspic.rd: Adjust expected output to allow
for named section symbols.

2 years agoAdd OpenBSD ARM Little Endian BFD support.
Frederic Cambus [Fri, 2 Sep 2022 10:29:54 +0000 (11:29 +0100)]
Add OpenBSD ARM Little Endian BFD support.

* config.bfd (arm-*-openbsd*): Restore target.

2 years agoRISC-V: Print highest address (-1) on the disassembler
Tsukasa OI [Sat, 27 Aug 2022 00:11:01 +0000 (00:11 +0000)]
RISC-V: Print highest address (-1) on the disassembler

This patch makes possible to print the highest address (-1) and the addresses
related to gp which value is -1.  This is particularly useful if the highest
address space is used for I/O registers and corresponding symbols are defined.
Besides, despite that it is very rare to have GP the highest address, it would
be nice because we enabled highest address printing on regular cases.

gas/ChangeLog:

* testsuite/gas/riscv/dis-addr-topaddr.s: New test for the top
address (-1) printing.
* testsuite/gas/riscv/dis-addr-topaddr-32.d: Likewise.
* testsuite/gas/riscv/dis-addr-topaddr-64.d: Likewise.
* testsuite/gas/riscv/dis-addr-topaddr-gp.s: New test for
GP-relative addressing when GP is the highest address (-1).
* testsuite/gas/riscv/dis-addr-topaddr-gp-32.d: Likewise.
* testsuite/gas/riscv/dis-addr-topaddr-gp-64.d: Likewise.

opcodes/ChangeLog:

* riscv-dis.c (struct riscv_private_data): Add `to_print_addr' to
enable printing the highest address.
(maybe_print_address): Utilize `to_print_addr'.
(riscv_disassemble_insn): Likewise.

2 years agoRISC-V: PR29342, Fix RV32 disassembler address computation
Tsukasa OI [Sat, 27 Aug 2022 00:11:00 +0000 (00:11 +0000)]
RISC-V: PR29342, Fix RV32 disassembler address computation

If either the base register is `zero', `tp' or `gp' and XLEN is 32, an
incorrectly sign-extended address is produced when printing.  This commit
fixes this by fitting an address into a 32-bit value on RV32.

Besides, H. Peter Anvin discovered that we have wrong address computation
for JALR instruction (the initial bug is back in 2018).  This commit also
fixes that based on the idea of Palmer Dabbelt.

gas/
pr29342
* testsuite/gas/riscv/lla32.d: Reflect RV32 address computation fix.
* testsuite/gas/riscv/dis-addr-overflow.s: New testcase.
* testsuite/gas/riscv/dis-addr-overflow-32.d: Likewise.
* testsuite/gas/riscv/dis-addr-overflow-64.d: Likewise.
opcodes/
pr29342
* riscv-dis.c (maybe_print_address): Fit address into 32-bit on RV32.
(print_insn_args): Fix JALR address by adding EXTRACT_ITYPE_IMM.

2 years agoRISC-V: Add address printer tests with ADDIW
Tsukasa OI [Sat, 27 Aug 2022 00:10:58 +0000 (00:10 +0000)]
RISC-V: Add address printer tests with ADDIW

Address sequences involving ADDIW/C.ADDIW instructions require special
handling to sign-extend lower 32-bits of the original result.

This commit tests whether this sign-extension works.

gas/ChangeLog:

* testsuite/gas/riscv/dis-addr-addiw.s: New to test the address
computation with sign extension as used in ADDIW/C.ADDIW.
* testsuite/gas/riscv/dis-addr-addiw-a.d: Test PC sign bit 0.
* testsuite/gas/riscv/dis-addr-addiw-b.d: Test PC sign bit 1.

gas/ChangeLog:

* testsuite/gas/riscv/dis-addr-addiw-a.d: New test.
* testsuite/gas/riscv/dis-addr-addiw-b.d: New test.
* testsuite/gas/riscv/dis-addr-addiw.s: New test.

2 years agoAutomatic date update in version.in
GDB Administrator [Fri, 2 Sep 2022 00:00:13 +0000 (00:00 +0000)]
Automatic date update in version.in

2 years agosim: Update mailing list address
Tsukasa OI [Sat, 27 Aug 2022 02:12:09 +0000 (02:12 +0000)]
sim: Update mailing list address

The commit bf1102165389 "* MAINTAINERS: Perform some obvious fixups."
back in 2009 changed the mailing list address gdb-patches@sources.redhat.com
to gdb-patches@sourceware.org.

This commit does the same to sim/MAINTAINERS.

sim/ChangeLog:

* MAINTAINERS: Update mailing list address.

Change-Id: I56c6bf21a4bddfb35ffc3336ffcba7ff9b39926e

2 years agodllwrap, windres and dlltools use mktemp, which should be avoided
Nick Clifton [Thu, 1 Sep 2022 13:51:50 +0000 (14:51 +0100)]
dllwrap, windres and dlltools use mktemp, which should be avoided

PR 29534
* dllwrap.c: Replace uses of choose_temp_base() with
make_temp_file().
* dlltool.c: Likewise.
* resrc.c: Likewise.

2 years agoGDB/doc: Document the Guile `#:unlimited' keyword
Maciej W. Rozycki [Thu, 1 Sep 2022 10:30:18 +0000 (11:30 +0100)]
GDB/doc: Document the Guile `#:unlimited' keyword

Document the Guile `#:unlimited' keyword and deprecate the internal
integer representation it corresponds to for integer parameters.

2 years agogdb/python-config: replace deprecated distutils.sysconfig
Lancelot SIX [Fri, 26 Aug 2022 08:39:03 +0000 (08:39 +0000)]
gdb/python-config: replace deprecated distutils.sysconfig

When running the gdb/configure script on ubuntu 22.04 with
python-3.10.4, I see:

    checking for python... no
    checking for python3... /usr/bin/python3
    [...]/gdb/python/python-config.py:7: DeprecationWarning: The distutils package is deprecated and slated for removal in Python 3.12. Use setuptools or check PEP 632 for potential alternatives
      from distutils import sysconfig
    [...]/gdb/python/python-config.py:7: DeprecationWarning: The distutils.sysconfig module is deprecated, use sysconfig instead
      from distutils import sysconfig
    [...]/gdb/python/python-config.py:7: DeprecationWarning: The distutils package is deprecated and slated for removal in Python 3.12. Use setuptools or check PEP 632 for potential alternatives
      from distutils import sysconfig
    [...]/gdb/python/python-config.py:7: DeprecationWarning: The distutils.sysconfig module is deprecated, use sysconfig instead
      from distutils import sysconfig
    [...]/gdb/python/python-config.py:7: DeprecationWarning: The distutils package is deprecated and slated for removal in Python 3.12. Use setuptools or check PEP 632 for potential alternatives
      from distutils import sysconfig
    [...]/gdb/python/python-config.py:7: DeprecationWarning: The distutils.sysconfig module is deprecated, use sysconfig instead
      from distutils import sysconfig
    checking for python... yes

The distutils module is deprecated as per the PEP 632[1] and will be
removed in python-3.12.

This patch migrates gdb/python/python-config.py from distutils.sysconfig
to the sysconfig module[2].

The sysconfig module has has been introduced in the standard library in
python 3.2.  Given that support for python < 3.2 has been removed by
edae3fd6600f: "gdb/python: remove Python 2 support", this patch does not
need to support both implementations for backward compatibility.

Tested on ubuntu-22.04 and ubuntu 20.04.

[1] https://peps.python.org/pep-0632/
[2] https://docs.python.org/3/library/sysconfig.html

Change-Id: Id0df2baf3ee6ce68bd01c236b829ab4c0a4526f6

2 years agoAutomatic date update in version.in
GDB Administrator [Thu, 1 Sep 2022 00:00:07 +0000 (00:00 +0000)]
Automatic date update in version.in

2 years agoFix interpreter-exec crash
Tom Tromey [Fri, 12 Aug 2022 19:15:01 +0000 (13:15 -0600)]
Fix interpreter-exec crash

PR mi/10347 points out that using interpreter-exec inside of a
"define" command will crash gdb.  The bug here is that
gdb_setup_readline doesn't check for the case where instream==nullptr.

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=10347

2 years agoFix "source" with interpreter-exec
Tom Tromey [Fri, 12 Aug 2022 19:50:35 +0000 (13:50 -0600)]
Fix "source" with interpreter-exec

PR mi/15811 points out that "source"ing a file that uses
interpreter-exec will put gdb in a weird state, where the CLI stops
working.  The bug is that tui_interp::suspend does not unregister the
event file descriptor.

The test case is from Andrew Burgess.

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=15811

2 years agoRemove a call to clear_interpreter_hooks
Tom Tromey [Fri, 12 Aug 2022 19:30:31 +0000 (13:30 -0600)]
Remove a call to clear_interpreter_hooks

mi_interp::resume does not need to call clear_interpreter_hooks,
because this is already done by interp_set.

2 years agoTUI stdout buffering cleanup
Tom Tromey [Thu, 11 Aug 2022 20:03:55 +0000 (14:03 -0600)]
TUI stdout buffering cleanup

The TUI checks against gdb_stdout to decide when to buffer.  It seems
much cleaner to me to simply record this as an attribute of the stream
itself.

2 years agoRemove a ui-related memory leak
Tom Tromey [Thu, 11 Aug 2022 19:16:46 +0000 (13:16 -0600)]
Remove a ui-related memory leak

gdb_setup_readline makes new streams and assigns to the various stream
members of struct ui.  However, these assignments cause the previous
values to leak.  As far as I can, this code is simply unnecessary and
can be removed -- with the exception of the assignment to gdb_stdtarg,
which is not initialized anywhere else.

2 years agoRemove tui_out_new
Tom Tromey [Thu, 11 Aug 2022 18:29:32 +0000 (12:29 -0600)]
Remove tui_out_new

tui_out_new is just a simple wrapper for 'new' and can be removed,
simplifying gdb a tiny bit.

2 years agoUse scoped_restore in safe_parse_type
Tom Tromey [Thu, 11 Aug 2022 17:59:06 +0000 (11:59 -0600)]
Use scoped_restore in safe_parse_type

This changes safe_parse_type to use scoped_restore rather than
explicit assignments.

2 years agoUse member initialization in 'struct ui'
Tom Tromey [Thu, 11 Aug 2022 17:13:00 +0000 (11:13 -0600)]
Use member initialization in 'struct ui'

This changes 'struct ui' to use member initialization.  This is
simpler to understand.

2 years agoRemove two unused members from mi_interp
Tom Tromey [Thu, 11 Aug 2022 16:24:48 +0000 (10:24 -0600)]
Remove two unused members from mi_interp

These members of mi_interp aren't used and can be removed.