Simon Marchi [Thu, 13 Feb 2020 21:27:02 +0000 (16:27 -0500)]
gdbsupport: rename source files to .cc
This patch renames the .c source files in gdbsupport to .cc.
In the gdb directory, there is an argument against renaming the source
files, which is that it makes using some git commands more difficult to
do archeology. Some commands have some kind of "follow" option that
makes git try to follow renames, but it doesn't work in all situations.
Given that we have just moved the gdbsupport directory, that argument
doesn't hold for source files in that directory. I therefore suggest
renaming them to .cc, so that they are automatically recognized as C++
by various tools and editors.
The original motivation behind this is that when building gdbsupport
with clang, I get:
CC agent.o
clang: error: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated [-Werror,-Wdeprecated]
In the gdb/ directory, we make clang happy by passing "-x c++". We
could do this in gdbsupport too, but I think that renaming the files is
a better long-term solution.
gdbserver still does its own build of gdbsupport, so a few changes in
its Makefile are necessary.
gdbsupport/ChangeLog:
* Makefile.am: Rename source files from .c to .cc.
(CC, CFLAGS): Don't override.
(AM_CFLAGS): Rename to ...
(AM_CXXFLAGS): ... this.
* Makefile.in: Re-generate.
* %.c: Rename to %.cc.
gdbserver/ChangeLog:
* Makefile.in: Rename gdbsupport source files from .c to .cc.
Tom de Vries [Thu, 13 Feb 2020 14:42:07 +0000 (15:42 +0100)]
[gdb/testsuite] Remove stale exec in gdb_compile_ada
When running test-case gdb.ada/ptype_tagged_param.exp, I get:
...
PASS: gdb.ada/ptype_tagged_param.exp: compilation foo.adb
...
However, when I then de-install gnatmake and run again, I get the same result.
This is due to a stale exec. After removing the stale exec, I get:
...
UNSUPPORTED: gdb.ada/ptype_tagged_param.exp: compilation foo.adb
...
Fix this removing the stale exec in gdb_compile_ada before compilation.
Tested on x86_64-linux.
gdb/testsuite/ChangeLog:
2020-02-13 Tom de Vries <tdevries@suse.de>
* lib/ada.exp (gdb_compile_ada): Delete stale exec before compilation.
Tom de Vries [Thu, 13 Feb 2020 14:34:06 +0000 (15:34 +0100)]
[gdb/testsuite] Add unsupported tests in catch_ex_std.exp
If I de-install gnatbind, I run into:
...
FAIL: gdb.ada/catch_ex_std.exp: gnatbind foo
...
Fix this by marking the test unsupported instead:
...
UNSUPPORTED: gdb.ada/catch_ex_std.exp: gnatbind foo
...
Likewise for gnatlink.
Tested on x86_64-linux, with and without gnatbind/gnatlink installed.
gdb/testsuite/ChangeLog:
2020-02-13 Tom de Vries <tdevries@suse.de>
* gdb.ada/catch_ex_std.exp: Indicate unsupported if gnatbind/gnatlink
are missing.
H.J. Lu [Thu, 13 Feb 2020 11:17:51 +0000 (03:17 -0800)]
plugin: Search bfd-plugins directories only once
try_load_plugin is updated to take either plugin name or plugin entry.
load_plugin is updated to search bfd-plugins directories first to build
a list of plugins and call try_load_plugin with each plugin on the list.
When --plugin is used, the plugin list only has one entry.
* plugin.c (try_load_plugin): Make plugin_list_iter an argument
and use it if it isn't NULL. Remove has_plugin_p argument. Add
a build_list_p argument. Don't search plugin_list. Short circuit
when building the plugin list.
(has_plugin): Renamed to has_plugin_list.
(bfd_plugin_set_plugin): Don't set has_plugin.
(bfd_plugin_specified_p): Check plugin_list instead.
(build_plugin_list): New function.
(load_plugin): Call build_plugin_list and use plugin_list.
Alok Kumar Sharma [Thu, 13 Feb 2020 10:26:11 +0000 (15:56 +0530)]
Adding myself to gdb/MAINTAINERS
2020-02-13 Alok Kumar Sharma <AlokKumar.Sharma@amd.com>
* MAINTAINERS (Write After Approval): Adding myself.
Change-Id: I2e6095a63247902f5fe23d58c2df8f995e41cf58
Jan Beulich [Thu, 13 Feb 2020 09:19:28 +0000 (10:19 +0100)]
x86: fix SSE4a dependencies of ".arch .nosse*"
Since ".arch .sse4a" enables SSE3 and earlier, disabling SSE3 should
also disable SSE4a. And as per its name, ".arch .nosse4" should also do
so.
Tom de Vries [Thu, 13 Feb 2020 07:37:34 +0000 (08:37 +0100)]
[gdb/testsuite] Fix gnatmake_version_at_least
After de-installing gnatmake, I get:
...
Running src/gdb/testsuite/gdb.ada/rename_subscript_param.exp ...
ERROR: tcl error sourcing src/gdb/testsuite/gdb.ada/rename_subscript_param.exp.
ERROR: couldn't execute "gnatmake": no such file or directory
while executing
"exec $gnatmake --version"
(procedure "gnatmake_version_at_least" line 4)
...
Fix this by wrapping the exec call in a catch call.
Tested with and withouth gnatmake installed on x86_64-linux.
gdb/testsuite/ChangeLog:
2020-02-13 Tom de Vries <tdevries@suse.de>
* lib/ada.exp (gnatmake_version_at_least): Wrap exec call in a catch
call.
Tom Tromey [Thu, 13 Feb 2020 00:05:42 +0000 (17:05 -0700)]
Remove some dead code from event-loop.c
This removes some dead code from event-loop.c.
This patch is from my old series to merge the gdb and gdbserver event
loops; but since it is just removing dead code, it seemed simple to
commit it separately.
gdb/ChangeLog
2020-02-12 Tom Tromey <tom@tromey.com>
* event-loop.c (event_data, gdb_event, event_handler_func):
Remove.
GDB Administrator [Thu, 13 Feb 2020 00:00:41 +0000 (00:00 +0000)]
Automatic date update in version.in
Tom Tromey [Wed, 12 Feb 2020 22:45:08 +0000 (15:45 -0700)]
Move the frame data to the BFD when possible
Now that comp_unit and the remaining frame data are all independent of
the objfile, it can all be stored on the BFD and shared across
inferiors.
As with other code doing this same thing, care must be taken to not
share the data when the objfile requires relocations. So, two keys
are used: one for the BFD and one for the objfile, and
gdb_bfd_requires_relocations is used to differentiate between the two
cases.
gdb/ChangeLog
2020-02-12 Tom Tromey <tom@tromey.com>
* dwarf2/frame.c (dwarf2_frame_bfd_data): New global.
(dwarf2_frame_objfile_data): Add comment.
(find_comp_unit, set_comp_unit): New functions.
(dwarf2_frame_find_fde): Use find_comp_unit.
(dwarf2_build_frame_info): Use set_comp_unit.
Tom Tromey [Wed, 12 Feb 2020 22:45:08 +0000 (15:45 -0700)]
Remove the objfile backlink from comp_unit
This removes the objfile backlink from comp_unit. The only remaining
uses involved fetching the text offset from the objfile. However,
this is already conveniently computed at all the sites that call
execute_cfa_program, and so it can simply be passed in.
gdb/ChangeLog
2020-02-12 Tom Tromey <tom@tromey.com>
* dwarf2/frame.c (struct comp_unit) <objfile>: Remove.
(comp_unit): Don't initialize objfile.
(execute_cfa_program): Add text_offset parameter.
(execute_cfa_program_test, dwarf2_fetch_cfa_info)
(dwarf2_frame_cache): Update.
(dwarf2_build_frame_info): Don't set "objfile" member.
Tom Tromey [Wed, 12 Feb 2020 22:45:08 +0000 (15:45 -0700)]
Remove a use of the comp_unit backlink
The DWARF frame comp_unit object still has a backlink to the objfile.
In order to be truly objfile-independent, this must be removed.
This patch removes one such use, by passing the gdbarch to
decode_frame_entry directly.
gdb/ChangeLog
2020-02-12 Tom Tromey <tom@tromey.com>
* dwarf2/frame.c (decode_frame_entry_1): Add gdbarch parameter.
(decode_frame_entry): Likewise.
(dwarf2_build_frame_info): Update.
Tom Tromey [Wed, 12 Feb 2020 22:45:08 +0000 (15:45 -0700)]
Add per-unit obstack
This adds an auto_obstack to the DWARF frame comp_unit object, and
then changes the remaining code here to use the comp_unit obstack
rather than the objfile obstack.
At this point, all the storage for frame data is self-contained --
that is, it is independent of the objfile.
gdb/ChangeLog
2020-02-12 Tom Tromey <tom@tromey.com>
* dwarf2/frame.c (struct comp_unit) <obstack>: New member.
(decode_frame_entry_1): Use the comp_unit obstack.
Tom Tromey [Wed, 12 Feb 2020 22:45:08 +0000 (15:45 -0700)]
Store the comp_unit instead of the FDE table
This changes the DWARF frame code to store the comp_unit on the
objfile, rather than storing the FDE table. It also changes the
comp_unit to be heap-allocated using "new".
This change makes it simpler for a later patch to add a field to the
comp_unit, and to have deallaction work properly. This in turn is
important for making the frame data be independent of the objfile.
gdb/ChangeLog
2020-02-12 Tom Tromey <tom@tromey.com>
* dwarf2/frame.c (struct comp_unit): Add initializers and
constructor.
(dwarf2_frame_objfile_data): Store a comp_unit.
(dwarf2_frame_find_fde): Update.
(dwarf2_build_frame_info): Use "new".
Tom Tromey [Wed, 12 Feb 2020 22:45:08 +0000 (15:45 -0700)]
Change fde table to a vector
This removes struct dwarf2_fde_table, replacing it with a typedef of
std::vector. This simplifies the code somewhat.
gdb/ChangeLog
2020-02-12 Tom Tromey <tom@tromey.com>
* dwarf2/frame.c (struct dwarf2_fde_table): Remove.
(dwarf2_fde_table): Typedef for std::vector.
(dwarf2_frame_objfile_data): Remove the deleter. Now static.
(dwarf2_frame_find_fde, add_fde, decode_frame_entry_1)
(decode_frame_entry): Update.
(dwarf2_build_frame_info): Use "new".
Christian Biesinger [Wed, 12 Feb 2020 22:49:08 +0000 (16:49 -0600)]
Change booleans to bool in ARM's gdbarch_tdep
gdb/ChangeLog:
2020-02-12 Christian Biesinger <cbiesinger@google.com>
* arm-tdep.c (arm_gdbarch_init): Update.
* arm-tdep.h (struct gdbarch_tdep) <have_fpa_registers,
have_wmmx_registers, have_vfp_pseudos, have_neon_pseudos,
have_neon, is_m>: Change to bool.
Christian Biesinger [Wed, 12 Feb 2020 22:28:48 +0000 (16:28 -0600)]
Print more information in arm_dump_tdep
I am keeping the (int) casts because a future patch will change the type
to bool.
gdb/ChangeLog:
2020-02-12 Christian Biesinger <cbiesinger@google.com>
* arm-tdep.c (arm_dump_tdep): Print more fields of tdep.
Tom Tromey [Wed, 12 Feb 2020 21:41:33 +0000 (14:41 -0700)]
Remove dwarf_expr_baton
The type dwarf_expr_baton is unused and can be removed.
gdb/ChangeLog
2020-02-12 Tom Tromey <tom@tromey.com>
* dwarf2/loc.c (struct dwarf_expr_baton): Remove.
Change-Id: Id8342da31398b9b4b08f31be7c3d612e9590bbbf
Hannes Domani [Sat, 8 Feb 2020 18:08:40 +0000 (19:08 +0100)]
Fix kill of processes created by win32_create_inferior
handle_v_kill uses signal_pid because win32 doesn't support multi-process.
Without this gdb just refuses to kill the process:
(gdb) kill
Kill the program being debugged? (y or n) y
Sending packet: $vKill;a410#33...Packet received: E01
Packet vKill (kill) is supported
Can't kill process
gdbserver/ChangeLog:
2020-02-12 Hannes Domani <ssbssa@yahoo.de>
* win32-low.c (win32_create_inferior): Set signal_pid.
Hannes Domani [Sun, 9 Feb 2020 16:37:58 +0000 (17:37 +0100)]
Cache the Thread Local Base pointer type in the gdbarch
gdb/ChangeLog:
2020-02-12 Hannes Domani <ssbssa@yahoo.de>
* windows-tdep.c (struct windows_gdbarch_data): Add tib_ptr_type.
(windows_get_tlb_type): Use windows_gdbarch_data->tib_ptr_type.
Jan Beulich [Wed, 12 Feb 2020 15:20:56 +0000 (16:20 +0100)]
x86: correct VFPCLASSP{S,D} operand size handling
With AVX512VL disabled (e.g. when writing code for the Knights family
of processors) these insns aren't ambiguous when used with a memory
source, and hence should be accepted without suffix or operand size
specifier. When AVX512VL is enabled, to be consistent with this as
well as other ambiguous operand size handling it would seem better to
just warn about the ambiguity in AT&T mode, and still default to 512-bit
operands (on the assumption that the code may have been written without
AVX512VL in mind yet), but it was requested to leave AT&T syntax mode
alone here.
Jan Beulich [Wed, 12 Feb 2020 15:19:52 +0000 (16:19 +0100)]
x86: fold two JMP templates
Now that the AMD64 check in match_template() applies to 64-bit code
only, the non-64-bit and the Amd64 template can be folded, as being
otherwise compatible with one another. (Oddly enough the same doesn't
apply to CALL, due to the suffixes it permits, while JMP doesn't
allow for any.)
Jan Beulich [Wed, 12 Feb 2020 15:19:03 +0000 (16:19 +0100)]
x86-64: Intel64 adjustments for insns dealing with far pointers
AMD and Intel differ in their handling of far indirect branches as well
as LFS/LGS/LSS: AMD CPUs ignore REX.W while Intel ones honors it. (Note
how the latter three were hybrids so far, while far branches were fully
AMD-like.)
Maciej W. Rozycki [Wed, 12 Feb 2020 13:50:30 +0000 (13:50 +0000)]
Disable gdbserver on host != target configurations
Correct fallout from commit
919adfe84092 ("Move gdbserver to top level")
and revert to not building `gdbserver' in a cross-configuration, that is
where host != target, matching the documented behaviour. We have no way
to support non-native `gdbserver', and native `gdbserver' is usually of
no use with cross-GDB of the chosen host.
gdbserver/ChangeLog:
2020-02-12 Maciej W. Rozycki <macro@wdc.com>
Pedro Alves <palves@redhat.com>
Skip building gdbserver in a cross-configuration.
* configure.srv: Set $gdbserver_host depending on whether $target
is $host. Use $gdbserver_host instead of $host.
Tom de Vries [Wed, 12 Feb 2020 10:15:33 +0000 (11:15 +0100)]
[gdb] Fix -Wstrict-null-sentinel warning (--with-iconv-bin)
When using configure flag --with-iconv-bin=$(which iconv), we run into:
...
gdb/charset.c: In function 'void find_charset_names()':
gdb/charset.c:821:75: error: missing sentinel in function call [-Werror=format=]
iconv_program = concat (iconv_dir.c_str(), SLASH_STRING, "iconv", NULL);
^
cc1plus: all warnings being treated as errors
...
Fix the warning.
Build and reg-tested on x86_64-linux.
2020-02-12 Lukas Durfina <ldurfina@tachyum.com>
Tom de Vries <tdevries@suse.de>
* charset.c (find_charset_names): Cast concat NULL sentinel to char *.
Jan Beulich [Wed, 12 Feb 2020 09:59:32 +0000 (10:59 +0100)]
x86: also disallow non-byte/-word registers with byte/word suffix
Along the lines of
be4c5e58bd ("x86: Always disallow double word suffix
with word general register") also adjust check_{byte,word}_reg(), to make
overall behavior consistent again in this regard.
Jan Beulich [Wed, 12 Feb 2020 09:58:42 +0000 (10:58 +0100)]
x86/Intel: improve diagnostics
The diagnostics issued by check_*_reg() are pretty AT&T-centric. Re-use
logic already used for SIMD memory operand size checking also for ones
where GPRs would alternatively also be allowed. (There's certainly room
for further improvement here.)
Tom Tromey [Wed, 12 Feb 2020 01:11:32 +0000 (18:11 -0700)]
Update a comment in psymtab.h
This updates a comment in psymtab.h to reflect the current reality.
gdb/ChangeLog
2020-02-11 Tom Tromey <tom@tromey.com>
* psymtab.h: Update comment.
Change-Id: I438bb5929c3ebd1a4c6e9a902490f2ef63014ab3
Tom Tromey [Wed, 12 Feb 2020 00:31:10 +0000 (17:31 -0700)]
Don't allow copying of auto_obstack
Add DISABLE_COPY_AND_ASSIGN to struct auto_obstack, to prevent copying
it. Copying an auto_obstack would be a bug.
2020-02-11 Tom Tromey <tom@tromey.com>
* gdb_obstack.h (struct auto_obstack): Use
DISABLE_COPY_AND_ASSIGN.
Change-Id: Ic9e5ab20acfcfa61c241fed4d99bbb1caefba3cd
Tom Tromey [Wed, 12 Feb 2020 00:31:10 +0000 (17:31 -0700)]
Don't forward-declare struct objfile in dwarf2/frame.h
dwarf2/frame.h forward-declares struct objfile, but there's no need
for this.
gdb/ChangeLog
2020-02-11 Tom Tromey <tom@tromey.com>
* dwarf2/frame.h (struct objfile): Don't forward declare.
Change-Id: I4d54d46ac9422eeb64dc5f0b934792e77a875aa5
GDB Administrator [Wed, 12 Feb 2020 00:00:29 +0000 (00:00 +0000)]
Automatic date update in version.in
H.J. Lu [Tue, 11 Feb 2020 23:36:13 +0000 (15:36 -0800)]
Plugin: Treat each object as independent
Since plugin treats each object as independent, we must do a fresh dlopen
of plugin for each object.
PR binutils/25355
* plugin.c (try_claim): Always clean up for LTO wrapper.
(try_load_plugin): Treat each object as independent. Create a
copy for plugin name.
Christian Biesinger [Tue, 11 Feb 2020 16:39:35 +0000 (10:39 -0600)]
Remove use of deprecated_add_core_fns in cris_tdep.c
The non-deprecated equivalent is implementing the gdbarch function
iterate_over_regset_sections, this patch does that.
Tested by generating a core file on cris under qemu and comparing
the output of "info registers".
This also fixes this warning when loading cris core files:
warning: Unexpected size of section `.reg/164' in core file.
gdb/ChangeLog:
2020-02-11 Christian Biesinger <cbiesinger@google.com>
* cris-tdep.c (cris_supply_gregset): Change signature to match
what struct regset expects.
(cris_regset): New struct.
(fetch_core_registers): Remove.
(cris_iterate_over_regset_sections): New function.
(_initialize_cris_tdep): Don't call deprecated_add_core_fns.
(cris_gdbarch_init): Call set_gdbarch_iterate_over_regset_sections.
Change-Id: Ieef895b5a2fdc797d1a913cd1c0c07563edfe8e7
Sergio Durigan Junior [Thu, 6 Feb 2020 22:52:54 +0000 (17:52 -0500)]
New testcase for PR tui/25126 (staled source cache)
I'm dealing with a Fedora GDB bug that is related to PR tui/25126, and
I thought I'd write a specific testcase for it because I couldn't find
one.
The idea is to get the simple reproducer from the bug and tweak the
testcase around it. This one was a bit hard because, since we need to
modify the source file and recompile it, it involved a bit of TCL-foo
to do things. Also for this reason, I'm only enabling the test for
native boards.
I tested this with an upstream GDB and made sure everything is
passing. I also tested with a faulty GDB and made sure the test
failed.
gdb/testsuite/ChangeLog:
2020-02-11 Sergio Durigan Junior <sergiodj@redhat.com>
PR tui/25126
https://bugzilla.redhat.com/show_bug.cgi?id=
1784210
* gdb.base/cached-source-file.c: New file.
* gdb.base/cached-source-file.exp: New file.
Change-Id: Ib1b074342ebe8613c6d1dfde631691ebdf6d81c6
Christian Biesinger [Mon, 10 Feb 2020 23:34:48 +0000 (17:34 -0600)]
Add a comment for the ARM_F{0..7}_REGNUM registers
These are for the obsolete FPA architecture.
gdb/ChangeLog:
2020-02-11 Christian Biesinger <cbiesinger@google.com>
* arch/arm.h (enum gdb_regnum): Add comment for the FP0..7
registers.
Change-Id: I6920616318ee637493d4ca12b91fa2ebcd103d76
Christian Biesinger [Tue, 11 Feb 2020 16:21:14 +0000 (10:21 -0600)]
Add missing \n in fprintf
gdb/ChangeLog:
2020-02-11 Christian Biesinger <cbiesinger@google.com>
* arm-tdep.c (arm_dump_tdep): Add \n in fprintf.
Change-Id: I0175572436cc7dec29e852c96371f85ea763ba2a
Simon Marchi [Tue, 11 Feb 2020 15:56:05 +0000 (10:56 -0500)]
Re-generate gdb/gdbserver/gdbsupport configure scripts
In my previous commit, I did a last minute modification of warning.m4,
but forgot to re-generate the configure scripts, this commit fixes that.
gdb/ChangeLog:
* configure: Re-generate.
gdbserver/ChangeLog:
* configure: Re-generate.
gdbsupport/ChangeLog:
* configure: Re-generate.
Simon Marchi [Tue, 11 Feb 2020 15:51:49 +0000 (10:51 -0500)]
Add -Wstrict-null-sentinel to gdbsupport/warning.m4
Commit
85f0dd3ce ("[gdb] Fix -Wstrict-null-sentinel warnings") fixed
some violations of -Wstrict-null-sentinel. If we want to enforce this
warning, I think we should enable it in our warning.m4 file.
gdbsupport/ChangeLog:
* warning.m4: Add -Wstrict-null-sentinel.
* configure: Re-generate.
gdbserver/ChangeLog:
* configure: Re-generate.
gdb/ChangeLog:
* configure: Re-generate.
Simon Marchi [Tue, 11 Feb 2020 15:51:43 +0000 (10:51 -0500)]
Move gdb/warning.m4 to gdbsupport
This file is used by gdbsupport, gdbserver and gdb, so I think it
belongs in gdbsupport. Move it there and update the references the
various acinclude.m4 files.
gdbsupport/ChangeLog:
* warning.m4: Move here, from gdb/warning.m4.
* acinclude.m4: Update warning.m4 path.
* Makefile.in: Re-generate.
gdbserver/ChangeLog:
* acinclude.m4: Update warning.m4 path.
gdb/ChangeLog:
* acinclude: Update warning.m4 path.
* warning.m4: Move to gdbsupport.
Simon Marchi [Tue, 11 Feb 2020 15:46:23 +0000 (10:46 -0500)]
gdbsupport: use AM_GDB_WARNINGS
Since gdbsupport has been given its own build system, it is no longer
compiled with the warning flags specified in gdb/warning.m4.
This patch makes it use AM_GDB_WARNINGS.
gdbsupport/ChangeLog:
* acinclude.m4: Include ../gdb/warning.m4.
* configure.ac: Use AM_GDB_WARNINGS.
* Makefile.am: Set AM_CFLAGS to WARN_CFLAGS and WERROR_CFLAGS.
* Makefile.in: Re-generate.
* configure: Re-generate.
Tom Tromey [Tue, 11 Feb 2020 14:05:28 +0000 (07:05 -0700)]
Remove some ui_file_* functions
This removes ui_file_isatty, ui_file_read, ui_file_write,
ui_file_write_async_safe, ui_file_flush, and ui_file_puts, replacing
them with calls to the appropriate method instead.
gdb/ChangeLog
2020-02-11 Tom Tromey <tromey@adacore.com>
* remote.c (remote_console_output): Update.
* printcmd.c (printf_command): Update.
* event-loop.c (gdb_wait_for_event): Update.
* linux-nat.c (sigchld_handler): Update.
* remote-sim.c (gdb_os_write_stdout): Update.
(gdb_os_flush_stdout): Update.
(gdb_os_flush_stderr): Update.
(gdb_os_write_stderr): Update.
* exceptions.c (print_exception): Update.
* remote-fileio.c (remote_fileio_func_read): Update.
(remote_fileio_func_write): Update.
* tui/tui.c (tui_enable): Update.
* tui/tui-interp.c (tui_interp::init): Update.
* utils.c (init_page_info): Update.
(putchar_unfiltered, fputc_unfiltered): Update.
(gdb_flush): Update.
(emit_style_escape): Update.
(flush_wrap_buffer, fputs_maybe_filtered): Update.
* ui-file.c (ui_file_isatty, ui_file_read, ui_file_write)
(ui_file_write_async_safe, ui_file_flush, ui_file_puts): Remove.
(stderr_file::write): Update.
(stderr_file::puts): Update.
* ui-file.h (ui_file_isatty, ui_file_write)
(ui_file_write_async_safe, ui_file_read, ui_file_flush)
(ui_file_puts): Don't declare.
Change-Id: I3ca9b36e9107f6adbc41e014f5078b41d6bcec4d
Nick Clifton [Tue, 11 Feb 2020 12:38:41 +0000 (12:38 +0000)]
Fix building the bfd/elf32-msp430.c file on a 32-bit host.
* elf32-msp430.c (msp430_final_link_relocate): Always use longs
for addresses in print statements.
(msp430_elf_relax_delete_bytes): Likewise.
(msp430_elf_relax_add_words): Likewise.
(msp430_elf_relax_section): Likewise.
H.J. Lu [Tue, 11 Feb 2020 12:26:00 +0000 (04:26 -0800)]
Clear plugin_data memory
Clear plugin_data memory since it may be uninitialized.
* plugin.c (add_symbols): Clear plugin_data memory.
Jan Beulich [Tue, 11 Feb 2020 10:20:55 +0000 (11:20 +0100)]
x86: drop ShortForm attribute
It is very simple to derive from other template properties, and hence
there's little point wasting storage for it.
Jan Beulich [Tue, 11 Feb 2020 10:20:05 +0000 (11:20 +0100)]
x86: drop stray ShortForm attributes
This attribute is meaningless when there are no operands to encode.
Matthew Malcomson [Tue, 11 Feb 2020 10:17:33 +0000 (10:17 +0000)]
[binutils][gas] Fix build failure with -std=c89
My previous patch introduced the use of a C99 feature. C99 standard is
not required for gas, so this feature should be removed.
Committed as obvious.
gas/ChangeLog:
2020-02-11 Matthew Malcomson <matthew.malcomson@arm.com>
* config/tc-arm.c (vcx_handle_register_arguments): Remove `for`
loop initial declaration.
Tom de Vries [Tue, 11 Feb 2020 06:08:33 +0000 (07:08 +0100)]
[gdb/testsuite] Fix UNRESOLVED in gdb.server/server-kill-python.exp
The test-case gdb.server/server-kill-python.exp runs fine by itself:
...
Running src/gdb/testsuite/gdb.server/server-kill-python.exp ...
=== gdb Summary ===
nr of expected passes 3
...
But if we run f.i. gdb.server/file-transfer.exp before it, we get instead:
...
Running src/gdb/testsuite/gdb.server/server-kill-python.exp ...
ERROR: GDB process no longer exists
=== gdb Summary ===
nr of expected passes 13
nr of unresolved testcases 1
...
We can see the origin of the problem here:
...
spawn gdbserver --once localhost:2347 \
build/gdb/testsuite/outputs/gdb.server/file-transfer/file-transfer \
build/gdb/testsuite/outputs/gdb.server/server-kill-python/server-kill-python^M
Process build/gdb/testsuite/outputs/gdb.server/file-transfer/file-transfer
\ created; pid = 9464^M
Listening on port 2347^M
...
The spawn of the gdbserver for the server-kill-python test-case gets as
executable argument the file-transfer binary.
This is caused by proc gdbserver_spawn attempting to load the exec file in
$file_last_loaded. This is something that is meant to load the same exec in
the gdbserver that was earlier loaded into gdb.
In this test-case however, nothing has been loaded into gdb by the test-case,
and consequently we load the file that was loaded into gdb in the previous
test-case.
Fix this by unsetting $file_last_loaded in gdb_init.
Build and reg-tested on x86_64-linux.
gdb/testsuite/ChangeLog:
2020-02-11 Tom de Vries <tdevries@suse.de>
PR testsuite/25488
* lib/gdb.exp (gdb_init): Unset $file_last_loaded.
Change-Id: Ic385e08cbd34cbf85518720cf5695b4ff6619f4b
H.J. Lu [Tue, 11 Feb 2020 03:01:42 +0000 (19:01 -0800)]
Use GCC LTO wrapper to get real symbols from LTO IR objects
GCC LTO wrapper is needed to extract real symbols from LTO IR objects.
This patch does the following:
1. Set up GCC LTO wrapper for each LTO IR object.
2. Run GCC LTO wrapper to get the real object.
3. Extract symbol info from the real object.
4. Cleanup afterwards.
bfd/
PR binutils/25355
* configure.ac (HAVE_EXECUTABLE_SUFFIX): New AC_DEFINE.
(EXECUTABLE_SUFFIX): Likewise.
* config.in: Regenerated.
* configure: Likewise.
* plugin.c (bfd_plugin_close_and_cleanup): Removed.
(plugin_list_entry): Add all_symbols_read, cleanup_handler,
gcc, lto_wrapper, resolution_file, resolution_option, gcc_env,
real_bfd, real_nsyms, real_syms, lto_nsyms and lto_syms.
(get_lto_wrapper): New.
(setup_lto_wrapper_env): Likewise.
(current_plugin): Likewise.
(register_all_symbols_read): Likewise.
(register_cleanup): Likewise.
(get_symbols): Likewise.
(add_input_file): Likewise.
(bfd_plugin_close_and_cleanup): Likewise.
(claim_file): Removed.
(register_claim_file): Set current_plugin->claim_file.
(add_symbols): Make a copy of LTO symbols. Set lto_nsyms and
lto_syms in current_plugin.
(try_claim): Use current_plugin->claim_file. Call LTO plugin
all_symbols_read handler. Copy real symbols to plugin_data.
Call LTO plugin cleanup handler. Clean up for LTO wrapper.
(try_load_plugin): Don't reuse the previous plugin for LTO
wrapper. Set up GCC LTO wrapper if possible. Don't set
plugin_list_iter->claim_file.
(bfd_plugin_canonicalize_symtab): Use real LTO symbols if
possible.
* plugin.h (plugin_data_struct): Add real_bfd, real_nsyms and
real_syms.
ld/
PR binutils/25355
* testsuite/ld-plugin/lto.exp: Run PR binutils/25355 test.
* testsuite/ld-plugin/pr25355.c: New file.
* testsuite/ld-plugin/pr25355.d: Likewise.
* testsuite/lib/ld-lib.exp (run_cc_link_tests): Support compile
only dump.
Alan Modra [Mon, 10 Feb 2020 22:41:18 +0000 (09:11 +1030)]
Ensure *valuep always written by extract_normal return
* cgen-ibld.in (extract_normal): Set *valuep on all return paths.
* bpf-ibld.c, * epiphany-ibld.c, * fr30-ibld.c, * frv-ibld.c,
* ip2k-ibld.c, * iq2000-ibld.c, * lm32-ibld.c, * m32c-ibld.c,
* m32r-ibld.c, * mep-ibld.c, * mt-ibld.c, * or1k-ibld.c,
* xc16x-ibld.c, * xstormy16-ibld.c: Regenerate.
GDB Administrator [Tue, 11 Feb 2020 00:00:25 +0000 (00:00 +0000)]
Automatic date update in version.in
Jozef Lawrynowicz [Mon, 10 Feb 2020 20:37:57 +0000 (20:37 +0000)]
MSP430: Enable relaxation of jump instructions to hard-coded pcrel offsets
This patch fixes execution failures which occur when the BR in a
sequence such as:
J<cond> 1f
BR
1:
is relaxed to a JMP, and the pc-relative offset for the destination of
the J<cond> instruction is hard-coded to be 2 words ahead of the
instruction.
The hard-coded offset will cause execution to jump 1 word ahead of where
it should actually go.
Instead we now detect the hard-coded offset is one we inserted earlier,
and invert the condition, allowing us to remove the BR entirely.
bfd/ChangeLog:
2020-02-10 Jozef Lawrynowicz <jozef.l@mittosystems.com>
* elf32-msp430.c (msp430_elf_relax_section): Before relaxing a branch,
check if previous instruction matches a conditional jump inserted
earlier. Invert conditional jump and delete branch in this case.
Jozef Lawrynowicz [Mon, 10 Feb 2020 20:33:21 +0000 (20:33 +0000)]
MSP430: Enable relaxation of relocs in JMP instructions
This patch fixes relocation overflows caused by an inability to relax
unconditional JMP instructions to BR instructions.
bfd/ChangeLog:
2020-02-10 Jozef Lawrynowicz <jozef.l@mittosystems.com>
* elf32-msp430.c (msp430_elf_relax_add_two_words): Rename to
msp430_elf_relax_add_words. Support insertion of either one or two
words.
(msp430_elf_relax_section): Catch opcode of 0x3c00 when relocation
needs to be grown. Handle insertion of branch instruction to replace
jump.
Jozef Lawrynowicz [Mon, 10 Feb 2020 20:27:36 +0000 (20:27 +0000)]
MSP430: Add printf statements to assist with debugging during relaxation
bfd/ChangeLog:
2020-02-10 Jozef Lawrynowicz <jozef.l@mittosystems.com>
* elf32-msp430.c (msp430_final_link_relocate): Add printf statements for
debugging relocations.
(msp430_elf_relax_delete_bytes): Likewise.
(msp430_elf_relax_add_two_words): Likewise.
(msp430_elf_relax_section): Likewise.
Matthew Malcomson [Mon, 10 Feb 2020 16:39:02 +0000 (16:39 +0000)]
[binutils][arm] Implement Custom Datapath Extensions for MVE
Here we implement the custom datapath extensions for MVE.
This required the following changes:
- Adding a new register argument type (that takes either an MVE vector or
a Neon S or D register).
- Adding two new immediate operands types (0-127 and 0-4095).
- Using the Neon type machinery to distinguish between instruction
types. This required the introduction of new neon shapes to account
for the coprocessor operands to these instructions.
- Adding a new disassembly character to `print_insn_cde` to handle the
new register types.
Specification can be found at
https://developer.arm.com/docs/ddi0607/latest
Successfully regression tested on arm-none-eabi, and arm-wince-pe.
gas/ChangeLog:
2020-02-10 Matthew Malcomson <matthew.malcomson@arm.com>
* config/tc-arm.c (NEON_MAX_TYPE_ELS): Increment to account for
instructions that can have 5 arguments.
(enum operand_parse_code): Add new operands.
(parse_operands): Account for new operands.
(S5): New macro.
(enum neon_shape_el): Introduce P suffixes for coprocessor.
(neon_select_shape): Account for P suffix.
(LOW1): Move macro to global position.
(HI4): Move macro to global position.
(vcx_assign_vec_d): New.
(vcx_assign_vec_m): New.
(vcx_assign_vec_n): New.
(enum vcx_reg_type): New.
(vcx_get_reg_type): New.
(vcx_size_pos): New.
(vcx_vec_pos): New.
(vcx_handle_shape): New.
(vcx_ensure_register_in_range): New.
(vcx_handle_register_arguments): New.
(vcx_handle_insn_block): New.
(vcx_handle_common_checks): New.
(do_vcx1): New.
(do_vcx2): New.
(do_vcx3): New.
* testsuite/gas/arm/cde-missing-fp.d: New test.
* testsuite/gas/arm/cde-missing-fp.l: New test.
* testsuite/gas/arm/cde-missing-mve.d: New test.
* testsuite/gas/arm/cde-missing-mve.l: New test.
* testsuite/gas/arm/cde-mve-or-neon.d: New test.
* testsuite/gas/arm/cde-mve-or-neon.s: New test.
* testsuite/gas/arm/cde-mve.s: New test.
* testsuite/gas/arm/cde-warnings.l:
* testsuite/gas/arm/cde-warnings.s:
* testsuite/gas/arm/cde.d:
* testsuite/gas/arm/cde.s:
opcodes/ChangeLog:
2020-02-10 Matthew Malcomson <matthew.malcomson@arm.com>
* arm-dis.c (print_insn_cde): Define 'V' parse character.
(cde_opcodes): Add VCX* instructions.
Matthew Malcomson [Mon, 10 Feb 2020 16:38:00 +0000 (16:38 +0000)]
[binutils][arm] arm support for ARMv8.m Custom Datapath Extension
This patch is part of a series that adds support for the Armv8.m
ARMv8.m Custom Datapath Extension to binutils.
This patch introduces the Custom Instructions Class 1/2/3 (Single/
Dual, Accumulator/Non-accumulator varianats) to the arm backend.
The following Custom Instructions are added: cx1, cx1a,
cx1d, cx1da, cx2, cx2a, cx2d, cx2da, cx3, cx3a, cx3d, cx3da.
Specification can be found at
https://developer.arm.com/docs/ddi0607/latest
This patch distinguishes between enabling CDE for different coprocessor
numbers by defining multiple architecture flags. This means that the
parsing of the architecture extension flags is kept entirely in the
existing code path.
We introduce a new IT block state to indicate the behaviour of these
instructions. This new state allows being used in an IT block or
outside an IT block, but does not allow the instruction to be used
inside a VPT block.
We need this since the CX*A instruction versions can be used in IT
blocks, but they aren't to have the conditional suffixes on them. Hence
we need to mark an instruction as allowed in either position.
We also need a new flag to objdump, in order to determine whether to
disassemble an instruction as CDE related or not.
Successfully regression tested on arm-none-eabi, and arm-wince-pe.
gas/ChangeLog:
2020-02-10 Stam Markianos-Wright <stam.markianos-wright@arm.com>
Matthew Malcomson <matthew.malcomson@arm.com>
* config/tc-arm.c (arm_ext_cde*): New feature sets for each
CDE coprocessor that can be enabled.
(enum pred_instruction_type): New pred type.
(BAD_NO_VPT): New error message.
(BAD_CDE): New error message.
(BAD_CDE_COPROC): New error message.
(enum operand_parse_code): Add new immediate operands.
(parse_operands): Account for new immediate operands.
(check_cde_operand): New.
(cde_coproc_enabled): New.
(cde_coproc_pos): New.
(cde_handle_coproc): New.
(cxn_handle_predication): New.
(do_custom_instruction_1): New.
(do_custom_instruction_2): New.
(do_custom_instruction_3): New.
(do_cx1): New.
(do_cx1a): New.
(do_cx1d): New.
(do_cx1da): New.
(do_cx2): New.
(do_cx2a): New.
(do_cx2d): New.
(do_cx2da): New.
(do_cx3): New.
(do_cx3a): New.
(do_cx3d): New.
(do_cx3da): New.
(handle_pred_state): Define new IT block behaviour.
(insns): Add newn CX*{,d}{,a} instructions.
(CDE_EXTENSIONS,armv8m_main_ext_table,armv8_1m_main_ext_table):
Define new cdecp extension strings.
* doc/c-arm.texi: Document new cdecp extension arguments.
* testsuite/gas/arm/cde-scalar.d: New test.
* testsuite/gas/arm/cde-scalar.s: New test.
* testsuite/gas/arm/cde-warnings.d: New test.
* testsuite/gas/arm/cde-warnings.l: New test.
* testsuite/gas/arm/cde-warnings.s: New test.
* testsuite/gas/arm/cde.d: New test.
* testsuite/gas/arm/cde.s: New test.
include/ChangeLog:
2020-02-10 Stam Markianos-Wright <stam.markianos-wright@arm.com>
Matthew Malcomson <matthew.malcomson@arm.com>
* opcode/arm.h (ARM_EXT2_CDE): New extension macro.
(ARM_EXT2_CDE0): New extension macro.
(ARM_EXT2_CDE1): New extension macro.
(ARM_EXT2_CDE2): New extension macro.
(ARM_EXT2_CDE3): New extension macro.
(ARM_EXT2_CDE4): New extension macro.
(ARM_EXT2_CDE5): New extension macro.
(ARM_EXT2_CDE6): New extension macro.
(ARM_EXT2_CDE7): New extension macro.
opcodes/ChangeLog:
2020-02-10 Stam Markianos-Wright <stam.markianos-wright@arm.com>
Matthew Malcomson <matthew.malcomson@arm.com>
* arm-dis.c (struct cdeopcode32): New.
(CDE_OPCODE): New macro.
(cde_opcodes): New disassembly table.
(regnames): New option to table.
(cde_coprocs): New global variable.
(print_insn_cde): New
(print_insn_thumb32): Use print_insn_cde.
(parse_arm_disassembler_options): Parse coprocN args.
H.J. Lu [Mon, 10 Feb 2020 16:37:22 +0000 (08:37 -0800)]
x86: Accept Intel64 only instruction by default
Commit
d835a58baae720 disabled sysenter/sysenter in 64-bit mode by
default. By default, assembler should accept common, Intel64 only
and AMD64 ISAs since there are no conflicts.
gas/
PR gas/25516
* config/tc-i386.c (intel64): Renamed to ...
(isa64): This.
(match_template): Accept Intel64 only instruction by default.
(i386_displacement): Updated.
(md_parse_option): Updated.
* c-i386.texi: Update -mamd64/-mintel64 documentation.
* testsuite/gas/i386/i386.exp: Run x86-64-sysenter. Pass
-mamd64 to x86-64-sysenter-amd.
* testsuite/gas/i386/x86-64-sysenter.d: New file.
opcodes/
PR gas/25516
* i386-gen.c (opcode_modifiers): Replace AMD64 and Intel64
with ISA64.
* i386-opc.h (AMD64): Removed.
(Intel64): Likewose.
(AMD64): New.
(INTEL64): Likewise.
(INTEL64ONLY): Likewise.
(i386_opcode_modifier): Replace amd64 and intel64 with isa64.
* i386-opc.tbl (Amd64): New.
(Intel64): Likewise.
(Intel64Only): Likewise.
Replace AMD64 with Amd64. Update sysenter/sysenter with
Cpu64 and Intel64Only. Remove AMD64 from sysenter/sysenter.
* i386-tbl.h: Regenerated.
Fangrui Song [Mon, 10 Feb 2020 16:22:00 +0000 (16:22 +0000)]
Allow objcopy's --set-section-flags options to add or remove the SHF_EXCLUDE flag of ELF sections.
* objcopy.c (parse_flags): Handle "exclude".
* doc/binutils.texi: Document the support.
Aaron Merey [Mon, 10 Feb 2020 15:24:57 +0000 (15:24 +0000)]
More debuginfod tests fixes.
Start server before setting environment variable.
Specify tmpdir as the location of the server's
database.
Check additional server metrics at start-up.
Aaron Merey [Mon, 10 Feb 2020 15:20:41 +0000 (15:20 +0000)]
Fix potential problem with binutils debuginfod tests.
* binutils/testsuite/binutils-all/debuginfod.exp:
Replace set ::env with setenv.
Tom de Vries [Mon, 10 Feb 2020 14:13:42 +0000 (15:13 +0100)]
[gdb] Fix -Wstrict-null-sentinel warnings
When passed in CXXFLAGS, -Wstrict-null-sentinel triggers twice in a
gdb/gdbserver build.
Fix the two occurrences.
Build and reg-tested on x86_64-linux.
gdb/ChangeLog:
2020-02-10 Tom de Vries <tdevries@suse.de>
* dwarf2/read.c (process_psymtab_comp_unit_reader): Cast concat NULL
sentinel to char *.
gdbsupport/ChangeLog:
2020-02-10 Tom de Vries <tdevries@suse.de>
* environ.c (gdb_environ::set): Cast concat NULL sentinel to char *.
Tom de Vries [Mon, 10 Feb 2020 12:22:09 +0000 (13:22 +0100)]
[gdb/testsuite] Skip multi-target.exp without gdbserver
Pre-commit
919adfe840 "Move gdbserver to top level", if we build gdb with
--disable-gdbserver, and run test-case gdb.multi/multi-target.exp, we run
into:
...
(gdb) PASS: gdb.multi/multi-target.exp: continue: non-stop=off: set remote-exec file in inferior 2
spawn of --once --multi localhost:2346 failed
ERROR: tcl error sourcing /data/gdb_versions/devel/src/gdb/testsuite/gdb.multi/multi-target.exp.
ERROR: Timeout waiting for gdbserver response.
...
Fix this by using skip_gdbserver_tests in multi-target.exp.
Tested on x86_64-linux.
gdb/testsuite/ChangeLog:
2020-02-10 Tom de Vries <tdevries@suse.de>
* gdb.multi/multi-target.exp: Skip if skip_gdbserver_tests.
Maciej W. Rozycki [Mon, 10 Feb 2020 08:59:04 +0000 (08:59 +0000)]
GDB/testsuite: Fix a catastrophic step-over-no-symbols.exp failure
Fix a catastrophic failure in gdb.base/step-over-no-symbols.exp where
remote target communication issues cause the value of the PC retrieved
to be empty:
(gdb) FAIL: gdb.base/step-over-no-symbols.exp: displaced=off: stepi
p /x $pc
Remote 'g' packet reply is too long (expected 264 bytes, got 532 bytes): 00000000000000002a6f61551500000080faffff3f0000000028010000000000b03857551500000060ad5f5515000000906e615515000000802401000000000090faffff3f00000000000000000000000100000000000000e8fbffff3f000000f8fbffff3f0000000000000000000000b8faffff3f0000008a05010000000000589c6f551500000056424d40435c2f7c1809575515000000f0e0baaa2a0000000000000000000000f0ffbaaa2a000000f0e0baaa2a0000006804baaa2a000000000000000000000000000000000000007053baaa2a0000008252b2aa2a00000090fe01000000000048e056551500000004000000000000004000000000000000920501000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000xxxxxxxxxxxxxxxx00000000
(gdb) FAIL: gdb.base/step-over-no-symbols.exp: displaced=off: get after PC
ERROR: tcl error sourcing .../gdb/testsuite/gdb.base/step-over-no-symbols.exp.
ERROR: missing operand at _@_
in expression " _@_!= "
(parsing expression " != ")
invoked from within
"expr $before_addr != $after_addr"
("uplevel" body line 1)
invoked from within
"uplevel 1 expr $condition"
(procedure "gdb_assert" line 6)
invoked from within
"gdb_assert {$before_addr != $after_addr} "advanced""
(procedure "test_step_over" line 36)
invoked from within
"test_step_over $displaced"
("uplevel" body line 2)
invoked from within
"uplevel 1 $body"
invoked from within
"with_test_prefix "displaced=$displaced" {
test_step_over $displaced
}"
("foreach" body line 6)
invoked from within
"foreach displaced { "off" "on" "auto" } {
if { $displaced != "off" && ![support_displaced_stepping] } {
continue
}
with_test_prefix "dis..."
(file ".../gdb/testsuite/gdb.base/step-over-no-symbols.exp" line 84)
invoked from within
"source .../gdb/testsuite/gdb.base/step-over-no-symbols.exp"
("uplevel" body line 1)
invoked from within
"uplevel #0 source .../gdb/testsuite/gdb.base/step-over-no-symbols.exp"
invoked from within
"catch "uplevel #0 source $test_file_name""
Remote debugging from host xxx.xxx.xxx.xxx, port 47130
monitor exit
Killing process(es): 1092
Remote communication error. Target disconnected.: Connection reset by peer.
(gdb)
To do so verify first, before making an arithmetic comparison, that the
values to compare are actually integers (using a string comparison would
result in a false PASS if both operands were empty, as in this case),
making the test script proceed normally:
(gdb) FAIL: gdb.base/step-over-no-symbols.exp: displaced=off: stepi
p /x $pc
Remote 'g' packet reply is too long (expected 264 bytes, got 532 bytes): 00000000000000002a6f61551500000080faffff3f0000000028010000000000b03857551500000060ad5f5515000000906e615515000000802401000000000090faffff3f00000000000000000000000100000000000000e8fbffff3f000000f8fbffff3f0000000000000000000000b8faffff3f0000008a05010000000000589c6f5515000000424d40435c2f7c7c1809575515000000f0e0baaa2a0000000000000000000000f0ffbaaa2a000000f0e0baaa2a0000006804baaa2a000000000000000000000000000000000000007053baaa2a0000008252b2aa2a00000090fe01000000000048e056551500000004000000000000004000000000000000920501000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000xxxxxxxxxxxxxxxx00000000
(gdb) FAIL: gdb.base/step-over-no-symbols.exp: displaced=off: get after PC
FAIL: gdb.base/step-over-no-symbols.exp: displaced=off: advanced
Remote debugging from host xxx.xxx.xxx.xxx, port 48404
monitor exit
Killing process(es): 1795
Remote communication error. Target disconnected.: Connection reset by peer.
(gdb)
Note the double curly braces, to take advantage of `&&' operator's lazy
evaluation.
gdb/testsuite/
* gdb.base/step-over-no-symbols.exp: Verify that $before_addr
and $after_addr are both integers before making a comparison.
Alan Modra [Thu, 6 Feb 2020 14:12:45 +0000 (00:42 +1030)]
gas: error for section type, attr, or entsize change
* config/obj-elf.c (obj_elf_change_section): Error for section
type, attr or entsize changes in assembly.
* testsuite/gas/elf/elf.exp: Pass -Z to gas for section5 test.
* testsuite/gas/elf/section5.l: Update.
Alan Modra [Mon, 10 Feb 2020 00:57:16 +0000 (11:27 +1030)]
gas -Z flag
-Z is supposed to "generate object file even after errors". It
doesn't do so at the moment, unless you count a zero length object
file as useful output. Fixed for most targets as follows.
I suspect avr and pru need target patches.
* output-file.c (output_file_close): Do a normal close when
flag_always_generate_output.
* write.c (write_object_file): Don't stop output when
flag_always_generate_output.
Alan Modra [Sat, 8 Feb 2020 00:44:54 +0000 (11:14 +1030)]
z80 comments in archures.c
bfd-in2.h didn't match what was in archures.c and reloc.c. This
fixes overlong comment lines and regenerates bfd-in2.h.
* archures.c: Wrap overlong z80 comments.
* bfd-in2.h: Regenerate.
GDB Administrator [Mon, 10 Feb 2020 00:00:30 +0000 (00:00 +0000)]
Automatic date update in version.in
Tom de Vries [Sun, 9 Feb 2020 12:32:26 +0000 (13:32 +0100)]
[gdb] Mention CU offset for <artifical> if verbose
Say we're debugging a test-case with CUs with name "<artificial>", meaning
not originating from a single file compilation, and use the verbose setting:
...
$ gdb -iex "set verbose on" -batch cc1
Reading symbols from cc1...
Reading in symbols for <artificial>... \
and /tmp/trunk/gcc/attribs.c... \
...
and /tmp/trunk/gcc/tree-ssa-reassoc.c... \
done.
...
From the "/tmp/trunk/gcc/attribs.c" message, it's clear which CU is loaded. But
that's not the case for the "<artificial>" message.
The message uses the filename field of struct partial_symtab, which is
documented like this:
...
/* Name of the source file which this partial_symtab defines,
or if the psymtab is anonymous then a descriptive name for
debugging purposes, or "". It must not be NULL. */
...
So, fix this by setting the filename field to a more descriptive name than
"<artificial>", by appending the CU offset.
This way, we print instead:
...
$ gdb -iex "set verbose on" -batch cc1
Reading symbols from cc1...
Reading in symbols for <artificial>@0x41146d9 \
and /tmp/trunk/gcc/attribs.c... \
... \
and /tmp/trunk/gcc/tree-ssa-reassoc.c... \
done.
...
Build and reg-tested on x86_64-linux.
gdb/ChangeLog:
2020-02-09 Tom de Vries <tdevries@suse.de>
* dwarf2read.c (process_psymtab_comp_unit_reader): Append CU offset to
filename if it matches "<artificial>".
Tom de Vries [Sun, 9 Feb 2020 12:30:03 +0000 (13:30 +0100)]
[gdb/testsuite] Capture many-headers.exp progress and output in gdb.log
When running test-case gdb.base/many-headers.exp, we have test output on
stdout/stderr:
...
Running src/gdb/testsuite/gdb.base/many-headers.exp ...
[New LWP 759]
Core was generated by `outputs/gdb.base/many-headers/many'.
Program terminated with signal SIGSEGV, Segmentation fault.
\#0 0x0000000000400688 in ?? ()
=== gdb Summary ===
nr of expected passes 1
...
Furthermore, the only trace in gdb.log that we have of the gdb command issued
is:
...
PASS: gdb.base/many-headers.exp: read core file
...
Fix this by echoing the gdb command in gdb.log, and capturing the
command output and pasting it into gdb.log:
...
( ulimit -s 4096; \
gdb -nw -nx -data-directory data-directory -batch -core=many-headers.core )
[New LWP 1542]
Core was generated by `many'.
Program terminated with signal SIGSEGV, Segmentation fault.
\#0 0x0000000000400688 in ?? ()
PASS: gdb.base/many-headers.exp: read core file
...
Tested on x86_64-linux.
gdb/testsuite/ChangeLog:
2020-02-09 Tom de Vries <tdevries@suse.de>
* gdb.base/many-headers.exp: Echo gdb command to gdb.log. Capture gdb
command output and paste it into gdb.log. If any, paste catch message
to gdb.log.
Hannes Domani [Fri, 17 Jan 2020 14:50:58 +0000 (15:50 +0100)]
Use enums for human-readable exception information.
Changes to $_siginfo type to this:
(gdb) pt $_siginfo
type = struct EXCEPTION_RECORD {
enum ExceptionCode ExceptionCode;
DWORD ExceptionFlags;
struct EXCEPTION_RECORD *ExceptionRecord;
PVOID ExceptionAddress;
DWORD NumberParameters;
union {
ULONG_PTR ExceptionInformation[15];
struct {...} AccessViolationInformation;
};
}
(gdb) pt $_siginfo.ExceptionCode
type = enum ExceptionCode {FATAL_APP_EXIT =
1073741845,
DBG_CONTROL_C =
1073807365, DBG_CONTROL_BREAK =
1073807368,
DATATYPE_MISALIGNMENT =
2147483650, BREAKPOINT, SINGLE_STEP,
ACCESS_VIOLATION =
3221225477, IN_PAGE_ERROR,
ILLEGAL_INSTRUCTION =
3221225501, NONCONTINUABLE_EXCEPTION =
3221225509,
INVALID_DISPOSITION, ARRAY_BOUNDS_EXCEEDED =
3221225612,
FLOAT_DENORMAL_OPERAND, FLOAT_DIVIDE_BY_ZERO, FLOAT_INEXACT_RESULT,
FLOAT_INVALID_OPERATION, FLOAT_OVERFLOW, FLOAT_STACK_CHECK,
FLOAT_UNDERFLOW, INTEGER_DIVIDE_BY_ZERO, INTEGER_OVERFLOW,
PRIV_INSTRUCTION, STACK_OVERFLOW =
3221225725, FAST_FAIL =
3221226505}
(gdb) pt $_siginfo.AccessViolationInformation
type = struct {
enum ViolationType Type;
PVOID Address;
}
(gdb) pt $_siginfo.AccessViolationInformation.Type
type = enum ViolationType {READ_ACCESS_VIOLATION, WRITE_ACCESS_VIOLATION,
DATA_EXECUTION_PREVENTION_VIOLATION = 8}
Which makes it easier to understand the reason of the exception:
(gdb) p $_siginfo
$1 = {
ExceptionCode = ACCESS_VIOLATION,
ExceptionFlags = 0,
ExceptionRecord = 0x0,
ExceptionAddress = 0x401632 <main+18>,
NumberParameters = 2,
{
ExceptionInformation = {1, 291, 0 <repeats 13 times>},
AccessViolationInformation = {
Type = WRITE_ACCESS_VIOLATION,
Address = 0x123
}
}
}
gdb/ChangeLog:
2020-02-09 Hannes Domani <ssbssa@yahoo.de>
* windows-tdep.c (struct enum_value_name): New struct.
(create_enum): New function.
(windows_get_siginfo_type): Create and use enum types.
Hannes Domani [Fri, 17 Jan 2020 14:28:09 +0000 (15:28 +0100)]
Display ExceptionRecord for $_siginfo
Uses the $_siginfo convenience variable to show the last exception.
The type looks like this:
(gdb) pt $_siginfo
type = struct EXCEPTION_RECORD {
DWORD ExceptionCode;
DWORD ExceptionFlags;
struct EXCEPTION_RECORD *ExceptionRecord;
PVOID ExceptionAddress;
DWORD NumberParameters;
ULONG_PTR ExceptionInformation[15];
}
EXCEPTION_RECORD is documented at [1].
Example:
Program received signal SIGSEGV, Segmentation fault.
main () at crasher.c:4
4 *(int*)0x123 = 0;
(gdb) p $_siginfo
$1 = {
ExceptionCode =
3221225477,
ExceptionFlags = 0,
ExceptionRecord = 0x0,
ExceptionAddress = 0x401632 <main+18>,
NumberParameters = 2,
ExceptionInformation = {1, 291, 0 <repeats 13 times>}
}
(gdb) p/x $_siginfo.ExceptionCode
$2 = 0xc0000005
(gdb) p/x $_siginfo.ExceptionInformation[1]
$3 = 0x123
And 0xc0000005 is the value of EXCEPTION_ACCESS_VIOLATION.
[1] https://docs.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-exception_record
gdb/ChangeLog:
2020-02-09 Hannes Domani <ssbssa@yahoo.de>
* NEWS: Mention $_siginfo support for Windows.
* windows-nat.c (handle_exception): Set siginfo_er.
(windows_nat_target::mourn_inferior): Reset siginfo_er.
(windows_xfer_siginfo): New function.
(windows_nat_target::xfer_partial): Call windows_xfer_siginfo.
* windows-tdep.c (struct windows_gdbarch_data): New struct.
(init_windows_gdbarch_data): New function.
(get_windows_gdbarch_data): New function.
(windows_get_siginfo_type): New function.
(windows_init_abi): Register windows_get_siginfo_type.
(_initialize_windows_tdep): Register init_windows_gdbarch_data.
gdbserver/ChangeLog:
2020-02-09 Hannes Domani <ssbssa@yahoo.de>
* win32-low.c (win32_clear_inferiors): Reset siginfo_er.
(handle_exception): Set siginfo_er.
(win32_xfer_siginfo): New function.
GDB Administrator [Sun, 9 Feb 2020 00:00:13 +0000 (00:00 +0000)]
Automatic date update in version.in
Tom Tromey [Sat, 8 Feb 2020 20:40:54 +0000 (13:40 -0700)]
Remove "keep" parameter from cutu_reader constructor
cutu_reader has a "keep" parameter, which is used to decide what to do
with a new CU when the reader is destroyed. Most code does not try to
preserve the CU, so this patch removes this parameter and instead adds
a new method that users can call to preserve the CU on the chain.
gdb/ChangeLog
2020-02-08 Tom Tromey <tom@tromey.com>
* dwarf2/read.c (class cutu_reader) <cutu_reader,
init_tu_and_read_dwo_dies>: Remove "keep" parameter.
<keep>: Declare method.
<m_keep>: Remove member.
<~cutu_reader>: Remove.
(cutu_reader::init_tu_and_read_dwo_dies): Update.
(cutu_reader::cutu_reader): Update.
(cutu_reader::keep): Rename from ~cutu_reader.
(process_psymtab_comp_unit, build_type_psymtabs_1)
(process_skeletonless_type_unit, load_partial_comp_unit)
(load_full_comp_unit, dwarf2_read_addr_index)
(read_signatured_type): Update.
Change-Id: I859b1c64313569d76d46317c14e9b077ebc3a27b
Tom Tromey [Sat, 8 Feb 2020 20:40:54 +0000 (13:40 -0700)]
Simplify "want_partial_unit" handling
This changes the "want_partial_unit" parameters to have type bool, and
also removes the parameter from process_psymtab_comp_unit_reader.
This latter change seemed like an improvement, because it avoids a
pointless function call in the case where we are not planning to read
a partial unit.
2020-02-08 Tom Tromey <tom@tromey.com>
* dwarf2/read.c (process_psymtab_comp_unit_reader): Remove
"want_partial_unit" parameter.
(process_psymtab_comp_unit): Change want_partial_unit to bool.
Inline check for DW_TAG_partial_unit.
(dwarf2_build_psymtabs_hard, scan_partial_symbols): Update.
Change-Id: I99e647f0c4faa3346e90a6e7bacc82af57eccff1
Tom Tromey [Sat, 8 Feb 2020 20:40:54 +0000 (13:40 -0700)]
Move two more functions to dwarf2/leb.h
This moves read_n_bytes and read_direct_string to be with the the
low-level value-reading code.
2020-02-08 Tom Tromey <tom@tromey.com>
* dwarf2/read.c (read_n_bytes, read_direct_string): Move to
read.c.
* dwarf2/leb.h (read_n_bytes, read_direct_string): Move from
read.c.
Change-Id: Id07bfa13d93c0ac1f47a385749a8f01f4755b818
Tom Tromey [Sat, 8 Feb 2020 20:40:54 +0000 (13:40 -0700)]
Convert read_address to a method on comp_unit_head
This changes read_address to be a method on comp_unit_head.
2020-02-08 Tom Tromey <tom@tromey.com>
* dwarf2/read.c (read_address): Move to comp-unit.c.
(dwarf2_rnglists_process, dwarf2_ranges_process)
(read_attribute_value, dwarf_decode_lines_1)
(var_decode_location, decode_locdesc): Update.
* dwarf2/comp-unit.c (comp_unit_head::read_address): Move from
read.c. Remove "cu" parameter.
* dwarf2/comp-unit.h (struct comp_unit_head) <read_address>: New
method.
Change-Id: Ibd6c7235f2e4d5fd88c272cfd2c3d3328618cc56
Tom Tromey [Sat, 8 Feb 2020 20:40:54 +0000 (13:40 -0700)]
Convert read_offset to method on comp_unit_head
This changes one of the read_offset overloads to be a method on
comp_unit_head.
2020-02-08 Tom Tromey <tom@tromey.com>
* dwarf2/read.c (read_attribute_value, read_indirect_string)
(read_indirect_line_string): Update.
* dwarf2/comp-unit.c (read_offset): Remove.
(read_comp_unit_head): Update.
* dwarf2/comp-unit.h (struct comp_unit_head) <read_offset>: New
method.
(read_offset): Don't declare.
Change-Id: Ia595702a5748337b7c031352bc437956baab9990
Tom Tromey [Sat, 8 Feb 2020 20:40:54 +0000 (13:40 -0700)]
Create dwarf2/comp-unit.[ch]
This creates the new files dwarf2/comp-unit.[ch], moving
comp_unit_head and helpers to those files. A couple of functions are
turned into methods, because it was convenient to do so now.
2020-02-08 Tom Tromey <tom@tromey.com>
* Makefile.in (COMMON_SFILES): Add dwarf2/comp-unit.c.
* dwarf2/read.c (struct comp_unit_head): Move to
dwarf2/comp-unit.h.
(enum class rcuh_kind): Move to comp-unit.h.
(get_cu_length, offset_in_cu_p): Now methods on comp_unit_head.
(read_comp_unit_head, error_check_comp_unit_head)
(read_and_check_comp_unit_head): Move to comp-unit.c.
(read_offset, dwarf_unit_type_name): Likewise.
(create_debug_type_hash_table, read_cutu_die_from_dwo)
(cutu_reader::cutu_reader, read_call_site_scope)
(find_partial_die, follow_die_offset): Update.
* dwarf2/comp-unit.h: New file, from dwarf2read.c.
Change-Id: Id961b9674c0081ed061083c8152c38b27b27388a
Tom Tromey [Sat, 8 Feb 2020 20:40:54 +0000 (13:40 -0700)]
Move read_offset_1 to leb.c
This moves read_offset_1 to leb.c, as it is a low-level data-reading
function. It is also renamed to remove the "_1", because gdb can use
overloading now, and this is clearer.
2020-02-08 Tom Tromey <tom@tromey.com>
* dwarf2/read.c (read_offset_1): Move to leb.c.
(read_abbrev_offset, read_offset, dwarf_decode_line_header)
(dwarf_decode_macro_bytes): Update.
* dwarf2/leb.c (read_offset): Rename; move from read.c.
* dwarf2/leb.h (read_offset): Declare.
Change-Id: I048140598acfa76eade2cc529ab7933d4b9ca0b3
Tom Tromey [Sat, 8 Feb 2020 20:40:54 +0000 (13:40 -0700)]
Convert dwarf2_section_size to a method
This changes dwarf2_section_size to be a method on
dwarf2_section_info.
2020-02-08 Tom Tromey <tom@tromey.com>
* dwarf2/read.c (dwarf2_section_size): Remove.
(error_check_comp_unit_head, dwarf2_symbol_mark_computed):
Update.
* dwarf2/section.h (struct dwarf2_section_info) <get_size>: New method.
Change-Id: I12928fee5c84350ce98883e329357b86888d639b
Tom Tromey [Sat, 8 Feb 2020 20:40:54 +0000 (13:40 -0700)]
Unify read_initial_length implementations
There are two implementations of read_initial_length in gdb. This
merges them and moves the resulting function to leb.c.
2020-02-08 Tom Tromey <tom@tromey.com>
* dwarf2/read.c (read_initial_length): Move to leb.c.
* dwarf2/leb.h (read_initial_length): Declare.
* dwarf2/leb.c (read_initial_length): Move from read.c. Add
handle_nonstd parameter.
* dwarf2/frame.c (read_initial_length): Remove.
(decode_frame_entry_1): Update.
Change-Id: I34d37bad0f8a584bfa781432cba25e05e1bd5750
Tom Tromey [Sat, 8 Feb 2020 20:40:54 +0000 (13:40 -0700)]
Add some methods to dwarf2_per_cu_data
This changes a few helper functions to be methods on
dwarf2_per_cu_data.
2020-02-08 Tom Tromey <tom@tromey.com>
* dwarf2/loc.c (dwarf2_find_location_expression)
(dwarf_evaluate_loc_desc::get_tls_address)
(dwarf_evaluate_loc_desc::push_dwarf_reg_entry_value)
(rw_pieced_value, dwarf2_evaluate_loc_desc_full)
(dwarf2_locexpr_baton_eval, dwarf2_evaluate_property)
(dwarf2_compile_property_to_c)
(dwarf2_loc_desc_get_symbol_read_needs)
(dwarf2_compile_expr_to_ax, locexpr_describe_location)
(locexpr_tracepoint_var_ref, locexpr_generate_c_location)
(loclist_describe_location, loclist_tracepoint_var_ref)
(loclist_generate_c_location): Update.
* compile/compile-loc2c.c (do_compile_dwarf_expr_to_c): Update.
* dwarf2/loc.h (dwarf2_per_cu_objfile, dwarf2_per_cu_addr_size)
(dwarf2_per_cu_ref_addr_size, dwarf2_per_cu_offset_size)
(dwarf2_per_cu_text_offset, dwarf2_version): Don't declare.
* dwarf2/read.c (dwarf2_per_cu_data::objfile)
(dwarf2_per_cu_data::addr_size)
(dwarf2_per_cu_data::ref_addr_size)
(dwarf2_per_cu_data::text_offset)
(dwarf2_per_cu_data::addr_type): Now methods.
(per_cu_header_read_in): Make per_cu "const".
(dwarf2_version): Remove.
(dwarf2_per_cu_data::int_type): Now a method.
(dwarf2_per_cu_data::_addr_sized_int_type): Likewise.
(set_die_type, read_array_type, read_subrange_index_type)
(read_tag_string_type, read_subrange_type): Update.
* dwarf2/read.h (struct dwarf2_per_cu_data) <addr_size,
offset_size, ref_addr_size, text_offset, addr_type, version,
objfile, int_type, addr_sized_int_type>: Declare methods.
Change-Id: I07a42fa26e00795352389fa7a0cc1c12997d26f7
Tom Tromey [Sat, 8 Feb 2020 20:40:54 +0000 (13:40 -0700)]
Move dwarf2_per_cu_data::imported_symtabs earlier
This moves dwarf2_per_cu_data::imported_symtabs earlier, near where
the other data members are located.
2020-02-08 Tom Tromey <tom@tromey.com>
* dwarf2/read.h (struct dwarf2_per_cu_data) <imported_symtabs>:
Move earlier.
Change-Id: I314ddaa6f67c53a848e513b3f6d42913bd957833
Tom Tromey [Sat, 8 Feb 2020 20:40:54 +0000 (13:40 -0700)]
Move DWARF line_header to new file
This moves the line_header class to a pair of new files, making
dwarf2/read.c somewhat smaller.
2020-02-08 Tom Tromey <tom@tromey.com>
* dwarf2/read.h (dwarf_line_debug): Declare.
* Makefile.in (COMMON_SFILES): Add dwarf2/line-header.c.
* dwarf2/read.c: Move line_header code to new files.
(dwarf_line_debug): No longer static.
* dwarf2/line-header.c: New file.
* dwarf2/line-header.h: New file.
Change-Id: I8d9d8a2398b4e888e20cc5dd68d041c28b5a06e3
Tom Tromey [Sat, 8 Feb 2020 20:40:54 +0000 (13:40 -0700)]
Change line_table methods to return unique_xmalloc_ptr
This changes the two new line_table methods to return
unique_xmalloc_ptr. This removes a bit of manual memory management.
2020-02-08 Tom Tromey <tom@tromey.com>
* dwarf2/read.c (struct line_header) <file_full_name,
file_file_name>: Return unique_xmalloc_ptr.
(line_header::file_file_name): Update.
(line_header::file_full_name): Update.
(dw2_get_file_names_reader): Update.
(macro_start_file): Update.
Change-Id: I9442dba43882fb26097d0770a291eea2b03913a4
Tom Tromey [Sat, 8 Feb 2020 20:40:54 +0000 (13:40 -0700)]
Change file_full_name and file_file_name methods
This changes file_full_name and file_file_name methods to be methods
on line_header. This seems more clear to me.
2020-02-08 Tom Tromey <tom@tromey.com>
* dwarf2/read.c (struct line_header) <file_full_name,
file_file_name>: Declare methods.
(dw2_get_file_names_reader): Update.
(file_file_name): Now a method.
(file_full_name): Likewise.
(macro_start_file): Update.
Change-Id: I50d3e91665a9637c732e1e8d8e4263764c766d9c
Tom Tromey [Sat, 8 Feb 2020 20:40:54 +0000 (13:40 -0700)]
Move dwarf_always_disassemble to dwarf2/loc.c
dwarf_always_disassemble is only used in dwarf2/loc.c, so move the
definition and the command infrastructure to that file.
2020-02-08 Tom Tromey <tom@tromey.com>
* dwarf2/read.c (dwarf_always_disassemble)
(show_dwarf_always_disassemble): Move to loc.c.
(_initialize_dwarf2_read): Move "always-disassemble" registration
to loc.c.
* dwarf2/read.h (dwarf_always_disassemble): Don't declare.
* dwarf2/loc.c (dwarf_always_disassemble): Move from read.c. Now
static.
(show_dwarf_always_disassemble): Move from read.c.
(_initialize_dwarf2loc): Move always-disassemble from read.c.
Change-Id: I33fb88112e98e583c3f4919d20e4d100f2ea0124
Tom Tromey [Sat, 8 Feb 2020 20:40:54 +0000 (13:40 -0700)]
Change dwarf2_per_objfile::quick_file_names_table to htab_up
This changes dwarf2_per_objfile::quick_file_names_table to be an
htab_up. This just removes a bit of manual management.
2020-02-08 Tom Tromey <tom@tromey.com>
* dwarf2/read.c (~dwarf2_per_objfile): Update.
(create_quick_file_names_table): Return htab_up.
(dw2_get_file_names_reader, dw2_forget_cached_source_info):
Update.
* dwarf2/read.h (struct dwarf2_per_objfile)
<quick_file_names_table>: Now htab_up.
Change-Id: I4ff2fce8b8af27f4bfe01a11b97a889edfd23151
Tom Tromey [Sat, 8 Feb 2020 20:40:54 +0000 (13:40 -0700)]
Minor simplification in abbrev_table::read
abbrev_table::read increments cur_abbrev->num_attrs in the inner loop,
but there's no need to do this, as the information is already stored
in the temporary vector.
2020-02-08 Tom Tromey <tom@tromey.com>
* dwarf2/abbrev.c (abbrev_table::read): Simplify.
Change-Id: I765f12850ffa1c6066e884bb22c94468d1abdba4
Tom Tromey [Sat, 8 Feb 2020 20:40:54 +0000 (13:40 -0700)]
Use htab_up in abbrev_table
This changes abbrev_table to use an htab_up rather than an ad hoc,
bucket-based hash table.
2020-02-08 Tom Tromey <tom@tromey.com>
* dwarf2/abbrev.c (abbrev_table): Move constructor from header.
Rewrite.
(abbrev_table::add_abbrev, abbrev_table::lookup_abbrev): Rewrite.
* dwarf2/abbrev.h (struct abbrev_info) <next>: Remove.
(abbrev_table::abbrev_table): No longer inline.
(ABBREV_HASH_SIZE): Remove.
(abbrev_table::m_abbrevs): Now an htab_up.
Change-Id: Icbaa8e49501f9c43218d6a81a7e8c4d3a77d65dc
Tom Tromey [Sat, 8 Feb 2020 20:40:54 +0000 (13:40 -0700)]
Minor cleanups in abbrev_table
This cleans up the DWARF abbrev_table API a bit, primarily by making
various methods and members private.
2020-02-08 Tom Tromey <tom@tromey.com>
* dwarf2/read.c (read_cutu_die_from_dwo): Update.
(cutu_reader): Update.
(build_type_psymtabs_1): Update.
* dwarf2/abbrev.c (abbrev_table::read): Rename.
(abbrev_table::alloc_abbrev): Update.
* dwarf2/abbrev.h (abbrev_table_up): Move earlier.
(abbrev_table::read): New static method, renamed from
abbrev_table_read_table.
(abbrev_table::alloc_abbrev)
(abbrev_table::add_abbrev): Now private.
(abbrev_table::abbrev_table): Now private.
(abbrev_table::m_abbrev_obstack): Now private. Rename.
Change-Id: I320dca83b799f672909ae66f73b7aca266adbaf9
Tom Tromey [Sat, 8 Feb 2020 20:40:54 +0000 (13:40 -0700)]
Change dwarf2_per_objfile::die_type_hash to htab_up
This changes dwarf2_per_objfile::die_type_hash to be an htab_up,
moving its contents off the objfile obstack.
2020-02-08 Tom Tromey <tom@tromey.com>
* dwarf2/read.c (set_die_type, get_die_type_at_offset): Update.
* dwarf2/read.h (struct dwarf2_per_objfile) <die_type_hash>: Now
htab_up.
Change-Id: Ic651f99ebf71bf7ad2dc2880192adacf7b60964a
Tom Tromey [Sat, 8 Feb 2020 20:40:54 +0000 (13:40 -0700)]
Change dwp_file to use htab_up
This changes dwp_file to use htab_up for the loaded_cus and loaded_tus
members. This lets us avoid allocating the contents of these hash
tables on the objfile obstack.
2020-02-08 Tom Tromey <tom@tromey.com>
* dwarf2/read.c (struct dwp_file) <loaded_cus, loaded_tus>: Now
htab_up.
(lookup_dwo_unit_in_dwp): Update.
(allocate_dwp_loaded_cutus_table): Return htab_up. Don't allocate
on obstack.
Change-Id: Id61209bf5c6c6faa0c067195af31fbcf26813a3a
Tom Tromey [Sat, 8 Feb 2020 20:40:54 +0000 (13:40 -0700)]
Don't allocate DWO file hash on obstack
This changes allocate_dwo_file_hash_table so that it does not use the
objfile obstack to store the contents of the hash table.
2020-02-08 Tom Tromey <tom@tromey.com>
* dwarf2/read.c (allocate_dwo_file_hash_table): Don't allocate on
obstack.
Change-Id: Ic20a618acc7277e56aa18580c68f75c793bef97b
Tom Tromey [Sat, 8 Feb 2020 20:40:54 +0000 (13:40 -0700)]
Change dwarf2_per_objfile::line_header_hash to htab_up
This changes dwarf2_per_objfile::line_header_hash to be an htab_up,
and changes it to use heap allocation.
2020-02-08 Tom Tromey <tom@tromey.com>
* dwarf2/read.c (~dwarf2_per_objfile): Don't delete
line_header_hash.
(handle_DW_AT_stmt_list): Update. Don't allocate on obstack.
* dwarf2/read.h (struct dwarf2_per_objfile) <line_header_hash>:
Change type to htab_up.
Change-Id: Icb148a270838c0f96f38fc4a28b5b77d067927b6
Tom Tromey [Sat, 8 Feb 2020 20:40:54 +0000 (13:40 -0700)]
Change dwarf2_per_objfile::type_unit_groups to htab_up
This changes dwarf2_per_objfile::type_unit_groups to be an htab_up,
again allowing us to move the memory used by the hash table from the
objfile obstack to the heap.
2020-02-08 Tom Tromey <tom@tromey.com>
* dwarf2/read.c (allocate_type_unit_groups_table): Return
htab_up. Don't allocate on obstack.
(get_type_unit_group, dwarf2_build_psymtabs_hard): Update.
* dwarf2/read.h (struct dwarf2_per_objfile) <type_unit_groups>:
Change type to htab_up.
Change-Id: Ia045df0ff3ec30aac813da5a9a2314a607ef7ec8
Tom Tromey [Sat, 8 Feb 2020 20:40:54 +0000 (13:40 -0700)]
Change dwarf2_per_objfile::signatured_types to be htab_up
This changes dwarf2_per_objfile::signatured_types to be an htab_up.
This in turn lets us change it not to use the objfile obstack for
allocation; obstack allocation for hash tables is a bad practice
because it leads to excess memory use if the table is ever resized.
gdb/ChangeLog
2020-02-08 Tom Tromey <tom@tromey.com>
* dwarf2/read.h (struct dwarf2_per_objfile) <signatured_types>:
Change type to htab_up.
* dwarf2/read.c (create_signatured_type_table_from_index)
(create_signatured_type_table_from_debug_names)
(create_all_type_units, add_type_unit)
(lookup_dwo_signatured_type, lookup_signatured_type)
(process_skeletonless_type_unit): Update.
(create_debug_type_hash_table, create_debug_types_hash_table):
Change type of types_htab.
(allocate_signatured_type_table, allocate_dwo_unit_table): Return
htab_up. Don't allocate on obstack.
(create_cus_hash_table): Change type of cus_htab parameter.
(struct dwo_file) <cus, tus>: Now htab_up.
(lookup_dwo_signatured_type, lookup_dwo_cutu)
(process_dwo_file_for_skeletonless_type_units, lookup_dwo_cutu)
(queue_and_load_all_dwo_tus): Update.
* dwarf2/index-write.c (write_gdbindex): Update.
(write_debug_names): Update.
Change-Id: I290a209b96945fb5f415c82723b62830e9c4b467
Tom Tromey [Sat, 8 Feb 2020 20:40:54 +0000 (13:40 -0700)]
Remove DWARF queue-related globals
This removes some queue-related globals from the DWARF reader, in
favor of a new member on dwarf2_per_objfile. Globals must be avoided
in this code, because they prevent multi-threading the reader.
gdb/ChangeLog
2020-02-08 Tom Tromey <tom@tromey.com>
* dwarf2/read.h (struct dwarf2_queue_item): Move from
dwarf2/read.c. Remove "next" member. Add constructor ntad
destructor.
(struct dwarf2_per_objfile) <queue>: New member.
* dwarf2/read.c (struct dwarf2_queue_item): Move to
dwarf2/read.h.
(dwarf2_queue, dwarf2_queue_tail): Remove.
(class dwarf2_queue_guard): Add parameter to constructor. Use
DISABLE_COPY_AND_ASSIGN.
<m_per_objfile>: New member.
<~dwarf2_queue_guard>: Rewrite.
(dw2_do_instantiate_symtab, queue_comp_unit, process_queue):
Update.
(~dwarf2_queue_item): New.
Change-Id: Ied1f6ff3691352a66c4709b0b2cba0588f49f79a
Tom Tromey [Sat, 8 Feb 2020 20:40:54 +0000 (13:40 -0700)]
Introduce die_info::has_children
Many functions take a "has_children" parameter (either as an in- or
out-parameter). However, it seems to me that it makes more sense to
have "has_children" be an attribute of a DIE. Making this change
allows this parameter to be eliminated in many places.
gdb/ChangeLog
2020-02-08 Tom Tromey <tom@tromey.com>
* dwarf2/read.c (struct die_info) <has_children>: New member.
(dw2_get_file_names_reader): Remove has_children.
(dw2_get_file_names): Update.
(read_cutu_die_from_dwo): Remove has_children.
(cutu_reader::init_tu_and_read_dwo_dies)
(cutu_reader::cutu_reader): Update.
(process_psymtab_comp_unit_reader, build_type_psymtabs_reader):
Remove has_children.
(build_type_psymtabs_1, process_skeletonless_type_unit)
(load_partial_comp_unit, load_full_comp_unit): Update.
(create_dwo_cu_reader): Remove has_children.
(create_cus_hash_table, read_die_and_children): Update.
(read_full_die_1,read_full_die): Remove has_children.
(read_signatured_type): Update.
(class cutu_reader) <has_children>: Remove.
Change-Id: I0d3d51ae9379554a66032648d51124bba07f87b4
Tom Tromey [Sat, 8 Feb 2020 20:40:54 +0000 (13:40 -0700)]
Move DWARF code to dwarf2/ subdirectory
This moves all the remaining DWARF code to the new dwarf2
subdirectory. This is just a simple renaming, with updates to
includes as needed.
gdb/ChangeLog
2020-02-08 Tom Tromey <tom@tromey.com>
* dwarf2/expr.c: Rename from dwarf2expr.c.
* dwarf2/expr.h: Rename from dwarf2expr.h.
* dwarf2/frame-tailcall.c: Rename from dwarf2-frame-tailcall.c.
* dwarf2/frame-tailcall.h: Rename from dwarf2-frame-tailcall.h.
* dwarf2/frame.c: Rename from dwarf2-frame.c.
* dwarf2/frame.h: Rename from dwarf2-frame.h.
* dwarf2/index-cache.c: Rename from dwarf-index-cache.c.
* dwarf2/index-cache.h: Rename from dwarf-index-cache.h.
* dwarf2/index-common.c: Rename from dwarf-index-common.c.
* dwarf2/index-common.h: Rename from dwarf-index-common.h.
* dwarf2/index-write.c: Rename from dwarf-index-write.c.
* dwarf2/index-write.h: Rename from dwarf-index-write.h.
* dwarf2/loc.c: Rename from dwarf2loc.c.
* dwarf2/loc.h: Rename from dwarf2loc.h.
* dwarf2/read.c: Rename from dwarf2read.c.
* dwarf2/read.h: Rename from dwarf2read.h.
* dwarf2/abbrev.c, aarch64-tdep.c, alpha-tdep.c,
amd64-darwin-tdep.c, arc-tdep.c, arm-tdep.c, bfin-tdep.c,
compile/compile-c-symbols.c, compile/compile-cplus-symbols.c,
compile/compile-loc2c.c, cris-tdep.c, csky-tdep.c, findvar.c,
gdbtypes.c, guile/scm-type.c, h8300-tdep.c, hppa-bsd-tdep.c,
hppa-linux-tdep.c, i386-darwin-tdep.c, i386-linux-tdep.c,
i386-tdep.c, iq2000-tdep.c, m32c-tdep.c, m68hc11-tdep.c,
m68k-tdep.c, microblaze-tdep.c, mips-tdep.c, mn10300-tdep.c,
msp430-tdep.c, nds32-tdep.c, nios2-tdep.c, or1k-tdep.c,
riscv-tdep.c, rl78-tdep.c, rs6000-tdep.c, rx-tdep.c, s12z-tdep.c,
s390-tdep.c, score-tdep.c, sh-tdep.c, sparc-linux-tdep.c,
sparc-tdep.c, sparc64-linux-tdep.c, sparc64-tdep.c, tic6x-tdep.c,
tilegx-tdep.c, v850-tdep.c, xstormy16-tdep.c, xtensa-tdep.c:
Update.
* Makefile.in (COMMON_SFILES): Update.
(HFILES_NO_SRCDIR): Update.
Change-Id: Ied9ce1436cd27ac4a4cffef10ec92e396f181928
Tom Tromey [Sat, 8 Feb 2020 20:40:54 +0000 (13:40 -0700)]
Remove die_reader_specs::comp_dir
die_reader_specs::comp_dir is assigned but never read; this patch
removes it.
gdb/ChangeLog
2020-02-08 Tom Tromey <tom@tromey.com>
* dwarf2read.c (struct die_reader_specs) <comp_dir>: Remove.
(init_cu_die_reader, read_cutu_die_from_dwo): Update.
Change-Id: I9818a2593197a6972cddec23cd2f3dd0ce28f580