Commit Graph

103821 Commits

Author SHA1 Message Date
Tom de Vries
ae86f581c2 [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.
2020-10-20 10:20:25 +02:00
Tom de Vries
8c1613603d [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.
2020-10-20 10:20:25 +02:00
Tom de Vries
9c2412ec7f [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.
2020-10-20 10:20:24 +02:00
Tom de Vries
0cd2ad78f1 [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.
2020-10-20 10:20:24 +02:00
Alan Modra
b9e920ecd6 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.
2020-10-20 18:03:19 +10:30
Nelson Chu
ce786647f0 binutils: Add myself as RISC-V co-maintainer.
binutils/
	* MAINTAINERS (RISC-V): Add myself as RISC-V co-maintainer.
2020-10-20 12:34:36 +08:00
GDB Administrator
a2b149805d Automatic date update in version.in 2020-10-20 00:00:07 +00:00
Tom Tromey
22cc388e2b 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.
2020-10-19 13:45:24 -06:00
Tankut Baris Aktemur
3c6eb4d439 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'.
2020-10-19 18:01:36 +02:00
Tankut Baris Aktemur
267037210c 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.
2020-10-19 17:41:51 +02:00
Mihails Strasuns
61c26be85f gdb: get jiter objfile from a bound minsym
This fixes a regression introduced by the following commit:

fe053b9e85 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.
2020-10-19 16:52:34 +02:00
Nick Clifton
0f03783c8e 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.
2020-10-19 15:27:58 +01:00
Alan Modra
740341b9be 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.
2020-10-19 16:28:43 +10:30
GDB Administrator
13e86dcf7a Automatic date update in version.in 2020-10-19 00:00:07 +00:00
GDB Administrator
1341d6de52 Automatic date update in version.in 2020-10-18 00:00:07 +00:00
Tom Tromey
932539d7a3 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.
2020-10-17 12:34:53 -06:00
Tom Tromey
cfabbd351a 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.
2020-10-17 11:41:59 -06:00
H.J. Lu
9717970a4e 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.
2020-10-17 05:52:13 -07:00
H.J. Lu
7ffdc9ae6e 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.
2020-10-17 05:35:23 -07:00
H.J. Lu
bd0c565edb 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.
2020-10-17 04:24:22 -07:00
GDB Administrator
43f8eb7547 Automatic date update in version.in 2020-10-17 00:00:08 +00:00
Tom de Vries
520596f2eb [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.
2020-10-17 00:10:31 +02:00
Tom de Vries
d1c8a76d05 [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.
2020-10-17 00:10:31 +02:00
Andrew Burgess
874ef0386f 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.
2020-10-16 13:43:49 +01:00
Andrew Burgess
54874444da 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.
2020-10-16 13:43:48 +01:00
H.J. Lu
6915020bb1 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.
2020-10-16 04:07:59 -07:00
Nick Clifton
23ae20f5e3 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.
2020-10-16 11:37:26 +01:00
Tom de Vries
472d09c18a [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".
2020-10-16 12:06:11 +02:00
Tom de Vries
afe75f6d9f [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.
2020-10-16 11:39:02 +02:00
Cui,Lili
5739259879 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.
2020-10-16 11:37:09 +08:00
Nelson Chu
51a8a7c2e3 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.
2020-10-16 10:11:23 +08:00
Nelson Chu
02dd9d2568 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.
2020-10-16 10:11:18 +08:00
Alan Modra
e7f2f959e3 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.
2020-10-16 10:35:23 +10:30
GDB Administrator
fd63a770b7 Automatic date update in version.in 2020-10-16 00:00:07 +00:00
Alan Modra
db75b8f70c 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.
2020-10-16 09:32:56 +10:30
Alan Modra
fba8689ad3 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.
2020-10-16 09:26:32 +10:30
GDB Administrator
a1c72cdfab Automatic date update in version.in 2020-10-15 00:00:09 +00:00
Andrew Burgess
ba4d88ad89 gdb/gdbserver: add dependencies for distclean-gnulib
After commit:

  commit 361cb21935
  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.
2020-10-14 15:05:14 +01:00
H.J. Lu
58bf9b6a7f 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.
2020-10-14 05:02:31 -07:00
Lili Cui
c1fa250ae1 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.
2020-10-14 04:53:59 -07:00
Lili Cui
f64c42a9fb 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.
2020-10-14 04:31:54 -07:00
H.J. Lu
8b65b8953a 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.
2020-10-14 04:20:55 -07:00
Tom de Vries
8c8bd0babc [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.
2020-10-14 13:17:58 +02:00
Tom de Vries
76547ab31b [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'.
2020-10-14 12:24:42 +02:00
H.J. Lu
7b47a31256 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.
2020-10-13 19:29:09 -07:00
GDB Administrator
6248f5e4fc Automatic date update in version.in 2020-10-14 00:00:10 +00:00
Pedro Alves
b75d55d4d2 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
2020-10-13 22:34:54 +01:00
Pedro Alves
e777225bfd 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
2020-10-13 22:34:26 +01:00
Pedro Alves
8abd8ee8c8 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:🧝:LinkerDriver::main(llvm::ArrayRef<char const*>) () from /opt/rocm/lib/libamd_comgr.so.1
 (gdb) bt
 #0  0x00007ffeea140960 in lld:🧝:LinkerDriver::main(llvm::ArrayRef<char const*>) () from /opt/rocm/lib/libamd_comgr.so.1
 #1  0x00007ffeea2257a5 in lld:🧝: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
2020-10-13 22:28:48 +01:00
Pedro Alves
f71e6719e1 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
2020-10-13 22:28:03 +01:00