binutils-gdb.git
2 years agoppc/svp64: introduce SVP64 name parser
Dmitry Selyutin [Wed, 13 Jul 2022 12:22:56 +0000 (15:22 +0300)]
ppc/svp64: introduce SVP64 name parser

2 years agoppc/svp64: allow w/dw/sw macro expansion
Dmitry Selyutin [Sat, 9 Jul 2022 13:47:54 +0000 (16:47 +0300)]
ppc/svp64: allow w/dw/sw macro expansion

2 years agoppc/svp64: remap operands and build instructions
Dmitry Selyutin [Tue, 5 Jul 2022 19:30:40 +0000 (22:30 +0300)]
ppc/svp64: remap operands and build instructions

2 years agoppc/svp64: support SVP64 vectors
Dmitry Selyutin [Sun, 24 Jul 2022 13:18:29 +0000 (16:18 +0300)]
ppc/svp64: support SVP64 vectors

2 years agoppc: refactor assemling logic
Dmitry Selyutin [Sun, 19 Jun 2022 19:14:58 +0000 (22:14 +0300)]
ppc: refactor assemling logic

2 years agoppc/svp64: validate and fix modes
Dmitry Selyutin [Sun, 19 Jun 2022 17:59:19 +0000 (20:59 +0300)]
ppc/svp64: validate and fix modes

2 years agoppc/svp64: inroduce mode and bc fields
Dmitry Selyutin [Sun, 19 Jun 2022 17:27:12 +0000 (20:27 +0300)]
ppc/svp64: inroduce mode and bc fields

2 years agoppc/svp64: validate SVP64 context
Dmitry Selyutin [Sun, 19 Jun 2022 16:59:00 +0000 (19:59 +0300)]
ppc/svp64: validate SVP64 context

2 years agoppc/svp64: determine instruction Rc mode
Dmitry Selyutin [Mon, 25 Jul 2022 19:22:15 +0000 (22:22 +0300)]
ppc/svp64: determine instruction Rc mode

2 years agoppc/svp64: determine instruction type
Dmitry Selyutin [Mon, 25 Jul 2022 19:21:38 +0000 (22:21 +0300)]
ppc/svp64: determine instruction type

2 years agoppc/svp64: support svm mode
Dmitry Selyutin [Mon, 25 Jul 2022 19:17:12 +0000 (22:17 +0300)]
ppc/svp64: support svm mode

2 years agoppc/svp64: support crm mode
Dmitry Selyutin [Mon, 25 Jul 2022 19:16:19 +0000 (22:16 +0300)]
ppc/svp64: support crm mode

2 years agoppc/svp64: support mrr mode
Dmitry Selyutin [Mon, 25 Jul 2022 19:15:25 +0000 (22:15 +0300)]
ppc/svp64: support mrr mode

2 years agoppc/svp64: support mr mode
Dmitry Selyutin [Mon, 25 Jul 2022 19:14:29 +0000 (22:14 +0300)]
ppc/svp64: support mr mode

2 years agoppc/svp64: support ff/pr modes
Dmitry Selyutin [Sun, 19 Jun 2022 11:33:15 +0000 (14:33 +0300)]
ppc/svp64: support ff/pr modes

2 years agoppc/svp64: support w/dw/sw modes
Dmitry Selyutin [Sun, 19 Jun 2022 08:06:19 +0000 (11:06 +0300)]
ppc/svp64: support w/dw/sw modes

2 years agoppc/svp64: support vec2/vec3/vec4 modes
Dmitry Selyutin [Sun, 10 Jul 2022 06:30:03 +0000 (09:30 +0300)]
ppc/svp64: support vec2/vec3/vec4 modes

2 years agoppc/svp64: support m/dm/sm modes
Dmitry Selyutin [Sun, 19 Jun 2022 07:33:44 +0000 (10:33 +0300)]
ppc/svp64: support m/dm/sm modes

2 years agoppc/svp64: introduce svp64_decode stub
Dmitry Selyutin [Sun, 19 Jun 2022 06:01:35 +0000 (09:01 +0300)]
ppc/svp64: introduce svp64_decode stub

