binutils-gdb.git
23 months agoregen gas/Makefile.in
Alan Modra [Fri, 25 Nov 2022 01:53:14 +0000 (12:23 +1030)]
regen gas/Makefile.in

23 months agoRISC-V: Allow merging 'H' extension
Tsukasa OI [Sat, 26 Nov 2022 02:52:48 +0000 (02:52 +0000)]
RISC-V: Allow merging 'H' extension

Because riscv_merge_std_ext function did not merge the 'H' extension, linked
executables lacked 'H' extension when multiple objects are merged.

This issue is found while building OpenSBI with 'H' extension (resulting
ELF files did not contain "h1p0" in "Tag_RISCV_arch" even if *all* linked
object files contained it).

This commit adds 'h' to standard_exts variable to merge 'H' extension.

bfd/ChangeLog:

* elfnn-riscv.c (riscv_merge_std_ext): Add 'H' extension merging.

23 months agoRISC-V: Better support for long instructions (tests)
Tsukasa OI [Fri, 18 Nov 2022 07:47:42 +0000 (07:47 +0000)]
RISC-V: Better support for long instructions (tests)

This commit tests both (assembler and disassembler) fixes of "Better support
for long instructions".

gas/ChangeLog:

* testsuite/gas/riscv/insn.s: Add testcases such that big number
handling is required and should be disassembled as long ".byte"
sequence with correct instruction bits.
* testsuite/gas/riscv/insn.d: Likewise.
* testsuite/gas/riscv/insn-na.d: Likewise.
* testsuite/gas/riscv/insn-dwarf.d: Likewise.

23 months agoRISC-V: Better support for long instructions (assembler)
Tsukasa OI [Fri, 18 Nov 2022 07:47:42 +0000 (07:47 +0000)]
RISC-V: Better support for long instructions (assembler)

