Commit Graph

43944 Commits

Author SHA1 Message Date
Pedro Alves
74375d182e exceptions.c:print_flush: Remove obsolete check
Commit 20f0d60db4 ("Avoid crash when calling warning too early"),
added a "current_top_target () != NULL" check to
target_supports_terminal_ours, so this check in exceptions.c is now
obsolete.

gdb/ChangeLog:
2020-01-10  Pedro Alves  <palves@redhat.com>

	* exceptions.c (print_flush): Remove current_top_target() check.
2020-01-10 20:05:43 +00:00
Pedro Alves
acdf84a654 Make "show remote exec-file" inferior-aware
The "set remote exec-file" setting is per-inferior, but the "show
remote exec-file" command always shows the last set exec-file,
irrespective of the current inferior.  E.g.:

 # Set inferior 1's exec-file:
 (gdb) set remote exec-file prog1

 # Add inferior 2, switch to it, and set its exec-file:
 (gdb) add-inferior
 Added inferior 2
 (gdb) inferior 2
 (gdb) set remote exec-file prog2

 # Switch back to inferior 1, and show its exec-file:
 (gdb) inferior 1
 (gdb) show remote exec-file
 prog2
 ^^^^^ should show "prog1" instead here.

gdb/ChangeLog:
2020-01-10  Pedro Alves  <palves@redhat.com>

	* remote.c (show_remote_exec_file): Show the current inferior's
	exec-file instead of the command variable's value.

gdb/testsuite/ChangeLog:
2020-01-10  Pedro Alves  <palves@redhat.com>

	* gdb.base/remote-exec-file.exp: New file.
2020-01-10 20:05:42 +00:00
Pedro Alves
ec506636cc Don't rely on inferior_ptid in record_full_wait
The multi-target patch sets inferior_ptid to null_ptid before handling
a target event, and thus before calling target_wait, in order to catch
places in target_ops::wait implementations that are incorrectly
relying on inferior_ptid (which could otherwise be a ptid of a
different target, for example).  That caught this instance in
record-full.c.

Fix it by saving the last resumed ptid, and then using it in
record_full_wait_1, just like how the last "step" argument passed to
record_full_target::resume is handled too.

gdb/ChangeLog:
2020-01-10  Pedro Alves  <palves@redhat.com>

	* record-full.c (record_full_resume_ptid): New global.
	(record_full_target::resume): Set it.
	(record_full_wait_1): Use record_full_resume_ptid instead of
	inferior_ptid.
2020-01-10 20:05:41 +00:00
Pedro Alves
873657b9e8 Preserve selected thread in all-stop w/ background execution
In non-stop mode, if you resume the program in the background (with
"continue&", for example), then gdb makes sure to not switch the
current thread behind your back.  That means that you can be sure that
the commands you type apply to the thread you selected, even if some
other thread that was running in the background hits some event just
while you're typing.

In all-stop mode, however, if you resume the program in the
background, gdb let's the current thread switch behind your back.

This is bogus, of course.  All-stop and non-stop background
resumptions should behave the same.

This patch fixes that, and adds a testcase that exposes the bad
behavior in current master.

The fork-running-state.exp changes are necessary because that
preexisting testcase was expecting the old behavior:

Before:

  continue &
  Continuing.
  (gdb)
  [Attaching after process 8199 fork to child process 8203]
  [New inferior 2 (process 8203)]
  info threads
    Id   Target Id                      Frame
    1.1  process 8199 "fork-running-st" (running)
  * 2.1  process 8203 "fork-running-st" (running)
  (gdb)

After:

  continue &
  Continuing.
  (gdb)
  [Attaching after process 24660 fork to child process 24664]
  [New inferior 2 (process 24664)]
  info threads
    Id   Target Id                       Frame
  * 1.1  process 24660 "fork-running-st" (running)
    2.1  process 24664 "fork-running-st" (running)
  (gdb)

Here we see that before this patch GDB switches current inferior to
the new inferior behind the user's back, as a side effect of handling
the fork.

The delete_exited_threads call in inferior_appeared is there to fix an
issue that Baris found in a previous version of this patch.  The
fetch_inferior_event change increases the refcount of the current
thread, and in case the fetched inferior event denotes a thread exit,
the thread will not be deleted right away.  A non-deleted but exited
thread stays in the inferior's thread list.  This, in turn, causes the
"init_thread_list" call in inferior.c to be skipped.  A consequence is
that the global thread ID counter is not restarted if the current
thread exits, and then the inferior is restarted:

 (gdb) start
 Temporary breakpoint 1 at 0x4004d6: file main.c, line 21.
 Starting program: /tmp/main

 Temporary breakpoint 1, main () at main.c:21
 21        foo ();
 (gdb) info threads -gid
   Id   GId  Target Id            Frame
 * 1    1    process 16106 "main" main () at main.c:21
 (gdb) c
 Continuing.
 [Inferior 1 (process 16106) exited normally]
 (gdb) start
 Temporary breakpoint 2 at 0x4004d6: file main.c, line 21.
 Starting program: /tmp/main

 Temporary breakpoint 2, main () at main.c:21
 21        foo ();
 (gdb) info threads -gid
   Id   GId  Target Id            Frame
 * 1    2    process 16138 "main" main () at main.c:21
       ^^^

Notice that GId == 2 above.  It should have been "1" instead.

The new tids-git-reset.exp testcase exercises the problem above.

