Commit Graph

104014 Commits

Author SHA1 Message Date
Nick Alcock
139633c307 libctf, include, binutils, gdb, ld: rename ctf_file_t to ctf_dict_t
The naming of the ctf_file_t type in libctf is a historical curiosity.
Back in the Solaris days, CTF dictionaries were originally generated as
a separate file and then (sometimes) merged into objects: hence the
datatype was named ctf_file_t, and known as a "CTF file".  Nowadays, raw
CTF is essentially never written to a file on its own, and the datatype
changed name to a "CTF dictionary" years ago.  So the term "CTF file"
refers to something that is never a file!  This is at best confusing.

The type has also historically been known as a 'CTF container", which is
even more confusing now that we have CTF archives which are *also* a
sort of container (they contain CTF dictionaries), but which are never
referred to as containers in the source code.

So fix this by completing the renaming, renaming ctf_file_t to
ctf_dict_t throughout, and renaming those few functions that refer to
CTF files by name (keeping compatibility aliases) to refer to dicts
instead.  Old users who still refer to ctf_file_t will see (harmless)
pointer-compatibility warnings at compile time, but the ABI is unchanged
(since C doesn't mangle names, and ctf_file_t was always an opaque type)
and things will still compile fine as long as -Werror is not specified.
All references to CTF containers and CTF files in the source code are
fixed to refer to CTF dicts instead.

Further (smaller) renamings of annoyingly-named functions to come, as
part of the process of souping up queries across whole archives at once
(needed for the function info and data object sections).

binutils/ChangeLog
2020-11-20  Nick Alcock  <nick.alcock@oracle.com>

	* objdump.c (dump_ctf_errs): Rename ctf_file_t to ctf_dict_t.
	(dump_ctf_archive_member): Likewise.
	(dump_ctf): Likewise. Use ctf_dict_close, not ctf_file_close.
	* readelf.c (dump_ctf_errs): Rename ctf_file_t to ctf_dict_t.
	(dump_ctf_archive_member): Likewise.
	(dump_section_as_ctf): Likewise.  Use ctf_dict_close, not
	ctf_file_close.

gdb/ChangeLog
2020-11-20  Nick Alcock  <nick.alcock@oracle.com>

	* ctfread.c: Change uses of ctf_file_t to ctf_dict_t.
	(ctf_fp_info::~ctf_fp_info): Call ctf_dict_close, not ctf_file_close.

include/ChangeLog
2020-11-20  Nick Alcock  <nick.alcock@oracle.com>

	* ctf-api.h (ctf_file_t): Rename to...
	(ctf_dict_t): ... this.  Keep ctf_file_t around for compatibility.
	(struct ctf_file): Likewise rename to...
	(struct ctf_dict): ... this.
	(ctf_file_close): Rename to...
	(ctf_dict_close): ... this, keeping compatibility function.
	(ctf_parent_file): Rename to...
	(ctf_parent_dict): ... this, keeping compatibility function.
	All callers adjusted.
	* ctf.h: Rename references to ctf_file_t to ctf_dict_t.
	(struct ctf_archive) <ctfa_nfiles>: Rename to...
	<ctfa_ndicts>: ... this.

ld/ChangeLog
2020-11-20  Nick Alcock  <nick.alcock@oracle.com>

	* ldlang.c (ctf_output): This is a ctf_dict_t now.
	(lang_ctf_errs_warnings): Rename ctf_file_t to ctf_dict_t.
	(ldlang_open_ctf): Adjust comment.
	(lang_merge_ctf): Use ctf_dict_close, not ctf_file_close.
	* ldelfgen.h (ldelf_examine_strtab_for_ctf): Rename ctf_file_t to
	ctf_dict_t.  Change opaque declaration accordingly.
	* ldelfgen.c (ldelf_examine_strtab_for_ctf): Adjust.
	* ldemul.h (examine_strtab_for_ctf): Likewise.
	(ldemul_examine_strtab_for_ctf): Likewise.
	* ldeuml.c (ldemul_examine_strtab_for_ctf): Likewise.

libctf/ChangeLog
2020-11-20  Nick Alcock  <nick.alcock@oracle.com>

	* ctf-impl.h: Rename ctf_file_t to ctf_dict_t: all declarations
	adjusted.
	(ctf_fileops): Rename to...
	(ctf_dictops): ... this.
	(ctf_dedup_t) <cd_id_to_file_t>: Rename to...
	<cd_id_to_dict_t>: ... this.
	(ctf_file_t): Fix outdated comment.
	<ctf_fileops>: Rename to...
	<ctf_dictops>: ... this.
	(struct ctf_archive_internal) <ctfi_file>: Rename to...
	<ctfi_dict>: ... this.
	* ctf-archive.c: Rename ctf_file_t to ctf_dict_t.
	Rename ctf_archive.ctfa_nfiles to ctfa_ndicts.
	Rename ctf_file_close to ctf_dict_close.  All users adjusted.
	* ctf-create.c: Likewise.  Refer to CTF dicts, not CTF containers.
	(ctf_bundle_t) <ctb_file>: Rename to...
	<ctb_dict): ... this.
	* ctf-decl.c: Rename ctf_file_t to ctf_dict_t.
	* ctf-dedup.c: Likewise.  Rename ctf_file_close to
	ctf_dict_close. Refer to CTF dicts, not CTF containers.
	* ctf-dump.c: Likewise.
	* ctf-error.c: Likewise.
	* ctf-hash.c: Likewise.
	* ctf-inlines.h: Likewise.
	* ctf-labels.c: Likewise.
	* ctf-link.c: Likewise.
	* ctf-lookup.c: Likewise.
	* ctf-open-bfd.c: Likewise.
	* ctf-string.c: Likewise.
	* ctf-subr.c: Likewise.
	* ctf-types.c: Likewise.
	* ctf-util.c: Likewise.
	* ctf-open.c: Likewise.
	(ctf_file_close): Rename to...
	(ctf_dict_close): ...this.
	(ctf_file_close): New trivial wrapper around ctf_dict_close, for
	compatibility.
	(ctf_parent_file): Rename to...
	(ctf_parent_dict): ... this.
	(ctf_parent_file): New trivial wrapper around ctf_parent_dict, for
	compatibility.
	* libctf.ver: Add ctf_dict_close and ctf_parent_dict.
