binutils-gdb.git
4 years agoAdd -Wstrict-null-sentinel to gdbsupport/warning.m4
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.

4 years agoMove gdb/warning.m4 to gdbsupport
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.

4 years agogdbsupport: use AM_GDB_WARNINGS
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.

4 years agoRemove some ui_file_* functions
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

4 years agoFix building the bfd/elf32-msp430.c file on a 32-bit host.
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.

4 years agoClear plugin_data memory
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.

4 years agox86: drop ShortForm attribute
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.

4 years agox86: drop stray ShortForm attributes
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.

4 years ago[binutils][gas] Fix build failure with -std=c89
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.

4 years ago[gdb/testsuite] Fix UNRESOLVED in gdb.server/server-kill-python.exp
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

4 years agoUse GCC LTO wrapper to get real symbols from LTO IR objects
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.

4 years agoEnsure *valuep always written by extract_normal return
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.

4 years agoAutomatic date update in version.in
GDB Administrator [Tue, 11 Feb 2020 00:00:25 +0000 (00:00 +0000)]
Automatic date update in version.in

4 years agoMSP430: Enable relaxation of jump instructions to hard-coded pcrel offsets
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.

4 years agoMSP430: Enable relaxation of relocs in JMP instructions
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.

4 years agoMSP430: Add printf statements to assist with debugging during relaxation
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.

4 years ago[binutils][arm] Implement Custom Datapath Extensions for MVE
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.

4 years ago[binutils][arm] arm support for ARMv8.m Custom Datapath Extension
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.

4 years agox86: Accept Intel64 only instruction by default
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.

4 years agoAllow objcopy's --set-section-flags options to add or remove the SHF_EXCLUDE flag...
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.

4 years agoMore debuginfod tests fixes.
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.

4 years agoFix potential problem with binutils debuginfod tests.
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.

4 years ago[gdb] Fix -Wstrict-null-sentinel warnings
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 *.

4 years ago[gdb/testsuite] Skip multi-target.exp without gdbserver
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.

4 years agoGDB/testsuite: Fix a catastrophic step-over-no-symbols.exp failure
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.

4 years agogas: error for section type, attr, or entsize change
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.

4 years agogas -Z flag
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.

4 years agoz80 comments in archures.c
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.

4 years agoAutomatic date update in version.in
GDB Administrator [Mon, 10 Feb 2020 00:00:30 +0000 (00:00 +0000)]
Automatic date update in version.in

4 years ago[gdb] Mention CU offset for <artifical> if verbose
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>".

4 years ago[gdb/testsuite] Capture many-headers.exp progress and output in gdb.log
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.

4 years agoUse enums for human-readable exception information.
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.

4 years agoDisplay ExceptionRecord for $_siginfo
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.

4 years agoAutomatic date update in version.in
GDB Administrator [Sun, 9 Feb 2020 00:00:13 +0000 (00:00 +0000)]
Automatic date update in version.in

4 years agoRemove "keep" parameter from cutu_reader constructor
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

4 years agoSimplify "want_partial_unit" handling
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

4 years agoMove two more functions to dwarf2/leb.h
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

4 years agoConvert read_address to a method on comp_unit_head
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

4 years agoConvert read_offset to method on comp_unit_head
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

4 years agoCreate dwarf2/comp-unit.[ch]
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

4 years agoMove read_offset_1 to leb.c
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

4 years agoConvert dwarf2_section_size to a method
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

4 years agoUnify read_initial_length implementations
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

4 years agoAdd some methods to dwarf2_per_cu_data
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

4 years agoMove dwarf2_per_cu_data::imported_symtabs earlier
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

4 years agoMove DWARF line_header to new file
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

4 years agoChange line_table methods to return unique_xmalloc_ptr
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

4 years agoChange file_full_name and file_file_name methods
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

4 years agoMove dwarf_always_disassemble to dwarf2/loc.c
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

4 years agoChange dwarf2_per_objfile::quick_file_names_table to htab_up
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

4 years agoMinor simplification in abbrev_table::read
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

4 years agoUse htab_up in abbrev_table
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

4 years agoMinor cleanups in abbrev_table
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

4 years agoChange dwarf2_per_objfile::die_type_hash to htab_up
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

4 years agoChange dwp_file to use htab_up
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

4 years agoDon't allocate DWO file hash on obstack
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

4 years agoChange dwarf2_per_objfile::line_header_hash to htab_up
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

4 years agoChange dwarf2_per_objfile::type_unit_groups to htab_up
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

4 years agoChange dwarf2_per_objfile::signatured_types to be htab_up
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

4 years agoRemove DWARF queue-related globals
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

4 years agoIntroduce die_info::has_children
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

4 years agoMove DWARF code to dwarf2/ subdirectory
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

4 years agoRemove die_reader_specs::comp_dir
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

4 years agoDon't declare die_info in dwarf2read.h
Tom Tromey [Sat, 8 Feb 2020 20:40:54 +0000 (13:40 -0700)]
Don't declare die_info in dwarf2read.h

There's no need to forward-declare struct die_info in dwarf2read.h.

gdb/ChangeLog
2020-02-08  Tom Tromey  <tom@tromey.com>

* dwarf2read.h (struct die_info): Don't declare.

Change-Id: I0b8dbf99558b9547d418cfd8ef387a21f7dfa660

4 years agoRemove die_info_ptr typedef
Tom Tromey [Sat, 8 Feb 2020 20:40:54 +0000 (13:40 -0700)]
Remove die_info_ptr typedef

die_info_ptr is not used and so can be removed.

gdb/ChangeLog
2020-02-08  Tom Tromey  <tom@tromey.com>

* dwarf2read.h (die_info_ptr): Remove typedef.

Change-Id: Ibd0a5ad55876dc96a35b658adc36348f01e48884

4 years agoChange attr_form_is_block to be a method
Tom Tromey [Sat, 8 Feb 2020 20:40:54 +0000 (13:40 -0700)]
Change attr_form_is_block to be a method