gdb/ChangeLog:
2020-01-10  Pedro Alves  <palves@redhat.com>

	* gdbthread.h (scoped_restore_current_thread)
	<dont_restore, restore, m_dont_restore>: Declare.
	* thread.c (thread_alive): Add assertion.  Return bool.
	(switch_to_thread_if_alive): New.
	(prune_threads): Switch inferior/thread.
	(print_thread_info_1): Switch thread before calling target methods.
	(scoped_restore_current_thread::restore): New, factored out from
	...
	(scoped_restore_current_thread::~scoped_restore_current_thread):
	... this.
	(scoped_restore_current_thread::scoped_restore_current_thread):
	Add assertion.
	(thread_apply_all_command, thread_select): Use
	switch_to_thread_if_alive.

gdb/testsuite/ChangeLog:
2020-01-10  Pedro Alves  <palves@redhat.com>

	* gdb.base/fork-running-state.exp (do_test): Adjust expected
	output.
	* gdb.threads/async.c: New.
	* gdb.threads/async.exp: New.
	* gdb.multi/tids-gid-reset.c: New.
	* gdb.multi/tids-gid-reset.exp: New.
2020-01-10 20:05:41 +00:00
George Barrett
7f0ae84c80 Fix handling of null stap semaphores
According to the SystemTap documentation on user-space probes[0], stap
probe points without semaphores are denoted by setting the semaphore
address in the probe's note to zero. At present the code does do a
comparison of the semaphore address against zero, but only after it's
been relocated; as such it will (almost?) always fail, commonly
resulting in GDB trying to overwrite the ELF magic located at the
image's base address.

This commit tests the address as specified in the SDT note rather than
the relocated value in order to correctly detect absent probe
semaphores.

[0]: https://sourceware.org/systemtap/wiki/UserSpaceProbeImplementation

gdb/Changelog:
2020-01-11  George Barrett  <bob@bob131.so>

	* stap-probe.c (stap_modify_semaphore): Don't check for null
	semaphores.
	(stap_probe::set_semaphore, stap_probe::clear_semaphore): Check
	for null semaphores.

gdb/testsuite/ChangeLog:
2020-01-11  George Barrett  <bob@bob131.so>

	* gdb.base/stap-probe.c (relocation_marker): Add dummy variable
	to help in finding the image relocation offset.
	* gdb.base/stap-probe.exp (stap_test): Accept arbitrary compile
	options in arguments.
	(stap_test_no_debuginfo): Likewise.
	(stap-probe-nosem-noopt-pie, stap-probe-nosem-noopt-nopie): Add
	test variants.
	(stap_test): Add null semaphore relocation test.
2020-01-10 14:58:37 -05:00
George Barrett
47e9d49d2d gdb/testsuite/gdb.base/stap-probe: Minor clean-up
This patch resolves a couple of issues with the test case for SystemTap
user-space probe points:
  1. The preprocessor macro guarding the semaphore variables in the C
     file is (rather confusingly) named USE_PROBES. This has been
     renamed to USE_SEMAPHORES, to better reflect its function.
  2. The test procedures in the expect file improperly pass the flag
     defining USE_PROBES to prepare_for_testing; as such, the test
     binary that's supposed to have probes with semaphores is the same
     as the one without. This has also been fixed.
  3. No test is performed to check that `info probes' returns
     information about probe semaphores. Such a test is included in this
     patch.

gdb/testsuite/ChangeLog
2020-01-10  George Barrett  <bob@bob131.so>

	* gdb.base/stap-probe.c: Rename USE_PROBES to USE_SEMAPHORES.
	* gdb.base/stap-probe.exp: Likewise.
	(stap_test): Pass argument as an additional flag.
	(stap_test_no_debuginfo): Likewise.
	(stap_test): Check `info probes stap' output for semaphore
	addresses if the test binary is supposed to have them.
2020-01-10 14:57:35 -05:00
Andrew Burgess
f5a7c406b1 gdb/tui: Link source and assembler scrolling .... again
Until recently when the source window was scrolled the assembler
window would scroll in sync - keeping the disassembly for the current
line in view.

This was broken in commit:

  commit b4b49dcbff
  Date:   Wed Nov 13 16:47:58 2019 -0700

      Don't call tui_show_source from tui_ui_out

This commit restores the synchronised scrolling and also maintains the
horizontal scroll within the source view when it is vertically
scrolled, something that was broken before.

This commit does not mean that scrolling the assembler view scrolls
the source view.  The connection this way never existed, though maybe
it should, but I'll leave adding this feature for a separate commit.

gdb/ChangeLog:

	* tui/tui-source.c (tui_source_window::do_scroll_vertical): Update
	all source windows, and maintain horizontal scroll status while
	doing so.

gdb/testsuite/ChangeLog:

	* gdb.tui/basic.exp: Add more scrolling tests.

Change-Id: I250114a3bc670040a6a759d41905776771b2f818
2020-01-09 23:11:47 +00:00
Tom Tromey
9ae6bf640d gdb: Fix scrolling in TUI
Hannes Domani pointed out that my previous patch to fix the "list"
command in the TUI instead broke vertical scrolling.  While looking at
this, I found that do_scroll_vertical calls print_source_lines, which
seems like a very roundabout way to change the source window.  This
patch removes this oddity and fixes the bug at the same time.

I've added a new test case.  This is somewhat tricky, because the
obvious approach of sending a dummy command after the scroll did not
work -- due to how the TUI works, sennding a command causes the scroll
to take effect.

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

	PR tui/18932:
	* tui/tui-source.c (tui_source_window::do_scroll_vertical): Call
	update_source_window, not print_source_lines.

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

	PR tui/18932:
	* lib/tuiterm.exp (Term::wait_for): Rename from _accept.  Return a
	meangingful value.
	(Term::command, Term::resize): Update.
	* gdb.tui/basic.exp: Add scrolling test.