2 years agoppc/svp64: setup SVP64 opcodes table
Dmitry Selyutin [Sat, 18 Jun 2022 20:20:11 +0000 (23:20 +0300)]
ppc/svp64: setup SVP64 opcodes table

2 years agoopcodes: introduce SVP64 sources
Dmitry Selyutin [Sat, 18 Jun 2022 19:38:36 +0000 (22:38 +0300)]
opcodes: introduce SVP64 sources

2 years agoopcodes: introduce SVP64 headers
Dmitry Selyutin [Sat, 18 Jun 2022 19:38:22 +0000 (22:38 +0300)]
opcodes: introduce SVP64 headers

2 years agoppc/svp64: introduce svp64_assemble stub
Dmitry Selyutin [Sat, 18 Jun 2022 17:49:30 +0000 (20:49 +0300)]
ppc/svp64: introduce svp64_assemble stub

2 years agoppc: share pd_reg definition via libopcodes
Dmitry Selyutin [Wed, 29 Jun 2022 11:18:38 +0000 (14:18 +0300)]
ppc: share pd_reg definition via libopcodes

2 years agoppc/svp64: support svshape2 instruction
Dmitry Selyutin [Thu, 8 Sep 2022 17:38:29 +0000 (20:38 +0300)]
ppc/svp64: support svshape2 instruction

https://libre-soc.org/openpower/sv/
https://libre-soc.org/openpower/sv/remap/#svshape
https://libre-soc.org/openpower/sv/remap/#svshape2
https://libre-soc.org/openpower/isa/simplev/

2 years agoRISC-V: Set EF_RISCV_TSO also on .option arch
Tsukasa OI [Wed, 21 Sep 2022 06:23:55 +0000 (06:23 +0000)]
RISC-V: Set EF_RISCV_TSO also on .option arch

This is a minor fix to commit 96462b012988d35ebb1137a2ad9fd0a96547d79a
("RISC-V: Implement Ztso extension").  Currently, it sets EF_RISCV_TSO ELF
flag when initial ISA string contains the 'Ztso' extension.  However, GAS
has a way to update the ISA string: ".option arch".

When the architecture is updated by ".option arch", EF_RISCV_RVC ELF flag
is set when the 'C' extension is detected.  Analogously, this commit sets
the EF_RISCV_TSO when the 'Ztso' extension is detected.

gas/ChangeLog:

* config/tc-riscv.c (s_riscv_option): Set TSO ELF flag if the
'Ztso' extension is specified via ".option arch" directive.

2 years agoPR29573, addr2line doesn't display file/line for local symbols
Alan Modra [Wed, 21 Sep 2022 05:24:49 +0000 (14:54 +0930)]
PR29573, addr2line doesn't display file/line for local symbols

The DWARF standard is clear that DW_AT_linkage_name is optional.
Compilers may not provide the attribute on functions and variables,
even though the language mangles names.  g++ does not for local
variables and functions.  Without DW_AT_linkage_name, mangled object
file symbols can't be directly matched against the source-level
DW_AT_name in DWARF info.  One possibility is demangling the object
file symbols, but that comes with its own set of problems:
1) A demangler might not be available for the compiler/language.
2) Demangling doesn't give the source function name as stored in
   DW_AT_name.  Class and template parameters must be stripped at
   least.

So this patch takes a simpler approach.  A symbol matches DWARF info
if the DWARF address matches the symbol address, and if the symbol
name contains the DWARF name as a sub-string.  Very likely the name
matching is entirely superfluous.

PR 29573
* dwarf.c (lookup_symbol_in_function_table): Match a symbol
containing the DWARF source name as a substring.
(lookup_symbol_in_variable_table): Likewise.
(_bfd_dwarf2_find_nearest_line_with_alt): If stash_find_line_fast
returns false, fall back to comp_unit_find_line.

2 years agodwarf2.c: simplify best_fit_len tests
Alan Modra [Wed, 21 Sep 2022 05:17:31 +0000 (14:47 +0930)]
dwarf2.c: simplify best_fit_len tests

* dwarf2.c (lookup_address_in_function_table): Simplify
best_fit_len test.
(info_hash_lookup_funcinfo): Likewise.
(lookup_symbol_in_function_table): Likewise, also reorder tests
and check "file" is set.
(lookup_symbol_in_variable_table): Reorder tests.

