Commit Graph

43944 Commits

Author SHA1 Message Date
Tom Tromey
2032eb7e93 Fix comment in field_kind
Christian pointed out that the new comment in field_kind is
un-grammatical.  This fixes it.

gdb/ChangeLog
2019-12-19  Tom Tromey  <tromey@adacore.com>

	* ui-out.h (enum class field_kind): Fix comment.

Change-Id: I6608ff18e29f1af98a0ff77012afe28b3d4602f4
2019-12-19 11:12:29 -07:00
Tom Tromey
f69656d00f Handle CRLF when reading XML on Windows
xml-support.c uses FOPEN_RT, but then reads the entire contents of the
file and verifies that the number of bytes read matches the length.
This can fail on Windows, where the read will translate line
terminators.

This patch fixes the bug by changing xml-support.c to use FOPEN_RB.
This works because expat correctly handles \r\n line terminators.

gdb/ChangeLog
2019-12-11  Tom Tromey  <tromey@adacore.com>

	* xml-support.c (xml_fetch_content_from_file): Use FOPEN_RB.

gdb/testsuite/ChangeLog
2019-12-11  Tom Tromey  <tromey@adacore.com>

	* gdb.xml/tdesc-arch.exp (set_arch): Add "trans_mode" parameter.
	Add crlf test.

Change-Id: I548438f33eed284dde1de8babf755eaa1a40319d
2019-12-19 10:00:05 -07:00
Simon Marchi
99a5596592 Update gdb.base/default.exp for GDB 10
Now that the version number in master has been bumped to 10, I get this
failure:

    FAIL: gdb.base/default.exp: show convenience ($_gdb_major = 9 not found)

Update the test accordingly.

gdb/testsuite/ChangeLog:

	* gdb.base/default.exp: Update value of $_gdb_major.
2019-12-18 16:46:17 -05:00
Tom Tromey
27e4fac77e Fix pthread_setname_np build error
My earlier patch to fix the pthread_setname_np build error on macOS
was incorrect.  While the macOS man page claims that
pthread_setname_np returns void, in <pthread.h> it is actually
declared returning "int".  I knew this earlier, but must have made
some mistake when preparing the patch for submission (perhaps when
removing the templates?).

This patch re-fixes the bug.  I'm also applying it to the 9.1 branch.

Tested by building on macOS High Sierra.

gdb/ChangeLog
2019-12-18  Tom Tromey  <tromey@adacore.com>

	PR build/25268:
	* gdbsupport/thread-pool.c (set_thread_name): Expect "int" return
	type on macOS.  Add comment.