Change-Id: I9636a7c8a8cade37431c6165ee996a9d556ef1c8
2020-01-09 23:11:46 +00:00
Andrew Burgess
b2efe70cf3 gdb/tui: Fix 'layout asm' before the inferior has started
Currently if a user starts the tui with 'layout asm' then they will be
presented with the 'src' layout.

What happens is:

  1. Layout command enables TUI, selecting the SRC layout by default.

  2. As part of tui_enable we call tui_display_main, which calls
     tui_get_begin_asm_address, which calls
     set_default_source_symtab_and_line.  This changes core GDBs
     current symtab and line, which triggers a call to the symtab
     changed hook tui_symtab_changed, which sets the flag
     from_source_symtab.

  3. Back in the layout command, the layout is changed from SRC to
     ASM.  After this the layout command completes and we return to
     core GDB which prints the prompt, however...

  4. The before prompt hook is called which sees the
     from_source_symtab flag is set and forces the SRC window to be
     displayed.  This switches us back to SRC view.

The solution I propose here is to delay installing the hooks into core
GDB until after we have finished setting up the tui and selecting the
default frame to view.  In this way we effectively ignore the first
symtab changed event triggered when making main the default symtab.

gdb/ChangeLog:

	* tui/tui.c (tui_enable): Register tui hooks after calling
	tui_display_main.

gdb/testsuite/ChangeLog:

	* gdb.tui/tui-layout-asm.exp: New file.

Change-Id: I858ab81a17ffb4aa72deb3f36c3755228a9c9d9a
2020-01-09 23:11:45 +00:00
Andrew Burgess
3804da7e07 gdb/testsuite/tui: Introduce check_box_contents
A new test procedure for matching the contents of one screen box
against a regexp.  This can be used to match the contents of one TUI
window against a regexp without any of the borders, or other windows
being included in the matched output (as is currently the case with
check_contents).

This will be used in a later commit.

gdb/testsuite/ChangeLog:

	* lib/tuiterm.exp (Term::check_box_contents): New proc.

Change-Id: Icf795bf38dd9295e282a34eecc318a9cdbc73926
2020-01-09 23:11:44 +00:00
Andrew Burgess
b40aa28fb5 gdb/testsuite/tui: Split enter_tui into two procs
Split Term::enter_tui into two procedures, a core which does the
setup, but doesn't actually enable tui mode, and the old enter_tui
that calls the new core, and then enables tui mode.

This is going to be useful in a later commit.

gdb/testsuite/ChangeLog:

	* lib/tuiterm.exp (Term::prepare_for_tui): New proc.
	(Term::enter_tui): Use Term::prepare_for_tui.

Change-Id: I501dfb2ddaa4a4e7246a5ad319ab428e4f42b3af
2020-01-09 23:11:43 +00:00
Andrew Burgess
63ffd7c913 gdb/testsuite/tui: Always dump_screen when asked
The Term::dump_screen routine currently dumps the screen using calls
to 'verbose', this means it will only dump the screen when the
testsuite is running in verbose mode.

However, the Term::dump_screen is most often called when a test fails,
in this case I think it is useful to have the screen dumped even when
we're not in verbose mode.

This commit changes the calls to 'verbose' to be 'verbose -log' so we
always get the screen dump.

gdb/testsuite/ChangeLog:

	* lib/tuiterm.exp (Term::dump_screen): Always dump the screen when
	called.

Change-Id: I5f0a7f5ac2ece04d6fe6e9c5a28ea2a0dda38955
2020-01-09 23:11:43 +00:00
Andrew Burgess
3be966f69d gdb/testsuite: Fix race condition in gdb.base/skip.exp
In this commit:

  commit 5024637fac
  Date:   Sun Dec 15 11:05:47 2019 +0100

      Fix skip.exp test failure observed with gcc-9.2.0

A race condition was introduced into the gdb.base/skip.exp test when
this line:

    gdb_test "step" "foo \\(\\) at.*" "step 3"

Was changed to this:

    gdb_test "step" "foo \\(\\) at.*" "step 3" "main \\(\\) at .*" "step"

Before the above change we expected GDB to behave like this:

  (gdb) step
  foo () at /path/to/gdb/testsuite/gdb.base/skip.c:42
  42        return 0;
  (gdb)

However, when the test is compiled with GCC 9.2.0 we get a different
behaviour, and so we need a second 'step', like this:

  (gdb) step
  main () at /path/to/gdb.base/skip.c:32
  32        x = baz ((bar (), foo ()));
  (gdb) step
  foo () at /path/to/gdb/testsuite/gdb.base/skip.c:42
  42        return 0;
  (gdb)

Now the change to the test matches against 'main () at .*', however if
GDB or expect is being slow then we might only get to see output like
this:

  (gdb) step
  main () at /path/to/g

This will happily match the question pattern, so we send 'step' to GDB
again.  Now GDB continues to produce output which expect accepts, we
now see this:

  b.base/skip.c:32
  32        x = baz ((bar (), foo ()));
  (gdb)

This has carried on from where the previous block of output left off.
This doesn't match the final pattern 'foo \\(\\) at.*', but it does
match the prompt pattern that gdb_test_multiple adds, and so we report
the test as failing.

The solution is to simply ensure that the question consumes everything
up to, and including the prompt.  This ensures that the prompt can't
then match the failure case.  The new test line becomes:

    gdb_test "step" "foo \\(\\) at.*" "step 3" \
       "main \\(\\) at .*\r\n$gdb_prompt " "step"