This changes attr_form_is_block to be a method.  This is done
separately because, unlike the other attribute functions,
attr_form_is_block had special handling for the case where the
argument was NULL.  This required auditing each call site; in most
cases, NULL was already ruled out, but in a few spots, an additional
check was needed.

gdb/ChangeLog
2020-02-08  Tom Tromey  <tom@tromey.com>

* dwarf2read.c (read_call_site_scope)
(handle_data_member_location, dwarf2_add_member_fn)
(mark_common_block_symbol_computed, read_common_block)
(attr_to_dynamic_prop, partial_die_info::read)
(var_decode_location, dwarf2_fetch_die_loc_sect_off)
(dwarf2_symbol_mark_computed, set_die_type): Update.
* dwarf2/attribute.h (struct attribute) <form_is_block>: Declare
method.
(attr_form_is_block): Don't declare.
* dwarf2/attribute.c (attribute::form_is_block): Now a method.

Change-Id: Idfb290c61d738301ab991666f43e0b9cf577b2ae

4 years agoChange some attribute functions to be methods
Tom Tromey [Sat, 8 Feb 2020 20:40:54 +0000 (13:40 -0700)]
Change some attribute functions to be methods

This changes most of the attribute-related functions to be methods.
(attr_form_is_block changed in a subsequent patch.)

gdb/ChangeLog
2020-02-08  Tom Tromey  <tom@tromey.com>

* dwarf2read.c (dwarf2_find_base_address, )
(read_call_site_scope, rust_containing_type)
(dwarf2_get_pc_bounds, dwarf2_record_block_ranges)
(handle_data_member_location, dwarf2_add_member_fn)
(get_alignment, read_structure_type, process_structure_scope)
(mark_common_block_symbol_computed, read_common_block)
(read_tag_string_type, attr_to_dynamic_prop, read_subrange_type)
(partial_die_info::read, read_attribute_value, new_symbol)
(lookup_die_type, dwarf2_get_ref_die_offset)
(dwarf2_get_attr_constant_value, follow_die_ref_or_sig)
(dwarf2_fetch_die_loc_sect_off, get_DW_AT_signature_type)
(dwarf2_symbol_mark_computed): Update.
* dwarf2/attribute.h (struct attribute) <value_as_address,
form_is_section_offset, form_is_constant, form_is_ref>: Declare
methods.
(value_as_address, attr_form_is_section_offset)
(attr_form_is_constant, attr_form_is_ref): Don't declare.
* dwarf2/attribute.c (attribute::value_as_address)
(attribute::form_is_section_offset, attribute::form_is_constant)
(attribute::form_is_ref): Now methods.

Change-Id: I320dad13002c59b848dc86c39d5d7111c8a15bdc

4 years agoCreate dwarf2/attribute.[ch]
Tom Tromey [Sat, 8 Feb 2020 20:40:54 +0000 (13:40 -0700)]
Create dwarf2/attribute.[ch]

This moves the attribute-related code out of dwarf2read.c and into the
new files dwarf2/attribute.[ch].

gdb/ChangeLog
2020-02-08  Tom Tromey  <tom@tromey.com>

* dwarf2read.c (struct attribute, DW_STRING)
(DW_STRING_IS_CANONICAL, DW_UNSND, DW_BLOCK, DW_SND, DW_ADDR)
(DW_SIGNATURE, struct dwarf_block, attr_value_as_address)
(attr_form_is_block, attr_form_is_section_offset)
(attr_form_is_constant, attr_form_is_ref): Move.
* dwarf2/attribute.h: New file.
* dwarf2/attribute.c: New file, from dwarf2read.c.
* Makefile.in (COMMON_SFILES): Add dwarf2/attribute.c.

Change-Id: I1ea4c146256a1b9e38b66f1c605d782a14eeded7

4 years agoCreate dwarf2/abbrev.[ch]
Tom Tromey [Sat, 8 Feb 2020 20:40:54 +0000 (13:40 -0700)]
Create dwarf2/abbrev.[ch]

This moves the abbrev table code out of dwarf2read.c and into new
files dwarf2/abbrev.[ch].

gdb/ChangeLog
2020-02-08  Tom Tromey  <tom@tromey.com>

* dwarf2read.c (abbrev_table_up, struct abbrev_info)
(struct attr_abbrev, ABBREV_HASH_SIZE, struct abbrev_table):
Move.
(read_cutu_die_from_dwo, build_type_psymtabs_1): Update.
(abbrev_table::alloc_abbrev, abbrev_table::add_abbrev)
(abbrev_table::lookup_abbrev, abbrev_table_read_table): Move to
abbrev.c.
* dwarf2/abbrev.h: New file.
* dwarf2/abbrev.c: New file, from dwarf2read.c.
* Makefile.in (COMMON_SFILES): Add dwarf2/abbrev.c.

Change-Id: I87911bc5297de4407587ca849fef8e8d19136c30

4 years agoChange section functions to be methods of dwarf2_section_info
Tom Tromey [Sat, 8 Feb 2020 20:40:54 +0000 (13:40 -0700)]
Change section functions to be methods of dwarf2_section_info

This changes various section-related functions to be methods on
dwarf2_section_info.  I think this clarifies the role of these
functions.  This also changes one such function to return bool.

gdb/ChangeLog
2020-02-08  Tom Tromey  <tom@tromey.com>