2 years agodwarf2.c: mangle_style
Alan Modra [Wed, 21 Sep 2022 05:15:44 +0000 (14:45 +0930)]
dwarf2.c: mangle_style

non_mangled incorrectly returned "true" for Ada.  Correct that, and
add a few more non-mangled entries.  Return a value suitable for
passing to cplus_demangle to control demangling.

* dwarf2.c: Include demangle.h.
(mangle_style): Rename from non_mangled.  Return DMGL_* value
to suit lang.  Adjust all callers.

2 years agodwarf2.c remove varinfo and funcinfo sec field
Alan Modra [Wed, 21 Sep 2022 05:15:06 +0000 (14:45 +0930)]
dwarf2.c remove varinfo and funcinfo sec field

The "sec" field in these structures is only set and used in lookup
functions.  It always starts off as NULL.  So the only possible effect
of the field is to modify the return of the lookup, which was its
purpose back in 2005 when HJ fixed PR990.  Since then we solved the
problem of relocatable object files with the fix for PR2338, so this
field is now redundant.

* dwarf.c (struct funcinfo, struct varinfo): Remove "sec" field.
(lookup_symbol_in_function_table): Don't set or test "sec".
(lookup_symbol_in_variable_table): Likewise.
(info_hash_lookup_funcinfo, info_hash_lookup_varinfo): Likewise.

2 years agoconfigure: Pass CPPFLAGS_FOR_BUILD to subdirs
Tsukasa OI [Wed, 14 Sep 2022 12:28:02 +0000 (12:28 +0000)]
configure: Pass CPPFLAGS_FOR_BUILD to subdirs

Because CPPFLAGS_FOR_BUILD is used in some subdirectories (through
bfd/warning.m4), not AC_SUBSTing the variable causes minor issues.

Fortunately, it didn't cause severe errors but error messages related to
@CPPFLAGS_FOR_BUILD@ (not AC_SUBSTed CPPFLAGS_FOR_BUILD variable passed
to subdirectories through Makefile) remain in config.log.

To avoid invalid invocation of preprocessor for build environment, we
need to set proper CPPFLAGS_FOR_BUILD (may be empty) and pass it to
subdirectories that need it.  This is what this commit does.

ChangeLog:

* configure.ac: Pass CPPFLAGS_FOR_BUILD to subdirectories.
* configure: Regenerate.

2 years agoRISC-V: Implement Ztso extension
Shihua [Tue, 20 Sep 2022 09:45:04 +0000 (17:45 +0800)]
RISC-V: Implement Ztso extension

This patch support ZTSO extension. It will turn on the tso flag for elf_flags
once we have enabled Ztso extension.  This is intended to implement v0.1 of
the proposed specification which can be found in Chapter 25 of,
https://github.com/riscv/riscv-isa-manual/releases/download/draft-20220723-10eea63/riscv-spec.pdf.

bfd\ChangeLog:

        * elfnn-riscv.c (_bfd_riscv_elf_merge_private_bfd_data): Set TSO flag.
        * elfxx-riscv.c: Add Ztso's arch.

binutils\ChangeLog:

        * readelf.c (get_machine_flags): Set TSO flag.

gas\ChangeLog:

        * config/tc-riscv.c (riscv_set_tso): Ditto.
        (riscv_set_arch): Ditto.
        * testsuite/gas/riscv/ztso.d: New test.

include\ChangeLog:

        * elf/riscv.h (EF_RISCV_TSO): Ditto.

2 years agoRISC-V: Always generate R_RISCV_CALL_PLT reloc for call in assembler.
Nelson Chu [Wed, 14 Sep 2022 02:25:44 +0000 (10:25 +0800)]
RISC-V: Always generate R_RISCV_CALL_PLT reloc for call in assembler.

Since we have the same behaviors of CALL and CALL_PLT relocs in linker for now,
https://github.com/bminor/binutils-gdb/commit/3b1450b38c644f99aa2e211747b428b9f8d15cca

