]> sourceware.org Git - binutils-gdb.git/log
binutils-gdb.git
4 years agogdb: move Modula2 language class into a header file
Andrew Burgess [Fri, 14 Aug 2020 13:50:48 +0000 (14:50 +0100)]
gdb: move Modula2 language class into a header file

Move the m2_language class from m2-lang.c into m2-lang.h.  The benefit
of this move is that we can remove trampoline functions.  Currently
the language implementation is split of different m2-* files with
m2-lang.h including declaration for all the language implementation
functions.

Currently the m2_language class in m2-lang.c has member functions that
then call the global functions declared in m2-lang.h.

After this change the m2_language class is declared in m2-lang.h, and
the member functions are the implementations defined in all the m2-*
files.

There should be no user visible changes after this commit.

gdb/ChangeLog:

* m2-exp.y (m2_parse): Rename to...
(m2_language::parser): ...this.  Update function signature.
* m2-lang.c (m2_printchar): Renamed to m2_language::printchar.
(m2_op_print): Rename to...
(m2_language::op_print_tab): ...this, and make const.
(exp_descriptor_modula2): Rename to...
(m2_language::exp_descriptor_modula2): ...this.
(class m2_language): Move to m2-lang.h.
(m2_language::language_arch_info): New function, moved out of
class declaration.
(m2_language::printchar): New function, body from m2_printchar.
(m2_language::printstr): New function, moved out of class
declaration.
(m2_language::emitchar): Likewise.
* m2-lang.h (m2_parse): Delete declaration.
(m2_print_typedef): Delete declaration.
(m2_value_print_inner): Delete declaration.
(class m2_language): Class declaration moved from m2-lang.c,
larger functions are left in m2-lang.c.
* m2-typeprint.c (m2_print_typedef): Rename to...
(m2_language::print_typedef): ...this, and update function
signature.
* m2-valprint.c (m2_value_print_inner): Rename to...
(m2_language::value_print_inner): ...this, replace use of
LA_PRINT_STRING with a direct call to printstr member function,
and update recursive call.

4 years agogdb: Merge auto and unknown language implementations
Andrew Burgess [Thu, 6 Aug 2020 10:14:37 +0000 (11:14 +0100)]
gdb: Merge auto and unknown language implementations

The auto_language and unknown_language classes are basically the same
except for the language names and store_sym_names_in_linkage_form_p
which the unknown_language overrides to return true, while
auto_language returns the default false.

This commit creates a new parent class from which both of these
languages can inherit.  The two base classes are now greatly reduced.

Some of the static helper functions which previously were called from
both of these languages are now only called from one place, and so
I've inlined them into the new class.

There should be no user visible changes after this commit.

gdb/ChangeLog:

* language.c (default_is_string_type_p): Delete, implementation
moved into auto_or_unknown_language::is_string_type_p.
(unk_op_print_tab): Moved into
auto_or_unknown_language::opcode_print_table.
(unknown_language_arch_info): Delete, implementation moved into
auto_or_unknown_language::language_arch_info.
(class auto_or_unknown_language): New class, member functions
copied from unknown_language class, with some updates.
(class unknown_language): Most member functions moved into
auto_or_unknown_language class.  Inherit from
auto_or_unknown_language class.
(class auto_language): Inherit from auto_or_unknown_language.
Delete most member functions.

4 years agoAutomatic date update in version.in
GDB Administrator [Fri, 23 Oct 2020 00:00:19 +0000 (00:00 +0000)]
Automatic date update in version.in

4 years agoRemove gdb_assert for TYPE_CODE_METHOD in stabs reader
Hannes Domani [Tue, 6 Oct 2020 15:20:20 +0000 (17:20 +0200)]
Remove gdb_assert for TYPE_CODE_METHOD in stabs reader

It's possible to come across TYPE_CODE_UNDEF at this point in
read_member_functions, which according to a comment in read_type
is used for forward references.

gdb/ChangeLog:

2020-10-22  Hannes Domani  <ssbssa@yahoo.de>

* stabsread.c (read_member_functions): Remove gdb_assert.

4 years agoDon't create _Complex type name if there is no target type name
Hannes Domani [Tue, 6 Oct 2020 15:08:42 +0000 (17:08 +0200)]
Don't create _Complex type name if there is no target type name

This causes gdb to crash in strlen.

Happens if init_complex_type is called for a type created by
dbx_init_float_type in stabsread.c.

gdb/ChangeLog:

2020-10-22  Hannes Domani  <ssbssa@yahoo.de>

* gdbtypes.c (init_complex_type): Check target type name.

4 years agogdb: remove unused macros from target-debug.h
Simon Marchi [Thu, 22 Oct 2020 17:28:12 +0000 (13:28 -0400)]
gdb: remove unused macros from target-debug.h

I noticed some clearly stale entries in target-debug.h (which contained
references to VEC).  I commented everything in target-debug.h and then
uncommented things until it built again, it pointed out a few unused
macros.  Remove them.

gdb/ChangeLog:

* target-debug.h (target_debug_print_struct_target_ops_p):
Remove.
(target_debug_print_async_callback_ftype_p): Remove.
(target_debug_print_struct_trace_state_variable_p): Remove.
(target_debug_print_struct_traceframe_info_p): Remove.
(target_debug_print_VEC__btrace_block_s__pp): Remove.
(target_debug_print_enum_btrace_format): Remove.
(target_debug_print_enum_info_proc_what): Remove.
(target_debug_print_thread_info_pp): Remove.

Change-Id: I7943d21ac6e78751fd7c65a45b345018623ac2f2

4 years agogdb: make target_ops::make_corefile_notes return a unique ptr
Simon Marchi [Thu, 22 Oct 2020 16:58:11 +0000 (12:58 -0400)]
gdb: make target_ops::make_corefile_notes return a unique ptr

Since we converted gdbarch_make_corefile_notes to returning a
gdb::unique_xmalloc_ptr, I figured it would make sense to converted
target_ops::make_corefile_notes as well.

The only implementation of that is in procfs.c, and it should ideally be
re-written as a gdbarch method (see comment in write_gcore_file_1), but
in the mean time I guess it doesn't hurt to throw some unique pointer at
it.