Change-Id: Ib09da6ac33958a0d843f65df2a528112356e7de6
2019-12-18 11:50:13 -07:00
Simon Marchi
e623f03502 Fix indentation (and clang warning) in c-lang.c
I see this warning when building with clang:

      CXX    c-lang.o
    /home/smarchi/src/binutils-gdb/gdb/c-lang.c:314:7: error: misleading indentation; statement is not part of the previous 'if' [-Werror,-Wmisleading-indentation]
          *length = i * width;
          ^
    /home/smarchi/src/binutils-gdb/gdb/c-lang.c:308:4: note: previous statement is here
              if (extract_unsigned_integer (contents + i * width,
              ^

It took me a while to notice that some lines in that area have a
spurious space before the tabs, at the beginning of the ling.  I'm not
sure how clang translates that to misleading indentation, but making the
indentation correct gets rid of the error.

There are many more instances of this in the code base (`grep -P '^ \t'
*.c`), if others think it's a good idea, it would be pretty easy to fix
them all up in one shot.

gdb/ChangeLog:

	* c-lang.c (c_get_string, asm_language_defn): Remove space
	before tab.
2019-12-18 13:27:18 -05:00
Tom Tromey
28ce7b0747 Fix build failure on macOS
PR build/25250 notes that the gdb 9 pre-release fails to build on
macOS, due to a name clash between field_kind::STRING and the STRING
token in ada-exp.y.  I am not sure (I couldn't reproduce this myself),
but presumably this is due to differences caused by the version of
bison in use there.

This patch works around the problem by renaming the field_kind
enumerator.  I chose to rename this one because it is used in
relatively few places -- it's just an implementation detail of the
style code.

This version also renames field_kind::SIGNED for consistency.

Let me know what you think.  I intend to check this in on the gdb 9
branch as well.

gdb/ChangeLog
2019-12-18  Tom Tromey  <tromey@adacore.com>

	PR build/25250:
	* ui-out.c (ui_out::vmessage): Update.
	* ui-out.h (enum class field_kind) <FIELD_STRING, FIELD_SIGNED>:
	Rename.
	(string_field): Update.
	(signed_field): Update.

Change-Id: Iae9f36f1b793e22c61fee0de2ab2d508668ee7e4
2019-12-18 10:28:46 -07:00
Simon Marchi
bbde7025e0 Fix -Wmisleading-indentation warning in top.c
When building top.c with this clang (daily build from apt.llvm.org):

    $ clang++-10 --version
    clang version 10.0.0-+20191211091425+f99297176cd-1~exp1~20191211082036.1372

I get:

    /home/smarchi/src/binutils-gdb/gdb/top.c:1549:5: error: misleading indentation; statement is not part of the previous 'if' [-Werror,-Wmisleading-indentation]
        fprintf_filtered (stream, _("\n\
        ^
    /home/smarchi/src/binutils-gdb/gdb/top.c:1543:3: note: previous statement is here
      if (SYSTEM_GDBINIT_DIR[0])
      ^

This looks like a legitimate warning, the fprintf_filtered is too much
indented.  Fix it, and at the same time add a bit of whitespace to make
this function easier to read.

gdb/ChangeLog:

	* top.c (print_gdb_configuration): Adjust indentation.
2019-12-18 12:25:46 -05:00
Christian Biesinger
e3169fe0bb Add missing include to bsd-kvm.c for gdb_abspath
Commit ff8577f649 added a call to
gdb_abspath in bsd-kvm.c, but doesn't include its header file.
This commit fixes that.

gdb/ChangeLog:

2019-12-17  Christian Biesinger  <cbiesinger@google.com>

	* bsd-kvm.c: Include gdbsupport/pathstuff.h.

Change-Id: I647c3620d8ae978ae27c38dbe0b3347a97c5bfc2
2019-12-17 14:08:48 -06:00
Simon Marchi
9b30da15e7 Add virtual destructor to tui_layout_base
I stumbled on some ASan failures when using the TUI, when tearing down a
TUI layout.  The simplest way to trigger it is to run:

  $ ./gdb --data-directory=data-directory -batch -ex "layout next"

The ASan report is:

    =================================================================
    ==2829136==ERROR: AddressSanitizer: new-delete-type-mismatch on 0x608000009a20 in thread T0:
      object passed to delete has wrong type:
      size of the allocated type:   88 bytes;
      size of the deallocated type: 24 bytes.
        #0 0x7f470fe2507e in operator delete(void*, unsigned long) /build/gcc/src/gcc/libsanitizer/asan/asan_new_delete.cc:177
        #1 0x55f88c75700d in std::default_delete<tui_layout_base>::operator()(tui_layout_base*) const /usr/include/c++/9.2.0/bits/unique_ptr.h:81
        #2 0x55f88c756328 in std::unique_ptr<tui_layout_base, std::default_delete<tui_layout_base> >::~unique_ptr() /usr/include/c++/9.2.0/bits/unique_ptr.h:284
        #3 0x7f470ee536a6 in __run_exit_handlers (/usr/lib/libc.so.6+0x3e6a6)
        #4 0x7f470ee5385d in __GI_exit (/usr/lib/libc.so.6+0x3e85d)
        #5 0x55f88c69f2ac in quit_force(int*, int) /home/simark/src/binutils-gdb/gdb/top.c:1766
        #6 0x55f88becc29a in captured_main_1 /home/simark/src/binutils-gdb/gdb/main.c:1183
        #7 0x55f88becc814 in captured_main /home/simark/src/binutils-gdb/gdb/main.c:1192
        #8 0x55f88becc8a9 in gdb_main(captured_main_args*) /home/simark/src/binutils-gdb/gdb/main.c:1217
        #9 0x55f88b3159cd in main /home/simark/src/binutils-gdb/gdb/gdb.c:32
        #10 0x7f470ee3c152 in __libc_start_main (/usr/lib/libc.so.6+0x27152)
        #11 0x55f88b31579d in _start (/home/simark/build/binutils-gdb/gdb/gdb+0x11fb79d)

    0x608000009a20 is located 0 bytes inside of 88-byte region [0x608000009a20,0x608000009a78)
    allocated by thread T0 here:
        #0 0x7f470fe238f8 in operator new(unsigned long) /build/gcc/src/gcc/libsanitizer/asan/asan_new_delete.cc:104
        #1 0x55f88c750906 in tui_layout_split::clone() const /home/simark/src/binutils-gdb/gdb/tui/tui-layout.c:515
        #2 0x55f88c74e60e in show_layout /home/simark/src/binutils-gdb/gdb/tui/tui-layout.c:90
        #3 0x55f88c74e7db in tui_set_layout(tui_layout_type) /home/simark/src/binutils-gdb/gdb/tui/tui-layout.c:116
        #4 0x55f88c782f4f in tui_enable() /home/simark/src/binutils-gdb/gdb/tui/tui.c:481
        #5 0x55f88c74eeb2 in tui_layout_command /home/simark/src/binutils-gdb/gdb/tui/tui-layout.c:286
        #6 0x55f88b6f969b in do_const_cfunc /home/simark/src/binutils-gdb/gdb/cli/cli-decode.c:107
        #7 0x55f88b701859 in cmd_func(cmd_list_element*, char const*, int) /home/simark/src/binutils-gdb/gdb/cli/cli-decode.c:1952
        #8 0x55f88c69b455 in execute_command(char const*, int) /home/simark/src/binutils-gdb/gdb/top.c:652
        #9 0x55f88bec9026 in catch_command_errors /home/simark/src/binutils-gdb/gdb/main.c:400
        #10 0x55f88becc1f2 in captured_main_1 /home/simark/src/binutils-gdb/gdb/main.c:1167
        #11 0x55f88becc814 in captured_main /home/simark/src/binutils-gdb/gdb/main.c:1192
        #12 0x55f88becc8a9 in gdb_main(captured_main_args*) /home/simark/src/binutils-gdb/gdb/main.c:1217
        #13 0x55f88b3159cd in main /home/simark/src/binutils-gdb/gdb/gdb.c:32
        #14 0x7f470ee3c152 in __libc_start_main (/usr/lib/libc.so.6+0x27152)

The problem is that the tui_layout_base is missing a virtual destructor.
We allocate a derived object (tui_layout_split), but delete it through a
tui_layout_base pointer.  Since the tui_layout_base destructor is not
virtual, the derived (tui_layout_split) destructor is not called, only
the base destructor.

That code is not in gdb-9-branch, so I don't think this patch is
relevant for the stable branch.

Note that this is caught as a diagnostic with clang:

    In file included from /home/simark/src/binutils-gdb/gdb/tui/tui-layout.c:22:
    In file included from /home/simark/src/binutils-gdb/gdb/defs.h:28:
    In file included from /home/simark/src/binutils-gdb/gdb/gdbsupport/common-defs.h:133:
    In file included from /home/simark/src/binutils-gdb/gdb/gdbsupport/common-exceptions.h:25:
    In file included from /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/9.2.0/../../../../include/c++/9.2.0/memory:80:
    /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/9.2.0/../../../../include/c++/9.2.0/bits/unique_ptr.h:81:2: error: delete called on 'tui_layout_base' that is abstract but has non-virtual destructor [-Werror,-Wdelete-abstract-non-virtual-dtor]
            delete __ptr;
            ^
    /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/9.2.0/../../../../include/c++/9.2.0/bits/unique_ptr.h:284:4: note: in instantiation of member function 'std::default_delete<tui_layout_base>::operator()' requested here
              get_deleter()(std::move(__ptr));
              ^
    /home/simark/src/binutils-gdb/gdb/tui/tui-layout.c:54:41: note: in instantiation of member function 'std::unique_ptr<tui_layout_base, std::default_delete<tui_layout_base> >::~unique_ptr' requested here
    static std::unique_ptr<tui_layout_base> applied_layout;
                                            ^
    1 error generated.

GCC has the similar -Wdelete-non-virtual-dtor, enabled by -Wall, but it
doesn't show up because warnings are inhibited for system headers, where
std::unique_ptr is defined.  There is a bug about it here:

    https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58876

gdb/ChangeLog:

	* tui/tui-layout.h (class tui_layout_base): Add virtual
	destructor.
2019-12-17 15:01:15 -05:00
Bernd Edlinger
5024637fac Fix skip.exp test failure observed with gcc-9.2.0
We need to step a second time with this gcc version.
The first step jumps back to main before entering foo.
Previously the control flow was from bar directly to foo.

Further ananlysis suggests, that this change in behavior started
with gcc-8.1.0 when -gcolumn-info was enabled by default.
The option -gcolumn-info was first implemented in gcc-7.1.0 but
default-disabled, so you can get the altered behavior already with
gcc-7 if you manually enable -gcolumn-info.

Previously there was just one point where line 30 (of skip.c) started:

  [0x00000032]  Advance Line by 27 to 28
  [0x00000034]  Copy
  [0x00000035]  Special opcode 63: advance Address by 4 to 0x4004cb and Line by 2 to 30
  [0x00000036]  Advance PC by constant 17 to 0x4004dc
  [0x00000037]  Special opcode 7: advance Address by 0 to 0x4004dc and Line by 2 to 32

But with -gcolumn-info enabled, we have line 30 three times with different column:

  [0x00000034]  Advance Line by 27 to 28
  [0x00000036]  Copy
  [0x00000037]  Set column to 9
  [0x00000039]  Special opcode 63: advance Address by 4 to 0x4004c6 and Line by 2 to 30
  [0x0000003a]  Set column to 17
  [0x0000003c]  Special opcode 75: advance Address by 5 to 0x4004cb and Line by 0 to 30
  [0x0000003d]  Set column to 3
  [0x0000003f]  Special opcode 75: advance Address by 5 to 0x4004d0 and Line by 0 to 30
  [0x00000040]  Special opcode 105: advance Address by 7 to 0x4004d7 and Line by 2 to 32

That could probably be filtered in dwarf2read.c to keep the old behavior, but
the new behavior makes still sense, even if we cannot really make use of the
column in the line number info for now.
2019-12-17 11:10:25 -05:00
Bernd Edlinger
b63634be64 Whitespace fix in gdb.base/skip.exp
Just use tabs instead of spaces here.
2019-12-17 11:00:25 -05:00
Bernd Edlinger
45d735237b Add a test case for skip with inlined functions 2019-12-16 21:03:13 -05:00
Bernd Edlinger
4a4c04f1f4 Check all inline frames if they are marked for skip
This makes the skip command work in optimized builds, where skipped
functions may be inlined.  Previously that was only working when
stepping into a non-inlined function.
2019-12-16 21:02:22 -05:00
Simon Marchi
0394eed15c jit: make gdb_symtab::blocks an std::forward_list
This patch changes the gdb_symtab::blocks manually maintained linked
list to be an std::forward_list, simplifying memory management.

Currently, the list is sorted as blocks are created.  With an
std::forward_list, it is easier (and probably a bit more efficient) to
sort them once at the end, so this is what I did.

A note about the comment on the "next" field:

  /* gdb_blocks are linked into a tree structure.  Next points to the
     next node at the same depth as this block and parent to the
     parent gdb_block.  */

I don't think it's true that "next" points to the next node at the same
depth.  All nodes are in a simple singly linked list, so necessarily
some node will point to some other node that isn't at the same depth.

gdb/ChangeLog:

	* jit.c (struct gdb_block) <next>: Remove field.
	(struct gdb_symtab) <~gdb_symtab>: Remove.
	<blocks>: Change type to std::forward_list<gdb_block>.
	(compare_block): Remove.
	(jit_block_open_impl): Adjust to std::forward_list.  Place the new
	block at the beginning, don't mind about sorting.
	(finalize_symtab): Adjust to std::forward_list, sort the blocks list
	before using it.
2019-12-16 16:30:50 -05:00
Simon Marchi
b61121178e jit: c++-ify gdb_block
Add a constructor to gdb_block, change the name field to be a
gdb::unique_xmalloc_ptr.  This is in preparation for using an
std::forward_list<gdb_block> in the next patch.

gdb/ChangeLog:

	* jit.c (struct gdb_block): Add constructor, initialize
	real_block and next fields.
	<name>: Change type to gdb::unique_xmalloc_ptr.
	(struct gdb_symtab) <~gdb_symtab>: Free blocks with delete.
	(jit_block_open_impl): Allocate gdb_block with new.
	(finalize_symtab): Adjust to gdb::unique_xmalloc_ptr.
2019-12-16 16:30:50 -05:00
Simon Marchi
1b61f46da5 jit: make gdb_object::symtabs an std::forward_list
Replace the manual linked list with an std::forward_list, simplifying
the memory management.  This requires allocating gdb_object with new and
free'ing it with delete.

gdb/ChangeLog:

	* jit.c: Include forward_list.
	(struct gdb_symtab) <next>: Remove field.
	(struct gdb_object) <symtabs>: Change type to
	std::forward_list<gdb_symtab>.
	(jit_object_open_impl): Allocate gdb_object with new.
	(jit_symtab_open_impl): Adjust to std::forward_list.
	(finalize_symtab): Don't delete symtab.
	(jit_object_close_impl):  Adjust to std::forward_list.  Free
	gdb_object with delete.
2019-12-16 16:30:49 -05:00
Simon Marchi
8986718429 jit: c++-ify gdb_symtab
This patch makes the gdb_symtab bit more c++y, in preparation for the
next patch that will use an std::forward_list<gdb_symtab>.  It changes
the fields to use automatic memory management, in the form of
std::string and gdb::unique_xmalloc_ptr, and adds a constructor and a
destructor.

gdb/ChangeLog:

	* jit.c (struct gdb_symtab): Add constructor, destructor,
	initialize fields.
	<linetable>: Change type to unique_xmalloc_ptr.
	<file_name>: Change type to std::string.
	(jit_symtab_open_impl): Allocate gdb_symtab with new.
	(jit_symtab_line_mapping_add_impl): Adjust.
	(finalize_symtab): Adjust, call delete on stab.
2019-12-16 16:30:49 -05:00
Simon Marchi
d043f8c867 Fix double-free when creating more than one block in JIT debug info reader
A double-free happens when using a JIT debug info reader that creates
more than one block.  In the loop that frees blocks in finalize_symtab,
at the very end, the gdb_block_iter_tmp variable is set initially, but
not changed as the loop advances.  If we have two blocks, the first
iteration frees the first block, the second iteration frees the second
block, but the third iteration tries to free the second block again, as
gdb_block_iter_tmp keeps pointing on the second block.

Fix it by assigning the gdb_block_iter_tmp variable in the loop.

I have improved the jit-reader.exp test to cover this case, by adding a
second "JIT-ed" function and creating a block for it.  I have renamed
the existing function to something I find a bit more descriptive.  There
are no significant changes to jit-reader.exp itself, only updates
following the renaming.  The important changes are in jithost.c
(generate a new function) and in jitreader.c (create a gdb_block for
that function).

This was found because of an ASan report:

$ ./gdb testsuite/outputs/gdb.base/jit-reader/jit-reader -ex "jit-reader-load /home/simark/build/binutils-gdb/gdb/testsuite/outputs/gdb.base/jit-reader/jitreader.so" -ex r
Reading symbols from testsuite/outputs/gdb.base/jit-reader/jit-reader...
Starting program: /home/simark/build/binutils-gdb/gdb/testsuite/outputs/gdb.base/jit-reader/jit-reader
=================================================================
==1751048==ERROR: AddressSanitizer: heap-use-after-free on address 0x604000042eb8 at pc 0x5650ef8eec88 bp 0x7ffe52767290 sp 0x7ffe52767280
READ of size 8 at 0x604000042eb8 thread T0
    #0 0x5650ef8eec87 in finalize_symtab /home/simark/src/binutils-gdb/gdb/jit.c:768
    #1 0x5650ef8eef88 in jit_object_close_impl /home/simark/src/binutils-gdb/gdb/jit.c:797
    #2 0x7fbbda986278 in read_debug_info /home/simark/src/binutils-gdb/gdb/testsuite/gdb.base/jitreader.c:71
    #3 0x5650ef8ef56b in jit_reader_try_read_symtab /home/simark/src/binutils-gdb/gdb/jit.c:850
    #4 0x5650ef8effe3 in jit_register_code /home/simark/src/binutils-gdb/gdb/jit.c:948
    #5 0x5650ef8f2c92 in jit_event_handler(gdbarch*) /home/simark/src/binutils-gdb/gdb/jit.c:1396
    #6 0x5650ef0d137e in handle_jit_event /home/simark/src/binutils-gdb/gdb/breakpoint.c:5470
    [snip]

0x604000042eb8 is located 40 bytes inside of 48-byte region [0x604000042e90,0x604000042ec0)
freed by thread T0 here:
    #0 0x7fbbe57376b0 in __interceptor_free /build/gcc/src/gcc/libsanitizer/asan/asan_malloc_linux.cc:122
    #1 0x5650ef8f350b in xfree<gdb_block> /home/simark/src/binutils-gdb/gdb/gdbsupport/common-utils.h:62
    #2 0x5650ef8eeca9 in finalize_symtab /home/simark/src/binutils-gdb/gdb/jit.c:769
    #3 0x5650ef8eef88 in jit_object_close_impl /home/simark/src/binutils-gdb/gdb/jit.c:797
    #4 0x7fbbda986278 in read_debug_info /home/simark/src/binutils-gdb/gdb/testsuite/gdb.base/jitreader.c:71
    #5 0x5650ef8ef56b in jit_reader_try_read_symtab /home/simark/src/binutils-gdb/gdb/jit.c:850
    #6 0x5650ef8effe3 in jit_register_code /home/simark/src/binutils-gdb/gdb/jit.c:948
    #7 0x5650ef8f2c92 in jit_event_handler(gdbarch*) /home/simark/src/binutils-gdb/gdb/jit.c:1396
    #8 0x5650ef0d137e in handle_jit_event /home/simark/src/binutils-gdb/gdb/breakpoint.c:5470
    [snip]

previously allocated by thread T0 here:
    #0 0x7fbbe5737cd8 in __interceptor_calloc /build/gcc/src/gcc/libsanitizer/asan/asan_malloc_linux.cc:153
    #1 0x5650eef662f3 in xcalloc /home/simark/src/binutils-gdb/gdb/alloc.c:100
    #2 0x5650ef8f34ea in xcnew<gdb_block> /home/simark/src/binutils-gdb/gdb/gdbsupport/poison.h:122
    #3 0x5650ef8ed467 in jit_block_open_impl /home/simark/src/binutils-gdb/gdb/jit.c:557
    #4 0x7fbbda98620a in read_debug_info /home/simark/src/binutils-gdb/gdb/testsuite/gdb.base/jitreader.c:60
    #5 0x5650ef8ef56b in jit_reader_try_read_symtab /home/simark/src/binutils-gdb/gdb/jit.c:850
    #6 0x5650ef8effe3 in jit_register_code /home/simark/src/binutils-gdb/gdb/jit.c:948
    #7 0x5650ef8f2c92 in jit_event_handler(gdbarch*) /home/simark/src/binutils-gdb/gdb/jit.c:1396
    #8 0x5650ef0d137e in handle_jit_event /home/simark/src/binutils-gdb/gdb/breakpoint.c:5470
    [snip]

gdb/ChangeLog:

	* jit.c (finalize_symtab): Set gdb_block_iter_tmp in loop.

gdb/testsuite/ChangeLog:

	* gdb.base/jit-reader.exp (jit_reader_test): Rename
	jit_function_00 to jit_function_stack_mangle.
	* gdb.base/jithost.c (jit_function_t): Rename to...
	(jit_function_stack_mangle_t): ... this.
	(jit_function_add_t): New typedef.
	(jit_function_00_code): Rename to...
	(jit_function_stack_mangle_code): ... this, make static.
	(jit_function_add_code): New.
	(main): Generate "add" function and call it.  Adjust to changes
	in jithost_abi.
	* gdb.base/jithost.h (struct jithost_abi_bounds): New.
	(struct jithost_abi) <begin, end>: Remove fields.
	<object, function_stack_mangle, function_add>: New fields.
	* gdb.base/jitreader.c (struct reader_state) <code_begin,
	code_end>: Remove fields.
	<func_stack_mangle>: New field.
	(read_debug_info): Adjust to renaming, create block for "add"
	function.
	(read_sp, unwind_frame, get_frame_id): Adjust to other changes.
2019-12-16 16:30:49 -05:00
Tom Tromey
d9fa87f4f6 Constify get_exec_file
I noticed that get_exec_file could return a "const char *".  This
patch implements this change.

I couldn't build all the code -- but I did build Linux native and a
mingw cross.

Consequently, the NTO code has a hack, where it casts away const.  I
think this can be removed, but that required more work there, and
since I couldn't compile it, I felt it best not to try.

Let me know what you think.

gdb/ChangeLog
2019-12-16  Tom Tromey  <tromey@adacore.com>

	* windows-nat.c (windows_nat_target::attach): Update.
	* remote.c (extended_remote_target::attach): Update.
	* procfs.c (procfs_target::attach): Update.
	* nto-procfs.c (nto_procfs_target::attach): Update.
	(nto_procfs_target::create_inferior): Update.
	* inf-ptrace.c (inf_ptrace_target::attach): Update.
	* gnu-nat.c (gnu_nat_target::attach): Update.
	(gnu_nat_target::detach): Update.
	* darwin-nat.c (darwin_nat_target::attach): Update.
	* corefile.c (get_exec_file): Constify result.  Remove extraneous
	return.
	* bsd-kvm.c (bsd_kvm_target_open): Update.
	* gdbsupport/common-inferior.h (get_exec_file): Constify result.

gdb/gdbserver/ChangeLog
2019-12-16  Tom Tromey  <tromey@adacore.com>

	* server.c (get_exec_file): Constify result.

Change-Id: I29c60f7313a7def0dcb290ff0c2a4c1dea4f981f
2019-12-16 14:08:11 -07:00
Christian Biesinger
c0c3707ff4 Update Gnulib to the latest git version
This patch allows us to remove a workaround in common-defs.h due to
the gnulib fix in:
https://lists.gnu.org/archive/html/bug-gnulib/2019-11/msg00024.html

All of GDB's local Gnulib patches were already fixed upstream per their
descriptions, so this patch removes them all.

The problem listed here:
https://sourceware.org/ml/gdb-patches/2019-08/msg00553.html
was probably partially fixed by moving gnulib to the toplevel;
for the remainder, I am setting MAKEOVERRIDES to empty in
gnulib/Makefile.am.  See also the comment there (it fixes an issue
with compilers that don't use C99/C11 by default such as GCC 4.8.5,
the default on Centos 7).

gdb/ChangeLog:

2019-12-16  Christian Biesinger  <cbiesinger@google.com>

	* gdbsupport/common-defs.h: Remove workaround for a gnulib bug
	(we no longer need to include time.h before pathmax.h)

gnulib/ChangeLog:

2019-12-16  Christian Biesinger  <cbiesinger@google.com>

	* Makefile.am: Set MAKEOVERRIDES.
	* Makefile.in: Regenerate.
	* aclocal.m4: Regenerate.
	* config.in: Regenerate.
	* configure: Regenerate.
	* import/Makefile.am: Update.
	* import/Makefile.in: Regenerate.
	* import/_Noreturn.h: New file.
	* import/alloca.c (i00afunc): Update.
	* import/alloca.in.h (if): Update.
	* import/arg-nonnull.h: Rename from import/extra/snippet/arg-nonnull.h.
	* import/arpa_inet.in.h (if): Update.
	* import/assure.h: Update.
	* import/at-func.c: Update.
	* import/basename-lgpl.c: Update.
	* import/canonicalize-lgpl.c (if): Update.
	* import/c++defs.h: Rename from import/extra/snippet/c++defs.h.
	* import/cdefs.h: New file.
	* import/chdir-long.c: Update.
	* import/chdir-long.h: Update.
	* import/cloexec.c: Update.
	* import/cloexec.h: Update.
	* import/close.c: Update.
	* import/closedir.c: Update.
	* import/config.charset: Remove.
	* import/dirent-private.h: Update.
	* import/dirent.in.h: Update.
	* import/dirfd.c: Update.
	* import/dirname-lgpl.c: Update.
	* import/dirname.h (base_name): Update.
	* import/dosname.h (if): Update.
	* import/dup-safer-flag.c: New file.
	* import/dup-safer.c: Update.
	* import/dup.c: Update.
	* import/dup2.c (if): Update.
	(dup2_nothrow): Update.
	(ms_windows_dup2): Update.
	* import/errno.in.h (if): Update.
	(elif): Update.
	* import/error.c (if): Update.
	(strerror_r): Update.
	(program_name): Update.
	(error): Update.
	(error_at_line): Update.
	* import/error.h: Update.
	* import/exitfail.c: Update.
	* import/exitfail.h: Update.
	* import/extra/config.rpath: Update.
	* import/extra/snippet/_Noreturn.h: Remove.
	* import/extra/update-copyright: Update.
	* import/fchdir.c: Update.
	* import/fcntl.c (rpl_fcntl): Update.
	(INCL_DOS): Update.
	(if): Update.
	(rpl_fcntl_DUPFD): Update.
	(rpl_fcntl_DUPFD_CLOEXEC): Update.
	(klibc_fcntl): Update.
	(fcntl): Update.
	(have_dupfd_cloexec): Update.
	* import/fcntl.in.h (if): Update.
	(creat): Update.
	(_GL_FUNCDECL_RPL): Update.
	(_GL_CXXALIAS_RPL): Update.
	(_GL_CXXALIAS_SYS): Update.
	(_GL_CXXALIASWARN): Update.
	(_GL_WARN_ON_USE): Update.
	(O_CLOEXEC): Update.
	(GNULIB_defined_O_CLOEXEC): Update.
	* import/fd-hook.c: Update.
	* import/fd-hook.h: Update.
	* import/fd-safer-flag.c: New file.
	* import/fd-safer.c: Update.
	* import/fdopendir.c: Update.
	* import/filename.h: Update.
	* import/filenamecat-lgpl.c (longest_relative_suffix): Update.
	(mfile_name_concat): Update.
	* import/filenamecat.h: Update.
	* import/flexmember.h: Update.
	* import/float+.h: Update.
	* import/float.c: Update.
	* import/float.in.h (LDBL_MIN): Update.
	* import/fnmatch.c (__builtin_expect): Update.
	(FALLTHROUGH): Update.
	* import/fnmatch.in.h (_FNMATCH_H): Update.
	(_): Update.
	(fnmatch): Update.
	(_GL_FUNCDECL_RPL): Update.
	(_GL_CXXALIAS_RPL): Update.
	(_GL_FUNCDECL_SYS): Update.
	(_GL_CXXALIAS_SYS): Update.
	(_GL_CXXALIASWARN): Update.
	(_GL_WARN_ON_USE): Update.
	* import/fnmatch_loop.c (FCT): Update.
	(EXT): Update.
	* import/fpucw.h (GET_FPUCW): Update.
	(SET_FPUCW): Update.
	* import/frexp.c: Update.
	* import/frexpl.c: Update.
	* import/fstat.c (stat): Update.
	(fstat): Update.
	(WINDOWS_NATIVE): Update.
	(fstat_nothrow): Update.
	(WIN32_LEAN_AND_MEAN): Update.
	* import/fstatat.c (normal_fstatat): Update.
	(rpl_fstatat): Update.
	* import/getcwd-lgpl.c (rpl_getcwd): Update.
	* import/getcwd.c (getcwd_nothrow): Update.
	(getcwd_system): Update.
	(__getcwd): Update.
	* import/getdtablesize.c (if): Update.
	(_setmaxstdio): Update.
	(_setmaxstdio_nothrow): Update.
	(getdtablesize): Update.
	* import/getlogin_r.c (if): Update.
	(getlogin_r): Update.
	* import/getprogname.c (getprogname): Update.
	* import/getprogname.h: Update.
	* import/gettext.h (if): Update.
	* import/gettimeofday.c (WINDOWS_NATIVE): Update.
	(localtime): Update.
	(GetProcAddress): Update.
	(gmtime): Update.
	(void): Update.
	(struct tm): Update.
	(rpl_localtime): Update.
	(initialize): Update.
	(rpl_gmtime): Update.
	(tzset): Update.
	(rpl_tzset): Update.
	* import/glob-libc.h (_Restrict_): Update.
	(__size_t): Update.
	(__need_size_t): Update.
	(glob): Update.
	(globfree): Update.
	(__REDIRECT_NTH): Update.
	(glob64): Update.
	(globfree64): Update.
	(glob_pattern_p): Update.
	* import/glob.c (POSIX): Update.
	(if): Update.
	(__set_errno): Update.
	(getpwnam_r): Update.
	(__lstat64): Update.
	(FLEXIBLE_ARRAY_MEMBER): Update.
	(__glob_pattern_p): Update.
	(GETPW_R_SIZE_MAX): Update.
	(GET_LOGIN_NAME_MAX): Update.
	(DT_UNKNOWN): Update.
	(DT_DIR): Update.
	(DT_LNK): Update.
	(D_TYPE_TO_RESULT): Update.
	(readdir_result_might_be_symlink): Update.
	(readdir_result_might_be_dir): Update.
	(readdir_result_type): Update.
	(D_INO_TO_RESULT): Update.
	(READDIR_RESULT_INITIALIZER): Update.
	(attribute_hidden): Update.
	(__attribute_noinline__): Update.
	(__builtin_expect): Update.
	(__glibc_unlikely): Update.
	(__has_builtin): Update.
	(__glob_pattern_type): Update.
	(is_dir): Update.
	(glob): Update.
	(globfree): Update.
	(libc_hidden_def): Update.
	(DIRSEP_CHAR): Update.
	(prefix_array): Update.
	(weak_alias): Update.
	(link_exists2_p): Update.
	(link_exists_p): Update.
	(glob_in_dir): Update.
	(GLOBNAMES_MEMBERS): Update.
	* import/glob.in.h (_GL_GLOB_H): Update.
	(_): Update.
	(__BEGIN_DECLS): Update.
	(__END_DECLS): Update.
	(_Restrict_): Update.
	(__THROW): Update.
	(__THROWNL): Update.
	(__size_t): Update.
	(__USE_GNU): Update.
	(glob): Update.
	(globfree): Update.
	(glob_pattern_p): Update.
	(__glob_pattern_p): Update.
	(__GLOB_GNULIB): Update.
	(_GL_FUNCDECL_RPL): Update.
	(_GL_CXXALIAS_RPL): Update.
	(_GL_FUNCDECL_SYS): Update.
	(_GL_CXXALIAS_SYS): Update.
	(_GL_WARN_ON_USE): Update.
	* import/glob_internal.h: New file.
	* import/glob_pattern_p.c: New file.
	* import/globfree.c: New file.
	* import/glthread/lock.c (glthread_rwlock_init_for_glibc): Update.
	(glthread_rwlock_rdlock_multithreaded): Update.
	(glthread_once_call): Update.
	(glthread_once_multithreaded): Update.
	(glthread_once_singlethreaded): Update.
	(glthread_recursive_lock_init_multithreaded): Update.
	(glthread_recursive_lock_lock_multithreaded): Update.
	(glthread_recursive_lock_unlock_multithreaded): Update.
	(glthread_recursive_lock_destroy_multithreaded): Update.
	(glthread_lock_init_func): Update.
	(glthread_lock_lock_func): Update.
	(glthread_lock_unlock_func): Update.
	(glthread_lock_destroy_func): Update.
	(gl_waitqueue_t): Update.
	(gl_waitqueue_init): Update.
	(gl_waitqueue_add): Update.
	(gl_waitqueue_notify_first): Update.
	(gl_waitqueue_notify_all): Update.
	(glthread_rwlock_init_func): Update.
	(glthread_rwlock_rdlock_func): Update.
	(glthread_rwlock_wrlock_func): Update.
	(glthread_rwlock_unlock_func): Update.
	(glthread_rwlock_destroy_func): Update.
	(glthread_recursive_lock_init_func): Update.
	(glthread_recursive_lock_lock_func): Update.
	(glthread_recursive_lock_unlock_func): Update.
	(glthread_recursive_lock_destroy_func): Update.
	(glthread_once_func): Update.
	* import/glthread/lock.h (c11_threads_in_use): Update.
	(pthread_in_use): Update.
	(gl_rwlock_initializer): Update.
	(glthread_rwlock_init): Update.
	(glthread_rwlock_init_for_glibc): Update.
	(pth_in_use): Update.
	(gl_lock_define): Update.
	(gl_lock_define_initialized): Update.
	(gl_lock_initializer): Update.
	(glthread_lock_init): Update.
	(glthread_lock_lock): Update.
	(glthread_lock_unlock): Update.
	(glthread_lock_destroy): Update.
	(gl_rwlock_define): Update.
	(gl_rwlock_define_initialized): Update.
	(glthread_rwlock_rdlock): Update.
	(glthread_rwlock_wrlock): Update.
	(glthread_rwlock_unlock): Update.
	(glthread_rwlock_destroy): Update.
	(gl_recursive_lock_define): Update.
	(gl_recursive_lock_define_initialized): Update.
	(gl_recursive_lock_initializer): Update.
	(glthread_recursive_lock_init): Update.
	(glthread_recursive_lock_lock): Update.
	(glthread_recursive_lock_unlock): Update.
	(glthread_recursive_lock_destroy): Update.
	(gl_once_define): Update.
	(glthread_once): Update.
	(glthread_once_multithreaded): Update.
	(glthread_once_singlethreaded): Update.
	(thread_in_use): Update.
	(glthread_recursive_lock_init_multithreaded): Update.
	(glthread_recursive_lock_lock_multithreaded): Update.
	(glthread_recursive_lock_unlock_multithreaded): Update.
	(glthread_recursive_lock_destroy_multithreaded): Update.
	(glthread_lock_init_func): Update.
	(glthread_lock_lock_func): Update.
	(glthread_lock_unlock_func): Update.
	(glthread_lock_destroy_func): Update.
	(glthread_rwlock_init_func): Update.
	(glthread_rwlock_rdlock_func): Update.
	(glthread_rwlock_wrlock_func): Update.
	(glthread_rwlock_unlock_func): Update.
	(glthread_rwlock_destroy_func): Update.
	(glthread_recursive_lock_init_func): Update.
	(glthread_recursive_lock_lock_func): Update.
	(glthread_recursive_lock_unlock_func): Update.
	(glthread_recursive_lock_destroy_func): Update.
	(glthread_once_func): Update.
	* import/glthread/threadlib.c: Update.
	* import/hard-locale.c: Update.
	* import/hard-locale.h: Update.
	* import/inet_ntop.c: Update.
	* import/intprops.h (__has_builtin): Update.
	(_GL_INT_CONVERT): Update.
	(_GL_INT_NEGATE_CONVERT): Update.
	(verify): Update.
	(_GL_HAS_BUILTIN_OVERFLOW): Update.
	(_GL_HAS_BUILTIN_ADD_OVERFLOW): Update.
	(_GL_HAS_BUILTIN_OVERFLOW_P): Update.
	(_GL_HAS_BUILTIN_MUL_OVERFLOW): Update.
	(_GL_BINARY_OP_OVERFLOW): Update.
	(INT_ADD_WRAPV): Update.
	(INT_SUBTRACT_WRAPV): Update.
	(INT_MULTIPLY_WRAPV): Update.
	(_GL_INT_OP_WRAPV): Update.
	(_GL_INT_OP_WRAPV_SMALLISH): Update.
	(_GL_INT_OP_WRAPV_LONGISH): Update.
	(_GL_INT_OP_CALC): Update.
	(_GL_INT_OP_CALC1): Update.
	(_GL_INT_OP_WRAPV_VIA_UNSIGNED): Update.
	(_GL_INT_ADD_RANGE_OVERFLOW): Update.
	(_GL_INT_SUBTRACT_RANGE_OVERFLOW): Update.
	(_GL_INT_MULTIPLY_RANGE_OVERFLOW): Update.
	* import/inttypes.in.h (if): Update.
	* import/isnan.c: Update.
	* import/isnand-nolibm.h: Update.
	* import/isnand.c: Update.
	* import/isnanl-nolibm.h: Update.
	* import/isnanl.c: Update.
	* import/itold.c: Update.
	* import/libc-config.h: New file.
	* import/limits.in.h (LLONG_MIN): Update.
	(LLONG_MAX): Update.
	(ULLONG_MAX): Update.
	(WORD_BIT): Update.
	(LONG_BIT): Update.
	* import/localcharset.c (setlocale): Update.
	(relocate): Update.
	(O_NOFOLLOW): Update.
	(ISSLASH): Update.
	(DIRECTORY_SEPARATOR): Update.
	(getc): Update.
	(volatile): Update.
	(get_charset_aliases): Update.
	(struct table_entry): Update.
	(alias_table_defined): Update.
	(locale_table_defined): Update.
	(locale_charset): Update.
	(if): Update.
	* import/localcharset.h: Update.
	* import/localtime-buffer.c: New file.
	* import/localtime-buffer.h: New file.
	* import/lstat.c (rpl_lstat): Update.
	* import/m4/00gnulib.m4: Update.
	* import/m4/__inline.m4: New file.
	* import/m4/absolute-header.m4: Update.
	* import/m4/alloca.m4: Update.
	* import/m4/arpa_inet_h.m4: Update.
	* import/m4/builtin-expect.m4: New file.
	* import/m4/canonicalize.m4: Update.
	* import/m4/chdir-long.m4: Update.
	* import/m4/close.m4: Update.
	* import/m4/closedir.m4: Update.
	* import/m4/codeset.m4: Update.
	* import/m4/configmake.m4: Remove.
	* import/m4/d-ino.m4: Update.
	* import/m4/d-type.m4: Update.
	* import/m4/dirent_h.m4: Update.
	* import/m4/dirfd.m4: Update.
	* import/m4/dirname.m4: Update.
	* import/m4/double-slash-root.m4: Update.
	* import/m4/dup.m4: Update.
	* import/m4/dup2.m4: Update.
	* import/m4/eealloc.m4: Update.
	* import/m4/environ.m4: Update.
	* import/m4/errno_h.m4: Update.
	* import/m4/error.m4: Update.
	* import/m4/exponentd.m4: Update.
	* import/m4/exponentl.m4: Update.
	* import/m4/extensions.m4: Update.
	* import/m4/extern-inline.m4: Update.
	* import/m4/fchdir.m4: Update.
	* import/m4/fcntl-o.m4: Update.
	* import/m4/fcntl.m4: Update.
	* import/m4/fcntl_h.m4: Update.
	* import/m4/fdopendir.m4: Update.
	* import/m4/filenamecat.m4: Update.
	* import/m4/flexmember.m4: Update.
	* import/m4/float_h.m4: Update.
	* import/m4/fnmatch.m4: Update.
	* import/m4/fnmatch_h.m4: New file.
	* import/m4/fpieee.m4: Update.
	* import/m4/frexp.m4: Update.
	* import/m4/frexpl.m4: Update.
	* import/m4/fstat.m4: Update.
	* import/m4/fstatat.m4: Update.
	* import/m4/getcwd-abort-bug.m4: Update.
	* import/m4/getcwd-path-max.m4: Update.
	* import/m4/getcwd.m4: Update.
	* import/m4/getdtablesize.m4: Update.
	* import/m4/getlogin.m4: New file.
	* import/m4/getlogin_r.m4: Update.
	* import/m4/getpagesize.m4: New file.
	* import/m4/getprogname.m4: Update.
	* import/m4/gettimeofday.m4: Update.
	* import/m4/glibc21.m4: Remove.
	* import/m4/glob.m4: Update.
	* import/m4/glob_h.m4: New file.
	* import/m4/gnulib-cache.m4: Update.
	* import/m4/gnulib-common.m4: Update.
	* import/m4/gnulib-comp.m4: Update.
	* import/m4/gnulib-tool.m4: Update.
	* import/m4/hard-locale.m4: Remove.
	* import/m4/host-cpu-c-abi.m4: New file.
	* import/m4/include_next.m4: Update.
	* import/m4/inet_ntop.m4: Update.
	* import/m4/inttypes-pri.m4: Update.
	* import/m4/inttypes.m4: Update.
	* import/m4/isnand.m4: Update.
	* import/m4/isnanl.m4: Update.
	* import/m4/largefile.m4: Update.
	* import/m4/lib-ld.m4: Update.
	* import/m4/lib-link.m4: Update.
	* import/m4/lib-prefix.m4: Update.
	* import/m4/limits-h.m4: Update.
	* import/m4/localcharset.m4: Update.
	* import/m4/locale-fr.m4: Update.
	* import/m4/locale-ja.m4: Update.
	* import/m4/locale-zh.m4: Update.
	* import/m4/localtime-buffer.m4: New file.
	* import/m4/lock.m4: Update.
	* import/m4/longlong.m4: Update.
	* import/m4/lstat.m4: Update.
	* import/m4/malloc.m4: Update.
	* import/m4/malloca.m4: Update.
	* import/m4/math_h.m4: Update.
	* import/m4/mbrtowc.m4: Update.
	* import/m4/mbsinit.m4: Update.
	* import/m4/mbsrtowcs.m4: Update.
	* import/m4/mbstate_t.m4: Update.
	* import/m4/memchr.m4: Update.
	* import/m4/memmem.m4: Update.
	* import/m4/mempcpy.m4: Update.
	* import/m4/memrchr.m4: Update.
	* import/m4/mkdir.m4: Update.
	* import/m4/mkdtemp.m4: Update.
	* import/m4/mkostemp.m4: Update.
	* import/m4/mmap-anon.m4: Update.
	* import/m4/mode_t.m4: Update.
	* import/m4/msvc-inval.m4: Update.
	* import/m4/msvc-nothrow.m4: Update.
	* import/m4/multiarch.m4: Update.
	* import/m4/netinet_in_h.m4: Update.
	* import/m4/nocrash.m4: Update.
	* import/m4/off_t.m4: Update.
	* import/m4/onceonly.m4: Remove.
	* import/m4/open-cloexec.m4: New file.
	* import/m4/open-slash.m4: New file.
	* import/m4/open.m4: Update.
	* import/m4/openat.m4: Update.
	* import/m4/opendir.m4: Update.
	* import/m4/pathmax.m4: Update.
	* import/m4/pthread_rwlock_rdlock.m4: New file.
	* import/m4/rawmemchr.m4: Update.
	* import/m4/readdir.m4: Update.
	* import/m4/readlink.m4: Update.
	* import/m4/realloc.m4: Update.
	* import/m4/rename.m4: Update.
	* import/m4/rewinddir.m4: Update.
	* import/m4/rmdir.m4: Update.
	* import/m4/save-cwd.m4: Update.
	* import/m4/secure_getenv.m4: Remove.
	* import/m4/setenv.m4: Update.
	* import/m4/signal_h.m4: Update.
	* import/m4/socklen.m4: Update.
	* import/m4/sockpfaf.m4: Update.
	* import/m4/ssize_t.m4: Update.
	* import/m4/stat-time.m4: New file.
	* import/m4/stat.m4: Update.
	* import/m4/std-gnu11.m4: New file.
	* import/m4/stdalign.m4: Update.
	* import/m4/stdbool.m4: Update.
	* import/m4/stddef_h.m4: Update.
	* import/m4/stdint.m4: Update.
	* import/m4/stdio_h.m4: Update.
	* import/m4/stdlib_h.m4: Update.
	* import/m4/strchrnul.m4: Update.
	* import/m4/strdup.m4: Update.
	* import/m4/strerror.m4: Update.
	* import/m4/strerror_r.m4: Update.
	* import/m4/string_h.m4: Update.
	* import/m4/strstr.m4: Update.
	* import/m4/strtok_r.m4: Update.
	* import/m4/sys_socket_h.m4: Update.
	* import/m4/sys_stat_h.m4: Update.
	* import/m4/sys_time_h.m4: Update.
	* import/m4/sys_types_h.m4: Update.
	* import/m4/sys_uio_h.m4: Update.
	* import/m4/tempname.m4: Update.
	* import/m4/threadlib.m4: Update.
	* import/m4/time_h.m4: Update.
	* import/m4/time_r.m4: Update.
	* import/m4/unistd-safer.m4: Update.
	* import/m4/unistd_h.m4: Update.
	* import/m4/warn-on-use.m4: Update.
	* import/m4/wchar_h.m4: Update.
	* import/m4/wchar_t.m4: Update.
	* import/m4/wctype_h.m4: Update.
	* import/m4/wint_t.m4: Update.
	* import/malloc.c: Update.
	* import/malloc/scratch_buffer.h: New file.
	* import/malloc/scratch_buffer_grow.c: New file.
	* import/malloc/scratch_buffer_grow_preserve.c: New file.
	* import/malloc/scratch_buffer_set_array_size.c: New file.
	* import/malloca.c (MAGIC_NUMBER): Update.
	(MAGIC_SIZE): Update.
	(struct preliminary_header): Update.
	(HEADER_SIZE): Update.
	(union header): Update.
	(verify): Update.
	(HASH_TABLE_SIZE): Update.
	(freea): Update.
	* import/malloca.h (malloca): Update.
	(nmalloca): Update.
	* import/malloca.valgrind: Remove.
	* import/math.in.h (_GL_MATH_CXX_REAL_FLOATING_DECL_2): Update.
	(func): Update.
	(rpl_func): Update.
	(f): Update.
	(d): Update.
	(l): Update.
	(_GL_WARN_ON_USE): Update.
	(_GL_WARN_ON_USE_ATTRIBUTE): Update.
	(FP_ILOGB0): Update.
	(FP_ILOGBNAN): Update.
	(acosf): Update.
	(_GL_FUNCDECL_RPL): Update.
	(_GL_CXXALIAS_RPL): Update.
	(asinf): Update.
	(atanf): Update.
	(atan2f): Update.
	(cosf): Update.
	(coshf): Update.
	(expf): Update.
	(expl): Update.
	(expm1l): Update.
	(ilogbl): Update.
	(rintl): Update.
	(sinf): Update.
	(sinhf): Update.
	(sqrtf): Update.
	(tanf): Update.
	(tanhf): Update.
	(isfinite): Update.
	(isinf): Update.
	(isnan): Update.
	(GNULIB_defined_signbit): Update.
	(signbit): Update.
	* import/mbrtowc.c (FALLTHROUGH): Update.
	(locale_enc): Update.
	(locale_enc_cached): Update.
	(gl_lock_define_initialized): Update.
	(mbrtowc): Update.
	* import/mbsinit.c (if): Update.
	(mbsinit): Update.
	* import/mbsrtowcs-impl.h: Update.
	* import/mbsrtowcs-state.c: Update.
	* import/mbsrtowcs.c: Update.
	* import/memchr.c: Update.
	* import/memchr.valgrind: Update.
	* import/memmem.c (__builtin_expect): Update.
	* import/mempcpy.c: Update.
	* import/memrchr.c (__memrchr): Update.
	* import/mkdir.c (if): Update.
	* import/mkdtemp.c: Update.
	* import/mkostemp.c: Update.
	* import/msvc-inval.c: Update.
	* import/msvc-inval.h: Update.
	* import/msvc-nothrow.c: Update.
	* import/msvc-nothrow.h (if): Update.
	* import/netinet_in.in.h: Update.
	* import/open.c (open): Update.
	(if): Update.
	* import/openat-die.c: Update.
	* import/openat-priv.h: Update.
	* import/openat-proc.c: Update.
	* import/openat.c (rpl_openat): Update.
	* import/openat.h: Update.
	* import/opendir.c: Update.
	* import/pathmax.h (if): Update.
	* import/pipe-safer.c: Update.
	* import/rawmemchr.c: Update.
	* import/rawmemchr.valgrind: Update.
	* import/readdir.c (readdir): Update.
	* import/readlink.c: Update.
	* import/realloc.c: Update.
	* import/ref-add.sin: Remove.
	* import/ref-del.sin: Remove.
	* import/rename.c (if): Update.
	* import/rewinddir.c: Update.
	* import/rmdir.c: Update.
	* import/same-inode.h (SAME_INODE): Update.
	* import/save-cwd.c (save_cwd): Update.
	* import/save-cwd.h: Update.
	* import/scratch_buffer.h: New file.
	* import/secure_getenv.c: Remove.
	* import/setenv.c: Update.
	* import/signal.in.h: Update.
	* import/stat-time.c: New file.
	* import/stat-time.h: New file.
	* import/stat-w32.c: New file.
	* import/stat-w32.h: New file.
	* import/stat.c (if): Update.
	(stat): Update.
	(REPLACE_FUNC_STAT_DIR): Update.
	(WINDOWS_NATIVE): Update.
	(WIN32_LEAN_AND_MEAN): Update.
	(is_unc_root): Update.
	(rpl_stat): Update.
	* import/stdalign.in.h (elif): Update.
	* import/stdbool.in.h: Update.
	* import/stddef.in.h (_GL_STDDEF_ALIGNAS): Update.
	(max_align_t): Update.
	(GNULIB_defined_max_align_t): Update.
	* import/stdint.in.h (WINT_MIN): Update.
	(WINT_MAX): Update.
	(_STDINT_MIN): Update.
	(_STDINT_UNSIGNED_MIN): Update.
	(_STDINT_SIGNED_MIN): Update.
	(PTRDIFF_MIN): Update.
	(SIG_ATOMIC_MIN): Update.
	(WCHAR_MIN): Update.
	* import/stdio.in.h (if): Update.
	* import/stdlib.in.h (if): Update.
	(_GL_WARN_ON_USE): Update.
	(_GL_FUNCDECL_SYS): Update.
	(random): Update.
	(_GL_FUNCDECL_RPL): Update.
	(_GL_CXXALIAS_RPL): Update.
	(srandom): Update.
	(initstate): Update.
	(setstate): Update.
	(_GL_CXXALIAS_SYS): Update.
	(_GL_CXXALIASWARN): Update.
	(GNULIB_defined_strtod_function): Update.
	(strtold): Update.
	(GNULIB_defined_strtold_function): Update.
	* import/str-two-way.h: Update.
	* import/strchrnul.c: Update.
	* import/strchrnul.valgrind: Update.
	* import/strdup.c: Update.
	* import/streq.h: Update.
	* import/strerror-override.c: Update.
	* import/strerror-override.h: Update.
	* import/strerror.c (strerror): Update.
	* import/strerror_r.c (safe_copy): Update.
	* import/string.in.h (_GL_FUNCDECL_SYS): Update.
	(_GL_CXXALIAS_SYS): Update.
	(_GL_CXXALIASWARN): Update.
	(_GL_WARN_ON_USE): Update.
	* import/stripslash.c: Update.
	* import/strnlen1.c: Update.
	* import/strnlen1.h: Update.
	* import/strstr.c (__builtin_expect): Update.
	* import/strtok_r.c: Update.
	* import/sys_socket.in.h (CMSG_SPACE): Update.
	(CMSG_LEN): Update.
	(struct sockaddr_storage): Update.
	(SO_REUSEPORT): Update.
	(_GL_WARN_ON_USE): Update.
	* import/sys_stat.in.h (if): Update.
	(stat): Update.
	(struct stat): Update.
	(st_atime): Update.
	(st_mtime): Update.
	(st_ctime): Update.
	(_GL_WINDOWS_STAT_TIMESPEC): Update.
	(GNULIB_defined_struct_stat): Update.
	(_S_IFBLK): Update.
	(_S_IFLNK): Update.
	(_S_IFSOCK): Update.
	(fstat): Update.
	(fstatat): Update.
	(lstat): Update.
	(stat64): Update.
	(_stat64): Update.
	(_stat32i64): Update.
	(_stati64): Update.
	(_stat32): Update.
	(_stat64i32): Update.
	* import/sys_time.in.h: Update.
	* import/sys_types.in.h (dev_t): Update.
	(GNULIB_defined_dev_t): Update.
	(ino_t): Update.
	(GNULIB_defined_ino_t): Update.
	(_GL_WINDOWS_STAT_INODES): Update.
	(if): Update.
	* import/sys_uio.in.h: Update.
	* import/tempname.c (__secure_getenv): Update.
	(try_nocreate): Update.
	* import/tempname.h: Update.
	* import/time.in.h (tzset): Update.
	(_GL_FUNCDECL_RPL): Update.
	(_GL_CXXALIAS_RPL): Update.
	(_GL_FUNCDECL_SYS): Update.
	(_GL_CXXALIAS_SYS): Update.
	(_GL_CXXALIASWARN): Update.
	(ctime): Update.
	(strftime): Update.
	* import/time_r.c: Update.
	* import/unistd--.h: Update.
	* import/unistd-safer.h: Update.
	* import/unistd.in.h (if): Update.
	(elif): Update.
	(__need_getopt): Update.
	(access): Update.
	(_GL_FUNCDECL_RPL): Update.
	(_GL_CXXALIAS_RPL): Update.
	(_GL_CXXALIAS_SYS): Update.
	(_GL_CXXALIASWARN): Update.
	(_GL_WARN_ON_USE): Update.
	(_GL_FUNCDECL_SYS): Update.
	(__declspec): Update.
	(_GL_WARN_ON_USE_ATTRIBUTE): Update.
	(faccessat): Update.
	(getpass): Update.
	(truncate): Update.
	* import/unsetenv.c: Update.
	* import/verify.h (if): Update.
	(_GL_HAVE__STATIC_ASSERT): Update.
	(_GL_HAVE_STATIC_ASSERT): Update.
	(_GL_HAVE__STATIC_ASSERT1): Update.
	(_GL_HAVE_STATIC_ASSERT1): Update.
	(_GL_VERIFY): Update.
	(_Static_assert): Update.
	(_GL_HAS_BUILTIN_TRAP): Update.
	(_GL_HAS_BUILTIN_UNREACHABLE): Update.
	(verify_true): Update.
	(verify): Update.
	(__has_builtin): Update.
	(elif): Update.
	(assume): Update.
	* import/warn-on-use.h: Rename from import/extra/snippet/warn-on-use.h.
	* import/wchar.in.h (if): Update.
	(wcsftime): Update.
	(_GL_FUNCDECL_RPL): Update.
	(_GL_CXXALIAS_RPL): Update.
	(_GL_FUNCDECL_SYS): Update.
	(_GL_CXXALIAS_SYS): Update.
	(_GL_CXXALIASWARN): Update.
	(_GL_WARN_ON_USE): Update.
	* import/wctype.in.h (rpl_iswalnum): Update.
	(rpl_iswalpha): Update.
	(rpl_iswblank): Update.
	(rpl_iswcntrl): Update.
	(rpl_iswdigit): Update.
	(rpl_iswgraph): Update.
	(rpl_iswlower): Update.
	(rpl_iswprint): Update.
	(rpl_iswpunct): Update.
	(rpl_iswspace): Update.
	(rpl_iswupper): Update.
	(rpl_iswxdigit): Update.
	(rpl_towlower): Update.
	(rpl_towupper): Update.
	(iswalnum): Update.
	(iswalpha): Update.
	(iswblank): Update.
	(iswcntrl): Update.
	(iswdigit): Update.
	(iswgraph): Update.
	(iswlower): Update.
	(iswprint): Update.
	(iswpunct): Update.
	(iswspace): Update.
	(iswupper): Update.
	(iswxdigit): Update.
	(towlower): Update.
	(towupper): Update.
	* import/windows-initguard.h: New file.
	* import/windows-mutex.c: New file.
	* import/windows-mutex.h: New file.
	* import/windows-once.c: New file.
	* import/windows-once.h: New file.
	* import/windows-recmutex.c: New file.
	* import/windows-recmutex.h: New file.
	* import/windows-rwlock.c: New file.
	* import/windows-rwlock.h: New file.
	* import/xalloc-oversized.h: New file.
	* patches/0001-Fix-PR-gdb-23558-Use-system-s-getcwd-when-cross-comp.patch: Remove.
	* patches/0002-mkostemp-mkostemps-Fix-compilation-error-in-C-mode-o.patch: Remove.
	* patches/0003-Fix-glob-c-Coverity-issues.patch: Remove.
	* update-gnulib.sh: Update to latest gnulib and don't apply patches
	anymore.  Also updates the patch -p flag to the current directory structure in
	case patches are needed again in the future.

Change-Id: I9c2b07a3046baecfb664e21b2644353ea888dbfa
2019-12-16 12:20:50 -06:00
Christian Biesinger
d3ecddab5f Use a member function to set a symbol's language
This removes symbol_set_language and SYMBOL_SET_LANGUAGE in favor of
a new function general_symbol_info::set_language. symbol and minimal_symbol
already inherit from that struct so this works naturally.

gdb/ChangeLog:

2019-12-15  Christian Biesinger  <cbiesinger@google.com>

	* ada-exp.y (write_ambiguous_var): Update.
	* coffread.c (process_coff_symbol): Update.
	* ctfread.c (ctf_add_enum_member_cb): Update.
	(new_symbol): Update.
	* dwarf2read.c (fixup_go_packaging): Update.
	(new_symbol): Update.
	* language.c (language_alloc_type_symbol): Update.
	* mdebugread.c (new_symbol): Update.
	* minsyms.c (minimal_symbol_reader::record_full): Update.
	* psymtab.c (add_psymbol_to_bcache): Update.
	* stabsread.c (define_symbol): Update.
	(read_enum_type): Update.
	* symtab.c (symbol_set_language): Make this a member function...
	(general_symbol_info::set_language): ... here.
	* symtab.h (struct general_symbol_info) <set_language>: New function.
	(SYMBOL_SET_LANGUAGE): Remove.
	(symbol_set_language): Remove.

Change-Id: Ideafb6c384004b9adef793a1192735c501da41d5
2019-12-16 00:44:58 -06:00
Christian Biesinger
c1b5c1ebc9 Use an accessor function for general_symbol_info::language
Also renames the member variable to m_language to make code easier to read
when more functions become member functions.

I was originally hoping to eventually make m_language private (after a few
more patches), but unfortunately then it no longer counts as a POD type,
which means gdbsupport/poison.h won't let us use memset to initialize
this type, which psymtabs rely on to clear padding bytes so that bcache
can work properly.

gdb/ChangeLog:

2019-12-15  Christian Biesinger  <cbiesinger@google.com>

	* ada-lang.c (ada_add_block_symbols): Update.
	(ada_collect_symbol_completion_matches): Update.
	* ax-gdb.c (gen_expr): Update.
	* block.c (block_lookup_symbol): Update.
	(block_lookup_symbol_primary): Update.
	(block_find_symbol): Update.
	* cp-namespace.c (cp_lookup_symbol_imports_or_template): Update.
	* dbxread.c (process_one_symbol): Update.
	* dictionary.c (insert_symbol_hashed): Update.
	(collate_pending_symbols_by_language): Update.
	(mdict_add_symbol): Update.
	* dwarf-index-write.c (write_psymbols): Update.
	* dwarf2read.c (fixup_go_packaging): Update.
	* findvar.c (read_var_value): Update.
	* ft32-tdep.c (ft32_skip_prologue): Update.
	* go-lang.c (go_symbol_package_name): Update.
	* language.h (scoped_switch_to_sym_language_if_auto::
	scoped_switch_to_sym_language_if_auto): Update.
	* linespec.c (find_method): Update.
	(find_label_symbols_in_block): Update.
	* mdebugread.c (parse_symbol): Update.
	* mi/mi-cmd-stack.c (list_arg_or_local): Update.
	* minsyms.c (add_minsym_to_demangled_hash_table): Update.
	(minimal_symbol_reader::install): Update.
	* moxie-tdep.c (moxie_skip_prologue): Update.
	* parse.c (parse_exp_in_context): Update.
	* psymtab.c (psymbol_name_matches): Update.
	(match_partial_symbol): Update.
	(lookup_partial_symbol): Update.
	(psymbol_hash): Update.
	(psymbol_compare): Update.
	* python/py-framefilter.c (extract_sym): Update.
	(py_print_single_arg): Update.
	* stabsread.c (define_symbol): Update.
	* stack.c (print_frame_arg): Update.
	(find_frame_funname): Update.
	(info_frame_command_core): Update.
	* symfile.c (set_initial_language): Update.
	* symtab.c (symbol_set_demangled_name): Update.
	(symbol_get_demangled_name): Update.
	(symbol_set_language): Update.
	(symbol_find_demangled_name): Update.
	(symbol_set_names): Update.
	(general_symbol_info::natural_name): Update.
	(general_symbol_info::demangled_name): Update.
	(general_symbol_info::search_name): Update.
	(symbol_matches_search_name): Update.
	(eq_symbol_entry): Update.
	(iterate_over_symbols): Update.
	(completion_list_add_symbol): Update.
	(completion_list_add_msymbol): Update.
	(completion_list_add_fields): Update.
	* symtab.h (struct general_symbol_info) <language>: New function.
	<language>: Rename to...
	<m_language>: ...this.
	(SYMBOL_LANGUAGE): Remove.
	(MSYMBOL_LANGUAGE): Remove.
	(struct symbol) <ctor>: Update.
	* xstormy16-tdep.c (xstormy16_skip_prologue): Update.

Change-Id: I6464d477457e61639c63ddf8b145e407a35c235a
2019-12-16 00:44:36 -06:00
Christian Biesinger
747cfc8c6b Use symbol_set_language to set a symbol's language
Instead of using SYMBOL_LANGUAGE (sym) = foo.

Having only a single way to set a symbol's language is clearer and this
is also a requirement for making set_language a member function.

gdb/ChangeLog:

2019-12-15  Christian Biesinger  <cbiesinger@google.com>

	* ada-exp.y (write_ambiguous_var): Call symbol_set_language to
	set the language of sym.
	* language.c (language_alloc_type_symbol): Likewise.

Change-Id: I85338ea2e4121155f2da222fe0aa6b7d3ffe26f7
2019-12-16 00:39:50 -06:00
Andrew Burgess
db178f47dd gdb/doc: Remove duplicate description of lookup_global_symbol
In this commit:

  commit 086baaf134
  Date:   Tue Oct 15 16:18:26 2019 +0100

      gdb/python: Introduce gdb.lookup_static_symbols

A duplicate description of gdb.lookup_global_symbol was accidentally
added.  This commit corrects this mistake and removes the duplicate.

gdb/doc/ChangeLog:

	* python.texi (Symbols In Python): Remove duplicate description of
	gdb.lookup_global_symbol.

Change-Id: I4457b42cf05bde39e5c0ff39f168af919cad1255
2019-12-14 23:11:58 +00:00
Sergio Durigan Junior
ff8577f649 Guard against 'current_directory == NULL' on gdb_abspath (PR gdb/23613)
Ref.: https://bugzilla.redhat.com/show_bug.cgi?id=1728147
Ref.: https://sourceware.org/bugzilla/show_bug.cgi?id=23613

Hi,

This bug has been reported against Fedora GDB, but there's also an
upstream bug.  The problem reported is that GDB segfaults when the
working directory is deleted.  It's pretty use to reproduce it:

  mkdir bla
  cd bla
  rmdir ../bla
  gdb echo

Debugging the problem is a bit tricky, because, since the current
directory doesn't exist anymore, a corefile cannot be saved there.
After a few attempts, I came up with the following:

  gdb -ex 'shell mkdir bla' -ex 'cd bla' -ex 'shell rmdir ../bla' -ex 'r echo' ./gdb/gdb

This assumes that you're inside a build directory which contains
./gdb/gdb, of course.

After investigating it, I found that the problem happens at
gdb_abspath, where we're dereferencing 'current_directory' without
checking if it's NULL:

    ...
    (concat (current_directory,
	     IS_DIR_SEPARATOR (current_directory[strlen (current_directory) - 1])
	     ? "" : SLASH_STRING,
    ...

So I fixed the problem with the patch below.  The idea is that, if
'current_directory' is NULL, then the final string returned should be
just the "path".

After fixing the bug, I found a similar one reported against our
bugzilla: PR gdb/23613.  The problem is the same, but the reproducer
is a bit different.

I really tried writing a testcase for this, but unfortunately it's
apparently not possible to start GDB inside a non-existent directory
with DejaGNU.

I regression tested this patch on the BuildBot, and no regressions
were found.

gdb/ChangeLog:
2019-12-14  Sergio Durigan Junior  <sergiodj@redhat.com>

	https://bugzilla.redhat.com/show_bug.cgi?id=1728147
	PR gdb/23613
	* bsd-kvm.c (bsd_kvm_target_open): Use 'gdb_abspath'.
	* corelow.c: Include 'gdbsupport/pathstuff.h'.
	(core_target_open): Use 'gdb_abspath'.
	* gdbsupport/pathstuff.c (gdb_abspath): Guard against
	'current_directory == NULL' case.
	* gdbsupport/pathstuff.h (gdb_abspath): Expand comment and
	explain what happens when 'current_directory' is NULL.
	* go32-nat.c (go32_nat_target::wait): Check if
	'current_directory' is NULL before call to 'chdir'.
	* source.c (add_path): Use 'gdb_abspath'.
	* top.c: Include 'gdbsupport/pathstuff.h'.
	(init_history): Use 'gdb_abspath'.
	(set_history_filename): Likewise.
	* tracefile-tfile.c: Include 'gdbsupport/pathstuff.h'.
	(tfile_target_open): Use 'gdb_abspath'.

Change-Id: Ibb0932fa25bc5c2d3ae4a7f64bd7f32885ca403b
2019-12-13 23:49:29 -05:00
Christian Biesinger
f1d293cc58 Revert "Turn off threaded minsym demangling by default"
This reverts commit 62e77f56f0.
(except for ChangeLog and a bugfix in minimal_symbol_reader::install)

As agreed on the mailing list, now that GDB 9 has branched, this patch
reverts the change to set worker-threads to zero. After this patch,
multithreaded minsym demangling will be enabled again by default.

gdb/ChangeLog:

2019-12-13  Christian Biesinger  <cbiesinger@google.com>

	* maint.c (n_worker_threads): Default to -1.
	(worker_threads_disabled): Remove function.
	* maint.h (worker_threads_disabled): Remove function.
	* minsyms.c (minimal_symbol_reader::record_full): Don't call
	symbol_set_names here if worker_threads_disabled () is true.

Change-Id: I5ff3e318d96f60968c8b8bedb84546ad2314d94b
2019-12-13 17:44:52 -05:00
Tom Tromey
234c306803 Remove ARI check for multiple calls to warning or error
ARI has a check for multiple calls to warning or error, suggesting
that they be combined into a single call.  This triggers at three
places in gdb -- throw_bad_regnum_error, guile_repl_command, and the
end of value_cast -- and after examining these, I think they all make
sense as-is.  Instead, it makes sense to remove this check from ARI.

gdb/ChangeLog
2019-12-13  Tom Tromey  <tromey@adacore.com>

	* contrib/ari/gdb_ari.sh: Remove check for multiple calls to
	warning or error.

Change-Id: I0618683623a3c7324460c7b9e5d7f252d88c2e8d
2019-12-13 15:15:32 -07:00
Tom Tromey
93537683e7 Remove "fix" call for "long long" from ARI
ARI has a "fix" call for "long long", but this call is incorrect.
This patch removes it.

gdb/ChangeLog
2019-12-13  Tom Tromey  <tromey@adacore.com>

	* contrib/ari/gdb_ari.sh: Remove call to "fix" for "long long".

Change-Id: I97bca2dc04b579fcf7c9dba7fe7fd939451bcefa
2019-12-13 15:15:32 -07:00
Tom Tromey
634561834e Accept -Wno- prefix in ARI
This adds -Wno- support to ARI, so that warnings can be disabled
selectively.  I use this to ignore "deprecated" warnings.

gdb/ChangeLog
2019-12-13  Tom Tromey  <tromey@adacore.com>

	* contrib/ari/gdb_ari.sh: Handle -Wno- prefix.

Change-Id: I6919faedf920e857df4f597df66f0ba3943e0eac
2019-12-13 15:15:32 -07:00
Tom Tromey
98f9338a58 Change ARI usage to GNU style
This changes the ARI usage text to use the GNU style for
"metasyntactic variables".

gdb/ChangeLog
2019-12-13  Tom Tromey  <tromey@adacore.com>

	* contrib/ari/gdb_ari.sh (usage): Use GNU style.

Change-Id: Ibe5a867571382d2985d1b8b78dfef3ddd02291ff
2019-12-13 15:15:32 -07:00
Tom Tromey
3cb5a3a16a Suppress ARI warnings for vsprintf
A few spots can validly call vsprintf; this adds ARI markers to
suppress warnings at these places.

gdb/ChangeLog
2019-12-13  Tom Tromey  <tromey@adacore.com>

	* gdbsupport/common-utils.c (string_printf, string_vprintf)
	(string_vappendf): Add ARI comment.

Change-Id: Ia8665aa5d7b7331a3985b18626b19764a264447b
2019-12-13 15:15:31 -07:00
Tom Tromey
c6cbf900d4 Silence ARI warning about floatformat_to_double
This silences ARI at the one spot that is permitted to call
floatformat_to_double, and also removes the corresponding "fix" call
from gdb_ari.sh -- it was incorrect, and now is not needed.

gdb/ChangeLog
2019-12-13  Tom Tromey  <tromey@adacore.com>

	* contrib/ari/gdb_ari.sh: Remove "fix" call for
	floatformat_to_double.
	* target-float.c (host_float_ops<T>::from_target): Add ARI
	comment.

Change-Id: I778a17a04da417c113194004dd7de3b1df381266
2019-12-13 15:15:31 -07:00
Tom Tromey
036003a671 Silence ARI for valid calls to abort
There are a handful of spots in gdb that validly call abort.  This
patch adds the appropriate ARI marker to these lines, to silence the
ARI report.  This also removes the "fix" call for "abort" from
gdb_ari.sh; it was incorrect and now is not needed.

gdb/ChangeLog
2019-12-13  Tom Tromey  <tromey@adacore.com>

	* contrib/ari/gdb_ari.sh: Remove "fix" call for abort.
	* utils.c (abort_with_message, dump_core, internal_vproblem): Add
	ARI marker to abort.
	* event-top.c (handle_sigsegv): Add ARI marker to abort.

Change-Id: I09ce6aa5010bbe4e5bb73ffdb727481be39d34d6
2019-12-13 15:15:31 -07:00
Tom Tromey
8aaaf7577f Fix ARI text for floatformat_from_double
ARI reports the wrong substitution for floatformat_from_double.
"floatformat_from_doublest" was renamed in 2017.

gdb/ChangeLog
2019-12-13  Tom Tromey  <tromey@adacore.com>

	* contrib/ari/gdb_ari.sh: Fix floatformat_from_double text.

Change-Id: Ibf1b194ea509b12ae8bc30ce285c809c96218557
2019-12-13 15:15:31 -07:00
Tom Tromey
fe56157f92 Remove ATTRIBUTE_UNUSED check from ARI
The text for the ATTRIBUTE_UNUSED check in ARI is plainly incorrect
now -- gdb does in fact use ATTRIBUTE_UNUSED, and there's no issue in
doing so, when done properly.

This patch removes this check.

gdb/ChangeLog
2019-12-13  Tom Tromey  <tromey@adacore.com>

	* contrib/ari/gdb_ari.sh: Remove ATTRIBUTE_UNUSED check.

Change-Id: I13fd8e9b40dbaab3978dbf9b6c4228b62299d944
2019-12-13 15:15:31 -07:00
Tom Tromey
a15a95ed26 Remove "boolean" and "var_boolean" checks from ARI
The "boolean" and "var_boolean" checks from ARI seem only to generate
false reports.

Now that gdb is in C++, at least the "boolean" check seems unlikely to
ever generate a true report.

The "var_boolean" check likewise doesn't seem valuable any more --
presumably this refers to some ancient way of doing things in gdb, and
isn't likely to find a bug in the future.

Therefore, this patch removes these two checks.

gdb/ChangeLog
2019-12-13  Tom Tromey  <tromey@adacore.com>

	* contrib/ari/gdb_ari.sh: Remove "boolean" and "var_boolean"
	checks.

Change-Id: Iaf449b51e8182ffa0b9ed25fe688e0ff64a07a67
2019-12-13 15:15:30 -07:00
Tom Tromey
a5513db2f5 Fix the gdb build with GCC 7
The Solaris buildbot builder complained about some recent patches of
mine.  Building with GCC 7 failed.

This patch fixes the bug.  I'm checking it in.

gdb/ChangeLog
2019-12-13  Tom Tromey  <tromey@adacore.com>

	* gdbsupport/safe-iterator.h (class basic_safe_range) <begin,
	end>: No longer "const".

Change-Id: I5f428fab61087f467ac3b6475f4ef4dbd314fcb0
2019-12-13 11:29:02 -07:00
Simon Marchi
3a90f26667 Fix indentation in jit.c
Many places in this file use spaces only for indentation.  Fix them to
conform to GNU style.

gdb/ChangeLog:

	* jit.c: Fix indentation, replace spaces with tabs where
	applicable.
2019-12-13 10:12:30 -05:00
Jozef Lawrynowicz
b3f4b80fba MSP430: Relax target glob for configuring GDB
This enables support for the msp430-elfbare target being added to GCC.

gdb/ChangeLog:

2019-12-13  Jozef Lawrynowicz  <jozef.l@mittosystems.com>

	* configure.tgt: Match msp430-*-elf* targets when configuring GDB.
2019-12-13 13:46:32 +00:00
Tom Tromey
e671856cb8 Change objfile::partial_symtabs to be a unique_ptr
A plan I had a while ago was to write the DWARF index in a worker
thread.  This is why objfile::partial_symtabs is a shared_ptr.

However, it turned out that doing this required keeping the objfile
alive as well.  Now that objfiles are managed using shared_ptr,
there's no need for partial_symtabs to be one as well, so this patch
reverts that change.

gdb/ChangeLog
2019-12-12  Tom Tromey  <tom@tromey.com>

	* objfiles.h (struct objfile) <partial_symtabs>: Now a
	unique_ptr.

Change-Id: I3d7831006c40d4c8f3173ba51c0c1b0a32021ae5
2019-12-12 15:50:57 -07:00
Tom Tromey
7d7167ce1b Manage objfiles with shared_ptr
This changes objfiles to be managed using a shared_ptr.  shared_ptr is
chosen because it enables the use of objfiles in background threads.

The simplest way to do this was to introduce a new iterator that will
return the underlying objfile, rather than a shared_ptr.  (I also
tried changing the rest of gdb to use shared_ptr, but this was quite
large; and to using intrusive reference counting, but this also was
tricky.)

gdb/ChangeLog
2019-12-12  Tom Tromey  <tom@tromey.com>

	* progspace.h (objfile_list): New typedef.
	(class unwrapping_objfile_iterator)
	(struct unwrapping_objfile_range): Newl
	(struct program_space) <objfiles_range>: Change type.
	<objfiles>: Change return type.
	<add_objfile>: Change type of "objfile" parameter.
	<objfiles_list>: Now a list of shared_ptr.
	* progspace.c (program_space::add_objfile): Change type of
	"objfile".  Update.
	(program_space::remove_objfile): Update.
	* objfiles.h (struct objfile) <~objfile>: Make public.
	* objfiles.c (objfile::make): Update.
	(objfile::unlink): Don't call delete.

Change-Id: I6fb7fbf06efb7cb7474c525908365863eae27eb3
2019-12-12 15:50:56 -07:00
Tom Tromey
343cc95202 Move free_all_objfiles to program_space
This changes free_all_objfiles to be a method on program_space, in
line with the other changes to treat program_space as a container for
objfiles.

gdb/ChangeLog
2019-12-12  Tom Tromey  <tom@tromey.com>

	* symfile.c (symbol_file_clear): Update.
	* progspace.h (struct program_space) <free_all_objfiles>: Declare
	method.
	* progspace.c (program_space::free_all_objfiles): New method.
	* objfiles.h (free_all_objfiles): Don't declare.
	* objfiles.c (free_all_objfiles): Move to program_space.

Change-Id: I908b549d2981b6005f7ca181fc0e6d24fc8b7b6f
2019-12-12 15:50:56 -07:00
Tom Tromey
d0801dd8f2 Store objfiles on a std::list
This removes objfile::next and changes objfiles to be stored in a
std::list.

gdb/ChangeLog
2019-12-12  Tom Tromey  <tom@tromey.com>

	* progspace.c (program_space::add_objfile)
	(program_space::remove_objfile): Update.
	(program_space::multi_objfile_p): Remove.
	* objfiles.h (struct objfile) <next>: Remove.
	* objfiles.c (objfile::objfile): Update.
	(put_objfile_before): Update.
	(unlink_objfile): Update.
	* progspace.h (object_files): Remove.
	(struct program_space) <objfiles_head>: Remove.
	<objfiles_list>: New member.
	<objfiles_range, objfiles_safe_range>: Change type.
	(objfiles): Change return type.
	(objfiles_safe): Update.
	(multi_objfile_p): Rewrite and inline.
	(object_files): Remove macro.

Change-Id: Ib4430e3db6f9a390399924379a5c10426c514853
2019-12-12 15:50:55 -07:00
Tom Tromey
13bff72615 Introduce basic_safe_range
This introduces the basic_safe_range class, which can be used to
create a basic_safe_iterator.  This also changes basic_safe_iterator
in two ways.

First, it simplifies the constructor.  This seemed unnecessarily
complicated to me, and keeping it this way would prevent the second
change...

... which is to add a second constructor for initializing the
one-past-the-end iterator that is stored in basic_safe_iterator.

gdb/ChangeLog
2019-12-12  Tom Tromey  <tom@tromey.com>

	* gdbsupport/safe-iterator.h (basic_safe_iterator): Simplify.  Add
	second constructor.
	(basic_safe_range): New class.

Change-Id: Ib351ef6fd435129a5053c64e5561877e1459ab37
2019-12-12 15:50:54 -07:00
Tom Tromey
deeafabb67 Remove MULTI_OBJFILE_P
This removes the MULTI_OBJFILE_P macro in favor of a method on the
program space.

gdb/ChangeLog
2019-12-12  Tom Tromey  <tom@tromey.com>

	* progspace.c (program_space::multi_objfile_p): New method.
	* printcmd.c (info_symbol_command): Update.
	* maint.c (maintenance_translate_address): Update.
	* objfiles.h (MULTI_OBJFILE_P): Remove.
	* progspace.h (struct program_space) <multi_objfile_p>: New
	method.

Change-Id: I2779e26ea8909078d63fea8f13bce94cab73948c
2019-12-12 15:50:53 -07:00
Tom Tromey
234529260a Introduce program_space::remove_objfile
This introduces a new method, program_space::remove_objfile, and
changes the objfile destructor not to unlink an objfile from the
program space's list.

This is cleaner because, like the previous patch, it treats the
program space more like a container for objfiles.  Also, this makes it
possible to keep an objfile alive even though it has been unlinked
from the program space's list, which is important for processing in a
worker thread.

gdb/ChangeLog
2019-12-12  Tom Tromey  <tom@tromey.com>

	* progspace.h (struct program_space) <remove_objfile>: Declare.
	* progspace.c (program_space::remove_objfile): New method.
	* objfiles.c (unlink_objfile): Remove.
	(objfile::unlink): Call remove_objfile.
	(objfile): Don't call unlink_objfile.

Change-Id: I22f768827723dce21886fae9b3664532c8349e68
2019-12-12 15:50:53 -07:00
Tom Tromey
7cac64af7b Introduce program_space::add_objfile
This introduces a new method, program_space::add_objfile, that adds an
objfile to the program space's list of objfiles.  It also changes the
obfile's constructor so that linking an objfile into this list is not
done here.

The former is an improvement because it makes more sense to treat the
program space as a container holding objfiles -- so manipulation of
the list belongs there.

The latter is not strictly needed, but seemed better both because it
is removing a global side effect from a constructor, and for symmetry
reasons, as a subsequent patch will remove unlinking from the
destructor.

gdb/ChangeLog
2019-12-12  Tom Tromey  <tom@tromey.com>

	* progspace.h (struct program_space) <add_objfile>: Declare
	method.
	* progspace.c (program_space::add_objfile): New method.
	* objfiles.c (~objfile): Don't unlink objfile.
	(put_objfile_before): Remove.
	(add_separate_debug_objfile): Don't call put_objfile_before.
	(objfile::make): Call add_objfile.  Set new_objfiles_available on
	the per-program-space data.

Change-Id: I93e8525dda631cb89dcc2046a5c51c7c9f34ccfd
2019-12-12 15:50:52 -07:00
Tom Tromey
268e4f0914 Make the objfile destructor private
The idea behind this is that, in the long run, some code will need to
be able to hold onto an objfile after it is unlinked from the program
space.  In particular, this is needed for some functionality to be
moved to worker threads -- otherwise the objfile can be deleted while
still in use.

So, this makes ~objfile private, replacing it with an "unlink" method,
making it more obvious which operation is intended at the calling
points.

gdb/ChangeLog
2019-12-12  Tom Tromey  <tom@tromey.com>

	* symfile.c (syms_from_objfile_1): Use objfile_up.
	(syms_from_objfile_1, remove_symbol_file_command): Call unlink
	method.
	(reread_symbols): Use objfile_up.
	* solib.c (update_solib_list, reload_shared_libraries_1): Call
	unlink method.
	* objfiles.h (struct objfile) <~objfile>: Now private.
	<unlink>: New method.
	(struct objfile_deleter): New.
	(objfile_up): New typedef.
	* objfiles.c (objfile::unlink): New method.
	(free_objfile_separate_debug, free_all_objfiles)
	(objfile_purge_solibs): Use it.
	* jit.c (jit_unregister_code): Remove.
	(jit_inferior_exit_hook, jit_event_handler): Call unlink on
	objfile.
	* compile/compile-object-run.c (do_module_cleanup): Call unlink on
	objfile.
	* compile/compile-object-load.c (compile_object_load): Use
	objfile_up.

Change-Id: I934bee70b26b8b24e1735828fb1e60fe8a05714f
2019-12-12 15:50:52 -07:00
Tom Tromey
f65fe5704a Make add_separate_debug_objfile static
This changes objfile::make to take a "parent" parameter, and makes
add_separate_debug_objfile static.

gdb/ChangeLog
2019-12-12  Tom Tromey  <tom@tromey.com>

	* symfile.c (symbol_file_add_with_addrs): Pass "parent" to
	objfile::make.
	* objfiles.h (struct objjfile) <make>: No longer inline.
	(add_separate_debug_objfile): Don't declare.
	* objfiles.c (add_separate_debug_objfile): Now static.
	(objfile::make): Move from objfiles.h.  Call
	add_separate_debug_objfile.  Add "parent" parameter.

Change-Id: I631f43bb71738dea6ae0697317bf8ef4a0db4617
2019-12-12 15:50:51 -07:00
Tom Tromey
bda13cdcf0 Make the objfile constructor private
This changes the objfile constructor to be private, changing the
callers to use a factory method.  This isn't perhaps strictly needed
for the goal of this series -- changing the container model of
objfiles -- but is a nice symmetry.

gdb/ChangeLog
2019-12-12  Tom Tromey  <tom@tromey.com>

	* symfile.c (symbol_file_add_with_addrs): Use objfile::make.
	* objfiles.h (struct objfile): Make constructor private.
	<make>: New static method.
	* jit.c (jit_object_close_impl): Update.

Change-Id: I42e07bc80a88cf3322ace94ffe869ae5788bcb29
2019-12-12 15:50:50 -07:00
Simon Marchi
7190276c52 Replace xmalloc/xfree with vector in jit.c
I'm currently studying that code and noticed this manual memory
management, which could easily be replaced with a vector, so here it is.

gdb/ChangeLog:

	* jit.c (jit_reader_try_read_symtab): Replace xmalloc/xfree with
	gdb::byte_vector.
2019-12-12 14:54:47 -05:00
Tom Tromey
d61df89700 Remove some calls to malloc_failure
I noticed a couple of spots that call malloc_failure, but that don't
need to.

* In xml-support.c, "concat" uses xmalloc, so cannot return NULL.

* In utils.c, "buildargv" also uses xmalloc, so can only return NULL
  if the argument is empty.

Tested by the buildbot.

gdb/ChangeLog
2019-12-12  Tom Tromey  <tromey@adacore.com>

	* xml-support.c (xml_fetch_content_from_file): Don't call
	malloc_failure.
	* utils.h (class gdb_argv): Remove malloc_failure comment.
	* utils.c (gdb_argv::reset): Don't call malloc_failure.

Change-Id: I59483620deb6609ccf2f024d94a29113bb62d1a9
2019-12-12 12:36:57 -07:00
Tom Tromey
db3ad2f031 Ravenscar port for RISC-V
This adds Ravenscar support to gdb for RISC-V targets.

This was tested internally using AdaCore's test suite and qemu.

gdb/ChangeLog
2019-12-12  Tom Tromey  <tromey@adacore.com>

	* Makefile.in (ALL_TARGET_OBS): Add riscv-ravenscar-thread.o.
	(HFILES_NO_SRCDIR): Add riscv-ravenscar-thread.h.
	(ALLDEPFILES): Add riscv-ravenscar-thread.c.
	* configure.tgt (riscv-*-*): Add riscv-ravenscar-thread.o.
	* riscv-ravenscar-thread.c: New file.
	* riscv-ravenscar-thread.h: New file.
	* riscv-tdep.c (riscv_gdbarch_init): Call
	register_riscv_ravenscar_ops.

Change-Id: Ic47a3b3cfbbe80c2c82a5f48d2e0481845cac8b0
2019-12-12 11:47:40 -07:00
Tom Tromey
2ffe5b9c79 Fix the thread-pool.c compilation
A recent commit removed DIAGNOSTIC_IGNORE_UNUSED_FUNCTION, which was
used in thread-pool.c.  This patch changes this code to use
ATTRIBUTE_UNUSED instead.

Tested by rebuilding.

gdb/ChangeLog
2019-12-12  Tom Tromey  <tromey@adacore.com>

	* gdbsupport/thread-pool.c (set_thread_name): Use
	ATTRIBUTE_UNUSED.

Change-Id: I56d46eaac73690565d0e52db1791411567a918dd
2019-12-12 06:10:27 -07:00
Luis Machado
39f34d7b64 Fix unused function error
Attempting to build GDB in Ubuntu 16.04.6 LTS on x86_64, I ran into warnings
that caused the build to fail:

binutils-gdb/gdb/gdbsupport/safe-strerror.c:44:1: error: ‘char* select_strerror_r(char*, char*)’ defined but not used [-Werror=unused-function]  select_strerror_r (char *res, char *)

The diagnostic macro DIAGNOSTIC_IGNORE_UNUSED_FUNCTION seems to expand
correctly to its respective pragma, but this doesn't seem to have an effect on
the warning. I tried to use the pragma explicitly and got the same result.

ATTRIBUTE_UNUSED works fine in this case if you put it in both functions,
which should fix warnings for both gdb and gdbserver builds.

The compiler version is gcc (Ubuntu 5.4.0-6ubuntu1~16.04.11) 5.4.0 20160609.

This is likely the result of PR64079 in GCC, which was fixed by commit
9e96f1e1b9731c4e1ef4fbbbf0997319973f0537.

To prevent other developers from attempting to use this macro, only to get
confused by it not working as expected, it seems better to not define this
particular macro.

gdb/ChangeLog:

2019-12-12  Luis Machado  <luis.machado@linaro.org>

	* gdbsupport/safe-strerror.c: Don't include diagnostics.h.
	(select_strerror_r): Use ATTRIBUTE_UNUSED instead of the diagnostics
	macros.

include/ChangeLog:

2019-12-12  Luis Machado  <luis.machado@linaro.org>

	* diagnostics.h (DIAGNOSTIC_IGNORE_UNUSED_FUNCTION). Remove
	definitions.

Change-Id: Iad6123d61d76d111e3ef8d24aa8c60112304c749
2019-12-12 09:12:02 -03:00
Tom Tromey
873de05c85 Fix TUI test suite regexps
Testing on another TUI series showed that some of the regexps in the
TUI test suite have been incorrect for a while.  In particular, "|"
was meant literally in these tests, but was interpreted as pattern
alternation due to lack of quoting.

This patch fixes the bad tests.  I am checking this in.

gdb/testsuite/ChangeLog
2019-12-11  Tom Tromey  <tom@tromey.com>

	* gdb.tui/resize.exp: Fix regexp.
	* gdb.tui/regs.exp: Fix regexps.
	* gdb.tui/main.exp: Fix regexp.

Change-Id: Ib6661361171ac120bb92f4a8aec7efa4bcaa36b9
2019-12-11 19:19:13 -07:00
Tom Tromey
d4eeccfe6b Change "winheight" resizing to use new layout code
The "winheight" command resizes a specified window, resizing the other
windows in the layout to adapt.  In the current code, this is done by
examining each possible layout separately.  The new layout code has a
more general approach to handling this, and this patch simply removes
the old code in favor of a call into the new layout engine.

gdb/ChangeLog
2019-12-11  Tom Tromey  <tom@tromey.com>

	* tui/tui-win.c (tui_set_win_height_command): Call
	tui_adjust_window_height.
	(tui_adjust_win_heights, new_height_ok): Remove.
	* tui/tui-layout.h (tui_adjust_window_height): Declare.
	* tui/tui-layout.c (tui_adjust_window_height): New function.

Change-Id: I6bb681375a46adc8d29fd06f581deed4e078e78a
2019-12-11 15:49:03 -07:00
Tom Tromey
3d97994549 Re-apply the current layout when resizing
The TUI has separate code for each possible layout to handle the case
where the terminal window is resized.  With the new layout code, this
can all be replaced with a call to tui_apply_current_layout, which
simply re-applies the current layout.

This results in some small differences in behavior when resizing, so
some tests are updated.

gdb/ChangeLog
2019-12-11  Tom Tromey  <tom@tromey.com>

	* tui/tui-win.c (tui_resize_all): Remove code, call
	tui_apply_current_layout.

gdb/testsuite/ChangeLog
2019-12-11  Tom Tromey  <tom@tromey.com>

	* gdb.tui/resize.exp: Update.
	* gdb.tui/empty.exp (layouts): Update.

Change-Id: I3dc6c02a753d495d9ab5e8213d550a147198ce6f
2019-12-11 15:49:03 -07:00
Tom Tromey
2192a9d3b3 First use of tui_layout
This patch introduces the first use of tui_layout, by changing
show_layout to clone and use the appropriate tui_layout.

This resulted in one minor layout change, and also in the unintended
-- but good -- side effect that the title of each boxed window is now
visible.

gdb/ChangeLog
2019-12-11  Tom Tromey  <tom@tromey.com>

	* tui/tui-layout.h (tui_apply_current_layout): Declare.
	* tui/tui-layout.c (standard_layouts, applied_layout): New
	globals.
	(tui_apply_current_layout): New function.
	(show_layout): Set applied_layout.  Call
	tui_apply_current_layout.
	(show_source_command, show_disasm_command)
	(show_source_disasm_command, show_data)
	(show_source_or_disasm_and_command): Remove.
	(initialize_layouts): New function.
	(_initialize_tui_layout): Call initialize_layouts.

gdb/testsuite/ChangeLog
2019-12-11  Tom Tromey  <tom@tromey.com>

	* gdb.tui/regs.exp: Update.
	* gdb.tui/empty.exp (layouts): Update.
	* gdb.tui/basic.exp: Update.
	* lib/tuiterm.exp (_check_box): Don't check bottom border.

Change-Id: If1ee06ee58f4803e8c213f4ab0f5bb59f4650ec2
2019-12-11 15:49:02 -07:00
Tom Tromey
389e7ddbc2 Introduce new layout code
This introduces a new approach to window layout for the TUI.  The idea
behind this code is that a layout should be specified in a declarative
way, and then be applied by generic code that does not need to know
the specifics of every possible layout.

This patch itself does not change any behavior, because the new layout
engine isn't yet connected to anything.  That is, this merely
introduces the implementation.

This generic approach makes the code more maintainable.  It also
enables some future changes:

* New window types are simpler to add;
* User-specified layouts are possible; and
* Horizontal layouts are more attainable

gdb/ChangeLog
2019-12-11  Tom Tromey  <tom@tromey.com>

	* tui/tui-layout.h (class tui_layout_base)
	(class tui_layout_window, class tui_layout_split): New.
	* tui/tui-layout.c (tui_get_window_by_name)
	(tui_layout_window::clone, tui_layout_window::apply)
	(tui_layout_window::get_sizes, tui_layout_window::add_split)
	(tui_layout_split::add_window, tui_layout_split::clone)
	(tui_layout_split::get_sizes)
	(tui_layout_split::set_weights_from_heights)
	(tui_layout_split::adjust_size, tui_layout_split::apply): New
	functions.
	(tui_layout_split::add_split, tui_layout_split::add_split)
	(tui_layout_split::set_weights_from_heights)
	(tui_layout_split::set_weights_from_heights): New functions.

Change-Id: I3a4cae666327b617d862aaa356f8179f945c6a4e
2019-12-11 15:49:01 -07:00
Tom Tromey
fb3184d8ee Remove struct tui_point
struct tui_point does not help very much.  It is only used for
storage, and never passed between functions.  I think it makes the
code more verbose without any corresponding benefit, so this patch
removes it.

gdb/ChangeLog
2019-12-11  Tom Tromey  <tom@tromey.com>

	* tui/tui-wingeneral.c (tui_gen_win_info::make_window): Update.
	* tui/tui-win.c (tui_adjust_win_heights, tui_resize_all): Update.
	* tui/tui-layout.c (tui_gen_win_info::resize): Update.
	* tui/tui-data.h (struct tui_point): Remove.
	(struct tui_gen_win_info) <origin>: Remove.
	<x, y>: New fields.
	* tui/tui-command.c (tui_cmd_window::resize): Update.

Change-Id: I3f77920585b9ea9e2b4b189f3f3ae32d4da0c252
2019-12-11 15:49:01 -07:00
Tom Tromey
dc7ff8a608 Introduce the tui_gen_win_info::min_height method
This introduces a new method, tui_gen_win_info::min_height, to fetch
the minimum height of a window.  This is used in the subsequent
unified layout patch.

gdb/ChangeLog
2019-12-11  Tom Tromey  <tom@tromey.com>

	* tui/tui-stack.h (struct tui_locator_window) <min_height>:
	Implement.
	* tui/tui-regs.h (struct tui_data_item_window) <min_height>:
	Implement.
	* tui/tui-data.h (struct tui_gen_win_info) <min_height>: New
	method.
	(struct tui_win_info) <min_height>: Implement.

Change-Id: Id33baffdf041fde072e15c1ff89b75f8b8118adb
2019-12-11 15:49:00 -07:00
Tom Tromey
1431937bee Move can_box to tui_gen_win_info
This moves the can_box method to tui_gen_win_info, so that it will be
available on the tui_locator_window class.  This will be used in a
subsequent patch.

gdb/ChangeLog
2019-12-11  Tom Tromey  <tom@tromey.com>

	* tui/tui-data.h (struct tui_gen_win_info) <can_box>: New method.
	(struct tui_win_info) <can_box>: Update.

Change-Id: Idfa58af41341607932d3c39415f6a35ee9b5d3dc
2019-12-11 15:49:00 -07:00
Tom Tromey
c8ec2f433c Move max_height method to tui_gen_win_info
This moves the max_height method to tui_gen_win_info and implements it
in the subclasses.  This is used by a subsequent patch, which will
normalize window layout across all window types.

gdb/ChangeLog
2019-12-11  Tom Tromey  <tom@tromey.com>

	* tui/tui-stack.h (struct tui_locator_window) <max_height>: New
	method.
	* tui/tui-regs.h (struct tui_data_item_window) <max_height>: New
	method.
	* tui/tui-data.h (struct tui_gen_win_info) <max_height>: New
	method.
	(struct tui_win_info) <max_height>: Now override.

Change-Id: I4ba3e8899bc4668328d3d78e3c1674c61882450d
2019-12-11 15:48:59 -07:00
Joel Brobecker
4decd62b21 Update NEWS post GDB 9 branch creation.
gdb/ChangeLog:

	* NEWS: Create a new section for the next release branch.
	Rename the section of the current branch, now that it has
	been cut.
2019-12-11 21:44:47 +01:00
Joel Brobecker
d746744ebb Bump version to 10.0.50.DATE-git.
Now that the GDB 9 branch has been created, we can
bump the version number.

gdb/ChangeLog:

	GDB 9 branch created (27f7b2f640):
	* version.in: Bump version to 10.0.50.DATE-git.
2019-12-11 21:37:51 +01:00
Simon Marchi
27f7b2f640 Fix typo, get_Frame_id -> get_frame_id
gdb/doc/ChangeLog:

	* gdb.texinfo (Writing JIT Debug Info Readers): Fix typo.
2019-12-11 11:30:15 -05:00
Tom Tromey
2e74427698 Fix build on macOS
PR build/25268 points out that the build fails on macOS, because on
macOS the "pthread_setname_np" function takes a single argument.

This patch fixes the problem, by introducing a new adapter function
that handles both styles of pthread_setname_np.

This change also meant moving the pthread_setname_np call to the
thread function, because macOS only permits setting the name of the
current thread.  This means that there can be a brief window when gdb
will see the wrong name; but I think this is a minor concern.

Tested by rebuilding on x86-64 Fedora 30, and on macOS High Sierra.
On Linux I also debugged gdb to ensure that the thread names are still
set correctly.

gdb/ChangeLog
2019-12-11  Tom Tromey  <tromey@adacore.com>

	PR build/25268:
	* gdbsupport/thread-pool.c (set_thread_name): New function.
	(thread_pool::set_thread_count): Don't call pthread_setname_np.
	(thread_pool::thread_function): Call set_thread_name.

Change-Id: Id7bf28d99ca27a893a9fc87ebb90b15a9c2a9cb4
2019-12-11 08:02:20 -07:00
Tom Tromey
aac4760f70 Fix the build after bfd_get_signed_8 change
A recent commit changed bfd_get_signed_8 to extend the result to a
bfd_signed_vma.  This caused a compiler error in one spot in my
--enable-targets=all gdb build, where the result of bfd_get_signed_8
was passed to printf.

This patch fixes the build.  Tested by rebuilding.

gdb/ChangeLog
2019-12-11  Tom Tromey  <tromey@adacore.com>

	* fbsd-tdep.c (fbsd_core_info_proc_status): Cast result of
	bfd_get_signed_8.

Change-Id: Ic015f5fd3d88da6b5da8f7b4e1d11d5c981333db
2019-12-11 07:58:46 -07:00
Philippe Waroquiers
d8edc8b768 Implement 'print -raw-values' and 'set print raw-values on|off'
The option framework documentation was speaking about a 'print -raw'
option, but this option does not exist.

This patch implements -raw-values option that tells to ignore the
active pretty printers when printing a value.
As we already have -raw-frame-arguments, I thought -raw-values
was more clear, in particular to differentiate
   set print raw-values and set print raw-frame-arguments.

gdb/doc/ChangeLog
2019-12-11  Philippe Waroquiers  <philippe.waroquiers@skynet.be>

	* gdb.texinfo (Command Options): Use -p and -pretty in the example,
	as -r is ambiguous.  Update the print - TAB TAB completion result.
	(Data): Document new option -raw-values.  Use -p and -pretty in the
	 example, as -r is ambiguous.
	(Print Settings): Document set print raw values.
	(Pretty-Printer Commands): Document interaction between enabled
	pretty printers and -raw-values/-raw-frame-arguments.

gdb/ChangeLog
2019-12-11  Philippe Waroquiers  <philippe.waroquiers@skynet.be>

	* NEWS: Document -raw-values option and the related setting commands.
	* printcmd.c (print_command_parse_format): Do not set opts->raw off,
	only set it on when /r is given.
	* valprint.c (value_print_option_defs): New element raw-values.
	* Makefile.in: Add the new file.

gdb/testsuite/ChangeLog
2019-12-11  Philippe Waroquiers  <philippe.waroquiers@skynet.be>

	* gdb.base/options.exp: Add -raw-values in the print completion list.
	* gdb.python/py-prettyprint.exp: Add tests for -raw-values.
2019-12-11 04:31:05 +01:00
Tom Tromey
77bb17b649 Minor fix to gdb.prompt documentation
I noticed that an example in the gdb.prompt documentation used the
wrong kind of quotes -- because it is code, it should use a plain
ASCII quotation mark.  I also slightly shortened the sample text here,
so it would more clearly fit on a single line.

gdb/doc/ChangeLog
2019-12-10  Tom Tromey  <tom@tromey.com>

	* python.texi (gdb.prompt): Use correct quotes in example.
	Shorten sample text.

Change-Id: I4153928c0d88001244ad410f3943c952a6ebfeb1
2019-12-10 15:56:42 -07:00
Kevin Buettner
4c12d93600 OpenMP parallel region scope tests
Add tests which check for accessibility of variables from within
various OpenMP parallel regions.

Tested on Fedora 27, 28, 29, 30, and 31.  I also tested with my OpenMP
work on Fedora 30.  The test has been annotated with setup_xfail and
setup_kfail statements so that there are no unexpected failures on any
of these platforms when using gcc.  Better still, for my own testing
anyway, is that there are also no XPASSes or KPASSes either.  So,
regardless of platform, when using gcc, and regardless of whether my
(not yet public) OpenMP work is used, seeing a FAIL indicates a real
problem.

Fedora 27 results:

        # of expected passes            85
        # of expected failures          65

(Note: I have not retested F27 since v1 of the patch; it's possible
that the numbers will be slightly different for v2.)

Fedora 28, 29, 30 results:

        # of expected passes            131
        # of expected failures          4
        # of known failures             16

Fedora 30, 31 results w/ my OpenMP work:

        # of expected passes            151

The above results all use gcc, either the system gcc or a development
gcc (when testing against my OpenMP work in GDB).  I've also tested
with clang 9.0.0 and icc 19.0.5.281 20190815 on Fedora 31.

Fedora 31, clang:

FAIL: gdb.threads/omp-par-scope.exp: single_scope: first thread: print s1
FAIL: gdb.threads/omp-par-scope.exp: single_scope: first thread: print s3
FAIL: gdb.threads/omp-par-scope.exp: single_scope: first thread: print i1
FAIL: gdb.threads/omp-par-scope.exp: single_scope: first thread: print i3
FAIL: gdb.threads/omp-par-scope.exp: single_scope: second thread: print s1
FAIL: gdb.threads/omp-par-scope.exp: single_scope: second thread: print s3
FAIL: gdb.threads/omp-par-scope.exp: single_scope: second thread: print i1
FAIL: gdb.threads/omp-par-scope.exp: multi_scope: first thread: print i02
FAIL: gdb.threads/omp-par-scope.exp: multi_scope: first thread: print i11
FAIL: gdb.threads/omp-par-scope.exp: multi_scope: first thread: print i12
FAIL: gdb.threads/omp-par-scope.exp: multi_scope: first thread: print i22
FAIL: gdb.threads/omp-par-scope.exp: multi_scope: first thread: print file_scope_var
FAIL: gdb.threads/omp-par-scope.exp: multi_scope: second thread: print i11
FAIL: gdb.threads/omp-par-scope.exp: multi_scope: second thread: print file_scope_var
FAIL: gdb.threads/omp-par-scope.exp: multi_scope: after parallel: print file_scope_var
FAIL: gdb.threads/omp-par-scope.exp: nested_parallel: inner_threads: 1st stop: print file_scope_var
FAIL: gdb.threads/omp-par-scope.exp: nested_parallel: inner_threads: 1st stop: print num
FAIL: gdb.threads/omp-par-scope.exp: nested_parallel: inner_threads: 1st stop: print l
FAIL: gdb.threads/omp-par-scope.exp: nested_parallel: inner_threads: 1st stop: print k
FAIL: gdb.threads/omp-par-scope.exp: nested_parallel: inner_threads: 2nd stop: print file_scope_var
FAIL: gdb.threads/omp-par-scope.exp: nested_parallel: inner_threads: 2nd stop: print num
FAIL: gdb.threads/omp-par-scope.exp: nested_parallel: inner_threads: 3rd stop: print file_scope_var
FAIL: gdb.threads/omp-par-scope.exp: nested_parallel: inner_threads: 3rd stop: print num
FAIL: gdb.threads/omp-par-scope.exp: nested_parallel: inner_threads: 3rd stop: print l
FAIL: gdb.threads/omp-par-scope.exp: nested_parallel: inner_threads: 3rd stop: print k
FAIL: gdb.threads/omp-par-scope.exp: nested_parallel: inner_threads: 4th stop: print file_scope_var
FAIL: gdb.threads/omp-par-scope.exp: nested_parallel: inner_threads: 4th stop: print num
FAIL: gdb.threads/omp-par-scope.exp: nested_parallel: outer_threads: outer stop: print file_scope_var
FAIL: gdb.threads/omp-par-scope.exp: nested_parallel: outer_threads: outer stop: print i
FAIL: gdb.threads/omp-par-scope.exp: nested_parallel: outer_threads: outer stop: print j

Fedora 31, icc:

FAIL: gdb.threads/omp-par-scope.exp: multi_scope: first thread: print i12
FAIL: gdb.threads/omp-par-scope.exp: multi_scope: first thread: print i22
FAIL: gdb.threads/omp-par-scope.exp: nested_func: 1st call: 1st thread: print s1
FAIL: gdb.threads/omp-par-scope.exp: nested_func: 1st call: 1st thread: print i
FAIL: gdb.threads/omp-par-scope.exp: nested_func: 1st call: 1st thread: print j
FAIL: gdb.threads/omp-par-scope.exp: nested_func: 1st call: 2nd thread: print s1
FAIL: gdb.threads/omp-par-scope.exp: nested_func: 1st call: 2nd thread: print i
FAIL: gdb.threads/omp-par-scope.exp: nested_func: 1st call: 2nd thread: print j
FAIL: gdb.threads/omp-par-scope.exp: nested_func: 1st call: 2nd thread: print k
FAIL: gdb.threads/omp-par-scope.exp: nested_func: 1st call: 2nd thread: print z
FAIL: gdb.threads/omp-par-scope.exp: nested_func: 2nd call: 1st thread: print s1
FAIL: gdb.threads/omp-par-scope.exp: nested_func: 2nd call: 1st thread: print i
FAIL: gdb.threads/omp-par-scope.exp: nested_func: 2nd call: 1st thread: print j
FAIL: gdb.threads/omp-par-scope.exp: nested_func: 2nd call: 2nd thread: print s1
FAIL: gdb.threads/omp-par-scope.exp: nested_func: 2nd call: 2nd thread: print i
FAIL: gdb.threads/omp-par-scope.exp: nested_func: 2nd call: 2nd thread: print j
FAIL: gdb.threads/omp-par-scope.exp: nested_func: 2nd call: 2nd thread: print k
FAIL: gdb.threads/omp-par-scope.exp: nested_func: 2nd call: 2nd thread: print z
FAIL: gdb.threads/omp-par-scope.exp: nested_parallel: inner_threads: 1st stop: print l
FAIL: gdb.threads/omp-par-scope.exp: nested_parallel: inner_threads: 1st stop: print k
FAIL: gdb.threads/omp-par-scope.exp: nested_parallel: inner_threads: 3rd stop: print l
FAIL: gdb.threads/omp-par-scope.exp: nested_parallel: inner_threads: 3rd stop: print k

For both clang and icc, it turns out that there are some problems with
the DWARF that these compilers generate.  Of the two, icc does at
least nest the subprogram of the outlined function representing the
parallel region within the function that it's defined, but does not
handle inner scopes if they exist.  clang places the subprogram for
the outlined function at the same level as the containing function, so
variables declared within the function aren't visible at all.

I could call setup_xfail to avoid FAILs for clang and icc also, but I don't
want to further complicate the test.

gdb/testsuite/ChangeLog:

	* gdb.threads/omp-par-scope.c: New file.
	* gdb/threads/omp-par-scope.exp: New file.

Change-Id: Icb9c991730d84ca7509380af817dfcc778e764ea
2019-12-10 15:43:58 -07:00
Kevin Buettner
bb47f919bf Add gdb_caching_proc support_nested_function_tests to lib/gdb.exp
This commit adds the gdb_caching_proc, support_nested_function_tests,
to lib/gdb.exp.  It tests to see whether or not the C compiler has
support for nested function calls.

gdb/testsuite/ChangeLog:

	* lib/gdb.exp (support_nested_function_tests): New proc.

Change-Id: Ic2c93bc4cc200e07e104a2398f89a9c0514bdc75
2019-12-10 15:42:15 -07:00
Kevin Buettner
26b911fb64 Add gdb_compile_openmp to lib/gdb.exp
gdb/testsuite/ChangeLog:

	* lib/gdb.exp (gdb_compile_openmp): New proc.
	(build_executable_from_specs): Add an "openmp" option.
	(gdb_compile_pthreads): Add non-executable case.

Change-Id: I94048b8b0940c707ce0529a6bcfa6e4eace49101
2019-12-10 15:37:46 -07:00
Christian Biesinger
cb51113052 Suppress the "unused function" warning for select_strerror_r
We only ever use one of the two overloads, so to avoid breaking -Werror
builds, supress the warning.

gdb/ChangeLog:

2019-12-10  Christian Biesinger  <cbiesinger@google.com>

	* gdbsupport/safe-strerror.c: Supress the unused function warning
	for select_strerror_r.

Change-Id: I344869a382bb36fe181b5b2a31838d1d20f58169
2019-12-10 13:44:21 -06:00
Christian Biesinger
ab7d13f070 Replace the remaining uses of strerror with safe_strerror
To do that, this patch makes IPA compile safe-strerror as well. Because
it doesn't use Gnulib, it calls the Glibc version of strerror_r directly.

Consequently this patch also removes the configure checks for strerror.

gdb/ChangeLog:

2019-12-10  Christian Biesinger  <cbiesinger@google.com>

	* config.in: Regenerate.
	* configure: Regenerate.
	* gdbsupport/agent.c (gdb_connect_sync_socket): Call
	safe_strerror instead of strerror.
	* gdbsupport/common.m4: Don't check for strerror.
	* gdbsupport/safe-strerror.c: Support both the glibc version
	of strerror_r and the XSI version.

gdb/gdbserver/ChangeLog:

2019-12-10  Christian Biesinger  <cbiesinger@google.com>

	* Makefile.in: Add safe-strerror.c to gdbreplay and IPA, and change
	UNDO_GNULIB_CFLAGS to undo strerror_r instead of strerror.
	* config.in: Regenerate.
	* configure: Regenerate.
	* configure.ac: Don't check for strerror.
	* linux-i386-ipa.c (initialize_fast_tracepoint_trampoline_buffer):
	Call safe_strerror instead of strerror.
	* server.h (strerror): Remove this now-unnecessary declaration.
	* tracepoint.c (init_named_socket): Call safe_strerror instead of
	strerror.
	(gdb_agent_helper_thread): Likewise.
	* utils.c (perror_with_name): Likewise.

Change-Id: I74848f072dcde75cb55c435ef9398dc8f958cd73
2019-12-10 13:23:01 -06:00
Tom Tromey
6c71eb7d70 Normalize Ada ptype to use a single "?"
Sometimes -- notably with unchecked unions -- the Ada "ptype" code
will print a "?" or "??" to indicate something unknown.  The choice of
what was printed was somewhat arbitrary, and in one case, Ada would
print an empty string rather than "?".

This patch normalizes the Ada code to use "?" rather than an empty
string or "??".  My reasoning here is that a single question mark is
enough to convey unknown-ness.

gdb/ChangeLog
2019-12-10  Tom Tromey  <tromey@adacore.com>

	* ada-typeprint.c (print_choices): Use a single "?".
	(print_variant_part): Print "?" if the discriminant name
	is not known.

gdb/testsuite/ChangeLog
2019-12-10  Tom Tromey  <tromey@adacore.com>

	* gdb.ada/unchecked_union.exp: New file.
	* gdb.ada/unchecked_union/pck.adb: New file.
	* gdb.ada/unchecked_union/pck.ads: New file.
	* gdb.ada/unchecked_union/unchecked_union.adb: New file.
	* gdb-utils.exp (string_to_regexp): Also quote "?".

Change-Id: I3403040780a155ffa2c44c8e6a04ba86bc810e29
2019-12-10 08:56:39 -07:00
George Barrett
bac7c5cf92 Fix scripted probe breakpoints
The documentation for make-breakpoint from the Guile API and the `spec'
variant of the gdb.Breakpoint constructor from the Python API state that
the format acceptable for location strings is the same as that accepted
by the break command. However, using the -probe qualifier at the
beginning of the location string causes a GDB internal error as it
attempts to decode a probe location in the wrong code path. Without this
functionality, there doesn't appear to be another way to set breakpoints
on probe points from Python or Guile scripts.

This patch introduces a new helper function that returns a
breakpoint_ops instance appropriate for a parsed location and updates
the Guile and Python bindings to use said function, rather than the
current hard-coded use of bkpt_breakpoint_ops. Since this logic is
duplicated in the handling of the `break' and `trace' commands, those
are also updated to call into the new helper function.

gdb/ChangeLog:
2019-12-10  George Barrett  <bob@bob131.so>

	Fix scripted probe breakpoints.
	* breakpoint.c (tracepoint_probe_breakpoint_ops): Move
	declaration forward.
	(breakpoint_ops_for_event_location_type)
	(breakpoint_ops_for_event_location): Add function definitions.
	(break_command_1, trace_command): Use
	breakpoint_ops_for_event_location.
	* breakpoint.h (breakpoint_ops_for_event_location): Add function
	declarations.
	* guile/scm-breakpoint.c (gdbscm_register_breakpoint_x): Use
	breakpoint_ops_for_event_location.
	* python/py-breakpoint.c (bppy_init): Use
	breakpoint_ops_for_event_location.

gdb/testsuite/ChangeLog:
2019-12-10  George Barrett  <bob@bob131.so>

	Test scripted probe breakpoints.
	* gdb.guile/scm-breakpoint.c (main): Add probe point.
	* gdb.python/py-breakpoint.c (main): Likewise.
	* gdb.guile/scm-breakpoint.exp (test_bkpt_probe): Add probe
	specifier test.
	* gdb.python/py-breakpoint.exp (test_bkpt_probe): Likewise.
2019-12-09 16:51:33 -05:00
Tankut Baris Aktemur
330f1d3825 gdb: rank an lvalue argument incompatible for an rvalue parameter
Passing an lvalue argument to a function that takes an rvalue parameter
is not allowed per C++ rules.  Consider this function:

    int g (int &&x) { return x; }

Calling g as in

    int i = 5;
    int j = g (i);

is illegal.  For instance, GCC 9.2.1 yields

~~~
test.cpp: In function ‘int main()’:
test.cpp:6:14: error: cannot bind rvalue reference of type ‘int&&’ to
lvalue of type ‘int’
    6 |   int j = g (i);
      |              ^
~~~

GDB currently allows this function call:

~~~
(gdb) print g(i)
$1 = 5
~~~

Fix this by ranking an lvalue argument incompatible with an rvalue
parameter.  The behavior after this patch is:

~~~
(gdb) print g(i)
Cannot resolve function g to any overloaded instance
~~~

Tested with GCC 9.2.1.

gdb/ChangeLog:
2019-12-09  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>

	* gdbtypes.c (rank_one_type): Return INCOMPATIBLE_TYPE_BADNESS
	when ranking an lvalue argument for an rvalue parameter.

gdb/testsuite/ChangeLog:
2019-12-09  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>

	* gdb.cp/rvalue-ref-overload.cc (g): New function that takes
	an rvalue parameter.
	* gdb.cp/rvalue-ref-overload.exp: Test calling it with an lvalue
	parameter.

Change-Id: I4a6dfc7dac63efa1e3b9f8f391e4b736fbdccdc1
2019-12-09 18:27:51 +01:00
Andrew Burgess
b43315e206 gdb/fortran: Improve output pattern in gdb.mi/mi-fortran-modules.exp
Extend the output pattern in mi-fortran-modules.exp to skip some
system modules that appear with versions of GFortran after 7.x.x.

gdb/testsuite/ChangeLog:

	* gdb.mi/mi-fortran-modules.exp: Add patterns to skip system
	modules.

Change-Id: I64aaa395e554a32e8267ffa096faee53c19c0b9e
2019-12-09 13:06:05 +00:00
Andrew Burgess
54f73dad3b gdb/testsuite: kfail some tests if using broken gcc
In some cases the Fortran stride information generated by GCC is wrong
with versions of GCC after 7.x.x.  This commit adds kfails for the
tests in question with known bad versions of gcc.

The bug has been reported to GCC here:

  https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92775

gdb/testsuite/ChangeLog:

	* gdb.fortran/derived-type-striding.exp: KFAIL if we are using a
	broken version of GCC.

Change-Id: Iaef08e5e2c87ab3d6983b88f749d40e01aea2bc6
2019-12-09 13:06:05 +00:00
Andrew Burgess
d57cbee932 gdb/testsuite/fortran: Fix info-modules/info-types for gfortran 8+
The gdb.fortran/info-modules.exp and gdb.fortran/info-types.exp tests
are failing on versions of gfortran after 7.3 due to the inclusion of
extra "system" modules and type that were not being matched by the
current test patterns.

Rather than building increasingly complex patterns that would always
be at risk of breaking with future versions of GCC I have instead
added a new library that parses the output of the following commands:

  info types
  info variables
  info functions
  info modules
  info module functions
  info module variables

into a data structure, the test can than run checks against the
contents of this data structure.

The benefit is that we can simply ignore extra results that we don't
care about.

There is a small risk that a bug in GDB might allow us to start
reporting incorrect results in such a way that the new library will
not spot the error.  However, I have tried to mitigate this risk by
adding extra procedures into the test library (see check_no_entry) and
we can add more in future if we wanted to be even more defensive.

I tested this test file with gFortran 7.3.1, 8.3.0, and 9.2.0, I now
see 100% pass in all cases.

gdb/testsuite/ChangeLog:

	* gdb.fortran/info-modules.exp: Rewrite to make use of new
	sym-info-cmds library.
	* gdb.fortran/info-types.exp: Likewise.
	* lib/sym-info-cmds.exp: New file.

Change-Id: Iff81624f51b5afb6c95393932f3d94472d7c2970
2019-12-09 13:06:05 +00:00
Wataru Ashihara
b1f0c0b90b gdb/darwin-nat.c: Fix template argument for scoped_restore_tmpl
This should be the type of startup_with_shell, whose type was changed
from int to bool at commit 80fd28264.

This fixes the build on macOS:

      CXX    darwin-nat.o
    In file included from ../../gdb/darwin-nat.c:22:
    In file included from ../../gdb/top.h:25:
    In file included from ../../gdb/value.h:23:
    In file included from ../../gdb/frame.h:72:
    In file included from ../../gdb/language.h:26:
    In file included from ../../gdb/symtab.h:33:
    ../../gdb/gdbsupport/gdb_optional.h:155:19: error: no matching constructor for initialization of 'scoped_restore_tmpl<int>'
        new (&m_item) T (std::forward<Args>(args)...);
                      ^  ~~~~~~~~~~~~~~~~~~~~~~~~
    ../../gdb/darwin-nat.c:1995:31: note: in instantiation of function template specialization 'gdb::optional<scoped_restore_tmpl<int> >::emplace<bool *, int>' requested here
              restore_startup_with_shell.emplace (&startup_with_shell, 0);
                                         ^
    ../../gdb/gdbsupport/scoped_restore.h:69:3: note: candidate constructor template not viable: no known conversion from 'bool *' to 'int *' for 1st argument
      scoped_restore_tmpl (T *var, T2 value)
      ^
    ../../gdb/gdbsupport/scoped_restore.h:57:3: note: candidate constructor not viable: requires single argument 'var', but 2 arguments were provided
      scoped_restore_tmpl (T *var)
      ^
    ../../gdb/gdbsupport/scoped_restore.h:76:3: note: candidate constructor not viable: requires single argument 'other', but 2 arguments were provided
      scoped_restore_tmpl (const scoped_restore_tmpl<T> &other)
      ^
    1 error generated.

gdb/ChangeLog
2019-12-08  Wataru Ashihara  <wataash@wataash.com>

	* darwin-nat.c (darwin_nat_target::create_inferior): Fix
	template argument for scoped_restore_tmpl from bool to int.

Change-Id: Ia0202efd34dbce69b6af5d035fa55ed89215138a
2019-12-09 08:02:00 -05:00
Tom de Vries
c14aab8cd3 Fix inter-CU references using intra-CU form in imported-unit
When running the gdb testsuite with the cc-with-dwz board, I run into:
...
Running gdb/testsuite/gdb.dwarf2/imported-unit.exp ...
gdb compile failed, dwz: gdb.dwarf2/imported-unit/imported-unit: \
  Couldn't find DIE referenced by DW_AT_abstract_origin
cc-with-tweaks.sh: dwz did not modify gdb.dwarf2/imported-unit/imported-unit.
...

The problem is that the DW_AT_abstract_origin reference here:
...
 <0><d2>: Abbrev Number: 2 (DW_TAG_compile_unit)
 <1><e6>: Abbrev Number: 4 (DW_TAG_subprogram)
    <e7>   DW_AT_abstract_origin: <0x142>
    <eb>   DW_AT_low_pc      : 0x4004b2
    <f3>   DW_AT_high_pc     : 0x4004c8
...
referring to a DIE in another compilation unit here:
...
 <0><129>: Abbrev Number: 2 (DW_TAG_compile_unit)
  <1><142>: Abbrev Number: 4 (DW_TAG_subprogram)
    <143>   DW_AT_name        : main
    <148>   DW_AT_type        : <0x13b>
    <14c>   DW_AT_external    : 1
...
is encoded using intra-CU reference form DW_FORM_ref4 instead of intra-CU
reference DW_FORM_ref_addr:
...
   4      DW_TAG_subprogram    [has children]
    DW_AT_abstract_origin DW_FORM_ref4
    DW_AT_low_pc       DW_FORM_addr
    DW_AT_high_pc      DW_FORM_addr
    DW_AT value: 0     DW_FORM value: 0
...

Fix this in the DWARF assembler by making all inter-CU references use the '%'
label prefix.

Tested on x86_64-linux.

gdb/testsuite/ChangeLog:

2019-12-08  Tom de Vries  <tdevries@suse.de>

	* gdb.dwarf2/imported-unit.exp: Fix inter-CU references.

Change-Id: I690ff18c3943705ed478453531b176ff74700f3c
2019-12-08 11:25:28 +01:00
Keith Seitz
aa2d5a4229 Core file build-id support
This patch uses new BFD support for detecting build-ids in core
files.

After this patch, it is possible to run gdb with only the
core file, and gdb will automatically load the executable and
debug info [example from tests]:

$ gdb -nx -q
(gdb) core-file corefile-buildid.core
[New LWP 29471]
Reading symbols from gdb.base/corefile-buildid/debugdir-exec/.build-id/36/fe5722c5a7ca3ac746a84e223c6a2a69193a24...
Core was generated by `outputs/gdb.base/coref'.
Program terminated with signal SIGABRT, Aborted.
(gdb)

This work is based on functionality available in Fedora originally
written by Jan Kratochvil.

Regression tested on buildbot.

gdb/ChangeLog:
2019-12-07  Keith Seitz  <keiths@redhat.com>

	* build-id.c (build_id_bfd_get): Permit bfd_core, too.
	(build_id_to_debug_bfd): Make static, rewriting to use
	build_id_to_bfd_suffix.
	(build_id_to_bfd_suffix): Copy of build_id_to_debug_bfd,
	adding `suffix' parameter. Append SUFFIX to file names
	when searching for matching files.
	(build_id_to_debug_bfd): Use build_id_to_bfd_suffix.
	(build_id_to_exec_bfd): Likewise.
	* build-id.h (build_id_to_debug_bfd): Clarify that function
	searches for BFD of debug info file.
	(build_id_to_exec_bfd): Declare.
	* corelow.c: Include build-id.h.
	(locate_exec_from_corefile_build_id): New function.
	(core_target_open): If no executable BFD is found,
	search for a core file BFD using build-id.

gdb/testsuite/ChangeLog:
2019-12-07  Keith Seitz  <keiths@redhat.com>

	* gdb.base/corefile-buildid-shlib-shr.c: New file.
	* gdb.base/corefile-buildid-shlib.c: New file.
	* gdb.base/corefile-buildid.c: New file.
	* gdb.base/corefile-buildid.exp: New file.

Change-Id: I15e9e8e58f10c68b5cae55e2eba58df1e8aef529
2019-12-07 12:05:41 -08:00
Christian Biesinger
dfb65191d8 Put bcache inside "namespace gdb"
This avoids a conflict with a system "struct bcache" on
Solaris (see e.g.
https://www.isi.edu/nsnam/archive/ns-users/webarch/2001/msg05393.html)

Note that the Solaris conflict for now only surfaces with
--enable-targets=all (which the build bot doesn't use).

gdb/ChangeLog:

2019-12-06  Christian Biesinger  <cbiesinger@google.com>

	* bcache.c: Put in namespace gdb.
	* bcache.h: Likewise.
	* gdbtypes.c (check_types_worklist): Update.
	(types_deeply_equal): Update.
	* macrotab.c (struct macro_table) <bcache>: Update.
	(new_macro_table): Update.
	* macrotab.h (struct bcache): Put this forward declaration
	inside namespace gdb.
	(new_macro_table): Update.
	* objfiles.h (struct objfile_per_bfd_storage) <filename_cache>:
	Update.
	<macro_cache>: Update.
	* psymtab.h: (psymtab_storage) <psymbol_cache>: Update.

Change-Id: I843d5e91f7ccb3db6d1099a8214c15a74510256f
2019-12-06 13:19:02 -06:00
Tom de Vries
93e55f0a03 [gdb/symtab] Prefer var def over decl
Consider the DWARF as generated by gcc with the tentative patch to fix gcc
PR91507 - "wrong debug for completed array with previous incomplete
declaration":
...
 <1><f4>: Abbrev Number: 2 (DW_TAG_array_type)
    <f5>   DW_AT_type        : <0xff>
    <f9>   DW_AT_sibling     : <0xff>
 <2><fd>: Abbrev Number: 3 (DW_TAG_subrange_type)
 <2><fe>: Abbrev Number: 0
 <1><ff>: Abbrev Number: 4 (DW_TAG_pointer_type)
    <100>   DW_AT_byte_size   : 8
    <101>   DW_AT_type        : <0x105>
 <1><105>: Abbrev Number: 5 (DW_TAG_base_type)
    <106>   DW_AT_byte_size   : 1
    <107>   DW_AT_encoding    : 6       (signed char)
    <108>   DW_AT_name        : (indirect string, offset: 0x19f): char
 <1><10c>: Abbrev Number: 6 (DW_TAG_variable)
    <10d>   DW_AT_name        : zzz
    <111>   DW_AT_decl_file   : 1
    <112>   DW_AT_decl_line   : 1
    <113>   DW_AT_decl_column : 14
    <114>   DW_AT_type        : <0xf4>
    <118>   DW_AT_external    : 1
    <118>   DW_AT_declaration : 1
 <1><118>: Abbrev Number: 2 (DW_TAG_array_type)
    <119>   DW_AT_type        : <0xff>
    <11d>   DW_AT_sibling     : <0x128>
 <1><12f>: Abbrev Number: 8 (DW_TAG_variable)
    <130>   DW_AT_specification: <0x10c>
    <134>   DW_AT_decl_line   : 2
    <135>   DW_AT_decl_column : 7
    <136>   DW_AT_type        : <0x118>
    <13a>   DW_AT_location    : 9 byte block: 3 30 10 60 0 0 0 0 0      (DW_OP_addr: 601030)
...

The DWARF will result in two entries in the symbol table, a decl with type
char *[] and a def with type char*[2].

When trying to print the value of zzz:
...
$ gdb a.spec.out -batch -ex "p zzz"
...
the decl (rather than the def) will be found in the symbol table, which is
missing the location information, and consequently we get:
...
$1 = 0x601030 <zzz>
...

[ There is a fallback mechanism that finds the address of the variable in the
minimal symbol table, but that's not used here, because the type of the decl
does not specify a size.  We could use the symbol size here to get the size
of the type, but that's currently not done: PR exp/24989.  Still, fixing that
PR would not fix the generic case, where minimal symbol info is not
available. ]

Fix this by preferring defs over decls when searching in the symbol table.

Build and reg-tested on x86_64-linux.

gdb/ChangeLog:

2019-12-06  Tom de Vries  <tdevries@suse.de>

	PR symtab/24971
	* block.c (best_symbol, better_symbol): New function.
	(block_lookup_symbol_primary, block_lookup_symbol): Prefer def over
	decl.

gdb/testsuite/ChangeLog:

2019-12-06  Tom de Vries  <tdevries@suse.de>

	* gdb.dwarf2/varval.exp: Add decl before def test.

Change-Id: Id92326cb8ef9903b121ef9e320658eb565d0f5a9
2019-12-06 18:51:49 +01:00
Tankut Baris Aktemur
c7d12402bd gdb/testsuite: do minor clean-up in gdb.cp/rvalue-ref-overload.exp
Simplify the expected test outputs.  This is a minor cleanup; no
functional change is intended.

gdb/testsuite/ChangeLog:
2019-12-06  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>

	* gdb.cp/rvalue-ref-overload.exp: Minor cleanup.

Change-Id: Ie760a2856cae3be0eeed5496765a5f1cd102d6b7
2019-12-06 08:05:04 +01:00
Tankut Baris Aktemur
06acc08f0a gdb: fix overload resolution for see-through references
The overload resolution mechanism assigns badness values to the
necessary conversions to be made on types to pick a champion.  A
badness value consists of a "rank" that scores the conversion and a
"subrank" to differentiate conversions of the same kind.

An auxiliary function, 'sum_ranks', is used for adding two badness
values.  In all of its uses, except two, 'sum_ranks' is used for
populating the subrank of a badness value.  The two exceptions are in
'rank_one_type':

~~~
  /* See through references, since we can almost make non-references
     references.  */

  if (TYPE_IS_REFERENCE (arg))
    return (sum_ranks (rank_one_type (parm, TYPE_TARGET_TYPE (arg), NULL),
		       REFERENCE_CONVERSION_BADNESS));
  if (TYPE_IS_REFERENCE (parm))
    return (sum_ranks (rank_one_type (TYPE_TARGET_TYPE (parm), arg, NULL),
		       REFERENCE_CONVERSION_BADNESS));
~~~

Here, the result of a recursive call is combined with
REFERENCE_CONVERSION_BADNESS.  This leads to the problem of
over-punishment by combining two ranks.  Consider this:

    void an_overloaded_function (const foo &);
    void an_overloaded_function (const foo &&);
    ...
    foo arg;
    an_overloaded_function(arg);

When ranking 'an_overloaded_function (const foo &)', the badness
values REFERENCE_CONVERSION_BADNESS and CV_CONVERSION_BADNESS are
combined, whereas 'rank_one_type' assigns only the
REFERENCE_CONVERSION_BADNESS value to 'an_overloaded_function (const
foo &&)' (there is a different execution flow for that).  This yields
in GDB picking the latter function as the overload champion instead of
the former.

In fact, the 'rank_one_type' function should have given
'an_overloaded_function (const foo &)' the CV_CONVERSION_BADNESS
value, with the see-through referencing increasing the subrank a
little bit.  This can be achieved by introducing a new badness value,
REFERENCE_SEE_THROUGH_BADNESS, which bumps up the subrank only, and
using it in the two "exceptional" cases of 'sum_ranks'.

gdb/ChangeLog:
2019-12-06  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>

	* gdbtypes.h: Define the REFERENCE_SEE_THROUGH_BADNESS value.
	* gdbtypes.c (rank_one_type): Use REFERENCE_SEE_THROUGH_BADNESS
	for ranking see-through reference cases.

gdb/testsuite/ChangeLog:
2019-12-06  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>

	* gdb.cp/rvalue-ref-overload.cc: Add a case that involves both
	CV and reference conversion for overload resolution.
	* gdb.cp/rvalue-ref-overload.exp: Test it.

Change-Id: I39ae6505ab85ad0bd21915368c82540ceeb3aae9
2019-12-06 08:01:18 +01:00
Philippe Waroquiers
e0fad1eadf Fix crash when command arg is missing in faas/taas/tfaas commands.
GDB crashes when doing:
  (gdb) faas
  Aborted

Do the needed check to avoid crashing.

gdb/ChangeLog
2019-12-06  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
	* stack.c (faas_command): Check a command is provided.
	* thread.c (taas_command, tfaas_command): Likewise.

gdb/testsuite/ChangeLog
2019-12-06  Philippe Waroquiers  <philippe.waroquiers@skynet.be>

	* gdb.threads/pthreads.exp: Test taas and tfaas without command.
	* gdb.base/frameapply.exp: Test faas without command.
2019-12-06 06:06:02 +01:00
Philippe Waroquiers
908641f530 Fix leaks when pruning inferiors.
Valgrind detects various inferior related leaks, such as:
  ==31877== 5,530 (56 direct, 5,474 indirect) bytes in 1 blocks are definitely lost in loss record 7,131 of 7,355
  ==31877==    at 0x4C2E18C: calloc (vg_replace_malloc.c:760)
  ==31877==    by 0x23E580: xcalloc (alloc.c:100)
  ==31877==    by 0x4794A9: xcnewvec<void*> (poison.h:158)
  ==31877==    by 0x4794A9: registry_alloc_data(registry_data_registry*, registry_fields*) (registry.c:51)
  ==31877==    by 0x3A537C: inferior_alloc_data (inferior.c:43)
  ==31877==    by 0x3A537C: inferior::inferior(int) (inferior.c:92)
  ==31877==    by 0x3A5426: add_inferior_silent(int) (inferior.c:98)
  ==31877==    by 0x3A5530: add_inferior(int) (inferior.c:122)
  ...

Origin of the leaks is in prune_inferiors: prune_inferiors is first removing
the inferior to prune from the inferior list, then calls delete_inferior.
But delete_inferior will only really destroy the inferior when it finds
it into the inferior list.
As delete_inferior is removing the inferior to delete from the inferior list,
ensure prune_inferiors only calls delete_inferior, without touching the
inferior list.

gdb/ChangeLog
2019-12-05  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
	* inferior.c (prune_inferiors):  Only call delete_inferior.
	Do not modify the inferior list.
2019-12-05 23:19:22 +01:00
Simon Marchi
b858499daf Remove gdbarch parameter of lookup_typename
I noticed that the gdbarch parameter of lookup_typename was unused, so I
removed it (as well as from lookup_signed_typename and
lookup_unsigned_typename) and updated all callers.

Tested by rebuilding.

gdb/ChangeLog:

	* c-exp.y: Update calls to lookup_typename,
	lookup_signed_typename and lookup_unsigned_typename.
	* c-lang.c (evaluate_subexp_c): Likewise.
	* cp-namespace.c (cp_lookup_symbol_imports_or_template):
	Likewise.
	* eval.c (binop_promote): Likewise.
	* gdbtypes.c (lookup_typename): Remove gdbarch parameter.
	(lookup_unsigned_typename): Likewise.
	(lookup_signed_typename): Likewise.
	* gdbtypes.h (lookup_unsigned_typename): Likewise.
	(lookup_signed_typename): Likewise.
	(lookup_typename): Likewise.
	* guile/scm-type.c (tyscm_lookup_typename): Update calls to
	lookup_typename, lookup_signed_typename,
	lookup_unsigned_typename.
	* m2-exp.y: Likewise.
	* printcmd.c (printf_wide_c_string): Likewise.
	(ui_printf): Likewise.
	* python/py-type.c (typy_lookup_typename): Likewise.
	* python/py-xmethods.c (python_xmethod_worker::invoke):
	Likewise.
	* rust-exp.y: Likewise.
2019-12-05 13:44:30 -05:00
Christian Biesinger
3a8fa2282b Fix (most) OpenBSD link errors
This fixes these errors:
ld: error: undefined symbol: x86_stopped_by_hw_breakpoint()
>>> referenced by x86-nat.h:109 (../../gdb/x86-nat.h:109)
>>>               amd64-obsd-nat.o:(x86_nat_target<obsd_nat_target>::stopped_by_hw_breakpoint())

ld: error: undefined symbol: x86_can_use_hw_breakpoint(bptype, int, int)
>>> referenced by x86-nat.h:76 (../../gdb/x86-nat.h:76)
>>>               amd64-obsd-nat.o:(x86_nat_target<obsd_nat_target>::can_use_hw_breakpoint(bptype, int, int))

ld: error: undefined symbol: x86_insert_hw_breakpoint(gdbarch*, bp_target_info*)
>>> referenced by x86-nat.h:93 (../../gdb/x86-nat.h:93)
>>>               amd64-obsd-nat.o:(x86_nat_target<obsd_nat_target>::insert_hw_breakpoint(gdbarch*, bp_target_info*))

ld: error: undefined symbol: x86_remove_hw_breakpoint(gdbarch*, bp_target_info*)
>>> referenced by x86-nat.h:97 (../../gdb/x86-nat.h:97)
>>>               amd64-obsd-nat.o:(x86_nat_target<obsd_nat_target>::remove_hw_breakpoint(gdbarch*, bp_target_info*))

ld: error: undefined symbol: x86_remove_watchpoint(unsigned long, int, target_hw_bp_type, expression*)
>>> referenced by x86-nat.h:89 (../../gdb/x86-nat.h:89)
>>>               amd64-obsd-nat.o:(x86_nat_target<obsd_nat_target>::remove_watchpoint(unsigned long, int, target_hw_bp_type, expression*))

ld: error: undefined symbol: x86_insert_watchpoint(unsigned long, int, target_hw_bp_type, expression*)
>>> referenced by x86-nat.h:84 (../../gdb/x86-nat.h:84)
>>>               amd64-obsd-nat.o:(x86_nat_target<obsd_nat_target>::insert_watchpoint(unsigned long, int, target_hw_bp_type, expression*))

ld: error: undefined symbol: x86_stopped_by_watchpoint()
>>> referenced by x86-nat.h:100 (../../gdb/x86-nat.h:100)
>>>               amd64-obsd-nat.o:(x86_nat_target<obsd_nat_target>::stopped_by_watchpoint())

ld: error: undefined symbol: x86_stopped_data_address(unsigned long*)
>>> referenced by x86-nat.h:103 (../../gdb/x86-nat.h:103)
>>>               amd64-obsd-nat.o:(x86_nat_target<obsd_nat_target>::stopped_data_address(unsigned long*))

ld: error: undefined symbol: x86_region_ok_for_hw_watchpoint(unsigned long, int)
>>> referenced by x86-nat.h:79 (../../gdb/x86-nat.h:79)
>>>               amd64-obsd-nat.o:(x86_nat_target<obsd_nat_target>::region_ok_for_hw_watchpoint(unsigned long, int))

and

ld: error: undefined symbol: x86_dr_insert_watchpoint(x86_debug_reg_state*, target_hw_bp_type, unsigned long, int)
>>> referenced by x86-nat.c:156 (../../gdb/x86-nat.c:156)
>>>               x86-nat.o:(x86_insert_watchpoint(unsigned long, int, target_hw_bp_type, expression*))

ld: error: undefined symbol: x86_dr_remove_watchpoint(x86_debug_reg_state*, target_hw_bp_type, unsigned long, int)
>>> referenced by x86-nat.c:169 (../../gdb/x86-nat.c:169)
>>>               x86-nat.o:(x86_remove_watchpoint(unsigned long, int, target_hw_bp_type, expression*))

ld: error: undefined symbol: x86_dr_region_ok_for_watchpoint(x86_debug_reg_state*, unsigned long, int)
>>> referenced by x86-nat.c:181 (../../gdb/x86-nat.c:181)
>>>               x86-nat.o:(x86_region_ok_for_hw_watchpoint(unsigned long, int))

ld: error: undefined symbol: x86_dr_stopped_data_address(x86_debug_reg_state*, unsigned long*)
>>> referenced by x86-nat.c:194 (../../gdb/x86-nat.c:194)
>>>               x86-nat.o:(x86_stopped_data_address(unsigned long*))

ld: error: undefined symbol: x86_dr_stopped_by_watchpoint(x86_debug_reg_state*)
>>> referenced by x86-nat.c:206 (../../gdb/x86-nat.c:206)
>>>               x86-nat.o:(x86_stopped_by_watchpoint())

ld: error: undefined symbol: x86_dr_insert_watchpoint(x86_debug_reg_state*, target_hw_bp_type, unsigned long, int)
>>> referenced by x86-nat.c:219 (../../gdb/x86-nat.c:219)
>>>               x86-nat.o:(x86_insert_hw_breakpoint(gdbarch*, bp_target_info*))

ld: error: undefined symbol: x86_dr_remove_watchpoint(x86_debug_reg_state*, target_hw_bp_type, unsigned long, int)
>>> referenced by x86-nat.c:233 (../../gdb/x86-nat.c:233)
>>>               x86-nat.o:(x86_remove_hw_breakpoint(gdbarch*, bp_target_info*))

ld: error: undefined symbol: x86_dr_stopped_by_hw_breakpoint(x86_debug_reg_state*)
>>> referenced by x86-nat.c:269 (../../gdb/x86-nat.c:269)
>>>               x86-nat.o:(x86_stopped_by_hw_breakpoint())

It does not fix:
ld: error: can't create dynamic relocation R_X86_64_64 against symbol: __gmp_binvert_limb_table in readonly segment; recompile object files with -fPIC or pass '-Wl,-z,notext' to allow text relocations in the output
>>> defined in /usr/local/lib/libgmp.a(mp_minv_tab.o)
>>> referenced by tmp-dive_1.s
>>>               dive_1.o:(__gmpn_divexact_1) in archive /usr/local/lib/libgmp.a

ld: error: can't create dynamic relocation R_X86_64_64 against symbol: __gmp_binvert_limb_table in readonly segment; recompile object files with -fPIC or pass '-Wl,-z,notext' to allow text relocations in the output
>>> defined in /usr/local/lib/libgmp.a(mp_minv_tab.o)
>>> referenced by tmp-bdiv_q_1.s
>>>               bdiv_q_1.o:(__gmpn_bdiv_q_1) in archive /usr/local/lib/libgmp.a

ld: error: can't create dynamic relocation R_X86_64_64 against symbol: __gmpn_invert_limb_table in readonly segment; recompile object files with -fPIC or pass '-Wl,-z,notext' to allow text relocations in the output
>>> defined in /usr/local/lib/libgmp.a(invert_limb_table.o)
>>> referenced by tmp-invert_limb.s
>>>               invert_limb.o:(__gmpn_invert_limb) in archive /usr/local/lib/libgmp.a

gdb/ChangeLog:

2019-12-04  Christian Biesinger  <cbiesinger@google.com>

	* configure.nat (obsd64): Add missing files x86-nat.o and
	nat/x86-dregs.o.

Change-Id: I4a443c0cf805efd7b45feaabd729a01b07772724
2019-12-04 16:15:18 -06:00
Tom Tromey
2dbc041e4e Use metadata style in a few more places
I happened to find a few more spots that should use metadata style,
but do not.  I missed these in my earlier search somehow.  This patch
also adds gettext markup in a couple of spots where it was missing.

gdb/ChangeLog
2019-12-04  Tom Tromey  <tom@tromey.com>

	* valprint.c (val_print_string): Use metadata_style.
	* go-valprint.c (print_go_string): Use metadata style.
	* p-valprint.c (pascal_object_print_static_field): Use metadata
	style.
	* cp-valprint.c (cp_print_static_field): Use metadata style.

Change-Id: Id82ca2aa306c6694b111d5c92dfa6f0cce919ebf
2019-12-04 14:27:36 -07:00
Andrew Burgess
8d70a9f093 gdb/testsuite: Use -J option when compiling Fortran tests
When compiling Fortran tests (e.g. gdb.fortran/info-modules.exp), the
Fotran compile produces .mod files.  These files contain details of
compiled modules that are then consumed by the compiler when compiling
other files that USE a module.

Currently the compiler writes the .mod files into its current
directory, so for us this turns out to be 'build/gdb/testsuite/'.
This means that .mod files can be shared between tests, which seems
against the spirit of the GDB testsuite; source files should be
compiled fresh for each test.

This commit adds the -J option to the compiler flags whenever we
compile a Fortran file, this option tells the compiler where to write,
and look for, .mod files.

After this commit there was one Fortran test that needed fixing, with
that fix in place all of the Fortran tests pass again, but now the
.mod files are now produced in the per-test output directories.

gdb/testsuite/ChangeLog:

	* lib/gdb.exp (gdb_compile): Add -J compiler option when building
	Fortran tests.
	* gdb.mi/mi-fortran-modules.exp: Compile source files in correct
	order.

Change-Id: I99444cf22d80e320093d3f3ed9abb8825f378e0b
2019-12-04 20:33:36 +00:00
Andrew Burgess
36c8fb93c9 gdb/fortran: Support for single/double type modifiers
Extend the Fortran parser to support 'single precision' and 'double
precision' types as well 'single complex' and 'double complex' types.

gdb/ChangeLog:

	* f-exp.y (COMPLEX_KEYWORD, SINGLE, DOUBLE, PRECISION): New
	tokens.
	(typebase): New patterns for complex, single/double precision, and
	single/double complex.
	(f77_keywords): Change token for complex keyword, and add single,
	double, and precision keywords.

gdb/testsuite/ChangeLog:

	* gdb.fortran/type-kinds.exp (test_cast_1_to_type_kind): Handle
	casting to type with no kind specified.
	(test_basic_parsing_of_type_kinds): Additional tests for types
	with no kind specified, and add tests for single/double
	precision/complex types.

Change-Id: I9c82f4d392c58607747bd08862c1ee330723a1ba
2019-12-04 20:29:53 +00:00
Simon Marchi
c6170c2c14 Fix doc of AVR-specific command "info io_registers"
Running the selftests on an all-targets build, I get:

    Running selftest help_doc_invariants.
    help doc broken invariant: command 'info io_registers' help doc first line is not terminated with a '.' character
    Self test failed: self-test failed at /home/simark/src/binutils-gdb/gdb/unittests/help-doc-selftests.c:95

Add a period at the end of the doc of that command, and make it a bit
nicer in general.

gdb/ChangeLog:

	* avr-tdep.c (_initialize_avr_tdep): Improve help of command
	"info io_registers".
2019-12-04 13:35:46 -05:00
Simon Marchi
894ecaf4ca Fix regcache::cooked_read_test selftest for mep
When running the regcache::cooked_read_test selftest in an all targets
build, I get the following internal error:

    /home/simark/src/binutils-gdb/gdb/thread.c:95: internal-error: thread_info* inferior_thread(): Assertion `tp' failed.

The stack trace is the followiing:

    #9  0x000055fe25584a52 in internal_error (file=0x55fe27a25fe0 "/home/simark/src/binutils-gdb/gdb/thread.c", line=95, fmt=0x55fe27a25c80 "%s: Assertion `%s' failed.")
        at /home/simark/src/binutils-gdb/gdb/gdbsupport/errors.c:55
    #10 0x000055fe260674bc in inferior_thread () at /home/simark/src/binutils-gdb/gdb/thread.c:95
    #11 0x000055fe25c62f0f in get_current_regcache () at /home/simark/src/binutils-gdb/gdb/regcache.c:372
    #12 0x000055fe2594fcf1 in current_options () at /home/simark/src/binutils-gdb/gdb/mep-tdep.c:873
    #13 0x000055fe2594ff08 in mep_register_name (gdbarch=0x62100056f510, regnr=152) at /home/simark/src/binutils-gdb/gdb/mep-tdep.c:958
    #14 0x000055fe25950112 in mep_register_reggroup_p (gdbarch=0x62100056f510, regnum=152, group=0x55fe2924d540 <save_group>) at /home/simark/src/binutils-gdb/gdb/mep-tdep.c:1029
    #15 0x000055fe2555ad87 in gdbarch_register_reggroup_p (gdbarch=0x62100056f510, regnum=152, reggroup=0x55fe2924d540 <save_group>) at /home/simark/src/binutils-gdb/gdb/gdbarch.c:3622
    #16 0x000055fe25c61d45 in reg_buffer::save(gdb::function_view<register_status (int, unsigned char*)>) (this=0x7ffc61a0ed90, cooked_read=...)
        at /home/simark/src/binutils-gdb/gdb/regcache.c:247
    #17 0x000055fe2552ac60 in readonly_detached_regcache::readonly_detached_regcache(gdbarch*, gdb::function_view<register_status (int, unsigned char*)>) (this=0x7ffc61a0ed90,
        gdbarch=0x62100056f510, cooked_read=...) at /home/simark/src/binutils-gdb/gdb/regcache.h:444
    #18 0x000055fe25c61867 in readonly_detached_regcache::readonly_detached_regcache (this=0x7ffc61a0ed90, src=...) at /home/simark/src/binutils-gdb/gdb/regcache.c:212
    #19 0x000055fe25c6a5ca in selftests::cooked_read_test (gdbarch=0x62100056f510) at /home/simark/src/binutils-gdb/gdb/regcache.c:1613

The problems is that mep's code ends up calling inferior_thread, which
calls find_thread_ptid.  find_thread_ptid searches for a thread by ptid
in the thread list of the inferior that is expected to contain that
thread.

However, the thread list of the mock inferior set up in cooked_read_test
is never initialized.  So find_thread_ptid doesn't find the thread,
which is an unexpected situation for inferior_thread.

This is failing since this commit:

	0803633106
	Per-inferior thread list, thread ranges/iterators, down with ALL_THREADS, etc.

Fix it by putting the mock thread in the thread list of the mock
inferior in cooked_read_test.

gdb/ChangeLog:

	* regcache.c (cooked_read_test): Initialize thread list of
	mock_inferior.
2019-12-04 13:35:32 -05:00
Simon Marchi
be155ebb94 Remove unused includes in aarch64-linux-tdep.c
include-what-you-use reports:

../../../src/binutils-gdb/gdb/aarch64-linux-tdep.c should remove these lines:
- #include "arch-utils.h"  // lines 24-24
- #include "auxv.h"  // lines 48-48
- #include "cli/cli-utils.h"  // lines 39-39
- #include "elf/common.h"  // lines 49-49
- #include "inferior.h"  // lines 35-35

Add an include for "target/target.h", otherwise target_read_memory isn't
found.

gdb/ChangeLog:

	* aarch64-linux-tdep.c: Remove includes.
2019-12-04 13:33:02 -05:00
Simon Marchi
c577cdd70b Remove unused includes in aarch64-tdep.c
include-what-you-use reports:

../../../src/binutils-gdb/gdb/aarch64-tdep.c should remove these lines:
- #include "ax.h"  // lines 45-45
- #include "elf-bfd.h"  // lines 52-52
- #include "elf/aarch64.h"  // lines 53-53
- #include "infcall.h"  // lines 44-44
- #include "inferior.h"  // lines 24-24
- #include "language.h"  // lines 43-43

gdb/ChangeLog:

	* aarch64-tdep.c: Remove includes.
2019-12-04 13:32:33 -05:00
Simon Marchi
610cfd618e Compare iterators, not values, in filtered_iterator::operator{==,!=}
The == and != operators on filtered_iterator are not doing the
right thing, they compare values pointed by the wrapped iterators
instead of comparing the iterators themselves.

As a result, operator== will return true if the two iterators point to
two equal values at different positions.  operator!= will fail
similarly.

Also, this causes it to deference past-the-end iterators when doing.
For example, in

  for (iter = ...; iter != end_iter; ++iter)

the != comparison dereferences end_iter.  I don't think this should
happen.

I don't think it's a problem today, given that we only use
filtered_iterator to wrap linked lists of threads and inferiors.
Dereferencing past-the-end iterators of these types is not fatal, it
just returns NULL, which is not a value we otherwise find in the lists.
But in other contexts, it could become problematic.

I have added a simple self test that fails without the fix applied.

gdb/ChangeLog:

	* filtered-iterator.h (filtered_iterator) <operator==,
	operator!=>: Compare wrapped iterators, not wrapped pointers.
	* Makefile.in (SUBDIR_UNITTESTS_SRCS): Add
	unittests/filtered_iterator-selftests.c.
	* unittests/filtered_iterator-selftests.c: New file.
2019-12-04 13:27:56 -05:00
Tom Tromey
4139ff0088 Add bit-field test for scalar_storage_order
This adds a bit-field test for scalar_storage_order.

gdb/testsuite/ChangeLog
2019-12-04  Tom Tromey  <tromey@adacore.com>

	* gdb.base/endianity.c (struct other) <x>: New field.
	(main): Initialize it.
	* gdb.base/endianity.exp: Update.

Change-Id: I9e07d1b3e08e7c3384832b68ef286afe1d11479a
2019-12-04 09:31:18 -07:00
Tom Tromey
a05cf17ab9 Propagate endianity to subrange types
A subrange type should inherit its endianity from its base type.

gdb/ChangeLog
2019-12-04  Tom Tromey  <tromey@adacore.com>

	* gdbtypes.c (create_range_type): Inherit endianity
	from base type.

gdb/testsuite/ChangeLog
2019-12-04  Tom Tromey  <tromey@adacore.com>

	* gdb.ada/scalar_storage/storage.adb: New file.
	* gdb.ada/scalar_storage/pck.adb: New file.
	* gdb.ada/scalar_storage/pck.ads: New file.
	* gdb.ada/scalar_storage.exp: New file.

Change-Id: I2998ab919dc28aeff097763c4242f9bfb90823a3
2019-12-04 09:31:18 -07:00
Tom Tromey
d5a22e77b5 Remove gdbarch_bits_big_endian
From what I can tell, set_gdbarch_bits_big_endian has never been used.
That is, all architectures since its introduction have simply used the
default, which is simply check the architecture's byte-endianness.

Because this interferes with the scalar_storage_order code, this patch
removes this gdbarch setting entirely.  In some places,
type_byte_order is used rather than the plain gdbarch.

gdb/ChangeLog
2019-12-04  Tom Tromey  <tromey@adacore.com>

	* ada-lang.c (decode_constrained_packed_array)
	(ada_value_assign, value_assign_to_component): Update.
	* dwarf2loc.c (rw_pieced_value, access_memory)
	(dwarf2_compile_expr_to_ax): Update.
	* dwarf2read.c (dwarf2_add_field): Update.
	* eval.c (evaluate_subexp_standard): Update.
	* gdbarch.c, gdbarch.h: Rebuild.
	* gdbarch.sh (bits_big_endian): Remove.
	* gdbtypes.h (union field_location): Update comment.
	* target-descriptions.c (make_gdb_type): Update.
	* valarith.c (value_bit_index): Update.
	* value.c (struct value) <bitpos>: Update comment.
	(unpack_bits_as_long, modify_field): Update.
	* value.h (value_bitpos): Update comment.

Change-Id: I379b5e0c408ec8742f7a6c6b721108e73ed1b018
2019-12-04 09:31:18 -07:00
Tom Tromey
7ab4a236ce Move type_byte_order earlier
I failed to notice that the scalar_storage_order patch put
type_byte_order at the end of gdbtypes.c.  The end of the file is
normally where the file's _initialize function goes.  This moves
type_byte_order earlier, into a more relevant section.

gdb/ChangeLog
2019-12-04  Tom Tromey  <tromey@adacore.com>

	* gdbtypes.c (type_byte_order): Move earlier.  Assert for unknown
	endian-ness.

Change-Id: I4666431ecbb32ec98918f39f72d22c86b2bc8dde
2019-12-04 09:31:18 -07:00
Tom Tromey
103a685e7f Add scalar_storage_order support for floating point
Testing the scalar_storage_order patch pointed out that it does not
handle floating point properly.  This patch fixes this problem.

gdb/ChangeLog
2019-12-04  Tom Tromey  <tromey@adacore.com>

	* dwarf2read.c (dwarf2_init_float_type)
	(dwarf2_init_complex_target_type): Add byte_order parameter.
	(read_base_type): Compute byte order earlier.
	* gdbtypes.c (init_float_type): Add byte_order parameter.
	* gdbtypes.h (init_float_type): Add byte_order parameter.

gdb/testsuite/ChangeLog
2019-12-04  Tom Tromey  <tromey@adacore.com>

	* gdb.base/endianity.c (struct otherendian) <f>: New field.
	(main): Initialize it.
	* gdb.base/endianity.exp: Update.

Change-Id: Ic02eb711d80ce678ef0ecf8c506a626e441b8440
2019-12-04 09:31:18 -07:00
Tom Tromey
7a9e9f9f1e Fix another build failure in tui-selftests.c
Christian had emailed me to say that the TUI unit test broke the mingw
build, but I erroneously thought this was fixed by the earlier patch
that made the test body conditional on the TUI being built.

However, I was wrong about this -- tui-selftests.c unconditionally
includes tui-winsource.h, which fails if curses is not available.

This patch fixes the build problem by moving this include into the
"#ifdef TUI" section.

Tested by rebuilding a mingw-hosted gdb.

gdb/ChangeLog
2019-12-04  Tom Tromey  <tromey@adacore.com>

	* unittests/tui-selftests.c: Conditionally include tui-winsource.h.

Change-Id: If608649ef5cbef8ea92192e11c53379742967ee7
2019-12-04 08:08:13 -07:00
Tom Tromey
feee869bd8 Silence maybe-uninitialized warning in dwarf2read.c
I upgraded to Fedora 30 recently.  It includes GCC 9, which gives a
warning for dwarf2read.c:

../../binutils-gdb/gdb/dwarf2read.c:16103:24: warning: ‘discr_offset’ may be used uninitialized in this function [-Wmaybe-uninitialized]

This patch fixes the problem by initializing discr_offset.
Tested by rebuilding.

gdb/ChangeLog
2019-12-04  Tom Tromey  <tromey@adacore.com>

	* dwarf2read.c (process_structure_scope): Initialize
	"discr_offset".

Change-Id: I76a6157921c9beacb641b8a41e10026006621b95
2019-12-04 07:48:44 -07:00
Andrew Burgess
c2512106f8 gdb/mi: Add -max-results parameter to some -symbol-info-* commands
Adds a new parameter -max-results to -symbol-info-functions,
-symbol-info-variables, -symbol-info-types, and -symbol-info-modules.
This parameter limits the number of results returned.

This change still leaves -symbol-info-module-functions and
-symbol-info-module-variables always returning all results, fixing
these commands is slightly harder.

There's currently no mechanism for the user of these commands to know
if the result list has been truncated if you get back the maximum
number of results, so if there are exactly 10 functions and you call
'-symbol-info-functions --max-results 10' the reply would appear no
different than if you had 20 functions and called with a max of 10.
Right now, if you get back the maximum then you should assume that
there might be more results available.

One other thing to note is that the global_symbol_searcher::search by
default returns SIZE_MAX results, there's no longer a mechanism to
return an unlimited number of results, though hopefully this will not
be a huge issue.

gdb/ChangeLog:

	* mi/mi-symbol-cmds.c (mi_symbol_info): Take extra parameter, and
	add it into the search spec.
	(parse_max_results_option): New function.
	(mi_info_functions_or_variables): Parse -max-results flag and pass
	it to mi_symbol_info.
	(mi_cmd_symbol_info_modules): Likewise.
	(mi_cmd_symbol_info_types): Likewise.
	* symtab.c (global_symbol_searcher::add_matching_symbols): Change
	return type to bool, change result container into a set, and don't
	add new results if we have enough already.
	(global_symbol_searcher::add_matching_msymbols): Change return
	type to bool, and don't add new results if we have enough already.
	(sort_search_symbols_remove_dups): Delete.
	(global_symbol_searcher::search): Early exit from search loop when
	we have enough results.  Use a std::set to collect the results
	from calling add_matching_symbols.
	* symtab.h (global_symbol_searcher) <set_max_seach_results>: New
	member function.
	(global_symbol_searcher) <m_max_search_results>: New member
	variable.
	(global_symbol_searcher) <add_matching_symbols>: Update header
	comment and change return type to bool.
	(global_symbol_searcher) <add_matching_msymbols>: Update header
	comment and change return type to bool.

gdb/doc/ChangeLog:

	* doc/gdb.texinfo (GDB/MI Symbol Query): Add documentation of
	-max-results to some -symbol-info-* commands.

gdb/testsuite/ChangeLog:

	* gdb.mi/mi-sym-info.exp: Add tests for -max-results parameter.

Change-Id: I90a28feb55b388fb46461a096c5db08b6b0bd427
2019-12-04 10:25:13 +00:00
Andrew Burgess
f97a63c5aa gdb: Split global symbol search into separate functions
In preparation for the next commit, this commit restructures the code
by splitting global_symbol_searcher::search into separate functions.
There should be no functional changes after this commit.

gdb/ChangeLog:

	* symtab.c (symbol_search::compare_search_syms): Update header
	comment.
	(global_symbol_searcher::is_suitable_msymbol): New function.
	(global_symbol_searcher::expand_symtabs): New function.
	(global_symbol_searcher::add_matching_symbols): New function.
	(global_symbol_searcher::add_matching_msymbols): New function.
	(global_symbol_searcher::search): Move most of the content
	into the new functions above, and call them as needed.
	* symtab.h (global_symbol_searcher) <expand_symtabs>: New member
	function.
	(global_symbol_searcher) <add_matching_symbols>: New member
	function.
	(global_symbol_searcher) <add_matching_msymbols>: New member
	function.
	(global_symbol_searcher) <is_suitable_msymbol>: New member
	function.

Change-Id: I06b26920f35c268f7a38d8203dc2c2813aa501c6
2019-12-04 10:25:09 +00:00
Andrew Burgess
293b38d60f gdb/mi: Add -symbol-info-module-{variables,functions}
Two new MI command -symbol-info-module-variables and
-symbol-info-module-functions, which are the equivalent of the CLI
command 'info module variables' and 'info module functions'.  These
return information about functions and variables within Fortran
modules.

gdb/ChangeLog:

	* mi/mi-cmds.c (mi_cmds): Add -symbol-info-module-functions and
	-symbol-info-module-variables entries.
	* mi/mi-cmds.h (mi_cmd_symbol_info_module_functions): Declare.
	(mi_cmd_symbol_info_module_variables): Declare.
	* mi/mi-symbol-cmds.c
	(module_symbol_search_iterator): New typedef.
	(output_module_symbols_in_single_module_and_file): New function.
	(output_module_symbols_in_single_module): New function.
	(mi_info_module_functions_or_variables): New function.
	(mi_cmd_symbol_info_module_functions): New function.
	(mi_cmd_symbol_info_module_variables): New function.
	* NEWS: Mention new MI command.

gdb/doc/ChangeLog:

	* doc/gdb.texinfo (GDB/MI Symbol Query): Document new MI command
	-symbol-info-module-functions and -symbol-info-module-variables.

gdb/testsuite/ChangeLog:

	* gdb.mi/mi-fortran-modules.exp: Add additional tests for
	-symbol-info-module-functions and -symbol-info-module-variables.

Change-Id: Ic96f12dd14bd7e34774c3cde008fec30a4055bfe
2019-12-04 10:24:59 +00:00
Christian Biesinger
4cbd39b289 Replace hash function from bcache with fast_hash
This function is not just slower than xxhash, it is slower than
even libiberty's iterative_hash, so there does not seem to be
a reason for it to exist.

------------------------------------------------------------
Benchmark                     Time           CPU Iterations
------------------------------------------------------------
BM_xxh3                      11 ns         11 ns   66127192
BM_xxh32                     19 ns         19 ns   36792609
BM_xxh64                     16 ns         16 ns   42941328
BM_city32                    26 ns         26 ns   27028370
BM_city64                    17 ns         17 ns   40472793
BM_iterative_hash            77 ns         77 ns    9088854
BM_bcache_hash              125 ns        125 ns    5599232

gdb/ChangeLog:

2019-12-03  Christian Biesinger  <cbiesinger@google.com>

	* bcache.c (hash): Remove.
	(hash_continue): Remove.
	* bcache.h (hash): Remove.
	(hash_continue): Remove.
	(struct bcache) <ctor>: Update.
	* psymtab.c (psymbol_hash): Update.
	* stabsread.c (hashname): Update.
	* utils.h (fast_hash): Add an argument for a start value,
	defaulting to zero.

Change-Id: I107f013eda5fdd3293326b5a206be43155dae0f8
2019-12-03 15:27:15 -06:00
Philippe Waroquiers
82f910ea9c Fix leak of symbol name in block_symbol_cache
A symbol not found inserted in the cache has a xstrdup-ed name
that must be freed, but only the struct block_symbol_cache is freed.
Add a function destroy_block_symbol_cache that clears all slots
before releasing the cache.

2019-12-03  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
	* symtab.c (symbol_cache_clear_slot):  Move close to cleared type.
	(destroy_block_symbol_cache): New function.
	(symbol_cache:~symbol_cache) Call destroy_block_symbol_cache.
	(resize_symbol_cache): Likewise.
2019-12-03 21:30:12 +01:00
Tom Tromey
de2396d078 Fix build breakage with --disable-tui
An earlier patch introduced a unit test for tui_copy_source_line.
However if the TUI is not built (as is apparently the case on some of
the buildbot builders), then this will fail to link.

This patch fixes the problem.  Tested by rebuilding with the TUI
disabled.

gdb/ChangeLog
2019-12-02  Tom Tromey  <tom@tromey.com>

	* unittests/tui-selftests.c (run_tests): Make conditional.
	(_initialize_tui_selftest): Make conditional.

Change-Id: I964811c7635be24cf6c53920e74e920914503674
2019-12-02 16:12:19 -07:00
Christian Biesinger
638d85bce0 Change type of debug_aix_thread to bool
This fixes AIX build breakage from commit
491144b5e2

Thanks to Sangamesh Mallayya for pointing this out to me.

gdb/ChangeLog:

2019-12-02  Christian Biesinger  <cbiesinger@google.com>

	* aix-thread.c (debug_aix_thread): Change type to bool.

Change-Id: Ie7b2eab97b75b48067ef77e414e7510d1f79a525
2019-12-02 12:35:48 -06:00
Luis Machado
7532a164d5 Remove stale FIXME comment
While debugging something, i noticed this odd FIXME comment. It seems stale
and therefore here's a patch removing it.

gdb/ChangeLog:

2019-12-02  Luis Machado  <luis.machado@linaro.org>

	* infrun.c (follow_fork_inferior): Remove outdated FIXME comment.

Change-Id: I2436ca4ae4a6741012cafe8123325f738b692c9c
2019-12-02 11:22:09 -03:00
Andrew Burgess
216a7e6b9e gdb: Dynamic string length support
Add support for strings with dynamic length using the DWARF attribute
DW_AT_string_length.

Currently gFortran generates DWARF for some strings that make use of
DW_AT_string_length like this:

 <1><2cc>: Abbrev Number: 20 (DW_TAG_string_type)
    <2cd>   DW_AT_string_length: 5 byte block: 99 bd 1 0 0      (DW_OP_call4: <0x1bd>)
    <2d3>   DW_AT_byte_size   : 4
    <2d4>   DW_AT_sibling     : <0x2e2>

In this type entry the DW_AT_string_length attribute references a
second DW_TAG_formal_parameter that contains the string length.  The
DW_AT_byte_size indicates that the length is a 4-byte value.

This commit extends GDB's DWARF parsing for strings so that we can
create dynamic types as well as static types, based on the attribute
the DWARF contains.

I then extend the dynamic type resolution code in gdbtypes.c to add
support for resolving dynamic strings.

gdb/ChangeLog:

	* dwarf2read.c (read_tag_string_type): Read the fields required to
	make a dynamic string, and possibly create a dynamic range for the
	string.
	(attr_to_dynamic_prop): Setup is_reference based on the type of
	attribute being processed.
	* gdbtypes.c (is_dynamic_type_internal): Handle TYPE_CODE_STRING.
	(resolve_dynamic_array): Rename to...
	(resolve_dynamic_array_or_string): ...this, update header comment,
	and accept TYPE_CODE_STRING.
	(resolve_dynamic_type_internal): Handle TYPE_CODE_STRING.

gdb/testsuite/ChangeLog:

	* gdb.fortran/array-slices.exp: Add test for dynamic strings.

Change-Id: I03f2d181b26156f48f27a03c8a59f9bd4d71ac17
2019-12-01 22:31:32 +00:00
Andrew Burgess
11a8b1641e gdb/dwarf: Introduce dwarf2_per_cu_int_type function
This is a minor refactor in preparation for the next commit.  Splits
the core of dwarf2_per_cu_addr_sized_int_type out into a separate
function.  There should be no user visible changes after this commit.

gdb/ChangeLog:

	* dwarf2read.c (dwarf2_per_cu_int_type): New function, takes most
	of its implementation from...
	(dwarf2_per_cu_addr_sized_int_type): ...here, which now just calls
	the new function.

Change-Id: I8b849dd338012ec033b3f0a57d65cec0d7a3bd97
2019-12-01 22:31:31 +00:00
Andrew Burgess
5bbd8269fa gdb/fortran: array stride support
Currently GDB supports a byte or bit stride on arrays, in DWARF this
would be DW_AT_bit_stride or DW_AT_byte_stride on DW_TAG_array_type.
However, DWARF can also support DW_AT_byte_stride or DW_AT_bit_stride
on DW_TAG_subrange_type, the tag used to describe each dimension of an
array.

Strides on subranges are used by gFortran to represent Fortran arrays,
and this commit adds support for this to GDB.

I've extended the range_bounds struct to include the stride
information.  The name is possibly a little inaccurate now, but this
still sort of makes sense, the structure represents information about
the bounds of the range, and also how to move from the lower to the
upper bound (the stride).

I've added initial support for bit strides, but I've never actually
seen an example of this being generated.  Further, I don't really see
right now how GDB would currently handle a bit stride that was not a
multiple of the byte size as the code in, for example,
valarith.c:value_subscripted_rvalue seems geared around byte
addressing.  As a consequence if we see a bit stride that is not a
multiple of 8 then GDB will give an error.

gdb/ChangeLog:

	* dwarf2read.c (read_subrange_type): Read bit and byte stride and
	create a range with stride where appropriate.
	* f-valprint.c: Include 'gdbarch.h'.
	(f77_print_array_1): Take the stride into account when walking the
	array.  Also convert the stride into addressable units.
	* gdbtypes.c (create_range_type): Initialise the stride to
	constant zero.
	(create_range_type_with_stride): New function, initialise the
	range as normal, and then setup the stride.
	(has_static_range): Include the stride here.  Also change the
	return type to bool.
	(create_array_type_with_stride): Consider the range stride if the
	array isn't given its own stride.
	(resolve_dynamic_range): Resolve the stride if needed.
	* gdbtypes.h (struct range_bounds) <stride>: New member variable.
	(struct range_bounds) <flag_is_byte_stride>: New member variable.
	(TYPE_BIT_STRIDE): Define.
	(TYPE_ARRAY_BIT_STRIDE): Define.
	(create_range_type_with_stride): Declare.
	* valarith.c (value_subscripted_rvalue): Take range stride into
	account when walking the array.

gdb/testsuite/ChangeLog:

	* gdb.fortran/derived-type-striding.exp: New file.
	* gdb.fortran/derived-type-striding.f90: New file.
	* gdb.fortran/array-slices.exp: New file.
	* gdb.fortran/array-slices.f90: New file.

Change-Id: I9af2bcd1f2d4c56f76f5f3f9f89d8f06bef10d9a
2019-12-01 22:31:30 +00:00
Tom Tromey
82e3b5645f Treat inactive TUI specially in "info win"
I noticed that "info win" will print the table header, but no windows,
when the TUI is inactive.  This patch changes this to print a message
instead.

gdb/ChangeLog
2019-12-01  Tom Tromey  <tom@tromey.com>

	* tui/tui-win.c (tui_all_windows_info): Treat inactive TUI
	specially.

Change-Id: Ia860be8c786a71289da6609aa14d86b8365424db
2019-12-01 13:17:37 -07:00
Tom Tromey
517d261dfa Fix latent bug in tui_copy_source_line
tui_copy_source_line has a bug, where it can advance past the
terminating \0 in its input string.  This patch fixes the bug and adds
a test case for this function.

gdb/ChangeLog
2019-12-01  Tom Tromey  <tom@tromey.com>

	* tui/tui-winsource.c (tui_copy_source_line): Don't advance past
	\0.
	* unittests/tui-selftests.c: New file.
	* Makefile.in (SUBDIR_UNITTESTS_SRCS): Add tui-selftests.c.

Change-Id: I46cdabe6e57549983149b8f640cda5edd16fa260
2019-12-01 12:29:50 -07:00
Tom Tromey
484c9b643c Re-highlight windows when needed during TUI startup
I noticed that "tui enable" did not correctly show the source window
as having the focus.  Debugging showed that the problem was that
tui_update_variables was called after the windows were drawn, and its
result was being ignored.  This changed the code to re-highlight the
windows if the value changed.

gdb/ChangeLog
2019-12-01  Tom Tromey  <tom@tromey.com>

	* tui/tui.c (tui_enable): Call tui_update_variables earlier.

Change-Id: I1a4563fb431833dd3211a224c9e2df3b936fe9ce
2019-12-01 11:59:24 -07:00
Tom Tromey
a2a7af0c33 Add TUI border colors
This adds the ability to change the color of the TUI borders, both
ordinary and active.  Unlike other styling options, this doesn't allow
setting the intensity, because that is already done by the TUI in a
different way.

gdb/ChangeLog
2019-12-01  Tom Tromey  <tom@tromey.com>

	* NEWS: Document new settings.
	* tui/tui-wingeneral.c (box_win): Apply appropriate border style.
	* tui/tui-win.c (_initialize_tui_win): Add border style
	observers.
	* tui/tui-io.h (tui_apply_style): Declare.
	* tui/tui-io.c (tui_apply_style): Rename from apply_style.  No
	longer static.
	(apply_ansi_escape, tui_set_reverse_mode): Update.
	* cli/cli-style.h (class cli_style_option) <add_setshow_commands>:
	Add "skip_intensity" parameter.
	<changed>: New member.
	<do_set_value>: Declare.
	(tui_border_style, tui_active_border_style): Declare.
	* cli/cli-style.c (tui_border_style, tui_active_border_style): New
	globals.
	(cli_style_option): Initialize "changed".
	(cli_style_option::do_set_value): New function.
	(cli_style_option::add_setshow_commands): Add "skip_intensity"
	parameter.  Update.
	(STYLE_ADD_SETSHOW_COMMANDS): Add "SKIP" parameter.
	(_initialize_cli_style): Update.  Create TUI border style
	commands.

gdb/doc/ChangeLog
2019-12-01  Tom Tromey  <tom@tromey.com>

	* gdb.texinfo (TUI Configuration): Mention TUI border styles.
	(Output Styling): Document new settings.

Change-Id: Id13e2af0af2a0bde61282752f2c379db3220c9fc
2019-12-01 11:59:23 -07:00
Tom Tromey
d1da6b0160 Allow using less horizontal space in TUI source window
The source window currently uses a field width of 6 for line numbers,
and it further aligns to the next tab stop.  This seemed a bit
wasteful of horizontal space to me, so I changed that in an earlier
patch.

However, that change wasn't universally popular.  This patch instead
adds the option to use less horizontal space in the TUI source window.

gdb/ChangeLog
2019-12-01  Tom Tromey  <tom@tromey.com>

	* tui/tui-winsource.h (tui_copy_source_line): Add "ndigits"
	parameter.
	* tui/tui-winsource.c (tui_copy_source_line): Add "ndigits"
	parameter.
	* tui/tui-win.h (compact_source): Declare.
	* tui/tui-win.c (compact_source): New global.
	(tui_set_compact_source, tui_show_compact_source): New functions.
	(_initialize_tui_win): Add "compact-source" setting.
	* tui/tui-source.c (tui_source_window::set_contents): Handle
	compact_source setting.
	* tui/tui-disasm.c (tui_disasm_window::set_contents): Update.
	* NEWS: Document new setting.

gdb/doc/ChangeLog
2019-12-01  Tom Tromey  <tom@tromey.com>

	* gdb.texinfo (TUI Configuration): Document new setting.

Change-Id: I46ce9a68b12c9c79332d510f9c14b3c84b7efadd
2019-12-01 11:59:23 -07:00
Tom Tromey
489dbda6a8 Correctly compute length of DW_TAG_variant_part union
Currently, gdb internally transforms DW_TAG_variant_part into a union
(with some special attbributes).  When doing so, it computes the
length of this union from the length of the fields.  However, this
computation didn't include the offset of these fields, resulting in
the length being too short.

This is not a problem given the way the code currently works.
However, I have a patch series to switch gdb to value-based printing,
where this does have an impact.

Tested on x86-64 Fedora 28; and, considering that this only affects
Rust, I am checking it in.

gdb/ChangeLog
2019-11-30  Tom Tromey  <tom@tromey.com>

	* dwarf2read.c (dwarf2_add_field): Include field offset when
	computing variant part length.

Change-Id: I25d84fc237eb3c1e7f11f6eaf35ffe198efde6cc
2019-11-30 20:47:44 -07:00
Philippe Waroquiers
bf4985257d Document define-prefix command and the use of . in command names.
gdb/ChangeLog
2019-11-30  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
	* NEWS:  Mention define-prefix.  Tell that command names can now
	contain a . character.

gdb/doc/ChangeLog
2019-11-30  Philippe Waroquiers  <philippe.waroquiers@skynet.be>

	* gdb.texinfo (Define): Indicate that user-defined prefix can
	be used in 'define' command.  Document 'define-prefix' command.
2019-11-30 09:38:37 +01:00
Philippe Waroquiers
be09caf15d Allow . character as part of command names.
This patch adds . as an allowed character for user defined commands.
Combined with 'define-prefix', this allows to e.g. define a set of Valgrind
specific user command corresponding to the Valgrind monitor commands
(such as check_memory, v.info, v.set, ...).

gdb/ChangeLog
2019-11-30  Philippe Waroquiers  <philippe.waroquiers@skynet.be>

	* command.h (valid_cmd_char_p): Declare.
	* cli/cli-decode.c (valid_cmd_char_p): New function factorizing
	the check of valid command char.
	(find_command_name_length, valid_user_defined_cmd_name_p): Use
	valid_cmd_char_p.
	* cli/cli-script.c (validate_comname): Likewise.
	* completer.c (gdb_completer_command_word_break_characters):
	Do not remove . from the word break char, update comments.
	(complete_line_internal_1): Use valid_cmd_char_p.
	* guile/scm-cmd.c (gdbscm_parse_command_name): Likewise.
	* python/py-cmd.c (gdbpy_parse_command_name): Likewise.

gdb/testsuite/ChangeLog
2019-11-30  Philippe Waroquiers  <philippe.waroquiers@skynet.be>

	* gdb.base/define.exp: Test . in command names.
	* gdb.base/setshow.exp: Update test, as . is now part of
	command name.
2019-11-30 09:37:49 +01:00
Philippe Waroquiers
643c0cbedb Test define-prefix.
Adds a test testing the new define-prefix command.

2019-11-30  Philippe Waroquiers  <philippe.waroquiers@skynet.be>

	* gdb.base/define-prefix.exp: New file.
2019-11-30 09:36:56 +01:00
Philippe Waroquiers
c6ac7fc987 Implement user defined prefix.
This patch adds the new 'define-prefix' command that creates (or mark an
existing user defined command) as a prefix command.
This approach was preferred compared to add a -prefix option to
'define' command : with define-prefix, a command can be defined and
afterwards marked as a prefix.  Also, it is easier to define a
'prefix' only command in one operation.

This patch also adds completers for the 'define' and 'document' commands.
This makes it easier for the user to type the prefixes for 'define'
and type the documented command name for 'document'.

gdb/ChangeLog
2019-11-30  Philippe Waroquiers  <philippe.waroquiers@skynet.be>

	* cli/cli-script.c (do_define_command): Ensure a redefined
	prefix command is kept as a prefix command.
	(define_prefix_command): New function.
	(show_user_1): Report user defined prefixes.
	(_initialize_cli_script):  Create the new 'define-prefix' command.
	Add completers for 'define' and 'document'.
	* top.c (execute_command):  If command is a user-defined prefix only
	command, report the list of commands for this prefix command.
2019-11-30 09:36:19 +01:00
Tankut Baris Aktemur
a992a3b010 gdb: improve debug output of function overload resolution
Function overload resolution prints debug output if turned on via the
'set debug overload' command.  The output includes the badness vector
(BV).  For each function, this vector contains a badness value of the
length of parameters as its first element.  So, BV[0] does not
correspond to a parameter.  The badness values of parameters start
with BV[1].

A badness value is a pair; it contains a rank and a subrank.  Printing
both fields provides useful information.

Improve printing the badness vector along these lines.

gdb/ChangeLog:
2019-11-29  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>

	* valops.c (find_oload_champ): Improve debug output.

Change-Id: I771017e7afbbaf4809e2238a9b23274f55c61f55
2019-11-29 12:20:10 +01:00
Tankut Baris Aktemur
e9194a1a0e gdb: fix segfault in overload resolution debug output
A segfault occurs if overload resolution debug mode is turned on via
the 'set debug overload' command.  E.g.:

~~~
$ gdb ./a.out
...
(gdb) start
...
(gdb) set debug overload 1
(gdb) print foo(5)
-- Arg is int [8], parm is double [9]
Overloaded function instance (null) # of parms 1
Segmentation fault
$
~~~

The problem is, GDB tries to print the badness vector after it has
been std::move'd.  Fix the problem by printing the vector before it is
moved.

gdb/ChangeLog:
2019-11-29  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>

	* valops.c (find_oload_champ): Print part of debug messages
	before the badness vector is std::move'd.

Change-Id: Ia623f9637e82ec332bfeac23eb6b0f2ffdcdde27
2019-11-29 12:18:21 +01:00
Tom Tromey
53a008a61e Fix creal_internal_fn comment
I noticed that the comment before creal_internal_fn refers to $_cimag,
but should refer to $_creal.

gdb/ChangeLog
2019-11-28  Tom Tromey  <tom@tromey.com>

	* value.c (creal_internal_fn): Fix comment.

Change-Id: I5665aceb4be5aae7014e914cfb39db184c65d5ea
2019-11-28 08:07:38 -07:00
Tom Tromey
bab05c83ac Make two range_bounds bitfields unsigned
While debugging gdb, I noticed that the bitfields in a range_bounds
were signed, causing the values of these fields to be -1.

I think this is odd; and while we haven't yet committed to boolean
bitfields, I think it is a small improvement to change these types to
unsigned.

gdb/ChangeLog
2019-11-28  Tom Tromey  <tom@tromey.com>

	* gdbtypes.h (struct range_bounds) <flag_upper_bound_is_count,
	flag_bound_evaluated>: Now unsigned.

Change-Id: Ia377fd931594bbf8653180d4dcb4e60354d90139
2019-11-28 08:04:10 -07:00
Tom Tromey
2522f049df Remove unused declaratoin from guile
guile-internal.h declares a function that is never defined.  This
removes the declaration.

gdb/ChangeLog
2019-11-28  Tom Tromey  <tom@tromey.com>

	* guile/guile-internal.h (vlscm_scm_from_value_unsafe): Don't
	declare.

Change-Id: I2dca228534bc1325d2d4bb319c31328121edecc4
2019-11-28 08:00:47 -07:00
Mihails Strasuns
38b49e22b5 jit: minor improvement to debug logging
gdb/ChangeLog:
2019-11-28  Mihails Strasuns  <mihails.strasuns@intel.com>

	* jit.c (jit_bfd_try_read_symtab): Fix printed function name in the
	debug output.
	* jit.c (jit_unregister_code): Add debug print to match
	`jit_register_code`.

Change-Id: Ie66064f3aaa1c74facfc025c8d87f3a057869779
2019-11-28 09:59:23 +01:00
Andrew Burgess
dcdec67858 gdb/testsuite: Fix minor bug in skip_btrace*tests procs
The two guard functions skip_btrace_tests and skip_btrace_pt_tests
have a minor bug, if the check function fails to compile then surely
we should skip the btrace tests - currently we return 0 to indicate
don't skip.

gdb/testsuite/ChangeLog:

	* lib/gdb.exp (skip_btrace_tests): Return 1 if the test fails to
	compile.
	(skip_btrace_pt_tests): Likewise.

Change-Id: I6dfc04b4adcf5b9424fb542ece7ddbe751bee301
2019-11-28 00:28:58 +00:00
Christian Biesinger
351259211a Add missing ChangeLog entry for the previous commit
Change-Id: Ibc5788e1879ece9cac637d5c99f92ff4084c8ba1
2019-11-27 15:42:18 -06:00
Christian Biesinger
e49b22ff20 Add a NEWS entry for multithreaded symbol loading
Just to let people know that this is available and how to use it.

Also updates the description of the setting to say the default is 0.

gdb/ChangeLog:

2019-11-26  Christian Biesinger  <cbiesinger@google.com>

	* NEWS: Mention the new multithreaded symbol loading.

Change-Id: I263add6aae03b523f0870ad4d1e972eada4b382a
2019-11-27 15:40:28 -06:00
Christian Biesinger
62e77f56f0 Turn off threaded minsym demangling by default
Per discussion on gdb-patches with Joel, this patch turns off multihreaded
symbol loading by default. It can be turned on using:
  maint set worker-threads unlimited

To keep the behavior as close as possible to the old code, it still
calls symbol_set_names in the old place if n_worker_threads is 0.

gdb/ChangeLog:

2019-11-27  Christian Biesinger  <cbiesinger@google.com>

	* maint.c (n_worker_threads): Default to 0.
	(worker_threads_disabled): New function.
	* maint.h (worker_threads_disabled): New function.
	* minsyms.c (minimal_symbol_reader::record_full): Call symbol_set_names
	here if worker_threads_disabled () is true.
	(minimal_symbol_reader::install): Skip all threading if
	worker_threads_disabled () is true.

Change-Id: I92ba4f6bbf07363189666327cad452d6b9c8e01d
2019-11-27 15:38:23 -06:00
Christian Biesinger
f29d7f6b83 Compute msymbol hash codes in parallel
This is for the msymbol_hash and msymbol_demangled_hash hashtables
in objfile_per_bfd_storage. This basically computes those hash
codes together with the demangled symbol name in the background,
before it inserts the symbols in the hash table.

gdb/ChangeLog:

2019-11-27  Christian Biesinger  <cbiesinger@google.com>

	* minsyms.c (add_minsym_to_hash_table): Use a previously computed
	hash code if possible.
	(add_minsym_to_demangled_hash_table): Likewise.
	(minimal_symbol_reader::install): Compute the hash codes for msymbol
	on the background thread.
	* symtab.h (struct minimal_symbol) <hash_value, demangled_hash_value>:
	Add these fields.

Change-Id: Ifaa3346e9998f05743bff9e2eaad3f83b954d071
2019-11-27 15:38:22 -06:00
Christian Biesinger
e76b224615 Precompute hash value for symbol_set_names
We can also compute the hash for the mangled name on a background
thread so make this function even faster (about a 7% speedup).

gdb/ChangeLog:

2019-11-27  Christian Biesinger  <cbiesinger@google.com>

	* minsyms.c (minimal_symbol_reader::install): Also compute the hash
	of the mangled name on the background thread.
	* symtab.c (symbol_set_names): Allow passing in the hash of the
	linkage_name.
	* symtab.h (symbol_set_names): Likewise.

Change-Id: I044449e7eb60cffc1c43efd3412f2b485bd9faac
2019-11-27 15:36:59 -06:00
Andrew Burgess
640ab94712 gdb/testsuite: Fix race condition compiling fortran test
The Fortran test gdb.fortran/info-modules compiles the files
info-types.f90 and info-types-2.f90 in that order.  Unfortunately
info-types.f90 makes use of a module defined in info-types-2.f90.

This currently doesn't cause a problem if you run all of the Fortran
tests as the info-types.exp test already compiles info-types-2.f90 and
so the module description file 'mod2.mod' will be created, and can
then be found by info-modules.exp during its compile.

If however you try to run just info-modules.exp in a clean build
directory, the test will fail to compile.

Fix this by compiling the source files in the reverse order so that
the module is compiled first, then the test program that uses the
module.

gdb/testsuite/ChangeLog:

	* gdb.fortran/info-modules.exp: Compile source files in correct
	order.

Change-Id: Ic3a1eded0486f6264ebe3066cf1beafbd2534a91
2019-11-27 21:18:38 +00:00
Kevin Buettner
d22670f078 Test case for BZ 25065
Running a GDB with the fix for BZ 25065 should cause these new tests
to all pass.

When run against a GDB without the fix, there will be 2 unresolved
testcases.  This is what I see in the gdb.sum file when I try it using
a GDB without the fix:

ERROR: GDB process no longer exists
UNRESOLVED: gdb.dwarf2/imported-unit.exp: ptype main::Foo
ERROR: Couldn't send ptype main::foo to GDB.
UNRESOLVED: gdb.dwarf2/imported-unit.exp: ptype main::foo

These are "unresolved" versus outright failures due to the fact that
GDB dies (segfaults) during the running of the test.

gdb/testsuite/ChangeLog:

	* gdb.dwarf2/imported-unit.exp: New file.
	* gdb.dwarf2/imported-unit.c: New file.

Change-Id: I073fe69b81bd258951615f752df8e95b6e33a271
2019-11-27 13:05:09 -07:00
Kevin Buettner
8d9a256865 Fix BZ 25065 - Ensure that physnames are computed for inherited DIEs
This is a fix for BZ 25065.

GDB segfaults when running either gdb.cp/subtypes.exp or
gdb.cp/local.exp in conjunction with using the -flto compiler/linker
flag.

A much simpler program, which was used to help create the test for
this fix, is:

-- doit.cc --
int main()
{
  class Foo {
  public:
    int doit ()
    {
      return 0;
    }
  };

  Foo foo;

  return foo.doit ();
}
-- end doit.cc --

gcc -o doit -flto -g doit.cc
gdb -q doit
Reading symbols from doit...
(gdb) ptype main::Foo
type = class Foo {
Segmentation fault (core dumped)

The segfault occurs due to a NULL physname in
c_type_print_base_struct_union in c-typeprint.c.  Specifically,
calling is_constructor_name() eventually causes the SIGSEGV is this
code in c-typeprint.c:

	      const char *physname = TYPE_FN_FIELD_PHYSNAME (f, j);
	      int is_full_physname_constructor =
		TYPE_FN_FIELD_CONSTRUCTOR (f, j)
		|| is_constructor_name (physname)
		|| is_destructor_name (physname)
		|| method_name[0] == '~';

However, looking at compute_delayed_physnames(), we see that
the TYPE_FN_FIELD_PHYSNAME field should never be NULL.  This
field will be set to "" for NULL physnames:

      physname = dwarf2_physname (mi.name, mi.die, cu);
      TYPE_FN_FIELD_PHYSNAME (fn_flp->fn_fields, mi.index)
	= physname ? physname : "";

For this particular case, it turns out that compute_delayed_physnames
wasn't being called, which left TYPE_FN_FIELD_PHYSNAME set to the NULL
value that it started with when that data structure was allocated.

The place to fix it, I think, is towards the end of
inherit_abstract_dies().

My first attempt at fix caused the origin CU's method_list (which is
simply the list of methods whose physnames still need to be computed)
to be added to the CU which is doing the inheriting.  One drawback
with this approach is that compute_delayed_physnames is (eventually)
called with a CU that's different than the CU in which the methods
were found.  It's not clear whether this will cause problems or not.

A safer approach, which is what I ultimately settled on, is to call
compute_delayed_physnames() from inherit_abstract_dies().  One
potential drawback is that all needed types might not be known at that
point.  However, in my testing, I haven't seen a problem along these
lines.

gdb/ChangeLog:

	* dwarf2read.c (inherit_abstract_dies): Ensure that delayed
	physnames are computed for inherited DIEs.

Change-Id: I6c6ffe96b301a9daab9f653956b89e3a33fa9445
2019-11-27 13:03:19 -07:00
Tom Tromey
fad03f6e5b Remove some unnecessary backslashes
I found a couple of unnecessary backslashes in gdb.  This removes
them.

Offhand, I wonder whether this abstract_to_concrete thing could be
done some other way?  This seems possibly expensive.

Anyway, tested by rebuilding.  I'm going to check this in as obvious.

gdb/ChangeLog
2019-11-27  Tom Tromey  <tromey@adacore.com>

	* dwarf2read.h (struct dwarf2_per_objfile): Remove unnecessary
	backslashes.
	* cp-support.c: Remove unnecessary backslashes.

Change-Id: I956c91ae24407eeafec8a731545b45f5222e6a9d
2019-11-27 11:38:56 -07:00
Christian Biesinger
43678b0afe Replace SYMBOL_SET_LINKAGE_NAME with a member function
Easier to read, shorter, and will later make it possible to make the
name field private.

gdb/ChangeLog:

2019-11-27  Christian Biesinger  <cbiesinger@google.com>

	* ada-exp.y (write_ambiguous_var): Replace SYMBOL_SET_LINKAGE_NAME
	with sym->set_linkage_name.
	* coffread.c (coff_read_enum_type): Likewise.
	* mdebugread.c (parse_symbol): Likewise.
	* stabsread.c (patch_block_stabs): Likewise.
	(define_symbol): Likewise.
	(read_enum_type): Likewise.
	(common_block_end): Likewise.
	* symtab.h (struct general_symbol_info) <set_linkage_name>: New
	function.
	(SYMBOL_SET_LINKAGE_NAME): Remove.
	* xcoffread.c (process_xcoff_symbol): Replace SYMBOL_SET_LINKAGE_NAME
	with sym->set_linkage_name.

Change-Id: I174a0542c014f1b035070068076308bb8ae79abb
2019-11-27 11:09:18 -06:00
Andrew Burgess
db5960b4d2 gdb/mi: Add -symbol-info-modules command
Add '-symbol-info-modules', an MI version of the CLI 'info modules'
command.

gdb/ChangeLog:

	* mi/mi-cmds.c (mi_cmds): Add 'symbol-info-modules' entry.
	* mi/mi-cmds.h (mi_cmd_symbol_info_modules): Declare.
	* mi/mi-symbol-cmds.c (mi_cmd_symbol_info_modules): New function.
	* NEWS: Mention new MI command.

gdb/testsuite/ChangeLog:

	* gdb.mi/mi-fortran-modules-2.f90: New file.
	* gdb.mi/mi-fortran-modules.exp: New file.
	* gdb.mi/mi-fortran-modules.f90: New file.

gdb/doc/ChangeLog:

	* doc/gdb.texinfo (GDB/MI Symbol Query): Document new MI command
	-symbol-info-modules.

Change-Id: Ibc618010d1d5f36ae8a8baba4fb9d9d724e62b0f
2019-11-27 12:02:02 +00:00
Andrew Burgess
7dc4206609 gdb/mi: Add new commands -symbol-info-{functions,variables,types}
Add new MI commands -symbol-info-functions, -symbol-info-variables,
and -symbol-info-types which correspond to the CLI commands 'info
functions', 'info variables', and 'info types' respectively.

gdb/ChangeLog:

	* mi/mi-cmds.c (mi_cmds): Add '-symbol-info-functions',
	'-symbol-info-types', and '-symbol-info-variables'.
	* mi/mi-cmds.h (mi_cmd_symbol_info_functions): Declare.
	(mi_cmd_symbol_info_types): Declare.
	(mi_cmd_symbol_info_variables): Declare.
	* mi/mi-symbol-cmds.c: Add 'source.h' and 'mi-getopt.h' includes.
	(output_debug_symbol): New function.
	(output_nondebug_symbol): New function.
	(mi_symbol_info): New function.
	(mi_info_functions_or_variables): New function.
	(mi_cmd_symbol_info_functions): New function.
	(mi_cmd_symbol_info_types): New function.
	(mi_cmd_symbol_info_variables): New function.
	* NEWS: Mention new commands.

gdb/testsuite/ChangeLog:

	* gdb.mi/mi-sym-info-1.c: New file.
	* gdb.mi/mi-sym-info-2.c: New file.
	* gdb.mi/mi-sym-info.exp: New file.

gdb/doc/ChangeLog:

	* doc/gdb.texinfo (GDB/MI Symbol Query): Document new MI command
	-symbol-info-functions, -symbol-info-types, and
	-symbol-info-variables.

Change-Id: Ic2fc6a6750bbce91cdde2344791014e5ef45642d
2019-11-27 12:01:55 +00:00
Andrew Burgess
5f512a7dd0 gdb: Split print_symbol_info into two parts
Split the function print_symbol_info into two parts, the new worker
core returns a string, which print_symbol_info then prints.  This will
be useful in a later commit when some new MI commands will be added
which will use the worker core to fill some MI output fields.

There should be no user visible changes after this commit.

gdb/ChangeLog:

	* symtab.c (symbol_to_info_string): New function, most content
	moved from print_symbol_info, but updated to return a std::string.
	(print_symbol_info): Update to use symbol_to_info_string and print
	returned string.
	* symtab.h (symbol_to_info_string): Declare new function.

Change-Id: I6454ce43cacb61d32fbadb9e3655e70823085777
2019-11-27 12:01:48 +00:00
Andrew Burgess
470c0b1c9a gdb: Introduce global_symbol_searcher
Introduce a new class to wrap up the parameters needed for the
function search_symbols, which has now become a member function of
this new class.

The motivation is that search_symbols already takes a lot of
parameters, and a future commit is going to add even more.  This
commit hopefully makes collecting the state required for a search
easier.

As part of this conversion the list of filenames in which to search
has been converted to a std::vector.

There should be no user visible changes after this commit.

gdb/ChangeLog:

	* python/python.c (gdbpy_rbreak): Convert to using
	global_symbol_searcher.
	* symtab.c (file_matches): Convert return type to bool, change
	file list to std::vector, update header comment.
	(search_symbols): Rename to...
	(global_symbol_searcher::search): ...this and update now its
	a member function of global_symbol_searcher.  Take account of the
	changes to file_matches.
	(symtab_symbol_info): Convert to using global_symbol_searcher.
	(rbreak_command): Likewise.
	(search_module_symbols): Likewise.
	* symtab.h (enum symbol_search): Update comment.
	(search_symbols): Remove declaration.
	(class global_symbol_searcher): New class.

Change-Id: I488ab292a892d9e9e84775c632c5f198b6ad3710
2019-11-27 12:01:47 +00:00