]> git.ipfire.org Git - thirdparty/binutils-gdb.git/log
thirdparty/binutils-gdb.git
2 years ago[gdb] Add maint selftest -verbose option
Tom de Vries [Wed, 22 Sep 2021 09:47:50 +0000 (11:47 +0200)] 
[gdb] Add maint selftest -verbose option

The print_one_insn selftest in gdb/disasm-selftests.c contains:
...
  /* If you want to see the disassembled instruction printed to gdb_stdout,
     set verbose to true.  */
  static const bool verbose = false;
...

Make this parameter available in the maint selftest command using a new option
-verbose, such that we can do:
...
(gdb) maint selftest -verbose print_one_insn
...

Tested on x86_64-linux.

2 years agodwarf2 sub-section test
Alan Modra [Tue, 21 Sep 2021 23:34:00 +0000 (09:04 +0930)] 
dwarf2 sub-section test

This is a testcase for the bug fixed by commit 5b4846283c3d.  When
running the testcase on ia64 targets I found timeouts along with lots
of memory being consumed, due to ia64 gas not tracking text
sub-sections.  Trying to add nops for ".nop 16" in ".text 1" resulting
in them being added to subsegment 0, with no increase to subsegment 1
size.  This patch also fixes that problem.

Note that the testcase fails on ft32-elf, mn10200-elf, score-elf,
tic5x-elf, and xtensa-elf.  The first two are relocation errors, the
last three appear to be the .nop directive failing to emit the right
number of nops.  I didn't XFAIL any of them.

* config/tc-ia64.c (md): Add last_text_subseg.
(ia64_flush_insns, dot_endp): Use last_text_subseg.
(ia64_frob_label, md_assemble): Set last_text_subseg.
* testsuite/gas/elf/dwarf2-21.d,
* testsuite/gas/elf/dwarf2-21.s: New test.
* testsuite/gas/elf/elf.exp: Run it.

2 years agoFix x86 "FAIL: TLS -fno-pic -shared"
Alan Modra [Wed, 22 Sep 2021 00:52:21 +0000 (10:22 +0930)] 
Fix x86 "FAIL: TLS -fno-pic -shared"

Fix a typo in commit 5d0869d9872a

* testsuite/ld-i386/tlsnopic.rd: Typo fix.

2 years agoAutomatic date update in version.in
GDB Administrator [Wed, 22 Sep 2021 00:00:07 +0000 (00:00 +0000)] 
Automatic date update in version.in

2 years agoChange the linker's heuristic for computing the entry point for binaries so that...
Nick Clifton [Tue, 21 Sep 2021 12:21:41 +0000 (13:21 +0100)] 
Change the linker's heuristic for computing the entry point for binaries so that shared libraries default to an entry point of 0.

* ldlang.c (lang_end): When computing the entry point, only
try the start address of the entry section when creating an
executable.
* ld.texi (Entry point): Update description of heuristic used to
choose the entry point.
testsuite/ld-alpha/tlspic.rd: Update expected entry point address.
testsuite/ld-arm/tls-gdesc-got.d: Likewise.
testsuite/ld-i386/tlsnopic.rd: Likewise.
testsuite/ld-ia64/tlspic.rd: Likewise.
testsuite/ld-sparc/gotop32.rd: Likewise.
testsuite/ld-sparc/gotop64.rd: Likewise.
testsuite/ld-sparc/tlssunnopic32.rd: Likewise.
testsuite/ld-sparc/tlssunnopic64.rd: Likewise.
testsuite/ld-sparc/tlssunpic32.rd: Likewise.
testsuite/ld-sparc/tlssunpic64.rd: Likewise.
testsuite/ld-tic6x/shlib-1.rd: Likewise.
testsuite/ld-tic6x/shlib-1b.rd: Likewise.
testsuite/ld-tic6x/shlib-1r.rd: Likewise.
testsuite/ld-tic6x/shlib-1rb.rd: Likewise.
testsuite/ld-tic6x/shlib-noindex.rd: Likewise.
testsuite/ld-x86-64/pr14207.d: Likewise.
testsuite/ld-x86-64/tlsdesc.rd: Likewise.
testsuite/ld-x86-64/tlspic.rd: Likewise.
testsuite/ld-x86-64/tlspic2.rd: Likewise.

2 years ago[gdb/testsuite] Handle supports_memtag in gdb.base/gdb-caching-proc.exp
Tom de Vries [Tue, 21 Sep 2021 10:06:35 +0000 (12:06 +0200)] 
[gdb/testsuite] Handle supports_memtag in gdb.base/gdb-caching-proc.exp

In test-case gdb.base/gdb-caching-proc.exp, we run all procs declared with
gdb_caching_proc.  Some of these require a gdb instance, some not.

We could just do a clean_restart every time, but that would amount to 44 gdb
restarts.  We try to minimize this by doing this only for the few procs that
need it, and hardcoding those in the test-case.

For those procs, we do a clean_restart, execute the proc, and then do a
gdb_exit, to make sure the gdb instance doesn't linger such that we detect
procs that need a gdb instance but are not listed in the test-case.

