Commit Graph

104964 Commits

Author SHA1 Message Date
Tom de Vries
d60f79984a [binutils] Print DWO ID
With exec:
...
$ gcc -gsplit-dwarf ~/hello.c -gdwarf-5
...
a dwarf-5 DW_UT_skeleton CU is generated, but the corresponding DWO ID is not
printed by readelf -wi.

Add this, such that we have:
....
   Compilation Unit @ offset 0xc7:
    Length:        0x31 (32-bit)
    Version:       5
    Unit Type:     DW_UT_skeleton (4)
    Abbrev Offset: 0x64
    Pointer Size:  8
+   DWO ID:        0x4756ae3ac4348f21
  <0><db>: Abbrev Number: 1 (DW_TAG_skeleton_unit)
...

binutils/ChangeLog:

2021-02-12  Tom de Vries  <tdevries@suse.de>

	* dwarf.c (process_debug_info): Print DWO ID.
2021-02-12 04:43:03 +01:00
GDB Administrator
a5a310d616 Automatic date update in version.in 2021-02-12 00:00:19 +00:00
Tom de Vries
05f68f52ef [gdb/symtab] Handle DW_FORM_strx in form_requires_reprocessing
When running test-case gdb.dwarf2/fission-mix.exp using gcc-11, I run into:
...
(gdb) file fission-mix^M
Reading symbols from fission-mix...^M
src/gdb/dwarf2/attribute.h:258: internal-error: \
  void attribute::set_unsigned_reprocess(ULONGEST): \
  Assertion `form_requires_reprocessing ()' failed.^M
...

This happens when calling set_unsigned_reprocess on an attribute with form
DW_FORM_strx.  The assert triggers because DW_FORM_strx is not listed in
form_requires_reprocessing.

Fix this by adding DW_FORM_strx in form_requires_reprocessing.

Tested on x86_64-linux.

gdb/ChangeLog:

2021-02-11  Tom de Vries  <tdevries@suse.de>

	PR symtab/27353
	* dwarf2/attribute.c (attribute::form_requires_reprocessing):
	Return true for DW_FORM_strx.
2021-02-11 21:03:03 +01:00
Tom Tromey
b260f8d60c Fix two Fortran regressions
Luis pointed out that an earlier patch of mine caused two regressions
in gdb.fortran.  This patch fixes the problem.

Regression tested on x86-64 Fedora 32.

gdb/ChangeLog
2021-02-11  Tom Tromey  <tromey@adacore.com>

	PR gdb/27383:
	* parse.c (write_exp_symbol_reference): Write sym.block.
2021-02-11 08:32:50 -07:00
Alan Modra
234b98ced2 Remove ia64 from obsolete list
* config.bfd: Remove ia64 from obsolete list.
2021-02-11 22:33:48 +10:30
Alan Modra
769c253f45 Revert "ia64: Check UNDEFWEAK_NO_DYNAMIC_RELOC"
This reverts commit db41f6eb52.
2021-02-11 22:33:48 +10:30
Andrew Burgess
a1670b7263 gdb/testsuite: remove old comment
In commit:

  commit e92c8eb86d
  Date:   Tue Feb 9 15:46:13 2021 +0000

      gdb/fortran: add parser support for lbound and ubound

When I created the test gdb/testsuite/gdb.fortran/lbound-ubound.exp, I
copied the script from a different file and failed to delete the test
description comment at the top (even though I added a new
description).  Fixed in this commit.

gdb/testsuite/ChangeLog:

	* gdb.fortran/lbound-ubound.exp: Remove old comment.
2021-02-11 11:32:09 +00:00
Andrew Burgess
bf3386f0c1 gdb: change 'maint info section' to use command options
The 'maintenance info sections' command currently takes a list of
filters on the command line.  It can also accept the magic string
'ALLOBJ' which acts more like a command line flag, telling the command
to print information about all objfiles.

The manual has this to say about the options and filters:

  ... In addition, 'maint info sections' provides the following
  command options (which may be arbitrarily combined): ...

Implying (to me at least) that I can do this:

  (gdb) maint info sections ALLOBJ READONLY

to list all the read-only sections from all currently loaded object
files.

Unfortunately, this doesn't work.  The READONLY filter will work, but
ALLOBJ will not be detected correctly.

It would be fairly simple to fix the ALLOBJ detection.  However, I
dislike this mixing of command options (ALLOBJ) with command data (the
filters, e.g. READONLY, etc).

As this is a maintenance command, so not really intended for end
users, I think we can be a little more aggressive in "fixing" the
option parsing.  So that's what I do in this commit.

The ALLOBJ mechanism is replaced with a real command
option (-all-objects).  The rest of the command operates just as
before.  The example above would now become:

  (gdb) maint info sections -all-objects READONLY

The manual has been updated, and I added a NEWS entry to document the
change.

gdb/ChangeLog:

	* NEWS: Mention changes to 'maint info sections'.
	* maint.c (match_substring): Return a bool, fix whitespace issue.
	(struct single_bfd_flag_info): New struct.
	(bfd_flag_info): New static global.
	(match_bfd_flags): Return a bool, use bfd_flag_info.
	(print_bfd_flags): Use bfd_flag_info.
	(maint_print_section_info): Delete trailing whitespace.
	(struct maint_info_sections_opts): New struct.
	(maint_info_sections_option_defs): New static global.
	(maint_info_sections_completer): New function.
	(maintenance_info_sections): Use option parsing mechanism.
	(_initialize_maint_cmds): Register command completer.

gdb/doc/ChangeLog:

	* gdb.texinfo (Files): Update documentation for 'maint info
	sections'.

gdb/testsuite/ChangeLog:

	* gdb.base/maint-info-sections.exp: Update expected output, and
	add additional tests. Again.
2021-02-11 10:26:19 +00:00
Andrew Burgess
4790db1496 gdb: 'maint info sections' - handle the no executable case
The 'maint info sections' command is split into two blocks or work,
first if there's an executable then the sections from the executable,
and optionally all other loaded object files are printed.  Then all
the sections from any core file are printed.

I ran into a situation where (for various reasons) I wasn't using a
main executable.  Instead I connected to a remote target and used
add-symbol-file.  This allowed me to debug an image that was already
loaded on the remote system.

Unfortunately, when I tried to use 'maint info sections' I saw
nothing.  The reason is that the loop over all object files is hidden
behind a check that we have a main executable.

This commit removes this check and merges together some duplicate
code.  I also (I think) made the output of this command cleaner.

Here is the original output of 'maint info sections':

  Exec file:
      `/tmp/hello.x', file type elf64-x86-64.
   [0]      0x004002a8->0x004002c4 at 0x000002a8: .interp ALLOC LOAD READONLY DATA HAS_CONTENTS
   [1]      0x004002c4->0x004002e8 at 0x000002c4: .note.gnu.build-id ALLOC LOAD READONLY DATA HAS_CONTENTS
   ...