Commit bb996692bd96 ("RISC-V/gas: allow generating up to 176-bit
instructions with .insn") tried to start supporting long instructions but
it was insufficient.

1.  It heavily depended on the bignum internals (radix of 2^16),
2.  It generates "value conflicts with instruction length" even if a big
    number instruction encoding does not exceed its expected length and
3.  Because long opcode was handled separately (from struct riscv_cl_insn),
    some information like DWARF line number correspondence was missing.

To resolve these problems, this commit:

1.  Handles bignum (and its encodings) precisely and
2.  Incorporates long opcode handling into regular instruction handling.

This commit will be tested on the separate commit.

gas/ChangeLog:

* config/tc-riscv.c (struct riscv_cl_insn): Add long opcode field.
(create_insn) Clear long opcode marker.
(install_insn) Install longer opcode as well.
(s_riscv_insn) Likewise.
(riscv_ip_hardcode): Make big number handling stricter. Length and
the value conflicts only if the bignum size exceeds the expected
maximum length.

23 months agoRISC-V: Better support for long instructions (disassembler)
Tsukasa OI [Fri, 18 Nov 2022 07:47:42 +0000 (07:47 +0000)]
RISC-V: Better support for long instructions (disassembler)

Commit bb996692bd96 ("RISC-V/gas: allow generating up to 176-bit
instructions with .insn") tried to start supporting long instructions but
it was insufficient.

On the disassembler, correct ".byte" output was limited to the first 64-bits
of an instruction.  After that, zeroes are incorrectly printed.

Note that, it only happens on ".byte" output (instruction part) and not on
hexdump (data) part.  For example, before this commit, hexdump and ".byte"
produces different values:

Assembly:
  .insn 22, 0xfedcba98765432100123456789abcdef55aa33cc607f
objdump output example (before the fix):
  10:   607f 33cc 55aa cdef     .byte   0x7f, 0x60, 0xcc, 0x33, 0xaa, 0x55, 0xef, 0xcd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  18:   89ab 4567 0123 3210
  20:   7654 ba98 fedc

Note that, after 0xcd (after first 64-bits of the target instruction), all
".byte" values are incorrectly printed as zero while hexdump prints correct
instruction bits.

To resolve this, this commit adds "packet" argument to support dumping
instructions longer than 64-bits (to print correct instruction bits on
".byte").  This commit will be tested on the separate commit.

Assembly:
  .insn 22, 0xfedcba98765432100123456789abcdef55aa33cc607f
objdump output example (after the fix):
  10:   607f 33cc 55aa cdef     .byte   0x7f, 0x60, 0xcc, 0x33, 0xaa, 0x55, 0xef, 0xcd, 0xab, 0x89, 0x67, 0x45, 0x23, 0x01, 0x10, 0x32, 0x54, 0x76, 0x98, 0xba, 0xdc, 0xfe
  18:   89ab 4567 0123 3210
  20:   7654 ba98 fedc

opcodes/ChangeLog:

* riscv-dis.c (riscv_disassemble_insn): Print unknown instruction
using the new argument packet.
(riscv_disassemble_data): Add unused argument packet.
(print_insn_riscv): Pass packet to the disassemble function.

23 months agoAutomatic date update in version.in
GDB Administrator [Mon, 28 Nov 2022 00:00:24 +0000 (00:00 +0000)]
Automatic date update in version.in

23 months agoFix leak in the dwarf reader
Philippe Waroquiers [Sun, 27 Nov 2022 12:44:37 +0000 (13:44 +0100)]
Fix leak in the dwarf reader

Valgrind reports a leak in the dwarf reader (see details below).
The function dw2_get_file_names_reader is interning in the per_objfile
all the file names it finds, except the name of 'fnd file name and directory'.
Instead, it was xstrdup-ing the name.
Fix the leaks by also interning the name.

This was validated running the tests natively, and under valgrind.
Leaks have decreased as mentionned below.
Valgrind detected no error such as double free or use after free.

Stack trace of the leak:
==4113266== 490,735 bytes in 17,500 blocks are definitely lost in loss record 7,061 of 7,074
==4113266==    at 0x483979B: malloc (vg_replace_malloc.c:393)
==4113266==    by 0x25A454: xmalloc (alloc.c:57)
==4113266==    by 0x7D1E1E: xstrdup (xstrdup.c:34)
==4113266==    by 0x39D141: dw2_get_file_names_reader (read.c:2825)
==4113266==    by 0x39D141: dw2_get_file_names(dwarf2_per_cu_data*, dwarf2_per_objfile*) (read.c:2851)
==4113266==    by 0x39DD6C: dw_expand_symtabs_matching_file_matcher(dwarf2_per_objfile*, gdb::function_view<bool (char const*, bool)>) (read.c:4149)
==4113266==    by 0x3BC8B5: cooked_index_functions::expand_symtabs_matching(objfile*, gdb::function_view<bool (char const*, bool)>, lookup_name_info const*, gdb::function_view<bool (char const*)>, gdb::function_view<bool (compunit_symtab*)>, enum_flags<block_search_flag_values>, domain_enum, search_domain) (read.c:18688)
==4113266==    by 0x5DD1EA: objfile::map_symtabs_matching_filename(char const*, char const*, gdb::function_view<bool (symtab*)>) (symfile-debug.c:207)
==4113266==    by 0x5F04CC: iterate_over_symtabs(char const*, gdb::function_view<bool (symtab*)>) (symtab.c:633)
==4113266==    by 0x477EE3: collect_symtabs_from_filename(char const*, program_space*) (linespec.c:3712)
==4113266==    by 0x477FC1: symtabs_from_filename(char const*, program_space*) (linespec.c:3726)
==4113266==    by 0x47A9B8: convert_explicit_location_spec_to_linespec(linespec_state*, linespec*, char const*, char const*, symbol_name_match_type, char const*, line_offset) (linespec.c:2329)
==4113266==    by 0x47E86E: convert_explicit_location_spec_to_sals (linespec.c:2388)
==4113266==    by 0x47E86E: location_spec_to_sals(linespec_parser*, location_spec const*) (linespec.c:3104)
==4113266==    by 0x47EDAC: decode_line_full(location_spec*, int, program_space*, symtab*, int, linespec_result*, char const*, char const*) (linespec.c:3149)
...

Without the fix, the top 10 leaks are:
./gdb/testsuite/outputs/gdb.base/condbreak-bad/gdb.log:345:==3213924==    definitely lost: 130,937 bytes in 5,409 blocks
./gdb/testsuite/outputs/gdb.base/hbreak2/gdb.log:619:==3758919==    definitely lost: 173,323 bytes in 7,204 blocks
./gdb/testsuite/outputs/gdb.mi/mi-var-cp/gdb.log:1320:==4152873==    definitely lost: 172,826 bytes in 7,207 blocks
./gdb/testsuite/outputs/gdb.base/advance-until-multiple-locations/gdb.log:398:==2992643==    definitely lost: 172,965 bytes in 7,211 blocks
./gdb/testsuite/outputs/gdb.mi/mi-var-cmd/gdb.log:2302:==4159476==    definitely lost: 173,129 bytes in 7,211 blocks
./gdb/testsuite/outputs/gdb.cp/gdb2384/gdb.log:222:==3811851==    definitely lost: 218,106 bytes in 7,761 blocks
./gdb/testsuite/outputs/gdb.cp/mb-templates/gdb.log:310:==3787344==    definitely lost: 290,311 bytes in 10,340 blocks
./gdb/testsuite/outputs/gdb.mi/mi-var-rtti/gdb.log:2568:==4158350==    definitely lost: 435,427 bytes in 15,507 blocks
./gdb/testsuite/outputs/gdb.mi/mi-catch-cpp-exceptions/gdb.log:1704:==4119722==    definitely lost: 435,405 bytes in 15,510 blocks
./gdb/testsuite/outputs/gdb.mi/mi-vla-fortran/gdb.log:768:==4113266==    definitely lost: 508,585 bytes in 18,109 blocks

With the fix:
./gdb/testsuite/outputs/gdb.base/fork-running-state/gdb.log:1536:==2924193==    indirectly lost: 13,848 bytes in 98 blocks
./gdb/testsuite/outputs/gdb.base/fork-running-state/gdb.log:1675:==2928777==    indirectly lost: 13,848 bytes in 98 blocks
./gdb/testsuite/outputs/gdb.python/py-inferior-leak/gdb.log:4729:==3353335==    definitely lost: 3,360 bytes in 140 blocks
./gdb/testsuite/outputs/gdb.base/kill-detach-inferiors-cmd/gdb.log:210:==2746927==    indirectly lost: 13,246 bytes in 154 blocks
./gdb/testsuite/outputs/gdb.base/inferior-clone/gdb.log:179:==3034984==    indirectly lost: 12,921 bytes in 161 blocks
./gdb/testsuite/outputs/gdb.base/interrupt-daemon/gdb.log:209:==3006248==    indirectly lost: 20,683 bytes in 174 blocks
./gdb/testsuite/outputs/gdb.threads/watchpoint-fork/gdb.log:714:==3512403==    indirectly lost: 20,707 bytes in 175 blocks
./gdb/testsuite/outputs/gdb.threads/watchpoint-fork/gdb.log:962:==3514498==    indirectly lost: 20,851 bytes in 178 blocks
./gdb/testsuite/outputs/gdb.base/multi-forks/gdb.log:336:==2585839==    indirectly lost: 53,630 bytes in 386 blocks
./gdb/testsuite/outputs/gdb.base/multi-forks/gdb.log:1338:==2592417==    indirectly lost: 100,008 bytes in 1,154 blocks

Approved-By: Simon Marchi <simon.marchi@efficios.com>
23 months agofix leak in gdb_environ
Philippe Waroquiers [Sun, 27 Nov 2022 18:20:58 +0000 (19:20 +0100)]
fix leak in gdb_environ

valgrind reports a leak when assigning a gdb_environ to another gdb_environ.
The memory allocated for the target gdb_environ env variables is not released.
The gdb_environ selftest reproduces the leak (see below).
Fix the leak by clearing the target gdb_environ before std::move-ing the
members.

Tested natively and re-running all tests under valgrind.

==3261873== 4,842 bytes in 69 blocks are definitely lost in loss record 6,772 of 6,839
==3261873==    at 0x483979B: malloc (vg_replace_malloc.c:393)
==3261873==    by 0x25A454: xmalloc (alloc.c:57)
==3261873==    by 0x7D1E4E: xstrdup (xstrdup.c:34)
==3261873==    by 0x7E2A51: gdb_environ::from_host_environ() (environ.cc:56)
==3261873==    by 0x66F1C8: test_reinit_from_host_environ (environ-selftests.c:78)
==3261873==    by 0x66F1C8: selftests::gdb_environ_tests::run_tests() (environ-selftests.c:285)
==3261873==    by 0x7EFC43: operator() (std_function.h:622)
=

Approved-By: Simon Marchi <simon.marchi@efficios.com>
23 months agoUse false/true for some inferior class members instead of 0/1
Philippe Waroquiers [Sun, 27 Nov 2022 16:57:08 +0000 (17:57 +0100)]
Use false/true for some inferior class members instead of 0/1

Some class members were changed to bool, but there was
still some assignments or comparisons using 0/1.

Approved-By: Simon Marchi <simon.marchi@efficios.com>
23 months ago[gdb/server] Emit warning for SIGINT failure
Tom de Vries [Sun, 27 Nov 2022 09:31:50 +0000 (10:31 +0100)]
[gdb/server] Emit warning for SIGINT failure

Consider the executable from test-case gdb.base/interrupt-daemon.exp.

When starting it using gdbserver:
...
$ ./build/gdbserver/gdbserver localhost:2345 \
  ./outputs/gdb.base/interrupt-daemon/interrupt-daemon
...
and connecting to it using gdb:
...
$ gdb -q -ex "target remote localhost:2345" \
    -ex "set follow-fork-mode child" \
    -ex "break daemon_main" -ex cont
...
we are setup to do the same as in the test-case: interrupt a running inferior
using ^C.

So let's try:
...
(gdb) continue
Continuing.
^C
...
After pressing ^C, nothing happens.  This a known problem, filed as
PR remote/18772.

The problem is that in linux_process_target::request_interrupt, a kill is used
to send a SIGINT, but it fails.  And it fails silently.

Make the failure verbose by adding a warning, such that the gdbserver output
becomes more helpful:
...
Process interrupt-daemon created; pid = 15068
Listening on port 2345
Remote debugging from host ::1, port 35148
Detaching from process 15068
Detaching from process 15085
gdbserver: Sending SIGINT to process group of pid 15068 failed: \
  No such process
...

Note that the failure can easily be reproduced using the test-case and target
board native-gdbserver:
...
(gdb) continue^M
Continuing.^M
PASS: gdb.base/interrupt-daemon.exp: fg: continue
^CFAIL: gdb.base/interrupt-daemon.exp: fg: ctrl-c stops process (timeout)
...
as reported in PR server/23382.

Tested on x86_64-linux.
Approved-By: Simon Marchi <simon.marchi@efficios.com>
23 months agoAutomatic date update in version.in
GDB Administrator [Sun, 27 Nov 2022 00:00:30 +0000 (00:00 +0000)]
Automatic date update in version.in

23 months ago[gdb/testsuite] Don't generate core in gdb.base/bt-on-fatal-signal.exp
Tom de Vries [Sat, 26 Nov 2022 13:29:10 +0000 (14:29 +0100)]
[gdb/testsuite] Don't generate core in gdb.base/bt-on-fatal-signal.exp

When running test-case gdb.base/bt-on-fatal-signal.exp on powerpc64le-linux I
noticed:
...
FAIL: gdb.base/bt-on-fatal-signal.exp: SEGV: scan for backtrace (timeout)
...

The timeout is 10 seconds, but generating the core file takes more than a
minute, probably due to slow NFS.

I managed to reproduce this behaviour independently of gdb, by compiling
"int main (void) { __builtin_abort (); }" and running it, which took 1.5
seconds for a core file 50 times smaller than the one for gdb.

Fix this by preventing the core file from being generated, using a wrapper
around gdb that does "ulimit -c 0".

Tested on x86_64-linux.

23 months ago[gdb/symtab] Handle failure to open .gnu_debugaltlink file
Tom de Vries [Sat, 26 Nov 2022 13:13:06 +0000 (14:13 +0100)]
[gdb/symtab] Handle failure to open .gnu_debugaltlink file

If we instrument cc-with-tweaks.sh to remove the .gnu_debugaltlink file after
dwz has created it, with test-case
gdb.threads/access-mem-running-thread-exit.exp and target board cc-with-dwz-m
we run into:
...
(gdb) file access-mem-running-thread-exit^M
Reading symbols from access-mem-running-thread-exit...^M
could not find '.gnu_debugaltlink' file for access-mem-running-thread-exit^M
...
followed a bit later by:
...
(gdb) file access-mem-running-thread-exit^M
Reading symbols from access-mem-running-thread-exit...^M
gdb/dwarf2/read.c:7284: internal-error: create_all_units: \
  Assertion `per_objfile->per_bfd->all_units.empty ()' failed.^M
...

The problem is that create_units does not catch the error thrown by
dwarf2_get_dwz_file.

Fix this by catching the error and performing the necessary cleanup, getting
the same result for the first and second file command.

PR symtab/29805
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29805

23 months agoFix jump on uninit producer_is_clang bit of cu.h dwarf2_cu struct.
Philippe Waroquiers [Sat, 26 Nov 2022 11:43:58 +0000 (12:43 +0100)]
Fix jump on uninit producer_is_clang bit of cu.h dwarf2_cu struct.

Valgrind reports a "jump on unitialised bit error" when running
    e.g. gdb.base/macro-source-path.exp (see details below).

    Fix this by initializing producer_is_clang member variable of dwarf2_cu.

    Tested on amd64/debian11 and re-running gdb.base/macro-source-path.exp
    under valgrind.

    ==2140965== Conditional jump or move depends on uninitialised value(s)
    ==2140965==    at 0x5211F7: dwarf_decode_macro_bytes(dwarf2_per_objfile*, buildsym_compunit*, bfd*, unsigned char const*, unsigned char const*, macro_source_file*, line_header const*, dwarf2_section_info const*, int, int, unsigned int, dwarf2_section_info*, dwarf2_section_info*, gdb::optional<unsigned long>, htab*, dwarf2_cu*) (macro.c:676)
    ==2140965==    by 0x52158A: dwarf_decode_macros(dwarf2_per_objfile*, buildsym_compunit*, dwarf2_section_info const*, line_header const*, unsigned int, unsigned int, dwarf2_section_info*, dwarf2_section_info*, gdb::optional<unsigned long>, int, dwarf2_cu*) (macro.c:967)
    ==2140965==    by 0x523BC4: dwarf_decode_macros(dwarf2_cu*, unsigned int, int) (read.c:23379)
    ==2140965==    by 0x552AB5: read_file_scope(die_info*, dwarf2_cu*) (read.c:9687)
    ==2140965==    by 0x54F7B2: process_die(die_info*, dwarf2_cu*) (read.c:8660)
    ==2140965==    by 0x5569C7: process_full_comp_unit (read.c:8429)
    ==2140965==    by 0x5569C7: process_queue (read.c:7675)
    ==2140965==    by 0x5569C7: dw2_do_instantiate_symtab (read.c:2063)
    ==2140965==    by 0x5569C7: dw2_instantiate_symtab(dwarf2_per_cu_data*, dwarf2_per_objfile*, bool) (read.c:2085)
    ==2140965==    by 0x55700B: dw2_expand_symtabs_matching_one(dwarf2_per_cu_data*, dwarf2_per_objfile*, gdb::function_view<bool (char const*, bool)>, gdb::function_view<bool (compunit_symtab*)>) (read.c:3984)
    ==2140965==    by 0x557EA3: cooked_index_functions::expand_symtabs_matching(objfile*, gdb::function_view<bool (char const*, bool)>, lookup_name_info const*, gdb::function_view<bool (char const*)>, gdb::function_view<bool (compunit_symtab*)>, enum_flags<block_search_flag_values>, domain_enum, search_domain) (read.c:18781)
    ==2140965==    by 0x778977: objfile::lookup_symbol(block_enum, char const*, domain_enum) (symfile-debug.c:276)
    ....
    ==2140965==  Uninitialised value was created by a heap allocation
    ==2140965==    at 0x4839F01: operator new(unsigned long) (vg_replace_malloc.c:434)
    ==2140965==    by 0x533A64: cutu_reader::cutu_reader(dwarf2_per_cu_data*, dwarf2_per_objfile*, abbrev_table*, dwarf2_cu*, bool, abbrev_cache*) (read.c:6264)
    ==2140965==    by 0x5340C2: load_full_comp_unit(dwarf2_per_cu_data*, dwarf2_per_objfile*, dwarf2_cu*, bool, language) (read.c:7729)
    ==2140965==    by 0x548338: load_cu(dwarf2_per_cu_data*, dwarf2_per_objfile*, bool) (read.c:2021)
    ==2140965==    by 0x55634C: dw2_do_instantiate_symtab (read.c:2048)
    ==2140965==    by 0x55634C: dw2_instantiate_symtab(dwarf2_per_cu_data*, dwarf2_per_objfile*, bool) (read.c:2085)
    ==2140965==    by 0x55700B: dw2_expand_symtabs_matching_one(dwarf2_per_cu_data*, dwarf2_per_objfile*, gdb::function_view<bool (char const*, bool)>, gdb::function_view<bool (compunit_symtab*)>) (read.c:3984)
    ==2140965==    by 0x557EA3: cooked_index_functions::expand_symtabs_matching(objfile*, gdb::function_view<bool (char const*, bool)>, lookup_name_info const*, gdb::function_view<bool (char const*)>, gdb::function_view<bool (compunit_symtab*)>, enum_flags<block_search_flag_values>, domain_enum, search_domain) (read.c:18781)
    ==2140965==    by 0x778977: objfile::lookup_symbol(block_enum, char const*, domain_enum) (symfile-debug.c:276)
    ....

23 months agoremove the declared but undefined/unused method find_partial_die
Philippe Waroquiers [Sat, 26 Nov 2022 11:42:41 +0000 (12:42 +0100)]
remove the declared but undefined/unused method find_partial_die

The method
       struct partial_die_info *find_partial_die (sect_offset sect_off);
in cu.h is defined, but is used nowhere and not implemented.

23 months agoAutomatic date update in version.in
GDB Administrator [Sat, 26 Nov 2022 00:00:32 +0000 (00:00 +0000)]
Automatic date update in version.in

23 months agoRevert "readelf: Do not require EI_OSABI for IFUNC."
Martin Liska [Fri, 25 Nov 2022 13:00:26 +0000 (14:00 +0100)]
Revert "readelf: Do not require EI_OSABI for IFUNC."

This reverts commit ffbbab0b3a1000f862b6d4ce3d9a76ed14f08801.

23 months agoriscv: Add AIA extension support (Smaia, Ssaia)
Christoph Müllner [Tue, 22 Nov 2022 11:09:27 +0000 (12:09 +0100)]
riscv: Add AIA extension support (Smaia, Ssaia)

This commit adds the AIA extensions (Smaia and Ssaia) CSRs.

bfd/ChangeLog:

* elfxx-riscv.c: Add 'smaia' and 'ssaia' to the list
of known standard extensions.

gas/ChangeLog:

* config/tc-riscv.c (enum riscv_csr_class):
(riscv_csr_address): Add CSR classes for Smaia/Ssaia.
* testsuite/gas/riscv/csr-dw-regnums.d: Add new CSRs.
* testsuite/gas/riscv/csr-dw-regnums.s: Likewise.
* testsuite/gas/riscv/csr-version-1p10.d: Likewise.
* testsuite/gas/riscv/csr-version-1p10.l: Likewise.
* testsuite/gas/riscv/csr-version-1p11.d: Likewise.
* testsuite/gas/riscv/csr-version-1p11.l: Likewise.
* testsuite/gas/riscv/csr-version-1p12.d: Likewise.
* testsuite/gas/riscv/csr-version-1p12.l: Likewise.
* testsuite/gas/riscv/csr-version-1p9p1.d: Likewise.
* testsuite/gas/riscv/csr-version-1p9p1.l: Likewise.
* testsuite/gas/riscv/csr.s: Likewise.

include/ChangeLog:

* opcode/riscv-opc.h (CSR_MISELECT): New CSR macro.
(CSR_MIREG): Likewise.
(CSR_MTOPEI): Likewise.
(CSR_MTOPI): Likewise.
(CSR_MVIEN): Likewise.
(CSR_MVIP): Likewise.
(CSR_MIDELEGH): Likewise.
(CSR_MIEH): Likewise.
(CSR_MVIENH): Likewise.
(CSR_MVIPH): Likewise.
(CSR_MIPH): Likewise.
(CSR_SISELECT): Likewise.
(CSR_SIREG): Likewise.
(CSR_STOPEI): Likewise.
(CSR_STOPI): Likewise.
(CSR_SIEH): Likewise.
(CSR_SIPH): Likewise.
(CSR_HVIEN): Likewise.
(CSR_HVICTL): Likewise.
(CSR_HVIPRIO1): Likewise.
(CSR_HVIPRIO2): Likewise.
(CSR_VSISELECT): Likewise.
(CSR_VSIREG): Likewise.
(CSR_VSTOPEI): Likewise.
(CSR_VSTOPI): Likewise.
(CSR_HIDELEGH): Likewise.
(CSR_HVIENH): Likewise.
(CSR_HVIPH): Likewise.
(CSR_HVIPRIO1H): Likewise.
(CSR_HVIPRIO2H): Likewise.
(CSR_VSIEH): Likewise.
(CSR_VSIPH): Likewise.
(DECLARE_CSR): Add CSRs for Smaia and Ssaia.

Changes for v3:
- Imply ssaia for smaia
- Imply zicsr for ssaia (and transitively smaia)
- Move hypervisor CSRs to Ssaia+H
- Rebase on upstream/master

Changes for v2:
- Add hypervisor and VS CSRs
- Fix whitespace issue

Signed-off-by: Christoph Müllner <christoph.muellner@vrull.eu>
23 months agoAutomatic date update in version.in
GDB Administrator [Fri, 25 Nov 2022 00:00:35 +0000 (00:00 +0000)]
Automatic date update in version.in

23 months agosframe/doc: remove usage of xrefautomaticsectiontitle
Indu Bhagat [Thu, 24 Nov 2022 18:14:08 +0000 (10:14 -0800)]
sframe/doc: remove usage of xrefautomaticsectiontitle

xrefautomaticsectiontitle appears to be available from texinfo 5.0 or
greater.  As such, it is not worthwhile to add requirement for a minimum
necessary makeinfo version.  So remove the usage of it.

Also align node name with section title where possible.

ChangeLog:

* libsframe/doc/sframe-spec.texi: Remove usage of
xrefautomaticsectiontitle.

23 months agogdb: fix typo in debug output message
Andrew Burgess [Thu, 24 Nov 2022 16:19:24 +0000 (16:19 +0000)]
gdb: fix typo in debug output message

Spotted a minor type, a missing ')', in a debug message.

23 months agogdb/testsuite/gdb.base/break.exp: split test_break
Simon Marchi [Wed, 23 Nov 2022 18:39:59 +0000 (13:39 -0500)]
gdb/testsuite/gdb.base/break.exp: split test_break

Move all the remaining tests to a single test_break proc.  It's a bit
big, but all of these are kind of tied together.  The procs starts by
setting breakpoints, checks that we can see them in "info breakpoints",
and tries stopping on them.

Move all the "set bp_locationX" calls together at the top.

Change-Id: Id05f98957e1a3462532d2dbd577cd0a7c7263900
Approved-By: Kevin Buettner <kevinb@redhat.com>
23 months agogdb/testsuite/gdb.base/break.exp: split test_tbreak
Simon Marchi [Wed, 23 Nov 2022 18:39:58 +0000 (13:39 -0500)]
gdb/testsuite/gdb.base/break.exp: split test_tbreak

Leave setting bp_location11 in the global scope, so that it's accessible
to other procs.

Change-Id: I8928f01640d3a1e993649b2168b9eda0724ee1d9
Approved-By: Kevin Buettner <kevinb@redhat.com>
23 months agogdb/testsuite/gdb.base/break.exp: split test_no_break_on_catchpoint
Simon Marchi [Wed, 23 Nov 2022 18:39:57 +0000 (13:39 -0500)]
gdb/testsuite/gdb.base/break.exp: split test_no_break_on_catchpoint

Change-Id: Ifa7070943f1de22c2839fedf5f346d6591bb5a76
Approved-By: Kevin Buettner <kevinb@redhat.com>
23 months agogdb/testsuite/gdb.base/break.exp: split test_break_nonexistent_line
Simon Marchi [Wed, 23 Nov 2022 18:39:56 +0000 (13:39 -0500)]
gdb/testsuite/gdb.base/break.exp: split test_break_nonexistent_line

Change-Id: I4390dd5da23bae83ccc513ad0de0169ddff7df12
Approved-By: Kevin Buettner <kevinb@redhat.com>
23 months agogdb/testsuite/gdb.base/break.exp: split test_break_default
Simon Marchi [Wed, 23 Nov 2022 18:39:55 +0000 (13:39 -0500)]
gdb/testsuite/gdb.base/break.exp: split test_break_default

One special thing here is that the part just above this one, that sets
catchpoints and verifies they are not hit, requires that we resume
execution to verify that the catchpoints are indeed not hit.   I guess
it was previously achieved by the until command, but it doesn't happen
now that the until is moved into test_break_default.  Add a
gdb_continue_to_end after setting the catchpoints.  If any catchpoint
were to be hit, it would catch the problem.

Change-Id: I5d4b43da91886b1beda9f6e56b05aa04331a9c05
Approved-By: Kevin Buettner <kevinb@redhat.com>
23 months agogdb/testsuite/gdb.base/break.exp: split test_break_silent_and_more
Simon Marchi [Wed, 23 Nov 2022 18:39:54 +0000 (13:39 -0500)]
gdb/testsuite/gdb.base/break.exp: split test_break_silent_and_more

This one is a bit tricky.  The clear tests seem to depend on the various
breakpoints that have been set before, starting with the "silent"
breakpoints.  So, move all this in a single chunk, it can always be
split later if needed.

Change-Id: I7ba61a5b130ade63eda0c4790534840339f8a72f
Approved-By: Kevin Buettner <kevinb@redhat.com>
23 months agogdb/testsuite/gdb.base/break.exp: split test_break_line_convenience_var
Simon Marchi [Wed, 23 Nov 2022 18:39:53 +0000 (13:39 -0500)]
gdb/testsuite/gdb.base/break.exp: split test_break_line_convenience_var

Change-Id: I593002373da971a0a4d6b5355d3fe321873479ab
Approved-By: Kevin Buettner <kevinb@redhat.com>
23 months agogdb/testsuite/gdb.base/break.exp: split test_break_user_call
Simon Marchi [Wed, 23 Nov 2022 18:39:52 +0000 (13:39 -0500)]
gdb/testsuite/gdb.base/break.exp: split test_break_user_call

Change-Id: I9151ce9db9435722b758f41c6606b461bf15f320
Approved-By: Kevin Buettner <kevinb@redhat.com>
23 months agogdb/testsuite/gdb.base/break.exp: split test_finish_arguments
Simon Marchi [Wed, 23 Nov 2022 18:39:51 +0000 (13:39 -0500)]
gdb/testsuite/gdb.base/break.exp: split test_finish_arguments

Change-Id: Id84babed1eeb3ce7d14b94ff332795964e8ead51
Approved-By: Kevin Buettner <kevinb@redhat.com>
23 months agogdb/testsuite/gdb.base/break.exp: use proc_with_prefix for test_next_with_recursion
Simon Marchi [Wed, 23 Nov 2022 18:39:50 +0000 (13:39 -0500)]
gdb/testsuite/gdb.base/break.exp: use proc_with_prefix for test_next_with_recursion

This one is already in a proc, just make the proc use proc_with_prefix,
for consistency.

Change-Id: I313ecf5097ff04526c29396529baeba84e37df5a
Approved-By: Kevin Buettner <kevinb@redhat.com>
23 months agogdb/testsuite/gdb.base/break.exp: split test_break_optimized_prologue
Simon Marchi [Wed, 23 Nov 2022 18:39:49 +0000 (13:39 -0500)]
gdb/testsuite/gdb.base/break.exp: split test_break_optimized_prologue

Change-Id: Ibf17033c8ce72aa5cfe1b739be2902e84a5e945d
Approved-By: Kevin Buettner <kevinb@redhat.com>
23 months agogdb/testsuite/gdb.base/break.exp: split test_rbreak_shlib
Simon Marchi [Wed, 23 Nov 2022 18:39:48 +0000 (13:39 -0500)]
gdb/testsuite/gdb.base/break.exp: split test_rbreak_shlib

Change-Id: I130e8914c2713095aab03e84aba1481b4c7af978
Approved-By: Kevin Buettner <kevinb@redhat.com>
23 months agogdb/testsuite/gdb.base/break.exp: split test_break_file_line_convenience_var
Simon Marchi [Wed, 23 Nov 2022 18:39:47 +0000 (13:39 -0500)]
gdb/testsuite/gdb.base/break.exp: split test_break_file_line_convenience_var

Change-Id: I0c31b037669b2917e062bf431372fb6531f8f53c
Approved-By: Kevin Buettner <kevinb@redhat.com>
23 months agogdb/testsuite/gdb.base/break.exp: split test_break_commands_clear
Simon Marchi [Wed, 23 Nov 2022 18:39:46 +0000 (13:39 -0500)]
gdb/testsuite/gdb.base/break.exp: split test_break_commands_clear

Change-Id: Ia58f90117d52fc419fc494836d9b4ed5d902fe9b
Approved-By: Kevin Buettner <kevinb@redhat.com>
23 months agoImpport libiberty commit: 885b6660c17f from gcc mainline. Fix gas's acinclude.m4...
Nick Clifton [Thu, 24 Nov 2022 12:30:22 +0000 (12:30 +0000)]
Impport libiberty commit: 885b6660c17f from gcc mainline.  Fix gas's acinclude.m4 to stop a potwntial configure time warning message.

23 months agoreadelf: Do not require EI_OSABI for IFUNC.
Martin Liska [Thu, 24 Nov 2022 12:17:01 +0000 (13:17 +0100)]
readelf: Do not require EI_OSABI for IFUNC.

PR 29718

binutils/ChangeLog:

* readelf.c (get_symbol_type): Consider STT_GNU_IFUNC as
reserved name.

23 months agox86: widen applicability and use of CheckRegSize
Jan Beulich [Thu, 24 Nov 2022 08:35:51 +0000 (09:35 +0100)]
x86: widen applicability and use of CheckRegSize

First of all make operand_type_register_match() apply to all sized
operands, i.e. in Intel Syntax also to respective memory ones. This
addresses gas wrongly accepting certain SIMD insns where register and
memory operand sizes should match but don't. This apparently has
affected all templates with one memory-only operand and one or more
register ones, both permitting at least two sizes, due to CheckRegSize
not taking effect.

Then also add CheckRegSize to a couple of non-SIMD templates matching
that same pattern of memory-only vs register operands. This replaces
bogus (for Intel Syntax) diagnostics referring to a wrong suffix (when
none was used at all) by "type mismatch" ones, just like already emitted
for insns where the template allows a register operand alongside a
memory one at any particular position.

This also is a prereq to limiting (ideally eliminating in the long run)
suffix "derivation" in Intel Syntax mode.

While making the code adjustment also flip order of checks to do the
cheaper one first in both cases.

23 months agox86: add missing CheckRegSize
Jan Beulich [Thu, 24 Nov 2022 08:35:17 +0000 (09:35 +0100)]
x86: add missing CheckRegSize

To properly and predictably determine operand size encoding (operand
size or REX.W prefixes), consistent operand sizes need to be specified.
Add CheckRegSize where this was previously missing.

23 months agox86: correct handling of LAR and LSL
Jan Beulich [Thu, 24 Nov 2022 08:34:52 +0000 (09:34 +0100)]
x86: correct handling of LAR and LSL

Both uniformly only ever take 16-bit memory operands while at the same
time requiring matching (in size) register operands, which then also
should disassemble that way. This in particular requires splitting each
of the templates for the assembler and separating decode of the
register and memory forms in the disassembler.

23 months agoTidy objdump printing of section size
Alan Modra [Thu, 24 Nov 2022 07:14:13 +0000 (17:44 +1030)]
Tidy objdump printing of section size

* objdump.c (load_specific_debug_section): Use PRIx64 format.

23 months agoConstify nm format array
Alan Modra [Thu, 24 Nov 2022 07:13:07 +0000 (17:43 +1030)]
Constify nm format array

* nm.c (formats, format): Make const.

23 months agoPR16995, m68k coldfire emac immediate to macsr incorrect disassembly
Alan Modra [Thu, 24 Nov 2022 06:54:02 +0000 (17:24 +1030)]
PR16995, m68k coldfire emac immediate to macsr incorrect disassembly

Mode/reg bits for these insns are 000 Dy, 001 Ay, and 111 100 for the
move immediate.

* m68k-opc.c (m68k_opcodes): Only accept 000 and 001 as mode
for move reg to macsr/mask insns.

2 years agogas: Disable --gcodeview on PE targets with no O_secrel
Mark Harmstone [Wed, 23 Nov 2022 19:43:30 +0000 (19:43 +0000)]
gas: Disable --gcodeview on PE targets with no O_secrel

2 years agoAutomatic date update in version.in
GDB Administrator [Thu, 24 Nov 2022 00:00:46 +0000 (00:00 +0000)]
Automatic date update in version.in

2 years agogdb/arm: Include FType bit in EXC_RETURN pattern on v8m
Torbjörn SVENSSON [Wed, 23 Nov 2022 10:58:31 +0000 (11:58 +0100)]
gdb/arm: Include FType bit in EXC_RETURN pattern on v8m

For v8m, the EXC_RETURN pattern, without security extension, consists of
FType, Mode and SPSEL.  These are the same bits that are used in v7m.
This patch extends the list of patterns to include also the FType bit
and not just Mode and SPSEL bits for v8m targets without security
extension.

Signed-off-by: Torbjörn SVENSSON <torbjorn.svensson@foss.st.com>
2 years agoregen POTFILES.in
Alan Modra [Wed, 23 Nov 2022 12:08:17 +0000 (22:38 +1030)]
regen POTFILES.in

2 years agoPR22509 - Null pointer dereference on coff_slurp_reloc_table
Alan Modra [Wed, 23 Nov 2022 11:42:30 +0000 (22:12 +1030)]
PR22509 - Null pointer dereference on coff_slurp_reloc_table

This extends the commit 4581a1c7d304 fix to more targets, which
hardens BFD a little.  I think the real underlying problem was the
bfd_canonicalize_reloc call in load_specific_debug_section which
passed a NULL for "symbols".  Fix that too.

PR 22509
bfd/
* aoutx.h (swap_ext_reloc_out): Gracefully handle NULL symbols.
* i386lynx.c (swap_ext_reloc_out): Likewise.
* pdp11.c (pdp11_aout_swap_reloc_out): Likewise.
* coff-tic30.c (reloc_processing): Likewise.
* coff-tic4x.c (tic4x_reloc_processing): Likewise.
* coff-tic54x.c (tic54x_reloc_processing): Likewise.
* coff-z80.c (reloc_processing): Likewise.
* coff-z8k.c (reloc_processing): Likewise.
* ecoff.c (ecoff_slurp_reloc_table): Likewise.
* som.c (som_set_reloc_info): Likewise.
binutils/
* objdump.c (load_specific_debug_section): Pass syms to
bfd_canonicalize_reloc.

2 years agoasan: NULL deref in filter_symbols
Alan Modra [Wed, 23 Nov 2022 11:37:03 +0000 (22:07 +1030)]
asan: NULL deref in filter_symbols

If tdata->symbols is NULL, make tdata->symcount zero too.  This makes
wasm_get_symtab_upper_bound return the proper result and stops
cascading errors.

* wasm-module.c (wasm_scan_name_function_section): Clear
tdata->symcount on error.

2 years agoDocument the memory_tagged argument for memory region callbacks
Luis Machado [Thu, 17 Nov 2022 10:19:30 +0000 (10:19 +0000)]
Document the memory_tagged argument for memory region callbacks

There were no comments in some instances (gdb/defs.h, gdb/core.c and
gdb/linux-tdep.c), so address that by adding comments where those are missing.

2 years agoFix gdb.cp/gdb2495.exp on powerpc64le
Tom de Vries [Wed, 23 Nov 2022 05:52:42 +0000 (06:52 +0100)]
Fix gdb.cp/gdb2495.exp on powerpc64le

On powerpc64le-linux I ran into this FAIL:
...
(gdb) p exceptions.throw_function()^M
terminate called after throwing an instance of 'int'^M
^M
Program received signal SIGABRT, Aborted.^M
0x00007ffff7979838 in raise () from /lib64/libc.so.6^M
The program being debugged was signaled while in a function called from GDB.^M
GDB remains in the frame where the signal was received.^M
To change this behavior use "set unwindonsignal on".^M
Evaluation of the expression containing the function^M
(SimpleException::throw_function()) will be abandoned.^M
When the function is done executing, GDB will silently stop.^M
(gdb) FAIL: gdb.cp/gdb2495.exp: call a function that raises an exception \
  without a handler.
...

The following happens:
- we start an inferior call
- an internal breakpoint is set on the global entry point of std::terminate
- the inferior call uses the local entry point
- the breakpoint is not triggered
- we run into std::terminate

We can fix this by simply adding the missing gdbarch_skip_entrypoint call in
create_std_terminate_master_breakpoint, but we try to do this a bit more
generic, by:
- adding a variant of function create_internal_breakpoint which takes a
  minimal symbol instead of an address as argument
- in the new function:
  - using both gdbarch_convert_from_func_ptr_addr and gdbarch_skip_entrypoint
  - documenting why we don't need to use gdbarch_addr_bits_remove
  - adding a note about possibly
    needing gdbarch_deprecated_function_start_offset.
- using the new function in:
  - create_std_terminate_master_breakpoint
  - create_exception_master_breakpoint_hook, which currently uses only
    gdbarch_convert_from_func_ptr_addr.

Note: we could use the new function in more locations in breakpoint.c, but
as we're not aware of any related failures, we declare this out of scope for
this patch.

Tested on x86_64-linux, powerpc64le-linux.

Co-Authored-By: Ulrich Weigand <uweigand@de.ibm.com>
Tested-by: Carl Love <cel@us.ibm.com>
PR tdep/29793
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29793

2 years agoRISC-V: Make R_RISCV_SUB6 conforms to riscv ABI standard
Xiao Zeng [Mon, 21 Nov 2022 12:00:37 +0000 (20:00 +0800)]
RISC-V: Make R_RISCV_SUB6 conforms to riscv ABI standard

According to the riscv psabi, R_RISCV_SUB6 only allows 6 least significant
bits are valid, but since binutils implementation, we usually get 8 bits
field for it.  That means, the high 2 bits could be other field and have
different purpose.  Therefore, we should filter the 8 bits to 6 bits before
calculate, and then only encode the valid 6 bits back.  By the way, we also
need the out-of-range check for R_RISCV_SUB6, and the overflow checks for
all R_RISCV_ADD/SUB/SET relocations, but we can add them in the future patches.

Passing riscv-gnu-toolchain regressions.

bfd/ChangeLog:

        * elfnn-riscv.c (riscv_elf_relocate_section): Take the R_RISCV_SUB6
lower 6 bits as the significant bit.
        * elfxx-riscv.c (riscv_elf_add_sub_reloc): Likewise.

2 years agogas: Add --gcodeview option
Mark Harmstone [Wed, 23 Nov 2022 02:22:48 +0000 (02:22 +0000)]
gas: Add --gcodeview option

2 years agold: Add section contributions substream to PDB files
Mark Harmstone [Fri, 11 Nov 2022 03:30:40 +0000 (03:30 +0000)]
ld: Add section contributions substream to PDB files

2 years agoAutomatic date update in version.in
GDB Administrator [Wed, 23 Nov 2022 00:00:43 +0000 (00:00 +0000)]
Automatic date update in version.in

2 years agoaarch64-fbsd: Use a static regset for the TLS register set.
John Baldwin [Tue, 22 Nov 2022 22:21:13 +0000 (14:21 -0800)]
aarch64-fbsd: Use a static regset for the TLS register set.

This uses custom collect/supply regset handlers which pass the TLS
register number from the gdbarch_tdep as the base register number.

Approved-By: Simon Marchi <simon.marchi@efficios.com>
2 years agoarm-fbsd: Use a static regset for the TLS register set.
John Baldwin [Tue, 22 Nov 2022 22:21:13 +0000 (14:21 -0800)]
arm-fbsd: Use a static regset for the TLS register set.

This uses custom collect/supply regset handlers which pass the TLS
register number from the gdbarch_tdep as the base register number.

Approved-By: Simon Marchi <simon.marchi@efficios.com>
2 years agofbsd-nat: Pass an optional register base to the register set helpers.
John Baldwin [Tue, 22 Nov 2022 22:21:13 +0000 (14:21 -0800)]
fbsd-nat: Pass an optional register base to the register set helpers.

This is needed to permit using the helpers for register sets with a
variable base.  In particular regnum needs to be converted into a
relative register number before passed to regcache_map_supplies.

Approved-By: Simon Marchi <simon.marchi@efficios.com>
2 years agofbsd-nat: Use regset supply/collect methods.
John Baldwin [Tue, 22 Nov 2022 22:21:13 +0000 (14:21 -0800)]
fbsd-nat: Use regset supply/collect methods.

fbsd-nat includes various helper routines for fetching and storing
register sets via ptrace where the register set is described by a
regset.  These helper routines directly invoke the
supply/collect_regset regcache methods which doesn't permit a regset
to provide custom logic when fetching or storing a register set.
Instead, just use the function pointers from the struct regset
directly.

Approved-By: Simon Marchi <simon.marchi@efficios.com>
2 years agoregcache: Add collect/supply_regset variants that accept a register base.
John Baldwin [Tue, 22 Nov 2022 22:21:13 +0000 (14:21 -0800)]
regcache: Add collect/supply_regset variants that accept a register base.

Some register sets described by an array of regcache_map_entry
structures do not have fixed register numbers in their associated
architecture but do describe a block of registers whose numbers are at
fixed offsets relative to some base register value.  An example of
this are the TLS register sets for the ARM and AArch64 architectures.

Currently OS-specific architectures create register maps and register
sets dynamically using the register base number.  However, this
requires duplicating the code to create the register map and register
set.  To reduce duplication, add variants of the collect_regset and
supply_regset regcache methods which accept a base register number.
For valid register map entries (i.e. not REGCACHE_MAP_SKIP), add this
base register number to the value from the map entry to determine the
final register number.

Approved-By: Simon Marchi <simon.marchi@efficios.com>
2 years agox86: Don't define _TLS_MODULE_BASE_ for ld -r
H.J. Lu [Tue, 22 Nov 2022 21:58:47 +0000 (13:58 -0800)]
x86: Don't define _TLS_MODULE_BASE_ for ld -r

bfd/

PR ld/29820
* elfxx-x86.c (_bfd_x86_elf_always_size_sections): Don't define
 _TLS_MODULE_BASE_ for ld -r.

ld/

PR ld/29820
* testsuite/ld-x86-64/pr29820.d: New file.
* testsuite/ld-x86-64/pr29820.s: Likewise.
* testsuite/ld-x86-64/x86-64.ex: Run pr29820.

2 years agoDon't use "long" in readelf for file offsets
Alan Modra [Tue, 22 Nov 2022 21:03:29 +0000 (07:33 +1030)]
Don't use "long" in readelf for file offsets

The aim here is to improve readelf handling of large 64-bit object
files on LLP64 hosts (Windows) where long is only 32 bits.  The patch
changes more than just file offsets.  Addresses and sizes are also
changed to avoid "long".  Most places get to use uint64_t even where
size_t may be more appropriate, because that allows some overflow
checks to be implemented easily (*alloc changes).

* dwarf.c (cmalloc, xcmalloc, xcrealloc, xcalloc2): Make nmemb
parameter uint64_t.
* dwarf.h: Update prototypes.
(struct dwarf_section): Make num_relocs uint64_t.
* elfcomm.c (setup_archive): Update error format.
* elfcomm.h (struct archive_info): Make sym_size, longnames_size,
nested_member_origin, next_arhdr_offset uint64_t.
* readelf.c (struct filedata): Make archive_file_offset,
archive_file_size, string_table_length, dynamic_addr,
dynamic_nent, dynamic_strings_length, num_dynamic_syms,
dynamic_syminfo_offset uint64_t.
(many functions): Replace uses of "unsigned long" with
"uint64_t" or "size_t".

2 years agoRe: readelf: use fseeko64 or fseeko if possible
Alan Modra [Tue, 22 Nov 2022 21:15:49 +0000 (07:45 +1030)]
Re: readelf: use fseeko64 or fseeko if possible

Replace the macros with a small wrapper function that verifies the fseek
offset arg isn't overlarge.

* readelf.c (FSEEK_FUNC): Delete, replace uses with..
(fseek64): ..this new function.
(process_program_headers): Don't cast p_offset to long.

2 years agogdb/arm: Fix obvious typo in b0b23e06c3a
Torbjörn SVENSSON [Tue, 22 Nov 2022 17:06:33 +0000 (18:06 +0100)]
gdb/arm: Fix obvious typo in b0b23e06c3a

As part of the rebase of the patch, I managed to loose the local
changes I had for the comments from Tomas in
https://sourceware.org/pipermail/gdb-patches/2022-November/193413.html
This patch corrects the obvious two typos.

Signed-off-by: Torbjörn SVENSSON <torbjorn.svensson@foss.st.com>
2 years agobinutils/configure.ac: integrate last change
Michael Matz [Tue, 22 Nov 2022 13:39:39 +0000 (14:39 +0100)]
binutils/configure.ac: integrate last change

Integrate back checks for fseeko{,64} into configure.ac, so
that regeneration works.

binutils/
* configure.ac: Add fseeko, fseeko64 checks.
* configure: Regenerate.

2 years agoopcodes: Correct address for ARC's "isa_config" aux reg
Shahab Vahedi [Mon, 21 Nov 2022 14:56:31 +0000 (15:56 +0100)]
opcodes: Correct address for ARC's "isa_config" aux reg

This patch changes the address for "isa_config" auxiliary register
from 0xC2 to the correct value 0xC1.  Moreover, it only exists in
arc700+ and not all ARCs.

opcodes/ChangeLog:

* arc-regs.h: Change isa_config address to 0xc1.
isa_config exists for ARC700 and ARCV2 and not ARCALL.

2 years agogdb/testsuite: remove gcc restriction from gdb.dwarf2/clang-cli-macro.exp
Bruno Larsen [Tue, 22 Nov 2022 10:23:08 +0000 (11:23 +0100)]
gdb/testsuite: remove gcc restriction from gdb.dwarf2/clang-cli-macro.exp

With the recent changes to the dwarf assembler, there is no longer a
need to test for gcc in gdb.dwarf2/clang-cli-macro.exp and mark it as
untested. This commit removes that logic.

2 years agogas/sframe: avoid "shadowing" of glibc function name
Jan Beulich [Tue, 22 Nov 2022 08:39:44 +0000 (09:39 +0100)]
gas/sframe: avoid "shadowing" of glibc function name

Once again: Old enough glibc has an (unguarded) declaration of index()
in string.h, which triggers a "shadows a global declaration" warning
with our choice of wanring level and with at least some gcc versions.

2 years agoAutomatic date update in version.in
GDB Administrator [Tue, 22 Nov 2022 00:00:39 +0000 (00:00 +0000)]
Automatic date update in version.in

2 years agoreadelf: use fseeko64 or fseeko if possible
Brett Werling [Thu, 17 Nov 2022 14:34:19 +0000 (08:34 -0600)]
readelf: use fseeko64 or fseeko if possible

Changes readelf to make use first of fseeko64 and then fseeko,
depending on which of those is available. If neither is available,
reverts to the previous behavior of using fseek.

This is necessary when building readelf for LLP64 systems, where a
long will only be 32 bits wide. If the elf file in question is >= 2 GiB,
that is greater than the max long value and therefore fseek will fail
indicating that the offset is negative. On such systems, making use of
fseeko64 or fseeko will result in the ability so seek past the 2 GiB
max long boundary.

Note that large archive handling in readelf remains to be fixed.

2 years agoPR29807, SIGSEGV when linking fuzzed PE object
Alan Modra [Fri, 18 Nov 2022 22:03:20 +0000 (08:33 +1030)]
PR29807, SIGSEGV when linking fuzzed PE object

PR 29807
* cofflink.c (_bfd_coff_generic_relocate_section): Skip relocs
against symbols with a NULL section.

2 years agoRe: ld: Always output local symbol for relocatable link
Alan Modra [Wed, 9 Nov 2022 23:03:08 +0000 (09:33 +1030)]
Re: ld: Always output local symbol for relocatable link

Remove this code dating back to commit 98790d3a95fc entirely, what it
was trying to do is done elsewhere.

PR ld/29761
* elflink.c (elf_link_output_symstrtab): Don't handle symbols
in SEC_EXCLUDE sections here.

2 years agoWhen getting the locno of a bpstat, handle the case of bp with null locations.
Philippe Waroquiers [Sun, 20 Nov 2022 16:42:12 +0000 (17:42 +0100)]
When getting the locno of a bpstat, handle the case of bp with null locations.

The test py-objfile.exp unloads the current file while debugging the process.
This results in bpstat bs->b->loc to become nullptr.
Handle this case in breakpoint.c:bpstat_locno.

Note: GDB crashes on this problem with an internal error,
but the end of gdb summary shows:
  ...
                  === gdb Summary ===

  # of expected passes 36

The output also does not contain a 'FAIL:'.
After the fix, the nr of expected passes increased.

In the gdb.log output, one can see:
  ...
  Fatal signal: Segmentation fault
  ----- Backtrace -----
  0x55698905c5b9 gdb_internal_backtrace_1
          ../../binutils-gdb/gdb/bt-utils.c:122
  0x55698905c5b9 _Z22gdb_internal_backtracev
  ...

  ERROR: Couldn't send python print(objfile.filename) to GDB.
  ERROR: : spawn id exp9 not open
      while executing
  "expect {
  -i exp9 -timeout 10
          -re ".*A problem internal to GDB has been detected" {
              fail "$message (GDB internal error)"
              gdb_internal_error..."
      ("uplevel" body line 1)
      invoked from within
  ....

Wondering if it might be possible to improve gdb_test to have
  gdb_test "python print(objfile.filename)" "None" \
      "objfile.filename after objfile is unloaded"
reporting a failed result instead of just producing the internal error.

2 years agoFix use after free introduced by $_hit_bpnum/$_hit_locno variables.
Philippe Waroquiers [Sun, 20 Nov 2022 10:11:27 +0000 (11:11 +0100)]
Fix use after free introduced by $_hit_bpnum/$_hit_locno variables.

If the commands of the bpstat bs contain commands such as step or next or
continue, the BS and its commands are freed by execute_control_command.

So, we cannot remember the BS that was printed. Instead, remember
the bpnum and locno.

Regtested on debian/amd64 and re-run a few tests under valgrind.

2 years agoFix step-over-syscall.exp matching regexp for $bpnum.$locno matching
Philippe Waroquiers [Sun, 20 Nov 2022 23:14:38 +0000 (00:14 +0100)]
Fix step-over-syscall.exp matching regexp for $bpnum.$locno matching

step-over-syscall.exp has some specific tests for gdbserver.
The regexp matching breakpoint hit must take the added locno into account.

Test re-run in 3 modes (normal, native-gdbserver and native-extended-gdbserver).

2 years agoFix ARM and AArch64 assembler tests to work in a multi-arch environment.
Nick Clifton [Mon, 21 Nov 2022 16:44:02 +0000 (16:44 +0000)]
Fix ARM and AArch64 assembler tests to work in a multi-arch environment.

PR 29764
gas * testsuite/gas/arm/cpu-cortex-a76ae.d: Add arm prefix to the -m
option passed to objdump.
* testsuite/gas/arm/cpu-cortex-a77.d: Likewise.
* testsuite/gas/aarch64/cpu-cortex-a76ae.d: Add aarch64 prefix to
the -m option passed to objdump.
* testsuite/gas/aarch64/cpu-cortex-a77.d: Likewise.

bfd * cpu-arm.c (scan): Accept machine names prefixed with "arm:".
* cpu-aarch64.c (scan): Accept machine names prefixed with "aarch64:".

bin * doc/binutils.texi (objdump): Note that the -m option supports
the <architecture>:<machine> syntax.

2 years agogdb/arm: Ensure that stack pointers are in sync
Torbjörn SVENSSON [Fri, 4 Nov 2022 12:58:31 +0000 (13:58 +0100)]
gdb/arm: Ensure that stack pointers are in sync

For targets with secext, msp and psp can be seen as an alias for one
of msp_s, msp_ns, psp_s or psp_ns.
Without this patch, sp might be secure, but msp or psp is non-secure
(this state can not happen in the hardware).

Signed-off-by: Torbjörn SVENSSON <torbjorn.svensson@foss.st.com>
2 years agogdb/arm: Update active msp/psp when switching stack
Torbjörn SVENSSON [Fri, 4 Nov 2022 08:46:34 +0000 (09:46 +0100)]
gdb/arm: Update active msp/psp when switching stack

For targets with secext, msp and psp can be seen as an alias for one
of msp_s, msp_ns, psp_s or psp_ns. When switching active sp, the
corresponding msp/psp needs to be switched too.

Signed-off-by: Torbjörn SVENSSON <torbjorn.svensson@foss.st.com>
2 years agogdb/csky just return type from csky_vector_type() for vector resgisters
Jiangshuai Li [Wed, 9 Nov 2022 11:50:35 +0000 (19:50 +0800)]
gdb/csky just return type from csky_vector_type() for vector resgisters

Some gdb stubs may not describe the type for vector registers in the
tdesc-xml and only send bitsize="128", gdb can't deal with a reg
with default type int with bitsize==128. So Just return csky_vector_type()
for vector resgisters.

2 years agogdb/csky return type int32 for float and vector pseudo regs
Jiangshuai Li [Wed, 9 Nov 2022 11:41:02 +0000 (19:41 +0800)]
gdb/csky return type int32 for float and vector pseudo regs

When reg_nr is one of the float and vector pseudo registers,
return builtin_type (gdbarch)->builtin_int32 for it.

2 years agoAutomatic date update in version.in
GDB Administrator [Mon, 21 Nov 2022 00:00:30 +0000 (00:00 +0000)]
Automatic date update in version.in

2 years ago[PR build/29791] gnulib: Disable _GL_ATTRIBUTE_DEALLOC on Solaris
Rainer Orth [Sun, 20 Nov 2022 13:55:52 +0000 (14:55 +0100)]
[PR build/29791] gnulib: Disable _GL_ATTRIBUTE_DEALLOC on Solaris

gdbsupport compilation badly fails with GCC 12 on Solaris, with errors
like

../gnulib/config.h:1693:72: error: ‘malloc’ attribute argument 1 is ambiguous
 1693 | # define _GL_ATTRIBUTE_DEALLOC(f, i) __attribute__ ((__malloc__ (f, i)))
      |                                                                        ^
../gnulib/config.h:1693:72: note: use a cast to the expected type to disambiguate

We've not yet been able to determine where the ambiguity actually lies,
so this patch works around the issue by disabling _GL_ATTRIBUTE_DEALLOC
on Solaris, at least as a workaround for GDB 13.

As Tom suggested in the PR, this is done using our infrastructure for
local gnulib patches.

Tested on sparcv9-sun-solaris2.11, amd64-pc-solaris2.11, and
x86_64-pc-linux-gnu.

Approved-By: Simon Marchi <simon.marchi@efficios.com>
2 years agoFix sol-thread.c compilation on 32-bit Solaris
Rainer Orth [Sun, 20 Nov 2022 13:52:09 +0000 (14:52 +0100)]
Fix sol-thread.c compilation on 32-bit Solaris

sol-thread.c fails to compile on 32-bit Solaris: there are several
instances of

In file included from /vol/src/gnu/gdb/hg/master/local/gdb/../gdbsupport/common-defs.h:203,
                 from /vol/src/gnu/gdb/hg/master/local/gdb/defs.h:28,
                 from /vol/src/gnu/gdb/hg/master/local/gdb/sol-thread.c:51:
/vol/src/gnu/gdb/hg/master/local/gdb/sol-thread.c: In member function ‘virtual void sol_thread_target::resume(ptid_t, int, gdb_signal)’:
/vol/src/gnu/gdb/hg/master/local/gdb/sol-thread.c:416:20: error: format ‘%ld’ expects argument of type ‘long int’, but argument 2 has type ‘ULONGEST’ {aka ‘long long unsigned int’} [-Werror=format=]
  416 |         warning (_("Specified thread %ld seems to have terminated"),
      |                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/vol/src/gnu/gdb/hg/master/local/gdb/../gdbsupport/gdb_locale.h:28:29:
note: in definition of macro ‘_’
   28 | # define _(String) gettext (String)
      |                             ^~~~~~
/vol/src/gnu/gdb/hg/master/local/gdb/sol-thread.c:416:40: note: format
string is defined here
  416 |         warning (_("Specified thread %ld seems to have terminated"),
      |                                      ~~^
      |                                        |
      |                                        long int
      |                                      %lld

Fixed by using pulongest () instead.

Tested on i386-pc-solaris2.11, amd64-pc-solaris2.11,
sparc-sun-solaris2.11, and sparcv9-sun-solaris2.11 (together with
Simon's patch for PR build/29798).

2 years agoAutomatic date update in version.in
GDB Administrator [Sun, 20 Nov 2022 00:02:01 +0000 (00:02 +0000)]
Automatic date update in version.in

2 years agoAdd missing gdb_prompt in ctxobj.exp to avoid random failure, fix typo.
Philippe Waroquiers [Sat, 19 Nov 2022 14:55:33 +0000 (15:55 +0100)]
Add missing gdb_prompt in ctxobj.exp to avoid random failure, fix typo.

ctxobj.exp fails randomly when computer is loaded.
With the addition of $gdb_prompt in the regexp testing for breakpoint hit,
I could not make it fail anymore.

Also fixed a typo in a comment.

2 years agoShow locno for 'multi location' breakpoint hit msg+conv var $_hit_bbnum $_hit_locno...
Philippe Waroquiers [Sat, 23 May 2020 20:27:28 +0000 (22:27 +0200)]
Show locno for 'multi location' breakpoint hit msg+conv var $_hit_bbnum $_hit_locno PR breakpoints/12464

This implements the request given in PR breakpoints/12464.

Before this patch, when a breakpoint that has multiple locations is reached,
GDB printed:
  Thread 1 "zeoes" hit Breakpoint 1, some_func () at somefunc1.c:5

This patch changes the message so that bkpt_print_id prints the precise
encountered breakpoint:
  Thread 1 "zeoes" hit Breakpoint 1.2, some_func () at somefunc1.c:5

In mi mode, bkpt_print_id also (optionally) prints a new table field "locno":
  locno is printed when the breakpoint hit has more than one location.
Note that according to the GDB user manual node 'GDB/MI Development and Front
Ends', it is ok to add new fields without changing the MI version.

Also, when a breakpoint is reached, the convenience variables
$_hit_bpnum and $_hit_locno are set to the encountered breakpoint number
and location number.

$_hit_bpnum and $_hit_locno can a.o. be used in the command list of a
breakpoint, to disable the specific encountered breakpoint, e.g.
   disable $_hit_bpnum.$_hit_locno

In case the breakpoint has only one location, $_hit_locno is set to
the value 1, so as to allow a command such as:
  disable $_hit_bpnum.$_hit_locno
to disable the breakpoint even when the breakpoint has only one location.

This also fixes a strange behaviour: when a breakpoint X has only
one location,
  enable|disable X.1
is accepted but transforms the breakpoint in a multiple locations
breakpoint having only one location.

The changes in RFA v4 handle the comments of Tom Tromey:
 - Changed convenience var names from $bkptno/$locno to
   $_hit_bpnum/$_hit_locno.
 - updated the tests and user manual accordingly.
   User manual also explictly describes that $_hit_locno is set to 1
   for a breakpoint with a single location.
 - The variable values are now set in bpstat_do_actions_1 so that
   they are set for silent breakpoints, and when several breakpoints
   are hit at the same time, that the variables are set to the printed
   breakpoint.

The changes in RFA v3 handle the additional comments of Eli:
 GDB/NEW:
  - Use max 80-column
  - Use 'code location' instead of 'location'.
  - Fix typo $bkpno
  - Ensure that disable $bkptno and disable $bkptno.$locno have
    each their explanation inthe example
  - Reworded the 'breakpoint-hit' paragraph.
 gdb.texinfo:
  - Use 'code location' instead of 'location'.
  - Add a note to clarify the distinction between $bkptno and $bpnum.
  - Use @kbd instead of examples with only one command.

Compared to RFA v1, the changes in v2 handle the comments given by
Keith Seitz and Eli Zaretskii:
  - Use %s for the result of paddress
  - Use bkptno_numopt_re instead of 2 different -re cases
  - use C@t{++}
  - Add index entries for $bkptno and $locno
  - Added an example for "locno" in the mi interface
  - Added examples in the Break command manual.

2 years agoRISC-V: Add 'Ssstateen' extension and its CSRs
Tsukasa OI [Mon, 24 Oct 2022 10:08:15 +0000 (10:08 +0000)]
RISC-V: Add 'Ssstateen' extension and its CSRs

This commit adds 'Ssstateen' extension, which is a supervisor-visible view
of the 'Smstateen' extension.  It means, this extension implements sstateen*
and hstateen* CSRs of the 'Smstateen' extension.

Note that 'Smstateen' extension itself is unchanged but due to
implementation simplicity, it is implemented so that 'Smstateen' implies
'Ssstateen' (just like 'M' implies 'Zmmul').

This is based on the latest version of RISC-V Profiles
(version 0.9-draft, Frozen):
<https://github.com/riscv/riscv-profiles/commit/226b7f643067b29abc6723fac60d5f6d3f9eb901>

bfd/ChangeLog:

* elfxx-riscv.c (riscv_implicit_subsets): Update implication rules.
(riscv_supported_std_s_ext) Add 'Ssstateen' extension.

gas/ChangeLog:

* config/tc-riscv.c (enum riscv_csr_class): Rename
CSR_CLASS_SMSTATEEN_AND_H{,_32} to CSR_CLASS_SSSTATEEN_...
Add CSR_CLASS_SSSTATEEN.
(riscv_csr_address): Support new/renamed CSR classes.
* testsuite/gas/riscv/csr.s: Add 'Ssstateen' extension to comment.
* testsuite/gas/riscv/csr-version-1p9p1.l: Reflect changes to
error messages.
* testsuite/gas/riscv/csr-version-1p10.l: Likewise.
* testsuite/gas/riscv/csr-version-1p11.l: Likewise.
* testsuite/gas/riscv/csr-version-1p12.l: Likewise.
* testsuite/gas/riscv/ssstateen-csr.s: Test for 'Ssstateen' CSRs.
* testsuite/gas/riscv/ssstateen-csr.d: Likewise.
* testsuite/gas/riscv/smstateen-csr-s.d: Test to make sure that
supervisor/hypervisor part of 'Smstateen' CSRs are accessible from
'RV32IH_Smstateen', not just from 'RV32IH_Ssstateen' that is tested
in ssstateen-csr.d.

include/ChangeLog:

* opcode/riscv-opc.h: Update DECLARE_CSR declarations with
new CSR classes.

2 years agoAutomatic date update in version.in
GDB Administrator [Sat, 19 Nov 2022 00:00:38 +0000 (00:00 +0000)]
Automatic date update in version.in

2 years agogdbserver/linux-x86: move lwp declaration out of __x86_64__ region
Simon Marchi [Fri, 18 Nov 2022 17:14:54 +0000 (12:14 -0500)]
gdbserver/linux-x86: move lwp declaration out of __x86_64__ region

Commit 4855cbdc3d8f ("gdbserver/linux-x86: make is_64bit_tdesc accept
thread as a parameter") caused this when building in 32 bits / i386
mode:

      CXX    linux-x86-low.o
    In file included from /home/smarchi/src/binutils-gdb/gdbserver/linux-x86-low.cc:24:
    /home/smarchi/src/binutils-gdb/gdbserver/linux-x86-low.cc: In member function ‘virtual int x86_target::low_get_thread_area(int, CORE_ADDR*)’:
    /home/smarchi/src/binutils-gdb/gdbserver/linux-x86-low.cc:357:47: error: ‘lwp’ was not declared in this scope
      357 |     struct thread_info *thr = get_lwp_thread (lwp);
          |                                               ^~~
    /home/smarchi/src/binutils-gdb/gdbserver/linux-low.h:709:31: note: in definition of macro ‘get_lwp_thread’
      709 | #define get_lwp_thread(lwp) ((lwp)->thread)
          |                               ^~~

This is because it moved the lwp variable declaration inside the
__x86_64__ guard, making it unavailable when building in 32 bits mode.
Move the lwp variable outside of the __x86_64__ region.

Change-Id: I7fa3938c6b44b345c27a52c8b8d3ea12aba53e05

2 years agogdbserver: use current_process in ps_getpid
Simon Marchi [Thu, 17 Nov 2022 19:25:26 +0000 (14:25 -0500)]
gdbserver: use current_process in ps_getpid

The following patch ("gdbserver: switch to right process in
find_one_thread") makes it so find_one_thread calls into libthread_db
with a current process but no current thread.  This tripped on ps_getpid
using current_thread in order to get the process' pid.  Get the pid from
`current_process ()` instead, which removes the need to have a current
thread.  Eventually, it would be good to get it from the
gdb_ps_prochandle_t structure, to avoid the need for a current process
as well.

Reviewed-By: Andrew Burgess <aburgess@redhat.com>
Change-Id: I9d2fae266419199a2fbc2fde0a5104c6e0dbd2d5

2 years agogdbserver/linux-x86: make is_64bit_tdesc accept thread as a parameter
Simon Marchi [Tue, 15 Nov 2022 21:48:41 +0000 (16:48 -0500)]
gdbserver/linux-x86: make is_64bit_tdesc accept thread as a parameter

ps_get_thread_area receives as a parameter the lwpid it must work on.
It then calls is_64bit_tdesc, which uses the current_thread as the
thread to work on.  However, it is not said that both are the same.

This became a problem when working in a following patch that makes
find_one_thread switch to a process but to no thread (current_thread ==
nullptr).  When libthread_db needed to get the thread area,
is_64bit_tdesc would try to get the regcache of a nullptr thread.

Fix that by making is_64bit_tdesc accept the thread to work on as a
parameter.  Find the right thread from the context, when possible (when
we know the lwpid to work on).  Otherwise, pass "current_thread", to
retain the existing behavior.

Reviewed-By: Andrew Burgess <aburgess@redhat.com>
Change-Id: I44394d6be92392fa28de71982fd04517ce8a3007

2 years agogdbserver/linux: take condition out of callback in find_lwp_pid
Simon Marchi [Fri, 18 Nov 2022 16:09:11 +0000 (11:09 -0500)]
gdbserver/linux: take condition out of callback in find_lwp_pid

Just a small optimization, it's not necessary to recompute lwp at each
iteration.

While at it, change the variable type to long, as ptid_t::lwp returns a
long.

Reviewed-By: Andrew Burgess <aburgess@redhat.com>
Change-Id: I181670ce1f90b59cb09ea4899367750be2ad9105

2 years agoFix deletion of FinishBreakpoints
Johnson Sun [Thu, 20 Oct 2022 17:49:18 +0000 (01:49 +0800)]
Fix deletion of FinishBreakpoints

Currently, FinishBreakpoints are set at the return address of a frame based on
the `finish' command, and are meant to be temporary breakpoints. However, they
are not being cleaned up after use, as reported in PR python/18655. This was
happening because the disposition of the breakpoint was not being set
correctly.

This commit fixes this issue by correctly setting the disposition in the
post-stop hook of the breakpoint. It also adds a test to ensure this feature
isn't regressed in the future.

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

2 years agogdb: fix symtab.c build on 32 bit targets
Simon Marchi [Fri, 18 Nov 2022 15:48:03 +0000 (10:48 -0500)]
gdb: fix symtab.c build on 32 bit targets

When building on Ubuntu 22.04, gcc 12, x86-64 with -m32 and -O2, I get:

      CXX    symtab.o
    /home/smarchi/src/binutils-gdb/gdb/symtab.c: In member function â€˜std::vector<symbol_search> global_symbol_searcher::search() const’:
    /home/smarchi/src/binutils-gdb/gdb/symtab.c:4961:44: error: â€˜__builtin___sprintf_chk’ may write a terminating nul past the end of the destination [-Werror=format-overflow=]
     4961 |               sprintf (tmp, "operator%.*s%s", fix, " ", opname);
          |                                            ^
    In file included from /usr/include/stdio.h:894,
                     from ../gnulib/import/stdio.h:43,
                     from /home/smarchi/src/binutils-gdb/gdb/../gdbsupport/common-defs.h:86,
                     from /home/smarchi/src/binutils-gdb/gdb/defs.h:28,
                     from /home/smarchi/src/binutils-gdb/gdb/symtab.c:20:
    In function â€˜int sprintf(char*, const char*, ...)’,
        inlined from â€˜std::vector<symbol_search> global_symbol_searcher::search() const’ at /home/smarchi/src/binutils-gdb/gdb/symtab.c:4961:16:
    /usr/include/i386-linux-gnu/bits/stdio2.h:38:34: note: â€˜__builtin___sprintf_chk’ output between 9 and 2147483648 bytes into a destination of size 2147483647
       38 |   return __builtin___sprintf_chk (__s, __USE_FORTIFY_LEVEL - 1,
          |          ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
       39 |                                   __glibc_objsize (__s), __fmt,
          |                                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
       40 |                                   __va_arg_pack ());
          |                                   ~~~~~~~~~~~~~~~~~

PR build/29798 shows a similar error message but on Solaris.

Work around that by using string_printf.  It is a good thing to get rid
of the alloca anyway.

Change-Id: Ifbac11fee3062ad7f134d596b4e2229dc5d166f9
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29798

2 years agogdb/testsuite: rewrite gdb.cp/call-method-register.exp with dwarf assembler
Andrew Burgess [Thu, 27 Oct 2022 07:59:38 +0000 (08:59 +0100)]
gdb/testsuite: rewrite gdb.cp/call-method-register.exp with dwarf assembler

Convert the gdb.cp/call-method-register.exp test to make use of the
DWARF assembler.

The existing gdb.cp/call-method-register.exp test relies on a GCC
extension - forcing a local variable into a particular named register.

This means that the test will only work with Clang, and, as we have to
name the register into which the variable will be placed, will only
work for those targets where we've selected a suitable register,
currently this is x86-64, i386, and ppc64.

By switching to the DWARF assembler, the test will work with gcc and
clang, and should work on most, if not all, architectures.

The test creates a small structure, something that can fit within a
register, and then tries to call a method on the structure from within
GDB.  This should fail because GDB can't take the address of the in
register structure (for the `this` pointer).

As the test is for a failure case, then we don't really care _which_
register the structure is in, and I take advantage of this for the
DWARF assembler test, I just declare that the variable is in
DW_OP_reg0, whatever that might be.  I've tested the new test on
x86-64, ppc, aarch64, and risc-v, and the test runs, and passes on all
these architectures, which is already more than we used to cover.

Additionally, on x86-64, I've tested with Clang and gcc, and the test
runs and passed with both compilers.

Reviewed-By: Lancelot SIX <lancelot.six@amd.com>
2 years agogdb/testsuite: fix gdb.debuginfod/fetch_src_and_symbols.exp with Clang
Andrew Burgess [Fri, 11 Nov 2022 15:58:45 +0000 (15:58 +0000)]
gdb/testsuite: fix gdb.debuginfod/fetch_src_and_symbols.exp with Clang

The gdb.debuginfod/fetch_src_and_symbols.exp test is showing a single
failure when run with some older versions of Clang, e.g. 9.0.1.

The problem appears to be with Clang's generated line table.  The test
source looks like this:

  int
  main()
  {
    asm ("main_label: .globl main_label");
    return 0;
  }

In GDB, when we 'start', we expect to stop at the 'return 0;' line.
This is the behaviour when the compiler is gcc, or later versions of
Clang.

However, with Clang 9.0.2, I see GDB stop on the 'asm' line.

In this commit I'll fix this issue by placing a breakpoint on the
return line, and then using gdb_continue_to_breakpoint to ensure we
have stopped in the correct place.

Of course, using gdb_continue_to_breakpoint will only work if we are
not already stopped at the breakpoint location, so I've added some
filler work before the 'return 0;' line.  With this done we can use
gdb_continue_to_breakpoint in all cases.

As a result of adding the new filler work, one of the later tests,
that used the 'list' command, no longer see the correct expected
output (the top line of the source file is no longer included in the
output).  I've fixed this by listing a known specific line, the test
is checking that GDB managed to find the source file, it doesn't
matter which source line we list, as long as we can list something.

2 years agogdb/testsuite: rename source file gdb.debuginfod/main.c
Andrew Burgess [Thu, 17 Nov 2022 11:11:13 +0000 (11:11 +0000)]
gdb/testsuite: rename source file gdb.debuginfod/main.c

The test gdb.debuginfod/fetch_src_and_symbols.exp uses a source file
named main.c.  I can't see any particular reason why the file is named
as such.

Usually test source files are named after the test script.

This commit just renames the source file inline with the test script,
and updates the call to standard_testfile (removing the reference to
main.c).

There's no particular reason for this change other than seeing the
file named main.c made me thing that the source file must be shared
with some other test (it isn't).

There should be no change in what is tested after this commit.

2 years agogdb/testsuite: add (and use) a new build-id compile option
Andrew Burgess [Fri, 11 Nov 2022 15:51:34 +0000 (15:51 +0000)]
gdb/testsuite: add (and use) a new build-id compile option

I noticed that the gdb.debuginfod/fetch_src_and_symbols.exp test was
failing when run with Clang as the compiler.

This test relies on the compiled binaries having a build-id within
them.  For GCC, really GNU ld, the default is to always include a
build-id.

When compiling with Clang though, the default is for no build-id.

I did consider *always* turning on the build-id feature when the
compiler is Clang, but that felt a little weird.

Instead, I propose that we add a new 'build-id' compiler option to
gdb_compile, this flag indicates that the test _requires_ a build-id.
In gcc_compile we can then add the required flags if the compiler is
Clang so that we do get a build-id.

With this change the gdb.debuginfod/fetch_src_and_symbols.exp test
now (mostly) passes with Clang 9.0.1 and 15.0.2, and still passes with
gcc.  The 'mostly' part is an unrelated issue, and will be addressed
in a later commit in this series.

Reviewed-By: Lancelot SIX <lancelot.six@amd.com>
2 years agogdb/testsuite: fix gdb.compile/compile-ops.exp with clang
Andrew Burgess [Fri, 11 Nov 2022 15:35:05 +0000 (15:35 +0000)]
gdb/testsuite: fix gdb.compile/compile-ops.exp with clang

I noticed that the gdb.compile/compile-ops.exp test was failing when
run with Clang as the compiler.

This test makes use of the DWARF assembler, and, it turns out, uses
a technique which is not portable to Clang.   This problem is
described in the comment on the function_range proc in lib/dwarf.exp,
the explanation is:

  # If the compiler is gcc, we can do the following to get function start
  # and end address too:
  #
  # asm ("func_start: .globl func_start");
  # static void func (void) {}
  # asm ("func_end: .globl func_end");
  #
  # however, this isn't portable, because other compilers, such as clang,
  # may not guarantee the order of global asms and function.  The code
  # becomes:
  #
  # asm ("func_start: .globl func_start");
  # asm ("func_end: .globl func_end");
  # static void func (void) {}

These start/end labels are used for computing the function start, end,
and length.  The portable solution is to place a label within the
function, like this:

  #  int main (void)
  #  {
  #    asm ("main_label: .globl main_label");
  #    return 0;
  #  }

And make use of 'proc function_range' (from lib/dwarf.exp).

So, that's what I do in this commit.

One consequence of this change is that we need to compile the source
file, and have it loaded into a GDB session, before calling
function_range, so I've added an early call to prepare_for_testing.

Additionally, this test script was generating the DWARF assembler into
a file called gdbjit-ops.S, I suspect a copy and paste issue there, so
I've switched this to use compile-ops-dbg.S instead, which is more
inline with what other DWARF assembler tests do.

The only other change, which might be a problem, is that I also
deleted these two lines from the source file:

  asm (".section \".text\"");
  asm (".balign 8");

These lines were setting the alignment of the .text section.  What I
don't know is whether this was significant or not.  If it is
significant, then I can't see why.

On x86-64, the test still passes fine without these lines, but that
doesn't mean the test wont start failing on some other architecture.

Still, I figure, lets remove them, then, if/when we find a test that
starts failing, we can add the lines back, along with an explanation
for why the extra alignment is required.

But, if people would prefer to be more conservative, then I'm happy to
just add the lines back.

Reviewed-By: Lancelot SIX <lancelot.six@amd.com>
2 years agogdb/testsuite: fix gdb.trace/unavailable-dwarf-piece.exp with Clang
Andrew Burgess [Fri, 11 Nov 2022 15:26:46 +0000 (15:26 +0000)]
gdb/testsuite: fix gdb.trace/unavailable-dwarf-piece.exp with Clang

I noticed that the test gdb.trace/unavailable-dwarf-piece.exp was
failing when run with Clang.  Or rather, the test was not running as
the test executable failed to compile.

The problem is that Clang was emitting this warning:

  warning: argument unused during compilation: '-fdiagnostics-color=never' [-Wunused-command-line-argument]

This warning is emitted when compiling the assembler file generated
by the DWARF assembler.

Most DWARF assembler tests generate the assembler file into a file
with the '.S' extension.  However, this particular test uses a '.s'
extension.

Now a .S file will be passed through the preprocessor, while a .s will
be sent straight to the assembler.  My guess is that Clang doesn't
support the -fdiagnostics-color=never option for the assembler, but
does for the preprocessor.

That's a little annoying, but easily worked around.  We don't care if
our assembler file is passed through the preprocessor, so, in this
commit, I just change the file extension from .s to .S, and the
problem is fixed.

Currently, the unavailable-dwarf-piece.exp script names the assembler
file using standard_output_file, in this commit I've switched to make
use of standard_testfile, as that seems to be the more common way of
doing this sort of thing.

With these changes the test now passes with Clang 9.0.1 and 15.0.2,
and also still passes with gcc.

Reviewed-By: Lancelot SIX <lancelot.six@amd.com>