gdb/testsuite/ChangeLog:

	* gdb.base/skip.exp: Fix race condition in test.

Change-Id: I9f0b0b52ef1b4f980bfaa8fe405ff06d520f3482
2020-01-09 22:55:05 +00:00
Christian Biesinger
5f23a08201 Don't define _FORTIFY_SOURCE on MinGW
Recent MinGW versions require -lssp when using _FORTIFY_SOURCE, which
gdb does (in common-defs.h)
https://github.com/msys2/MINGW-packages/issues/5868#issuecomment-544107564

To avoid all the complications with checking for -lssp and making sure it's
linked statically, just don't define it.

gdb/ChangeLog:

2020-01-09  Christian Biesinger  <cbiesinger@google.com>

	* gdbsupport/common-defs.h: Don't define _FORTIFY_SOURCE on MinGW.

Change-Id: Ide6870ab57198219a2ef78bc675768a789ca2b1d
2020-01-09 16:31:00 -06:00
Simon Marchi
3061113bf3 Fix indentation in print_thread_info_1
The body of this this big "for" loop is missing an indentation level,
this patch fixes that.

gdb/ChangeLog:

	* thread.c (print_thread_info_1): Fix indentation.
2020-01-09 16:59:44 -05:00
Christian Biesinger
57d7500265 Fix memory leak of the demangled symbol name
compute_and_set_names would only free the name if we did not find the name
in the hashtable, but it needs to always free it.  Solve this by moving the
smart pointer outside the if.

Thanks to PhilippeW for finding this.

gdb/ChangeLog:

2020-01-09  Christian Biesinger  <cbiesinger@google.com>

	* symtab.c (general_symbol_info::compute_and_set_names): Move the
	unique_xmalloc_ptr outside the if to always free the demangled name.

Change-Id: Id7c6b8408432183700ccb5ff634818d6c5a3ac95
2020-01-09 13:13:04 -06:00
Tom Tromey
6a053cb1ff Change section_offsets to a std::vector
This changes section_offsets to be specialization of a std::vector and
updates all the users.  It also removes the ANOFFSET and
SIZEOF_N_SECTION_OFFSETS macros.

Most of this is just a generic sort of cleanup, that reduces the
number of lines of code.  However, a couple spots were doing weird
things.

objfile_relocate did:

-      std::vector<struct section_offsets>
-	new_debug_offsets (SIZEOF_N_SECTION_OFFSETS (debug_objfile->num_sections));

... which seems to greatly over-estimate the number of elements
needed.

This appeared in set_objfile_default_section_offset:

-  std::vector<struct section_offsets> offsets (objf->num_sections,
-					       { { offset } });

... which makes sense due to type safety, but is also actively
confusing given that section_offsets was previously also a kind of
vector type.

Tested on x86-64 Fedora 30.

gdb/ChangeLog
2020-01-08  Tom Tromey  <tromey@adacore.com>

	* xcoffread.c (enter_line_range, read_xcoff_symtab)
	(process_xcoff_symbol, xcoff_symfile_offsets): Update.
	* symtab.h (MSYMBOL_VALUE_ADDRESS): Update.
	(struct section_offsets, ANOFFSET, SIZEOF_N_SECTION_OFFSETS):
	Remove.
	(section_offsets): New typedef.
	* symtab.c (fixup_section, get_msymbol_address): Update.
	* symmisc.c (dump_msymbols): Update.
	* symfile.h (relative_addr_info_to_section_offsets)
	(symfile_map_offsets_to_segments): Update.
	* symfile.c (build_section_addr_info_from_objfile)
	(init_objfile_sect_indices): Update.
	(struct place_section_arg): Change type of "offsets".
	(place_section): Update.
	(relative_addr_info_to_section_offsets): Change type of
	"section_offsets".  Remove "num_sections" parameter.
	(default_symfile_offsets, syms_from_objfile_1)
	(set_objfile_default_section_offset): Update.
	(reread_symbols): No need to preserve section offsets by hand.
	(symfile_map_offsets_to_segments): Change type of "offsets".
	* stap-probe.c (relocate_address): Update.
	* stabsread.h (process_one_symbol): Update.
	* solib-target.c (struct lm_info_target) <offsets>: Change type.
	(solib_target_relocate_section_addresses): Update.
	* solib-svr4.c (enable_break, svr4_relocate_main_executable):
	Update.
	* solib-frv.c (frv_relocate_main_executable): Update.
	* solib-dsbt.c (dsbt_relocate_main_executable): Update.
	* solib-aix.c (solib_aix_get_section_offsets): Change return
	type.
	(solib_aix_solib_create_inferior_hook): Update.
	* remote.c (remote_target::get_offsets): Update.
	* psymtab.c (find_pc_sect_psymtab): Update.
	* psympriv.h (struct partial_symbol) <address, text_low,
	text_high>: Update.
	* objfiles.h (obj_section_offset): Update.
	(struct objfile) <section_offsets>: Change type.
	<num_sections>: Remove.
	(objfile_relocate): Update.
	* objfiles.c (entry_point_address_query): Update
	(relocate_one_symbol): Change type of "section_offsets".
	(objfile_relocate1, objfile_relocate1): Change type of
	"new_offsets".
	(objfile_rebase1): Update.
	* mipsread.c (mipscoff_symfile_read): Update.
	(read_alphacoff_dynamic_symtab): Remove "section_offsets"
	parameter.
	* mdebugread.c (parse_symbol): Change type of "section_offsets".
	(parse_external, psymtab_to_symtab_1): Update.
	* machoread.c (macho_symfile_offsets): Update.
	* ia64-tdep.c (ia64_find_unwind_table): Update.
	* hppa-tdep.c (read_unwind_info): Update.
	* hppa-bsd-tdep.c (hppabsd_find_global_pointer): Update.
	* dwarf2read.c (create_addrmap_from_index)
	(create_addrmap_from_aranges, dw2_find_pc_sect_compunit_symtab)
	(process_psymtab_comp_unit_reader, add_partial_symbol)
	(add_partial_subprogram, process_full_comp_unit)
	(read_file_scope, read_func_scope, read_lexical_block_scope)
	(read_call_site_scope, dwarf2_rnglists_process)
	(dwarf2_ranges_process, dwarf2_ranges_read)
	(dwarf_decode_lines_1, var_decode_location, new_symbol)
	(dwarf2_fetch_die_loc_sect_off, dwarf2_per_cu_text_offset):
	Update.
	* dwarf2-frame.c (execute_cfa_program, dwarf2_frame_find_fde):
	Update.
	* dtrace-probe.c (dtrace_probe::get_relocated_address): Update.
	* dbxread.c (read_dbx_symtab, read_ofile_symtab): Update.
	(process_one_symbol): Change type of "section_offsets".
	* ctfread.c (get_objfile_text_range): Update.
	* coffread.c (coff_symtab_read, enter_linenos)
	(process_coff_symbol): Update.
	* coff-pe-read.c (add_pe_forwarded_sym): Update.
	* amd64-windows-tdep.c (amd64_windows_find_unwind_info): Update.