I tested that it builds on Solaris 11 (gcc compile farm machine gcc211),
but I am not able to test it, because I can't get GDB to start a
process (I'll look at that separately).

gdb/ChangeLog:

* target.h (struct target_ops) <make_corefile_notes>:
Change return type to unique pointer.
* target.c (dummy_make_corefile_notes): Likewise.
* exec.c (struct exec_target) <make_corefile_notes>:
Likewise.
(exec_target::make_corefile_notes): Likewise.
* procfs.c (class procfs_target) <make_corefile_notes>:
Likewise.
(procfs_do_thread_registers): Adjust to unique pointer.
(struct procfs_corefile_thread_data): Add constructor.
<note_data>: Change type to unique pointer.
(procfs_corefile_thread_callback): Adjust to unique pointer.
(procfs_target::make_corefile_notes): Change return type to
unique pointer.
* target-delegates.c: Re-generate.
* gcore.c (write_gcore_file_1): Adjust.
* target-debug.h (target_debug_print_gdb_unique_xmalloc_ptr_char):
New.

Change-Id: I768fb17ac0f7adc67d2fe95e952c784fe0ac37ab

4 years ago[gdb/symtab] Make find_block_in_blockvector more robust
Tom de Vries [Thu, 22 Oct 2020 15:23:25 +0000 (17:23 +0200)]
[gdb/symtab] Make find_block_in_blockvector more robust

While working on PR25858 I noticed that the following trigger patch:
...
@@ -2918,6 +2918,7 @@ find_pc_sect_compunit_symtab
          const struct blockvector *bv;

          bv = COMPUNIT_BLOCKVECTOR (cust);
+         (volatile int)blockvector_contains_pc (bv, pc);
          b = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);

          if (BLOCK_START (b) <= pc
...
triggers this assert, which checks that the returned block indeed
contains pc:
...
@@ -170,7 +170,10 @@ find_block_in_blockvector

     {
       b = BLOCKVECTOR_BLOCK (bl, bot);
       if (BLOCK_END (b) > pc)
-       return b;
+       {
+         gdb_assert (BLOCK_START (b) <= pc);
+         return b;
+       }
       bot--;
     }

...
when running test-case gdb.ada/bp_c_mixed_case.exp.

It's possible that the trigger patch breaks an undocumented invariant:  I've
tried a build and test run without the trigger patch and did not manage to
trigger the assert.

For robustness-sake, fix the assert by bailing out if 'BLOCK_START (b) <= pc'
doesn't hold.

Tested on x86_64-linux.

gdb/ChangeLog:

2020-10-22  Tom de Vries  <tdevries@suse.de>

* block.c (find_block_in_blockvector): Make sure the returned block
contains pc.

4 years agogdb/dwarf: fix reading subprogram with DW_AT_specification (PR gdb/26693)
Simon Marchi [Thu, 22 Oct 2020 14:27:39 +0000 (10:27 -0400)]
gdb/dwarf: fix reading subprogram with DW_AT_specification (PR gdb/26693)

Fix a regression introduced by commit 7188ed02d2a7 ("Replace
dwarf2_per_cu_data::cu backlink with per-objfile map").

This patch targets both master and gdb-10-branch, since this is a
regression from GDB 9.

Analysis
--------

The DWARF generated by the included test case looks like:

    0x0000000b: DW_TAG_compile_unit
                  DW_AT_language [DW_FORM_sdata]    (4)

    0x0000000d:   DW_TAG_base_type
                    DW_AT_name [DW_FORM_string]     ("int")
                    DW_AT_byte_size [DW_FORM_data1] (0x04)
                    DW_AT_encoding [DW_FORM_sdata]  (5)

    0x00000014:   DW_TAG_subprogram
                    DW_AT_name [DW_FORM_string]     ("apply")

    0x0000001b:   DW_TAG_subprogram
                    DW_AT_specification [DW_FORM_ref4]      (0x00000014 "apply")
                    DW_AT_low_pc [DW_FORM_addr]     (0x0000000000001234)
                    DW_AT_high_pc [DW_FORM_data8]   (0x0000000000000020)

    0x00000030:     DW_TAG_template_type_parameter
                      DW_AT_name [DW_FORM_string]   ("T")
                      DW_AT_type [DW_FORM_ref4]     (0x0000000d "int")

    0x00000037:     NULL

    0x00000038:   NULL

Simply loading the file in GDB makes it crash:

    $ ./gdb -nx --data-directory=data-directory testsuite/outputs/gdb.dwarf2/pr26693/pr26693
    [1]    15188 abort (core dumped)  ./gdb -nx --data-directory=data-directory

The crash happens here, where htab (a dwarf2_cu::die_hash field) is
unexpectedly NULL while generating partial symbols:

    #0  0x000055555fa28188 in htab_find_with_hash (htab=0x0, element=0x7fffffffbfa0, hash=27) at /home/simark/src/binutils-gdb/libiberty/hashtab.c:591
    #1  0x000055555cb4eb2e in follow_die_offset (sect_off=(unknown: 27), offset_in_dwz=0, ref_cu=0x7fffffffc110) at /home/simark/src/binutils-gdb/gdb/dwarf2/read.c:22951
    #2  0x000055555cb4edfb in follow_die_ref (src_die=0x0, attr=0x7fffffffc130, ref_cu=0x7fffffffc110) at /home/simark/src/binutils-gdb/gdb/dwarf2/read.c:22968
    #3  0x000055555caa48c5 in partial_die_full_name (pdi=0x621000157e70, cu=0x615000023f80) at /home/simark/src/binutils-gdb/gdb/dwarf2/read.c:8441
    #4  0x000055555caa4d79 in add_partial_symbol (pdi=0x621000157e70, cu=0x615000023f80) at /home/simark/src/binutils-gdb/gdb/dwarf2/read.c:8469
    #5  0x000055555caa7d8c in add_partial_subprogram (pdi=0x621000157e70, lowpc=0x7fffffffc5c0, highpc=0x7fffffffc5e0, set_addrmap=1, cu=0x615000023f80) at /home/simark/src/binutils-gdb/gdb/dwarf2/read.c:8737
    #6  0x000055555caa265c in scan_partial_symbols (first_die=0x621000157e00, lowpc=0x7fffffffc5c0, highpc=0x7fffffffc5e0, set_addrmap=1, cu=0x615000023f80) at /home/simark/src/binutils-gdb/gdb/dwarf2/read.c:8230
    #7  0x000055555ca98e3f in process_psymtab_comp_unit_reader (reader=0x7fffffffc6b0, info_ptr=0x60600009650d "\003int", comp_unit_die=0x621000157d10, pretend_language=language_minimal) at /home/simark/src/binutils-gdb/gdb/dwarf2/read.c:7614
    #8  0x000055555ca9aa2c in process_psymtab_comp_unit (this_cu=0x621000155510, per_objfile=0x613000009f80, want_partial_unit=false, pretend_language=language_minimal) at /home/simark/src/binutils-gdb/gdb/dwarf2/read.c:7712
    #9  0x000055555caa051a in dwarf2_build_psymtabs_hard (per_objfile=0x613000009f80) at /home/simark/src/binutils-gdb/gdb/dwarf2/read.c:8073

The special thing about this DWARF is that the subprogram at 0x1b is a
template specialization described with DW_AT_specification, and has no
DW_AT_name in itself.  To compute the name of this subprogram,
partial_die_full_name needs to load the full DIE for this partial DIE.
The name is generated from the templated function name and the actual
tempalate parameter values of the specialization.

To load the full DIE, partial_die_full_name creates a dummy DWARF
attribute of form DW_FORM_ref_addr that points to our subprogram's DIE,
and calls follow_die_ref on it.  This eventually causes
load_full_comp_unit to be called for the exact same CU we are currently
making partial symbols for:

    #0  load_full_comp_unit (this_cu=0x621000155510, per_objfile=0x613000009f80, skip_partial=false, pretend_language=language_minimal) at /home/simark/src/binutils-gdb/gdb/dwarf2/read.c:9238
    #1  0x000055555cb4e943 in follow_die_offset (sect_off=(unknown: 27), offset_in_dwz=0, ref_cu=0x7fffffffc110) at /home/simark/src/binutils-gdb/gdb/dwarf2/read.c:22942
    #2  0x000055555cb4edfb in follow_die_ref (src_die=0x0, attr=0x7fffffffc130, ref_cu=0x7fffffffc110) at /home/simark/src/binutils-gdb/gdb/dwarf2/read.c:22968
    #3  0x000055555caa48c5 in partial_die_full_name (pdi=0x621000157e70, cu=0x615000023f80) at /home/simark/src/binutils-gdb/gdb/dwarf2/read.c:8441
    #4  0x000055555caa4d79 in add_partial_symbol (pdi=0x621000157e70, cu=0x615000023f80) at /home/simark/src/binutils-gdb/gdb/dwarf2/read.c:8469
    #5  0x000055555caa7d8c in add_partial_subprogram (pdi=0x621000157e70, lowpc=0x7fffffffc5c0, highpc=0x7fffffffc5e0, set_addrmap=1, cu=0x615000023f80) at /home/simark/src/binutils-gdb/gdb/dwarf2/read.c:8737
    #6  0x000055555caa265c in scan_partial_symbols (first_die=0x621000157e00, lowpc=0x7fffffffc5c0, highpc=0x7fffffffc5e0, set_addrmap=1, cu=0x615000023f80) at /home/simark/src/binutils-gdb/gdb/dwarf2/read.c:8230
    #7  0x000055555ca98e3f in process_psymtab_comp_unit_reader (reader=0x7fffffffc6b0, info_ptr=0x60600009650d "\003int", comp_unit_die=0x621000157d10, pretend_language=language_minimal) at /home/simark/src/binutils-gdb/gdb/dwarf2/read.c:7614
    #8  0x000055555ca9aa2c in process_psymtab_comp_unit (this_cu=0x621000155510, per_objfile=0x613000009f80, want_partial_unit=false, pretend_language=language_minimal) at /home/simark/src/binutils-gdb/gdb/dwarf2/read.c:7712
    #9  0x000055555caa051a in dwarf2_build_psymtabs_hard (per_objfile=0x613000009f80) at /home/simark/src/binutils-gdb/gdb/dwarf2/read.c:8073

load_full_comp_unit creates a cutu_reader for the CU.  Since a dwarf2_cu
object already exists for the CU, load_full_comp_unit is expected to
find it and pass it to cutu_reader, so that cutu_reader doesn't create
a new dwarf2_cu for the CU.

And this is the difference between before and after the regression.
Before commit 7188ed02d2a7, the dwarf2_per_cu_data -> dwarf2_cu link was
a simple pointer in dwarf2_per_cu_data.  This pointer was set up when
starting the read the partial symbols.  So it was already available at
that point where load_full_comp_unit gets called.  Post-7188ed02d2a7,
this link is per-objfile, kept in the dwarf2_per_objfile::m_dwarf2_cus
hash map.  The entry is only put in the hash map once the partial
symbols have been successfully read, when cutu_reader::keep is called.
Therefore, it is _not_ set at the point load_full_comp_unit is called.

As a consequence, a new dwarf2_cu object gets created and initialized by
load_full_comp_unit (including initializing that dwarf2_cu::die_hash
field).  Meanwhile, the dwarf2_cu object created and used by the callers
up the stack does not get initialized for full symbol reading, and the
dwarf2_cu::die_hash field stays unexpectedly NULL.

Solution
--------

Since the caller of load_full_comp_unit knows about the existing
dwarf2_cu object for the CU we are reading (the one load_full_comp_unit
is expected to find), we can simply make it pass it down, instead of
having load_full_comp_unit look up the per-objfile map.

load_full_comp_unit therefore gets a new `existing_cu` parameter.  All
other callers get updated to pass `per_objfile->get_cu (per_cu)`, so the
behavior shouldn't change for them, compared to the current HEAD.

A test is added, which is the bare minimum to reproduce the issue.

Notes
-----

The original problem was reproduced by downloading

    https://github.com/oneapi-src/oneTBB/releases/download/v2020.3/tbb-2020.3-lin.tgz

and loading libtbb.so in GDB.  This code was compiled with the Intel
C/C++ compiler.  I was not able to reproduce the issue using GCC, I
think because GCC puts a DW_AT_name in the specialized subprogram, so
there's no need for partial_die_full_name to load the full DIE of the
subprogram, and the faulty code doesn't execute.

gdb/ChangeLog:

PR gdb/26693
* dwarf2/read.c (load_full_comp_unit): Add existing_cu
parameter.
(load_cu): Pass existing CU.
(process_imported_unit_die): Likewise.
(follow_die_offset): Likewise.

gdb/testsuite/ChangeLog:

PR gdb/26693
* gdb.dwarf2/template-specification-full-name.exp: New test.

Change-Id: I57c8042f96c45f15797a3848e4d384181c56bb44

4 years agoFix gdb.base/msym*.exp failures
Luis Machado [Wed, 14 Oct 2020 22:44:03 +0000 (19:44 -0300)]
Fix gdb.base/msym*.exp failures

AArch64 generates functions without a prologue for these two testcases,
therefore we shouldn't expect the function location to be displayed with
an offset.

gdb/testsuite/ChangeLog:

2020-10-22  Luis Machado  <luis.machado@linaro.org>

* gdb.base/msym-bp-shl.exp (test_break): Adjust pattern to not
expected an offset from the function.
* gdb.base/msym-bp.exp (test): Likewise.

4 years ago[PATCH][GAS][AArch64] Define BRBE system registers
Przemyslaw Wirkus [Thu, 22 Oct 2020 14:17:35 +0000 (15:17 +0100)]
[PATCH][GAS][AArch64] Define BRBE system registers

This patch introduces BRBE (Branch Record Buffer Extension) system
registers.

Note: as this is register only extension we do not want to hide these
registers behind -march flag going forward (they should be enabled by
default).

gas/ChangeLog:

2020-10-08  Przemyslaw Wirkus  <przemyslaw.wirkus@arm.com>

* NEWS: Docs update.
* testsuite/gas/aarch64/brbe-invalid.d: New test.
* testsuite/gas/aarch64/brbe-invalid.l: New test.
* testsuite/gas/aarch64/brbe-invalid.s: New test.
* testsuite/gas/aarch64/brbe.d: New test.
* testsuite/gas/aarch64/brbe.s: New test.

opcodes/ChangeLog:

2020-10-08  Przemyslaw Wirkus  <przemyslaw.wirkus@arm.com>

* aarch64-opc.c: Add BRBE system registers.

4 years agoaarch64: Define CSRE system registers
Przemyslaw Wirkus [Thu, 22 Oct 2020 14:17:10 +0000 (15:17 +0100)]
aarch64: Define CSRE system registers

This patch introduces CSRE (Call Stack Recorder Extension) system
registers.

Note: as this is register only extension we do not want to hide these
registers behind -march flag going forward (they should be enabled by
default).

CSRE feature adds CSR PDEC (Decrements Call stack pointer by the size
of a Call stack record) instruction. This instruction will be added in
a following, separate patch. This change only adds CSRE system
registers.

gas/ChangeLog:

2020-10-08  Przemyslaw Wirkus  <przemyslaw.wirkus@arm.com>

* NEWS: Docs update.
* testsuite/gas/aarch64/csre-invalid.d: New test.
* testsuite/gas/aarch64/csre-invalid.l: New test.
* testsuite/gas/aarch64/csre-invalid.s: New test.
* testsuite/gas/aarch64/csre.d: New test.
* testsuite/gas/aarch64/csre.s: New test.

opcodes/ChangeLog:

2020-10-08  Przemyslaw Wirkus  <przemyslaw.wirkus@arm.com>

* aarch64-opc.c: New CSRE system registers defined.

4 years agogold: Skip bootstrap-test/bootstrap-test-r for LTO build
H.J. Lu [Thu, 22 Oct 2020 13:11:34 +0000 (06:11 -0700)]
gold: Skip bootstrap-test/bootstrap-test-r for LTO build

Skip bootstrap-test and bootstrap-test-r for LTO build due to different
build IDs.

* Makefile.am (bootstrap-test): Skip for LTO build.
(bootstrap-test-r): Likewise.

4 years agold: Skip bootstrap tests for -fprofile-generate=
H.J. Lu [Thu, 22 Oct 2020 13:10:08 +0000 (06:10 -0700)]
ld: Skip bootstrap tests for -fprofile-generate=

Make plug_opt available to all linker tests.  Skip bootstrap tests when
linker is compiled with -fprofile-generate=.

* testsuite/ld-plugin/lto.exp (plug_opt): Moved to ...
* testsuite/config/default.exp (plug_opt): Here.  New.
* testsuite/ld-bootstrap/bootstrap.exp: Skip when linker is
compiled with -fprofile-generate=.

4 years agoFix gdb.base/corefile2.exp regression when running Docker/AUFS
Luis Machado [Wed, 14 Oct 2020 22:11:09 +0000 (19:11 -0300)]
Fix gdb.base/corefile2.exp regression when running Docker/AUFS

The following failures started showing up after commit
bb2a67773c - "Use a std::vector in target_section_table":

FAIL: gdb.base/corefile2.exp: renamed binfile: print/x mbuf_ro[0]@4
FAIL: gdb.base/corefile2.exp: renamed binfile: print/x mbuf_ro[pagesize-4]@4
FAIL: gdb.base/corefile2.exp: renamed binfile: print/x mbuf_ro[-3]@6
FAIL: gdb.base/corefile2.exp: renamed binfile: print/x mbuf_rw[pagesize-3]@6
FAIL: gdb.base/corefile2.exp: renamed binfile: print/x mbuf_ro[pagesize-3]@6

I tracked it down to a problem in core_target::xfer_partial, at this point:

if (!m_core_file_mappings.empty ())
  xfer_status = xfer_memory_via_mappings (readbuf, writebuf, offset,
  len, xfered_len);
else
  xfer_status = this->beneath ()->xfer_partial (object, annex, readbuf,
writebuf, offset, len,
xfered_len);

It seems commit bb2a67773c uncovered a latent bug when handling a particular
case where things are running within a Docker container using the AUFS storage
driver.

When building the file mappings for a core file, we call
gdbarch_read_core_file_mappings, which in turn passes a couple lambda
callbacks. One pre-loop and one in-loop.

The catch is that commit bb2a67773c reworked the pre-loop lambda and
made it do nothing. Before that commit, we always allocated
m_core_file_mappings in that lambda.

Now, when calling the in-loop lambda, we don't touch m_core_file_mappings
because the bfd is nullptr (given Docker leaks the host system path, and that
file doesn't exist within the container itself).

So, instead, we add an entry to the m_core_unavailable_mappings vector.

When we reach core_target::xfer_partial, we're only checking for an empty
m_core_file_mappings. Given it is now empty, we take the path of reading
the contents from the file, not the core file. This reads back unexpected
results.

The following patch fixes this by also checking for
m_core_unavailable_mappings, given core_target::xfer_memory_via_mappings
already handles the Docker/AUFS situation.

gdb/ChangeLog:

2020-10-22  Luis Machado  <luis.machado@linaro.org>

* corelow.c (core_target::xfer_partial): Also check for an empty
m_core_unavailable_mappings vector.

4 years agold: Pass -fno-lto to non LTO tests
H.J. Lu [Thu, 22 Oct 2020 13:04:21 +0000 (06:04 -0700)]
ld: Pass -fno-lto to non LTO tests

* testsuite/config/default.exp (NOLTO_CFLAGS): New.
* ld/testsuite/ld-elfcomm/elfcomm.exp: Add $NOLTO_CFLAGS to CC.
* testsuite/ld-elfvers/vers.exp: Likewise.
* testsuite/ld-elfvsb/elfvsb.exp: Likewise.
* testsuite/ld-gc/gc.exp: Likewise.
* testsuite/ld-plugin/plugin.exp: Likewise.
* testsuite/ld-scripts/crossref.exp: Likewise.
* testsuite/ld-selective/selective.exp: Likewise.
* testsuite/ld-undefined/undefined.exp: Likewise.
* testsuite/ld-srec/srec.exp: Add $NOLTO_CFLAGS to CC.  Override
CXXFLAGS.
* testsuite/lib/ld-lib.exp (run_ld_link_tests): Prepend -fno-lto
to cflags.

4 years agosim: move ChangeLog entries into the correct files
Andrew Burgess [Thu, 22 Oct 2020 12:37:56 +0000 (13:37 +0100)]
sim: move ChangeLog entries into the correct files

Moves some ChangeLog entries under sim/ into the correct files.

4 years agoarm: Fix the wrong error message string for mve vldr/vstr (PR26763).
Srinath Parvathaneni [Thu, 22 Oct 2020 12:24:34 +0000 (13:24 +0100)]
arm: Fix the wrong error message string for mve vldr/vstr (PR26763).

For mve vldr/vstr instructions assembler is throwing wrong error message.
Instead of 'Error: syntax error' assembler fails with 'Error: lo register required'.
This patch fixes the issue.

eg:
$ cat x.s
.syntax unified
.thumb

vldrb.s16 q0, r0

Before this patch:
$ arm-none-eabi-as x.s -march=armv8.1-m.main+mve -mfloat-abi=hard
x.s: Assembler messages:
x.s:4: Error: lo register required -- `vldrb.s16 q0,r0'

After this patch:
$ arm-none-eabi-as x.s -march=armv8.1-m.main+mve -mfloat-abi=hard
x.s: Assembler messages:
x.s:4: Error: syntax error -- `vldrb.s16 q0,r0'

gas/ChangeLog:

2020-10-21  Srinath Parvathaneni  <srinath.parvathaneni@arm.com>

PR target/26763
* config/tc-arm.c (parse_address_main): Add new MVE addressing mode
check.
* testsuite/gas/arm/mve-vldr-vstr-bad.d: New test.
* testsuite/gas/arm/mve-vldr-vstr-bad.l: Likewise.
* testsuite/gas/arm/mve-vldr-vstr-bad.s: Likewise.

4 years agoopcodes/po/es.po: Remove the duplicated entry
H.J. Lu [Thu, 22 Oct 2020 12:21:35 +0000 (05:21 -0700)]
opcodes/po/es.po: Remove the duplicated entry

Remove the duplicated entry in opcodes/po/es.po:

binutils-gdb/opcodes/po/es.po:749: duplicate message definition...
binutils-gdb/opcodes/po/es.po:742: ...this is the location of the first definition

* po/es.po: Remove the duplicated entry.

4 years agobinutils: Report error message on error
H.J. Lu [Thu, 22 Oct 2020 11:48:11 +0000 (04:48 -0700)]
binutils: Report error message on error

* testsuite/binutils-all/objcopy.exp (objcopy_test): Report
error message on error.

4 years agoFix printf formatting errors where "0x" is used as a prefix for a decimal number.
Dr. David Alan Gilbert [Thu, 22 Oct 2020 11:00:10 +0000 (12:00 +0100)]
Fix printf formatting errors where "0x" is used as a prefix for a decimal number.

bfd * po/es.po: Fix printf format

binutils * windmc.c: Fix printf format

gas * config/tc-arc.c: Fix printf format

opcodes * po/es.po: Fix printf format

sim * arm/armos.c: Fix printf format
* ppc/emul_netbsd.c: Fix printf format
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK

4 years agogdb/fortran: add support for parsing array strides in expressions
Andrew Burgess [Thu, 8 Oct 2020 15:34:58 +0000 (16:34 +0100)]
gdb/fortran: add support for parsing array strides in expressions

With this commit GDB now understands the syntax of Fortran array
strides, a user can type an expression including an array stride, but
they will only get an error informing them that array strides are not
supported.

This alone is an improvement on what we had before in GDB, better to
give the user a helpful message that a particular feature is not
supported than to just claim a syntax error.

Before:

  (gdb) p array (1:10:2, 2:10:2)
  A syntax error in expression, near `:2, 2:10:2)'.

Now:

  (gdb) p array (1:10:2, 2:10:2)
  Fortran array strides are not currently supported

Later commits will allow GDB to handle array strides correctly.

gdb/ChangeLog:

* expprint.c (dump_subexp_body_standard): Print RANGE_HAS_STRIDE.
* expression.h (enum range_type): Add RANGE_HAS_STRIDE.
* f-exp.y (arglist): Allow for a series of subranges.
(subrange): Add cases for subranges with strides.
* f-lang.c (value_f90_subarray): Catch use of array strides and
throw an error.
* parse.c (operator_length_standard): Handle RANGE_HAS_STRIDE.

gdb/testsuite/ChangeLog:

* gdb.fortran/array-slices.exp: Add a new test.

4 years agogdb: rename 'enum range_type' to 'enum range_flag'
Andrew Burgess [Fri, 25 Sep 2020 23:09:25 +0000 (00:09 +0100)]
gdb: rename 'enum range_type' to 'enum range_flag'

To avoid confusion with other parts of GDB relating to types and
ranges, rename this enum to make it clearer that it is a set of
individual flags rather than an enumeration of different types of
range.

There should be no user visible changes after this commit.

gdb/ChangeLog:

* expprint.c (print_subexp_standard): Change enum range_type to
range_flag and rename variables to match.
(dump_subexp_body_standard): Likewise.
* expression.h (enum range_type): Rename to...
(enum range_flag): ...this.
(range_types): Rename to...
(range_flags): ...this.
* f-lang.c (value_f90_subarray): Change enum range_type to
range_flag and rename variables to match.
* parse.c (operator_length_standard): Likewise.
* rust-exp.y (rust_parser::convert_ast_to_expression): Change enum
range_type to range_flag.
* rust-lang.c (rust_evaluate_funcall): Likewise.
(rust_range): Likewise.
(rust_compute_range): Likewise.
(rust_subscript): Likewise.

4 years agogdb: Convert enum range_type to a bit field enum
Andrew Burgess [Tue, 5 May 2020 15:03:53 +0000 (16:03 +0100)]
gdb: Convert enum range_type to a bit field enum

The expression range_type enum represents the following ideas:

  - Lower bound is set to default,
  - Upper bound is set to default,
  - Upper bound is exclusive.

There are currently 6 entries in the enum to represent the combination
of all those ideas.

In a future commit I'd like to add stride information to the range,
this could in theory appear with any of the existing enum entries, so
this would take us to 12 enum entries.

This feels like its getting a little out of hand, so in this commit I
switch the range_type enum over to being a flags style enum.  There's
one entry to represent no flags being set, then 3 flags to represent
the 3 ideas above.  Adding stride information will require adding only
one more enum flag.

I've then gone through and updated the code to handle this change.

There should be no user visible changes after this commit.

gdb/ChangeLog:

* expprint.c (print_subexp_standard): Update to reflect changes to
enum range_type.
(dump_subexp_body_standard): Likewise.
* expression.h (enum range_type): Convert to a bit field enum, and
make the enum unsigned.
* f-exp.y (subrange): Update to reflect changes to enum
range_type.
* f-lang.c (value_f90_subarray): Likewise.
* parse.c (operator_length_standard): Likewise.
* rust-exp.y (rust_parser::convert_ast_to_expression): Likewise.
* rust-lang.c (rust_range): Likewise.
(rust_compute_range): Likewise.
(rust_subscript): Likewise.

4 years agoAutomatic date update in version.in
GDB Administrator [Thu, 22 Oct 2020 00:00:09 +0000 (00:00 +0000)]
Automatic date update in version.in

4 years agogdb: fix two comments in infrun
Simon Marchi [Wed, 21 Oct 2020 19:55:58 +0000 (15:55 -0400)]
gdb: fix two comments in infrun

These comments are stale, they refer to non-existent parameters.  Fix
that.

gdb/ChangeLog:

* infrun.c (displaced_step_in_progress_thread): Fix comment.
(displaced_step_in_progress): Fix comment.

Change-Id: I7a39f1338fbfbf73153b49cbca0345d495d12762

4 years agoRemove libctf/mkerrors.sed
Tom Tromey [Wed, 21 Oct 2020 14:54:17 +0000 (08:54 -0600)]
Remove libctf/mkerrors.sed

This patch removes libctf/mkerrors.sed, replacing it with a macro in
ctf-api.h.  This simplifies the build and avoids possible unportable
code in the sed script.

2020-10-21  Tom Tromey  <tromey@adacore.com>

* ctf-api.h (_CTF_ERRORS): New macro.

libctf/ChangeLog
2020-10-21  Tom Tromey  <tromey@adacore.com>

* mkerrors.sed: Remove.
* ctf-error.c (_CTF_FIRST): New define.
(_CTF_ITEM): Define this, not _CTF_STR.
(_ctf_errlist, _ctf_erridx): Use _CTF_ERRORS.
(ERRSTRFIELD): Rewrite.
(ERRSTRFIELD1): Remove.
* Makefile.in: Rebuild.
* Makefile.am (BUILT_SOURCES): Remove.
(ctf-error.h): Remove.

4 years agoaarch64: Add testcase for HCR_EL2 system register
Przemyslaw Wirkus [Wed, 21 Oct 2020 17:28:27 +0000 (18:28 +0100)]
aarch64: Add testcase for HCR_EL2 system register

HCR_EL2 is a 64-bit Hypervisor Configuration Register.

gas/ChangeLog:

2020-10-16  Przemyslaw Wirkus  <przemyslaw.wirkus@arm.com>

* testsuite/gas/aarch64/sysreg-6.d: New test.
* testsuite/gas/aarch64/sysreg-6.s: New test.

4 years agoWork around problem in DWARF decoding library which can result in attempts to read...
Nick Clifton [Wed, 21 Oct 2020 16:42:42 +0000 (17:42 +0100)]
Work around problem in DWARF decoding library which can result in attempts to read arbitrary bytes as if they were an LEB128 encoded value.

* dwarf.c (skip_attr_bytes): Accept DWARF versions higher than 4
when processing the DW_FORM_ref_addr form.
Skip bytes in DW_FORM_block and DW_FORM_exprloc forms.
Handle DW_FORM_indirect.
(get_type_signedness): Allow a limited amount of recursion.
Do not attempt to decode types that use the DW_FORM_ref_addr form.
(read_and_display_attr_value):  Do not attempt to decode types
that use the DW_FORM_ref_addr form.

4 years agogdb: make gdbarch_make_corefile_notes return a unique ptr
Simon Marchi [Wed, 21 Oct 2020 14:43:48 +0000 (10:43 -0400)]
gdb: make gdbarch_make_corefile_notes return a unique ptr

This patch starts by making the gdbarch_make_corefile_notes function
return a gdb::unique_xmalloc_ptr<char> and takes care of the fallouts,
mostly in linux-tdep.c and fbsd-tdep.c.

The difficulty in these files is that they use the BFD API for writing
core files, where you pass in a pointer to a malloc-ed buffer (or NULL
in the beginning), it re-allocs it if needed, and returns you the
possibly updated pointer.  I therefore used this pattern everywhere:

  note_data.reset (elfcore_write_note (obfd, note_data.release (), ...)

This hands over the ownership of note_data to the BFD function for the
duration of the call, and then puts its back in note_data right after
the call.

gdb/ChangeLog:

* gdbarch.sh (make_corefile_notes): Return unique pointer.
* gdbarch.c: Re-generate.
* gdbarch.h: Re-generate.
* gcore.c (write_gcore_file_1): Adjust.
* fbsd-tdep.c (struct fbsd_collect_regset_section_cb_data): Add
constructor.
<note_data>: Change type to unique pointer.
<abort_iteration>: Change type to bool.
(fbsd_collect_regset_section_cb): Adjust to unique pointer.
(fbsd_collect_thread_registers): Return void, adjust.
(struct fbsd_corefile_thread_data): Add construtor.
<note_data>: Change type to unique pointer.
(fbsd_corefile_thread): Adjust.
(fbsd_make_corefile_notes): Return unique pointer, adjust.
* linux-tdep.c (linux_make_mappings_corefile_notes): Change type
to unique pointer, adjust.
(struct linux_collect_regset_section_cb_data): Add constructor.
<note_data>: Change type to unique pointer.
<abort_iteration>: Change type to bool.
(linux_collect_thread_registers): Return void, adjust.
(struct linux_corefile_thread_data): Add constructor.
<note_data>: Change type to unique pointer.
(linux_corefile_thread): Adjust.
(linux_make_corefile_notes): Return unique pointer, adjust.

Change-Id: I1e03476bb47b87c6acb3e12204d193f38cc4e02b

4 years agogdbserver: fix overlap in sprintf argument and buffer
Simon Marchi [Wed, 21 Oct 2020 14:41:12 +0000 (10:41 -0400)]
gdbserver: fix overlap in sprintf argument and buffer

While trying to build on Cygwin (gcc 10.2.0), I got:

      CXX    server.o
    /home/Baube/src/binutils-gdb/gdbserver/server.cc: In function 'void handle_general_set(char*)':
    /home/Baube/src/binutils-gdb/gdbserver/server.cc:832:12: error: 'sprintf' argument 3 overlaps destination object 'own_buf' [-Werror=restrict]
      832 |    sprintf (own_buf, "E.Unknown thread-events mode requested: %s\n",
          |    ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      833 |      mode);
          |      ~~~~~
    /home/Baube/src/binutils-gdb/gdbserver/server.cc:553:27: note: destination object referenced by 'restrict'-qualified argument 1 was declared here
      553 | handle_general_set (char *own_buf)
          |                     ~~~~~~^~~~~~~

There is indeed a problem: mode points somewhere into own_buf.  And by
the time mode gets formatted as a %s, whatever it points to has been
overwritten.  I hacked gdbserver to coerce it into that error path, and
this is the resulting message:

    (gdb) p own_buf
    $1 = 0x629000000200 "E.Unknown thread-events mode requested: ad-events mode requested: 00;10:9020fdf7ff7f0000;thread:p49388.49388;core:e;\n"

Fix it by formatting the error string in an std::string first.

gdbserver/ChangeLog:

* server.cc (handle_general_set): Don't use sprintf with
argument overlapping buffer.

Change-Id: I4fdf05c0117f63739413dd67ddae7bd6ee414824

4 years agoFix gdb.mi/mi-fullname-deleted.exp with Clang
Gary Benson [Wed, 21 Oct 2020 08:54:31 +0000 (09:54 +0100)]
Fix gdb.mi/mi-fullname-deleted.exp with Clang

gdb.mi/mi-fullname-deleted.exp attempts to generate an executable
with a doubled slash in the source filename recorded in its debug
info.  This attempt fails when compiling using Clang, causing the
substituted filename test to fail.  This commit fixes this issue.
It also expands the comments in the file, to clarify what the test
is attempting to do, and to document where it doesn't succeed.

gdb/testsuite/ChangeLog:

* gdb.mi/mi-fullname-deleted.exp: Fix substituted
fullname test with Clang.  Also expand comments generally.

4 years agoAutomatic date update in version.in
GDB Administrator [Wed, 21 Oct 2020 00:00:08 +0000 (00:00 +0000)]
Automatic date update in version.in

4 years agogdb: make gdbarch_displaced_step_hw_singlestep return bool
Simon Marchi [Tue, 20 Oct 2020 21:39:47 +0000 (17:39 -0400)]
gdb: make gdbarch_displaced_step_hw_singlestep return bool

Replace the int-used-as-a-bool with a bool.

gdb/ChangeLog:

* gdbarch.sh (displaced_step_hw_singlestep): Return bool.
* gdbarch.c: Re-generate.
* gdbarch.h: Re-generate.
* aarch64-tdep.c (aarch64_displaced_step_hw_singlestep): Return
bool.
* aarch64-tdep.h (aarch64_displaced_step_hw_singlestep):
Likewise.
* arch-utils.h (default_displaced_step_hw_singlestep): Likewise.
* arch-utils.c (default_displaced_step_hw_singlestep): Likewise.
* rs6000-tdep.c (ppc_displaced_step_hw_singlestep): Likewise.
* s390-tdep.c (s390_displaced_step_hw_singlestep): Likewise.

Change-Id: I76a78366dc5c0afb03f8f4bddf9f4e8d68fe3114

4 years agogdb: make gdbarch predicates return bool
Simon Marchi [Tue, 20 Oct 2020 21:34:30 +0000 (17:34 -0400)]
gdb: make gdbarch predicates return bool

gdbarch predicates (functions suffixed _p to check whether a gdbarch
implements a given method) currently return int.  Make them return bool.
There is no expected behavior change.

gdb/ChangeLog:

* gdbarch.sh: Make generated predicates return bool.
* gdbarch.c: Re-generate.
* gdbarch.h: Re-generate.

Change-Id: Ie7ebc1acae62df83da9085ba69327fca551c5a30

4 years agoRemove varobj_item typedef
Tom Tromey [Tue, 20 Oct 2020 21:28:22 +0000 (15:28 -0600)]
Remove varobj_item typedef

While working on some minor varobj cleanups, I noticed this obvious
one: the varobj_item typedef isn't redundant in C++, and so can be
removed.

gdb/ChangeLog
2020-10-20  Tom Tromey  <tom@tromey.com>

* varobj-iter.h (struct varobj_item): Remove typedef.

4 years agoAdd AMD znver3 processor support
Ganesh Gopalasubramanian [Tue, 20 Oct 2020 18:26:58 +0000 (23:56 +0530)]
Add AMD znver3 processor support

gas/

* config/tc-i386.c (cpu_arch): Add CPU_ZNVER3_FLAGS flags.
(i386_align_code): Add PROCESSOR_ZNVER cases.
* doc/c-i386.texi: Add znver3, snp, invlpgb and tlbsync.
* gas/i386/i386.exp: Add new znver3 test cases.
* gas/i386/arch-14-znver3.d: New.
* gas/i386/arch-14.d: New.
* gas/i386/arch-14.s: New.
* gas/i386/invlpgb.d: New.
* gas/i386/invlpgb64.d: New.
* gas/i386/invlpgb.s: New.
* gas/i386/snp.d: New.
* gas/i386/snp64.d: New.
* gas/i386/snp.s: New.
* gas/i386/tlbsync.d: New.
* gas/i386/tlbsync.s: New.
* gas/i386/x86-64-arch-4-znver3.d: New.
* gas/i386/x86-64-arch-4.d: New.
* gas/i386/x86-64-arch-4.s: New.

opcodes/

* i386-dis.c (rm_table): Add tlbsync, snp, invlpgb.
* i386-gen.c (cpu_flag_init): Add new CPU_INVLPGB_FLAGS,
CPU_TLBSYNC_FLAGS, and CPU_SNP_FLAGS.
Add CPU_ZNVER3_FLAGS.
(cpu_flags): Add CpuINVLPGB, CpuTLBSYNC, CpuSNP.
* i386-opc.h: Add CpuINVLPGB, CpuTLBSYNC, CpuSNP.
* i386-opc.tbl: Add invlpgb, tlbsync, psmash, pvalidate,
rmpupdate, rmpadjust.
* i386-init.h: Re-generated.
* i386-tbl.h: Re-generated.

4 years agogdb: change some int to bool in infrun.c
Simon Marchi [Tue, 20 Oct 2020 20:31:57 +0000 (16:31 -0400)]
gdb: change some int to bool in infrun.c

Change these int-used-as-a-bool to bool.  I searched for "static int" in
that file and changed what I found.

gdb/ChangeLog:

* infrun.c (currently_stepping): Change int to bool
(maybe_software_singlestep): Likewise.
(show_stop_on_solib_events): Likewise.
(stepping_past_nonsteppable_watchpoint): Likewise.
(displaced_step_in_progress_any_inferior): Likewise.
(displaced_step_in_progress_thread): Likewise.
(keep_going_stepped_thread): Likewise.
(thread_still_needs_step_over): Likewise.
(start_step_over): Likewise.
(do_target_resume): Likewise.
(resume_1): Likewise.
(clear_proceed_status): Likewise.
(thread_still_needs_step_over_bp): Likewise.
(proceed): Likewise.
(switch_back_to_stepped_thread): Likewise.
(adjust_pc_after_break): Likewise.
(stepped_in_from): Likewise.
(handle_stop_requested): Likewise.
(handle_syscall_event): Likewise.
(handle_no_resumed): Likewise.
(handle_inferior_event): Likewise.
(finish_step_over): Likewise.
(handle_signal_stop): Likewise.
(process_event_stop_test): Likewise.

Change-Id: I897527c4a3da5e647f9d97f7d4477649985b8b77

4 years agogdb: fix comment of get_displaced_stepping_state
Simon Marchi [Tue, 20 Oct 2020 20:10:42 +0000 (16:10 -0400)]
gdb: fix comment of get_displaced_stepping_state

The comment mentions PID instead of INF, fix that.

gdb/ChangeLog:

* infrun.c (get_displaced_stepping_state): Fix comment.

Change-Id: Id9554807c50792db1fcdb7c14590397d1fa6f8f7

4 years agoFix undefined behavior in gdbserver
Tom Tromey [Tue, 20 Oct 2020 16:28:58 +0000 (10:28 -0600)]
Fix undefined behavior in gdbserver

PR gdb/26742 points out some undefined behavior in gdbserver.  The bug
is that remove_thread does:

  free_one_thread (thread);
  if (current_thread == thread)
    current_thread = NULL;

However, the equality check is undefined, because "thread" has already
been freed.

This patch fixes the bug by moving the check earlier.

Tested on x86-64 Fedora 32.

2020-10-20  Tom Tromey  <tromey@adacore.com>

PR gdb/26742:
* inferiors.cc (remove_thread): Clear current_thread before
freeing the thread.

4 years agoFix help string of alias command
Andreas Schwab [Mon, 19 Oct 2020 18:55:06 +0000 (20:55 +0200)]
Fix help string of alias command

* cli/cli-cmds.c (_initialize_cli_cmds): Fix alias command help.

4 years ago[gdb/testsuite] Remove superfluous marker in pr13961.S
Tom de Vries [Tue, 20 Oct 2020 08:20:25 +0000 (10:20 +0200)]
[gdb/testsuite] Remove superfluous marker in pr13961.S

When looking at readelf output for test-case gdb.dwarf2/pr13961.exp, we have:
...
$ readelf -wi ./outputs/gdb.dwarf2/pr13961/pr13961
   ...
 <0><14c>: Abbrev Number: 0
readelf: Warning: Bogus end-of-siblings marker detected at offset 14c in \
  .debug_info section
...

Fix this by removing the superfluous end-of-siblings marker.

Tested on x86_64-linux.

gdb/testsuite/ChangeLog:

2020-10-20  Tom de Vries  <tdevries@suse.de>

* gdb.dwarf2/pr13961.S: Remove superfluous end-of-siblings marker.

4 years ago[gdb/testsuite] Use main.c in gdb.dwarf2
Tom de Vries [Tue, 20 Oct 2020 08:20:25 +0000 (10:20 +0200)]
[gdb/testsuite] Use main.c in gdb.dwarf2

Eliminate copies of main.c in gdb.dwarf2.

Tested on x86_64-linux.

gdb/testsuite/ChangeLog:

2020-10-20  Tom de Vries  <tdevries@suse.de>

* gdb.dwarf2/arr-stride.c: Remove.
* gdb.dwarf2/arr-stride.exp: Use main.c.
* gdb.dwarf2/arr-subrange.c: Remove.
* gdb.dwarf2/arr-subrange.exp: Use main.c.
* gdb.dwarf2/bad-regnum.c: Remove.
* gdb.dwarf2/bad-regnum.exp: Use main.c.
* gdb.dwarf2/corrupt.c: Remove.
* gdb.dwarf2/corrupt.exp: Use main.c.
* gdb.dwarf2/dw2-bad-elf.c: Remove.
* gdb.dwarf2/dw2-bad-elf.exp: Use main.c.
* gdb.dwarf2/dw2-icycle.c: Remove.
* gdb.dwarf2/dw2-icycle.exp: Use main.c.
* gdb.dwarf2/formdata16.c: Remove.
* gdb.dwarf2/formdata16.exp: Use main.c.
* gdb.dwarf2/implptrconst.c: Remove.
* gdb.dwarf2/implptrconst.exp: Use main.c.
* gdb.dwarf2/info-locals-optimized-out.c: Remove.
* gdb.dwarf2/info-locals-optimized-out.exp: Use main.c.
* gdb.dwarf2/opaque-type-lookup.c: Remove.
* gdb.dwarf2/opaque-type-lookup.exp: Use main.c.

4 years ago[gdb/testsuite] Clean up redundant info in gdb.dwarf2
Tom de Vries [Tue, 20 Oct 2020 08:20:24 +0000 (10:20 +0200)]
[gdb/testsuite] Clean up redundant info in gdb.dwarf2

In gdb.dwarf2/ada-valprint-error.exp we find:
...
    untested ${testfile}.exp
...
such that we have:
...
UNTESTED: gdb.dwarf2/ada-valprint-error.exp: ada-valprint-error.exp
...

Fix this and a likewise unsupported message in
gdb.dwarf2/dw2-dir-file-name.exp.

Tested on x86_64-linux.

gdb/testsuite/ChangeLog:

2020-10-20  Tom de Vries  <tdevries@suse.de>

* gdb.dwarf2/ada-valprint-error.exp: Remove redundant mention of .exp
file.
* gdb.dwarf2/dw2-dir-file-name.exp: Same.

4 years ago[gdb/testsuite] Use $gdb_test_file_name in gdb.dwarf2
Tom de Vries [Tue, 20 Oct 2020 08:20:24 +0000 (10:20 +0200)]
[gdb/testsuite] Use $gdb_test_file_name in gdb.dwarf2

In f.i. gdb.dwarf2/dw2-line-number-zero.exp we find:
...
    verbose "Skipping dw2-line-number-zero test."
...

Make the skip messages use the gdb_test_file_name variable, to reduce the
amount of changes that needs to be made when coping a test-case.

Tested on x86_64-linux.

gdb/testsuite/ChangeLog:

2020-10-20  Tom de Vries  <tdevries@suse.de>

* gdb.dwarf2/dw2-error.exp: Use $gdb_test_file_name.
* gdb.dwarf2/dw2-line-number-zero.exp: Same.
* gdb.dwarf2/dw2-main-no-line-number.exp: Same.
* gdb.dwarf2/dw2-ranges-base.exp: Same.
* gdb.dwarf2/dw2-ranges.exp: Same.
* gdb.dwarf2/dw2-vendor-extended-opcode.exp: Same.
* gdb.dwarf2/var-access.exp: Same.

4 years agoreadelf.c display_lto_symtab offset outside bounds of constant string
Alan Modra [Tue, 20 Oct 2020 04:29:40 +0000 (14:59 +1030)]
readelf.c display_lto_symtab offset outside bounds of constant string

Using gcc-10 or current mainline gcc, binutils configured with
--disable-nls results in:

readelf.c: In function 'display_lto_symtab':
readelf.c:12283:26: error: offset '17' outside bounds of constant string [-Werror=array-bounds]
12283 |   SECTION_NAME (section) + strlen (".gnu.lto_.symtab.")) > 0
      |                          ^

Which is actually a bogus warning in this case because we've already
checked the name string for validity, so SECTION_NAME won't ever be
"<none>", "<no-strings>" or "<corrupt>".  This patch fixes the problem
by making SECTION_NAME simply return the string from the string table.
Other places also shouldn't be trying to match any of the error
strings against a section name, so fix them too.

* readelf.c: Delete whitespace at end of line throughout.
(SECTION_NAME, SECTION_NAME_VALID): New.
(SECTION_NAME_PRINT): Rename from SECTION_NAME.  Formatting.
(printable_section_name, dump_relocations): Use SECTION_NAME_PRINT.
(process_section_headers, process_section_groups): Likewise.
(shdr_to_ctf_sect): Likewise.
(find_section, find_section_in_set): Use SECTION_NAME_VALID.
(ia64_process_unwind, hppa_process_unwind): Likewise.
(display_debug_section, initialise_dumps_byname): Likewise.
(process_lto_symbol_tables): Likewise.  Check trailing period of
lto symbol table names.
(display_lto_symtab): Use sizeof instead of strlen.

4 years agobinutils: Add myself as RISC-V co-maintainer.
Nelson Chu [Tue, 20 Oct 2020 04:34:36 +0000 (12:34 +0800)]
binutils: Add myself as RISC-V co-maintainer.

binutils/
* MAINTAINERS (RISC-V): Add myself as RISC-V co-maintainer.

4 years agoAutomatic date update in version.in
GDB Administrator [Tue, 20 Oct 2020 00:00:07 +0000 (00:00 +0000)]
Automatic date update in version.in

4 years agoDon't erase TUI source window when switching focus
Tom Tromey [Mon, 19 Oct 2020 13:45:05 +0000 (07:45 -0600)]
Don't erase TUI source window when switching focus

PR tui/26719 points out that switching the focus can erase the TUI
source window.  This is a regression introduced by the patch to switch
the source window to using a pad.

This patch fixes the bug by arranging to call prefresh whenever the
window is refreshed.

2020-10-19  Tom Tromey  <tromey@adacore.com>

PR tui/26719
* tui/tui-winsource.h (struct tui_source_window_base)
<refresh_window>: Rename from refresh_pad.
* tui/tui-winsource.c (tui_source_window_base::refresh_window):
Rename from refresh_pad.
(tui_source_window_base::show_source_content)
(tui_source_window_base::do_scroll_horizontal): Update.

gdb/testsuite/ChangeLog
2020-10-19  Tom Tromey  <tromey@adacore.com>

PR tui/26719
* gdb.tui/list.exp: Check source window contents after focus
change.

4 years agogdb/thread: fine-tune 'info threads' help text
Tankut Baris Aktemur [Mon, 19 Oct 2020 15:23:26 +0000 (17:23 +0200)]
gdb/thread: fine-tune 'info threads' help text

The help text of 'info threads' is below:

  (gdb) help info threads
  Display currently known threads.
  Usage: info threads [OPTION]... [ID]...

  Options:
    -gid
      Show global thread IDs.If ID is given, it is a space-separated list of IDs of threads to display.
  Otherwise, all threads are displayed.
  (gdb)

I think the "If ID is given ..." info should have come right below
the the usage line.  This patch reorganizes the text so that we get

  (gdb) help info threads
  Display currently known threads.
  Usage: info threads [OPTION]... [ID]...
  If ID is given, it is a space-separated list of IDs of threads to display.
  Otherwise, all threads are displayed.

  Options:
    -gid
      Show global thread IDs.
  (gdb)

gdb/ChangeLog:
2020-10-19  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>

* thread.c (_initialize_thread): Fine-tune the help text of
'info threads'.

4 years agogdb/frame: remove an unused type alias
Tankut Baris Aktemur [Mon, 19 Oct 2020 15:17:30 +0000 (17:17 +0200)]
gdb/frame: remove an unused type alias

Tested by rebuilding.

gdb/ChangeLog:
2020-10-19  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>

* frame.c: Remove the unused 'uinteger_option_def' type alias.

4 years agogdb: get jiter objfile from a bound minsym
Mihails Strasuns [Wed, 14 Oct 2020 08:44:36 +0000 (10:44 +0200)]
gdb: get jiter objfile from a bound minsym

This fixes a regression introduced by the following commit:

fe053b9e853 gdb/jit: pass the jiter objfile as an argument to jit_event_handler

In the refactoring `handle_jit_event` function was changed to pass a matching
objfile pointer to the `jit_event_handler` explicitly, rather using internal
storage:

```
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -5448,8 +5448,9 @@ handle_jit_event (void)

   frame = get_current_frame ();
   gdbarch = get_frame_arch (frame);
+  objfile *jiter = symbol_objfile (get_frame_function (frame));

-  jit_event_handler (gdbarch);
+  jit_event_handler (gdbarch, jiter);
```

This was needed to add support for multiple jiters.  However it has also
introduced a regression, because `get_frame_function (frame)` here may
return `nullptr`, resulting in a crash.

A more resilient way would be to use an approach mirroring
`jit_breakpoint_re_set` - to find a minimal symbol matching the
breakpoint location and use its object file.  We know that this
breakpoint event comes from a breakpoint set by `jit_breakpoint_re_set`,
thus using the reverse approach should be reliable enough.

gdb/Changelog:
2020-10-14  Mihails Strasuns  <mihails.strasuns@intel.com>

* breakpoint.c (handle_jit_event): Add an argument, change how
`jit_event_handler` is called.

4 years agoReadelf: Add --lto-syms option to display LTO symbol tables.
Nick Clifton [Mon, 19 Oct 2020 14:27:58 +0000 (15:27 +0100)]
Readelf: Add --lto-syms option to display LTO symbol tables.

* readelf.c (do_lto_syms): New local.
(long_option_values): Add OPTION_LTO_SYMS.
(options): Add --lto-syms.
(usage): Mention the new option.
(parse_args): Parse the new option.
(get_lto_kind): New function.
(get_lto_visibility): New function.
(get_lto_sym_type): New function.
(display_lto_symtab): New function - displays the contents of an
LTo symbol table section.
(process_lto_symbol_tables): New functions.  Calls
dipslay_lto_symtab on any LTO symbol table section.
(process_object_file): Call process_lto_symbol_tables.
* doc/binutils.texi: Document the new option.
* NEWS: Mention the new feature.

4 years agoProvide dummy libraries for alpha-vms
Alan Modra [Sun, 18 Oct 2020 22:19:32 +0000 (08:49 +1030)]
Provide dummy libraries for alpha-vms

alpha-dec-vms always loads a number of libraries, -limagelib,
-lstarlet, and -lsys$public_vectors.  When running the ld testsuite
without a full cross-build environment, those libraries are missing
and cause fails.  This patch provides dummies, and tidies default.exp
a little.

* testsuite/config/default.exp: Provide dummy libraries for
alpha-dec-vms.
(compiler_supports): New proc.  Use it for compiler tests.
* testsuite/lib/ld-lib.exp (default_ld_assemble): Don't die if
subdir not set.
(run_ld_link_tests): Pass LDFLAGS to ld.
* testsuite/ld-checks/checks.exp (section_check): Likewise.
* testsuite/ld-scripts/assert.exp: Likewise.
* testsuite/ld-scripts/extern.exp: Likewise.
* testsuite/ld-scripts/log2.exp: Likewise.
* testsuite/ld-scripts/map-address.exp: Likewise.
* testsuite/ld-scripts/script.exp: Likewise.
* testsuite/ld-scripts/sizeof.exp: Likewise.

4 years agoAutomatic date update in version.in
GDB Administrator [Mon, 19 Oct 2020 00:00:07 +0000 (00:00 +0000)]
Automatic date update in version.in

4 years agoAutomatic date update in version.in
GDB Administrator [Sun, 18 Oct 2020 00:00:07 +0000 (00:00 +0000)]
Automatic date update in version.in

4 years agoHave partial symbol tables own psymbol vectors
Tom Tromey [Sat, 17 Oct 2020 18:34:53 +0000 (12:34 -0600)]
Have partial symbol tables own psymbol vectors

Currently pointers to all partial symbols are stored in two vectors;
and then indices into these vectors are stored in each partial_symtab.

This patch changes this so that each partial symtab instead has
vectors of symbols.  add_psymbol_to_list can now be changed into a
method on partial_symtab as well.

My main motivation for doing this is that I am looking into calling
sort_pst_symbols in the background.  However, I haven't actually
implemented this yet.  (Also this may make it more feasible to also
sort the static psymbols, though I haven't tried that either.)

Also, though, this lets us remove the "current_global_psymbols"
vector, because now the callers can simply refer directly to the
psymtab that they are modifying (formerly this was implicit).

The main drawback of this patch is that it increases the size of
partial symtab.

gdb/ChangeLog
2020-10-17  Tom Tromey  <tom@tromey.com>

* xcoffread.c (xcoff_end_psymtab): Use partial_symtab::empty.
(scan_xcoff_symtab): Update.
* psymtab.h (class psymtab_storage) <global_psymbols,
static_psymbols, current_global_psymbols,
current_static_psymbols>: Remove.
* psymtab.c (require_partial_symbols, find_pc_sect_psymbol)
(match_partial_symbol, lookup_partial_symbol): Update.
(print_partial_symbols): Change parameters.
(dump_psymtab, recursively_search_psymtabs)
(psym_fill_psymbol_map, psym_find_compunit_symtab_by_address)
(sort_pst_symbols, partial_symtab::partial_symtab): Update.
(concat): Remove.
(end_psymtab_common): Simplify.
(append_psymbol_to_list): Change parameters.
(partial_symtabs::add_psymbol): Rename from add_psymbol_to_list.
(init_psymbol_list): Simplify.
(maintenance_info_psymtabs, maintenance_check_psymtabs): Update.
* psympriv.h (struct partial_symtab) <empty>: New method.
<globals_offset, n_global_syms, statics_offset, n_static_syms>:
Remove.
<global_psymbols, static_psymbols>: New members.
<add_psymbol>: New methods.
(add_psymbol_to_list): Don't declare.
(psymbol_placement): Move earlier.
* mdebugread.c (parse_partial_symbols): Update.
(handle_psymbol_enumerators): Change parameters.
(mdebug_expand_psymtab): Update.
* dwarf2/read.c (process_psymtab_comp_unit_reader)
(add_partial_symbol): Update.
* dwarf2/index-write.c (write_psymbols): Change parameters.
(write_one_signatured_type): Update.
(recursively_count_psymbols): Update.
(recursively_write_psymbols): Update.
(class debug_names) <recursively_write_psymbols>: Update.
<write_psymbols>: Change parameters.
<write_one_signatured_type>: Update.
* dbxread.c (read_dbx_symtab): Update.
(dbx_end_psymtab): Use partial_symtab::empty.
* ctfread.c (struct ctf_context) <pst>: New member.
(create_partial_symtab): Set it.
(ctf_psymtab_type_cb, ctf_psymtab_var_cb): Update.
(scan_partial_symbols): Use the psymtab's context.  Update.

4 years agoMake range types inherit signed-ness from base type
Tom Tromey [Sat, 17 Oct 2020 17:41:59 +0000 (11:41 -0600)]
Make range types inherit signed-ness from base type

I ran across this comment in valprint.c:

      /* FIXME: create_static_range_type does not set the unsigned bit in a
         range type (I think it probably should copy it from the target
         type), so we won't print values which are too large to
         fit in a signed integer correctly.  */

It seems to me that a range type ought to inherit its signed-ness from
the underlying type, so this patch implements this change, and removes
the comment.  (It was also copied into m2-valprint.c.)

I also remove the comment about handling ranges of enums, because I
think that comment is incorrect.

gdb/ChangeLog
2020-10-17  Tom Tromey  <tom@tromey.com>

* valprint.c (generic_value_print): Remove comment.
* m2-valprint.c (m2_value_print_inner): Remove comment.
* gdbtypes.c (create_range_type): Set TYPE_UNSIGNED from base
type.

4 years agogas: Add a -gdwarf-5 debug_line test with .s file
H.J. Lu [Sat, 17 Oct 2020 12:52:13 +0000 (05:52 -0700)]
gas: Add a -gdwarf-5 debug_line test with .s file

PR gas/25878
PR gas/26740
* testsuite/gas/i386/dwarf5-line-4.d: New file.
* testsuite/gas/i386/dwarf5-line-4.s: Likewise.
* testsuite/gas/i386/i386.exp: Run dwarf5-line-4.

4 years agogas: Replace dwarf5-line-2.S with dwarf5-line-3.S
H.J. Lu [Sat, 17 Oct 2020 12:35:23 +0000 (05:35 -0700)]
gas: Replace dwarf5-line-2.S with dwarf5-line-3.S

PR gas/25878
PR gas/26740
* testsuite/gas/i386/dwarf5-line-3.s: Replace dwarf5-line-2.S
with dwarf5-line-3.S.
* testsuite/gas/i386/dwarf5-line-3.d: Updated.

4 years agogas: Always use as_where for preprocessed assembly codes
H.J. Lu [Sat, 17 Oct 2020 11:24:22 +0000 (04:24 -0700)]
gas: Always use as_where for preprocessed assembly codes

Always clear the slot 1 if it was assigned to the input file before the
first .file <NUMBER> directive has been seen.  Always use as_where to
generate the correct debug infor for preprocessed assembly codes.

PR gas/25878
PR gas/26740
* dwarf2dbg.c (allocate_filename_to_slot): Don't reuse the slot 1
here.
(dwarf2_where): Restore as_where.
(dwarf2_directive_filename): Clear the slot 1 if it was assigned
to the input file.
* testsuite/gas/i386/dwarf5-line-2.d: New file.
* testsuite/gas/i386/dwarf5-line-2.s: Likewise.
* testsuite/gas/i386/dwarf5-line-3.d: Likewise.
* testsuite/gas/i386/dwarf5-line-3.s: Likewise.
* testsuite/gas/i386/i386.exp: Run dwarf5-line-2 and
dwarf5-line-3.

4 years agoAutomatic date update in version.in
GDB Administrator [Sat, 17 Oct 2020 00:00:08 +0000 (00:00 +0000)]
Automatic date update in version.in

4 years ago[gdb/symtab] Handle setting line bp without debug line info
Tom de Vries [Fri, 16 Oct 2020 22:10:31 +0000 (00:10 +0200)]
[gdb/symtab] Handle setting line bp without debug line info

When setting a breakpoint on a line in an executable without debug line info,
we run into an abort.

The problem occurs when calling set_default_source_symtab_and_line, which
calls select_source_symtab (0), which is where we try to find the line number
for main:
...
  /* Make the default place to list be the function `main'
     if one exists.  */
  block_symbol bsym = lookup_symbol (main_name (), 0, VAR_DOMAIN, 0);
  if (bsym.symbol != nullptr && SYMBOL_CLASS (bsym.symbol) == LOC_BLOCK)
    {
      symtab_and_line sal = find_function_start_sal (bsym.symbol, true);
      loc->set (sal.symtab, std::max (sal.line - (lines_to_list - 1), 1));
      return;
    }
...

However, due to the missing debug line info, find_function_start_sal returns a
sal with sal.symtab == 0:
...
(gdb) p /x sal
$2 = {pspace = 0x1a4a7f0, symtab = 0x0, symbol = 0x1d9e480, section = 0x1d5b398,
  msymbol = 0x0, line = 0x0, pc = 0x4004ab, end = 0x0, explicit_pc = 0x0,
  explicit_line = 0x0, is_stmt = 0x0, prob = 0x0, objfile = 0x0}
...
which eventually causes an segfault in create_sals_line_offset because
self->default_symtab->filename is accessed while self->default_symtab == NULL.

Fix this by handling sal.symtab == NULL in select_source_symtab.

Tested on x86_64-linux.

gdb/ChangeLog:

2020-10-17  Tom de Vries  <tdevries@suse.de>

PR symtab/26317
* source.c (select_source_symtab): Handling sal.symtab == NULL for
symbol main.

gdb/testsuite/ChangeLog:

2020-10-17  Tom de Vries  <tdevries@suse.de>

PR symtab/26317
* gdb.dwarf2/dw2-main-no-line-number.exp: New file.

4 years ago[gdb/testsuite] Remove hardcoded filenames in gdb.dwarf2/*.exp
Tom de Vries [Fri, 16 Oct 2020 22:10:31 +0000 (00:10 +0200)]
[gdb/testsuite] Remove hardcoded filenames in gdb.dwarf2/*.exp

There's a common occurance in dwarf assembly test-cases, where a file test.exp
contains:
...
standard_testfile test.c test-dw.S
...

The "test.c" arg can be abbreviated to ".c".

Make standard_testfile treat args with "-" prefix the same as with "." prefix,
such that we can write:
...
standard_testfile .c -dw.S
...
and apply this in gdb.dwarf2/*.exp.

Tested on x86_64-linux.

gdb/testsuite/ChangeLog:

2020-10-17  Tom de Vries  <tdevries@suse.de>

* lib/gdb.exp (standard_testfile): Also treat args starting with '-'
as suffix.
* gdb.dwarf2/atomic.c: Rename to ...
* gdb.dwarf2/atomic-type.c: ... this.
* gdb.dwarf2/dw2-ranges2.c: Rename to ...
* gdb.dwarf2/dw2-ranges-2.c: ... this.
* gdb.dwarf2/dw2-ranges3.c: Rename to ...
* gdb.dwarf2/dw2-ranges-3.c: ... this.
* gdb.dwarf2/fission-mix2.c: Rename to ...
* gdb.dwarf2/fission-mix-2.c: ... this.
* gdb.dwarf2/ada-linkage-name.exp: Use more suffix args for
standard_testfile.
* gdb.dwarf2/ada-valprint-error.exp: Same.
* gdb.dwarf2/arr-stride.exp: Same.
* gdb.dwarf2/arr-subrange.exp: Same.
* gdb.dwarf2/atomic-type.exp: Same.
* gdb.dwarf2/bad-regnum.exp: Same.
* gdb.dwarf2/break-inline-psymtab.exp: Same.
* gdb.dwarf2/clang-debug-names-2.exp: Same.
* gdb.dwarf2/clang-debug-names.exp: Same.
* gdb.dwarf2/comp-unit-lang.exp: Same.
* gdb.dwarf2/corrupt.exp: Same.
* gdb.dwarf2/count.exp: Same.
* gdb.dwarf2/cpp-linkage-name.exp: Same.
* gdb.dwarf2/data-loc.exp: Same.
* gdb.dwarf2/dw2-align.exp: Same.
* gdb.dwarf2/dw2-bad-elf.exp: Same.
* gdb.dwarf2/dw2-bad-mips-linkage-name.exp: Same.
* gdb.dwarf2/dw2-bad-unresolved.exp: Same.
* gdb.dwarf2/dw2-case-insensitive.exp: Same.
* gdb.dwarf2/dw2-cp-infcall-ref-static.exp: Same.
* gdb.dwarf2/dw2-ifort-parameter.exp: Same.
* gdb.dwarf2/dw2-inline-many-frames.exp: Same.
* gdb.dwarf2/dw2-inline-param.exp: Same.
* gdb.dwarf2/dw2-inline-small-func.exp: Same.
* gdb.dwarf2/dw2-inline-stepping.exp: Same.
* gdb.dwarf2/dw2-is-stmt-2.exp: Same.
* gdb.dwarf2/dw2-is-stmt.exp: Same.
* gdb.dwarf2/dw2-line-number-zero.exp: Same.
* gdb.dwarf2/dw2-namespaceless-anonymous.exp: Same.
* gdb.dwarf2/dw2-opt-structptr.exp: Same.
* gdb.dwarf2/dw2-param-error.exp: Same.
* gdb.dwarf2/dw2-ranges-base.exp: Same.
* gdb.dwarf2/dw2-ranges.exp: Same.
* gdb.dwarf2/dw2-unusual-field-names.exp: Same.
* gdb.dwarf2/dw2-vendor-extended-opcode.exp: Same.
* gdb.dwarf2/dw4-sig-types.exp: Same.
* gdb.dwarf2/dynarr-ptr.exp: Same.
* gdb.dwarf2/enum-type.exp: Same.
* gdb.dwarf2/fission-mix.exp: Same.
* gdb.dwarf2/formdata16.exp: Same.
* gdb.dwarf2/implptrconst.exp: Same.
* gdb.dwarf2/implptrpiece.exp: Same.
* gdb.dwarf2/info-locals-optimized-out.exp: Same.
* gdb.dwarf2/main-subprogram.exp: Same.
* gdb.dwarf2/method-ptr.exp: Same.
* gdb.dwarf2/missing-sig-type.exp: Same.
* gdb.dwarf2/nonvar-access.exp: Same.
* gdb.dwarf2/opaque-type-lookup.exp: Same.
* gdb.dwarf2/shortpiece.exp: Same.
* gdb.dwarf2/staticvirtual.exp: Same.
* gdb.dwarf2/subrange.exp: Same.
* gdb.dwarf2/symtab-producer.exp: Same.
* gdb.dwarf2/typedef-void-finish.exp: Same.
* gdb.dwarf2/var-access.exp: Same.
* gdb.dwarf2/variant.exp: Same.
* gdb.dwarf2/void-type.exp: Same.
* gdb.dwarf2/dw2-ranges-psym.exp: Same.  Use main.c instead of
dw2-ranges-main.c.
* gdb.dwarf2/dw2-ranges-main.c: Remove.

4 years agold: Allow symbols from PROVIDE to be use in MEMORY regions
Andrew Burgess [Wed, 7 Oct 2020 13:27:56 +0000 (14:27 +0100)]
ld: Allow symbols from PROVIDE to be use in MEMORY regions

I wanted to write a linker script like this:

  PROVIDE(mem_origin = 0x1000);
  PROVIDE(mem_length = 0x1000);

  MEMORY
  {
    REGION : ORIGIN = mem_origin, LENGTH = mem_length
  }

  ....

Then when I link using this script I can optionally supply:

  --defsym=mem_origin=..... --defsym=mem_length=....

to override the defaults.

And though passing `--defsym' does work, if I remove the use of
`--defsym' and just rely on the defaults I get an error:

  ld-new: invalid origin for memory region REGION

Interestingly, if I make the above error non-fatal and dump a linker
map file I see that (a) REGION has origin 0x0, and length 0xffff...,
and (b) the symbol from the PROVIDE is provided.

An examination of ldlang.c:lang_process shows us what the issue is,
the origin and length of all memory regions are set as a result of a
single call to lang_do_memory_regions, this call is done after calling
open_input_bfds.

During the open_input_bfds call provide statements can be converted to
provided statements if we know that the assigned symbol is needed, but
for symbols that are only used in the memory regions we are unaware
that we need these symbols.

What I propose in this patch is to make two calls to
lang_do_memory_regions, in the first call we process the expressions
for the origin and length fields of each region, however, errors,
especially undefined symbols, will be ignored.  The origin and length
values are not updated.  However, by evaluating the expressions any
symbols we need will be added to the symbol table.

Now when we call open_input_bfds, when we process the provide
statements, we will see that the assigned symbol is needed add its new
value to the symbol table.

Finally we reach the original call to lang_do_memory_regions, in
this (now second) call we again process the expressions, and this time
update the origin and length values.  Any errors encountered now are
reported to the user.

ld/ChangeLog:

* ldlang.c (lang_process): Add extra call to
lang_do_memory_regions, and pass parameter.
(lang_do_memory_regions): Add parameter, only define origin and
length when requested.  Reindent.
* testsuite/ld-scripts/provide-10.d: New file.
* testsuite/ld-scripts/provide-10.map: New file.
* testsuite/ld-scripts/provide-11.d: New file.
* testsuite/ld-scripts/provide-11.map: New file.
* testsuite/ld-scripts/provide-12.d: New file.
* testsuite/ld-scripts/provide-12.map: New file.
* testsuite/ld-scripts/provide-9.d: New file.
* testsuite/ld-scripts/provide-9.map: New file.
* testsuite/ld-scripts/provide-9.t: New file.

4 years agold: More documentation for --defsym
Andrew Burgess [Tue, 6 Oct 2020 14:30:15 +0000 (15:30 +0100)]
ld: More documentation for --defsym

The ordering of command line options --defsym and -T is important,
however, the description of --defsym in the manual doesn't mention
this.

This commit adds more text to the description of --defsym to try and
explain this ordering requirement.

ld/ChangeLog:

* ld.texi (Options): Extend the description of --defsym.

4 years agogas: Reuse the input file entry in the file table
H.J. Lu [Fri, 16 Oct 2020 11:03:20 +0000 (04:03 -0700)]
gas: Reuse the input file entry in the file table

Some instructions can be emitted (dwarf2_emit_insn is called) before the
first .file <NUMBER> directive has been seen, which allocates the input
file as the first file entry.  Reuse the input file entry in the file
table.

PR gas/25878
PR gas/26740
* dwarf2dbg.c (file_entry): Remove auto_assigned.
(assign_file_to_slot): Remove the auto_assign argument.
(allocate_filenum): Updated.
(allocate_filename_to_slot): Reuse the input file entry in the
file table.
(dwarf2_where): Replace as_where with as_where_physical.
* testsuite/gas/i386/dwarf5-line-1.d: New file.
* testsuite/gas/i386/dwarf5-line-1.s: Likewise.
* testsuite/gas/i386/i386.exp: Run dwarf5-line-1.

4 years agoAdd a new option to the linker: --error-handling-script=<NAME>. Run the script ...
Nick Clifton [Fri, 16 Oct 2020 10:37:26 +0000 (11:37 +0100)]
Add a new option to the linker: --error-handling-script=<NAME>.  Run the script <NAME> if an undefined symbol or unfound library error is encountered.

PR 26626
* ldmain.c (undefined_symbol): If an error handlign script is
available, call it.
* ldfile.c  (error_handling_script): Declare.
(ldfile_open_file): If a library cannot be found and an error
handling script is available, call it.
* ldmain.h  (error_handling_script): Prototype.
* ldlex.h (OPTION_ERROR_HANDLING_SCRIPT): Define.
* lexsup.c (ld_options): Add --error-handling-script.
(parse_args): Add support for --errror-handling-script.
* ld.texi: Document the new feature.
* configure.ac: Add --error-handling-script option to disable
support for the new feature.
* NEWS: Mention the new feature.
* config.in: Regenerate.
* configure: Regenerate.

4 years ago[gdb/testsuite] Fix function comment for gdb_breakpoint
Tom de Vries [Fri, 16 Oct 2020 10:06:11 +0000 (12:06 +0200)]
[gdb/testsuite] Fix function comment for gdb_breakpoint

Commit 5b7d00507b adds a mention at gdb_breakpoint of a supported argument
"passfail".  There's no corresponding argument handling though.

Remove the mention of the "passfail" argument.

gdb/testsuite/ChangeLog:

2020-10-16  Tom de Vries  <tdevries@suse.de>

* lib/gdb.exp (gdb_breakpoint): Remove mention of "passfail".

4 years ago[gdb/testsuite] Be more verbose about abort in gdb_breakpoint
Tom de Vries [Fri, 16 Oct 2020 09:39:02 +0000 (11:39 +0200)]
[gdb/testsuite] Be more verbose about abort in gdb_breakpoint

I noticed that an abort when setting a breakpoint does not result in more
than:
...
(gdb) break 27^M
FAIL: gdb.a/b.exp: setting breakpoint at 27 (eof)
...

Handle this more verbosely, as is done in gdb_test_multiple, such that we have
instead:
...
(gdb) break 27^M
ERROR: GDB process no longer exists
GDB process exited with wait status 29309 exp9 0 0 CHILDKILLED SIGABRT SIGABRT
UNRESOLVED: gdb.a/b.exp: setting breakpoint at 27 (eof)
...

Tested on x86_64-linux.

gdb/testsuite/ChangeLog:

2020-10-16  Tom de Vries  <tdevries@suse.de>

* lib/gdb.exp (gdb_breakpoint): Handle eof as in gdb_test_multiple.

4 years agoEnhancement for avx-vnni patch
Cui,Lili [Thu, 15 Oct 2020 02:45:08 +0000 (10:45 +0800)]
Enhancement for avx-vnni patch

1. Rename CpuVEX_PREFIX to PseudoVexPrefix and
   move it from cpu_flags to opcode_modifiers.
2. Delete {vex2} invalid test.
3. Use VexW0 and VexVVVV in the AVX-VNNI instructions.

gas/
* config/tc-i386.c: Move Pseudo Prefix check to match_template.
* testsuite/gas/i386/avx-vnni-inval.l: New file.
* testsuite/gas/i386/avx-vnni-inval.s: Likewise.
* testsuite/gas/i386/avx-vnni.d: Delete invalid {vex2} test.
* testsuite/gas/i386/avx-vnni.s: Likewise.
* testsuite/gas/i386/i386.exp: Add AVX VNNI invalid tests.
* testsuite/gas/i386/x86-64-avx-vnni-inval.l: New file.
* testsuite/gas/i386/x86-64-avx-vnni-inval.s: Likewise.
* testsuite/gas/i386/x86-64-avx-vnni.d: Delete invalid {vex2} test.
* testsuite/gas/i386/x86-64-avx-vnni.s: Likewise.

opcodes/
* i386-opc.tbl: Rename CpuVEX_PREFIX to PseudoVexPrefix
and move it from cpu_flags to opcode_modifiers.
Use VexW0 and VexVVVV in the AVX-VNNI instructions.
* i386-gen.c: Likewise.
* i386-opc.h: Likewise.
* i386-opc.h: Likewise.
* i386-init.h: Regenerated.
* i386-tbl.h: Likewise.

4 years agoRISC-V: Fix that IRELATIVE relocs may be inserted to the wrong place.
Nelson Chu [Wed, 7 Oct 2020 03:48:23 +0000 (20:48 -0700)]
RISC-V: Fix that IRELATIVE relocs may be inserted to the wrong place.

For the ifunc symbol, which is referenced by GOT rather than PLT relocs,
we should add the dynamic reloc (usually IRELATIVE) into the .rel.iplt
when generating the static executable.  But if we use riscv_elf_append_rela
to add the dynamic relocs into .rela.iplt, this may cause the overwrite
problem.

The reason is that we don't handle the `reloc_index` of .rela.iplt, but
the riscv_elf_append_rela adds the relocs to the place that are calculated
from the reloc_index (in seqential).  Therefore, we may overwrite the
dynamic relocs when the `reloc_index` of .rela.iplt isn't handled correctly.

One solution is that we can add these dynamic relocs (GOT ifunc) from
the last of .rela.iplt section.  But I'm not sure if it is the best way.

bfd/
* elfnn-riscv.c (riscv_elf_link_hash_table): Add last_iplt_index.
(riscv_elf_size_dynamic_sections): Initialize the last_iplt_index.
(riscv_elf_relocate_section): Use riscv_elf_append_rela.
(riscv_elf_finish_dynamic_symbol): If the use_elf_append_rela is
false, then we should add the dynamic relocs from the last of
the .rela.iplt, and don't use the riscv_elf_append_rela to add.

ld/
* testsuite/ld-riscv-elf/ifunc-plt-got-overwrite.s: New testcase.
* testsuite/ld-riscv-elf/ifunc-plt-got-overwrite.d: Likewise.
* testsuite/ld-riscv-elf/ifunc-plt-got-overwrite-exe.rd: Likewise.
* testsuite/ld-riscv-elf/ifunc-plt-got-overwrite-pic.rd: Likewise.
* testsuite/ld-riscv-elf/ifunc-plt-got-overwrite-pie.rd: Likewise.
* testsuite/ld-riscv-elf/ld-riscv-elf.exp: Updated.

4 years agoRISC-V: Support GNU indirect functions.
Nelson Chu [Wed, 7 Oct 2020 03:48:22 +0000 (20:48 -0700)]
RISC-V: Support GNU indirect functions.

Generally, glibc dynamic linker should have two ways to deal with ifunc
- one is to handle the IRELATIVE relocations for the non-preemtive ifunc
symbols, the other is to handle the R_RISCV_32/64 and R_RISCV_JUMP_SLOT
relocations with the STT_IFUNC preemtive symbols.  No matter which method
is used, both of them should get the resolved ifunc symbols at runtime.
Therefore, linker needs to generate the correct dynamic relocations for
ifunc to make sure the the dynamic linker works well.  For now, there are
thirteen relocations are supported for ifunc in GNU ld,

* R_RISCV_CALL and R_RISCV_CALL_PLT:
The RISC-V compiler won't generate R_RISCV_JAL directly to jump to an
ifunc.  Besides, we disable the relaxations for the relocation referenced
to ifunc, so just handling the R_RISCV_CALL and R_RISCV_CALL_PLT should be
enough.  Linker should generate a .plt entry and a .got.plt entry for it,
and also needs to insert a dynamic IRELATIVE in the .got.plt enrty, or
insert a R_RISCV_JUMP_SLOT when generating shared library.

* R_RISCV_PCREL_HI20 and R_RISCV_PCREL_LO12_I/S:
LA/LLA pattern with local fPIC ifunc symbol, or any non-PIC ifunc symbol.
The PC-relative relocation.  The current linker will deal with them in
the same way as R_RISCV_CALL_PLT.

* R_RISCV_GOT_HI20 and R_RISCV_PCREL_LO12_I/S:
LA pattern with global PIC ifunc symbol.  Linker should insert a dynamic
IRELATIVE in the .got entry, or insert a R_RISCV_32/64 when generating
shared library.

* R_RISCV_32 and R_RISCV_64:
Store the ifunc symbol into the data section.  Linker should insert a
dynamic IRELATIVE in the data section, or insert a R_RISCV_32/64 when
generating shared library.

* R_RISCV_HI20 and R_RISCV_LO12_I/S:
The LUI + ADDI/LW/SW patterns.  The absolute access relocation.  The
medlow model without the -fPIC compiler option should generate them.
The ld ifunc testsuites "Build pr23169a" and "Build pr23169d" need the
relocations, they are in the ld/testsuite/ld-ifunc/, and need compiler
support.

However, we also made some optimizations with reference to x86,

* If GOT and PLT relocations refer to the same ifunc symbol when generating
pie, then they can actually share a .got entry without creating two entries
to store the same value and relocation.

* If GOT, PLT and DATA relocations refer to the same ifunc symbol when
generating position dependency executable, then linker will fill the address
of .plt entry into the corresponding .got entry and data section, without
insert any dynamic relocations for the GOT and DATA relocations.

For the ifunc testcases, there are three types of them,

1. ifunc-reloc-*: Only check the single type of relocation refers to
ifunc symbol.
* ifunc-reloc-call: R_RISCV_CALL and R_RISCV_CALL_PLT.
* ifunc-reloc-data: R_RISCV_32 and R_RISCV_64.
* ifunc-reloc-got: R_RISCV_GOT_HI20 and R_RISCV_PCREL_LO_I/S.
* ifunc-reloc-pcrel: R_RISCV_PCREL_HI20 and R_RISCV_PCREL_LO_I/S.

2. ifunc-[nonplt|plt]-*: If we don't have PLT relocs, then don't need to
create the PLT and it's .plt entries.
* ifunc-nonplt: Combine R_RISCV_GOT_HI20 and R_RISCV_32/64.
* ifunc-plt: Combine all ifunc relocations.

3. ifunc-seperate-*: If we link the ifunc caller and resolver into the
same module (link the objects), then the results are the same as the
ifunc-reloc-* and ifunc-[noplt|plt]-* testcases.  Consider the cases that
the ifunc callers and resolver are in the different modules, that is, we
compile the ifunc resolver to the shared library first, and then link it
with the ifunc callers.  The output of ifunc callers should be the same as
the normal STT_FUNC cases, and the shared ifunc resolver should define the
symbols as STT_IFUNC.

The R_RISCV_PCREL_HI20 reloc is special.  It should be linked and resolved
locally, so if the ifunc resolver is defined in other modules (other shared
libraries), then the R_RISCV_PCREL_HI20 is unresolvable, and linker should
issue an unresolvable reloc error.

bfd/
* elfnn-riscv.c: Include "objalloc.h" since we need objalloc_alloc.
(riscv_elf_link_hash_table): Add loc_hash_table and loc_hash_memory
for local STT_GNU_IFUNC symbols.
(riscv_elf_got_plt_val): Removed.
(riscv_elf_local_htab_hash, riscv_elf_local_htab_eq): New functions.
Use to compare local hash entries.
(riscv_elf_get_local_sym_hash): New function.  Find a hash entry for
local symbol, and create a new one if needed.
(riscv_elf_link_hash_table_free): New function.  Destroy an riscv
elf linker hash table.
(riscv_elf_link_hash_table_create): Create hash table for local ifunc.
(riscv_elf_check_relocs): Create a fake global symbol to track the
local ifunc symbol.  Add support to check and handle the relocations
reference to ifunc symbols.
(allocate_dynrelocs): Let allocate_ifunc_dynrelocs and
allocate_local_ifunc_dynrelocs to handle the ifunc symbols if they
are defined and referenced in a non-shared object.
(allocate_ifunc_dynrelocs): New function.  Allocate space in .plt,
.got and associated reloc sections for ifunc dynamic relocs.
(allocate_local_ifunc_dynrelocs): Likewise, but for local ifunc
dynamic relocs.
(riscv_elf_relocate_section): Add support to handle the relocation
referenced to ifunc symbols.
(riscv_elf_size_dynamic_sections): Updated.
(riscv_elf_adjust_dynamic_symbol): Updated.
(riscv_elf_finish_dynamic_symbol): Finish up the ifunc handling,
including fill the PLT and GOT entries for ifunc symbols.
(riscv_elf_finish_local_dynamic_symbol): New function.  Called by
riscv_elf_finish_dynamic_symbol to handle the local ifunc symbols.
(_bfd_riscv_relax_section): Don't do the relaxation for ifunc.
* elfxx-riscv.c: Add R_RISCV_IRELATIVE.
* configure.ac: Link elf-ifunc.lo to use the generic ifunc support.
* configure: Regenerated.

include/
* elf/riscv.h: Add R_RISCV_IRELATIVE to 58.

ld/
* emulparams/elf32lriscv-defs.sh: Add IREL_IN_PLT.
* testsuite/ld-ifunc/ifunc.exp: Enable ifunc tests for RISC-V.
* testsuite/ld-riscv-elf/ld-riscv-elf.exp (run_dump_test_ifunc):
New dump test for ifunc.  There are two arguments, 'target` and
`output`.  The `target` is rv32 or rv64, and the `output` is used
to choose which output you want to test (exe, pie or .so).
* testsuite/ld-riscv-elf/ifunc-reloc-call-01.s: New testcase.
* testsuite/ld-riscv-elf/ifunc-reloc-call-01.d: Likewise.
* testsuite/ld-riscv-elf/ifunc-reloc-call-01-exe.rd: Likewise.
* testsuite/ld-riscv-elf/ifunc-reloc-call-01-pic.rd: Likewise.
* testsuite/ld-riscv-elf/ifunc-reloc-call-01-pie.rd: Likewise.
* testsuite/ld-riscv-elf/ifunc-reloc-call-02.s: Likewise.
* testsuite/ld-riscv-elf/ifunc-reloc-call-02.d: Likewise.
* testsuite/ld-riscv-elf/ifunc-reloc-call-02-exe.rd: Likewise.
* testsuite/ld-riscv-elf/ifunc-reloc-call-02-pic.rd: Likewise.
* testsuite/ld-riscv-elf/ifunc-reloc-call-02-pie.rd: Likewise.
* testsuite/ld-riscv-elf/ifunc-reloc-data.s: Likewise.
* testsuite/ld-riscv-elf/ifunc-reloc-data.d: Likewise.
* testsuite/ld-riscv-elf/ifunc-reloc-data-exe.rd: Likewise.
* testsuite/ld-riscv-elf/ifunc-reloc-data-pic.rd: Likewise.
* testsuite/ld-riscv-elf/ifunc-reloc-data-pie.rd: Likewise.
* testsuite/ld-riscv-elf/ifunc-reloc-got.s: Likewise.
* testsuite/ld-riscv-elf/ifunc-reloc-got.d: Likewise.
* testsuite/ld-riscv-elf/ifunc-reloc-got-exe.rd: Likewise.
* testsuite/ld-riscv-elf/ifunc-reloc-got-pic.rd: Likewise.
* testsuite/ld-riscv-elf/ifunc-reloc-got-pie.rd: Likewise.
* testsuite/ld-riscv-elf/ifunc-reloc-pcrel.s: Likewise.
* testsuite/ld-riscv-elf/ifunc-reloc-pcrel.d: Likewise.
* testsuite/ld-riscv-elf/ifunc-reloc-pcrel-exe.rd: Likewise.
* testsuite/ld-riscv-elf/ifunc-reloc-pcrel-pic.rd: Likewise.
* testsuite/ld-riscv-elf/ifunc-reloc-pcrel-pie.rd: Likewise.
* testsuite/ld-riscv-elf/ifunc-nonplt.s: Likewise.
* testsuite/ld-riscv-elf/ifunc-nonplt.d: Likewise.
* testsuite/ld-riscv-elf/ifunc-nonplt-exe.rd: Likewise.
* testsuite/ld-riscv-elf/ifunc-nonplt-pic.rd: Likewise.
* testsuite/ld-riscv-elf/ifunc-nonplt-pie.rd: Likewise.
* testsuite/ld-riscv-elf/ifunc-plt-01.s: Likewise.
* testsuite/ld-riscv-elf/ifunc-plt-01.d: Likewise.
* testsuite/ld-riscv-elf/ifunc-plt-01-exe.rd: Likewise.
* testsuite/ld-riscv-elf/ifunc-plt-01-pic.rd: Likewise.
* testsuite/ld-riscv-elf/ifunc-plt-01-pie.rd: Likewise.
* testsuite/ld-riscv-elf/ifunc-plt-02.s: Likewise.
* testsuite/ld-riscv-elf/ifunc-plt-02.d: Likewise.
* testsuite/ld-riscv-elf/ifunc-plt-02-exe.rd: Likewise.
* testsuite/ld-riscv-elf/ifunc-plt-02-pic.rd: Likewise.
* testsuite/ld-riscv-elf/ifunc-plt-02-pie.rd: Likewise.
* testsuite/ld-riscv-elf/ifunc-seperate-resolver.s: Likewise.
* testsuite/ld-riscv-elf/ifunc-seperate-caller.s: Likewise.
* testsuite/ld-riscv-elf/ifunc-seperate-exe.d: Likewise.
* testsuite/ld-riscv-elf/ifunc-seperate-pic.d: Likewise.
* testsuite/ld-riscv-elf/ifunc-seperate-pie.d: Likewise.
* testsuite/ld-riscv-elf/ifunc-seperate-caller-pcrel.s: Likewise.
* testsuite/ld-riscv-elf/ifunc-seperate-pcrel-pic.d: Likewise.
* testsuite/ld-riscv-elf/ifunc-seperate-pcrel-pie.d: Likewise.

4 years agoelf32-arc.c: Don't cast between function pointer and void pointer
Alan Modra [Thu, 15 Oct 2020 23:45:57 +0000 (10:15 +1030)]
elf32-arc.c: Don't cast between function pointer and void pointer

Casts should be avoided if at all possible, and in particular the C
standard doesn't promise that function pointers can be cast to void*
or vice-versa.  It is only mentioned under J.5 Common extensions,
saying "The following extensions are widely used in many systems, but
are not portable to all implementations."

* elf32-arc.c (replace_func): Correct return type.
(get_replace_function): Use a replace_func function pointer rather
than void*.  Update associated ARC_RELOC_HOWTO define.

4 years agoAutomatic date update in version.in
GDB Administrator [Fri, 16 Oct 2020 00:00:07 +0000 (00:00 +0000)]
Automatic date update in version.in

4 years agoelf32-cr16.c tidy
Alan Modra [Thu, 15 Oct 2020 22:57:10 +0000 (09:27 +1030)]
elf32-cr16.c tidy

Prompted by two occurrences of -Wmisleading-indentation warnings.

* elf32-cr16.c: Formatting.
(cr16_elf_final_link_relocate): Sign extend rather than clumsy
"add or subtract" of offset value.  Simplify range checks.  Move
common code out of "if" branches.  Don't refetch insn fields
needlessly.

4 years agoR_PPC64_GOT_LO_DS and R_PPC64_GOT_HA sanity check
Alan Modra [Thu, 15 Oct 2020 22:56:32 +0000 (09:26 +1030)]
R_PPC64_GOT_LO_DS and R_PPC64_GOT_HA sanity check

The previous sanity check allowed a ld on the HA reloc and addis
on the LO_DS.

* elf64-ppc.c (ppc64_elf_relocate_section): Tighten sanity check
on R_PPC64_GOT_LO_DS and R_PPC64_GOT_HA instructions.

4 years agoAutomatic date update in version.in
GDB Administrator [Thu, 15 Oct 2020 00:00:09 +0000 (00:00 +0000)]
Automatic date update in version.in

4 years agogdb/gdbserver: add dependencies for distclean-gnulib
Andrew Burgess [Mon, 12 Oct 2020 15:04:32 +0000 (16:04 +0100)]
gdb/gdbserver: add dependencies for distclean-gnulib

After commit:

  commit 361cb219351d8b7e39e1962fe77f40aa80657b27
  Date:   Tue Oct 6 10:09:06 2020 +0100

      gnulib: Ensure all libraries are used when building gdb/gdbserver

We now get an error when, at the top level of the build tree, we do
'make distclean'.

The reason for this is that the gnulib directory is cleaned before the
gdb directory, cleaning gnulib deletes Makefile.gnulib.inc from the
gnulib build directory, which is currently pulled in by the gdb
Makefile.in using 'include'.

This commit adds a dependency between distclean-gnulib and both
distclean-gdb and distclean-gdbserver.  This means that gdb and
gdbserver will be cleaned before gnulib, as a result the
Makefile.gnulib.inc file should exist when needed.

ChangeLog:

* Makefile.in: Rebuild.
* Makefile.def: Make distclean-gnulib depend on distclean-gdb and
distclean-gdbserver.

4 years agox86: Support Intel AVX VNNI
H.J. Lu [Wed, 14 Oct 2020 12:02:13 +0000 (05:02 -0700)]
x86: Support Intel AVX VNNI

Intel AVX VNNI instructions are marked with CpuVEX_PREFIX.  Without the
pseudo {vex} prefix, mnemonics of Intel VNNI instructions are encoded
with the EVEX prefix.  The pseudo {vex} prefix can be used to encode
mnemonics of Intel VNNI instructions with the VEX prefix.

gas/

* NEWS: Add Intel AVX VNNI.
* config/tc-i386.c (cpu_arch): Add .avx_vnni and noavx_vnni.
(cpu_flags_match): Support CpuVEX_PREFIX.
* doc/c-i386.texi: Document .avx_vnni, noavx_vnni and how to
encode Intel VNNI instructions with VEX prefix.
* testsuite/gas/i386/avx-vnni.d: New file.
* testsuite/gas/i386/avx-vnni.s: Likewise.
* testsuite/gas/i386/x86-64-avx-vnni.d: Likewise.
* testsuite/gas/i386/x86-64-avx-vnni.s: Likewise.
* testsuite/gas/i386/i386.exp: Run AVX VNNI tests.

opcodes/

* i386-dis.c (PREFIX_VEX_0F3850): New.
(PREFIX_VEX_0F3851): Likewise.
(PREFIX_VEX_0F3852): Likewise.
(PREFIX_VEX_0F3853): Likewise.
(VEX_W_0F3850_P_2): Likewise.
(VEX_W_0F3851_P_2): Likewise.
(VEX_W_0F3852_P_2): Likewise.
(VEX_W_0F3853_P_2): Likewise.
(prefix_table): Add PREFIX_VEX_0F3850, PREFIX_VEX_0F3851,
PREFIX_VEX_0F3852 and PREFIX_VEX_0F3853.
(vex_table): Add VEX_W_0F3850_P_2, VEX_W_0F3851_P_2,
VEX_W_0F3852_P_2 and VEX_W_0F3853_P_2.
(putop): Add support for "XV" to print "{vex3}" pseudo prefix.
* i386-gen.c (cpu_flag_init): Clear the CpuAVX_VNNI bit in
CPU_UNKNOWN_FLAGS.  Add CPU_AVX_VNNI_FLAGS and
CPU_ANY_AVX_VNNI_FLAGS.
(cpu_flags): Add CpuAVX_VNNI and CpuVEX_PREFIX.
* i386-opc.h (CpuAVX_VNNI): New.
(CpuVEX_PREFIX): Likewise.
(i386_cpu_flags): Add cpuavx_vnni and cpuvex_prefix.
* i386-opc.tbl: Add Intel AVX VNNI instructions.
* i386-init.h: Regenerated.
* i386-tbl.h: Likewise.

4 years agox86: Add support for Intel HRESET instruction
Lili Cui [Wed, 14 Oct 2020 11:52:11 +0000 (04:52 -0700)]
x86: Add support for Intel HRESET instruction

gas/

* NEWS: Add Intel HRESET.
* config/tc-i386.c (cpu_arch): Add .hreset.
(cpu_noarch): Likewise.
* doc/c-i386.texi: Document .hreset, nohreset.
* testsuite/gas/i386/i386.exp: Run HRESET tests.
* testsuite/gas/i386/hreset.d: New file.
* testsuite/gas/i386/x86-64-hreset.d: Likewise.
* testsuite/gas/i386/hreset.s: Likewise.

opcodes/

* i386-dis.c (PREFIX_0F3A0F): New.
(MOD_0F3A0F_PREFIX_1): Likewise.
(REG_0F3A0F_PREFIX_1_MOD_3): Likewise.
(RM_0F3A0F_P_1_MOD_3_REG_0): Likewise.
(prefix_table): Add PREFIX_0F3A0F.
(mod_table): Add MOD_0F3A0F_PREFIX_1.
(reg_table): Add REG_0F3A0F_PREFIX_1_MOD_3.
(rm_table): Add RM_0F3A0F_P_1_MOD_3_REG_0.
* i386-gen.c (cpu_flag_init): Add HRESET_FLAGS,
CPU_ANY_HRESET_FLAGS.
(cpu_flags): Add CpuHRESET.
(output_i386_opcode): Allow 4 byte base_opcode.
* i386-opc.h (enum): Add CpuHRESET.
(i386_cpu_flags): Add cpuhreset.
* i386-opc.tbl: Add Intel HRESET instruction.
* i386-init.h: Regenerate.
* i386-tbl.h: Likewise.

4 years agox86: Support Intel UINTR
Lili Cui [Wed, 14 Oct 2020 11:31:54 +0000 (04:31 -0700)]
x86: Support Intel UINTR

gas/

* NEWS: Add Intel UINTR.
* config/tc-i386.c (cpu_arch): Add .uintr.
(cpu_noarch): Likewise.
* doc/c-i386.texi: Document .uintr and nouintr.
* testsuite/gas/i386/i386.exp: Run UINTR tests.
* testsuite/gas/i386/x86-64-uintr.d: Likewise.
* testsuite/gas/i386/x86-64-uintr.s: Likewise.

opcodes/

* i386-dis.c (enum): Add
PREFIX_MOD_3_0F01_REG_5_RM_4,
PREFIX_MOD_3_0F01_REG_5_RM_5,
PREFIX_MOD_3_0F01_REG_5_RM_6,
PREFIX_MOD_3_0F01_REG_5_RM_7,
X86_64_0F01_REG_5_MOD_3_RM_4_PREFIX_1,
X86_64_0F01_REG_5_MOD_3_RM_5_PREFIX_1,
X86_64_0F01_REG_5_MOD_3_RM_6_PREFIX_1,
X86_64_0F01_REG_5_MOD_3_RM_7_PREFIX_1,
X86_64_0FC7_REG_6_MOD_3_PREFIX_1.
(prefix_table): New instructions (see prefixes above).
(rm_table): Likewise
* i386-gen.c (cpu_flag_init): Add CPU_UINTR_FLAGS,
CPU_ANY_UINTR_FLAGS.
(cpu_flags): Add CpuUINTR.
* i386-opc.h (enum): Add CpuUINTR.
(i386_cpu_flags): Add cpuuintr.
* i386-opc.tbl: Add UINTR insns.
* i386-init.h: Regenerate.
* i386-tbl.h: Likewise.

4 years agox86: Remove the prefix byte from non-VEX/EVEX base_opcode
H.J. Lu [Wed, 14 Oct 2020 11:17:54 +0000 (04:17 -0700)]
x86: Remove the prefix byte from non-VEX/EVEX base_opcode

Replace the prefix byte in non-VEX/EVEX base_opcode with PREFIX_0X66,
PREFIX_0XF2 or PREFIX_0XF3.

gas/

* config/tc-i386.c (load_insn_p): Check opcodeprefix == 0 for
base_opcode == 0xfc7.
(match_template): Likewise.
(process_suffix): Check opcodeprefix == PREFIX_0XF2 for CRC32.
(check_byte_reg): Likewise.
(output_insn): Don't add the 0xf3 prefix twice for PadLock
instructions.  Don't add prefix from non-VEX/EVEX base_opcode.

opcodes/

* i386-gen.c (process_i386_opcode_modifier): Return 1 for
non-VEX/EVEX/prefix encoding.
(output_i386_opcode): Fail if non-VEX/EVEX/prefix base_opcode
has a prefix byte.
* i386-opc.tbl: Replace the prefix byte in non-VEX/EVEX
base_opcode with PREFIX_0X66, PREFIX_0XF2 or PREFIX_0XF3.
* i386-tbl.h: Regenerated.

4 years ago[gdb/testsuite] Fix gdb.ada/mi_catch_ex{,_hand}.exp FAILs
Tom de Vries [Wed, 14 Oct 2020 11:17:58 +0000 (13:17 +0200)]
[gdb/testsuite] Fix gdb.ada/mi_catch_ex{,_hand}.exp FAILs

The test-case gdb.ada/mi_catch_ex.exp tests two scenarios.

The two scenarios are separated by:
- a mi_run_to_main (before commit b75d55d4d2 "Eliminate mi_run_to_main,
  introduce mi_clean_restart")
- a mi_runto_main (after that commit)

The now removed mi_run_to_main contained a mi_delete_breakpoints, while
mi_runto_main does not, which causes FAILs in the second scenario.

Fix this by adding the missing mi_delete_breakpoints in the test-case, and
likewise in gdb.ada/mi_catch_ex_hand.exp.

Reg-tested on x86_64-linux.

gdb/testsuite/ChangeLog:

2020-10-14  Tom de Vries  <tdevries@suse.de>

PR testsuite/26732
* gdb.ada/mi_catch_ex.exp: Do mi_delete_breakpoints before running
scenario 2.
* gdb.ada/mi_catch_ex_hand.exp: Same.

4 years ago[gdb] Fix segfault in solib_contains_address_p
Tom de Vries [Wed, 14 Oct 2020 10:24:42 +0000 (12:24 +0200)]
[gdb] Fix segfault in solib_contains_address_p

Starting commit bb2a67773c "Use a std::vector in target_section_table" we run
into:
...
ERROR: GDB process no longer exists
GDB process exited with wait status 22239 exp12 0 0 CHILDKILLED SIGABRT
UNRESOLVED: gdb.base/exec-invalid-sysroot.exp: continue to exec catchpoint
...
which reproduces as:
...
Thread 1 "gdb" received signal SIGSEGV, Segmentation fault.
solib_contains_address_p (address=4196111, solib=0x1dd9970)
    at /home/vries/gdb_versions/devel/src/gdb/solib.c:1120
1120      for (target_section &p : solib->sections->sections)
(gdb) p solib->sections->sections
Cannot access memory at address 0x0
...

Fix this by handling solib->sections == nullptr in solib_contains_address_p.

Build and reg-tested on x86_64-linux.

gdb/ChangeLog:

2020-10-14  Tom de Vries  <tdevries@suse.de>

PR gdb/26733
* solib.c (solib_contains_address_p): Handle
'solib->sections == nullptr'.

4 years agox86: Rename VexOpcode to OpcodePrefix
H.J. Lu [Wed, 14 Oct 2020 02:28:58 +0000 (19:28 -0700)]
x86: Rename VexOpcode to OpcodePrefix

Rename VexOpcode to OpcodePrefix so that OpcodePrefix can be used for
regular encoding prefix.

gas/

* config/tc-i386.c (build_vex_prefix): Replace vexopcode with
opcodeprefix.
(build_evex_prefix): Likewise.
(is_any_vex_encoding): Don't check vexopcode.
(output_insn): Handle opcodeprefix.

opcodes/

* i386-gen.c (opcode_modifiers): Replace VexOpcode with
OpcodePrefix.
* i386-opc.h (VexOpcode): Renamed to ...
(OpcodePrefix): This.
(PREFIX_NONE): New.
(PREFIX_0X66): Likewise.
(PREFIX_0XF2): Likewise.
(PREFIX_0XF3): Likewise.
* i386-opc.tbl (Prefix_0X66): New.
(Prefix_0XF2): Likewise.
(Prefix_0XF3): Likewise.
Replace VexOpcode= with OpcodePrefix=.  Use Prefix_0X66 on xorpd.
Use Prefix_0XF3 on cvtdq2pd.  Use Prefix_0XF2 on cvtpd2dq.
* i386-tbl.h: Regenerated.

4 years agoAutomatic date update in version.in
GDB Administrator [Wed, 14 Oct 2020 00:00:10 +0000 (00:00 +0000)]
Automatic date update in version.in

4 years agoEliminate mi_run_to_main, introduce mi_clean_restart
Pedro Alves [Sun, 11 Oct 2020 20:58:31 +0000 (21:58 +0100)]
Eliminate mi_run_to_main, introduce mi_clean_restart

Since we now have mi_runto_main which is like runto_main, eliminate
mi_run_to_main, in favor of a new MI clean_restart counterpart --
mi_clean_restart -- and mi_runto_main.

This makes MI testcases look a bit more like CLI testcases.

gdb/testsuite/ChangeLog:

* lib/mi-support.exp (mi_clean_restart): New.
(mi_run_to_main): Delete.
All callers adjust to use mi_clean_restart / mi_runto_main.

Change-Id: I34920bab4fea1f23fb752928c2969c1f6ad714b6

4 years agogdb/testsuite/: Use "-qualified" in explicit "break main", etc.
Pedro Alves [Thu, 3 Sep 2020 14:38:12 +0000 (15:38 +0100)]
gdb/testsuite/: Use "-qualified" in explicit "break main", etc.

Similar to the previous patch, but this time add "-q" to tests that do
"break main", "list main", etc. explicitly.

gdb/testsuite/ChangeLog:

* config/monitor.exp: Use "list -q".
* gdb.arch/gdb1558.exp: Use "break -q".
* gdb.arch/i386-permbkpt.exp: Use "break -q".
* gdb.arch/i386-prologue-skip-cf-protection.exp: Use "break -q".
* gdb.base/break.exp: Use "break -q", "list -q" and "tbreak -q".
* gdb.base/commands.exp: Use "break -q".
* gdb.base/condbreak.exp: Use "break -q".
* gdb.base/ctf-ptype.exp: Use "list -q".
* gdb.base/define.exp: Use "break -q".
* gdb.base/del.exp: Use "break -q".
* gdb.base/fullname.exp: Use "break -q".
* gdb.base/hbreak-in-shr-unsupported.exp: Use "hbreak -q".
* gdb.base/hbreak-unmapped.exp: Use "hbreak -q".
* gdb.base/hbreak2.exp: Use "hbreak -q" and "list -q".
* gdb.base/hw-sw-break-same-address.exp: Use "break -q" and
"hbreak -q".
* gdb.base/included.exp: Use "list -q".
* gdb.base/label.exp: Use "break -q".
* gdb.base/lineinc.exp: Use "break -q".
* gdb.base/list.exp: Use "list -q".
* gdb.base/macscp.exp: Use "list -q".
* gdb.base/pending.exp: Use "break -q".
* gdb.base/prologue-include.exp: Use "break -q".
* gdb.base/ptype.exp: Use "list -q".
* gdb.base/sepdebug.exp: Use "break -q", "list -q" and "tbreak -q".
* gdb.base/server-del-break.exp: Use "break -q".
* gdb.base/style.exp: Use "break -q".
* gdb.base/symbol-without-target_section.exp: Use "list -q".
* gdb.base/watchpoint-reuse-slot.exp: Use "hbreak -q".
* gdb.cp/exception.exp: Use "tbreak -q".
* gdb.dwarf2/dw2-error.exp: Use "break -q".
* gdb.dwarf2/fission-mix.exp: Use "break -q".
* gdb.dwarf2/fission-reread.exp: Use "break -q".
* gdb.dwarf2/pr13961.exp: Use "break -q".
* gdb.linespec/explicit.exp: Use "list -q".
* gdb.linespec/linespec.exp: Use "break -q".
* gdb.mi/mi-simplerun.exp: Use "--qualified".
* gdb.python/py-mi-objfile-gdb.py: Use "list -q".
* gdb.server/bkpt-other-inferior.exp: Use "break -q".
* gdb.server/connect-without-multi-process.exp: Use "break -q".
* gdb.trace/change-loc.exp: Use "break -q".
* gdb.trace/pending.exp: Use "break -q".
* gdb.tui/basic.exp: Use "list -q".
* gdb.tui/list-before.exp: Use "list -q".
* gdb.tui/list.exp: Use "list -q".
* lib/gdb.exp (gdb_has_argv0): Use "break -q".

Change-Id: Iab9408e90ed71cbb111cd737d2d81b5ba8adb108

4 years agogdb/testsuite/: Use -qualified in runto_main / mi_runto_main
Pedro Alves [Wed, 2 Sep 2020 22:20:45 +0000 (23:20 +0100)]
gdb/testsuite/: Use -qualified in runto_main / mi_runto_main

In some runtimes, there may be a "main" function in some class or
namespace.  The breakpoint created by runto_main may therefore have
unexpected locations on some other functions than the actual main.
These breakpoint locations can unexpectedly get hit during tests and
lead to failures.

I saw this while playing with AMD's ROCm toolchain -- I wrote a board
file to run the testsuite against device kernels.  There, the runtime
calls a "main" function before the device kernel code is reached:

 Thread 4 "bit_extract" hit Breakpoint 1, 0x00007ffeea140960 in lld::elf::LinkerDriver::main(llvm::ArrayRef<char const*>) () from /opt/rocm/lib/libamd_comgr.so.1
 (gdb) bt
 #0  0x00007ffeea140960 in lld::elf::LinkerDriver::main(llvm::ArrayRef<char const*>) () from /opt/rocm/lib/libamd_comgr.so.1
 #1  0x00007ffeea2257a5 in lld::elf::link(llvm::ArrayRef<char const*>, bool, llvm::raw_ostream&, llvm::raw_ostream&) () from /opt/rocm/lib/libamd_comgr.so.1
 #2  0x00007ffeea1bc374 in COMGR::linkWithLLD(llvm::ArrayRef<char const*>, llvm::raw_ostream&, llvm::raw_ostream&) () from /opt/rocm/lib/libamd_comgr.so.1
 #3  0x00007ffeea1bfb09 in COMGR::InProcessDriver::execute(llvm::ArrayRef<char const*>) () from /opt/rocm/lib/libamd_comgr.so.1
 #4  0x00007ffeea1c4da9 in COMGR::AMDGPUCompiler::linkToExecutable() () from /opt/rocm/lib/libamd_comgr.so.1
 #5  0x00007ffeea1fde20 in dispatchCompilerAction(amd_comgr_action_kind_s, COMGR::DataAction*, COMGR::DataSet*, COMGR::DataSet*, llvm::raw_ostream&) () from /opt/rocm/lib/libamd_comgr.so.1
 #6  0x00007ffeea203a87 in amd_comgr_do_action () from /opt/rocm/lib/libamd_comgr.so.1
 ...

To avoid that, pass "qualified" to runto, in runto_main, so that
gdb_breakpoint ends up creating a breakpoint with -qualified.  This
avoids creating breakpoints locations for other unrelated "main"
functions.

Note: I first tried making runto itself use "-qualified", but that
caused regressions in the gdb.ada/ tests, which use runto without
specifying the whole fully-qualified function name (i.e., without the
package).  So I end up restricting the -qualified to
runto_main/mi_runto_main.

The gdb.base/ui-redirect.exp change is necessary because that testcase
is looking at what "save breakpoint" generates.

gdb/testsuite/ChangeLog:

* gdb.base/ui-redirect.exp: Expect "break -qualified main" in
saved breakpoints file.
* gdb.guile/scm-breakpoint.exp: Expect "-qualified main" when
inspecting breakpoint list.
* lib/gdb.exp (runto_main): Add "qualified" to options.
* lib/mi-support.exp (mi_runto_helper): Add 'qualified' parameter,
and handle it.
(mi_runto_main): Pass 1 as qualified argument.

Change-Id: I51468359ab0a518f05f7c0394c97f7e33b45fe69

4 years agoIntroduce mi_runto_main
Pedro Alves [Wed, 2 Sep 2020 22:06:19 +0000 (23:06 +0100)]
Introduce mi_runto_main

This adds an mi_runto_main routine, very much like the runto_main CLI
counterpart.

Note there's already a mi_run_to_main (extra underscore in "run_to"),
but unlike its intro comment says, that does more than the CLI's
runto_main -- it also starts GDB.  I would like to eliminate that
other one by introducing a mi_clean_restart function instead.  That is
done later in the series.

gdb/testsuite/ChangeLog:

* lib/mi-support.exp (mi_runto_main): New proc.
(mi_run_to_main): Use it.
* gdb.mi/mi-catch-cpp-exceptions.exp: Likewise.
* gdb.mi/mi-var-cmd.exp: Likewise.
* gdb.mi/mi-var-invalidate.exp: Likewise.
* mi-var-list-children-invalid-grandchild.exp: Likewise.
* gdb.mi/mi2-amd64-entry-value.exp: Likewise.
* gdb.mi/new-ui-mi-sync.exp: Likewise.
* gdb.mi/user-selected-context-sync.exp: Likewise.
* gdb.opt/inline-cmds.exp: Likewise.
* gdb.python/py-framefilter-mi.exp: Likewise.
* gdb.python/py-mi.exp: Likewise.

Change-Id: I2e49ca7b0b61cea57c1202e5dfa32417e6a4403d

4 years ago'runto main' -> 'runto_main' throughout
Pedro Alves [Wed, 2 Sep 2020 21:57:54 +0000 (22:57 +0100)]
'runto main' -> 'runto_main' throughout

This commit does 's/runto main/runto_main/g' throughout.

gdb/testsuite/ChangeLog:

* gdb.ada/fun_in_declare.exp: Use "runto_main" instead of
"runto main".
* gdb.ada/small_reg_param.exp: Likewise.
* gdb.arch/powerpc-d128-regs.exp: Likewise.
* gdb.base/annota1.exp: Likewise.
* gdb.base/anon.exp: Likewise.
* gdb.base/breakpoint-in-ro-region.exp: Likewise.
* gdb.base/dprintf-non-stop.exp: Likewise.
* gdb.base/dprintf.exp: Likewise.
* gdb.base/gdb11530.exp: Likewise.
* gdb.base/gdb11531.exp: Likewise.
* gdb.base/gnu_vector.exp: Likewise.
* gdb.base/interrupt-noterm.exp: Likewise.
* gdb.base/memattr.exp: Likewise.
* gdb.base/step-over-syscall.exp: Likewise.
* gdb.base/watch-cond-infcall.exp: Likewise.
* gdb.base/watch-read.exp: Likewise.
* gdb.base/watch-vfork.exp: Likewise.
* gdb.base/watch_thread_num.exp: Likewise.
* gdb.base/watchpoint-stops-at-right-insn.exp: Likewise.
* gdb.guile/scm-frame-inline.exp: Likewise.
* gdb.linespec/explicit.exp: Likewise.
* gdb.opt/inline-break.exp: Likewise.
* gdb.python/py-frame-inline.exp: Likewise.
* gdb.reverse/break-precsave.exp: Likewise.
* gdb.reverse/break-reverse.exp: Likewise.
* gdb.reverse/consecutive-precsave.exp: Likewise.
* gdb.reverse/consecutive-reverse.exp: Likewise.
* gdb.reverse/finish-precsave.exp: Likewise.
* gdb.reverse/finish-reverse.exp: Likewise.
* gdb.reverse/fstatat-reverse.exp: Likewise.
* gdb.reverse/getresuid-reverse.exp: Likewise.
* gdb.reverse/i386-precsave.exp: Likewise.
* gdb.reverse/i386-reverse.exp: Likewise.
* gdb.reverse/i386-sse-reverse.exp: Likewise.
* gdb.reverse/i387-env-reverse.exp: Likewise.
* gdb.reverse/i387-stack-reverse.exp: Likewise.
* gdb.reverse/insn-reverse.exp: Likewise.
* gdb.reverse/machinestate-precsave.exp: Likewise.
* gdb.reverse/machinestate.exp: Likewise.
* gdb.reverse/pipe-reverse.exp: Likewise.
* gdb.reverse/readv-reverse.exp: Likewise.
* gdb.reverse/recvmsg-reverse.exp: Likewise.
* gdb.reverse/rerun-prec.exp: Likewise.
* gdb.reverse/s390-mvcle.exp: Likewise.
* gdb.reverse/solib-precsave.exp: Likewise.
* gdb.reverse/solib-reverse.exp: Likewise.
* gdb.reverse/step-precsave.exp: Likewise.
* gdb.reverse/step-reverse.exp: Likewise.
* gdb.reverse/time-reverse.exp: Likewise.
* gdb.reverse/until-precsave.exp: Likewise.
* gdb.reverse/until-reverse.exp: Likewise.
* gdb.reverse/waitpid-reverse.exp: Likewise.
* gdb.reverse/watch-precsave.exp: Likewise.
* gdb.reverse/watch-reverse.exp: Likewise.
* gdb.threads/kill.exp: Likewise.
* gdb.threads/tid-reuse.exp: Likewise.

Change-Id: I70f457253836019880b4d7fb981936afa56724c2

4 years agogdb: don't pass TARGET_WNOHANG to targets that can't async (PR 26642)
Simon Marchi [Tue, 13 Oct 2020 16:01:19 +0000 (12:01 -0400)]
gdb: don't pass TARGET_WNOHANG to targets that can't async (PR 26642)

Debugging with "maintenance set target-async off" on Linux has been
broken since 5b6d1e4fa4f ("Multi-target support").

The issue is easy to reproduce:

    $ ./gdb -q --data-directory=data-directory -nx ./test
    Reading symbols from ./test...
    (gdb) maintenance set target-async off
    (gdb) start
    Temporary breakpoint 1 at 0x1151: file test.c, line 5.
    Starting program: /home/simark/build/binutils-gdb/gdb/test

... and it hangs there.

The difference between pre-5b6d1e4fa4f and 5b6d1e4fa4f is that
fetch_inferior_event now calls target_wait with TARGET_WNOHANG for
non-async-capable targets, whereas it didn't before.

For non-async-capable targets, this is how it's expected to work when
resuming execution:

1. we call resume
2. the infrun async handler is marked in prepare_to_wait, to immediately
   wake up the event loop when we get back to it
3. fetch_inferior_event calls the target's wait method without
   TARGET_WNOHANG, effectively blocking until the target has something
   to report

However, since we call the target's wait method with TARGET_WNOHANG,
this happens:

1. we call resume
2. the infrun async handler is marked in prepare_to_wait, to immediately
   wake up the event loop when we get back to it
3. fetch_inferior_event calls the target's wait method with
   TARGET_WNOHANG, the target has nothing to report yet
4. we go back to blocking on the event loop
5. SIGCHLD finally arrives, but the event loop is not woken up, because
   we are not in async mode.  Normally, we should have been stuck in
   waitpid the SIGCHLD would have unblocked us.

We end up in this situation because these two necessary conditions are
met:

1. GDB uses the TARGET_WNOHANG option with a target that can't do async.
   I don't think this makes sense.  I mean, it's technically possible,
   the doc for TARGET_WNOHANG is:

  /* Return immediately if there's no event already queued.  If this
     options is not requested, target_wait blocks waiting for an
     event.  */
  TARGET_WNOHANG = 1,

   ... which isn't in itself necessarily incompatible with synchronous
   targets.  It could be possible for a target to support non-blocking
   polls, while not having a way to asynchronously wake up the event
   loop, which is also necessary to support async.  But as of today,
   we don't expect GDB and sync targets to work this way.

2. The linux-nat target, even in the mode where it emulates a
   synchronous target (with "maintenance set target-async off") respects
   TARGET_WNOHANG.  Other non-async targets, such as windows_nat_target,
   simply don't check / support TARGET_WNOHANG, so their wait method is
   always blocking.

Fix the first issue by avoiding using TARGET_WNOHANG on non-async
targets, in do_target_wait_1.  Add an assert in target_wait to verify it
doesn't happen.

The new test gdb.base/maint-target-async-off.exp is a simple test that
just tries running to main and then to the end of the program, with
"maintenance set target-async off".

gdb/ChangeLog:

PR gdb/26642
* infrun.c (do_target_wait_1): Clear TARGET_WNOHANG if the
target can't do async.
* target.c (target_wait): Assert that we don't pass
TARGET_WNOHANG to a target that can't async.

gdb/testsuite/ChangeLog:

PR gdb/26642
* gdb.base/maint-target-async-off.c: New test.
* gdb.base/maint-target-async-off.exp: New test.

Change-Id: I69ad3a14598863d21338a8c4e78700a58ce7ad86

4 years agoRemove unneeded netbsd_add_process()
Kamil Rytarowski [Fri, 2 Oct 2020 02:17:57 +0000 (04:17 +0200)]
Remove unneeded netbsd_add_process()

Currently it does not add any value.

The netbsd_tdesc local variable is no longer needed. Remove it.
The tdesc value is set by the low target now.

gdbserver/ChangeLog:

        * netbsd-low.cc (netbsd_tdesc): Remove.
        (netbsd_add_process): Likewise.
        (netbsd_process_target::create_inferior): Update.

4 years agogold: Skip some incremental tests
H.J. Lu [Tue, 13 Oct 2020 12:22:55 +0000 (05:22 -0700)]
gold: Skip some incremental tests

Skip incremental_test_2, incremental_test_3, incremental_test_4,
incremental_test_5, incremental_copy_test, incremental_common_test_1
and incremental_comdat_test_1 when -fcf-protection is used to compile
gold since gold doesn't properly support -fcf-protection on Intel CET
enabled OS.

Also skip incremental_copy_test and incremental_comdat_test_1 for GCC 9
or later since they failed with GCC 9 or later.

PR gold/23539
* configure.ac: Check for GCC 9 or later and for -fcf-protection.
* configure: Regenerated.
* testsuite/Makefile.am (check_PROGRAMS): Skip incremental_test_2,
incremental_test_3, incremental_test_4, incremental_test_5,
incremental_copy_test, incremental_common_test_1 and
incremental_comdat_test_1 for -fcf-protection.  Also Skip
incremental_copy_test and incremental_comdat_test_1 for GCC 9 or
later.
* testsuite/Makefile.in: Regenerated.

4 years agogold: Discard .note.gnu.property section
H.J. Lu [Tue, 13 Oct 2020 12:21:53 +0000 (05:21 -0700)]
gold: Discard .note.gnu.property section

Discard .note.gnu.property section since it changes the expected section
order.

PR gold/23503
* testsuite/Makefile.am (justsyms_lib): Pass
-T $(srcdir)/justsyms_lib.t to gold.
* testsuite/Makefile.in: Regenerated.
* testsuite/justsyms_lib.t: New file.
* testsuite/script_test_10.t: Discard .note.gnu.property section.

4 years agogold: Update GNU_PROPERTY_X86_XXX macros
H.J. Lu [Tue, 13 Oct 2020 12:20:49 +0000 (05:20 -0700)]
gold: Update GNU_PROPERTY_X86_XXX macros

This patch updates GNU_PROPERTY_X86_XXX macros for gold:

1. GNU_PROPERTY_X86_UINT32_AND_XXX: A 4-byte unsigned integer property.
A bit is set if it is set in all relocatable inputs:

 #define GNU_PROPERTY_X86_UINT32_AND_LO      0xc0000002
 #define GNU_PROPERTY_X86_UINT32_AND_HI      0xc0007fff

2. GNU_PROPERTY_X86_UINT32_OR_XXX: A 4-byte unsigned integer property.
A bit is set if it is set in any relocatable inputs:

 #define GNU_PROPERTY_X86_UINT32_OR_LO    0xc0008000
 #define GNU_PROPERTY_X86_UINT32_OR_HI    0xc000ffff

3. GNU_PROPERTY_X86_UINT32_OR_AND_XXX: A 4-byte unsigned integer property.
A bit is set if it is set in any relocatable inputs and the property is
present in all relocatable inputs:

 #define GNU_PROPERTY_X86_UINT32_OR_AND_LO   0xc0010000
 #define GNU_PROPERTY_X86_UINT32_OR_AND_HI   0xc0017fff

4. GNU_PROPERTY_X86_FEATURE_2_NEEDED, GNU_PROPERTY_X86_FEATURE_2_USED
and GNU_PROPERTY_X86_FEATURE_2_XXX bits.

GNU_PROPERTY_X86_FEATURE_1_AND is unchanged.  GNU_PROPERTY_X86_ISA_1_USED
and GNU_PROPERTY_X86_ISA_1_NEEDED are updated to better support targeted
processors since GNU_PROPERTY_X86_ISA_1_?86 aren't isn't very useful.
A new set of GNU_PROPERTY_X86_ISA_1_XXX bits are defined.  The previous
GNU_PROPERTY_X86_ISA_1_XXX macros are deprecated and renamed to
GNU_PROPERTY_X86_COMPAT_ISA_1_XXX and GNU_PROPERTY_X86_COMPAT_2_ISA_1_XXX.

elfcpp/

* elfcpp.h (GNU_PROPERTY_X86_ISA_1_USED): Renamed to ...
(GNU_PROPERTY_X86_COMPAT_ISA_1_USED): This.
(GNU_PROPERTY_X86_ISA_1_NEEDED): Renamed to ...
(GNU_PROPERTY_X86_COMPAT_ISA_1_NEEDED): This.
(GNU_PROPERTY_X86_UINT32_AND_LO): New.
(GNU_PROPERTY_X86_UINT32_AND_HI): Likewise.
(GNU_PROPERTY_X86_UINT32_OR_LO): Likewise.
(GNU_PROPERTY_X86_UINT32_OR_HI): Likewise.
(GNU_PROPERTY_X86_UINT32_OR_AND_LO): Likewise.
(GNU_PROPERTY_X86_UINT32_OR_AND_HI): Likewise.
(GNU_PROPERTY_X86_COMPAT_2_ISA_1_NEEDED): New.
(GNU_PROPERTY_X86_COMPAT_2_ISA_1_NEEDED): Likewise.
(GNU_PROPERTY_X86_FEATURE_1_AND): Updated to
(GNU_PROPERTY_X86_UINT32_AND_LO + 0).
(GNU_PROPERTY_X86_ISA_1_NEEDED): New.  Defined to
GNU_PROPERTY_X86_UINT32_OR_LO + 2.
(GNU_PROPERTY_X86_FEATURE_2_NEEDED): New.  Defined to
(GNU_PROPERTY_X86_UINT32_OR_LO + 1).
(GNU_PROPERTY_X86_ISA_1_USED): New.  Defined to
GNU_PROPERTY_X86_UINT32_OR_AND_LO + 2.
(GNU_PROPERTY_X86_FEATURE_2_USED): New.  Defined to
(GNU_PROPERTY_X86_UINT32_OR_AND_LO + 1).

gold/

* x86_64.cc (Target_x86_64::Target_x86_64): Initialize
feature_2_used_, feature_2_needed_ and object_feature_2_used_.
(Target_x86_64::feature_2_used_): New data member.
(Target_x86_64::feature_2_needed_): Likewise.
(Target_x86_64::object_isa_1_used_): Likewise.
(Target_x86_64::record_gnu_property): Support
GNU_PROPERTY_X86_COMPAT_ISA_1_USED,
GNU_PROPERTY_X86_COMPAT_ISA_1_NEEDED,
GNU_PROPERTY_X86_COMPAT_2_ISA_1_USED,
GNU_PROPERTY_X86_COMPAT_2_ISA_1_NEEDED,
GNU_PROPERTY_X86_FEATURE_2_USED and
GNU_PROPERTY_X86_FEATURE_2_NEEDED.
(Target_x86_64::merge_gnu_properties): Merge FEATURE_2_USED bits.
Initialize object_feature_2_used_.
(Target_x86_64::do_finalize_gnu_properties): Support
GNU_PROPERTY_X86_FEATURE_2_USED and
GNU_PROPERTY_X86_FEATURE_2_NEEDED.
* testsuite/gnu_property_a.S (GNU_PROPERTY_X86_ISA_1_USED): Set
to 0xc0010002.
(GNU_PROPERTY_X86_ISA_1_NEEDED): Set to 0xc0008002.
* testsuite/gnu_property_b.S (GNU_PROPERTY_X86_ISA_1_USED): Set
to 0xc0010002.
(GNU_PROPERTY_X86_ISA_1_NEEDED): Set to 0xc0008002.
* testsuite/gnu_property_c.S (GNU_PROPERTY_X86_ISA_1_USED): Set
to 0xc0010002.
(GNU_PROPERTY_X86_ISA_1_NEEDED): Set to 0xc0008002.
* testsuite/gnu_property_test.sh: Updated.

4 years agogold: Properly align the NT_GNU_PROPERTY_TYPE_0 note
H.J. Lu [Tue, 13 Oct 2020 12:18:13 +0000 (05:18 -0700)]
gold: Properly align the NT_GNU_PROPERTY_TYPE_0 note

The NT_GNU_PROPERTY_TYPE_0 note should be aligned to 8 bytes for 64-bit
ELF as specified by gABI.  A note section can be only placed in a PT_NOTE
segment with the same alignment.

PR gold/22914
PR gold/23535
* layout.cc (Layout::attach_allocated_section_to_segment): Place
a note section in a PT_NOTE segment with the same alignment.  Set
the alignment of the PT_NOTE segment from the alignment of the
note section.
(Layout::create_note): Align the NT_GNU_PROPERTY_TYPE_0 note to 8
bytes for 64-bit ELF.
(Layout::segment_precedes): Place segments with larger alignments
first.
* output.cc (Output_segment::Output_segment): Initialize align_.
* output.h (Output_segment): Add align, set_align and align_.
* testsuite/Makefile.am (gnu_property_test.stdout): Pass -lhSWn
to $(TEST_READELF).
(gnu_property_test): Pass --build-id to ld.
* testsuite/Makefile.in: Regenerated.
* testsuite/gnu_property_test.sh (check_alignment): New.
Use check_alignment to check the NT_GNU_PROPERTY_TYPE_0 note
alignment.  Verify that there are 2 PT_NOTE segments.

4 years agoGold: Enable safe ICF for shared object on x86-64
H.J. Lu [Tue, 13 Oct 2020 12:10:24 +0000 (05:10 -0700)]
Gold: Enable safe ICF for shared object on x86-64

With

commit 4aebb6312eb5dcd12f2f8420028547584b708907
Author: Rahul Chaudhry <rahulchaudhry@google.com>
Date:   Wed Feb 15 00:37:10 2017 -0800

    Improved support for --icf=safe when used with -pie.

we now check opcode with R_X86_64_PC32 relocation, which tell branches
from other instructions.  We can enable safe ICF for shared object on
x86-64.  Also, global symbols with non-default visibility should be
folded like local symbols.

PR gold/21452
* x86_64.cc (Scan::local_reloc_may_be_function_pointer): Remove
check for shared library.
(Scan::global_reloc_may_be_function_pointer): Remove check for
shared library and symbol visibility.
* testsuite/icf_safe_so_test.cc (bar_static): New function.
(main): Take function address of bar_static and use it.
* testsuite/icf_safe_so_test.sh (arch_specific_safe_fold): Also
check fold on x86-64.  Check bar_static isn't folded.

4 years agoGold: Skip zero-sized sections for ICF
H.J. Lu [Tue, 13 Oct 2020 12:08:25 +0000 (05:08 -0700)]
Gold: Skip zero-sized sections for ICF

Skip zero-sized sections since there is no need to do ICF on them.

* icf.cc (Icf::find_identical_sections): Skip zero-sized sections.

This page took 0.117982 seconds and 5 git commands to generate.