* dwarf2read.c (dwarf2_section_buffer_overflow_complaint)
(dwarf2_section_size, dwarf2_get_section_info)
(create_signatured_type_table_from_debug_names)
(create_addrmap_from_aranges, read_debug_names_from_section)
(get_gdb_index_contents_from_section, read_comp_unit_head)
(error_check_comp_unit_head, read_abbrev_offset)
(create_debug_type_hash_table, init_cu_die_reader)
(read_cutu_die_from_dwo, dwarf2_build_psymtabs_hard)
(read_comp_units_from_section, create_cus_hash_table)
(create_dwp_hash_table, create_dwo_unit_in_dwp_v1)
(create_dwp_v2_section, dwarf2_rnglists_process)
(dwarf2_ranges_process, read_die_and_siblings, read_full_die)
(abbrev_table_read_table, read_indirect_string_at_offset_from)
(read_indirect_string_from_dwz, read_addr_index_1)
(read_str_index, dwarf_decode_line_header, skip_form_bytes)
(dwarf_decode_macro_bytes, dwarf_decode_macros)
(fill_in_loclist_baton): Update.
* dwarf2/section.h (struct dwarf2_section_info) <get_name,
get_containing_section, get_bfd_owner, get_bfd_section,
get_file_name, get_id, get_flags, empty, read>: Declare methods.
(dwarf2_read_section, get_section_name, get_section_file_name)
(get_containing_section, get_section_bfd_owner)
(get_section_bfd_section, get_section_name, get_section_file_name)
(get_section_id, get_section_flags, dwarf2_section_empty_p): Don't
declare.
* dwarf2/section.c (dwarf2_section_info::get_containing_section)
(dwarf2_section_info::get_bfd_owner)
(dwarf2_section_info::get_bfd_section)
(dwarf2_section_info::get_name)
(dwarf2_section_info::get_file_name, dwarf2_section_info::get_id)
(dwarf2_section_info::get_flags, dwarf2_section_info::empty)
(dwarf2_section_info::read): Now methods.
* dwarf-index-write.c (class debug_names): Update.

Change-Id: Ic849f182f57a18bad6b1c7c3b9368005d307758a

4 years agoCreate dwarf2/section.[ch]
Tom Tromey [Sat, 8 Feb 2020 20:40:54 +0000 (13:40 -0700)]
Create dwarf2/section.[ch]

This moves some section-handling code from dwarf2read.c into new
files, dwarf2/section.[ch].

gdb/ChangeLog
2020-02-08  Tom Tromey  <tom@tromey.com>

* dwarf2read.h (struct dwarf2_section_info, dwarf2_read_section):
Move to dwarf2/section.h.
* dwarf2read.c (get_containing_section, get_section_bfd_owner)
(get_section_bfd_section, get_section_name)
(get_section_file_name, get_section_id, get_section_flags)
(dwarf2_section_empty_p, dwarf2_read_section): Moe to
dwarf2/section.c.
* dwarf2/section.h: New file.
* dwarf2/section.c: New file, from dwarf2read.c.
* Makefile.in (COMMON_SFILES): Add dwarf2/section.c.

Change-Id: I9f8498094cf99d9521e9481622ce8adbd453daf4

4 years agoCreate dwarf2/leb.[ch]
Tom Tromey [Sat, 8 Feb 2020 20:40:54 +0000 (13:40 -0700)]
Create dwarf2/leb.[ch]

This moves some scalar-unpacking code into a couple of new files,
dwarf2/leb.h and dwarf2/leb.c.

gdb/ChangeLog
2020-02-08  Tom Tromey  <tom@tromey.com>

* dwarf2read.h (read_unsigned_leb128): Don't declare.
* dwarf2read.c (read_1_byte, read_1_signed_byte, read_2_bytes)
(read_2_signed_bytes, read_3_bytes, read_4_bytes)
(read_4_signed_bytes, read_8_bytes): Move to dwarf2/leb.h.
(read_unsigned_leb128, read_signed_leb128): Move to dwarf2/leb.c.
* dwarf2/leb.h: New file, from dwarf2read.c.
* dwarf2/leb.c: New file, from dwarf2read.c.
* dwarf2-frame.c (read_1_byte, read_4_bytes, read_8_bytes):
Remove.
* Makefile.in (CONFIG_SRC_SUBDIR): Add dwarf2.
(COMMON_SFILES): Add dwarf2/leb.c.

Change-Id: Idd19647686c8f959d226a95fdfca4db47c6e96d0

4 years agoDocument the GDB 9.1 release in gdb/ChangeLog
Joel Brobecker [Sat, 8 Feb 2020 13:02:16 +0000 (17:02 +0400)]
Document the GDB 9.1 release in gdb/ChangeLog

gdb/ChangeLog:

GDB 9.1 released.

4 years agoAutomatic date update in version.in
GDB Administrator [Sat, 8 Feb 2020 00:00:28 +0000 (00:00 +0000)]
Automatic date update in version.in

4 years agoMake fputs_unfiltered use fputs_maybe_filtered
Iain Buclaw [Wed, 5 Feb 2020 11:45:13 +0000 (12:45 +0100)]
Make fputs_unfiltered use fputs_maybe_filtered

This patch redefines fputs_unfiltered in utils.c, with new behavior to
forward parameters to fputs_maybe_filtered.  This makes
fputs_unfiltered identical to fputs_filtered, except filtering is
disabled.

Some callers of fputs_unfiltered have been updated to use ui_file_puts
where they were using other ui_file_* functions anyway for IO.

This fixes the problem I saw with \032\032post-prompt annotation being
flushed to stdout in the wrong order.

2020-02-05  Iain Buclaw  <ibuclaw@gdcproject.org>

PR gdb/25190:
        * gdb/remote-sim.c (gdb_os_write_stderr): Update.
        * gdb/remote.c (remote_console_output): Update.
        * gdb/ui-file.c (fputs_unfiltered): Rename to...
        (ui_file_puts): ...this.
        * gdb/ui-file.h (ui_file_puts): Add declaration.
        * gdb/utils.c (emit_style_escape): Update.
        (flush_wrap_buffer): Update.
        (fputs_maybe_filtered): Update.
        (fputs_unfiltered): Add function.

Change-Id: I17ed5078f71208344f2f8ab634a6518b1af6e213