Change-Id: I147eb967e9b44d82f4048039de7bb44b80cd72fb
2020-01-08 15:32:41 -07:00
Tom Tromey
456e800a63 Use std::string in dwarf2read.c
This replaces two instances of manual string management in
dwarf2read.c with std::string.

gdb/ChangeLog
2020-01-08  Tom Tromey  <tromey@adacore.com>

	* dwarf2read.c (parse_macro_definition): Use std::string.
	(parse_macro_definition): Likewise.

Change-Id: Iec437100105484aa4a116fb5d651d7ed52ee9d81
2020-01-08 11:17:18 -07:00
Tom Tromey
6dfa2fc207 Use std::vector in abbrev_table_read_table
This removes some manual memory management from
abbrev_table_read_table, replacing it with a std::vector.

gdb/ChangeLog
2020-01-08  Tom Tromey  <tromey@adacore.com>

	* dwarf2read.c (abbrev_table_read_table): Use std::vector.
	(ATTR_ALLOC_CHUNK): Remove.

Change-Id: I0b0e70ac2281d89a78f4d6a642700c9f0506871d
2020-01-08 11:17:18 -07:00
Tom Tromey
421d161623 Use unique_xmalloc_ptr in fixup_go_packaging
This changes fixup_go_packaging to use unique_xmalloc_ptr.  I kept
this patch separate as it is slightly more complicated than the
previous changes.

gdb/ChangeLog
2020-01-08  Tom Tromey  <tromey@adacore.com>

	* dwarf2read.c (fixup_go_packaging): Use unique_xmalloc_ptr.

Change-Id: I0c553d0c6579db478c27bc40fc21133a61e1a4d9
2020-01-08 11:17:18 -07:00
Tom Tromey
43816ebc33 Remove some explicit memory management from dwarf2read.c
I noticed a few spots in dwarf2read.c that could be improved by moving
to unique_xmalloc_ptr or, in one case, std::vector.

gdb/ChangeLog
2020-01-08  Tom Tromey  <tromey@adacore.com>

	* dwarf2read.c (add_partial_symbol): Use unique_xmalloc_ptr.
	(dwarf2_compute_name, open_dwo_file): Likewise.
	(process_enumeration_scope): Use std::vector.
	(guess_partial_die_structure_name): Use unique_xmalloc_ptr.
	(partial_die_info::fixup, dwarf2_start_subfile)
	(guess_full_die_structure_name, dwarf2_name): Likewise.
	(determine_prefix): Update.
	(guess_full_die_structure_name): Make return type const.
	(partial_die_full_name): Return unique_xmalloc_ptr.
	(DW_FIELD_ALLOC_CHUNK): Remove.

Change-Id: I1cb278c608041ef36ef1f77c7e7565c921038d08
2020-01-08 11:17:18 -07:00
Tom Tromey
4212d50914 Add constructor to stap_static_probe_ops
PR build/24937 concerns an error given by the clang provided by a
particular version of macOS.  In particular, it reports

    error: default initialization of an object of const type 'const
    stap_static_probe_ops' without a user-provided default constructor

Although (at least according to sources I found online) this was
resolved as a bug in the standard, it seemed simple enough to work
around this.

Given that this is a trivial build fix, I think it should go on the
gdb 9 branch as well.

gdb/ChangeLog
2020-01-07  Tom Tromey  <tromey@adacore.com>

	PR build/24937:
	* stap-probe.c (class stap_static_probe_ops): Add constructor.