2020-11-20 13:34:04 +00:00
Pedro Alves
cbbcd7a716 language_lookup_primitive_type, std::function -> gdb::function_view
gdb/ChangeLog:

	* language.c (language_arch_info::lookup_primitive_type): Use
	gdb::function_view instead of gdb::function.
	(template language_lookup_primitive_type): Rename to ...
	(language_lookup_primitive_type_1): ... this, and make static.
	(language_lookup_primitive_type(const struct language_defn *,
	struct gdbarch *, const char *): Make non-template.
	(language_lookup_primitive_type(const struct language_defn *,
	struct gdbarch *, std::function<bool (struct type *)>): Make
	non-template and use gdb::function_view.
	* language.h (language_arch_info::lookup_primitive_type): Use
	gdb::function_view instead of std::function.
	(language_lookup_primitive_type): No longer template.
	* opencl-lang.c (lookup_opencl_vector_type): 'filter' is now a
	lambda instead of a std::function.
2020-11-20 13:27:01 +00:00
Nick Clifton
e6f6aa8d18 Add option to nm to change the characters displayed for ifunc symbols. Add a configure time option to change the default characters.
PR 22967
	* nm.c (ifunc_type_chars): New variable.
	(long_options): Add --ifunc-chars.
	(print_symbol): Use ifunc_type_chars for ifunc symbols.
	(main): Handle the new option.
	* doc/binutils.texi: Document the new option.
	* configure.ac: Add --enable-f-for-ifunc-symbols option which
	changes the default symbol displayed by nm.
	* NEWS: Mention the new feature.
	* testsuite/binutils-all/nm.exp: Test the new feature.
	* config.in: Regenerate.
	* configure: Regenerate.
2020-11-20 13:04:56 +00:00
Linda Zhang
8881640c80 Add a warning to dllwrap that it is deprecated.
PR 20979
	* dllwrap.c (main): Deprecate and warn the use of dllwrap.
2020-11-20 11:07:26 +00:00
Jozef Lawrynowicz
cc6fd584ed Fix SHF_GNU_RETAIN testsuite fallout
binutils/ChangeLog:

	* testsuite/binutils-all/readelf-maskos-1a.d: Fix test for unrecognized
	bit set in SHF_MASKOS range.
	* testsuite/binutils-all/readelf-maskos-1b.d: Likewise.
	* testsuite/binutils-all/readelf-maskos-unknown.s: New test.

ld/ChangeLog:

	* testsuite/ld-elf/retain3.s: Move symbolic reference into writeable
	.data section from read-only .text section.
	* testsuite/ld-elf/retain5.d: Don't pass --print-gc-sections for test
	that doesn't require it.
	* testsuite/ld-elf/retain6a.d: Adjust test.
	* testsuite/ld-elf/retain6main.s: Move symbolic reference into writeable
	.data section from read-only .text section.
2020-11-20 10:33:28 +00:00
GDB Administrator
f58a189583 Automatic date update in version.in 2020-11-20 00:00:20 +00:00
Jozef Lawrynowicz
24a16d8b93 gas/testsuite: Fix SHF_GNU_RETAIN tests for FreeBSD OSABIs
gas/ChangeLog:

	* testsuite/gas/elf/section22.d: Allow FreeBSD OSABI in readelf
	output.
	* testsuite/gas/elf/section23a.d: Likewise.
	* testsuite/gas/elf/section24a.d: Likewise.
2020-11-19 19:05:00 +00:00
Andreas Arnez
d5ef21c3ec gdb/s390: Correct recording of "store on condition" insns
The "store on condition" instructions STOC, STOCG, and STOCFH are recorded
as if their instruction formats resembled that of STG.  This is wrong,
usually resulting in "failed to record execution log" errors when trying
to record code with any of these instructions.

This patch fixes the recording of these instructions.

gdb/ChangeLog:

	PR tdep/26916
	* s390-tdep.c (s390_process_record): Fix recording of STOC, STOCG,
	and STOCFH.
2020-11-19 19:10:58 +01:00
Nick Clifton
a4eba6087d Fix a bug in the s390x linker when discarding all inpuit files.
PR 26918
	* elf64-s390.c (elf_s390_finish_dynamic_sections): Check for the
	existance of an sgot output section before setting the
	sh_entsize.
2020-11-19 17:36:24 +00:00
Simon Marchi
a5adb8f3b4 gdb: fix format string warnings in f-lang.c
I get a bunch of these warnings when compiling for i386 (32-bit):

      CXX    f-lang.o
    /home/simark/src/binutils-gdb/gdb/f-lang.c: In function 'value* fortran_value_subarray(value*, expression*, int*, int, noside)':
    /home/simark/src/binutils-gdb/gdb/f-lang.c:453:48: error: format '%ld' expects argument of type 'long int', but argument 2 has type 'LONGEST' {aka 'long long int'} [-Werror=format=]
      453 |        debug_printf ("|   |   |-> Low bound: %ld\n", lb);
          |                                              ~~^     ~~
          |                                                |     |
          |                                                |     LONGEST {aka long long int}
          |                                                long int
          |                                              %lld

Fix them by using plongest/pulongest.

gdb/ChangeLog:

	* f-lang.c (fortran_value_subarray): Use plongest/pulongest.

Change-Id: I666ead5593653d5a1a3dab2ffdc72942c928c7d2
2020-11-19 11:32:26 -05:00
Simon Marchi
70125a45e4 gdb: remove other parameter in read_core_file_mappings parameter
The `void *other` parameter in read_core_file_mappings' loop_cb
parameter is never used, remove it.

gdb/ChangeLog:

	* gdbarch.sh (read_core_file_mappings): Remove `other` parameter
	in `loop_cb` parameter.
	* gdbarch.c: Re-generate.
	* gdbarch.h: Re-generate.
	* arch-utils.c (default_read_core_file_mappings): Remove `other`
	parameter.
	* arch-utils.h (default_read_core_file_mappings): Likewise.
	* corelow.c (core_target::build_file_mappings): Likewise.
	* linux-tdep.c (linux_read_core_file_mappings): Likewise.
	(linux_core_info_proc_mappings): Likewise.

Change-Id: I6f408b4962b61b8a603642a844772b3026625523
2020-11-19 10:34:57 -05:00
Andrew Burgess
a5c641b57b gdb/fortran: Add support for Fortran array slices at the GDB prompt
This commit brings array slice support to GDB.

WARNING: This patch contains a rather big hack which is limited to
Fortran arrays, this can be seen in gdbtypes.c and f-lang.c.  More
details on this below.

This patch rewrites two areas of GDB's Fortran support, the code to
extract an array slice, and the code to print an array.

After this commit a user can, from the GDB prompt, ask for a slice of
a Fortran array and should get the correct result back.  Slices can
(optionally) have the lower bound, upper bound, and a stride
specified.  Slices can also have a negative stride.

Fortran has the concept of repacking array slices.  Within a compiled
Fortran program if a user passes a non-contiguous array slice to a
function then the compiler may have to repack the slice, this involves
copying the elements of the slice to a new area of memory before the
call, and copying the elements back to the original array after the
call.  Whether repacking occurs will depend on which version of
Fortran is being used, and what type of function is being called.

This commit adds support for both packed, and unpacked array slicing,
with the default being unpacked.

With an unpacked array slice, when the user asks for a slice of an
array GDB creates a new type that accurately describes where the
elements of the slice can be found within the original array, a
value of this type is then returned to the user.  The address of an
element within the slice will be equal to the address of an element
within the original array.

A user can choose to select packed array slices instead using:

  (gdb) set fortran repack-array-slices on|off
  (gdb) show fortran repack-array-slices

With packed array slices GDB creates a new type that reflects how the
elements of the slice would look if they were laid out in contiguous
memory, allocates a value of this type, and then fetches the elements
from the original array and places then into the contents buffer of
the new value.

One benefit of using packed slices over unpacked slices is the memory
usage, taking a small slice of N elements from a large array will
require (in GDB) N * ELEMENT_SIZE bytes of memory, while an unpacked
array will also include all of the "padding" between the
non-contiguous elements.  There are new tests added that highlight
this difference.

There is also a new debugging flag added with this commit that
introduces these commands:

  (gdb) set debug fortran-array-slicing on|off
  (gdb) show debug fortran-array-slicing

This prints information about how the array slices are being built.

As both the repacking, and the array printing requires GDB to walk
through a multi-dimensional Fortran array visiting each element, this
commit adds the file f-array-walk.h, which introduces some
infrastructure to support this process.  This means the array printing
code in f-valprint.c is significantly reduced.

The only slight issue with this commit is the "rather big hack" that I
mentioned above.  This hack allows us to handle one specific case,
array slices with negative strides.  This is something that I don't
believe the current GDB value contents model will allow us to
correctly handle, and rather than rewrite the value contents code
right now, I'm hoping to slip this hack in as a work around.

The problem is that, as I see it, the current value contents model
assumes that an object base address will be the lowest address within
that object, and that the contents of the object start at this base
address and occupy the TYPE_LENGTH bytes after that.

( We do have the embedded_offset, which is used for C++ sub-classes,
such that an object can start at some offset from the content buffer,
however, the assumption that the object then occupies the next
TYPE_LENGTH bytes is still true within GDB. )

The problem is that Fortran arrays with a negative stride don't follow
this pattern.  In this case the base address of the object points to
the element with the highest address, the contents of the array then
start at some offset _before_ the base address, and proceed for one
element _past_ the base address.

As the stride for such an array would be negative then, in theory the
TYPE_LENGTH for this type would also be negative.  However, in many
places a value in GDB will degrade to a pointer + length, and the
length almost always comes from the TYPE_LENGTH.

It is my belief that in order to correctly model this case the value
content handling of GDB will need to be reworked to split apart the
value's content buffer (which is a block of memory with a length), and
the object's in memory base address and length, which could be
negative.

Things are further complicated because arrays with negative strides
like this are always dynamic types.  When a value has a dynamic type
and its base address needs resolving we actually store the address of
the object within the resolved dynamic type, not within the value
object itself.

In short I don't currently see an easy path to cleanly support this
situation within GDB.  And so I believe that leaves two options,
either add a work around, or catch cases where the user tries to make
use of a negative stride, or access an array with a negative stride,
and throw an error.

This patch currently goes with adding a work around, which is that
when we resolve a dynamic Fortran array type, if the stride is
negative, then we adjust the base address to point to the lowest
address required by the array.  The printing and slicing code is aware
of this adjustment and will correctly slice and print Fortran arrays.

Where this hack will show through to the user is if they ask for the
address of an array in their program with a negative array stride, the
address they get from GDB will not match the address that would be
computed within the Fortran program.

gdb/ChangeLog:

	* Makefile.in (HFILES_NO_SRCDIR): Add f-array-walker.h.
	* NEWS: Mention new options.
	* f-array-walker.h: New file.
	* f-lang.c: Include 'gdbcmd.h' and 'f-array-walker.h'.
	(repack_array_slices): New static global.
	(show_repack_array_slices): New function.
	(fortran_array_slicing_debug): New static global.
	(show_fortran_array_slicing_debug): New function.
	(value_f90_subarray): Delete.
	(skip_undetermined_arglist): Delete.
	(class fortran_array_repacker_base_impl): New class.
	(class fortran_lazy_array_repacker_impl): New class.
	(class fortran_array_repacker_impl): New class.
	(fortran_value_subarray): Complete rewrite.
	(set_fortran_list): New static global.
	(show_fortran_list): Likewise.
	(_initialize_f_language): Register new commands.
	(fortran_adjust_dynamic_array_base_address_hack): New function.
	* f-lang.h (fortran_adjust_dynamic_array_base_address_hack):
	Declare.
	* f-valprint.c: Include 'f-array-walker.h'.
	(class fortran_array_printer_impl): New class.
	(f77_print_array_1): Delete.
	(f77_print_array): Delete.
	(fortran_print_array): New.
	(f_value_print_inner): Update to call fortran_print_array.
	* gdbtypes.c: Include 'f-lang.h'.
	(resolve_dynamic_type_internal): Call
	fortran_adjust_dynamic_array_base_address_hack.

gdb/testsuite/ChangeLog:

        * gdb.fortran/array-slices-bad.exp: New file.
        * gdb.fortran/array-slices-bad.f90: New file.
        * gdb.fortran/array-slices-sub-slices.exp: New file.
        * gdb.fortran/array-slices-sub-slices.f90: New file.
        * gdb.fortran/array-slices.exp: Rewrite tests.
        * gdb.fortran/array-slices.f90: Rewrite tests.
        * gdb.fortran/vla-sizeof.exp: Correct expected results.

gdb/doc/ChangeLog:

        * gdb.texinfo (Debugging Output): Document 'set/show debug
        fortran-array-slicing'.
        (Special Fortran Commands): Document 'set/show fortran
        repack-array-slices'.
2020-11-19 11:23:23 +00:00
Andrew Burgess
a15a5258b5 gdb: update command completion for watch, awatch, and rwatch
Switch over to using new option processing mechanism for watch,
awatch, and rwatch commands.  Add command completion function.

This means that expression completion now works correctly when the
-location flag is used.  So previously:

  (gdb) watch var.<TAB><TAB>
  .... list fields of var ....

But,

  (gdb) watch -location var.<TAB><TAB>
  .... list all symbols ....

After this commit only the fields of 'var' are listed even when
'-location' is passed.

Another benefit of this change is that '-location' will now complete.

One thing to note is that previous these commands accepted both
'-location' or '-l' (these being synonyms).  The new option scheme
doesn't really allow for official short form flags, however, it does
allow for non-ambiguous sub-strings to be used.  What this means is
that currently (as these commands only have the '-location' flag) the
user can still use '-l', so there's no change there.

The interactive help text for these commands now emphasises
'-location' as the real option, but does mention that '-l' can also be
used.

gdb/ChangeLog:

	* breakpoint.c (struct watch_options): New struct.
	(watch_option_defs): New static global.
	(make_watch_options_def_group): New function.
	(watch_maybe_just_location): Convert option parsing.
	(watch_command_completer): New function.
	(_initialize_breakpoint): Build help text using options mechanism.

gdb/testsuite/ChangeLog:

	* gdb.base/completion.exp: Add new completion tests.
2020-11-19 10:15:04 +00:00
Andrew Burgess
2e362716fc gdb: convert some function arguments from int to bool
A little int to bool conversion around the 'watch' type commands.
There should be no user visible changes after this commit.

gdb/ChangeLog:

	* breakpoint.c (update_watchpoint): Pass 'false' not '0'.
	(watch_command_1): Update parameter types.  Convert locals to
	bool.
	(watch_command_wrapper): Change parameter type.
	(watch_maybe_just_location): Change locals to bool.
	(rwatch_command_wrapper): Update parameter type.
	(awatch_command_wrapper): Update parameter type.
	* breakpoint.h (watch_command_wrapper): Change parameter type.
	(rwatch_command_wrapper): Update parameter type.
	(awatch_command_wrapper): Update parameter type.
	* eval.c (fetch_subexp_value): Change parameter type.
	* ppc-linux-nat.c (ppc_linux_nat_target::check_condition): Pass
	'false' not '0'.
	* value.h (fetch_subexp_value): Change parameter type in
	declaration.
2020-11-19 10:15:02 +00:00
Andrew Burgess
b3ff61f815 gdb: make use of skip_to_space and skip_spaces
Some late feedback on this commit:

  commit 037d7135de
  Date:   Mon Nov 16 11:36:56 2020 +0000

      gdb: improve command completion for 'print', 'x', and 'display'

Suggested making use of the skip_to_space and skip_spaces helper
functions.  There should be no user visible changes after this commit.

gdb/ChangeLog:

	* printcmd.c (skip_over_slash_fmt): Make use of skip_to_space and
	skip_spaces.
2020-11-19 10:09:42 +00:00
GDB Administrator
6266b411ce Automatic date update in version.in 2020-11-19 00:00:09 +00:00
Keith Seitz
5b7d45d32a Squash coverity warning for REVERSE_INULL in dump_note_entry_p
Coverity detected a "defect" in dump_note_entry_p in linux-tdep.c:

  static int
  dump_note_entry_p (filter_flags filterflags, const struct smaps_vmflags *v,
                  int maybe_private_p, int mapping_anon_p, int mapping_file_p,
                  const char *filename, ULONGEST addr, ULONGEST offset)
  {
    /* vDSO and vsyscall mappings will end up in the core file.  Don't
       put them in the NT_FILE note.  */
    if (strcmp ("[vdso]", filename) == 0
        || strcmp ("[vsyscall]", filename) == 0)
      return 0;

    /* Otherwise, any other file-based mapping should be placed in the
       note.  */
    return filename != nullptr;
  }

Those strcmp's will derefernce `filename' so there is little point
to checking whether it is non-NULL or not;  we would have already
segfaulted.  It also cannot be nullptr because its value is read directly
from /proc/PID/maps. The "worst" it can be is an empty string.

gdb/ChangeLog
2020-11-18  Keith Seitz  <keiths@redhat.com>

	* linux-tdep.c (dump_note_entry_p): Return true instead of
	checking `filename'.
2020-11-18 13:59:05 -08:00
Tom de Vries
c44191f8e3 [gdb] Improve early exits for env var in debuginfod-support.c
There's an early exit in libdebuginfod's debuginfod_query_server, which checks
both for:
- getenv (DEBUGINFOD_URLS_ENV_VAR) == NULL, and
- (getenv (DEBUGINFOD_URLS_ENV_VAR))[0] == '\0'.

In debuginfod_source_query and debuginfod_debuginfo_query (which both
end up calling debuginfod_query_server) there are also early exits checking
the same env var, but those just check for NULL.

Make the early exit tests in debuginfod-support.c match those in
libdebuginfod.

gdb/ChangeLog:

2020-11-18  Tom de Vries  <tdevries@suse.de>

	* debuginfod-support.c (debuginfod_source_query)
	(debuginfod_debuginfo_query): Also do early exit if
	"(getenv (DEBUGINFOD_URLS_ENV_VAR))[0] == '\0'".
2020-11-18 22:15:50 +01:00
Simon Marchi
7cb2893dfa gdb/testsuite: gdb.mi/mi-nonstop-exit.exp: enable non-stop using GDBFLAGS
When running

    make check TESTS="gdb.mi/mi-nonstop-exit.exp" RUNTESTFLAGS="--target_board=native-extended-gdbserver"

We get:

    220^error,msg="Unexpected vCont reply in non-stop mode: T05swbreak:;06:60d5ffffff7f0000;07:d0d2ffffff7f0000;10:5b57fdf7ff7f0000;thread:p2a4eed.2a4eed;core    :4;"^M
    (gdb) ^M
    UNRESOLVED: gdb.mi/mi-nonstop-exit.exp: first run: unable to start target

This is because non-stop is enabled using "-gdb-set non-stop 1".  This
doesn't work with the native-extended-gdbserver board, because with that
board GDB connects to GDBserver as soon as it's started.  Non-stop needs
to be enabled before connecting.

The usual pattern to follow is to set non-stop on the command line, like
gdb.mi/mi-nonstop.exp does.  Change the non-stop MI tests to use that
pattern.

The results diff when running gdb.mi/*.exp is:

    -# of expected passes           2877
    +# of expected passes           2938
     # of unexpected failures       34
     # of expected failures         8
     # of known failures            13
     # of unresolved testcases      4
     # of unsupported tests         1
    -# of duplicate test names      34
    +# of duplicate test names      35

gdb/testsuite/ChangeLog:

	* gdb.mi/mi-nonstop-exit.exp: Enable non-stop through GDBFLAGS.
	* gdb.mi/mi-ns-stale-regcache.exp: Likewise.
	* gdb.mi/mi-nsintrall.exp: Likewise.
	* gdb.mi/mi-nsmoribund.exp: Likewise.
	* gdb.mi/mi-nsthrexec.exp: Likewise.
	* gdb.mi/mi-watch-nonstop.exp: Likewise.

Change-Id: Ic2736bedea8d448eee8c2b534d26b2427f6b4d27
2020-11-18 14:58:44 -05:00
Simon Marchi
cf144ec890 gdb/testsuite: use unresolved in mi_run_cmd_full
Running:

    make check TESTS="gdb.mi/mi-nonstop-exit.exp" RUNTESTFLAGS="--target_board=native-extended-gdbserver"

We get:

    Running /home/simark/src/binutils-gdb/gdb/testsuite/gdb.mi/mi-nonstop-exit.exp ...
    ERROR: Unable to start target

                    === gdb Summary ===

    # of expected passes            2

The root cause of the problem is the typical "we try to enable non-stop
after having connected to gdbserver".  This is because with the
native-extended-gdbserver board, GDB connects to GDBserver as soon as
it's started.  It's too late then to do "set non-stop 1" or "-gdb-set
non-stop 1".  This is fixed by the following patch.

More worrying is that the error is not reported (except for the
printout).  From the testsuite point of view, everything went fine.
runtest exits with status 0.

This is because mi_run_cmd_full uses perror.  perror just prints that
ERROR and makes it so the next test becomes UNRESOLVED.  However,
there's no next test, because we just return early, seeing that we
couldn't run.

Change mi_run_cmd_full to call unresolved directly instead.  This
ensures that the failure is recorded.

This is the results diff when running the gdb.mi/*.exp tests:

     # of unexpected failures       34
     # of expected failures         8
     # of known failures            13
    -# of unresolved testcases      4
    +# of unresolved testcases      10
     # of unsupported tests         1
     # of duplicate test names      34

gdb/testsuite/ChangeLog:

	* lib/mi-support.exp (mi_run_cmd_full): Use unresovled instead
	of perror.

Change-Id: Ib0f214c0127fbe73f2033c6c29d678e025690220
2020-11-18 14:58:42 -05:00
Joseph Myers
6b6a3e057e Fix Windows-target testing in mi_gdb_file_cmd
Similar to my recent fix for gdb_file_cmd, mi_gdb_file_cmd also runs
into problems when GCC has created foo.exe given "-o foo".

Apply exactly the same fix there as in gdb_file_cmd.  This allows many
more tests to succeed for Windows target that previously fell over.

2020-11-18  Joseph Myers  <joseph@codesourcery.com>

	* lib/mi-support.exp (mi_gdb_file_cmd): Check for case where
	$arg.exe exists but $arg does not.
2020-11-18 19:44:20 +00:00
Tom de Vries
5d8254e185 [gdb/build] Fix -Werror=bool-compare warning in update_static_array_size
With current trunk I run into:
...
src/gdb/gdbtypes.c: In function 'bool update_static_array_size(type*)':
src/gdb/gdbtypes.c:1250:64: error: comparison of constant '0' with boolean \
  expression is always true [-Werror=bool-compare]
    && get_array_bounds (element_type, &low_bound, &high_bound) >= 0
       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~
...

Fix this by dropping the compare.

gdb/ChangeLog:

2020-11-18  Tom de Vries  <tdevries@suse.de>

	* gdbtypes.c (update_static_array_size): Fix -Werror=bool-compare
	warning.
2020-11-18 19:59:45 +01:00
Alan Modra
e4d9e5422f PowerPC paranioa testing of symbol merging involving comdat groups
Ensures we don't mistreat st_other localentry bits.

	* testsuite/ld-powerpc/group1.d,
	* testsuite/ld-powerpc/group1.s,
	* testsuite/ld-powerpc/group1.sym,
	* testsuite/ld-powerpc/group2.d,
	* testsuite/ld-powerpc/group2.s,
	* testsuite/ld-powerpc/group2.sym,
	* testsuite/ld-powerpc/group3.s,
	* testsuite/ld-powerpc/group3.sym: New test files.
	* testsuite/ld-powerpc/powerpc.exp: Run new tests.
2020-11-18 23:49:31 +10:30
Alan Modra
058430b4a1 Re: Stop Gas from generating line info or address ranges
* doc/as.texi (.nop): Document optional size arg.
	* dwarf2dbg.c (dwarf2_gen_line_info_1): Only check SEC_ALLOC
	when ELF.  Warn whenever dwarf line number information is ignored.
	* frags.c (frag_offset_ignore_align_p): New function.
	* frags.h (frag_offset_ignore_align_p): Declare.
	* read.c (s_nop): Extend to support optional size arg.
	* testsuite/gas/elf/dwarf2-20.d: Expect warnings, and exact range.
	* testsuite/gas/elf/dwarf2-20.s: Emit 16 bytes worth of nops.
	* testsuite/gas/m68hc11/indexed12.d: Expect warnings.
2020-11-18 23:46:39 +10:30
Jozef Lawrynowicz
99fabbc973 Support SHF_GNU_RETAIN ELF section flag
The SHF_GNU_RETAIN section flag is an extension to the GNU ELF OSABI.
It is defined as follows:

=========================================================
Section Attribute Flags
+-------------------------------------+
| Name           | Value              |
+-------------------------------------+
| SHF_GNU_RETAIN | 0x200000 (1 << 21) |
+-------------------------------------+

SHF_GNU_RETAIN
  The link editor should not garbage collect the section.
=========================================================

The .section directive accepts the "R" flag, which indicates
SHF_GNU_RETAIN should be applied to the section.

There is not a direct mapping of SHF_GNU_RETAIN to the BFD
section flag SEC_KEEP. Keeping these flags distinct allows
SHF_GNU_RETAIN sections to be explicitly removed by placing them in
/DISCARD/.

bfd/ChangeLog:

	* elf-bfd.h (enum elf_gnu_osabi): Add elf_gnu_osabi_retain.
	(struct elf_obj_tdata): Increase has_gnu_osabi to 4 bits.
	* elf.c (_bfd_elf_make_section_from_shdr): Set elf_gnu_osabi_retain
	for SHF_GNU_RETAIN.
	(_bfd_elf_final_write_processing): Report if SHF_GNU_RETAIN is
	not supported by the OSABI.
	Adjust error messages.
	* elflink.c (elf_link_input_bfd): Copy enabled has_gnu_osabi bits from
	input BFD to output BFD.
	(bfd_elf_gc_sections): gc_mark the section if SHF_GNU_RETAIN is set.

binutils/ChangeLog:

	* NEWS: Announce SHF_GNU_RETAIN support.
	* readelf.c (get_elf_section_flags): Handle SHF_GNU_RETAIN.
	Recognize SHF_GNU_RETAIN and SHF_GNU_MBIND only for supported OSABIs.
	* testsuite/binutils-all/readelf.exp: Run new tests.
	Don't run run_dump_test when there isn't an assembler available.
	* testsuite/lib/binutils-common.exp (supports_gnu_osabi): Adjust
	comment.
	* testsuite/binutils-all/readelf-maskos-1a.d: New test.
	* testsuite/binutils-all/readelf-maskos-1b.d: New test.
	* testsuite/binutils-all/readelf-maskos.s: New test.
	* testsuite/binutils-all/retain1.s: New test.
	* testsuite/binutils-all/retain1a.d: New test.
	* testsuite/binutils-all/retain1b.d: New test.

gas/ChangeLog:

	* NEWS: Announce SHF_GNU_RETAIN support.
	* config/obj-elf.c (obj_elf_change_section): Merge SHF_GNU_RETAIN bit
	between section declarations.
	(obj_elf_parse_section_letters): Handle 'R' flag.
	Handle numeric flag values within the SHF_MASKOS range.
	(obj_elf_section): Validate SHF_GNU_RETAIN usage.
	* doc/as.texi: Document 'R' flag to .section directive.
	* testsuite/gas/elf/elf.exp: Run new tests.
	* testsuite/gas/elf/section10.d: Unset SHF_GNU_RETAIN bit.
	* testsuite/gas/elf/section10.s: Likewise.
	* testsuite/gas/elf/section22.d: New test.
	* testsuite/gas/elf/section22.s: New test.
	* testsuite/gas/elf/section23.s: New test.
	* testsuite/gas/elf/section23a.d: New test.
	* testsuite/gas/elf/section23b.d: New test.
	* testsuite/gas/elf/section23b.err: New test.
	* testsuite/gas/elf/section24.l: New test.
	* testsuite/gas/elf/section24.s: New test.
	* testsuite/gas/elf/section24a.d: New test.
	* testsuite/gas/elf/section24b.d: New test.

include/ChangeLog:

	* elf/common.h (SHF_GNU_RETAIN): Define.

ld/ChangeLog:

	* NEWS: Announce support for SHF_GNU_RETAIN.
	* ld.texi (garbage collection): Document SHF_GNU_RETAIN.
	(Output Section Discarding): Likewise.
	* testsuite/ld-elf/elf.exp: Run new tests.
	* testsuite/ld-elf/retain1.s: New test.
	* testsuite/ld-elf/retain1a.d: New test.
	* testsuite/ld-elf/retain1b.d: New test.
	* testsuite/ld-elf/retain2.d: New test.
	* testsuite/ld-elf/retain2.ld: New test.
	* testsuite/ld-elf/retain2.map: New test.
	* testsuite/ld-elf/retain3.d: New test.
	* testsuite/ld-elf/retain3.s: New test.
	* testsuite/ld-elf/retain4.d: New test.
	* testsuite/ld-elf/retain4.s: New test.
	* testsuite/ld-elf/retain5.d: New test.
	* testsuite/ld-elf/retain5.map: New test.
	* testsuite/ld-elf/retain5lib.s: New test.
	* testsuite/ld-elf/retain5main.s: New test.
	* testsuite/ld-elf/retain6a.d: New test.
	* testsuite/ld-elf/retain6b.d: New test.
	* testsuite/ld-elf/retain6lib.s: New test.
	* testsuite/ld-elf/retain6main.s: New test.
2020-11-18 11:51:13 +00:00
Joel Brobecker
40d9d2fd79 gdb/ChangeLog: fix typo in an entry from 2020-11-15 (gmp-utils.c) 2020-11-18 07:52:46 +04:00
GDB Administrator
632de67bdb Automatic date update in version.in 2020-11-18 00:00:14 +00:00
Simon Marchi
584903d3f5 gdb: make get_array_bounds return bool
Obvious change from int to bool.  I took the opportunity to move the doc
to the header file.

gdb/ChangeLog:

	* gdbtypes.h (get_array_bounds): Return bool, adjust some
	callers.  Move doc here.
	* gdbtypes.c (get_array_bounds): Return bool

Change-Id: I8ed20298cb0927963c1f09b345966533d5ed06e2
2020-11-17 18:47:05 -05:00
Nick Clifton
3d955acb36 When reading string arguments for the assembler's string directives treat space separated strings as a single entity.
* read.c (stringer): Treat space separated, quote enclosed strings
	as a single string.
	* doc/as.texi (asciz): Mention this behaviour in the description
	of the asciz directive.
	* testsuite/gas/all/asciz.s: New test.
	* testsuite/gas/all/asciz.d: New test driver.
	* testsuite/gas/all/gas.exp: Run the new test.
2020-11-17 15:45:01 +00:00
Gary Benson
811bdca093 Fix gdb.trace testcase build failures with Clang
25 gdb.trace tests failed to build on x86 with Clang because the
x86_trace_dummy function is optimized out, causing the builds to
fail with variations on the following error:

  gdb compile failed, /usr/bin/ld:
    /gdbtest/build/gdb/testsuite/outputs/gdb.trace/backtrace/backtrace0.o:
    in function `main':
    /gdbtest/src/gdb/testsuite/gdb.trace/actions.c:146: undefined
    reference to `x86_trace_dummy'
    clang-12: error: linker command failed with exit code 1

This commit adds __attribute__ ((used)) to x86_trace_dummy to prevent
this.

gdb/testsuite/ChangeLog:

	* gdb.trace/trace-common.h (x86_trace_dummy): Add
	__attribute__ ((used)).
2020-11-17 14:52:49 +00:00
Howard Chu
0833984dda Place the libdeps record in the second archive slot.
* ar.c (main): Place the libdeps record in the second archive
	slot.
2020-11-17 14:00:08 +00:00
Alan Modra
4e0e019fa8 [GOLD] powerpc incremental-dump assertion failure
incremental-dump wants to instantiate Target_powerpc without options
being set up.  This patch fixes
  internal error in options, at gold/parameters.h:92

	* powerpc.cc (Target_powerpc::no_tprel_opt_): Rename from tprel_opt_.
	Init to false.
	(Target_powerpc::tprel_opt): Test parameters->options().tls_optimize().
	(Target_powerpc::set_tprel_opt): Delete.
	(Target_powerpc::set_no_tprel_opt): New function.  Update all uses
	of set_tprel_opt.
2020-11-17 20:59:53 +10:30
Michael Hudson-Doyle
f1e05b1978 [GOLD] fix jump to long branch on powerpc
PR 26902
	* powerpc.cc (Relocate::relocate): Do not include local entry
	offset of target function when computing the address of a stub.
2020-11-17 20:59:53 +10:30
Alan Modra
7cc340055d PR26882, --enable-textrel-check=warning test failures on powerpc
PR 26882
	* testsuite/ld-powerpc/dotsym3.d: Add "-z notext" to ld options.
	* testsuite/ld-powerpc/dotsym4.d: Likewise.
	* testsuite/ld-powerpc/ppc476-shared.d: Likewise.
	* testsuite/ld-powerpc/ppc476-shared2.d: Likewise.
	* testsuite/ld-powerpc/powerpc.exp: Likewise for various tests.
	* testsuite/ld-undefined/weak-fundef.s: Add BLPLT variant.
	* testsuite/ld-undefined/weak-undef.exp: Define BLPLT for ppc32.
2020-11-17 20:59:53 +10:30
Andrew Burgess
6f2643dbd2 gdb/arc: fix print_one_insn selftest
I noticed that the ARC print_one_insn selftest was failing.  The
problem is that in print_one_insn_test the arc case falls through into
the special case that handles nios2, score, and riscv.

The special case for these targets hard codes the breakpoint kind to
'4'.  This is find for bare metal arc (see arc-tdep.c,
arc_sw_breakpoint_from_kind), however, for arc/linux only breakpoint
kind '2' is supported (see arc-linux-tdep.c,
arc_linux_sw_breakpoint_from_kind).

So the code in print_one_insn_test as it is currently written passed
in an invalid breakpoint kind, this leads to GDB trying to disassemble
unexpected memory.

The fix is to reorder the code in print_one_insn_test so that the arc
case falls through into the default case.  In the default we no longer
hard code the breakpoint kind, and everything should be good.

Additionally, given the arc code only expects specific breakpoint kind
values, I thought it would be nice to add some gdb_assert to validate
things.  This assert would have triggered in this case and made it
easier to find the error.

After this commit, configure GDB with --enable-targets=all, then run
gdb.gdb/unittest.exp, there should no longer be any failures.

gdb/ChangeLog:

	* arc-linux-tdep.c (arc_linux_sw_breakpoint_from_kind): Add an
	assert.
	* arc-tdep.c (arc_breakpoint_kind_from_pc): Likewise.
	* disasm-selftests.c (print_one_insn_test): Fall throough from ARC
	case to the default.
2020-11-17 10:11:51 +00:00
Andrew Burgess
c72e313608 gdb/testsuite: prevent timeout in gdb.gdb/unittest.exp
When GDB is compiled with --enable-targets=all I would sometimes see
the 'maintenance selftest' in gdb.gdb/unittest.exp test timeout.

This one command causes GDB to run many separate self tests, this can
take some time.  The output of this command basically follows this
pattern:

  (gdb) maintenance selftest
  Running selftest aarch64-analyze-prologue.
  Running selftest aarch64-process-record.
  Running selftest arm-record.
  Running selftest arm_analyze_prologue.
  Running selftest array_view.
  Running selftest child_path.
  Running selftest cli_utils.
  ..... snip lots more lines ....
  Ran 79 unit tests, 0 failed

Currently the expect script waits for the final summary line ("Ran 79
unit test, 0 failed") before declaring pass or fail.  The problem is
that if the summary line takes too long to appear the test will
timeout.

As this test makes use of gdb_test_multiple then all I've done is add
an extra pattern that matches the 'Running selftest ....' lines and
then calls exp_continue.  Doing this means we find matches much more
frequently, and each time we do the timeout timer resets, preventing
the overall test from timing out.

gdb/testsuite/ChangeLog:

	* gdb.gdb/unittest.exp: Spot 'Running...' lines.
2020-11-17 10:11:50 +00:00
Andrew Burgess
037d7135de gdb: improve command completion for 'print', 'x', and 'display'
The /FMT specification on the print command currently breaks command
completion, so:

  (gdb) p var.<TAB><TAB>
  .... list of fields in var .....

But,

  (gdb) p/d var.<TAB><TAB>
  ..... list of all symbols .....

After this commit this issue is now resolved.

There are some other details around tab-completion and /FMT which
hopefully this commit improves.  So, before:

  (gdb) p/<TAB><TAB>
  .... lists all symbols .....

After:

  (gdb) p/<TAB><TAB>		# Nothing changes...

The thinking here is that after a / the user must type a FMT, but we
don't offer tab completion on FMT characters.  Placing a symbol
directly after a / will not do what the user expects, so offering that
seems wrong.

Similarly, before we had:

  (gdb) p/d<TAB><TAB>
  ... lists all symbols starting with 'd' ....

But afterwards:

  (gdb) p/d<TAB><TAB>		# Adds a single space, so we get:
  (gdb) p/d <CURSOR>

As before, typing a symbol where FMT is expected will not do what the
user expects.  If the user has added a FMT string then upon tab
completion GDB assumes the FMT string is complete and prepares the
user to type an expression.

In this commit I have also added completion functions for the 'x' and
'display' commands.  These commands also support /FMT specifiers and
so share some code with 'print'.

gdb/ChangeLog:

	* printcmd.c: Include 'safe-ctype.c'.
	(skip_over_slash_fmt): New function.
	(print_command_completer): Call skip_over_slash_fmt.
	(display_and_x_command_completer): New function.
	(_initialize_printcmd): Add command completion for 'x' and
	'display'.

gdb/testsuite/ChangeLog:

	* gdb.base/completion.exp: Add new tests.
2020-11-17 10:01:11 +00:00
GDB Administrator
0bfc584f66 Automatic date update in version.in 2020-11-17 00:00:17 +00:00
Przemyslaw Wirkus
3f4ff0886f aarch64: Add +pauth flag for Pointer Authentication feature
New -march option +pauth enables PAuth vel PAC (Pointer Authentication)
feature.
2020-11-16 21:22:09 +00:00
Przemyslaw Wirkus
e64441b14c aarch64: Extract Condition flag manipulation feature from Armv8.4-A
Extract FLAGM (Condition flag manipulation) feature from Armv8.4-A.
Please note that FLAGM stays a Armv8.4-A feature but now can be
assigned to other architectures or CPUs.

New -march option +flagm is added to enable independently this
feature.
2020-11-16 21:07:17 +00:00
Przemyslaw Wirkus
1bbda94fe0 arm: Add support for Cortex-A78C
This patch adds support for -mcpu=cortex-a78c command line option.
For more information about this processor, see [0]:

[0] https://developer.arm.com/ip-products/processors/cortex-a/cortex-a78c
2020-11-16 20:28:14 +00:00
Tom Tromey
119e99bb7f Update gdb.dwarf2/data-loc.exp
Tom de Vries pointed out that the series to handle
-fgnat-encodings=minimal regressed data-loc.exp:

https://sourceware.org/pipermail/gdb-patches/2020-November/173035.html

This was my oversight.  Looking at the test, it mimics what GNAT
emits.  The patch series in question changed the approach that gdb
takes to such arrays -- now they are transformed back into "old" style
structures.  (This is perhaps a step backward in a semantics sense,
but on the other hand it more accurately reflects the underlying
reality, and lets gdb continue to create objects of this type.)

This patch updates the test case, by adjusting the expected output.
It also removes the tests done in the C language, because they are now
incorrect, and because (IMO) they don't add much value.

gdb/testsuite/ChangeLog
2020-11-16  Tom Tromey  <tromey@adacore.com>

	* gdb.dwarf2/data-loc.exp: Update expected output.  Remove C
	tests.
2020-11-16 08:55:53 -07:00
Pedro Alves
2b3cb4006a Fix frame cycle detection
The recent commit to make scoped_restore_current_thread's cdtors
exception free regressed gdb.base/eh_return.exp:

  Breakpoint 1, 0x00000000004012bb in eh2 (gdb/frame.c:641: internal-error: frame_id get_frame_id(frame_info*): Assertion `stashed' failed.
  A problem internal to GDB has been detected,
  further debugging may prove unreliable.
  Quit this debugging session? (y or n) FAIL: gdb.base/eh_return.exp: hit breakpoint (GDB internal error)

That testcase uses __builtin_eh_return and, before the regression, the
backtrace at eh2 looked like this:

 (gdb) bt
 #0  0x00000000004006eb in eh2 (p=0x4006ec <continuation>) at src/gdb/testsuite/gdb.base/eh_return.c:54
 Backtrace stopped: previous frame identical to this frame (corrupt stack?)

That "previous frame identical to this frame" is caught by the cycle
detection based on frame id.

The assertion failing is this one:

 638           /* Since this is the first frame in the chain, this should
 639              always succeed.  */
 640           bool stashed = frame_stash_add (fi);
 641           gdb_assert (stashed);

originally added by

  commit f245535cf5
  Author:     Pedro Alves <palves@redhat.com>
  AuthorDate: Mon Sep 5 18:41:38 2016 +0100

      Fix PR19927: Avoid unwinder recursion if sniffer uses calls parse_and_eval

The assertion is failing because frame #1's frame id was stashed
before the id of frame #0 is stashed.  The frame id of frame #1 was
stashed here:

 (top-gdb) bt
 #0  frame_stash_add (frame=0x1e24c90) at src/gdb/frame.c:276
 #1  0x0000000000669c1b in get_prev_frame_if_no_cycle (this_frame=0x19f8370) at src/gdb/frame.c:2120
 #2  0x000000000066a339 in get_prev_frame_always_1 (this_frame=0x19f8370) at src/gdb/frame.c:2303
 #3  0x000000000066a360 in get_prev_frame_always (this_frame=0x19f8370) at src/gdb/frame.c:2319
 #4  0x000000000066b56c in get_frame_unwind_stop_reason (frame=0x19f8370) at src/gdb/frame.c:3028
 #5  0x000000000059f929 in dwarf2_frame_cfa (this_frame=0x19f8370) at src/gdb/dwarf2/frame.c:1462
 #6  0x00000000005ce434 in dwarf_evaluate_loc_desc::get_frame_cfa (this=0x7fffffffc070) at src/gdb/dwarf2/loc.c:666
 #7  0x00000000005989a9 in dwarf_expr_context::execute_stack_op (this=0x7fffffffc070, op_ptr=0x1b2a053 "\364\003", op_end=0x1b2a053 "\364\003") at src/gdb/dwarf2/expr.c:1161
 #8  0x0000000000596af6 in dwarf_expr_context::eval (this=0x7fffffffc070, addr=0x1b2a052 "\234\364\003", len=1) at src/gdb/dwarf2/expr.c:303
 #9  0x0000000000597b4e in dwarf_expr_context::execute_stack_op (this=0x7fffffffc070, op_ptr=0x1b2a063 "", op_end=0x1b2a063 "") at src/gdb/dwarf2/expr.c:865
 #10 0x0000000000596af6 in dwarf_expr_context::eval (this=0x7fffffffc070, addr=0x1b2a061 "\221X", len=2) at src/gdb/dwarf2/expr.c:303
 #11 0x00000000005c8b5a in dwarf2_evaluate_loc_desc_full (type=0x1b564d0, frame=0x19f8370, data=0x1b2a061 "\221X", size=2, per_cu=0x1b28760, per_objfile=0x1a84930, subobj_type=0x1b564d0, subobj_byte_offset=0) at src/gdb/dwarf2/loc.c:2260
 #12 0x00000000005c9243 in dwarf2_evaluate_loc_desc (type=0x1b564d0, frame=0x19f8370, data=0x1b2a061 "\221X", size=2, per_cu=0x1b28760, per_objfile=0x1a84930) at src/gdb/dwarf2/loc.c:2444
 #13 0x00000000005cb769 in locexpr_read_variable (symbol=0x1b59840, frame=0x19f8370) at src/gdb/dwarf2/loc.c:3687
 #14 0x0000000000663137 in language_defn::read_var_value (this=0x122ea60 <c_language_defn>, var=0x1b59840, var_block=0x0, frame=0x19f8370) at src/gdb/findvar.c:618
 #15 0x0000000000663c3b in read_var_value (var=0x1b59840, var_block=0x0, frame=0x19f8370) at src/gdb/findvar.c:822
 #16 0x00000000008c7d9f in read_frame_arg (fp_opts=..., sym=0x1b59840, frame=0x19f8370, argp=0x7fffffffc470, entryargp=0x7fffffffc490) at src/gdb/stack.c:542
 #17 0x00000000008c89cd in print_frame_args (fp_opts=..., func=0x1b597c0, frame=0x19f8370, num=-1, stream=0x1aba860) at src/gdb/stack.c:890
 #18 0x00000000008c9bf8 in print_frame (fp_opts=..., frame=0x19f8370, print_level=0, print_what=SRC_AND_LOC, print_args=1, sal=...) at src/gdb/stack.c:1394
 #19 0x00000000008c92b9 in print_frame_info (fp_opts=..., frame=0x19f8370, print_level=0, print_what=SRC_AND_LOC, print_args=1, set_current_sal=1) at src/gdb/stack.c:1119
 #20 0x00000000008c75f0 in print_stack_frame (frame=0x19f8370, print_level=0, print_what=SRC_AND_LOC, set_current_sal=1) at src/gdb/stack.c:366
 #21 0x000000000070250b in print_stop_location (ws=0x7fffffffc9e0) at src/gdb/infrun.c:8110
 #22 0x0000000000702569 in print_stop_event (uiout=0x1a8b9e0, displays=true) at src/gdb/infrun.c:8126
 #23 0x000000000096d04b in tui_on_normal_stop (bs=0x1bcd1c0, print_frame=1) at src/gdb/tui/tui-interp.c:98
 ...

Before the commit to make scoped_restore_current_thread's cdtors
exception free, scoped_restore_current_thread's dtor would call
get_frame_id on the selected frame, and we use
scoped_restore_current_thread pervasively.  That had the side effect
of stashing the frame id of frame #0 before reaching the path shown in
the backtrace.  I.e., the frame id of frame #0 happened to be stashed
before the frame id of frame #1.  But that was by chance, not by
design.

This commit:

  commit 256ae5dbc7
  Author:     Kevin Buettner <kevinb@redhat.com>
  AuthorDate: Mon Oct 31 12:47:42 2016 -0700

      Stash frame id of current frame before stashing frame id for previous frame

Fixed a similar problem, by making sure get_prev_frame computes the
frame id of the current frame before unwinding the previous frame, so
that the cycle detection works properly.  That fix misses the scenario
we're now running against, because if you notice, the backtrace above
shows that frame #4 calls get_prev_frame_always, not get_prev_frame.
I.e., nothing is calling get_frame_id on the current frame.

The fix here is to move Kevin's fix down from get_prev_frame to
get_prev_frame_always.  Or actually, a bit further down to
get_prev_frame_always_1 -- note that inline_frame_this_id calls
get_prev_frame_always, so we need to be careful to avoid recursion in
that scenario.

gdb/ChangeLog:

	* frame.c (get_prev_frame): Move get_frame_id call from here ...
	(get_prev_frame_always_1): ... to here.
	* inline-frame.c (inline_frame_this_id): Mention
	get_prev_frame_always_1 in comment.

Change-Id: Id960c98ab2d072c48a436c3eb160cc4b2a5cfd1d
2020-11-16 14:54:43 +00:00
Nick Clifton
10c9f4e584 Update the Spanish translation for the ld/ subdirectory.
* po/es.po: Updated Spanish translation.
2020-11-16 12:32:06 +00:00
Shahab Vahedi
315d05eb3f ld: Fix the tls_ie-01 test for arc
The purpose of the test is to look for entries of "foo" and
"bar" in the ".got".  The old "objdump -s ..." has been replaced
with "objdump -D ..." to inspect the final executable.  A sample
output looks like:

------------------------8<------------------------

$ arc-elf32-objdump -D -j .got tls_ie-01

tls_ie-01:     file format elf32-littlearc

Disassembly of section .got:

00002110 <_GLOBAL_OFFSET_TABLE_>:
        ...
    211c:       08 00 00 00        .word   0x00000008
    2120:       0c 00 00 00        .word   0x0000000c

------------------------>8------------------------

ld/
	* testsuite/ld-arc/tls_ie-01.d: Update the dump command.
2020-11-16 13:48:49 +02:00
GDB Administrator
5778e0dd5d Automatic date update in version.in 2020-11-16 00:00:10 +00:00
Joel Brobecker
b74dbc2093 Add support for fixed-point type comparison operators
This patch adds support for binary comparison operators with
fixed-point type values.

gdb/ChangeLog:

        * valarith.c (fixed_point_binop): Add BINOP_EQUAL and BINOP_LESS
        handling.
        (value_less): Add fixed-point handling.

gdb/testsuite/ChangeLog:

        * gdb.ada/fixed_cmp.exp: Add -fgnat-encodings=minimal testing.
        * gdb.dwarf2/dw2-fixed-point.c (pck__fp1_var2): New global.
        (main): Add reference to pck__fp1_var2.
        * gdb.dwarf2/dw2-fixed-point.exp: Add comparison operator testing.
2020-11-15 03:18:35 -05:00
Joel Brobecker
0a12719e51 Add support for fixed-point type arithmetic
This patch adds support for binary operations on fixed-point values,
as well as for the negative unary operator.

gdb/ChangeLog:

        * eval.c (binop_promote): Add fixed-point type handling.
        * valarith.c (fixed_point_binop): New function.
        (scalar_binop): Add fixed-point type handling.
        (value_neg): Add fixed-point type handling.
        * valops.c (value_cast_to_fixed_point): New function.
        (value_cast): Add fixed-point type handling.

gdb/testsuite/ChangeLog:

        * gdb.dwarf2/dw2-fixed-point.exp: Add arithmetic tests.
2020-11-15 03:17:12 -05:00
Joel Brobecker
0c9150e4de Add ptype support for DWARF-based fixed-point types
Note that the ptype information printed for types described
via pure DWARF debug info is slightly less informative as
the one printed when the information is encoded in the type's
name, via the GNAT encoding. As a result, the output in
the case of DWARF-described fixed point types is slightly
different. In pratice, this is no real loss because the information
not available in DWARF has no bearing on how the type is actually
stored in memory.

gdb/ChangeLog:

        * ada-typeprint.c (ada_print_type): Add handing of fixed-point
        range types.
        * c-typeprint.c (c_type_print_varspec_prefix)
        (c_type_print_varspec_suffix, c_type_print_base_1): Add
        TYPE_CODE_FIXED_POINT handling.
        * p-typeprint.c (pascal_type_print_varspec_prefix)
        (pascal_type_print_varspec_suffix): Likewise.
        * typeprint.c (print_type_fixed_point): New function.
        * typeprint.h (print_type_fixed_point): Add declaration.

gdb/testsuite/ChangeLog:

        * gdb.ada/fixed_points.exp: Add ptype tests.
        * gdb.dwarf2/dw2-fixed-point.exp: Likewise.
2020-11-15 03:16:01 -05:00
Joel Brobecker
b26daff97c fix printing of DWARF fixed-point type objects with format modifier
Consider a fixed-point type such the scaling factor is 1/16,
as the following Ada code snippet would create:

      type FP1_Type is delta 0.1 range -1.0 .. +1.0;
      FP1_Var : FP1_Type := 0.25;

Printing the value of this variable with a format modifier yields
the wrong value. E.g.:

    (gdb) p /x fp1_var
    $6 = 0x4

Since the real value is 0.25, we therefore expected...

    (gdb) p /x fp1_var
    $6 = 0x0

What happens, in this case, is that the value being printed is
actually the "raw" value of our object, before the scaling factor
gets applied.

This commit fixes the issue by using approach as for float values,
where we convert the value into an integer value, prior to printing,
knowing that the conversion takes the scaling factor into account.

gdb/ChangeLog:

        * printcmd.c (print_scalar_formatted): Add fixed-point type
        handling when options->format is set.

gdb/testsuite/ChangeLog:

        * gdb.dwarf2/dw2-fixed-point.exp: Add "print /x" tests.
2020-11-15 03:14:24 -05:00