4 years agoMake gdb_flush also flush the wrap buffer
Iain Buclaw [Wed, 5 Feb 2020 11:25:09 +0000 (12:25 +0100)]
Make gdb_flush also flush the wrap buffer

This changes gdb_flush to also flush the internal wrap buffer.  A few
places needed to continue using the previous approach, so this also
introduces ui_file_flush for those.

2020-02-05  Iain Buclaw  <ibuclaw@gdcproject.org>

        * gdb/event-loop.c (gdb_wait_for_event): Update.
        * gdb/printcmd.c (printf_command): Update.
        * gdb/remote-fileio.c (remote_fileio_func_write): Update.
        * gdb/remote-sim.c (gdb_os_flush_stdout): Update.
        (gdb_os_flush_stderr): Update.
        * gdb/remote.c (remote_console_output): Update.
        * gdb/ui-file.c (gdb_flush): Rename to...
        (ui_file_flush): ...this.
        (stderr_file::write): Update.
        (stderr_file::puts): Update.
        * gdb/ui-file.h (gdb_flush): Rename to...
        (ui_file_flush): ...this.
        * gdb/utils.c (gdb_flush): Add function.
        * gdb/utils.h (gdb_flush): Add declaration.

Change-Id: I7ca143d30f03dc39f218f6e880eb9bca9e15af39

4 years agoRevert basenames_may_differ patch
Tom Tromey [Wed, 5 Feb 2020 09:53:44 +0000 (10:53 +0100)]
Revert basenames_may_differ patch

Commit a0c1ffedc regressed certain cases coming from Eclipse.
See PR breakpoints/24915.

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

PR breakpoints/24915:
* source.c (find_and_open_source): Do not check basenames_may_differ.

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

PR breakpoints/24915:
* gdb.base/annotate-symlink.exp: Use setup_xfail.

Change-Id: Iadbf42f35eb40c95ad32b2108ae25d8f199998bd

4 years agounique.exp: Update contains_unique_symbol
H.J. Lu [Fri, 7 Feb 2020 20:01:58 +0000 (12:01 -0800)]
unique.exp: Update contains_unique_symbol

Since commit 9fc0b501af78b changed symbols from a/b to a_val/b_val,
contains_unique_symbol needs adjustment.

* testsuite/ld-unique/unique.exp (contains_unique_symbol): Updated.

4 years agoMove gdbserver to top level
Tom Tromey [Sun, 15 Dec 2019 14:37:06 +0000 (07:37 -0700)]
Move gdbserver to top level

This patch moves gdbserver to the top level.

This patch is as close to a pure move as possible -- gdbserver still
builds its own variant of gnulib and gdbsupport.  Changing this will
be done in a separate patch.

[v2] Note that, per Simon's review comment, this patch changes the
tree so that gdbserver is not built for or1k or score.  This makes
sense, because there is apparently not actually a gdbserver port here.

[v3] This version of the patch also splits out some configury into a
new file, gdbserver/configure.host, so that the top-level configure
script can simply rely on it in order to decide whether gdbserver
should be built.

[v4] This version adds documentation and removes some unnecessary
top-level dependencies.

[v5] Update docs to mention "make all-gdbserver" and change how
top-level configure decides whether to build gdbserver, switching to a
single, shared script.

Tested by the buildbot.

ChangeLog
2020-02-07  Tom Tromey  <tom@tromey.com>
    Pedro Alves  <palves@redhat.com>

* src-release.sh (GDB_SUPPORT_DIRS): Add gdbserver.
* gdbserver: New directory, moved from gdb/gdbserver.
* configure.ac (host_tools): Add gdbserver.
Only build gdbserver on certain systems.
* Makefile.in, configure: Rebuild.
* Makefile.def (host_modules, dependencies): Add gdbserver.
* MAINTAINERS: Add gdbserver.

gdb/ChangeLog
2020-02-07  Tom Tromey  <tom@tromey.com>

* README: Update gdbserver documentation.
* gdbserver: Move to top level.
* configure.tgt (build_gdbserver): Remove.
* configure.ac: Remove --enable-gdbserver.
* configure: Rebuild.
* Makefile.in (distclean): Don't mention gdbserver.

Change-Id: I826b7565b54604711dc7a11edea0499cd51ff39e

4 years agoUpdate release making notes.
Nick Clifton [Fri, 7 Feb 2020 15:13:23 +0000 (15:13 +0000)]
Update release making notes.

* README-how-to-make-a-release: Add note about updating the
  GAS/NEWS URL in the next release.

4 years agoAdd support for the GBZ80 and Z80N variants of the Z80 architecture, and add DWARF...
Sergey Belyashov [Fri, 7 Feb 2020 14:53:46 +0000 (14:53 +0000)]
Add support for the GBZ80 and Z80N variants of the Z80 architecture, and add DWARF debug info support to the Z80 assembler.

PR 25469
bfd * archures.c: Add GBZ80 and Z80N machine values.
* reloc.c: Add BFD_RELOC_Z80_16_BE.
* coff-z80.c: Add support for new reloc.
* coffcode.h: Add support for new machine values.
* cpu-z80.c: Add support for new machine names.
* elf32-z80.c: Add support for new reloc.
* bfd-in2.h: Regenerate.
* libbfd.h: Regenerate.

binutils* readelf.c (get_machine_flags): Add support for Z80N machine
number.

gas * config/tc-z80.c: Add -gbz80 command line option to generate code
for the GameBoy Z80.  Add support for generating DWARF.
* config/tc-z80.h: Add support for DWARF debug information
generation.
* doc/c-z80.texi: Document new command line option.
* testsuite/gas/z80/gbz80_all.d: New file.
* testsuite/gas/z80/gbz80_all.s: New file.
* testsuite/gas/z80/z80.exp: Run the new tests.
* testsuite/gas/z80/z80n_all.d: New file.
* testsuite/gas/z80/z80n_all.s: New file.
* testsuite/gas/z80/z80n_reloc.d: New file.