Change-Id: I18f180c17850f420e9b66afc67f9cb3d8dceb0b3
2020-01-07 09:16:29 -07:00
Jon Turney
06a6207a1a
Enable styling by default on Cygwin
Cygwin meets the expectations of gdb for styling (if TERM is set and not
'DUMB', the terminal supports 'ANSI' (ECMA-48) escape sequences.

gdb/ChangeLog:

2020-01-02  Jon Turney  <jon.turney@dronecode.org.uk>

	* cli/cli-style.c: Set cli_styling to 'true' in the Cygwin build.
2020-01-07 13:45:01 +00:00
Andrew Burgess
153d79c451 gdb: Fix backtrace with disassemble-next-line on
In this commit:

  commit ec8e2b6d30
  Date:   Fri Jun 14 23:43:00 2019 +0100

      gdb: Don't allow annotations to influence what else GDB prints

A change was accidentally made that moved a call to do_gdb_disassembly
out of an if block guarded by 'if (source_print && sal.symtab)'.  The
result was that if a user has 'set disassemble-next-line on' then the
backtrace would now include some disassembly of a few instructions in
each frame.

This change was not intentional, but was not spotted by any tests.

This commit restores the old behaviour and adds a test to ensure this
doesn't break again in the future.

gdb/ChangeLog:

	* stack.c (print_frame_info): Move disassemble_next_line code
	inside source_print block.

gdb/testsuite/ChangeLog:

	* gdb.base/backtrace.c: New file.
	* gdb.base/backtrace.exp: New file.

Change-Id: I47c52a202fa74be138382646b695827940178689
2020-01-06 21:16:28 +00:00
Eli Zaretskii
66182876b4 Fix MinGW native compilation of gdb/gdbsupport/gdb_wait.c
gdb/ChangeLog
2020-01-06  Eli Zaretskii  <eliz@gnu.org>

	* gdbsupport/gdb_wait.c: Include <signal.h> instead of
	gdb/signals.h, as we are now using native signal symbols.
2020-01-06 21:54:21 +02:00
Shahab Vahedi
cbfa858117 GDB: Fix the overflow in addr/line_is_displayed()
In tui_disasm_window::addr_is_displayed(), there can be situations
where "content" is empty. For instance, it can happen when the
"content" was not filled in tui_disasm_window::set_contents(),
because tui_disassemble() threw an exception. Usually this exception
is the result of fetching invalid PC addresses like the ones beyond
the end of the program.

Having "content.size ()" zero leads to an overflow in this condition
check inside tui_disasm_window::addr_is_displayed():

  int i = 0;
  while (i < content.size () - threshold ...) {
    ... content[i] ...
  }

"threshold" is 2 and there are times that "content.size ()" is 0.
This results into an overflow and the loop is entered whereas it
should have been skipped. Finally, "content[i]" access leads to
a segmentation fault.

Same problem applies to tui_source_window::line_is_displayed().

The issue has been discussed at length in bug 25345:
  https://sourceware.org/bugzilla/show_bug.cgi?id=25345

This commit avoids the segmentation faults with an early check:

  if (content.size () < SCROLL_THRESHOLD)
    return false;

Moreover, those functions have been overhauled to a leaner code.

gdb/ChangeLog:
2020-01-06  Shahab Vahedi  <shahab@synopsys.com>

	* tui/tui-disasm.c (tui_disasm_window::addr_is_displayed): Avoid
	overflow by an early check of content vs threshold.
        * tui/tui-source.c (tui_source_window::line_is_displayed):
	Likewise.
2020-01-06 19:47:20 +00:00
Eli Zaretskii
3f6028216b Mention the recent fix of $_exitsignal on MS-Windows in gdb/NEWS
gdb/ChangeLog
2020-01-06  Eli Zaretskii  <eliz@gnu.org>

	* NEWS: Mention the recent fix of $_exitsignal on MS-Windows.
2020-01-06 21:25:23 +02:00
Jon Turney
a08c904d4e
Fix a crash with a malformed PE header
Don't try to read the PE export table when no section contains the RVA
for it.

(I have a PE executable [1] packed with UPX, where the export table data
directory entry contains a RVA which doesn't correspond to any section.
Mistakenly trying to debug this with gdb makes it crash.)

[1] https://cygwin.com/setup/setup-2.898.x86_64.exe

gdb/ChangeLog:

2020-01-02  Jon Turney  <jon.turney@dronecode.org.uk>

	* coff-pe-read.c (read_pe_exported_syms): Don't try to read the
	export table if no section contains it's RVA.
2020-01-06 18:30:44 +00:00
Eli Zaretskii
89a65580f4 Fix a typo in gdb/windows-tdep.c
gdb/ChangeLog
2020-01-06  Eli Zaretskii  <eliz@gnu.org>

	    * windows-tdep.c: Fix a typo in WINDOWS_SIGABRT.
2020-01-06 20:22:15 +02:00
Hannes Domani
8b7fcda274 Fix search in TUI
The variable last_line_listed is never set when print_source_lines_base is
called in TUI mode, so the search always started from the last line printed
outside of TUI mode.

gdb/ChangeLog:

2020-01-06  Hannes Domani  <ssbssa@yahoo.de>

	* source.c (print_source_lines_base): Set last_line_listed.
2020-01-06 17:14:13 +01:00
Shahab Vahedi
a61b4f6997 GDB: Remove trailing spaces in tui-disasm.c
A few trailing spaces are removed.

gdb/ChangeLog:
2020-01-06  Shahab Vahedi  <shahab@synopsys.com>

	* tui/tui-disasm.c: Remove trailing spaces.
2020-01-06 13:43:46 +00:00
Eli Zaretskii
559e7e5056 Improve process exit status macros on MinGW
When a Windows program is terminated by a fatal exception, its exit
code is the value of that exception, as defined by the various
EXCEPTION_* symbols in the Windows API headers.  This commit emulates
WTERMSIG etc. by translating the fatal exception codes to more-or-less
equivalent Posix signals.

gdb/ChangeLog:
2020-01-06  Eli Zaretskii  <eliz@gnu.org>
	    Pedro Alves  <palves@redhat.com>

	* Makefile.in (COMMON_SFILES): Add gdbsupport/gdb_wait.c.
	* windows-tdep.c: New enumeration of WINDOWS_SIG* signals.
	(windows_gdb_signal_to_target): New function, uses the above
	enumeration to convert GDB internal signal codes to equivalent
	Windows codes.
	(windows_init_abi): Call set_gdbarch_gdb_signal_to_target.
	* windows-nat.c: Include "gdb_wait.h".
	(get_windows_debug_event): Extract the fatal exception from the
	exit status and convert to the equivalent Posix signal number.
	* cli/cli-cmds.c (exit_status_set_internal_vars): Account for the
	possibility that WTERMSIG returns GDB_SIGNAL_UNKNOWN.
	* gdbsupport/gdb_wait.c: New file, implements
	windows_status_to_termsig.
	* gdbsupport/gdb_wait.h (WIFEXITED, WIFSIGNALED, WEXITSTATUS)
	(WTERMSIG) [__MINGW32__]: Separate definitions for MinGW.

gdb/gdbserver/ChangeLog:
2020-01-06  Eli Zaretskii  <eliz@gnu.org>
	    Pedro Alves  <palves@redhat.com>

	* win32-low.c (get_child_debug_event): Extract the fatal exception
	from the exit status and convert to the equivalent Posix signal
	number.
	(win32_wait): Allow TARGET_WAITKIND_SIGNALLED status as well.
	* Makefile.in (OBS, SFILES): Add gdb_wait.[co].
2020-01-06 11:51:54 +00:00
Andrew Burgess
f2302a34f2 gdb: use tui_set_layout not show_layout to fix window focus
When calling tui_add_win_to_layout, use tui_set_layout not show_layout
so that window focus is correctly updated.  If the focus is not
correctly maintained then GDB can be crashed like this:

  start
  tui enable
  layout asm
  list SOME_FUNCTION

At this point GDB will have "popped up" the source window to
display SOME_FUNCTION.  Previously no window would have focus at this
point, and so if the user now does 'focus next' or 'focus prev', then
GDB would crash.

Calling tui_set_layout ensures that focus is correctly calculated as
the source window is "popped up", and this fixes the issue.

gdb/ChangeLog:

	* tui/tui-layout.c (tui_add_win_to_layout): Use tui_set_layout not
	show_layout.

gdb/testsuite/ChangeLog:

	* gdb.tui/list.exp: Test 'focus next' after 'list main'.

Change-Id: Id0b13f99b0e889261efedfd0adabe82020202f44
2020-01-05 21:49:05 +00:00
Luis Machado
6a5206eb27 [AArch64] Fix erroneous use of spu architecture bfd
While investigating some SVE code, i noticed the use of two spu bfd variables.

This looks like an oversight, as the "id" field is available for non-spu
architectures as well, even though its primary use was the Cell BE
architecture.

gdb/ChangeLog:

2020-01-05  Luis Machado  <luis.machado@linaro.org>

	* aarch64-linux-nat.c
	(aarch64_linux_nat_target::thread_architecture): Use bfd_arch_aarch64
	and bfd_mach_aarch64.
2020-01-05 08:57:34 -03:00
Philippe Waroquiers
6ec1d75e05 Ensure GDB warnings are styled.
While handling the comments of Tom related to
  [RFC] Have an option to tell GDB to detect and possibly handle mismatched exec-files.
  https://sourceware.org/ml/gdb-patches/2019-12/msg00621.html
I saw that GDB warnings are produced ignoring the given styles.

This patch:
  * ensures that style markups are properly handled by "warning".
  * changes 'set/show data-directory' so that file style is used
    in warnings and in 'show message'
  * changes all other messages in top.c to use file style when appropriate.
  * Uses the above data-directory changes in gdb.base/style.exp

2020-01-03  Philippe Waroquiers  <philippe.waroquiers@skynet.be>

	* ui-file.c (stdio_file::can_emit_style_escape)
	(tee_file::can_emit_style_escape): Ensure style is used also on
	gdb_stderr when gdb_stderr is a tty supporting styling, similarly
	to gdb_stdout.
	* main.c (set_gdb_data_directory): Use file style to output the
	warning that the given pathname is not a directory.
	* top.c (show_history_filename, gdb_safe_append_history)
	(show_gdb_datadir): Use file style.

2020-01-03  Philippe Waroquiers  <philippe.waroquiers@skynet.be>

	* gdb.base/style.exp: Test that warnings are styled.
2020-01-03 21:13:21 +01:00
Hannes Domani
44f81a7654 solib_target_free_so memory leak
gdb/ChangeLog:

2020-01-03  Hannes Domani  <ssbssa@yahoo.de>

	* solib-target.c (struct lm_info_target):
	Change offsets to be a unique_xmalloc_ptr.
	(solib_target_relocate_section_addresses): Update.
2020-01-03 17:58:19 +01:00
Hannes Domani
25057eb004 windows_clear_solib memory leak
gdb/ChangeLog:

2020-01-03  Hannes Domani  <ssbssa@yahoo.de>

	* windows-nat.c (windows_clear_solib): Free so_list linked list.
2020-01-03 17:57:03 +01:00
Bernd Edlinger
6e2118f588 Add myself to gdb/MAINTAINERS
2020-01-03  Bernd Edlinger  <bernd.edlinger@hotmail.de>

	* MAINTAINERS (Write After Approval): Add myself.
2020-01-03 09:30:53 +01:00
Luis Machado
8133c7dce6 Remove stale references to Cell BE
While reading some code i noticed we're still referencing Cell BE in a couple
parts. This patch removes those.

v2: Update comment in gdb/target.h.

gdb/ChangeLog:

2020-01-02  Luis Machado  <luis.machado@linaro.org>

	* proc-service.c (get_ps_regcache): Remove reference to obsolete
	Cell BE architecture.
	* target.h (struct target_ops) <thread_architecture>: Likewise.

Change-Id: I7a9ccc603b00db22a6275bc5ab69e1417148cb72
2020-01-02 23:15:42 -03:00
Hannes Domani
48189beca8 Fix install-strip for cross-compilation
The variable INSTALL_PROGRAM_ENV sets up STRIPPROG for the cross-compiler.

If this is not done, the host 'strip' is used, and fails:

/bin/sh /c/src/repos/binutils-gdb.git/install-sh -c -s gdb.exe \
  /gdb/gdb64-git/bin/$transformed_name.exe
strip.exe:C:/gdb/gdb64-git/bin/_inst.33599_: file format not recognized

With this change, it's fine:

STRIPPROG='x86_64-w64-mingw32-strip' \
  /bin/sh /c/src/repos/binutils-gdb.git/install-sh -c -s gdb.exe \
  /gdb/gdb64-git/bin/$transformed_name.exe

gdb/ChangeLog:

2020-01-01  Hannes Domani  <ssbssa@yahoo.de>

	* Makefile.in: Use INSTALL_PROGRAM_ENV.

gdb/gdbserver/ChangeLog:

2020-01-01  Hannes Domani  <ssbssa@yahoo.de>

	* Makefile.in: Use INSTALL_PROGRAM_ENV.
2020-01-01 21:51:33 +01:00
Hannes Domani
ead1063b4b Add myself to gdb/MAINTAINERS
gdb/ChangeLog:

2020-01-01  Hannes Domani  <ssbssa@yahoo.de>

	* MAINTAINERS (Write After Approval): Add myself.
2020-01-01 21:31:40 +01:00
Joel Brobecker
e5d78223ea Update copyright year in gdbarch.sh doc/gdb.texinfo and doc/refcard.tex
These are files that need to be updated by hand, because the copyright.py
script isn't able to handle them automatically.

gdb/ChangeLog:

	* gdbarch.sh: Update copyright year range of generated files.

gdb/doc/ChangeLog:

        * gdb.texinfo, refcard.tex: Update copyright year range.
2020-01-01 10:37:10 +04:00
Joel Brobecker
b811d2c292 Update copyright year range in all GDB files.
gdb/ChangeLog:

        Update copyright year range in all GDB files.
2020-01-01 10:20:53 +04:00
Joel Brobecker
5f4def5cbd gdb/copyright.py: Convert to Python 3
gdb/ChangeLog:

        * copyright.py: Convert to Python 3.
2020-01-01 10:12:57 +04:00
Joel Brobecker
51fd40020e gdb/copyright.py: Adapt after move of gnulib from gdb to toplevel
gdb/ChangeLog:

	* copyright.py: Adapt after move of gnulib directory from gdb
	directory to toplevel directory.
2020-01-01 09:19:14 +04:00
Joel Brobecker
5fb651f2dd gdb/copyright.py: Exit if run from the wrong directory
We printed an error, but kept going anyway... ;-)