And the psabi already deprecate the CALL reloc,
https://github.com/riscv-non-isa/riscv-elf-psabi-doc/commit/a0dced85018d7a0ec17023c9389cbd70b1dbc1b0

Therefore, we should always generate R_RISCV_CALL_PLT reloc for call, even if
it has @plt postfix.  I believe LLVM (https://reviews.llvm.org/D132530) already
support this, so GNU as should do the same thing.

gas/
* config/tc-riscv.c (riscv_ip): Always generate CALL_PLT reloc for
call, even if it has @plt postfix.
* testsuite/gas/riscv/no-relax-reloc.d: Updated CALL to CALL_PLT.
* testsuite/gas/riscv/relax-reloc.d: Likewise.
ld/
* testsuite/ld-riscv-elf/variant_cc-r.d: Updated CALL to CALL_PLT.

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

2 years agoRe: PowerPC64 pcrel got relocs against local symbols
Alan Modra [Tue, 20 Sep 2022 23:36:29 +0000 (09:06 +0930)]
Re: PowerPC64 pcrel got relocs against local symbols

The last patch wasn't all that shiny.  There are rather a lot more
relocations that can hit the assertion in md_apply_fix if the symbol
is local or absolute.  Fix them all.

* config/tc-ppc.c (ppc_force_relocation): Add all relocs that
expect a symbol in md_apply_fix.  Remove tls pcrel relocs
already covered in general tls match range.

2 years agolooping in alpha_vms_slurp_relocs
Alan Modra [Mon, 19 Sep 2022 01:07:57 +0000 (10:37 +0930)]
looping in alpha_vms_slurp_relocs

The direct cause for the looping was failing to test for error return
from _bfd_vms_get_object_record inside a while(1) loop.  Fix that.
Also record status of first alpha_vms_slurp_relocs call and return
that for all subsequent calls.  (The object format has one set of
relocation records for all sections.)  If the first call fails, all
others should too.

* vms-alpha.c (struct vms_private_data_struct): Make reloc_done
a tri-state int.
(alpha_vms_slurp_relocs): Set reloc_done to 1 on success, -1 on
failure.  Return that status on subsequent calls.  Check
_bfd_vms_get_object_record return status.
(alpha_vms_get_reloc_upper_bound): Return status from
alpha_vms_slurp_relocs.
(alpha_vms_write_exec): Exclude sections with contents NULL due
to previous errors from layout, and don't try to write them.

2 years agoppc/svp64: test setvl ms operand
Dmitry Selyutin [Tue, 20 Sep 2022 21:26:50 +0000 (00:26 +0300)]
ppc/svp64: test setvl ms operand

2 years agoMake stdin_event_handler static
Tom Tromey [Fri, 26 Aug 2022 22:48:24 +0000 (16:48 -0600)]
Make stdin_event_handler static

I noticed that stdin_event_handler is only used in event-top.c, so
this patch changes it to be 'static'.

2 years agoConstify some target_so_ops instances
Tom Tromey [Mon, 8 Aug 2022 17:00:50 +0000 (11:00 -0600)]
Constify some target_so_ops instances

This changes some target_so_ops instances to be const.  This makes
their use a little more obvious (they can't be mutated) and also
allows for the removal of some initialization code.

2 years agoMove solib_ops into gdbarch
Tom Tromey [Mon, 8 Aug 2022 16:41:43 +0000 (10:41 -0600)]
Move solib_ops into gdbarch

This changs solib_ops to be an ordinary gdbarch value and updates all
the uses.  This removes a longstanding FIXME and makes the code
somewhat cleaner as well.

2 years agoRemove current_target_so_ops
Tom Tromey [Mon, 8 Aug 2022 16:14:53 +0000 (10:14 -0600)]
Remove current_target_so_ops

current_target_so_ops is only set in a single place.  It seems better
to simply remove it.

2 years agogdb/testsuite: add a debuginfod-support.exp helper library
Andrew Burgess [Wed, 7 Sep 2022 11:34:00 +0000 (12:34 +0100)]
gdb/testsuite: add a debuginfod-support.exp helper library

We currently have a single test for GDB's debuginfod support, this is
gdb.debuginfod/fetch_src_and_symbols.exp, this script does all the
setup, starts debuginfod, and then does the testing.

This commit tries to split the existing script in two, there is a new
library lib/debuginfod-support.exp, which contains a helper functions
related to running debuginfod tests.  All the code in the new library
is basically copied from the existing test case (which is why I
retained the copyright date range on the new library), with some minor
adjustments to try and make the code a little more generic.

One change I made, for example, is the library offers functions to
shut down debuginfod, previously we just relied on expect shutting
down debuginfod when dejagnu completed.

The existing test script is updated to make use of the new library
code, and this test is still passing for me.  The only change in the
test results is a single test where I changed the name to remove the
port number from the test name - the port number can change from run
to run, so could make it hard to compare test results.

I have also done a little light house keeping on the original test
script, updating and adding new comments, and making use of
proc_with_prefix in a couple of places.

2 years agoLoongArch: Set macro SUB_SEGMENT_ALIGN to 0.
liuzhensong [Thu, 4 Aug 2022 06:49:40 +0000 (14:49 +0800)]
LoongArch: Set macro SUB_SEGMENT_ALIGN to 0.

2 years agoStop strip from complaining about empty note sections when stripping a binary for...
Nick Clifton [Tue, 20 Sep 2022 10:46:32 +0000 (11:46 +0100)]
Stop strip from complaining about empty note sections when stripping a binary for a second time.

* objcopy.c (copy_object): Do not issue a warning message when
encountering empty .gnu.build.attribute sections.

2 years agoNew Serbian translations for various binutils sub-directories.
Nick Clifton [Tue, 20 Sep 2022 10:33:16 +0000 (11:33 +0100)]
New Serbian translations for various binutils sub-directories.

2 years agoBug 29580 - typo in warning message: .note.gnu.build-id data size is too bug
Zeke Lu [Tue, 20 Sep 2022 10:19:06 +0000 (11:19 +0100)]
Bug 29580 - typo in warning message: .note.gnu.build-id data size is too bug

2 years agoLoongArch: Fix R_LARCH_IRELATIVE insertion after elf_link_sort_relocs
Xi Ruoyao [Tue, 20 Sep 2022 06:09:30 +0000 (14:09 +0800)]
LoongArch: Fix R_LARCH_IRELATIVE insertion after elf_link_sort_relocs

loongarch_elf_finish_dynamic_symbol is called after elf_link_sort_relocs
if -z combreloc.  elf_link_sort_relocs redistributes the contents of
.rela.* sections those would be merged into .rela.dyn, so the slot for
R_LARCH_IRELATIVE may be out of relplt->contents now.

To make things worse, the boundary check

    dyn < dyn + relplt->size / sizeof (*dyn)

is obviously wrong ("x + 10 < x"? :), causing the issue undetected
during the linking process and the resulted executable suddenly crashes
at runtime.

The issue was found during an attempt to add static-pie support to the
toolchain.

Fix it by iterating through the inputs of .rela.dyn to find the slot.

2 years agoLoongArch: Don't write into GOT for local ifunc
Xi Ruoyao [Tue, 20 Sep 2022 06:09:29 +0000 (14:09 +0800)]
LoongArch: Don't write into GOT for local ifunc

Local ifuncs are always resolved at runtime via R_LARCH_IRELATIVE, so
there is no need to write anything into GOT.  And when we write the GOT
we actually trigger a heap-buffer-overflow: If a and b are different
sections, we cannot access something in b with "a->contents + (offset
from a)" because "a->contents" and "b->contents" are heap buffers
allocated separately, not slices of a large buffer.

So stop writing into GOT for local ifunc now.

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

2 years agogprofng: build documentation only if BUILD_MAN is true
Vladimir Mezentsev [Fri, 16 Sep 2022 20:19:38 +0000 (13:19 -0700)]
gprofng: build documentation only if BUILD_MAN is true

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

PR gprofng/29476
* gprofng/Makefile.am: Build documentation only if BUILD_MAN is true
* gprofng/Makefile.in: Rebuild.
* gprofng/configure: Rebuild.

2 years agogdb: add ATTRIBUTE_PRINTF to gdb_bfd_error_handler
Enze Li [Mon, 19 Sep 2022 12:43:50 +0000 (20:43 +0800)]
gdb: add ATTRIBUTE_PRINTF to gdb_bfd_error_handler

I see this error when building with clang,

  CXX    gdb_bfd.o
gdb_bfd.c:1180:43: error: format string is not a string literal [-Werror,-Wformat-nonliteral]
  const std::string str = string_vprintf (fmt, ap_copy);
                                          ^~~
1 error generated.

This patch adds missing ATTRIBUTE_PRINTF to fix the error.

Tested on x86_64-linux with gcc 12 and clang 14.

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

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

2 years ago[gdb/symtab] Fix "file index out of range" complaint
Tom de Vries [Sat, 17 Sep 2022 06:22:32 +0000 (08:22 +0200)]
[gdb/symtab] Fix "file index out of range" complaint

With the test-case included in this commit, we run into this FAIL:
...
(gdb) p var^M
During symbol reading: file index out of range^M
$1 = 0^M
(gdb) FAIL: gdb.dwarf2/dw2-no-code-cu.exp: p var with no complaints
...

This is a regression since commit 6d263fe46e0 ("Avoid bad breakpoints with
--gc-sections"), which contains this change in read_file_scope:
...
-  handle_DW_AT_stmt_list (die, cu, fnd, lowpc);
+  if (lowpc != highpc)
+    handle_DW_AT_stmt_list (die, cu, fnd, lowpc);
...

The change intends to avoid a problem with a check in
lnp_state_machine::check_line_address, but also prevents the file and dir
tables from being read, which causes the complaint.

Fix the FAIL by reducing the scope of the "lowpc != highpc" condition to the
call to dwarf_decode_lines in handle_DW_AT_stmt_list.

Tested on x86_64-linux.

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

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

2 years agoBFD error message suppression test case
Kevin Buettner [Fri, 16 Sep 2022 23:13:30 +0000 (16:13 -0700)]
BFD error message suppression test case

This commit adds a GDB test case which tests GDB's BFD error handler
hook for suppressing output of all but the first identical messages.

See the comment at the beginning of bfd-errors.exp for details about
this new test.

I've tested this test for both 32- and 64-bit ELF files and also
on both little endian and big endian machines.  It also works for
both native and remote targets.  The only major restriction is that
it only works for ELF targets.

2 years agoSuppress printing of superfluous BFD error messages
Kevin Buettner [Fri, 16 Sep 2022 23:13:29 +0000 (16:13 -0700)]
Suppress printing of superfluous BFD error messages

This commit adds a hook to the BFD error handler for suppressing
identical messages which have been output once already.

It's motivated by this Fedora bug...

https://bugzilla.redhat.com/show_bug.cgi?id=2083315

...in which over 900,000 BFD error messages are output when attaching
to firefox.  From the bug report, the messages all say:

BFD: /usr/lib/debug/usr/lib64/firefox/libxul.so-100.0-2.fc35.x86_64.debug: attempt to load strings from a non-string section (number 38)

Since there's no (additional) context which might assist the user in
determining what's wrong, there's really no point in outputting more
than one message.  Of course, if BFD should output some
other/different message, it should be output too, but all future
messages identical to those already output should be suppressed.

For the firefox problem, it turned out that there were only 37
sections, but something was referring to section #38.  I haven't
investigated further to find out how this came to be.

Despite this problem, useful debugging might still be done, especially
if the user doesn't care about debugging the problematic library.

If it turns out that knowing the quantity of messages might be useful,
I've implemented the suppression mechanism by keeping a count of each
identical message.  A new GDB command, perhaps a 'maintenance'
command, could be added to print out each message along with the
count.  I haven't implemented this though because I'm not convinced of
its utility.  Also, the BFD message printer has support for BFD-
specific format specifiers.  The BFD message strings that GDB stores
in its map are sufficient for distinguishing messages from each
other, but are not identical to those output by BFD's default error
handler.  So, that problem would need to be solved too.

2 years ago[gdb/symtab] Handle named DW_TAG_unspecified_type DIE
Tom de Vries [Fri, 16 Sep 2022 15:14:34 +0000 (17:14 +0200)]
[gdb/symtab] Handle named DW_TAG_unspecified_type DIE

With the test-case included in the patch, we run into:
...
(gdb) info types -q std::nullptr_t^M
During symbol reading: unsupported tag: 'DW_TAG_unspecified_type'^M
^M
File /usr/include/c++/7/x86_64-suse-linux/bits/c++config.h:^M
2198:   typedef decltype(nullptr) std::nullptr_t;^M
(gdb) FAIL: gdb.dwarf2/nullptr_t.exp: info types -q std::nullptr_t \
  without complaint
...

Fix the complaint by handling DW_TAG_unspecified_type in new_symbol, and verify
in the test-case using "maint print symbols" that the symbol exists.

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

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

2 years ago[gdb/tdep] Fix PowerPC IEEE 128-bit format arg passing
Tom de Vries [Fri, 16 Sep 2022 14:40:56 +0000 (16:40 +0200)]
[gdb/tdep] Fix PowerPC IEEE 128-bit format arg passing

On a powerpc system with gcc 12 built to default to 128-bit IEEE long double,
I run into:
...
(gdb) print find_max_long_double_real(4, ldc1, ldc2, ldc3, ldc4)^M
$8 = 0 + 0i^M
(gdb) FAIL: gdb.base/varargs.exp: print \
  find_max_long_double_real(4, ldc1, ldc2, ldc3, ldc4)
...

This is due to incorrect handling of the argument in ppc64_sysv_abi_push_param.

Fix this and similar cases, and expand the test-case to test handling of
homogeneous aggregates.

Tested on ppc64le-linux, power 10.

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

2 years ago[gdb/testsuite] Fix gdb.dwarf2/dw2-dir-file-name.exp for aarch64
Tom de Vries [Fri, 16 Sep 2022 14:34:13 +0000 (16:34 +0200)]
[gdb/testsuite] Fix gdb.dwarf2/dw2-dir-file-name.exp for aarch64

[ Another attempt at fixing the problem described in commit cd919f5533c
("[gdb/testsuite] Fix gdb.dwarf2/dw2-dir-file-name.exp"). ]

When running the test-case gdb.dwarf2/dw2-dir-file-name.exp with
aarch64-linux, we run into:
...
(gdb) continue^M
Continuing.^M
^M
Breakpoint 2, compdir_missing__ldir_missing__file_basename () at \
  tmp-dw2-dir-file-name.c:999^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 breakpoint set at compdir_missing__ldir_missing__file_basename_label,
address 0x400608 starts at a line entry:
...
CU: tmp-dw2-dir-file-name.c:
File name                    Line number    Starting address    View    Stmt
tmp-dw2-dir-file-name.c              999            0x400608               x
tmp-dw2-dir-file-name.c             1000            0x40062c               x
tmp-dw2-dir-file-name.c                -            0x40062c
...
and therefore the breakpoint is printed without instruction address.

In contrast, for x86_64-linux, we have the breakpoint printed with instruction
address:
...
(gdb) continue^M
Continuing.^M
^M
Breakpoint 2, 0x004004c1 in compdir_missing__ldir_missing__file_basename () \
  at tmp-dw2-dir-file-name.c:999^M
(gdb) PASS: gdb.dwarf2/dw2-dir-file-name.exp: \
  compdir_missing__ldir_missing__file_basename: continue to breakpoint: \
  compdir_missing__ldir_missing__file_basename
...

The breakpoint set at compdir_missing__ldir_missing__file_basename_label,
address 0x004004c1 doesn't start at a line entry:
...
CU: tmp-dw2-dir-file-name.c:
File name                    Line number    Starting address    View    Stmt
tmp-dw2-dir-file-name.c              999            0x4004bd               x
tmp-dw2-dir-file-name.c             1000            0x4004d3               x
tmp-dw2-dir-file-name.c                -            0x4004d3
...

Fix this by:
- unifying behaviour between the archs by adding an explicit line number entry
  for the address compdir_missing__ldir_missing__file_basename_label, making
  the FAIL reproducible on x86_64-linux.
- expecting the breakpoint to be printed without instruction address.

Tested on x86_64-linux and aarch64-linux.

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.