include * coff/internal.h (R_IMM16BE): Define.
* elf/z80.h (EF_Z80_MACH_Z80N): Define.
(R_Z80_16_BE): New reloc.

ld * emulparams/elf32z80.sh: Use z80 emulation.
* emultempl/z80.em: Make generic to both COFF and ELF Z80 emulations.
* emultempl/z80elf.em: Delete.
* testsuite/ld-elf/pr22450.d: Expect to fail for the Z80.
* testsuite/ld-elf/sec64k.exp: Fix Z80 assembly.
* testsuite/ld-unique/pr21529.s: Avoid register name conflict.
* testsuite/ld-unique/unique.s: Likewise.
* testsuite/ld-unique/unique_empty.s: Likewise.
* testsuite/ld-unique/unique_shared.s: Likewise.
* testsuite/ld-unique/unique.d: Updated expected output.
* testsuite/ld-z80/arch_z80n.d: New file.
* testsuite/ld-z80/comb_arch_z80_z80n.d: New file.
* testsuite/ld-z80/labels.s: Add more labels.
* testsuite/ld-z80/relocs.s: Add more reloc tests.
* testsuite/ld-z80/relocs_f_z80n.d: New file

opcodes * z80-dis.c: Add support for GBZ80 opcodes.

4 years agopr25022.d: Xfail more targets without ldelf_before_place_orphans
H.J. Lu [Fri, 7 Feb 2020 13:08:16 +0000 (05:08 -0800)]
pr25022.d: Xfail more targets without ldelf_before_place_orphans

PR ld/25022
* testsuite/ld-elf/pr25022.d: Xfail more targets which don't use
ldelf_before_place_orphans.

4 years agoStop the BFD library from complaining if a segment has no sections attached to it.
Nick Clifton [Fri, 7 Feb 2020 12:55:05 +0000 (12:55 +0000)]
Stop the BFD library from complaining if a segment has no sections attached to it.

PR 23932
* elf.c (rewrite_elf_program_header): Do not complain if no
sections are mapped to a segment.

4 years agoSilcence a compile time warning message building the binutils with gcc-10 on an s390...
Nick Clifton [Fri, 7 Feb 2020 12:49:42 +0000 (12:49 +0000)]
Silcence a compile time warning message building the binutils with gcc-10 on an s390 host.

* dwarf.c (display_debug_lines_decoded): Force a NUL termination
of the truncated file name.

4 years agoELF: Discard a section if any of its linked-to sections has been discarded
H.J. Lu [Fri, 7 Feb 2020 03:42:52 +0000 (19:42 -0800)]
ELF: Discard a section if any of its linked-to sections has been discarded

Add ldelf_before_place_orphans to call before lang_place_orphans to
discard a section if any of its linked-to sections has been discarded.

PR ld/25022
* emultempl/aix.em (ld_${EMULATION_NAME}_emulation): Add
before_place_orphans_default.
* emultempl/armcoff.em (ld_${EMULATION_NAME}_emulation): Likewise.
* emultempl/beos.em (ld_${EMULATION_NAME}_emulation): Likewise.
* emultempl/generic.em (ld_${EMULATION_NAME}_emulation): Likewise.
* emultempl/linux.em (ld_${EMULATION_NAME}_emulation): Likewise.
* emultempl/msp430.em (ld_${EMULATION_NAME}_emulation): Likewise.
* emultempl/pe.em (ld_${EMULATION_NAME}_emulation): Likewise.
* emultempl/pep.em (ld_${EMULATION_NAME}_emulation): Likewise.
* emultempl/ticoff.em (ld_${EMULATION_NAME}_emulation): Likewise.
* emultempl/vanilla.em (ld_${EMULATION_NAME}_emulation): Likewise.
* emultempl/elf.em (ld_${EMULATION_NAME}_emulation): Use
ldelf_before_place_orphans.
* ldelf.c (ldelf_before_place_orphans): New.
* ldelf.h (ldelf_before_place_orphans): Likewise.
* ldemul.c (ldemul_before_place_orphans): Likewise.
(before_place_orphans_default): Likewise.
* ldemul.h (ldemul_before_place_orphans): Likewise.
(before_place_orphans_default): Likewise.
(ld_emulation_xfer_struct): Add before_place_orphans.
* ldlang.c (lang_process): Call ldemul_before_place_orphans
before lang_place_orphans.
* testsuite/ld-elf/pr25022.d: New file.
* testsuite/ld-elf/pr25022.s: Likewise.
* testsuite/ld-elf/pr25022.t: Likewise.

4 years agold: Issue an error for GC on __patchable_function_entries section
H.J. Lu [Fri, 7 Feb 2020 03:37:54 +0000 (19:37 -0800)]
ld: Issue an error for GC on __patchable_function_entries section

__patchable_function_entries section is generated by a compiler with
-fpatchable-function-entry=XX.  The assembly code looks like this:

---
.text
.globl _start
.type _start, %function
_start:
.section __patchable_function_entries,"aw",%progbits
.dc.a .LPFE1
.text
.LPFE1:
.byte 0
---

But --gc-sections will silently remove __patchable_function_entries
section and generate corrupt result.  This patch disallows garbage
collection on __patchable_function_entries section without linked-to
section.

bfd/

PR ld/25490
* elflink.c (_bfd_elf_gc_mark_extra_sections): Issue an error
for garbage collection on __patchable_function_entries section
without linked-to section.

ld/

PR ld/25490
* testsuite/ld-elf/pr25490-1.d: New file.
* testsuite/ld-elf/pr25490-1.s: Likewise.

4 years agoELF: Support the section flag 'o' in .section directive
H.J. Lu [Fri, 7 Feb 2020 02:04:58 +0000 (18:04 -0800)]
ELF: Support the section flag 'o' in .section directive

As shown in

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

--gc-sections will silently remove __patchable_function_entries section
and generate corrupt result.  This patch adds the section flag 'o' to
.section directive:

.section __patchable_function_entries,"awo",@progbits,foo
.section __patchable_function_entries,"awoG",@progbits,foo,foo,comdat
.section __patchable_function_entries,"awo",@progbits,bar,unique,4
.section __patchable_function_entries,"awoG",@progbits,foo,foo,comdat,unique,1

which specifies the symbol name which the section references.  Assmebler
will set its elf_linked_to_section to a local section where the symbol
is defined.

Linker is updated to call mark_hook if gc_mark of any of its linked-to
sections is set after all sections, except for backend specific ones,
have been garbage collected.

bfd/

PR gas/25381
* bfd-in2.h: Regenerated.
* elflink.c (_bfd_elf_gc_mark_extra_sections): Call mark_hook
on section if gc_mark of any of its linked-to sections is set
and don't set gc_mark again.
* section.c (asection): Add linked_to_symbol_name to map_head
union.

gas/

PR gas/25381
* config/obj-elf.c (get_section): Also check
linked_to_symbol_name.
(obj_elf_change_section): Also set map_head.linked_to_symbol_name.
(obj_elf_parse_section_letters): Handle the 'o' flag.
(build_group_lists): Renamed to ...
(build_additional_section_info): This.  Set elf_linked_to_section
from map_head.linked_to_symbol_name.
(elf_adjust_symtab): Updated.
* config/obj-elf.h (elf_section_match): Add linked_to_symbol_name.
* doc/as.texi: Document the 'o' flag.
* testsuite/gas/elf/elf.exp: Run PR gas/25381 tests.
* testsuite/gas/elf/section18.d: New file.
* testsuite/gas/elf/section18.s: Likewise.
* testsuite/gas/elf/section19.d: Likewise.
* testsuite/gas/elf/section19.s: Likewise.
* testsuite/gas/elf/section20.d: Likewise.
* testsuite/gas/elf/section20.s: Likewise.
* testsuite/gas/elf/section21.d: Likewise.
* testsuite/gas/elf/section21.l: Likewise.
* testsuite/gas/elf/section21.s: Likewise.

ld/

PR ld/24526
PR ld/25021
PR ld/25490
* testsuite/ld-elf/elf.exp: Run PR ld/25490 tests.
* testsuite/ld-elf/pr24526.d: New file.
* testsuite/ld-elf/pr24526.s: Likewise.
* testsuite/ld-elf/pr25021.d: Likewise.
* testsuite/ld-elf/pr25021.s: Likewise.
* testsuite/ld-elf/pr25490-2-16.rd: Likewise.
* testsuite/ld-elf/pr25490-2-32.rd: Likewise.
* testsuite/ld-elf/pr25490-2-64.rd: Likewise.
* testsuite/ld-elf/pr25490-2.s: Likewise.
* testsuite/ld-elf/pr25490-3-16.rd: Likewise.
* testsuite/ld-elf/pr25490-3-32.rd: Likewise.
* testsuite/ld-elf/pr25490-3-64.rd: Likewise.
* testsuite/ld-elf/pr25490-3.s: Likewise.
* testsuite/ld-elf/pr25490-4-16.rd: Likewise.
* testsuite/ld-elf/pr25490-4-32.rd: Likewise.
* testsuite/ld-elf/pr25490-4-64.rd: Likewise.
* testsuite/ld-elf/pr25490-4.s: Likewise.
* testsuite/ld-elf/pr25490-5-16.rd: Likewise.
* testsuite/ld-elf/pr25490-5-32.rd: Likewise.
* testsuite/ld-elf/pr25490-5-64.rd: Likewise.
* testsuite/ld-elf/pr25490-5.s: Likewise.
* testsuite/ld-elf/pr25490-6-16.rd: Likewise.
* testsuite/ld-elf/pr25490-6-32.rd: Likewise.
* testsuite/ld-elf/pr25490-6-64.rd: Likewise.
* testsuite/ld-elf/pr25490-6.s: Likewise.

4 years agoAutomatic date update in version.in
GDB Administrator [Fri, 7 Feb 2020 00:00:18 +0000 (00:00 +0000)]
Automatic date update in version.in

4 years agosim/aarch64: Fix register ordering bug in blr (PR sim/25318)
Carlo Bramini [Thu, 6 Feb 2020 22:50:26 +0000 (22:50 +0000)]
sim/aarch64: Fix register ordering bug in blr (PR sim/25318)

A comment in the implementation of blr says:

  /* The pseudo code in the spec says we update LR before fetching.
     the value from the rn.  */

With 'rn' being the register holding the destination address.

This may have been true at one point, but the ISA manual now clearly
shows the destination register being read before the link register is
written.

This commit updates the implementation of blr to match.

sim/aarch64/ChangeLog:

PR sim/25318
* simulator.c (blr): Read destination register before calling
aarch64_save_LR.

Change-Id: Icb1c556064e3d9c807ac28440475caa205ab1064

4 years agogdb: Catch exceptions if the source file is not found
Shahab Vahedi [Thu, 6 Feb 2020 15:20:37 +0000 (16:20 +0100)]
gdb: Catch exceptions if the source file is not found

The source_cache::ensure method may throw an exception through
the invocation of source_cache::get_plain_source_lines. This
happens when the source file is not found. The expected behaviour
of "ensure" is only returning "true" or "false" according to the
documentation in the header file.