And my modified output:

  Exec file: `/home/andrew/tmp/hello.x', file type elf64-x86-64.
   [0]      0x004002a8->0x004002c4 at 0x000002a8: .interp ALLOC LOAD READONLY DATA HAS_CONTENTS
   [1]      0x004002c4->0x004002e8 at 0x000002c4: .note.gnu.build-id ALLOC LOAD READONLY DATA HAS_CONTENTS
   ...

The forced newline after 'Exec file: ' has been removed.  This is now
a wrap point (in case the filename is very long).

Here is the original output of 'maint info sections ALLOBJ':

  Exec file:
      `/tmp/hello.x', file type elf64-x86-64.
    Object file: /tmp/hello.x
   [0]      0x004002a8->0x004002c4 at 0x000002a8: .interp ALLOC LOAD READONLY DATA HAS_CONTENTS
   [1]      0x004002c4->0x004002e8 at 0x000002c4: .note.gnu.build-id ALLOC LOAD READONLY DATA HAS_CONTENTS
   ...
    Object file: /lib64/ld-linux-x86-64.so.2
   [0]      0x7ffff7fd12a8->0x7ffff7fd12c8 at 0x000002a8: .note.gnu.property ALLOC LOAD READONLY DATA HAS_CONTENTS
   [1]      0x7ffff7fd12c8->0x7ffff7fd12ec at 0x000002c8: .note.gnu.build-id ALLOC LOAD READONLY DATA HAS_CONTENTS
   ...

And my modified output:

  Exec file: `/tmp/hello.x', file type elf64-x86-64.
   [0]      0x004002a8->0x004002c4 at 0x000002a8: .interp ALLOC LOAD READONLY DATA HAS_CONTENTS
   [1]      0x004002c4->0x004002e8 at 0x000002c4: .note.gnu.build-id ALLOC LOAD READONLY DATA HAS_CONTENTS
   ...
  Object file: `/lib64/ld-linux-x86-64.so.2', file type elf64-x86-64.
   [0]      0x7ffff7fd12a8->0x7ffff7fd12c8 at 0x000002a8: .note.gnu.property ALLOC LOAD READONLY DATA HAS_CONTENTS
   [1]      0x7ffff7fd12c8->0x7ffff7fd12ec at 0x000002c8: .note.gnu.build-id ALLOC LOAD READONLY DATA HAS_CONTENTS
   ...

The executable now only gets a single header line.  The header line
for the additional object files is no longer indented as it was
before, and the line is laid out in a similar style to the main
executable line (with quotes and file type information).