gdb/ChangeLog:

	* copyright.py (main): Exit if run from the wrong directory.
2020-01-01 09:11:56 +04:00
Joel Brobecker
5dd8bf886a update copyright year in version output of gdb, gdbserver and gdbreplay
gdb/ChangeLog:

        * top.c (print_gdb_version): Change copyright year to 2020.

gdb/gdbserver/ChangeLog:

        * server.c (gdbserver_version): Change copyright year to 2020.
        * gdbreplay.c (gdbreplay_version): Likewise.
2020-01-01 08:46:58 +04:00
Joel Brobecker
9f71dacbc3 Rotate gdb/ChangeLog (start of New Year procedure)
gdb/ChangeLog:

	* config/djgpp/fnchange.lst: Add entry for gdb/ChangeLog-2019
2020-01-01 08:40:23 +04:00
Tom Tromey
3d34df0aa7 Make some TUI globals "static"
This changes a few TUI globals to be "static".  Tested by rebuilding.

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

	* tui/tui-win.c (tui_border_mode_translate)
	(tui_border_kind_translate_vline, tui_border_kind_translate_hline)
	(tui_border_kind_translate_ulcorner)
	(tui_border_kind_translate_urcorner)
	(tui_border_kind_translate_llcorner)
	(tui_border_kind_translate_lrcorner, tui_active_border_mode)
	(tui_border_mode, tui_border_kind): Now static.

Change-Id: Ibb49a0df195dfe780a5ba1f90e9125ab5f6b7ce1
2019-12-30 09:11:32 -07:00
Tom Tromey
87d557ae1b Use "bool" in more spots in TUI
This changes a few spots in the TUI to use "bool" rather than "int".
Tested on x86-64 Fedora 28.

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

	* tui/tui-interp.c (tui_start_enabled): Now bool.
	(_initialize_tui_interp): Update.
	* tui/tui-hooks.c (tui_refreshing_registers): Now bool.
	(tui_register_changed)
	(tui_refresh_frame_and_register_information): Update.
	* tui/tui-win.c (tui_update_variables): Return bool.
	* tui/tui-win.h (tui_update_variables): Return bool.
	* tui/tui.c (tui_get_command_dimension): Return bool.
	* tui/tui.h (tui_get_command_dimension): Return bool.

Change-Id: I55b7f2d62d2ef88da3587dc914ada9f463ad8d2b
2019-12-30 09:07:33 -07:00