So far, if gdb is in source layout and a file is missing, you see
some outputs like below:

 ,---------------------------------------------.
 | test.c file is loaded in the source window. |
 |                                             |
 | int main()                                  |
 | ...                                         |
 |---------------------------------------------|
 | Remote debugging using :1234                |
 | __start () at /path/to/crt0.S:141           |
 | /path/to/crt0.S: No such file or directory. |
 | (gdb) p/x $pc                               |
 | $1 = 0x124                                  |
 | (gdb) n                                     |
 | /path/to/crt0.S: No such file or directory. |
 | (gdb) p/x $pc                               |
 | $2 = 0x128                                  |
 | (gdb) [pressing arrow-down key]             |
 | (gdb) terminate called after throwing an    |
 |       instance of 'gdb_exception_error'     |
 `---------------------------------------------'
Other issues have been encountered as well [1].

The patch from Pedro [2] which is about preventing exceptions
from crossing the "readline" mitigates the situation by not
causing gdb crash, but still there are lots of errors printed:

 ,---------------------------------------------.
 | test.c file is loaded in the source window. |
 |                                             |
 | int main()                                  |
 | ...                                         |
 |---------------------------------------------|
 | Remote debugging using :1234                |
 | __start () at /path/to/crt0.S:141           |
 | /path/to/crt0.S: No such file or directory. |
 | (gdb) [pressing arrow-down key]             |
 | /path/to/crt0.S: No such file or directory. |
 | (gdb) [pressing arrow-down key]             |
 | /path/to/crt0.S: No such file or directory. |
 | (gdb) [pressing arrow-up key]               |
 | /path/to/crt0.S: No such file or directory. |
 `---------------------------------------------'