However, that doesn't work in the case of gnat_runtime_has_debug_info.  This
proc doesn't require a gdb instance because it starts its own.  But it doesn't
clean up the gdb instance, and since it's not listed, the test-case
doesn't clean up the gdb instance eiter.  Consequently, the proc
supports_memtag (which should be listed, but isn't) uses the gdb instance
started by gnat_runtime_has_debug_info rather than throwing an error.  Well,
unless gnat_runtime_has_debug_info fails before starting a gdb instance, in
which case we do run into the error.

Fix this by:
- doing gdb_exit unconditionally
- fixing the resulting error by adding supports_memtag in the test-case to
  the "needing gdb instance" list

Tested on x86_64-linux.

2 years agogdb, doc: Add ieee_half and bfloat16 to list of predefined target types.
Felix Willgerodt [Tue, 14 Sep 2021 14:34:22 +0000 (16:34 +0200)] 
gdb, doc: Add ieee_half and bfloat16 to list of predefined target types.

For some reason these two weren't added to the list when they were orginally
added to GDB.

gdb/doc/ChangeLog:
2021-09-21  Felix Willgerodt  <felix.willgerodt@intel.com>

* gdb.texinfo (Predefined Target Types): Mention ieee_half and bfloat16.

2 years agoAutomatic date update in version.in
GDB Administrator [Tue, 21 Sep 2021 00:00:08 +0000 (00:00 +0000)] 
Automatic date update in version.in

2 years ago[gdb/testsuite] Fix gdb.ada/interface.exp with gcc-9
Tom de Vries [Mon, 20 Sep 2021 22:54:08 +0000 (00:54 +0200)] 
[gdb/testsuite] Fix gdb.ada/interface.exp with gcc-9

When running test-case gdb.ada/interface.exp with gcc-9, we run into:
...
(gdb) info locals^M
s = (x => 1, y => 2, w => 3, h => 4)^M
r = (x => 1, y => 2, w => 3, h => 4)^M
(gdb) FAIL: gdb.ada/interface.exp: info locals
...

The failure is caused by the regexp expecting variable r followed by
variable s.

Fix this by allowing variable s followed by variable r as well.

Tested on x86_64-linux.

2 years ago[gdb/testsuite] Fix gdb.ada/mi_prot.exp
Tom de Vries [Mon, 20 Sep 2021 22:41:26 +0000 (00:41 +0200)] 
[gdb/testsuite] Fix gdb.ada/mi_prot.exp

When running test-case gdb.ada/mi_prot.exp with gcc 8.5.0, we run into:
...
(gdb) ^M
Expecting: ^(-stack-list-arguments --no-frame-filters 1[^M
]+)?(\^done,stack=.*[^M
]+[(]gdb[)] ^M
[ ]*)
-stack-list-arguments --no-frame-filters 1^M
^done,stack-args=[frame={level="0",args=[{name="<_object>",value="(ceiling_priority =\
> 97, local => 0)"},{name="v",value="5"},{name="<_objectO>",value="true"}]},frame={le\
vel="1",args=[{name="v",value="5"},{name="<_objectO>",value="true"}]},frame={level="2\
",args=[]}]^M
(gdb) ^M
FAIL: gdb.ada/mi_prot.exp: -stack-list-arguments --no-frame-filters 1 (unexpected out\
put)
...

Fix this by updating the regexp to expect "^done,stack-args=" instead of
"^done,stack=".

Tested on x86_64-linux.

2 years ago[gdb/testsuite] Register test for each arch separately in register_test_foreach_arch
Tom de Vries [Mon, 20 Sep 2021 22:41:26 +0000 (00:41 +0200)] 
[gdb/testsuite] Register test for each arch separately in register_test_foreach_arch

In gdb/disasm-selftests.c we have:
...
  selftests::register_test_foreach_arch ("print_one_insn",
                                         selftests::print_one_insn_test);
...
and we get:
...
$ gdb -q -batch -ex "maint selftest print_one_insn" 2>&1 \
  | grep ^Running
Running selftest print_one_insn.
$
...

Change the semantics register_test_foreach_arch such that a version of
print_one_insn is registered for each architecture, such that we have:
...
$ gdb -q -batch -ex "maint selftest print_one_insn" 2>&1 \
  | grep ^Running
Running selftest print_one_insn::A6.
Running selftest print_one_insn::A7.
Running selftest print_one_insn::ARC600.
  ...
$
...

This makes it f.i. possible to do:
...
$ gdb -q -batch a.out -ex "maint selftest print_one_insn::armv8.1-m.main"
Running selftest print_one_insn::armv8.1-m.main.
Self test failed: self-test failed at src/gdb/disasm-selftests.c:165
Ran 1 unit tests, 1 failed
...

Tested on x86_64-linux with an --enable-targets=all build.

2 years ago[gdb] Change register_test to use std::function arg
Tom de Vries [Mon, 20 Sep 2021 22:41:26 +0000 (00:41 +0200)] 
[gdb] Change register_test to use std::function arg

Change register_test to use std::function arg, such that we can do:
...
  register_test (test_name, [=] () { SELF_CHECK (...); });
...

Tested on x86_64-linux.

2 years ago[gdb/testsuite] Fix gdb.ada/big_packed_array.exp xfail for -m32
Tom de Vries [Mon, 20 Sep 2021 13:07:57 +0000 (15:07 +0200)] 
[gdb/testsuite] Fix gdb.ada/big_packed_array.exp xfail for -m32

With test-case gdb.ada/big_packed_array.exp and target board unix/-m32 I run
into:
...
(gdb) print bad^M
$2 = (0 => 0 <repeats 24 times>, 160)^M
(gdb) FAIL: gdb.ada/big_packed_array.exp: scenario=minimal: print bad
...

The problem is that while the variable is an array of 196 bits (== 24.5 bytes),
the debug information describes it as 25 unsigned char.  This is PR
gcc/101643, and the test-case contains an xfail for this, which catches only:
...
(gdb) print bad^M
$2 = (0 => 0 <repeats 25 times>)^M
...

Fix this by updating the xfail pattern.

Tested on x86_64-linux.

2 years agogdbsupport/gdb_proc_service.h: use decltype instead of typeof
Simon Marchi [Mon, 20 Sep 2021 01:06:10 +0000 (21:06 -0400)] 
gdbsupport/gdb_proc_service.h: use decltype instead of typeof

Bug 28341 shows that GDB fails to compile when built with -std=c++11.
I don't know much about the use case, but according to the author of the
bug:

    I encountered the scenario where CXX is set to "g++ -std=c++11" when
    I try to compile binutils under GCC as part of the GCC 3-stage
    compilation, which is common for building a cross-compiler.

The author of the bug suggests using __typeof__ instead of typeof.  But
since we're using C++, we might as well use decltype, which is standard.
This is what this patch does.

The failure (and fix) can be observed by configuring GDB with CXX="g++
-std=c++11":

      CXX    linux-low.o
    In file included from /home/simark/src/binutils-gdb/gdbserver/gdb_proc_service.h:22,
     from /home/simark/src/binutils-gdb/gdbserver/linux-low.h:27,
     from /home/simark/src/binutils-gdb/gdbserver/linux-low.cc:20:
    /home/simark/src/binutils-gdb/gdbserver/../gdbsupport/gdb_proc_service.h:177:50: error: expected constructor, destructor, or type conversion before (token
      177 |   __attribute__((visibility ("default"))) typeof (SYM) SYM
  |                                                  ^
    /home/simark/src/binutils-gdb/gdbserver/../gdbsupport/gdb_proc_service.h:179:1: note: in expansion of macro PS_EXPORT
      179 | PS_EXPORT (ps_get_thread_area);
  | ^~~~~~~~~

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

2 years agoriscv: print .2byte or .4byte before an unknown instruction encoding
Andrew Burgess [Sat, 18 Sep 2021 09:42:41 +0000 (10:42 +0100)] 
riscv: print .2byte or .4byte before an unknown instruction encoding

When the RISC-V disassembler encounters an unknown instruction, it
currently just prints the value of the bytes, like this:

  Dump of assembler code for function custom_insn:
     0x00010132 <+0>: addi sp,sp,-16
     0x00010134 <+2>: sw s0,12(sp)
     0x00010136 <+4>: addi s0,sp,16
     0x00010138 <+6>: 0x52018b
     0x0001013c <+10>: 0x9c45

My proposal, in this patch, is to change the behaviour to this:

  Dump of assembler code for function custom_insn:
     0x00010132 <+0>: addi sp,sp,-16
     0x00010134 <+2>: sw s0,12(sp)
     0x00010136 <+4>: addi s0,sp,16
     0x00010138 <+6>: .4byte 0x52018b
     0x0001013c <+10>: .2byte 0x9c45

Adding the .4byte and .2byte opcodes.  The benefit that I see here is
that in the patched version of the tools, the disassembler output can
be fed back into the assembler and it should assemble to the same
binary format.  Before the patch, the disassembler output is invalid
assembly.

I've started a RISC-V specific test file under binutils so that I can
add a test for this change.

binutils/ChangeLog:

* testsuite/binutils-all/riscv/riscv.exp: New file.
* testsuite/binutils-all/riscv/unknown.d: New file.
* testsuite/binutils-all/riscv/unknown.s: New file.

opcodes/ChangeLog:

* riscv-dis.c (riscv_disassemble_insn): Print a .%dbyte opcode
before an unknown instruction, '%d' is replaced with the
instruction length.

2 years agoFix allocate_filenum last dir/file checks
Alan Modra [Mon, 20 Sep 2021 02:45:20 +0000 (12:15 +0930)] 
Fix allocate_filenum last dir/file checks

* dwarf2dbg.c (allocate_filenum) Correct use of last_used_dir_len.

2 years agoRe: PR28149, debug info with wrong file association
Alan Modra [Mon, 20 Sep 2021 02:00:41 +0000 (11:30 +0930)] 
Re: PR28149, debug info with wrong file association

Fixes segfaults when building aarch64-linux kernel, due to only doing
part of the work necessary when allocating file numbers late.  I'd
missed looping over subsegments, which resulted in some u.filename
entries left around and later interpreted as u.view.

PR 28149
* dwarf2dbg.c (purge_generated_debug): Iterate over subsegs too.
(dwarf2_finish): Call do_allocate_filenum for all subsegs too,
in a separate loop before subsegs are chained.

2 years agoMove eelf_mipsel_haiki.c to ALL_64_EMULATION_SOURCES
Alan Modra [Sun, 19 Sep 2021 02:47:48 +0000 (12:17 +0930)] 
Move eelf_mipsel_haiki.c to ALL_64_EMULATION_SOURCES

--enable-targets=all on a 32-bit host results in a link failure with
undefined references due to elfxx-mips.c not being compiled.  This
patch fixes that by putting eelf_mipsel_haiki.c in the correct
EMULATION_SOURCES Makefile variable.  I've also added a bunch of
missing file dependencies and sorted a few things so that it's easier
to verify dependencies are present.

* Makfile.am: Add missing haiku dependencies, sort.
(ALL_EMULATION_SOURCES): Sort.  Move eelf_mipsel_haiku.c to..
(ALL_64_EMULATION_SOURCES): ..here.  Sort.
* Makfile.in: Regenerate.

2 years agoAutomatic date update in version.in
GDB Administrator [Mon, 20 Sep 2021 00:00:06 +0000 (00:00 +0000)] 
Automatic date update in version.in

2 years agoelf: Don't set version info on unversioned symbols
H.J. Lu [Sat, 18 Sep 2021 16:12:27 +0000 (09:12 -0700)] 
elf: Don't set version info on unversioned symbols

Don't set version info on unversioned symbols when seeing a hidden
versioned symbol after an unversioned definition and the default
versioned symbol.

bfd/

PR ld/28348
* elflink.c (elf_link_add_object_symbols): Don't set version info
on unversioned symbols.

ld/

PR ld/28348
* testsuite/ld-elf/pr28348.rd: New file.
* testsuite/ld-elf/pr28348.t: Likewise.
* testsuite/ld-elf/pr28348a.c: Likewise.
* testsuite/ld-elf/pr28348b.c: Likewise.
* testsuite/ld-elf/pr28348c.c: Likewise.
* testsuite/ld-elf/shared.exp: Run PR ld/28348 tests.

2 years agogdb: manual: update @inforef to @xref
Mike Frysinger [Sat, 18 Sep 2021 18:55:54 +0000 (14:55 -0400)] 
gdb: manual: update @inforef to @xref

The @inforef command is deprecated, and @xref does the samething.
Also had to update the text capitalization to match current manual.
Verified that info & HTML links work.

2 years agoCTF: multi-CU and archive support
Weimin Pan [Sun, 19 Sep 2021 00:41:29 +0000 (20:41 -0400)] 
CTF: multi-CU and archive support

Now gdb is capable of debugging executable, which consists of multiple
compilation units (CUs) with the CTF debug info. An executable could
potentially have one or more archives, which, in CTF context, contain
conflicting types.

all changes were made in ctfread.c in which elfctf_build_psymtabs was
modified to handle archives, via the ctf archive iterator and its callback
build_ctf_archive_member and scan_partial_symbols was modified to scan
archives, which are treated as subfiles, to build the psymtabs.

Also changes were made to handle CTF's data object section and function
info section which now share the same format of their contents - an array
of type IDs. New functions ctf_psymtab_add_stt_entries, which is called by
ctf_psymtab_add_stt_obj and ctf_psymtab_add_stt_func, and add_stt_entries,
which is called by add_stt_obj and add_stt_func when setting up psymtabs
and full symtab, respectively.

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

2 years ago[gdb/testsuite] Fix gdb.server/server-kill.exp with -m32
Tom de Vries [Sat, 18 Sep 2021 15:19:06 +0000 (17:19 +0200)] 
[gdb/testsuite] Fix gdb.server/server-kill.exp with -m32

When running test-case gdb.server/server-kill.exp with target board unix/-m32,
I run into:
...
0xf7fd6b20 in _start () from /lib/ld-linux.so.2^M
(gdb) Executing on target: kill -9 13082    (timeout = 300)
builtin_spawn -ignore SIGHUP kill -9 13082^M
bt^M
(gdb) FAIL: gdb.server/server-kill.exp: kill_pid_of=server: test_unwind_syms: bt
...

The test-case expects the backtrace command to trigger remote communication,
which then should result in a "Remote connection closed" or similar.

However, no remote communication is triggered, because we hit the "Check that
this frame is unwindable" case in get_prev_frame_always_1.

We don't hit this problem in the kill_pid_of=inferior case, because there we
run to main before doing the backtrace.

Fix this by doing the same in the kill_pid_of=server case.

Tested on x86_64-linux.

2 years ago[gdb/ada] Handle artificial local symbols
Tom de Vries [Sat, 18 Sep 2021 07:25:49 +0000 (09:25 +0200)] 
[gdb/ada] Handle artificial local symbols

With current master and gcc 7.5.0/8.5.0, we have this timeout:
...
(gdb) print s^M
Multiple matches for s^M
[0] cancel^M
[1] s at src/gdb/testsuite/gdb.ada/interface/foo.adb:20^M
[2] s at src/gdb/testsuite/gdb.ada/interface/foo.adb:?^M
> FAIL: gdb.ada/interface.exp: print s (timeout)
...

[ The FAIL doesn't reproduce with gcc 9.3.1.  This difference in
behaviour bisects to gcc commit d70ba0c10de.

The FAIL with earlier gcc bisects to gdb commit ba8694b650b. ]

The FAIL is caused by gcc generating this debug info describing a named
artificial variable:
...
 <2><1204>: Abbrev Number: 31 (DW_TAG_variable)
    <1205>   DW_AT_name        : s.14
    <1209>   DW_AT_type        : <0x1213>
    <120d>   DW_AT_artificial  : 1
    <120d>   DW_AT_location    : 5 byte block: 91 e0 7d 23 18   \
      (DW_OP_fbreg: -288; DW_OP_plus_uconst: 24)
...

An easy way to fix this would be to simply not put named artificial variables
into the symbol table.  However, that causes regressions for Ada.  It relies
on being able to get the value from such variables, using a named reference.

Fix this instead by marking the symbol as artificial, and:
- ignoring such symbols in ada_resolve_variable, which fixes the FAIL
- ignoring such ada symbols in do_print_variable_and_value, which prevents
  them from showing up in "info locals"

Note that a fix for the latter was submitted here (
https://sourceware.org/pipermail/gdb-patches/2008-January/054994.html ), and
this patch borrows from it.

Tested on x86_64-linux.

Co-Authored-By: Joel Brobecker <brobecker@adacore.com>
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28180

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

2 years agoPR28149 part 2, purge generated line info
Alan Modra [Thu, 16 Sep 2021 23:51:21 +0000 (09:21 +0930)] 
PR28149 part 2, purge generated line info

Mixing compiler generated line info with gas generated line info is
generally just confusing.  Also .loc directives with non-zero view
fields might reference a previous .loc.  It becomes a little more
tricky to locate that previous .loc if there might be gas generated
line info present too.  Mind you, we turn off gas generation of line
info on seeing compiler generated line info, so any reference back
won't hit gas generated line info.  At least, if the view info is
sane.  Unfortunately, gas needs to handle mangled source.

PR 28149
* dwarf2dbg.c (purge_generated_debug): New function.
(dwarf2_directive_filename): Call the above.
(out_debug_line): Don't segfault after purging.
* testsuite/gas/i386/dwarf2-line-4.d: Update expected output.
* testsuite/gas/i386/dwarf4-line-1.d: Likewise.
* testsuite/gas/i386/dwarf5-line-1.d: Likewise.
* testsuite/gas/i386/dwarf5-line-2.d: Likewise.

2 years agoPR28149, debug info with wrong file association
Alan Modra [Thu, 16 Sep 2021 23:38:15 +0000 (09:08 +0930)] 
PR28149, debug info with wrong file association

gcc-11 and gcc-12 pass -gdwarf-5 to gas, in order to prime gas for
DWARF 5 level debug info.  Unfortunately it seems there are cases
where the compiler does not emit a .file or .loc dwarf debug directive
before any machine instructions.  (Note that the .file directive
typically emitted as the first line of assembly output doesn't count as
a dwarf debug directive.  The dwarf .file has a file number before the
file name string.)

This patch delays allocation of file numbers for gas generated line
debug info until the end of assembly, thus avoiding any clashes with
compiler generated file numbers.  Two fixes for test case source are
necessary;  A .loc can't use a file number that hasn't already been
specified with .file.

A followup patch will remove all the gas generated line info on
seeing a .file directive.

PR 28149
* dwarf2dbg.c (num_of_auto_assigned): Delete.
(current): Update initialisation.
(set_or_check_view): Replace all accesses to view with u.view.
(dwarf2_consume_line_info): Likewise.
(dwarf2_directive_loc): Likewise.  Assert that we aren't generating
line info.
(dwarf2_gen_line_info_1): Don't call set_or_check_view on
gas generated line entries.
(dwarf2_gen_line_info): Set and track filenames for gas generated
line entries.  Simplify generation of labels.
(get_directory_table_entry): Use filename_cmp when comparing dirs.
(do_allocate_filenum): New function.
(dwarf2_where): Set u.filename and filenum to -1 for gas generated
line entries.
(dwarf2_directive_filename): Remove num_of_auto_assigned handling.
(process_entries): Update view field access.  Call
do_allocate_filenum.
* dwarf2dbg.h (struct dwarf2_line_info): Add filename field in
union aliasing view.
* testsuite/gas/i386/dwarf2-line-3.s: Add .file directive.
* testsuite/gas/i386/dwarf2-line-4.s: Likewise.
* testsuite/gas/i386/dwarf2-line-4.d: Update expected output.
* testsuite/gas/i386/dwarf4-line-1.d: Likewise.
* testsuite/gas/i386/dwarf5-line-1.d: Likewise.
* testsuite/gas/i386/dwarf5-line-2.d: Likewise.

2 years ago[GOLD] PowerPC64 support for sym+addend GOT entries
Alan Modra [Thu, 26 Aug 2021 02:47:51 +0000 (12:17 +0930)] 
[GOLD] PowerPC64 support for sym+addend GOT entries

Pass addends to all the GOT handling functions, plus remove some
extraneous asserts.

PR 28192
* powerpc.cc (Output_data_got_powerpc): Add addend parameter to
all methods creating got entries.
(Target_powerpc::Scan::local): Pass reloc addend to got handling
functions, and when creating dynamic got relocations.
(Target_powerpc::Scan::global): Likewise.
(Target_powerpc::Relocate::relocate): Likewise.  Remove extraneous
assertions.

2 years ago[GOLD] Got_entry::write addends
Alan Modra [Wed, 25 Aug 2021 12:28:51 +0000 (21:58 +0930)] 
[GOLD] Got_entry::write addends

This takes care of writing out GOT entries with addends.  The local
symbol case was already largely handled, except for passing the addend
to tls_offset_for_local which might need the addend in a
local_got_offset call.  That's needed also in tls_offset_for_global.

I'm assuming here that GOT entries for function symbols won't ever
have addends, and in particular that a GOT entry referencing PLT call
stub code won't want an offset into the code.

PR 28192
* output.cc (Output_data_got::Got_entry::write): Include addend
in global symbol value.  Pass addend to tls_offset_for_*.
* powerpc.cc (Target_powerpc::do_tls_offset_for_local): Handle addend.
(Target_powerpc::do_tls_offset_for_global): Likewise.
* s390.cc (Target_s390::do_tls_offset_for_local): Likewise.
(Target_s390::do_tls_offset_for_global): Likewise.
* target.h (Target::tls_offset_for_local): Add addend param.
(Target::tls_offset_for_global): Likewise.
(Target::do_tls_offset_for_local): Likewise.
(Target::do_tls_offset_for_global): Likewise.

2 years ago[GOLD] Output_data_got create entry method addends
Alan Modra [Wed, 25 Aug 2021 10:54:18 +0000 (20:24 +0930)] 
[GOLD] Output_data_got create entry method addends

This patch makes all the Output_data_got methods that create new
entries accept an optional addend.

PR 28192
* output.h (Output_data_got::add_global): Add optional addend
parameter.  Update comment.  Delete overload without addend.
(Output_data_got::add_global_plt): Likewise.
(Output_data_got::add_global_tls): Likewise.
(Output_data_got::add_global_with_rel): Likewise.
(Output_data_got::add_global_pair_with_rel): Likewise.
(Output_data_got::add_local_plt): Likewise.
(Output_data_got::add_local_tls): Likewise.
(Output_data_got::add_local_tls_pair): Likewise.
(Output_data_got::reserve_local): Likewise.
(Output_data_got::reserve_global): Likewise.
(Output_data_got::Got_entry): Include addend in global sym
constructor.  Delete local sym constructor without addend.
* output.cc (Output_data_got::add_global): Add addend param,
pass to got handling methods.
(Output_data_got::add_global_plt): Likewise.
(Output_data_got::add_global_with_rel): Likewise.
(Output_data_got::add_global_pair_with_rel): Likewise.
(Output_data_got::add_local_plt): Likewise.
(Output_data_got::add_local_tls_pair): Likewise.
(Output_data_got::reserve_local): Likewise.
(Output_data_got::reserve_global): Likewise.

2 years ago[GOLD] Output_data_got tidy
Alan Modra [Sat, 28 Aug 2021 05:15:53 +0000 (14:45 +0930)] 
[GOLD] Output_data_got tidy

Some Output_data_got methods already have support for addends, but
were implemented as separate methods.  This removes unnecessary code
duplication.

Relobj::local_has_got_offset and others there get a similar treatment.
Comments are removed since it should be obvious without a comment, and
the existing comments are not precisely what the code does.  For
example, a local_has_got_offset call without an addend does not return
whether the local symbol has *a* GOT offset of type GOT_TYPE, it
returns whether there is a GOT entry of type GOT_TYPE for the symbol
with addend of zero.

PR 28192
* output.h (Output_data_got::add_local): Make addend optional.
(Output_data_got::add_local_with_rel): Likewise.
(Output_data_got::add_local_pair_with_rel): Likewise.
* output.cc (Output_data_got::add_local): Delete overload
without addend.
(Output_data_got::add_local_with_rel): Likewise.
(Output_data_got::add_local_pair_with_rel): Likewise.
* object.h (Relobj::local_has_got_offset): Make addend optional.
Delete overload without addend later.  Update comment.
(Relobj::local_got_offset): Likewise.
(Relobj::set_local_got_offset): Likewise.

2 years ago[GOLD] Remove addend from Local_got_entry_key
Alan Modra [Sat, 28 Aug 2021 04:53:33 +0000 (14:23 +0930)] 
[GOLD] Remove addend from Local_got_entry_key

This patch removes the addend from Local_got_entry_key, which is
unnecessary now that Got_offset_list has an addend.  Note that it
might be advantageous to keep the addend in Local_got_entry_key when
linking objects containing a large number of section_sym+addend@got
relocations.  I opted to save some memory by removing the field but
left the class there in case we might need to restore {sym,addend}
lookup.  That's also why this change is split out from the
Got_offset_list change.

PR 28192
* object.h (Local_got_entry_key): Delete addend_ field.
Adjust constructor and methods to suit.
* object.cc (Sized_relobj::do_for_all_local_got_entries):
Update key.

2 years ago[GOLD] Got_offset_list: addend field
Alan Modra [Thu, 5 Aug 2021 05:02:56 +0000 (14:32 +0930)] 
[GOLD] Got_offset_list: addend field

This is the first in a series of patches aimed at supporting GOT
entries against symbol plus addend generally for PowerPC64 rather than
just section symbol plus addend as gold has currently.

This patch adds an addend field to Got_offset_list, so that both local
and global symbols can have GOT entries with addend.

PR 28192
* object.h (Got_offset_list): Add addend_ field, init in both
constructors.  Adjust all accessors to suit.
(Sized_relobj::do_local_has_got_offset): Adjust to suit.
(Sized_relobj::do_local_got_offset): Likewise.
(Sized_relobj::do_set_local_got_offset): Likewise.
* symtab.h (Symbol::has_got_offset): Add optional addend param.
(Symbol::got_offset, Symbol::set_got_offset): Likewise.
* incremental.cc (Local_got_offset_visitor::visit): Add unused
uint64_t parameter with FIXME.
(Global_got_offset_visitor::visit): Add unused uint64_t parameter.

2 years agoFix segfault when running ia16-elf-gdb
Henry Castro [Sat, 21 Aug 2021 18:14:37 +0000 (14:14 -0400)] 
Fix segfault when running ia16-elf-gdb

"A problem internal to GDB has been detected,
further debugging may prove unreliable."

Segmentation fault

2 years agoRISC-V: Merged extension string tables and their version tables into one.
Nelson Chu [Thu, 16 Sep 2021 06:36:54 +0000 (14:36 +0800)] 
RISC-V: Merged extension string tables and their version tables into one.

There are two main reasons for this patch,

* In the past we had two extension tables, one is used to record all
supported extensions in bfd/elfxx-riscv.c, another is used to get the
default extension versions in gas/config/tc-riscv.c.  It is hard to
maintain lots of tables in different files, but in fact we can merge
them into just one table.  Therefore, we now define many riscv_supported_std*
tables, which record names and versions for all supported extensions.
We not only use these tables to initialize the riscv_ext_order, but
also use them to get the default versions of extensions, and decide if
the extensions should be enbaled by default.

* We add a new filed `default_enable' for the riscv_supported_std* tables,
to decide if the extension should be enabled by default.  For now if the
`default_enable' field of the extension is set to EXT_DEFAULT, then we
should enable the extension when the -march and elf architecture attributes
are not set.  In the future, I suppose the `default_enable' can be set
to lots of EXT_<VENDOR>, each vendor can decide to open which extensions,
when the target triple of vendor is chosen.

The elf/linux regression tests of riscv-gnu-toolchain are passed.

bfd/
* elfnn-riscv.c (cpu-riscv.h): Removed sine it is included in
bfd/elfxx-riscv.h.
(riscv_merge_std_ext): Updated since the field of rpe is changed.
* elfxx-riscv.c (cpu-riscv.h): Removed.
(riscv_implicit_subsets): Added implicit extensions for g.
(struct riscv_supported_ext): Used to be riscv_ext_version.  Moved
from gas/config/tc-riscv.c, and added new field `default_enable' to
decide if the extension should be enabled by default.
(EXT_DEFAULT): Defined for `default_enable' field.
(riscv_supported_std_ext): It used to return the supported standard
architecture string, but now we move ext_version_table from
gas/config/tc-riscv.c to here, and rename it to riscv_supported_std_ext.
Currently we not only use the table to initialize riscv_ext_order, but
also get the default versions of extensions, and decide if the extensions
should be enbaled by default.
(riscv_supported_std_z_ext): Likewise, but is used for z* extensions.
(riscv_supported_std_s_ext): Likewise, but is used for s* extensions.
(riscv_supported_std_h_ext): Likewise, but is used for h* extensions.
(riscv_supported_std_zxm_ext): Likewise, but is used for zxm* extensions.
(riscv_all_supported_ext): Includes all supported extension tables.
(riscv_known_prefixed_ext): Updated.
(riscv_valid_prefixed_ext): Updated.
(riscv_init_ext_order): Init the riscv_ext_order table according to
riscv_supported_std_ext.
(riscv_get_default_ext_version): Moved from gas/config/tc-riscv.c.
Get the versions of extensions from riscv_supported_std* tables.
(riscv_parse_add_subset): Updated.
(riscv_parse_std_ext): Updated.
(riscv_set_default_arch): Set the default subset list according to
the default_enable field of riscv_supported_*ext tables.
(riscv_parse_subset): If the input ARCH is NULL, then we call
riscv_set_default_arch to set the default subset list.
* elfxx-riscv.h (cpu-riscv.h): Included.
(riscv_parse_subset_t): Removed get_default_version field, and added
isa_spec field to replace it.
(extern riscv_supported_std_ext): Removed.
gas/
* (bfd/cpu-riscv.h): Removed.
(struct riscv_ext_version): Renamed and moved to bfd/elfxx-riscv.c.
(ext_version_table): Likewise.
(riscv_get_default_ext_version): Likewise.
(ext_version_hash): Removed.
(init_ext_version_hash): Removed.
(riscv_set_arch): Updated since the field of rps is changed.  Besides,
report error when the architecture string is empty.
(riscv_after_parse_args): Updated.

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

2 years ago[gdb/testsuite] Fix interrupted sleep in multi-threaded test-cases
Tom de Vries [Thu, 16 Sep 2021 12:27:01 +0000 (14:27 +0200)] 
[gdb/testsuite] Fix interrupted sleep in multi-threaded test-cases

When running test-case gdb.threads/continue-pending-status.exp with native, I
have:
...
(gdb) continue^M
Continuing.^M
PASS: gdb.threads/continue-pending-status.exp: attempt 0: continue for ctrl-c
^C^M
Thread 1 "continue-pendin" received signal SIGINT, Interrupt.^M
[Switching to Thread 0x7ffff7fc4740 (LWP 1276)]^M
0x00007ffff758e4c0 in __GI___nanosleep () at nanosleep.c:27^M
27        return SYSCALL_CANCEL (nanosleep, requested_time, remaining);^M
(gdb) PASS: gdb.threads/continue-pending-status.exp: attempt 0: caught interrupt
...
but with target board unix/-m32, I run into:
...
(gdb) continue^M
Continuing.^M
PASS: gdb.threads/continue-pending-status.exp: attempt 0: continue for ctrl-c
[Thread 0xf74aeb40 (LWP 31957) exited]^M
[Thread 0xf7cafb40 (LWP 31956) exited]^M
[Inferior 1 (process 31952) exited normally]^M
(gdb) Quit^M
...

The problem is that the sleep (300) call at the end of main is interrupted,
which causes the inferior to exit before the ctrl-c can be send.

This problem is described at "Interrupted System Calls" in the docs, and the
suggested solution (using a sleep loop) indeed fixes the problem.

Fix this instead using the more prevalent:
...
  alarm (300);
  ...
  while (1) sleep (1);
...
which is roughly equivalent because the sleep is called at the end of main,
but slightly better because it guards against hangs from the start rather than
from the end of main.

Likewise in gdb.base/watch_thread_num.exp.

Likewise in gdb.btrace/enable-running.exp, but use the sleep loop there,
because the sleep is not called at the end of main.

Tested on x86_64-linux.

2 years agogdb: manual: fix werrors typo
Mike Frysinger [Thu, 16 Sep 2021 00:55:09 +0000 (20:55 -0400)] 
gdb: manual: fix werrors typo

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

2 years ago[gdb/testsuite] Use function_range in gdb.dwarf2/dw2-abs-hi-pc.exp
Tom de Vries [Wed, 15 Sep 2021 13:53:18 +0000 (15:53 +0200)] 
[gdb/testsuite] Use function_range in gdb.dwarf2/dw2-abs-hi-pc.exp

When I run test-case gdb.dwarf2/dw2-abs-hi-pc.exp with gcc, we have:
...
(gdb) break hello^M
Breakpoint 1 at 0x4004c0: file dw2-abs-hi-pc-hello.c, line 24.^M
(gdb) PASS: gdb.dwarf2/dw2-abs-hi-pc.exp: break hello
...
but with clang, I run into:
...
(gdb) break hello^M
Breakpoint 1 at 0x4004e4^M
(gdb) FAIL: gdb.dwarf2/dw2-abs-hi-pc.exp: break hello
...

The problem is that the CU and function both have an empty address range:
...
 <0><d2>: Abbrev Number: 1 (DW_TAG_compile_unit)
    <108>   DW_AT_name        : dw2-abs-hi-pc-hello.c
    <123>   DW_AT_low_pc      : 0x4004e0
    <127>   DW_AT_high_pc     : 0x4004e0
 <1><12f>: Abbrev Number: 2 (DW_TAG_subprogram)
    <131>   DW_AT_name        : hello
    <13a>   DW_AT_low_pc      : 0x4004e0
    <13e>   DW_AT_high_pc     : 0x4004e0
...

The address ranges are set like this in dw2-abs-hi-pc-hello-dbg.S:
...
        .4byte  .hello_start    /* DW_AT_low_pc */
        .4byte  .hello_end      /* DW_AT_high_pc */
...
where the labels refer to dw2-abs-hi-pc-hello.c:
...
extern int v;

asm (".hello_start: .globl .hello_start\n");
void
hello (void)
{
asm (".hello0: .globl .hello0\n");
  v++;
asm (".hello1: .globl .hello1\n");
}
asm (".hello_end: .globl .hello_end\n");
...

Using asm labels in global scope is a known source of problems, as explained
in the comment of proc function_range in gdb/testsuite/lib/dwarf.exp.

Fix this by using function_range instead.

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

2 years agoarc: Fix got-weak linker test
Claudiu Zissulescu [Wed, 15 Sep 2021 10:43:40 +0000 (13:43 +0300)] 
arc: Fix got-weak linker test

Use regular expressions to fix the got-weak linker test.

ld/
* testsuite/got-weak.d: Update test.

Signed-off-by: Claudiu Zissulescu <claziss@synopsys.com>
2 years agobfd: fix incorrect type used in sizeof
Andrew Burgess [Wed, 15 Sep 2021 10:24:49 +0000 (11:24 +0100)] 
bfd: fix incorrect type used in sizeof

Noticed in passing that we used 'sizeof (char **)' when calculating
the size of a list of 'char *' pointers.  Of course, this isn't really
going to make a difference anywhere, but we may as well be correct.

There should be no user visible changes after this commit.

bfd/ChangeLog:

* archures.c (bfd_arch_list): Use 'char *' instead of 'char **'
when calculating space for a string list.

2 years ago[gdb/doc] Fix typo in maint selftest entry
Tom de Vries [Wed, 15 Sep 2021 09:46:57 +0000 (11:46 +0200)] 
[gdb/doc] Fix typo in maint selftest entry

Fix typo "will by" -> "will be".

2 years ago[bfd] Ensure unique printable names for bfd archs
Tom de Vries [Wed, 15 Sep 2021 08:10:46 +0000 (10:10 +0200)] 
[bfd] Ensure unique printable names for bfd archs

Remove duplicate entry in bfd_ft32_arch and bfd_rx_arch.

Fix printable name for bfd_mach_n1: "nh1" -> "n1".

PR 28336
* cpu-ft32.c (arch_info_struct): Remove "ft32" entry.
* cpu-rx.c (arch_info_struct): Remove "rx" entry.
* cpu-nds32.c (bfd_nds32_arch): Fix printable name for bfd_mach_n1
entry.

2 years agoPR28328, dlltool ice
Alan Modra [Fri, 10 Sep 2021 09:21:30 +0000 (18:51 +0930)] 
PR28328, dlltool ice

PR 28328
* archive.c (bfd_ar_hdr_from_filesystem): Don't use bfd_set_input_error
here, our caller will do that.

2 years agoAutomatic date update in version.in
GDB Administrator [Wed, 15 Sep 2021 00:00:07 +0000 (00:00 +0000)] 
Automatic date update in version.in

2 years ago[gdb/testsuite] Fix gdb_load_no_complaints with gnu-debuglink
Tom de Vries [Tue, 14 Sep 2021 12:52:38 +0000 (14:52 +0200)] 
[gdb/testsuite] Fix gdb_load_no_complaints with gnu-debuglink

When running test-case gdb.dwarf2/dw2-ranges-psym-warning.exp with target
board gnu-debuglink I run into:
...
(gdb) file dw2-ranges-psym-warning^M
Reading symbols from dw2-ranges-psym-warning...^M
Reading symbols from .debug/dw2-ranges-psym-warning.debug...^M
(gdb) FAIL: gdb.dwarf2/dw2-ranges-psym-warning.exp: No complaints
...

Fix this by updating the regexp in gdb_load_no_complaints.

Tested on x86_64-linux.

2 years ago[gdb/symtab] Fix function range handling in psymtabs
Tom de Vries [Tue, 14 Sep 2021 12:41:27 +0000 (14:41 +0200)] 
[gdb/symtab] Fix function range handling in psymtabs

Consider the test-case from this patch.

We run into:
...
(gdb) PASS: gdb.dwarf2/dw2-ranges-psym-warning.exp: continue
bt^M
warning: (Internal error: pc 0x4004b6 in read in psymtab, but not in symtab.)^M
^M
warning: (Internal error: pc 0x4004b6 in read in psymtab, but not in symtab.)^M
^M
warning: (Internal error: pc 0x4004b6 in read in psymtab, but not in symtab.)^M
^M
warning: (Internal error: pc 0x4004b6 in read in psymtab, but not in symtab.)^M
^M
warning: (Internal error: pc 0x4004b6 in read in psymtab, but not in symtab.)^M
^M
warning: (Internal error: pc 0x4004b6 in read in psymtab, but not in symtab.)^M
^M
  read in psymtab, but not in symtab.)^M
^M
)^M
(gdb) FAIL: gdb.dwarf2/dw2-ranges-psym-warning.exp: bt
...

This happens as follows.

The function foo:
...
 <1><31>: Abbrev Number: 4 (DW_TAG_subprogram)
    <33>   DW_AT_name        : foo
    <37>   DW_AT_ranges      : 0x0
...
has these ranges:
...
    00000000 00000000004004c1 00000000004004d2
    00000000 00000000004004ae 00000000004004af
    00000000 <End of list>
...
which have a hole at at [0x4004af,0x4004c1).

However, the address map of the partial symtabs incorrectly maps addresses
in the hole (such as 0x4004b6 in the backtrace) to the foo CU.

The address map of the full symbol table of the foo CU however does not
contain the addresses in the hole, which is what the warning / internal error
complains about.

Fix this by making sure that ranges of functions are read correctly.

The patch adds a bit to struct partial_die_info, in this hole (shown for
x86_64-linux):
...
/*   11: 7   |     4 */    unsigned int canonical_name : 1;
/* XXX  4-byte hole  */
/*   16      |     8 */    const char *raw_name;
...
So there's no increase in size for 64-bit, but AFAIU there will be an increase
for 32-bit.

Tested on x86_64-linux.

gdb/ChangeLog:

2021-08-10  Tom de Vries  <tdevries@suse.de>

PR symtab/28200
* dwarf2/read.c (struct partial_die_info): Add has_range_info and
range_offset field.
(add_partial_subprogram): Handle pdi->has_range_info.
(partial_die_info::read): Set pdi->has_range_info.

gdb/testsuite/ChangeLog:

2021-08-10  Tom de Vries  <tdevries@suse.de>

PR symtab/28200
* gdb.dwarf2/dw2-ranges-psym-warning-main.c: New test.
* gdb.dwarf2/dw2-ranges-psym-warning.c: New test.
* gdb.dwarf2/dw2-ranges-psym-warning.exp: New file.

2 years ago[gdb/symtab] Fix CU list in .debug_names for dummy CUs
Tom de Vries [Tue, 14 Sep 2021 10:57:58 +0000 (12:57 +0200)] 
[gdb/symtab] Fix CU list in .debug_names for dummy CUs

With current trunk and target board cc-with-debug-names we have:
...
(gdb) file dw2-ranges-psym^M
Reading symbols from dw2-ranges-psym...^M
warning: Section .debug_names in dw2-ranges-psym has abbreviation_table of \
  size 1 vs. written as 28, ignoring .debug_names.^M
(gdb) set complaints 0^M
(gdb) FAIL: gdb.dwarf2/dw2-ranges-psym.exp: No complaints
...

The executable has 8 compilation units:
...
$ readelf -wi dw2-ranges-psym | grep @
  Compilation Unit @ offset 0x0:
  Compilation Unit @ offset 0x2e:
  Compilation Unit @ offset 0xa5:
  Compilation Unit @ offset 0xc7:
  Compilation Unit @ offset 0xd2:
  Compilation Unit @ offset 0x145:
  Compilation Unit @ offset 0x150:
  Compilation Unit @ offset 0x308:
...
of which the ones at 0xc7 and 0x145 are dummy CUs (that is, they do not
contain a single DIE), which were added by recent commit 5ef670d81fd
"[gdb/testsuite] Add dummy start and end CUs in dwarf assembly".

The .debug_names section contains this CU table:
...
[  0] 0x0
[  1] 0x2e
[  2] 0xa5
[  3] 0xd2
[  4] 0x150
[  5] 0x308
[  6] 0x1
[  7] 0x0
...
The last two entries are incorrect, and the entries for the dummy CUs are
missing.

The last two entries are incorrect because here in write_debug_names we write
the dimension of the CU list as 8:
...
  /* comp_unit_count - The number of CUs in the CU list.  */
  header.append_uint (4, dwarf5_byte_order,
                     per_objfile->per_bfd->all_comp_units.size ()
                     - per_objfile->per_bfd->tu_stats.nr_tus);
...
while the actual dimension of the CU list is 6.

The discrepancy is caused by this code which skips the dummy CUs:
...
  for (int i = 0; i < per_objfile->per_bfd->all_comp_units.size (); ++i)
    {
      ...
      /* CU of a shared file from 'dwz -m' may be unused by this main
        file.  It may be referenced from a local scope but in such
        case it does not need to be present in .debug_names.  */
      if (psymtab == NULL)
       continue;
...
because they have a null partial symtab.

We can fix this by writing the actual dimension of the CU list, but that still
leaves the dummy CUs out of the CU list.  The purpose of having these is to
delimit the end of preceding CUs.

So, fix this by:
- removing the code that skips the dummy CUs (note that the same change
  was done for .gdb_index in commit efba5c2319d '[gdb/symtab] Handle PU
  without import in "save gdb-index"'.
- verifying that all units are represented in the CU/TU lists
- using the actual CU list size when writing the dimension of the CU list
  (and likewise for the TU list).

Tested on x86_64-linux with native and target board cc-with-debug-names.

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

2 years ago[gdb/testsuite] Generate .debug_aranges in gdb.dwarf2/locexpr-data-member-location.exp
Tom de Vries [Tue, 14 Sep 2021 10:57:58 +0000 (12:57 +0200)] 
[gdb/testsuite] Generate .debug_aranges in gdb.dwarf2/locexpr-data-member-location.exp

When running test-case gdb.dwarf2/locexpr-data-member-location.exp with target
board cc-with-debug-names, all tests pass but we run into PR28261:
...
(gdb) run ^M
Starting program: locexpr-data-member-location ^M
warning: Section .debug_names in locexpr-data-member-location-lib.so has \
  abbreviation_table of size 1 vs. written as 37, ignoring .debug_names.^M
...

Using a patch that fixes PR28261, the warning is gone, but we run into:
...
FAIL: gdb.dwarf2/locexpr-data-member-location.exp: step into foo
...

This is due a missing .debug_aranges contribution for the CU declared in
gdb.dwarf2/locexpr-data-member-location.exp.

Fix this by adding the missing .debug_aranges contribution.

Tested on x86_64-linux.

2 years agoarc: Fix potential invalid pointer access when fixing got symbols.
Claudiu Zissulescu [Tue, 14 Sep 2021 09:10:54 +0000 (12:10 +0300)] 
arc: Fix potential invalid pointer access when fixing got symbols.

When statically linking, it can arrive to an undefined weak symbol of
which its value cannot be determined. However, we are having pieces of
code which doesn't take this situation into account, leading to access
a structure which may not be initialized. Fix this situation and add a
test.

bfd/
xxxx-xx-xx  Cupertino Miranda  <cmiranda@synopsys.com>
            Claudiu Zissulescu  <claziss@synopsys.com>

* arc-got.h (arc_static_sym_data): New structure.
(get_static_sym_data): New function.
(relocate_fix_got_relocs_for_got_info): Move the computation fo
symbol value and section to above introduced function, and use
this new function.

ld/testsuite/
xxxx-xx-xx  Claudiu Zissulescu  <claziss@synopsys.com>

* ld-arc/got-weak.d: New file.
* ld-arc/got-weak.s: Likewise.

Signed-off-by: Claudiu Zissulescu <claziss@synopsys.com>
fix

2 years agosim: bfin: add support for SDL2
Mike Frysinger [Tue, 14 Sep 2021 02:45:19 +0000 (22:45 -0400)] 
sim: bfin: add support for SDL2

This probably should have been ported long ago, but better late than
never.  We keep support for both versions for now since both projects
tend to have long lifetimes.  Maybe consider dropping SDL1 in another
ten years.

2 years agoAutomatic date update in version.in
GDB Administrator [Tue, 14 Sep 2021 00:00:06 +0000 (00:00 +0000)] 
Automatic date update in version.in

2 years agoRemove use of __CYGNUSCLIB__
Tom Tromey [Sun, 3 May 2020 21:58:27 +0000 (15:58 -0600)] 
Remove use of __CYGNUSCLIB__

I found a check of __CYGNUSCLIB__ in dbxread.c.  I think this is dead
code.  This patch removes it.

2 years ago[gdb/testsuite] Check for valid test name
Tom de Vries [Mon, 13 Sep 2021 19:41:13 +0000 (21:41 +0200)] 
[gdb/testsuite] Check for valid test name

When running gdb.base/batch-exit-status.exp I noticed that the test name
contains a newline:
...
PASS: gdb.base/batch-exit-status.exp: : No such file or directory\.^M
: No such file or directory\.: [lindex $result 2] == 0
...

Check for this in ::CheckTestNames::check, such that we have a warning:
...
PASS: gdb.base/batch-exit-status.exp: : No such file or directory\.^M
: No such file or directory\.: [lindex $result 2] == 0
WARNING: Newline in test name
...

Tested on x86_64-linux.

2 years ago[gdb/tdep] Fix exec check in gdb_print_insn_arm
Tom de Vries [Mon, 13 Sep 2021 18:16:36 +0000 (20:16 +0200)] 
[gdb/tdep] Fix exec check in gdb_print_insn_arm

With a gdb build with --enable-targets=all we run into a KFAIL:
...
KFAIL: gdb.gdb/unittest.exp: executable loaded: maintenance selftest, \
  failed none (PRMS: gdb/27891)
...
due to:
...
Running selftest print_one_insn.^M
Self test failed: arch armv8.1-m.main: self-test failed at \
  disasm-selftests.c:165^M
...

The test fails because we expect disassembling of one arm insn to consume 4
bytes and produce (using verbose = true in disasm-selftests.c):
...
arm mov r0, #0
...
but instead the disassembler uses thumb mode and only consumes 2
bytes and produces:
...
arm movs        r0, r0
...

The failure does not show up in the "no executable loaded" variant because
this code in gdb_print_insn_arm isn't triggered:
...
  if (current_program_space->exec_bfd () != NULL)
    info->flags |= USER_SPECIFIED_MACHINE_TYPE;
...
and consequently we do this in print_insn:
...
      if ((info->flags & USER_SPECIFIED_MACHINE_TYPE) == 0)
        info->mach = bfd_mach_arm_unknown;
...
and don't set force_thumb to true in select_arm_features.

The code in gdb_print_insn_arm makes the assumption that the disassembly
architecture matches the exec architecture, which in this case is incorrect,
because the exec architecture is x86_64, and the disassembly architecture is
armv8.1-m.main.  Fix that by explicitly checking it:
...
  if (current_program_space->exec_bfd () != NULL
      && (current_program_space->exec_bfd ()->arch_info
  == gdbarch_bfd_arch_info (gdbarch)))
...

This fixes the print_one_insn failure, so remove the KFAIL.

Tested on x86_64-linux.

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

2 years ago[gdb/tdep] Reset force_thumb in parse_arm_disassembler_options
Tom de Vries [Mon, 13 Sep 2021 18:16:36 +0000 (20:16 +0200)] 
[gdb/tdep] Reset force_thumb in parse_arm_disassembler_options

With a gdb build with --enable-targets=all, we have 2 arch-specific failures
in selftest print_one_insn:
...
$ gdb -q -batch a.out -ex "maint selftest print_one_insn" 2>&1 \
  | grep "Self test failed: arch "
Self test failed: arch armv8.1-m.main: self-test failed at \
  disasm-selftests.c:165
Self test failed: arch arm_any: self-test failed at disasm-selftests.c:165
$
...

During the first failed test, force_thumb is set to true, and remains so until
and during the second test, which causes the second failure.

Fix this by resetting force_thumb to false in parse_arm_disassembler_options,
such that we get just one failure:
...
$ gdb -q -batch a.out -ex "maint selftest print_one_insn" 2>&1 \
  | grep "Self test failed: arch "
Self test failed: arch armv8.1-m.main: self-test failed at \
  disasm-selftests.c:165
$
...

Tested on x86_64-linux.

2 years agoFix no-Python build
Tom Tromey [Mon, 13 Sep 2021 13:49:36 +0000 (07:49 -0600)] 
Fix no-Python build

A build without Python will currently fail, because
selftests::test_python uses gdb_python_initialized, which is only
conditionally defined.

This patch fixes the build by making test_python also be conditionally
defined.  I chose this approach because the selftest will fail if
Python is not enabled, so it didn't seem useful to leave it defined.

2 years agoRISC-V: Update the assembler insn testcase.
Nelson Chu [Mon, 13 Sep 2021 12:22:47 +0000 (20:22 +0800)] 
RISC-V: Update the assembler insn testcase.

Since the 0x57 is preserved for the vadd.vv instruction in the integration
branch, remove it to make sure the testcase can work.

gas/
* testsuite/gas/riscv/insn.d: Remove 0x57 since it is preserved
for vadd.vv instruction.
* testsuite/gas/riscv/insn.s: Likewise.

2 years agoMIPS: don't use get_symbol_name() for section parsing. With s_change_section() later...
Jan Beulich [Mon, 13 Sep 2021 10:02:48 +0000 (11:02 +0100)] 
MIPS: don't use get_symbol_name() for section parsing.  With s_change_section() later calling obj_elf_section(), it seems better to pre-parse the section name by the same function that will be used there. This way no differences in what is accepted will result.

gas * config/tc-mips.c (s_change_section): Use obj_elf_section_name to
parse the section name.

2 years agoia64: don't use get_symbol_name() for section parsing. With cross_section() later...
Jan Beulich [Mon, 13 Sep 2021 10:00:25 +0000 (11:00 +0100)] 
ia64: don't use get_symbol_name() for section parsing.  With cross_section() later calling obj_elf_section(), it seems better to pre-parse the section name by the same function that will be used there. This way no differences in what is accepted will result.

gas * config/tc-ia64.c (cross_section): Use obj_elf_section_name to
parse the section name.

2 years ago[gdb/testsuite] Fix gdb.gdb/selftest.exp
Tom de Vries [Mon, 13 Sep 2021 09:13:28 +0000 (11:13 +0200)] 
[gdb/testsuite] Fix gdb.gdb/selftest.exp

With a gdb build with CFLAGS "-O2 -g -flto=auto", I run into:
...
 #7  gdb_main (args=0x7fffffffd220) at src/gdb/main.c:1368^M
 #8  main (argc=<optimized out>, argv=<optimized out>) at src/gdb/gdb.c:32^M
 (gdb) FAIL: gdb.gdb/selftest.exp: backtrace through signal handler
...
which means that this regexp in proc test_with_self fails:
...
  -re "#0.*(read|poll).*in main \\(.*\\) at .*gdb\\.c.*$gdb_prompt $" {
...

The problem is that gdb_main has been inlined into main, and consequently the
backtrace uses:
...
 #x  <fn> ...
...
instead of
...
 #x  <address> in <fn> ...
...

Fix this by updating the regexp to not require "in" before " main".

Tested on x86_64-linux.

2 years agoRe: Deprecate a.out support for NetBSD targets
Alan Modra [Mon, 13 Sep 2021 07:34:01 +0000 (17:04 +0930)] 
Re: Deprecate a.out support for NetBSD targets

* config.bfd: Correct m68-*-*bsd* obsolete target match.

2 years ago[gdb/testsuite] Fix test name in gdb.base/batch-exit-status.exp
Tom de Vries [Mon, 13 Sep 2021 07:16:13 +0000 (09:16 +0200)] 
[gdb/testsuite] Fix test name in gdb.base/batch-exit-status.exp

When running gdb.base/batch-exit-status.exp I noticed that the test name
contains a newline:
...
PASS: gdb.base/batch-exit-status.exp: : No such file or directory\.^M
: No such file or directory\.: [lindex $result 2] == 0
...

The mistake is that I passed an output regexp argument to a parameter
interpreted as testname prefix.  Fix this by passing a testname prefix
instead.

Add support for checking output, to be able to handle the output regexp
argument.

Tested on x86_64-linux.

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

2 years ago[gdb/testsuite] Set sysroot earlier in local-board.exp
Tom de Vries [Sun, 12 Sep 2021 09:30:06 +0000 (11:30 +0200)] 
[gdb/testsuite] Set sysroot earlier in local-board.exp

When running test-case gdb.base/batch-exit-status.exp for native, it passes.
But with target board cc-with-debug-names, we run into (added missing double
quotes for clarity):
...
builtin_spawn $build/gdb/testsuite/../../gdb/gdb -nw -nx \
  -data-directory $build/gdb/testsuite/../data-directory \
  -iex "set height 0" -iex "set width 0" -ex "set sysroot" -batch ""^M
: No such file or directory.^M
PASS: gdb.base/batch-exit-status.exp: \
  : No such file or directory\.: [lindex $result 2] == 0
FAIL: gdb.base/batch-exit-status.exp: \
  : No such file or directory\.: [lindex $result 3] == $expect_status
...

The difference between the passing and failing case is that with native we
have (leaving out set height/width for brevity):
...
$ gdb -batch ""; echo $?
: No such file or directory.
1
...
and with target board cc-with-debug-names:
...
$ gdb -ex "set sysroot" -batch ""; echo $?
: No such file or directory.
0
...

The difference is expected.  GDB returns the exit status of the last executed
command.  In the former case that's 'file ""', which fails.  In the latter case,
that's 'set sysroot', which succeeds.

Fix this by setting sysroot using -iex instead of -ex in local-board.exp, such
that we have the expected:
...
$ gdb -iex "set sysroot" -batch ""; echo $?
: No such file or directory.
1
...

Tested on x86_64-linux.

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

2 years agosim: run: change help short option to -h
Mike Frysinger [Fri, 10 Sep 2021 03:55:01 +0000 (23:55 -0400)] 
sim: run: change help short option to -h

It's unclear why -H was picked over the more standard -h, but since
-h is still not used, just change -H to -h to match pretty much every
other tool in the sourceware tree.

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

2 years ago[gdb/testsuite] Reimplement gdb.gdb/python-selftest.exp as unittest
Tom de Vries [Fri, 10 Sep 2021 19:54:46 +0000 (21:54 +0200)] 
[gdb/testsuite] Reimplement gdb.gdb/python-selftest.exp as unittest

The test-case gdb.gdb/python-selftest.exp:
- patches the gdb_python_initialized variable in gdb to 0
- checks that the output of a python command is "Python not initialized"

Reimplement gdb.gdb/python-selftest.exp as unittest, using:
- execute_command_to_string to capture the output
- try/catch to catch the "Python not initialized" exception.

Tested on x86_64-linux.

2 years ago[gdb/testsuite] Fix DUPLICATE in gdb.base/global-var-nested-by-dso.exp
Tom de Vries [Fri, 10 Sep 2021 15:16:48 +0000 (17:16 +0200)] 
[gdb/testsuite] Fix DUPLICATE in gdb.base/global-var-nested-by-dso.exp

Fix DUPLICATE in gdb.base/global-var-nested-by-dso.exp by naming commands more
uniquely.

2 years ago[gdb/testsuite] Fix DUPLICATE in gdb.base/skip-solib.exp
Tom de Vries [Fri, 10 Sep 2021 15:16:48 +0000 (17:16 +0200)] 
[gdb/testsuite] Fix DUPLICATE in gdb.base/skip-solib.exp

Fix DUPLICATE in gdb.base/skip-solib.exp by using with_test_prefix.

Also fix indentation style and long lines, remove outdated question/answer
bits, and use multi_line.

2 years ago[gdb/testsuite] Fix handling of nr_args < 3 in mi_gdb_test
Tom de Vries [Fri, 10 Sep 2021 15:16:48 +0000 (17:16 +0200)] 
[gdb/testsuite] Fix handling of nr_args < 3 in mi_gdb_test

The documentation of mi_gdb_test states that the command, pattern and message
arguments are mandatory:
...
 # mi_gdb_test COMMAND PATTERN MESSAGE [IPATTERN] -- send a command to gdb;
 #   test the result.
...

However, this is not checked, and when mi_gdb_test is called with less than 3
arguments, it passes or fails silently.

Fix this by using the following semantics:
- if there are 1 or 2 arguments, use the command as the message.
- if there is 1 argument, use ".*" as the pattern.
- if there are no or too much arguments, error out.

Fix a PATH issue in gdb.mi/mi-logging.exp, introduced by using the command as
message.  Fix a few other trivial-looking FAILs.

There are 11 less trivial-looking FAILs left in gdb.mi in test-cases:
- mi-nsmoribund.exp
- mi-breakpoint-changed.exp
- mi-break.exp.

Tested on x86_64-linux.

2 years ago[gdb/testsuite] Add string_list_to_regexp
Tom de Vries [Fri, 10 Sep 2021 15:16:48 +0000 (17:16 +0200)] 
[gdb/testsuite] Add string_list_to_regexp

A regexp pattern with escapes like this is hard to read:
...
set re "~\"\[$\]$decimal = 1\\\\n\"\r\n\\^done"
...

We can make it more readable by spacing out parts (which allows us to also use
the curly braces where that's convenient):
...
set re [list "~" {"} {[$]} $decimal " = 1" "\\\\" "n" {"} "\r\n" "\\^" "done"]
set re [join $re ""]
...
or by using string_to_regexp:
...
set re [list \
            [string_to_regexp {~"$}] \
            $decimal \
            [string_to_regexp " = 1\\n\"\r\n^done"]]
set re [join $re ""]
...
Note: we have to avoid applying string_to_list to decimal, which is already a
regexp.

Add a proc string_list_to_regexp to make it easy to do both:
...
set re [list \
            [string_list_to_regexp ~ {"} $] \
            $decimal \
            [string_list_to_regexp " = 1" \\ n {"} \r\n ^ done]]
...

Also add a test-case gdb.testsuite/string_to_regexp.exp.

2 years ago[gdb/testsuite] Handle unrecognized command line option in gdb_compile_test
Tom de Vries [Fri, 10 Sep 2021 15:16:48 +0000 (17:16 +0200)] 
[gdb/testsuite] Handle unrecognized command line option in gdb_compile_test

When running the gdb testsuite with gnatmake-4.8, I get many fails of the
following form:
...
gcc: error: unrecognized command line option '-fgnat-encodings=all'^M
gnatmake: "gdb.ada/O2_float_param/foo.adb" compilation error^M
compiler exited with status 1
compilation failed: gcc ... gdb.ada/O2_float_param/foo.adb
gcc: error: unrecognized command line option '-fgnat-encodings=all'
gnatmake: "gdb.ada/O2_float_param/foo.adb" compilation error
FAIL: gdb.ada/O2_float_param.exp: scenario=all: compilation foo.adb
...

Fix this by marking the test unsupported instead, such that we have:
...
UNSUPPORTED: gdb.ada/O2_float_param.exp: scenario=all: compilation foo.adb \
  (unsupported option '-fgnat-encodings=all')
...

Tested on x86_64-linux.

2 years agoPowerPC, sanity check r_offset in relocate_section
Alan Modra [Thu, 9 Sep 2021 01:29:24 +0000 (10:59 +0930)] 
PowerPC, sanity check r_offset in relocate_section

        * elf32-ppc.c (offset_in_range): New function.
(ppc_elf_vle_split16): Sanity check r_offset before accessing
section contents.  Return status.
        (ppc_elf_relocate_section): Sanity check r_offset before
        accessing section contents.  Don't segfault on NULL howto.

2 years agoRe: gas: Use the directory name in .file 0
Alan Modra [Fri, 10 Sep 2021 08:31:43 +0000 (18:01 +0930)] 
Re: gas: Use the directory name in .file 0

PR gas/28266
* testsuite/gas/elf/dwarf-5-file0-2.s: Use %object rather than
@object, .4byte instead of .long, and .asciz instead of .string.

2 years agoetc: switch to automake
Mike Frysinger [Thu, 9 Sep 2021 20:43:28 +0000 (16:43 -0400)] 
etc: switch to automake

There's no content in here currently, so switching to automake is
pretty easy with a stub file.

2 years agoetc: rename configure.in to configure.ac
Mike Frysinger [Thu, 9 Sep 2021 20:40:36 +0000 (16:40 -0400)] 
etc: rename configure.in to configure.ac

The .in name has been deprecated for a long time in favor of .ac.

2 years agogas: Use the directory name in .file 0
H.J. Lu [Thu, 9 Sep 2021 16:14:42 +0000 (09:14 -0700)] 
gas: Use the directory name in .file 0

DWARF5 allows .file 0 to take an optional directory name.  Set the entry
0 of the directory table to the directory name in .file 0.

PR gas/28266
* dwarf2dbg.c (get_directory_table_entry): Add an argument for
the directory name in .file 0 and use it, instead of PWD.
(allocate_filenum): Pass NULL to get_directory_table_entry.
(allocate_filename_to_slot): Pass the incoming dirname to
get_directory_table_entry.
* testsuite/gas/elf/dwarf-5-file0-2.d: New file.
* testsuite/gas/elf/dwarf-5-file0-2.s: Likewise.
* testsuite/gas/elf/elf.exp: Run dwarf-5-file0-2.

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

2 years agogdb: Enable target rx-*-*linux.
Yoshinori Sato [Thu, 2 Sep 2021 03:55:07 +0000 (12:55 +0900)] 
gdb: Enable target rx-*-*linux.

I added rx-*-linux in binutils few yaers ago.
But missing this changes,

2 years ago[gdb/testsuite] Fix gdb.base/coredump-filter-build-id.exp with older eu-unstrip
Tom de Vries [Thu, 9 Sep 2021 10:29:40 +0000 (12:29 +0200)] 
[gdb/testsuite] Fix gdb.base/coredump-filter-build-id.exp with older eu-unstrip

On openSUSE Leap 42.3 with eu-unstrip 0.158, we run into:
...
(gdb) PASS: gdb.base/coredump-filter-build-id.exp: save corefile
First line of eu-unstrip: \
  0x400000+0x202000 f4ae8502bd6a14770182382316bc595e9dc6f08b@0x400284 - - [exe]
FAIL: gdb.base/coredump-filter-build-id.exp: gcore dumped mapping with build-id
...

The test expects an actual file name instead of '[exe]', but that only got
introduced with eu-unstrip 0.161.  Before it printed '[exe]' or '[pie]'.

Fix this by updating the regexp.

Tested on x86_64-linux.

2 years ago[gdb/testsuite] Fix various issues in gdb.mi/mi-sym-info.exp
Tom de Vries [Thu, 9 Sep 2021 10:29:40 +0000 (12:29 +0200)] 
[gdb/testsuite] Fix various issues in gdb.mi/mi-sym-info.exp

I noticed this failure in gdb.mi/mi-sym-info.exp with gcc-4.8:
...
FAIL: gdb.mi/mi-sym-info.exp: -symbol-info-functions --max-results 1 \
  (unexpected output)
...
due to function f2 instead of f3 being listed.

AFAICT, this is caused by a difference in debug info:
...
$ readelf -wi outputs/gdb.mi/mi-sym-info/mi-sym-info1.o \
  | egrep "DW_AT_name.*: f[1-3]"
    <72>   DW_AT_name        : f1
    <a1>   DW_AT_name        : f2
    <d0>   DW_AT_name        : f3
...
vs:
...
$ readelf -wi outputs/gdb.mi/mi-sym-info/mi-sym-info1.o \
  | egrep "DW_AT_name.*: f[1-3]"
    <f4>   DW_AT_name        : f3
    <123>   DW_AT_name        : f2
    <152>   DW_AT_name        : f1
...
and the command documentation does not mention an imposed order, so fix this
by allowing f2 as well.

Doing this fix, it made sense to do a refactoring of adding f2_re and f3_re
variables, in order to write (?:$f2_re|$f3_re), and I applied the same pattern
overall.

Furthermore, I found a silent FAIL due to calling mi_gdb_proc with 2 args, fix
by updating the regexp.

Then I ran with clang and found another FAIL, fix by updating the regexp.

Tested on x86_64-linux with gcc-4.8.5, gcc-7.5.0, gcc-11.2.1, clang-7.0.1 and
clang-12.0.1.

2 years ago[gdb/testsuite] Reimplement gdb.gdb/complaints.exp as unittest
Tom de Vries [Thu, 9 Sep 2021 10:29:39 +0000 (12:29 +0200)] 
[gdb/testsuite] Reimplement gdb.gdb/complaints.exp as unittest

When building gdb with "-Wall -O2 -g -flto=auto", I run into:
...
(gdb) call clear_complaints()^M
No symbol "clear_complaints" in current context.^M
(gdb) FAIL: gdb.gdb/complaints.exp: clear complaints
...

The problem is that lto has optimized away the clear_complaints function
and consequently the selftest doesn't work.

Fix this by reimplementing the selftest as a unit test.

Factor out two new functions:
- void
  execute_fn_to_ui_file (struct ui_file *file, std::function<void(void)> fn);
- std::string
  execute_fn_to_string (std::function<void(void)> fn, bool term_out);
and use the latter to capture the complaints output.

Tested on x86_64-linux.

2 years agogdb/python: remove all uses of Py_TPFLAGS_HAVE_ITER
Andrew Burgess [Wed, 1 Sep 2021 13:24:15 +0000 (14:24 +0100)] 
gdb/python: remove all uses of Py_TPFLAGS_HAVE_ITER

Python 2 has a bit flag Py_TPFLAGS_HAVE_ITER which can be passed as
part of the tp_flags field when defining a new object type.  This flag
is not defined in Python 3 and so we define it to 0 in
python-internal.h (when IS_PY3K is defined).

The meaning of this flag is that the object has the fields tp_iter and
tp_iternext.  Note the use of "has" here, the flag says nothing about
the values in those fields, just that the type object has the fields.

In early versions of Python 2 these fields were no part of the
PyTypeObject struct, they were added in version 2.2 (see
https://docs.python.org/release/2.3/api/type-structs.html).  And so,
there could be a some code compiled out there which has a PyTypeObject
structure within it that doesn't even have the tp_iter and tp_iternext
fields, attempting to access these fields would be undefined
behaviour.

And so Python added the Py_TPFLAGS_HAVE_ITER flag.  If the flag is
present then Python is free to access the tp_iter and tp_iternext
fields.

If we consider GDB then we always assume that the tp_iter and
tp_iternext fields are part of PyTypeObject.  If someone was crazy
enough to try and compile GDB against Python 2.1 then we'd get lots of
build errors saying that we were passing too many fields when
initializing PyTypeObject structures.  And so, I claim, we can be sure
that GDB will always be compiled with a version of Python that has the
tp_iter and tp_iternext fields in PyTypeObject.

Next we can look at the Py_TPFLAGS_DEFAULT flag.  In Python 2, each
time additional fields are added to PyTypeObject a new Py_TPFLAGS_*
flag would be defined to indicate whether those flags are present or
not.  And, those new flags would be added to Py_TPFLAGS_DEFAULT.  And
so, in the latest version of Python 2 the Py_TPFLAGS_DEFAULT flag
includes Py_TPFLAGS_HAVE_ITER (see
https://docs.python.org/2.7/c-api/typeobj.html).

In GDB we pass Py_TPFLAGS_DEFAULT as part of the tp_flags for all
objects we define.

And so, in this commit, I propose to remove all uses of
Py_TPFLAGS_HAVE_ITER from GDB, it's simply not needed.

There should be no user visible changes after this commit.

2 years agosim: accept -EB/-EL short options
Mike Frysinger [Thu, 9 Sep 2021 07:01:28 +0000 (03:01 -0400)] 
sim: accept -EB/-EL short options

Many GNU tools accept -EB/-EL as short options for selecting big &
little endian modes.  While the sim has an -E option, it requires
spelling out "big" and "little".  Adding support for -EB & -EL is
thus quite trivial, so lets round it out to be less annoying.

2 years agosim: ppc: drop support for std-config.h overrides
Mike Frysinger [Thu, 9 Sep 2021 06:44:59 +0000 (02:44 -0400)] 
sim: ppc: drop support for std-config.h overrides

Only the ppc arch supports this kind of source file override logic.
All the others expose knobs via configure flags, and for some of
these, the ppc code does as well.  For others, it doesn't make sense
to ever change them.  Since it's unlikely anyone is using this, drop
it all to simplify the code (and to get us a little closer to the
common sim code).

2 years agosim: ppc: enable use of gnulib
Mike Frysinger [Thu, 9 Sep 2021 06:22:48 +0000 (02:22 -0400)] 
sim: ppc: enable use of gnulib

All other sim arches are using this now, so finish up the logic in
the ppc arch to enable gnulib usage here too.

2 years agosim: drop old O_NDELAY & FNBLOCK support
Mike Frysinger [Thu, 9 Sep 2021 05:44:24 +0000 (01:44 -0400)] 
sim: drop old O_NDELAY & FNBLOCK support

We use these older names inconsistently in the sim codebase, and time
has moved on long ago, so drop support for these non-standard names.
POSIX provides O_NONBLOCK for us, so use it everywhere.

2 years agosim: dv-sockser: enable for mingw targets too
Mike Frysinger [Sat, 29 May 2021 21:17:40 +0000 (17:17 -0400)] 
sim: dv-sockser: enable for mingw targets too

We have enough functionality from gnulib now to build sockser on
all platforms.

Non-blocking I/O is supported when F_GETFL/F_SETFL are unavailable,
but we can address that in a follow up commit.  This mirrors what
is done in other places in the sim already.

2 years agosim: cgen: workaround Windows VOID define
Mike Frysinger [Thu, 9 Sep 2021 05:16:04 +0000 (01:16 -0400)] 
sim: cgen: workaround Windows VOID define

The cgen framework provides a "VOID" type for code to use, but this
defines ends up conflicting with the standard Windows VOID define.
Since they actually define to the same thing ("void"), undef it here
to fix the Windows build.

We might want to reconsider the need for "VOID" in cgen, but that
will take larger discussion & coordination with the cgen project.

2 years agosim: dv-sockser: move sim-main.h include after system includes
Mike Frysinger [Thu, 9 Sep 2021 04:46:11 +0000 (00:46 -0400)] 
sim: dv-sockser: move sim-main.h include after system includes

The sim-main.h header is a bit of a dumping ground.  Every arch can
(and many do) define all sorts of weird & common names that end up
conflicting with system headers.  So including it before the system
headers sets us up for pain.  v850 is a good example of this -- when
building for mingw, we see weird failures:

$ i686-w64-mingw32-gcc ... -c -o dv-sockser.o ../../../../sim/v850/../common/dv-sockser.c
In file included from ../../../../sim/v850/sim-main.h:11,
                 from ../../../../sim/v850/../common/dv-sockser.c:24:
../../../../sim/v850/../common/sim-base.h:97:32: error: expected ')' before '->' token
  97 | # define STATE_CPU(sd, n) ((sd)->cpu[0])
     |                                ^~

While gcc is unhelpful at first, running it through the preprocessor
by hand shows more details:

$ i686-w64-mingw32-gcc ... -E -dD -o dv-sockser.i ../../../../sim/v850/../common/dv-sockser.c
$ i686-w64-mingw32-gcc -c dv-sockser.i
In file included from /usr/i686-w64-mingw32/usr/include/minwindef.h:163,
                 from /usr/i686-w64-mingw32/usr/include/windef.h:9,
                 from /usr/i686-w64-mingw32/usr/include/windows.h:69,
                 from /usr/i686-w64-mingw32/usr/include/winsock2.h:23,
                 from ../../gnulib/import/sys/socket.h:684,
                 from ../../gnulib/import/netinet/in.h:43,
                 from ../../../../sim/v850/../common/dv-sockser.c:39:
/usr/i686-w64-mingw32/usr/include/winnt.h:4803:25: error: expected ')' before '->' token
 4803 |       DWORD State;
      |                         ^
      |                         )

This is because v850 sets up this common name:

All of this needs cleaning up someday, but since the dv-sockser code
definitely should be fixed in this way, lets do that now and unblock
the v850 code.

2 years agosim: mips: delete unused PSIZE define
Mike Frysinger [Thu, 9 Sep 2021 04:10:20 +0000 (00:10 -0400)] 
sim: mips: delete unused PSIZE define

It's unclear what this define is for as it appears to be unused, and
has never been used in the history of the mips sim.  Delete it to tidy
up, and to fix build errors for Windows targets that have a standard
"PSIZE" struct in their system headers.  This doesn't show up yet as
most sim files don't include many system headers, but enabling sockser
code for mingw uncovers the conflict.

Unfortunately the error produced by gcc is inscrutable, but running
it through the preprocessor manually manages to provide a pointer to
the underlying issue.

$ i686-w64-mingw32-gcc ... -c -o dv-sockser.o ../../../../sim/mips/../common/dv-sockser.c
<command-line>: error: expected identifier or '(' before numeric constant
In file included from /usr/i686-w64-mingw32/usr/include/windows.h:71,
                 from /usr/i686-w64-mingw32/usr/include/winsock2.h:23,
                 from ../../gnulib/import/sys/socket.h:684,
                 from ../../gnulib/import/netinet/in.h:43,
                 from ../../../../sim/mips/../common/dv-sockser.c:39:
/usr/i686-w64-mingw32/usr/include/wingdi.h:2934:59: error: unknown type name 'LPSIZE'; did you mean 'LPSIZEL'?
 2934 |   WINGDIAPI WINBOOL WINAPI GetAspectRatioFilterEx(HDC hdc,LPSIZE lpsize);
      |                                                           ^~~~~~
      |                                                           LPSIZEL
...

$ i686-w64-mingw32-gcc ... -E -dD -o dv-sockser.i ../../../../sim/mips/../common/dv-sockser.c
$ i686-w64-mingw32-gcc -c dv-sockser.i
In file included from /usr/i686-w64-mingw32/usr/include/windows.h:69,
                 from /usr/i686-w64-mingw32/usr/include/winsock2.h:23,
                 from ../../gnulib/import/sys/socket.h:684,
                 from ../../gnulib/import/netinet/in.h:43,
                 from ../../../../sim/mips/../common/dv-sockser.c:39:
/usr/i686-w64-mingw32/usr/include/windef.h:104:9: error: expected identifier or '(' before numeric constant
  104 | } SIZE,*PSIZE,*LPSIZE;
      |         ^~

2 years agosim: ppc: switch to common warning flags
Mike Frysinger [Thu, 9 Sep 2021 03:31:27 +0000 (23:31 -0400)] 
sim: ppc: switch to common warning flags

Now that the ppc code has been cleaned up enough to use the same set
of warning flags as the common code, delete the ppc-specific configure
logic so we can leverage what the common code already defined for us.

2 years agosim: ppc: enable -Wpointer-sign warnings
Tom de Vries [Wed, 19 May 2021 10:46:47 +0000 (12:46 +0200)] 
sim: ppc: enable -Wpointer-sign warnings

When compiling with --enable-werror and CFLAGS="-O0 -g -Wall", we run into:
...
src/sim/ppc/hw_memory.c: In function 'hw_memory_init_address':
src/sim/ppc/hw_memory.c:204:7: error: pointer targets in passing argument 4 \
  of 'device_find_integer_array_property' differ in signedness \
  [-Werror=pointer-sign]
       &new_chunk->size);
       ^
...

Fix these by adding an explicit pointer cast.  It's a bit ugly to use APIs
based on signed integers to read out unsigned values, but in practice, this
is par for the course in the ppc code.

We already use signed APIs and assign the result to unsigned values a lot:
see how device_find_integer_property returns a signed integer (cell), but
then assign it to unsigned types.  The array APIs are not used that often
which is why we don't see many warnings, and we disable warnings when we
assign signed integers to unsigned integers in general.

The dtc/libfdt project (which is the standard in other projects) processes
the fdt blob as a series of bytes without any type information.  Typing is
left to the caller.  They have core APIs that read/write bytes, and a few
helper functions to cast/convert those bytes to the right value (e.g. u32).
In this ppc sim code, the core APIs use signed integers, and the callers
convert to unsigned, usually implicitly.

We could add some core APIs to the ppc sim that deal with raw bytes and then
add some helpers to convert to the right type, but that seems like a lot of
lifting for what boils down to a cast, and is effectively equivalent to all
the implicit assignments we use elsewhere.  Long term, a lot of the ppc code
should either get converted to existing sim common code, or we should stand
up proper APIs in the common code first, or use standard libraries to do all
the processing (e.g. libfdt).  Either way, this device.c code would all get
deleted, and callers (like these hw_*.c files) would get converted.  Which
is also why we go with a cast rather new (but largely unused) APIs.

2 years agosim: ppc: enable -Wmissing-declarations & -Wmissing-prototypes
Mike Frysinger [Thu, 9 Sep 2021 01:49:00 +0000 (21:49 -0400)] 
sim: ppc: enable -Wmissing-declarations & -Wmissing-prototypes

This aligns with common code which already uses this flag.  We have
to add another local prototype to fix the failure, and add another
local decl for the SIM_DESC type.  Unwinding these will require a
lot more work & conversions in the process, so going with the decl
for now unblocks the warning unification.

2 years agosim: microblaze: replace custom basic types with common ones
Mike Frysinger [Thu, 9 Sep 2021 01:26:14 +0000 (21:26 -0400)] 
sim: microblaze: replace custom basic types with common ones

The basic "byte" type conflicts with Windows headers, and we already
have common types that provide the right sizes.  So replace these with
the common ones to avoid issues.

  CC     dv-sockser.o
In file included from /usr/i686-w64-mingw32/usr/include/wtypes.h:8,
                 from /usr/i686-w64-mingw32/usr/include/winscard.h:10,
                 from /usr/i686-w64-mingw32/usr/include/windows.h:97,
                 from /usr/i686-w64-mingw32/usr/include/winsock2.h:23,
                 from ../../gnulib/import/sys/socket.h:684,
                 from ../../gnulib/import/netinet/in.h:43,
                 from .../build/sim/../../../sim/microblaze/../common/dv-sockser.c:39:
/usr/i686-w64-mingw32/usr/include/rpcndr.h:63:25: error: conflicting types for 'byte'; have 'unsigned char'
   63 |   typedef unsigned char byte;
      |                         ^~~~
In file included from .../buildsim/../../../sim/microblaze/sim-main.h:21,
                 from .../buildsim/../../../sim/microblaze/../common/dv-sockser.c:24:
.../buildsim/../../../sim/microblaze/microblaze.h:94:25: note: previous declaration of 'byte' with type 'byte' {aka 'char'}
   94 | typedef char            byte;
      |                         ^~~~
make: *** [Makefile:513: dv-sockser.o] Error 1

2 years agoRISC-V: Pretty print values formed with lui and addiw.
Jim Wilson [Thu, 9 Sep 2021 01:15:39 +0000 (18:15 -0700)] 
RISC-V: Pretty print values formed with lui and addiw.

The disassembler has support to pretty print values created by an lui/addi
pair, but there is no support for addiw.  There is also no support for
c.addi and c.addiw.  This patch extends the pretty printing support to
handle these 3 instructions in addition to addi.  Existing testcases serve
as tests for the new feature.

opcodes/
* riscv-dis.c (maybe_print_address): New arg wide.  Sign extend when
wide is true.
(print_insn_args): Fix calls to maybe_print_address.  Add checks for
c.addi, c.addiw, and addiw, and call maybe_print_address for them.

gas/
* testsuite/gas/riscv/insn.d: Update for disassembler change.
* testsuite/gas/li32.d, testsuite/gas/li64.d: Likwise.
* testsuite/gas/lla64.d: Likewise.