And of course, the biggest change.  If GDB is started with no
executable, but then the user does 'add-symbol-file ....' followed by
'maint info sections ALLOBJ', previously they got nothing, now they
get:

  Object file: `/tmp/hello.x', file type elf64-x86-64.
   [0]      0x004002a8->0x004002c4 at 0x000002a8: .interp ALLOC LOAD READONLY DATA HAS_CONTENTS
   [1]      0x004002c4->0x004002e8 at 0x000002c4: .note.gnu.build-id ALLOC LOAD READONLY DATA HAS_CONTENTS
   ...

gdb/ChangeLog:

	* maint.c (print_bfd_section_info_maybe_relocated): Delete,
	functionality merged into...
	(maint_print_all_sections): ...this new function.
	(maintenance_info_sections): Make use of maint_print_all_sections,
	allow all objects to be printed even where there's no executable.

gdb/testsuite/ChangeLog:

	* gdb.base/maint-info-sections.exp: Update expected output, and
	add additional tests.
2021-02-11 10:26:18 +00:00
Andrew Burgess
f4be677293 gdb/testsuite: split 'maint info sections' tests to a new file
The next couple of patches are going to add more tests for the 'maint
info sections' command.  Rather than try to jam these tests into the
already quite long gdb.base/maint.c, this commit moves all of the
tests for 'maint info sections' into a new file.

I've updated the tests to make use of some newer testsuite constructs,
like -wrap and $gdb_test_name for gdb_test_multiple, but otherwise the
tests should not have changed with this commit.

gdb/testsuite/ChangeLog:

	* gdb.base/maint-info-sections.exp: New file, content is moved
	from gdb.base/maint.exp and cleaned up to use latest testsuite
	techniques.
	* gdb.base/maint.exp: Tests moved out to
	gdb.base/maint-info-sections.exp.
2021-02-11 10:26:18 +00:00
Andrew Burgess
1db66e348a gdb: add obj_section function to bound_minimal_symbol
Add a new obj_section function to bound_minimal_symbol, this just
calls obj_section on the contained minimal_symbol passing in the
contained objfile.

This allows some minor code simplification in a few places.

There should be no user visible changes after this commit.

gdb/ChangeLog:

	* breakpoint.c (resolve_sal_pc): Make use of
	bound_minimal_symbol::obj_section.
	* maint.c (maintenance_translate_address): Likewise.
	* minsyms.c (minimal_symbol_upper_bound): Likewise.
	* minsyms.h (struct bound_minimal_symbol) <obj_section>: New
	member function.
	* printcmd.c (info_address_command): Make use of
	bound_minimal_symbol::obj_section.
2021-02-11 09:50:58 +00:00
Alan Modra
31c711a2b3 PR27294, avr OOM
PR 27294
	* elf32-avr.c (avr_elf32_load_records_from_section): Use
	bfd_malloc_and_get_section.  Use bfd_byte* vars and remove then
	unnecessary casts.
2021-02-11 19:42:15 +10:30
Alan Modra
1cfcf3004e PR27290, PR27293, PR27295, various avr objdump fixes
Adds missing sanity checks for avr device info note, to avoid
potential buffer overflows.  Uses bfd_malloc_and_get_section for
sanity checking section size.

	PR 27290
	PR 27293
	PR 27295
	* od-elf32_avr.c (elf32_avr_get_note_section_contents): Formatting.
	Use bfd_malloc_and_get_section.
	(elf32_avr_get_note_desc): Formatting.  Return descsz.  Sanity
	check namesz.  Return NULL if descsz is too small.  Ensure
	string table is terminated.
	(elf32_avr_get_device_info): Formatting.  Add note_size param.
	Sanity check note.
	(elf32_avr_dump_mem_usage): Adjust to suit.
2021-02-11 19:30:47 +10:30
Alan Modra
6db658c517 PR27291, integer overflow in bfd_get_section_contents
Makes the code a little more elegant too.  Note that the unsigned
overflow reported here is well defined so this patch doesn't fix any
real problem.

	PR 27291
	* section.c (bfd_get_section_contents): Avoid possible overflow
	when range checking offset and count.
	(bfd_set_section_contents): Likewise.
2021-02-11 11:58:19 +10:30
Simon Marchi
160fe19337 gdb: adjust comment in gdb.multi/multi-target.exp.tcl
I wanted to make this change before pushing the last patch but forgot to
amend before pushing.

Change-Id: I8e1f03ee0131c1e75973718e7835b39580a06054
2021-02-10 19:17:47 -05:00
GDB Administrator
10ed138aa3 Automatic date update in version.in 2021-02-11 00:00:10 +00:00
Simon Marchi
25ad1e83c8 gdb/testsuite: use "set sysroot" in gdb.multi/multi-target.exp.tcl
The multi-target tests involve some inferiors using remote targets.  By
default, GDB uses target: as the sysroot, which makes it read loaded
libraries and their debug info through GDBserver.  This makes the tests
run slower than necessary.

Pass `-ex "set sysroot"` when launching GDB in these tests, so that GDB
always reads from its local file system.

On a system where I don't have debug info for libc, that reduces run
time for

    $ make check TESTS="gdb.multi/multi-target-*.exp"

from 1:15 to 0:45.

On this other system where debug info is installed though, it reduces it
from 13:00 to 1:45.

gdb/testsuite/ChangeLog:

	* gdb.multi/multi-target.exp.tcl (setup): Add "set sysroot" to
	GDBFLAGS.

Change-Id: I9d24f3def843472d35dfb5667c12d70ae1d7e984
2021-02-10 18:01:10 -05:00
Alan Modra
18b8df43bd gdb: Remove arm-symbianelf support
Since it has gone from bfd/.

	* arm-symbian-tdep.c: Delete.
	* NEWS: Mention arm-symbian removal.
	* Makefile.in: Remove arm-symbian-tdep entries.
	* configure.tgt: Remove arm*-*-symbianelf*.
	* doc/gdb.texinfo: Remove mention of SymbianOS.
	* osabi.c (gdb_osabi_names): Remove "Symbian".
	* osabi.h (enum gdb_osabi): Remove GDB_OSABI_SYMBIAN.
	* testsuite/gdb.base/ending-run.exp: Remove E32Main handling.
	* testsuite/gdb.ada/catch_ex_std.exp: Remove arm*-*-symbianelf*
	handling.
	* testsuite/gdb.base/dup-sect.exp: Likewise.
	* testsuite/gdb.base/long_long.exp: Likewise.
	* testsuite/gdb.base/solib-weak.exp: Likewise.
	* testsuite/gdb.guile/scm-section-script.exp: Likewise.
	* testsuite/gdb.python/py-section-script.exp: Likewise.
	* testsuite/lib/dwarf.exp: Likewise.
	* testsuite/lib/gdb.exp: Likewise.
2021-02-11 07:23:42 +10:30
Alan Modra
933feaf37e Re: Remove arm-symbianelf
gas/
	* NEWS: Mention arm-symbianelf removal.
ld/
	* NEWS: Mention arm-symbianelf removal.
2021-02-11 07:22:20 +10:30
Tom de Vries
d9d9d8ef8c [binutils] Handle absolute DW_AT_dwo_name
With an exec:
...
$ pwd
/home/vries/tmp
$ gcc /home/vries/tmp/src/hello.c -gsplit-dwarf -c \
  -o /home/vries/tmp/obj/hello.o
...
I get:
...
$ readelf -w obj/hello.o > READELF
readelf: Warning: Unable to load dwo file: \
  /home/vries/tmp//home/vries/tmp/obj/hello.dwo
...

The dwo file name is listed here:
...
    <20>   DW_AT_GNU_dwo_name: /home/vries/tmp/obj/hello.dwo
    <24>   DW_AT_comp_dir    : /home/vries/tmp
...

The standard states about the DW_AT_dwo_name attribute:
...
value is a null-terminated string containing the full or relative path name
(relative to the value of the DW_AT_comp_dir attribute, see below) of the
object file that contains the full compilation unit.
...

So, readelf shouldn't try to prefix an absolute path with DW_AT_comp_dir.

Fix this in load_dwo_file by handling the absolute path case.

binutils/ChangeLog:

2021-02-10  Tom de Vries  <tdevries@suse.de>

	PR binutils/27391
	* dwarf.c (load_dwo_file): Handle case that name is absolute path.
2021-02-10 17:26:50 +01:00
Andrew Burgess
e92c8eb86d gdb/fortran: add parser support for lbound and ubound
Add support for the LBOUND and UBOUND built in functions to the
Fortran expression parser.

Both support taking one or two arguments.  A single argument, which
must be an array, returns an array containing all of the lower or
upper bound data.

When passed two arguments, the second argument is the dimension being
asked about.  In this case the result is a scalar containing the lower
or upper bound just for that dimension.

Some examples of usage taken from the new test:

  # Given:
  #   integer, dimension (-8:-1,-10:-2) :: neg_array
  #
  (gdb) p lbound (neg_array)
  $1 = (-8, -10)
  (gdb) p lbound (neg_array, 1)
  $3 = -8
  (gdb) p lbound (neg_array, 2)
  $5 = -10

gdb/ChangeLog:

	* f-exp.y (UNOP_OR_BINOP_INTRINSIC): New token.
	(exp): New pattern using UNOP_OR_BINOP_INTRINSIC.
	(one_or_two_args): New pattern.
	(f77_keywords): Add lbound and ubound.
	* f-lang.c (fortran_bounds_all_dims): New function.
	(fortran_bounds_for_dimension): New function.
	(evaluate_subexp_f): Handle FORTRAN_LBOUND and FORTRAN_UBOUND.
	(operator_length_f): Likewise.
	(print_subexp_f): Likewise.
	(dump_subexp_body_f): Likewise.
	(operator_check_f): Likewise.
	* std-operator.def (FORTRAN_LBOUND): Define.
	(FORTRAN_UBOUND): Define.

gdb/testsuite/ChangeLog:

	* gdb.fortran/lbound-ubound.F90: New file.
	* gdb.fortran/lbound-ubound.exp: New file.
2021-02-10 16:03:49 +00:00
Nick Alcock
758f590744 libctf: add missing header in BFD ELF check
Without this, GCC warns:

In file included from conftest.c:36:
../../libctf/../bfd/elf-bfd.h: In function 'bfd_section_is_ctf':
../../libctf/../bfd/elf-bfd.h:3089:10: warning: implicit declaration of function 'strncmp' [-Wimplicit-function-declaration]
 3089 |   return strncmp (name, ".ctf", 4) == 0 && (name[4] == 0 || name[4] == '.');
      |          ^~~~~~~
../../libctf/../bfd/elf-bfd.h:3089:33: warning: 'strncmp' argument 3 type is 'int' where 'long unsigned int' is expected in a call to built-in function declared without prototype [-Wbuiltin-declaration-mismatch]
 3089 |   return strncmp (name, ".ctf", 4) == 0 && (name[4] == 0 || name[4] == '.');
      |                                 ^
<built-in>: note: built-in 'strncmp' declared here

These warnings do not currently throw off the result of the configure
check, but it's better to squash them anyway.

libctf/ChangeLog
2021-02-03  Nick Alcock  <nick.alcock@oracle.com>

	* configure.ac (ac_cv_libctf_bfd_elf): Include string.h.
	* configure: Regenerated.
2021-02-10 15:26:57 +00:00
Nick Alcock
cbd8f5bbcc libctf: require a Tcl capable of try/catch to run tests
The run_native_host_cmd implementation in testsuite/lib/ctf-lib.exp
uses try/catch, which are new in Tcl 8.6.  Require a Tcl that knows
that try exists, as suggested by Jan Beulich.

libctf/ChangeLog
2021-02-03  Nick Alcock  <nick.alcock@oracle.com>

	* configure.ac (EXPECT): Check for, in order to define...
	(TCL_TRY): ... this, if Tcl supports try/catch.
	* Makefile.am (TCL_TRY): Run the testsuite only if set.
	* configure: Regenerated.
	* Makefile.in: Likewise.
2021-02-10 15:26:57 +00:00
Nick Alcock
9514861402 bfd, opcodes, libctf: support --with-included-gettext
Right now, these libraries hardwire -L../intl -lintl on a few fixed
platforms, which works fine on those platforms but on other platforms
leads to shared libraries that lack libintl_* symbols when configured
--with-included-gettext, and/or static libraries that contain libintl as
*another* static library.  If we instead use the LIBINTL variable
defined in ../intl/config.intl, this gives us the right thing on all
three classes of platform (gettext in libc, gettext in system libintl,
gettext in ../intl/libintl.a)..  This also means we can rip out some
Darwin-specific machinery from configure.ac and also simplify the Cygwin
side.

This also means that the libctf testsuite (and other places that include
libbfd, libopcodes or libctf) don't need to grow libintl dependencies
just on account of those libraries (though they still need such
dependencies if they themselves use gettext machinery).

bfd/ChangeLog
2021-02-03  Nick Alcock  <nick.alcock@oracle.com>

	* configure.ac (SHARED_LIBADD): Remove explicit -lintl population in
	favour of LIBINTL.
	* configure: Regenerated.

libctf/ChangeLog
2021-02-02  Nick Alcock  <nick.alcock@oracle.com>

	* configure.ac (CTF_LIBADD): Remove explicit -lintl population in
	favour of LIBINTL.
	* Makefile.am (libctf_nobfd_la_LIBADD): No longer explicitly
	include $(LIBINTL).
	(check-DEJAGNU): Pass down to tests as well.
	* configure: Regenerated.
	* Makefile.in: Likewise.

opcodes/ChangeLog
2021-02-04  Nick Alcock  <nick.alcock@oracle.com>

	* configure.ac (SHARED_LIBADD): Remove explicit -lintl population in
	favour of LIBINTL.
	* configure: Regenerated.
2021-02-10 15:26:57 +00:00
Nick Alcock
aee224d643 intl: turn LIBINTL into -L / -l form
This variable currently refers directly, not to a .la file, but to an .a
file.  This produces wrong results when building into a library on some
platforms: so convert it to the general form "-L${top_builddir}../intl
-lintl ..." ... so that both libtool and non-libtool builds will always
do the right thing for both static and shared links.

intl/ChangeLog
2021-02-04  Nick Alcock  <nick.alcock@oracle.com>

	* configure.ac (LIBINTL): Transform into -L/-lintl form.
	* configure: Regenerate.
2021-02-10 15:26:57 +00:00
Nick Alcock
53d4244ec0 intl: always picify
libintl is included in several shared libraries (at least
libinproctrace.so and libctf.so): unconditionally picify with code
borrowed from libiberty configure.  (It's not performance-critical, so
don't bother making separate PIC and non-PIC libraries like libiberty
does.)

intl/ChangeLog
2021-02-02  Nick Alcock  <nick.alcock@oracle.com>

	* aclocal.m4: include picflag.m4.
	* configure.ac (PICFLAG): Add and substitute.
	* Makefile.in (PICFLAG): New.
	(COMPILE): Use it.
	* configure: Regenerate.
2021-02-10 15:26:57 +00:00
Jakub Jelinek
adda0248ed intl: Unbreak intl build with bison 3 when no regeneration is needed [PR92008]
As Iain reported, my change broke the case when one has bison >= 3,
but make decides there is no reason to regenerate plural.c, unfortunately
that seems to be a scenario I haven't tested.  The problem is that
the pregenerated plural.c has been generated with bison 1.35, but when
config.h says HAVE_BISON3, the code assumes it is the bison3 variant.
What used to work fine is when one has bison >= 3 and plural.c has been
regenerated (e.g. do touch intl/plural.y and it will work), or when
one doesn't have any bison (then nothing is regenerated, but HAVE_BISON3
isn't defined either), or when one has bison < 3 and doesn't need to
regenerate, or when one has bison < 3 and it is regenerated.

The following patch fixes this, by killing the HAVE_BISON3 macro from
config.h, and instead remembering the fact whether plural.c has been created
with bison < 3 or bison >= 3 in a separate new plural-config.h header.
The way this works:
- user doesn't have bison
- user has bison >= 3, but intl/{plural-config.h,plural.c} aren't older than intl/plural.y
- user has bison < 3, but intl/{plural-config.h,plural.c} aren't older than intl/plural.y
	pregenerated !USE_BISON3 plural.c and plural-config.h from source
	dir is used, nothing in the objdir
- user has bison >= 3 and intl/plural.y is newer
	Makefile generates plural.c and USE_BISON3 plural-config.h in the
	objdir, which is then used in preference to srcdir copies
- user has bison < 3 and intl/plural.y is newer
	Makefile generates plural.c and !USE_BISON3 plural-config.h in the
	objdir, which is then used in preference to srcdir copies
I have tested all these cases and make all-yes worked in all the cases.
If one uses the unsupported ./configure where srcdir == objdir, I guess
(though haven't tested) that it should still work, just it would be nice
if such people didn't try to check in the plural{.c,-config.h} they have
regenerated.
What doesn't work, but didn't work before either (just tested gcc-9 branch
too) is when one doesn't have bison and plural.y is newer than plural.c.
Don't do that ;)

intl/ChangeLog
2020-04-16  Jakub Jelinek  <jakub@redhat.com>

	PR bootstrap/92008
	* configure.ac: Remove HAVE_BISON3 AC_DEFINE.
	* Makefile.in (HEADERS): Add plural-config.h.
	(.y.c): Also create plural-config.h.
	(dcigettext.o loadmsgcat.o plural.o plural-exp.o): Also depend
	on plural-config.h.
	(plural-config.h): Depend on plural.c.
	* plural-exp.h: Include plural-config.h.  Use USE_BISON3 instead
	of HAVE_BISON3.
	* plural.y: Use USE_BISON3 instead of HAVE_BISON3.
	* configure: Regenerated.
	* plural.c: Regenerated.
	* config.h.in: Regenerated.
	* plural-config.h: Generated.
2021-02-10 15:26:57 +00:00
Jakub Jelinek
830c5a1ffb intl: Allow building both with old bison and bison >= 3 [PR92008]
bison 3 apparently made a backwards incompatible change, dropped
YYLEX_PARAM/YYPARSE_PARAM support and instead needs %param or %lex-param
and %parse-param.  Furthermore, there is no easy way to conditionalize
on bison version in the *.y files.
While e.g. glibc bumped bison requirement and just has the bison 3
compatible version, Richi said there are still systems with older bison
where we want to build gcc.

So, this patch instead determines during configure bison version, and
depending on that when building plural.c (if building it at all) tweaks
what is passed over to bison if needed.

Tested with both bison 3 and bison 1.35, in each case with reconfiguring
intl and building with make all-yes (as in my setup intl isn't normally
used).

intl/ChangeLog
2020-04-16  Jakub Jelinek  <jakub@redhat.com>

	PR bootstrap/92008
	* configure.ac: Add check for bison >= 3, AC_DEFINE HAVE_BISON3
	and AC_SUBST BISON3_YES and BISON3_NO.
	* Makefile.in (.y.c): Prefix $(YACC) invocation with @BISON3_NO@,
	add @BISON3_YES@ prefixed rule to adjust the *.y source using sed
	and adjust output afterwards.
	* plural-exp.h (PLURAL_PARSE): If HAVE_BISON3 is defined, use
	struct parse_args * type for arg instead of void *.
	* plural.y: Add magic /* BISON3 ... */ comments with bison >= 3
	directives.
	(YYLEX_PARAM, YYPARSE_PARAM): Don't define if HAVE_BISON3 is defined.
	(yylex, yyerror): Adjust prototypes and definitions if HAVE_BISON3
	is defined.
	* plural.c: Regenerated.
	* config.h.in: Regenerated.
	* configure: Regenerated.
2021-02-10 15:26:56 +00:00
Andrew Burgess
a52d653e91 gdb: delete SYMBOL_SECTION and MSYMBOL_SECTION macros
Delete two more symbol/section related macros.  This time it's
SYMBOL_SECTION and MSYMBOL_SECTION.

As with general_symbol_info::m_name it is not currently possible to
make general_symbol_info::m_section private as general_symbol_info
must remain a POD type.

But other than failing to make the new m_section private, this change
does what you'd expect, adds a get and set member function and updates
all users to use the new functions instead of the previous wrapper
macros.

There should be no user visible change after this commit.

gdb/ChangeLog:

	* coff-pe-read.c (add_pe_forwarded_sym): Make use of section_index
	and set_section_index member functions where appropriate.
	* coffread.c (coff_symtab_read): Likewise.
	(process_coff_symbol): Likewise.
	* ctfread.c (set_symbol_address): Likewise.
	* dwarf2/read.c (add_partial_symbol): Likewise.
	(var_decode_location): Likewise.
	* language.c: Likewise.
	* minsyms.c (minimal_symbol_reader::record_full): Likewise.
	(compact_minimal_symbols): Likewise.
	(minimal_symbol_upper_bound): Likewise.
	* objfiles.c (relocate_one_symbol): Likewise.
	* psympriv.h (partial_symbol::obj_section): Likewise.
	(partial_symbol::address): Likewise.
	* psymtab.c (partial_symtab::add_psymbol): Likewise.
	* stabsread.c (scan_file_globals): Likewise.
	* symmisc.c (dump_msymbols): Likewise.
	* symtab.c (general_symbol_info::obj_section): Likewise.
	(fixup_section): Likewise.
	(get_msymbol_address): Likewise.
	* symtab.h (general_symbol_info::section): Rename to...
	(general_symbol_info::m_section): ...this.
	(general_symbol_info::set_section_index): New member function.
	(general_symbol_info::section_index): Likewise.
	(SYMBOL_SECTION): Delete.
	(MSYMBOL_VALUE_ADDRESS): Make use of section_index and
	set_section_index member functions where appropriate.
	(MSYMBOL_SECTION): Delete.
	(symbol::symbol): Update to initialize 'm_section'.
	* xcoffread.c (read_xcoff_symtab): Make use of set_section_index.
	(process_xcoff_symbol): Likewise.
2021-02-10 14:38:08 +00:00
Andrew Burgess
ebbc3a7d56 gdb: Delete SYMBOL_OBJ_SECTION and MSYMBOL_OBJ_SECTION
Replace the two macros SYMBOL_OBJ_SECTION and MSYMBOL_OBJ_SECTION with
a member function on general_symbol_info.

There should be no user visible change after this commit.

gdb/ChangeLog:

	* breakpoint.c (resolve_sal_pc): Replace SYMBOL_OBJ_SECTION and
	MSYMBOL_OBJ_SECTION.
	* findvar.c (language_defn::read_var_value): Likewise.
	* infcmd.c (jump_command): Likewise.
	* linespec.c (minsym_found): Likewise.
	* maint.c (maintenance_translate_address): Likewise.
	* minsyms.c (lookup_minimal_symbol_by_pc_section): Likewise.
	(minimal_symbol_upper_bound): Likewise.
	* parse.c (find_minsym_type_and_address): Likewise.
	(operator_check_standard): Likewise.
	* printcmd.c (info_address_command): Likewise.
	* symmisc.c (dump_msymbols): Likewise.
	(print_symbol): Likewise.
	* symtab.c (general_symbol_info::obj_section): Define new
	function.
	(fixup_symbol_section): Replace SYMBOL_OBJ_SECTION.
	(find_pc_sect_compunit_symtab): Likewise.
	(find_function_start_sal): Likewise.
	(skip_prologue_sal): Replace SYMBOL_OBJ_SECTION and
	MSYMBOL_OBJ_SECTION.
	* symtab.h (struct general_symbol_info) <obj_section>: Declare new
	function.
	(SYMBOL_OBJ_SECTION): Delete.
	(MSYMBOL_OBJ_SECTION): Delete.
2021-02-10 14:38:08 +00:00
Tom de Vries
52ff20fe7b [binutils] Handle presence of both .debug_ranges and .debug_rnglists
With exec:
...
$ g++ src/gdb/testsuite/gdb.cp/cpexprs.cc -gdwarf-5 -fdebug-types-section
...
I run into:
...
$ readelf -w a.out > READELF
readelf: Error: Invalid range list entry type 126
readelf: Error: Invalid range list entry type 60
...

The executable contains both a .debug_rnglists section (for CU
cpexprs.cc) and a .debug_ranges section (for other CUs, like crti.S).  But
when executing display_debug_ranges for say, section .debug_rnglists it also
tries to use the range list references related to section .debug_ranges.

Fix this by filtering out the .debug_range references when handling
.debug_rnglists and vice versa.

binutils/ChangeLog:

2021-02-10  Tom de Vries  <tdevries@suse.de>

	PR binutils/27371
	* dwarf.c (display_debug_ranges): Filter range lists according to
	section.
2021-02-10 12:30:46 +01:00
Tom de Vries
ee4c3d8801 [gdb/testsuite] Fix tcl ERROR in gdb_load_no_complaints
In commit cf2b207529 "[gdb/symtab] Fix element type modification in
read_array_type" I factored out new proc with_complaints out of proc
gdb_load_no_complaints, but when fixing a rebase conflict pre-commit I made a
mistake in gdb_load_no_complaints that is now causing:
...
ERROR: tcl error sourcing dw2-ranges-psym.exp.
ERROR: can't read "save": no such variable
    while executing
"gdb_test_no_output "set complaints $save" """
    (procedure "gdb_load_no_complaints" line 14)
    invoked from within
"gdb_load_no_complaints $binfile"
...

Fix this by removing the offending line.

Tested on x86_64-linux.

gdb/testsuite/ChangeLog:

2021-02-10  Tom de Vries  <tdevries@suse.de>

	* lib/gdb.exp (gdb_load_no_complaints): Remove unnecessary
	"Restore saved setting of complaints".
2021-02-10 11:43:46 +01:00
Nick Clifton
01e8b831f5 Remove debugging code accidentally included with the fix for PR 27384
* listing.c (buffer_line): Remove debugging code accidentally
	included with the fix for PR 27384.
2021-02-10 09:56:33 +00:00
Tom Tromey
9bb305b389 Fix typo in stap_parse_argument_conditionally
This fixes a typo in an error message in
stap_parse_argument_conditionally.

gdb/ChangeLog
2021-02-09  Tom Tromey  <tom@tromey.com>

	* stap-probe.c (stap_parse_argument_conditionally): Fix typo.
2021-02-09 17:35:59 -07:00
GDB Administrator
238ebeb127 Automatic date update in version.in 2021-02-10 00:00:16 +00:00
Tom de Vries
cf2b207529 [gdb/symtab] Fix element type modification in read_array_type
When running test-case gdb.fortran/function-calls.exp with target board
unix/gdb:debug_flags=-gdwarf-5, I run into:
...
(gdb) PASS: gdb.fortran/function-calls.exp: \
  p derived_types_and_module_calls::pass_cart(c)
p derived_types_and_module_calls::pass_cart_nd(c_nd)^M
^M
Program received signal SIGSEGV, Segmentation fault.^M
0x0000000000400f73 in derived_types_and_module_calls::pass_cart_nd \
  (c=<error reading variable: Cannot access memory at address 0xc>) at \
  function-calls.f90:130^M
130             pass_cart_nd = ubound(c%d,1,4)^M
The program being debugged was signaled while in a function called from GDB.^M
GDB has restored the context to what it was before the call.^M
To change this behavior use "set unwindonsignal off".^M
Evaluation of the expression containing the function^M
(derived_types_and_module_calls::pass_cart_nd) will be abandoned.^M
(gdb) FAIL: gdb.fortran/function-calls.exp: p
...

The problem originates in read_array_type, when reading a DW_TAG_array_type
with a dwarf-5 DW_TAG_generic_subrange child.  This is not supported, and the
fallout of this is that rather than constructing a new array type, the code
proceeds to modify the element type.

Fix this conservatively by issuing a complaint and bailing out in
read_array_type when not being able to construct an array type, such that we
have:
...
(gdb) maint expand-symtabs function-calls.f90^M
During symbol reading: unable to find array range \
  - DIE at 0xe1e [in module function-calls]^M
During symbol reading: unable to find array range \
  - DIE at 0xe1e [in module function-calls]^M
(gdb) KFAIL: gdb.fortran/function-calls.exp: no complaints in srcfile \
  (PRMS: symtab/27388)
...

Tested on x86_64-linux.

gdb/ChangeLog:

2021-02-09  Tom de Vries  <tdevries@suse.de>

	PR symtab/27341
	* dwarf2/read.c (read_array_type): Return NULL when not being able to
	construct an array type.  Add assert to ensure that element_type is
	not being modified.

gdb/testsuite/ChangeLog:

2021-02-09  Tom de Vries  <tdevries@suse.de>

	PR symtab/27341
	* lib/gdb.exp (with_complaints): New proc, factored out of ...
	(gdb_load_no_complaints): ... here.
	* gdb.fortran/function-calls.exp: Add test-case.
2021-02-09 23:28:16 +01:00
Andrew Burgess
03642b7189 gdb: revert "gdb: unify parts of the Linux and FreeBSD core dumping code"
This reverts commit 82a1fd3a49.

It was pointed out:

  https://sourceware.org/pipermail/gdb-patches/2021-February/175750.html

that commit 82a1fd3a49 caused GDB to have an unconditional
dependency on ELF specific parts of BFD.  What this means is that if
GDB and BFD are built for a non-elf target then there will be
undefined symbol references within GDB.

The right solution isn't immediately obvious.  So rather than rush a
fix in I'm reverting this commit for now, and will bring it back once
I have a good solution.

gdb/ChangeLog:

	* gcore.c (struct gcore_collect_regset_section_cb_data): Delete.
	(gcore_collect_regset_section_cb): Delete.
	(gcore_collect_thread_registers): Delete.
	(gcore_build_thread_register_notes): Delete.
	(gcore_find_signalled_thread): Delete.
	* gcore.h: Remove 'gdbsupport/gdb_signals.h' include and delete
	'gdbarch' and 'thread_info' declarations.
	(gcore_build_thread_register_notes): Delete declaration.
	(gcore_find_signalled_thread): Likewise.
	* fbsd-tdep.c: Remove 'gcore.h' include.
	(struct fbsd_collect_regset_section_cb_data): New struct.
	(fbsd_collect_regset_section_cb): New function.
	(fbsd_collect_thread_registers): New function.
	(struct fbsd_corefile_thread_data): New struct.
	(fbsd_corefile_thread): New function.
	(fbsd_make_corefile_notes): Call FreeBSD specific code.
	* linux-tdep.c: Remove 'gcore.h' include.
	(struct linux_collect_regset_section_cb_data): New struct.
	(linux_collect_regset_section_cb): New function.
	(linux_collect_thread_registers): New function.
	(linux_corefile_thread): Call Linux specific code.
	(find_signalled_thread): New function.
	(linux_make_corefile_notes): Call find_signalled_thread.
2021-02-09 21:46:12 +00:00
Hafiz Abid Qadeer
b61f78118a [testsuite] Don't use 'testfile' before 'standard_testfile'.
While running tests on arm-none-eabi, I noticed following errors in some
gdb.threads tests.

ERROR: can't read "testfile": no such variable

These were being caused by ${testfile} being used before 'standard_testfile'
which sets it. This patch just moves standard_testfile before the use.

2021-02-09  Abid Qadeer  <abidh@codesourcery.com>

	gdb/testsuite/ChangeLog:

	* gdb.threads/signal-command-handle-nopass.exp: Call
	'standard_testfile' before using 'testfile'.
	* gdb.threads/signal-command-multiple-signals-pending.exp: Likewise.
	* gdb.threads/signal-delivered-right-thread.exp: Likewise
	* gdb.threads/signal-sigtrap.exp: Likewise
2021-02-09 20:35:21 +00:00
Tom Tromey
f73e424f7b Avoid crash from coerce_unspec_val_to_type
With a certain Ada program, ada-lang.c:coerce_unspec_val_to_type can
cause a crash.  This function may copy a value, and in the particular
case in the crash, the new value's type is smaller than the original
type.  This causes coerce_unspec_val_to_type to create a lazy value --
but the original value is also not_lval, so later, when the value is
un-lazied, gdb asserts.

As with the previous patch, we believe there is a compiler bug here,
but it is difficult to reproduce, so we're not completely certain.

In the particular case we saw, the original value has record type, and
the record holds some variable-length arrays.  This leads to the
type's length being 0.  At the same time, the value is optimized out.

This patch changes coerce_unspec_val_to_type to handle an
optimized-out value correctly.

It also slightly restructures this code to avoid a crash should a
not_lval value wind up here.  This is a purely defensive change.

This change also made it clear that value_contents_copy_raw can now be
made static, so that is also done.

gdb/ChangeLog
2021-02-09  Tom Tromey  <tromey@adacore.com>

	* ada-lang.c (coerce_unspec_val_to_type): Avoid making lazy
	not_lval value.
	* value.c (value_contents_copy_raw): Now static.
	* value.h (value_contents_copy_raw): Don't declare.
2021-02-09 12:15:39 -07:00
Tom Tromey
a4f0544b1b Avoid crash in resolve_dynamic_struct
resolve_dynamic_struct says:

  gdb_assert (type->num_fields () > 0);

However, a certain Ada program has a structure with no fields but with
a dynamic size, causing this assertion to fire.

It is difficult to be certain, but we think this is a compiler bug.
However, in the meantime this assertion does not seem to be checking
any kind of internal consistency; so this patch removes it.

gdb/ChangeLog
2021-02-09  Tom Tromey  <tromey@adacore.com>

	* gdbtypes.c (resolve_dynamic_struct): Handle structure with no
	fields.
2021-02-09 12:15:39 -07:00
Tom de Vries
5f128a25f2 [binutils] Handle DW_FORM_ref_sig8 in get_type_abbrev_from_form
When compiling an exec like this:
...
$ gcc -fdebug-types-section hello.c -gdwarf-5
...
we run into:
...
$ readelf -w a.out > READELF
readelf: Warning: Unexpected form 20 encountered whilst finding \
  abbreviation for type
...

Fix this by handling DW_FORM_ref_sig8 conservatively in
get_type_abbrev_from_form.

binutils/ChangeLog:

2021-02-09  Tom de Vries  <tdevries@suse.de>

	PR binutils/27370
	* dwarf.c (get_type_abbrev_from_form): Handle DW_FORM_ref_sig8.
2021-02-09 15:37:24 +01:00
Nick Clifton
284beb431f Add a sanity check of files include by .incbin.
PR 27381
	* read.c (s_incbin): Check that the file to be included is a
	regular, non-directory file.
	* testsuite/gas/all/pr27381.s: New test source file.
	* testsuite/gas/all/pr27381.d: New test control file.
	* testsuite/gas/all/pr27381.err: Expected error output for the new test.
	* testsuite/gas/all/gas.exp: Run the new test.
2021-02-09 14:22:23 +00:00
Tom de Vries
9b87f84a35 [binutils] Handle DW_UT_skeleton/split_compile in process_debug_info
With this exec:
...
$ gcc -gsplit-dwarf hello.c -gdwarf-5
...
we run into:
...
$ readelf -w a.out > READELF
readelf: Warning: CU at offset c7 contains corrupt or unsupported unit type: 4.
readelf: Warning: CU at offset c7 contains corrupt or unsupported unit type: 4.
...

Fix this by handling DW_UT_skeleton and DW_UT_split_compile in
process_debug_info.

Note that this just adds the parsing of DWO_id, but not yet any printing of
it.

Tested on x86_64-linux.

binutils/ChangeLog:

2021-02-09  Tom de Vries  <tdevries@suse.de>

	PR binutils/27386
	* dwarf.c (process_debug_info): Handling DW_UT_skeleton and
	DW_UT_split_compile.
2021-02-09 14:27:28 +01:00
Alan Modra
a57d17732e Remove arm-symbianelf
* configure.ac: Delete arm*-*-symbianelf* entry.
	* configure: Regenerate.
bfd/
	* config.bfd (arm*-*-symbianelf*): Move from obsolete to removed.
	* configure.ac: Delete symbian entries.
	* elf-bfd.h (enum elf_target_os): Delete is_symbian.
	* elf32-arm.c: Remove symbian support.  Formatting.
	* targets.c: Delete symbian entries.
	* configure: Regenerate.
binutils/
	* testsuite/lib/binutils-common.exp (supports_gnu_osabi): Remove
	symbianelf.
gas/
	* Makefile.am (TARG_ENV_HFILES): Remove config/te-symbian.h.
	* config/tc-arm.c (elf32_arm_target_format): Remove TE_SYMBIAN
	support.
	* config/te-symbian.h: Delete.
	* configure.tgt: Remove arm-*-symbianelf*.
	* testsuite/gas/arm/arch4t-eabi.d: Don't mention symbianelf in
	target selection.
	* testsuite/gas/arm/arch4t.d: Likewise.
	* testsuite/gas/arm/got_prel.d: Likewise.
	* testsuite/gas/arm/mapdir.d: Likewise.
	* testsuite/gas/arm/mapmisc.d: Likewise.
	* testsuite/gas/arm/mapsecs.d: Likewise.
	* testsuite/gas/arm/mapshort-eabi.d: Likewise.
	* testsuite/gas/arm/thumb-eabi.d: Likewise.
	* testsuite/gas/arm/thumb.d: Likewise.
	* testsuite/gas/arm/thumbrel.d: Likewise.
	* Makefile.in: Regenerate.
	* po/POTFILES.in: Regenerate.
ld/
	* Makefile.am (ALL_EMULATION_SOURCES): Remove earmsymbian.c.
	Don't include symbian dep file.
	* configure.tgt: Remove arm*-*-symbianelf* entry.
	* emulparams/armsymbian.sh: Delete.
	* ld.texi: Don't mention symbian.
	* scripttempl/armbpabi.sc: Delete.
	* testsuite/ld-arm/symbian-seg1.d: Delete.
	* testsuite/ld-arm/symbian-seg1.s: Delete.
	* testsuite/ld-arm/arm-elf.exp: Don't run symbian-seg1.
	* Makefile.in: Regenerate.
	* po/BLD-POTFILES.in: Regenerate.
2021-02-09 23:36:16 +10:30
Nick Clifton
4a68fcd7f7 Prevent a bad .Psize expression from triggering a memory access violation.
PR 27384
	* listing.c (listing_psize): Check the result of the width
	expression before assigning it to paper_width.
	* testsuite/gas/all/pr27384.s: New test source file.
	* testsuite/gas/all/pr27384.d: New test control file.
	* testsuite/gas/all/pr27384.err: Expected errors from new test.
	* testsuite/gas/all/gas.exp: Run the new test.
2021-02-09 12:53:32 +00:00
Nick Clifton
52563b0f1c Add a test for PR 27355 - where corrupt assembler .file directives could trigger a segmentation fault.
PR 27355
	* testsuite/gas/elf/pr27355.s: New test source file.
	* testsuite/gas/elf/pr27355.d: New test control file.
	* testsuite/gas/elf/pr27355.err: Expected errors from new test.
	* testsuite/gas/elf/elf.exp: Run the new test.
2021-02-09 10:51:40 +00:00
GDB Administrator
32d5141c70 Automatic date update in version.in 2021-02-09 00:00:14 +00:00
Mike Frysinger
bfd428bc12 opcodes: tic54x: namespace exported variables
The tic54x exports some fairly generic variable names that can
conflict with programs that use them, so put proper tic54x_
prefixes on all of them.
2021-02-08 18:26:08 -05:00
Luis Machado
3d4aae4860 Build gdb.base/gnu-ifunc.exp with lazy binding
The test expects the ifunc resolver to run lazily, at a later stage.

Depending on the distro and toolchain configuration, this is not the
case. Some configurations use non-lazy binding and thus the ifunc resolver
resolves all the ifunc references very early in the process startup, before
main.

Ubuntu is one such case. It has switched its toolchains to pass -Wl,z,now by
default, since 16.04. This wasn't a problem before 20.04 (at least for
aarch64) because the toolchains did not support ifunc's.

Forcing lazy binding makes the test run as expected, as opposed to the 80 or
so failures it showed before the change.

Tested on aarch64-linux/x86_64-linux Ubuntu 20.04.

gdb/testsuite:

2021-02-08  Luis Machado  <luis.machado@linaro.org>

	* gdb.base/gnu-ifunc.exp (build): Pass -Wl,z,lazy.
2021-02-08 18:56:48 -03:00
Nick Clifton
80b652efa2 Fix an illegal memory access when parsing a corrupt assembler file.
PR 27355
	* dwarf2dbg.c (allocate_filename_to_slot): Allocate the dirs array
	if it has not already been created.
2021-02-08 18:31:21 +00:00