With the changes of this patch, the behavior is like:
 ,---------------------------------------------.
 | initially, source window is empty because   |
 | crt0.S is not found and according to the    |
 | program counter that is the piece of code   |
 | being executed.                             |
 |                                             |
 | later, when we break at main (see commands  |
 | below), this window will be filled with the |
 | the contents of test.c file.                |
 |---------------------------------------------|
 | Remote debugging using :1234                |
 | __start () at /path/to/crt0.S:141           |
 | (gdb) p/x $pc                               |
 | $1 = 0x124                                  |
 | (gdb) n                                     |
 | (gdb) p/x $pc                               |
 | $2 = 0x128                                  |
 | (gdb) b main                                |
 | Breakpoint 1 at 0x334: file test.c, line 8. |
 | (gdb) cont                                  |
 | Continuing.                                 |
 | Breakpoint 1, main () at hello.c:8          |
 | (gdb) n                                     |
 | (gdb)                                       |
 `---------------------------------------------'

There is no crash and the error message is completely
gone. Maybe it is good practice that the error is
shown inside the source window.

I tested this change against gdb.base/list-missing-source.exp
and there was no regression.

[1]
It has also been observed in the past that the register
values are not transferred from qemu's gdb stub, see:
https://github.com/foss-for-synopsys-dwc-arc-processors/toolchain/issues/226

[2]
https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=2f267673f0fdee9287e6d404ecd4f2d29da0d2f2

gdb/ChangeLog:

* source-cache.c (source_cache::ensure): Surround
get_plain_source_lines with a try/catch.
(source_cache::get_line_charpos): Get rid of try/catch
and only check for the return value of "ensure".
* tui/tui-source.c (tui_source_window::set_contents):
Simplify "nlines" calculation.

gdb/testsuite/ChangeLog:

* gdb.tui/tui-missing-src.exp: Add the "missing source
file" test for the TUI.

4 years agogdb/testsuite: Avoid leaking a port number into results summary
Andrew Burgess [Thu, 6 Feb 2020 16:37:10 +0000 (16:37 +0000)]
gdb/testsuite: Avoid leaking a port number into results summary

Give a test a real name in order to avoid including a port number in
the results summary file - which makes comparing test results between
runs hard.

gdb/testsuiteChangeLog:

* gdb.server/multi-ui-errors.exp: Give a test a real name to avoid
including a port number in the output.

Change-Id: I19334e176ac15aee2a9732a6060c58153d9fb793

4 years agogdb: Add myself as one of GDB maintainer
Shahab Vahedi [Thu, 6 Feb 2020 15:56:40 +0000 (16:56 +0100)]
gdb: Add myself as one of GDB maintainer

May this be the beginning of a great flow of patches.

2020-02-06  Shahab Vahedi  <shahab@synopsys.com>

* MAINTAINERS (Write After Approval): Add myself.

4 years ago[2.34] Mention x86 assembler options to align branches
H.J. Lu [Thu, 6 Feb 2020 15:50:16 +0000 (07:50 -0800)]
[2.34] Mention x86 assembler options to align branches

* NEWS: Mention x86 assembler options to align branches for
binutils 2.34.

4 years agocheck_gc_sections_available: Mark z80 as not supported
H.J. Lu [Thu, 6 Feb 2020 14:40:30 +0000 (06:40 -0800)]
check_gc_sections_available: Mark z80 as not supported

[hjl@gnu-cfl-2 tmpdir]$ ../ld-new -V --gc-sections pr22319.o
GNU ld (GNU Binutils) 2.34.50.20200206
  Supported emulations:
   elf32z80
../ld-new: warning: gc-sections option ignored
../ld-new: warning: cannot find entry symbol _start; defaulting to 0000000000000100
[hjl@gnu-cfl-2 tmpdir]$

* testsuite/lib/ld-lib.exp (check_gc_sections_available): Mark
z80 as not supported.

4 years agoV850/BFD: Fix uninitialized `insn[4]' with R_V850_LONGJUMP warning
Maciej W. Rozycki [Thu, 6 Feb 2020 13:38:31 +0000 (13:38 +0000)]
V850/BFD: Fix uninitialized `insn[4]' with R_V850_LONGJUMP warning

Correctly point at `insn[2]' rather than `insn[4]' in determining that
the third instruction from where an R_V850_LONGJUMP relocation points at
is not a recognized one, fixing a problem with commit 86aba9dbfa7e ("Add
linker relaxation to v850 toolchain") resulting in a build failure like:

.../bfd/elf32-v850.c: In function 'v850_elf_relax_section':
.../bfd/elf32-v850.c:3854:5: error: 'insn[4]' may be used uninitialized in this function [-Werror=maybe-uninitialized]
 3854 |     _bfd_error_handler
      |     ^~~~~~~~~~~~~~~~~~
 3855 |       /* xgettext:c-format */
      |       ~~~~~~~~~~~~~~~~~~~~~~~
 3856 |       (_("%pB: %#" PRIx64 ": warning: %s points to "
      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 3857 |          "unrecognized insn %#x"),
      |          ~~~~~~~~~~~~~~~~~~~~~~~~~
 3858 |        abfd,
      |        ~~~~~
 3859 |        (uint64_t) (irel->r_offset + no_match),
      |        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 3860 |        "R_V850_LONGJUMP",
      |        ~~~~~~~~~~~~~~~~~~
 3861 |        insn[no_match]);
      |        ~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
Makefile:1608: recipe for target 'elf32-v850.lo' failed
make[4]: *** [elf32-v850.lo] Error 1

with GCC 10.

bfd/
* elf32-v850.c (v850_elf_relax_section): Fix the index used for
reporting an unrecognized instruction with R_V850_LONGJUMP.

4 years agoFix attributation of previous delta
Nick Clifton [Thu, 6 Feb 2020 13:34:00 +0000 (13:34 +0000)]
Fix attributation of previous delta

4 years agoJump visualization: Handle the case where the disassembled bytes occupy two lines.
Thomas Troeger [Thu, 6 Feb 2020 13:17:19 +0000 (13:17 +0000)]
Jump visualization: Handle the case where the disassembled bytes occupy two lines.

* objdump.c (print_jump_visualisation): New function.
(disassemble_bytes): Call new function.

4 years agox86: Run unique tests only for ELF targets
H.J. Lu [Thu, 6 Feb 2020 12:44:39 +0000 (04:44 -0800)]
x86: Run unique tests only for ELF targets

* testsuite/gas/i386/i386.exp: Run unique and x86-64-unique
only for ELF targets.
* testsuite/gas/i386/unique.d: Don't xfail.
* testsuite/gas/i386/x86-64-unique.d: Likewise.

4 years agoEnable ld-ifunc tests for more targets
Alan Modra [Thu, 6 Feb 2020 00:53:43 +0000 (11:23 +1030)]
Enable ld-ifunc tests for more targets

Also fix some ix86 fails.

* testsuite/ld-ifunc/ifunc.exp: Enable for more targets, specifying
targets that don't support ifunc rather than ones that do.
(contains_irelative_reloc): Match R_PARISC_IPLT.
* testsuite/ld-ifunc/lib.c: Don't use .set in asm.
* testsuite/ld-ifunc/ifunc-23-x86.s,
* testsuite/ld-ifunc/ifunc-24-x86.s,
* testsuite/ld-ifunc/ifunc-25-x86.s,
* testsuite/ld-ifunc/ifunc-4-local-x86.s,
* testsuite/ld-ifunc/ifunc-4-x86.s: Define _main.
* testsuite/ld-ifunc/ifunc-10-i386.d,
* testsuite/ld-ifunc/ifunc-11-i386.d,
* testsuite/ld-ifunc/ifunc-12-i386.d,
* testsuite/ld-ifunc/ifunc-13-i386.d,
* testsuite/ld-ifunc/ifunc-14a-i386.d,
* testsuite/ld-ifunc/ifunc-14b-i386.d,
* testsuite/ld-ifunc/ifunc-14c-i386.d,
* testsuite/ld-ifunc/ifunc-14d-i386.d,
* testsuite/ld-ifunc/ifunc-14e-i386.d,
* testsuite/ld-ifunc/ifunc-14f-i386.d,
* testsuite/ld-ifunc/ifunc-15-i386.d,
* testsuite/ld-ifunc/ifunc-16-i386-now.d,
* testsuite/ld-ifunc/ifunc-16-i386.d,
* testsuite/ld-ifunc/ifunc-17a-i386.d,
* testsuite/ld-ifunc/ifunc-17b-i386.d,
* testsuite/ld-ifunc/ifunc-18a-i386.d,
* testsuite/ld-ifunc/ifunc-18b-i386.d,
* testsuite/ld-ifunc/ifunc-19a-i386.d,
* testsuite/ld-ifunc/ifunc-19b-i386.d,
* testsuite/ld-ifunc/ifunc-2-i386-now.d,
* testsuite/ld-ifunc/ifunc-2-i386.d,
* testsuite/ld-ifunc/ifunc-2-local-i386-now.d,
* testsuite/ld-ifunc/ifunc-2-local-i386.d,
* testsuite/ld-ifunc/ifunc-20-i386.d,
* testsuite/ld-ifunc/ifunc-21-i386.d,
* testsuite/ld-ifunc/ifunc-22-i386.d,
* testsuite/ld-ifunc/ifunc-26.d,
* testsuite/ld-ifunc/ifunc-5a-i386.d,
* testsuite/ld-ifunc/ifunc-5a-local-i386.d,
* testsuite/ld-ifunc/ifunc-5b-i386.d,
* testsuite/ld-ifunc/ifunc-5b-local-i386.d,
* testsuite/ld-ifunc/ifunc-5r-local-i386.d,
* testsuite/ld-ifunc/ifunc-6a-i386.d,
* testsuite/ld-ifunc/ifunc-6b-i386.d,
* testsuite/ld-ifunc/ifunc-7a-i386.d,
* testsuite/ld-ifunc/ifunc-7b-i386.d,
* testsuite/ld-ifunc/ifunc-8-i386.d,
* testsuite/ld-ifunc/ifunc-9-i386.d,
* testsuite/ld-ifunc/pr17154-i386-now.d,
* testsuite/ld-ifunc/pr17154-i386.d: xfail lynxos, nto, and solaris.

4 years agoxfail x86 gas unique test
Alan Modra [Thu, 6 Feb 2020 00:22:29 +0000 (10:52 +1030)]
xfail x86 gas unique test

* testsuite/gas/i386/unique.d: xfail for non-elf targets.
* testsuite/gas/i386/x86-64-unique.d: Likewise.