Commit Graph

104760 Commits

Author SHA1 Message Date
Andrew Burgess
47918cca26 gdb/testsuite: unset XDG_CONFIG_HOME
Since this commit:

  commit 64aaad6349
  Date:   Fri Sep 25 14:50:56 2020 +0100

      gdb: use get_standard_config_dir when looking for .gdbinit

GDB has been checking for ${XDG_CONFIG_HOME}/gdb/gdbinit on startup.

Most tests pass -nx to GDB to block loading of gdbinit files, but
there are a few tests (e.g. gdb.base/gdbinit-history.exp) that don't
use -nx and instead setup a fake HOME directory containing a gdbinit
file.

However, since the above commit, if XDG_CONFIG_HOME is set then once
-nx is no longer being passed GDB will load any gdbinit file it finds
in that directory, which could cause the test to fail.

As a concrete example:

  $ mkdir -p fake_xdg_config_home/gdb/
  $ cat <<EOF >fake_xdg_config_home/gdb/gdbinit
  echo goodbye\n
  quit
  EOF
  $ export XDG_CONFIG_HOME=$PWD/fake_xdg_config_home
  $ make check-gdb TESTS="gdb.base/gdbinit-history.exp"

Should result in the test failing.

The solution I propose is to unset XDG_CONFIG_HOME in
default_gdb_init, we already unset a bunch of environment variables in
this proc.

gdb/testsuite/ChangeLog:

	* lib/gdb.exp (default_gdb_init): Unset XDG_CONFIG_HOME.
2021-01-28 10:05:33 +00:00
Andrew Burgess
24cf63899b gdb: update comment for execute_command_to_string
The function execute_command_to_string had two header comments, one in
gdbcmd.h and one in top.c.

This commit merges the two comments into one and places this comment
in gdbcmd.h.  The comment in top.c is updated to just reference
gdbcmd.h.

gdb/ChangeLog:

	* gdbcmd.h (execute_command_to_string): Update comment.
	* top.c (execute_command_to_string): Update header comment.
2021-01-28 10:04:54 +00:00
Tom de Vries
2a7f6487d0 [gdb/breakpoints] Fix longjmp master breakpoint with separate debug info
When running test-case gdb.base/longjmp.exp with target board unix/-m32, we
run into:
...
(gdb) next^M
Warning:^M
Cannot insert breakpoint 0.^M
Cannot access memory at address 0x7dbf7353^M
^M
__libc_siglongjmp (env=0x804a040 <env>, val=1) at longjmp.c:28^M
28        longjmps++;^M
(gdb) FAIL: gdb.base/longjmp.exp: next over longjmp(1)
...

The failure to access memory happens in i386_get_longjmp_target and is due to
glibc having pointer encryption (aka "pointer mangling" or "pointer guard") of
the long jump buffer.  This is a known problem.

In create_longjmp_master_breakpoint (which attempts to install a master
longjmp breakpoint) a preference scheme is present, which installs a
probe breakpoint if a libc:longjmp probe is present, and otherwise falls back
to setting breakpoints at the names in the longjmp_names array.

But in fact, both the probe breakpoint and the longjmp_names breakpoints are
set.  The latter ones are set when processing libc.so.debug, and the former
one when processing libc.so.  In other words, this is the longjmp variant of
PR26881, which describes the same problem for master exception breakpoints.

This problem only triggers when the glibc debug info package is installed,
which is not due to the debug info itself in libc.so.debug, but due to the
minimal symbols (because create_longjmp_master_breakpoint uses minimal symbols
to translate the longjmp_names to addresses).

The problem doesn't trigger for -m64, because there tdep->jb_pc_offset is not
set.

Fix this similar to commit 1940319c0e (the fix for PR26881): only install
longjmp_names breakpoints in libc.so/libc.so.debug if installing the
libc:longjmp probe in libc.so failed.

Tested on x86_64-linux.

gdb/ChangeLog:

2021-01-28  Tom de Vries  <tdevries@suse.de>

	PR breakpoints/27205
	* breakpoint.c (create_longjmp_master_breakpoint_probe)
	(create_longjmp_master_breakpoint_names): New function, factored out
	of ...
	(create_longjmp_master_breakpoint): ... here.  Only try to install
	longjmp_names breakpoints in libc.so/libc.so.debug if installing probe
	breakpoint in libc.so failed.
2021-01-28 10:59:42 +01:00
Alan Modra
def97fb945 PR27259, SHF_LINK_ORDER self-link
This stops ld from endless looping on SHF_LINK_ORDER sh_link loops.

bfd/
	PR 27259
	* elflink.c (_bfd_elf_gc_mark_extra_sections): Use linker_mark to
	prevent endless looping of linked-to sections.
ld/
	PR 27259
	* ldelf.c (ldelf_before_place_orphans): Use linker_mark to
	prevent endless looping of linked-to sections.
2021-01-28 18:53:30 +10:30
Tom de Vries
2f985dd1ac [gdb/testsuite] Fix gdb.ada/out_of_line_in_inlined.exp with -m32 and gcc-10
When running test-case gdb.ada/out_of_line_in_inlined.exp with target board
unix/-m32 on a system with gcc-10 default compiler, we run into:
...
(gdb) break foo_o224_021.child1.child2^M
Breakpoint 1 at 0x804ba59: foo_o224_021.child1.child2. (3 locations)^M
(gdb) FAIL: gdb.ada/out_of_line_in_inlined.exp: scenario=all: \
  break foo_o224_021.child1.child2
...

The test does not expect the "3 locations" part.

Fix this by using gdb_breakpoint instead of gdb_test.

Tested on x86_64-linux.

gdb/testsuite/ChangeLog:

2021-01-28  Tom de Vries  <tdevries@suse.de>

	* gdb.ada/out_of_line_in_inlined.exp: Use gdb_breakpoint.
2021-01-28 08:14:58 +01:00
Tom de Vries
22efa3d307 [gdb/testsuite] Fix ERROR in gdb.dwarf2/dw2-out-of-range-end-of-seq.exp
When running test-case gdb.dwarf2/dw2-out-of-range-end-of-seq.exp on a
system with debug packages installed, I run into:
...
(gdb) maint info line-table^M
  ... <lots of output> ...
ERROR: internal buffer is full.
UNRESOLVED: gdb.dwarf2/dw2-out-of-range-end-of-seq.exp: \
  END with address 1 eliminated
...

Fix this by limiting the output of the command using a regexp.

I also noticed that when making the regexp match nothing, meaning
the command has no output, the test didn't FAIL.  Fixed this by adding a
PASS pattern.

I also noticed that the FAIL pattern didn't work with -m32, fixed that as
well.

Tested on x86_64-linux.

gdb/testsuite/ChangeLog:

2021-01-28  Tom de Vries  <tdevries@suse.de>

	* gdb.dwarf2/dw2-out-of-range-end-of-seq.exp: Add regexp to
	"maint info line-table".  Make PASS pattern more specific.  Make
	FAIL pattern work for -m32.
2021-01-28 08:14:58 +01:00
GDB Administrator
07b8b9e7c5 Automatic date update in version.in 2021-01-28 00:00:06 +00:00
Lancelot SIX
59b59f08f6 Avoid use after free with logging and debug redirect.
This patch addresses PR gdb/27133. Before it, the following succession
of commands would cause gdb to crash:

	set logging redirect on
	set logging debugredirect on
	set logging on

The problem eventually comes down to a use after free. The function
cli_interp_base::set_logging is called with a unique_ptr argument that
holds a pointer to the redirection file. In the problematic use case,
no-one ever took ownership of that pointer (as far as unique_ptr is
concerned), so the call to its dtor at the end of the function causes
the file object to be deleted. Any later use of the pointer to the
redirection file is therefore an error.

This patch ensures that the unique_ptr is released  when required (so it
does not assume ownership anymore). The internal logic of
cli_interp_base::set_logging takes care of freeing the ui_file when it
is not necessary anymore using the saved_output.file_to_delete field.

gdb/ChangeLog:

	PR gdb/27133
	* cli/cli-interp.c (cli_interp_base::set_logging): Ensure the
	unique_ptr is released when the wrapped pointer is kept for later
	use.

gdb/testsuite/ChangeLog:

	PR gdb/27133
	* gdb.base/ui-redirect.exp: Add test case that ensures that
	redirecting both logging and debug does not cause gdb to crash.
2021-01-27 22:09:52 +00:00
Matthew Malcomson
807f647cac GDB: aarch64: Add ability to displaced step over a BR/BLR instruction
Enable displaced stepping over a BR/BLR instruction

Displaced stepping over an instruction executes a instruction in a
scratch area and then manually fixes up the PC address to leave
execution where it would have been if the instruction were in its
original location.

The BR instruction does not need modification in order to run correctly
at a different address, but the displaced step fixup method should not
manually adjust the PC since the BR instruction sets that value already.

The BLR instruction should also avoid such a fixup, but must also have
the link register modified to point to just after the original code
location rather than back to the scratch location.

This patch adds the above functionality.
We add this functionality by modifying aarch64_displaced_step_others
rather than by adding a new visitor method to aarch64_insn_visitor.
We choose this since it seems that visitor approach is designed
specifically for PC relative instructions (which must always be modified
when executed in a different location).

It seems that the BR and BLR instructions are more like the RET
instruction which is already handled specially in
aarch64_displaced_step_others.

This also means the gdbserver code to relocate an instruction when
creating a fast tracepoint does not need to be modified, since nothing
special is needed for the BR and BLR instructions there.

Regression tests showed nothing untoward on native aarch64 (though it
took a while for me to get the testcase to account for PIE).

------#####
Original observed (mis)behaviour before was that displaced stepping over
a BR or BLR instruction would not execute the function they called.
Most easily seen by putting a breakpoint with a condition on such an
instruction and a print statement in the functions they called.
When run with the breakpoint enabled the function is not called and
"numargs called" is not printed.
When run with the breakpoint disabled the function is called and the
message is printed.

--- GDB Session
~ [15:57:14] % gdb ../using-blr
Reading symbols from ../using-blr...done.
(gdb) disassemble blr_call_value
Dump of assembler code for function blr_call_value:
...
   0x0000000000400560 <+28>:    blr     x2
...
   0x00000000004005b8 <+116>:   ret
End of assembler dump.
(gdb) break *0x0000000000400560
Breakpoint 1 at 0x400560: file ../using-blr.c, line 22.
(gdb) condition 1 10 == 0
(gdb) run
Starting program: /home/matmal01/using-blr
[Inferior 1 (process 33279) exited with code 012]
(gdb) disable 1
(gdb) run
Starting program: /home/matmal01/using-blr
numargs called
[Inferior 1 (process 33289) exited with code 012]
(gdb)

Test program:
---- using-blr ----
\#include <stdio.h>
typedef int (foo) (int, int);
typedef void (bar) (int, int);
struct sls_testclass {
    foo *x;
    bar *y;
    int left;
    int right;
};

__attribute__ ((noinline))
int blr_call_value (struct sls_testclass x)
{
  int retval = x.x(x.left, x.right);
  if (retval % 10)
    return 100;
  return 9;
}

__attribute__ ((noinline))
int blr_call (struct sls_testclass x)
{
  x.y(x.left, x.right);
  if (x.left % 10)
    return 100;
  return 9;
}

int
numargs (__attribute__ ((unused)) int left, __attribute__ ((unused)) int right)
{
        printf("numargs called\n");
        return 10;
}

void
altfunc (__attribute__ ((unused)) int left, __attribute__ ((unused)) int right)
{
        printf("altfunc called\n");
}

int main(int argc, char **argv)
{
  struct sls_testclass x = { .x = numargs, .y = altfunc, .left = 1, .right = 2 };
  if (argc > 2)
  {
        blr_call (x);
  }
  else
        blr_call_value (x);
  return 10;
}
2021-01-27 17:12:25 +00:00
Tom Tromey
bb3c2d4d94 Remove extra space after @pxref in gdb.texinfo
Internally at AdaCore, documentation is still built with Texinfo 4.13.
This version gave an error when building gdb.texinfo:

../../../binutils-gdb/gdb/doc/gdb.texinfo:27672: @pxref expected braces.
../../../binutils-gdb/gdb/doc/gdb.texinfo:27672: ` {dotdebug_gdb_scripts section,,The @cod...' is too long for expansion; not expanded.

... followed by many more spurious errors that were caused by this
one.

This patch fix the problem by removing the extra space.

I don't know whether it's advisable to try to support this ancient
version of Texinfo (released in 2008 apparently); but in this
particular case the fix is trivial, so I'm checking it in.

gdb/doc/ChangeLog
2021-01-27  Tom Tromey  <tromey@adacore.com>

	* gdb.texinfo (Auto-loading extensions): Remove extraneous space.
2021-01-27 06:56:27 -07:00
Nick Alcock
f04ce15e83 ld: depend on libctf
Since ld may depend on libctf (if present), and libctf may be relinked
by the installation process, libctf must be installed before ld is,
or the relink may fail if it calls on symbols or symbol versions that do
not exist in any libctf already present on the system.  (If none is
present, the copy in the build tree will be automatically used, but
if one *is* present, it may take precedence and break things.)

(This is a maybe- dependency, so it will work even if libctf is
disabled.)

ChangeLog
2021-01-26  Nick Alcock  <nick.alcock@oracle.com>

	PR 27250
	* Makefile.def: Add install-libctf dependency to install-ld.
	* Makefile.in: Regenerated.
2021-01-27 11:04:12 +00:00
Nick Clifton
67965ba289 Simplify the code at the end of objcopy's main() function.
* objcopy.c (copy_main): Remove conditional control of the calls
 to free, simplifying the code and making it easier to detect
 typos.
2021-01-27 10:39:22 +00:00
H.J. Lu
2eda57ef61 ld: Fix a typo in testsuite/ld-x86-64/bnd-plt-1.d
Pass -mx86-used-note=no to assembler.

	* testsuite/ld-x86-64/bnd-plt-1.d: Fix a typo.
2021-01-26 16:18:41 -08:00
GDB Administrator
c22788d614 Automatic date update in version.in 2021-01-27 00:00:07 +00:00
H.J. Lu
1f583bc2fc nios2: Don't disable relaxation with --gdwarf-N
GCC 11 passes --gdwarf-5 to assembler to enable DWARF5 debug info.  Don't
disable relaxation when --gdwarf-N is specified.  The assembler generated
debug information will treat the sequence of the relaxed instructions as
a single instruction.

	PR gas/27243
	* config/tc-nios2.c (md_begin): Don't disable relaxation with
	--gdwarf-N.
	* testsuite/gas/nios2/relax.d: New file.
	* testsuite/gas/nios2/relax.s: Likewise.
2021-01-26 08:18:52 -08:00
Tom Tromey
4ef367bffd Use debug_prefixed_printf_cond in windows-nat.c
This changes windows-nat.c and nat/windows-nat.c to use the new
debug_prefixed_printf_cond facility.  I tried this out on a Windows
build and I think it makes the output look a little nicer.

2021-01-26  Tom Tromey  <tromey@adacore.com>

	* windows-nat.c (DEBUG_EXEC, DEBUG_EVENTS, DEBUG_MEM)
	(DEBUG_EXCEPT): Use debug_prefixed_printf_cond.
	(windows_init_thread_list, windows_nat::handle_load_dll)
	(windows_nat::handle_unload_dll, windows_nat_target::resume)
	(windows_nat_target::resume)
	(windows_nat_target::get_windows_debug_event)
	(windows_nat_target::interrupt, windows_xfer_memory)
	(windows_nat_target::close): Update.
	* nat/windows-nat.c (DEBUG_EVENTS): Use
	debug_prefixed_printf_cond.
	(matching_pending_stop, fetch_pending_stop)
	(continue_last_debug_event): Update.
2021-01-26 08:49:38 -07:00
Mihails Strasuns
4cb1265b3f bfd: add elfcore_write_file_note
Adds a trivial wrapper over elfcore_write_note, primarily to be more
consistent with other ELF note helper functions and highlight NT_FILE as
one of notes handled by gdb.

bfd/ChangeLog:
2020-12-17  Mihails Strasuns  <mihails.strasuns@intel.com>

	* bfd-elf.h (elfcore_write_file_note): New function.
	* elf.c (elfcore_write_file_note): New function.

gdb/ChangeLog:
2020-12-17  Mihails Strasuns  <mihails.strasuns@intel.com>

	* linux-tdep.c (linux_make_mappings_corefile_notes): Start using
	elfcore_write_file_note.
2021-01-26 13:22:35 +01:00
Alan Modra
c3ffb8f340 Segmentation fault i386-gen
A case of inst->next being uninitialised.

	* i386-gen.c (parse_template): Ensure entire template_instance
	is initialised.
2021-01-26 20:54:43 +10:30
Alan Modra
1c9c9b9b55 PR27226, ld.bfd contains huge .rodata section
This makes it possible to build ld without any compiled-in scripts,
by setting COMPILE_IN=no in the environment.  pe, beos and pdp11
targets didn't support scripts from the file system, with pdp11
nastily editing the ld/ldscripts file so that the built-in script
didn't match.

	PR 27226
	* emulparams/alphavms.sh: Don't set COMPILE_IN.
	* emulparams/elf64_ia64_vms.sh: Likewise.
	* emulparams/elf64mmix.sh: Likewise.
	* emulparams/elf_iamcu.sh: Likewise.
	* emulparams/elf_k1om.sh: Likewise.
	* emulparams/elf_l1om.sh: Likewise.
	* emulparams/mmo.sh: Likewise.
	* emulparams/pdp11.sh: Set DATA_SEG_ADDR.
	* scripttempl/pdp11.sc: Use it.
	* emultempl/pdp11.em: Don't edit .xn script for separate_code,
	instead use .xe script.  Support scripts from file system.
	* emultempl/beos.em: Support scripts from file system.
	* emultempl/pe.em: Likewise.
	* emultempl/pep.em: Likewise.
	* testsuite/ld-bootstrap/bootstrap.exp: Make tmpdir/ldscripts link.
2021-01-26 20:54:43 +10:30
Alan Modra
a45ef9a30b gas testsuite tidy
This replaces skip and notarget in a number of gas tests with xfail,
the idea being that running tests might expose segmentation faults or
other serious errors even when we don't expect a test to pass.  Doing
so showed a number of cases where tests now pass, which is another
reason to avoid profligate use of notarget and skip.

	* testsuite/gas/all/local-label-overflow.d: Use xfail rather than
	notarget all except hppa.  Comment.
	* testsuite/gas/all/sleb128-2.d: Use xfail rather than notarget.
	* testsuite/gas/all/sleb128-4.d: Likewise.  Don't skip msp430.
	* testsuite/gas/all/sleb128-5.d: Use xfail rather than notarget.
	* testsuite/gas/all/sleb128-7.d: Likewise.
	* testsuite/gas/all/sleb128-9.d: Likewise.
	* testsuite/gas/elf/bignums.d: Likewise.
	* testsuite/gas/elf/group0c.d: Likewise.
	* testsuite/gas/elf/group1a.d: Likewise.
	* testsuite/gas/elf/section-symbol-redef.d: Likewise.
	* testsuite/gas/elf/section15.d: Likewise.
	* testsuite/gas/elf/section4.d: Likewise.
	* testsuite/gas/elf/section7.d: Likewise.
	* testsuite/gas/macros/irp.d: Likewise.
	* testsuite/gas/macros/repeat.d: Likewise.
	* testsuite/gas/macros/rept.d: Likewise.
	* testsuite/gas/macros/test2.d: Likewise.
	* testsuite/gas/macros/vararg.d: Likewise.
	* testsuite/gas/all/string.d: Use xfail rather than skip.
	* testsuite/gas/elf/missing-build-notes.d: Likewise.
	* testsuite/gas/elf/section0.d: Likewise.
	* testsuite/gas/elf/section1.d: Likewise.
	* testsuite/gas/elf/section10.d: Likewise.
	* testsuite/gas/elf/section11.d: Likewise.
	* testsuite/gas/elf/section6.d: Likewise.
	* testsuite/gas/elf/symtab.d: Use xfail rather than skip, adjust hppa.
	* testsuite/gas/elf/symtab.s: Don't start directives in first column.
	* testsuite/gas/macros/test3.d: Don't notarget nds32.
2021-01-26 20:54:43 +10:30
Alan Modra
9886ff0319 gas byte test
skip *-*-* is a little silly, delete the test.

	* testsuite/gas/all/byte.d,
	* testsuite/gas/all/byte.l,
	* testsuite/gas/all/byte.s: Delete.
	* testsuite/gas/all/gas.exp: Don't run byte test.
2021-01-26 20:54:43 +10:30
Alan Modra
4287950e54 pr27228 testcase
This failed on ft32, hppa, and mips-irix targets.  In the case of ft32
the problem was iterating over an array in reverse and not using the
proper condition, so BFD_RELOC_NONE was not recognised.

bfd/
	* elf32-ft32.c (ft32_reloc_type_lookup): Don't miss ft32_reloc_map[0].
gas/
	PR 27282
	* testsuite/gas/all/none.d: Replace skip with xfail, don't xfail ft32.
	* testsuite/gas/elf/pr27228.d: xfail hppa and allow OBJECT match.
2021-01-26 20:54:43 +10:30
Shahab Vahedi
d0cc52bdf2 gdb: Add default reggroups for ARC
There is no reggroups set in ARC.  If a "maintenance print reggroups"
command is issued, the default register set is dumped (which is fine).

However, if a new group is added via an XML file, then that will
become the _only_ group.  This behavior causes gdb.xml/tdesc-regs.exp
to fail.

Fixes gdb.xml/tdesc-regs.exp on ARC.

gdb/ChangeLog:

	* arc-tdep.c (arc_add_reggroups): New function.
	(arc_gdbarch_init): Call arc_add_reggroups.
2021-01-26 11:18:24 +01:00
Shahab Vahedi
ac3571d941 Fix the date for the last entry in gdb/ChangeLog
The previous patch [1] sets the date incorrectly in the ChangeLog.
Sorry for the inconvenience.

[1]
https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=d56834cbfb7c1
2021-01-26 11:04:30 +01:00
Frederic Cambus
e37709f090 Fix thinko in objcopy's memory freeing code.
* objcopy.c (copy_main): Fix a double free happening when both
	--localize-symbols and --globalize-symbols options are invoked
	together.
2021-01-26 09:55:34 +00:00
Anton Kolesov
d56834cbfb arc: Log "pc" value in "arc_skip_prologue"
Log the "pc" address upon entering "arc_skip_prologue".

gdb/ChangeLog:

	* arc-tdep.c (arc_skip_prologue): Log "pc" address.
2021-01-26 10:53:14 +01:00
Tom de Vries
4ca40594f9 [gdb/testsuite] Fix gdb.threads/killed-outside.exp with -m32
When running test-case gdb.threads/killed-outside.exp with target board
unix/-m32, we run into:
...
(gdb) PASS: gdb.threads/killed-outside.exp: get pid of inferior
Executing on target: kill -9 10969    (timeout = 300)
spawn -ignore SIGHUP kill -9 10969^M
continue^M
Continuing.^M
[Thread 0xf7cb4b40 (LWP 10973) exited]^M
^M
Program terminated with signal SIGKILL, Killed.^M
The program no longer exists.^M
(gdb) FAIL: gdb.threads/killed-outside.exp: prompt after first continue
...

Fix this by allowing this output.

Tested on x86_64-linux.

gdb/testsuite/ChangeLog:

2021-01-26  Tom de Vries  <tdevries@suse.de>

	* gdb.threads/killed-outside.exp: Allow regular output.
2021-01-26 10:00:39 +01:00
Tom de Vries
d0021af39c [gdb/testsuite] Fix gdb.opt/solib-intra-step.exp with -m32
When running test-case gdb.opt/solib-intra-step.exp with target board
unix/-m32, we run into:
...
(gdb) step^M
__x86.get_pc_thunk.bx () at ../sysdeps/i386/crti.S:66^M
66      ../sysdeps/i386/crti.S: No such file or directory.^M
(gdb) FAIL: gdb.opt/solib-intra-step.exp: first-hit (optimized)
...

The thunk is a helper function for PIC, and given that we have line info for
it, we step into.

Fix this by allowing the step into the thunk, and stepping out of it.

Tested on x86_64-linux.

gdb/testsuite/ChangeLog:

2021-01-26  Tom de Vries  <tdevries@suse.de>

	* gdb.opt/solib-intra-step.exp: Handle stepping into thunk.
2021-01-26 10:00:39 +01:00
GDB Administrator
01a01e0ab3 Automatic date update in version.in 2021-01-26 00:00:07 +00:00
Tom de Vries
9f6c202e57 [gdb/symtab] Handle DW_AT_ranges with DW_FORM_sec_off in partial DIE
While looking into a failure in gdb.go/package.exp with gcc-11, I noticed that
gdb shows some complaints when loading the executable (also with gcc-10, where
the test-case passes):
...
$ gdb -batch -iex "set complaints 100" package.10 -ex start
During symbol reading: Attribute value is not a constant (DW_FORM_sec_offset)
Temporary breakpoint 1 at 0x402ae6: file gdb.go/package1.go, line 8.
During symbol reading: Attribute value is not a constant (DW_FORM_sec_offset)
During symbol reading: Invalid .debug_rnglists data (no base address)
...

Fix this by using as_unsigned () to read DW_AT_ranges in the partial DIE
reader, similar to how that is done in dwarf2_get_pc_bounds.

Tested on x86_64-linux.

gdb/ChangeLog:

2021-01-25  Bernd Edlinger  <bernd.edlinger@hotmail.de>
	    Simon Marchi  <simon.marchi@polymtl.ca>
	    Tom de Vries  <tdevries@suse.de>

	* dwarf2/read.c (partial_die_info::read): Use as_unsigned () for
	DW_AT_ranges.

gdb/testsuite/ChangeLog:

2021-01-25  Tom de Vries  <tdevries@suse.de>

	* gdb.dwarf2/dw2-ranges-psym.exp (gdb_load_no_complaints): New proc.
	* lib/gdb.exp: Use gdb_load_no_complaints.
2021-01-25 16:32:31 +01:00
Marco Barisione
f3bdc2dbb9 gdb/docs: add parentheses in Python examples using print
This makes the examples work both in Python 2 and 3.

gdb/doc/ChangeLog:

	* python.texi: Add parentheses to print statements/functions.

Change-Id: I8571f2ee005acd96c7bb43f9882d19b00b2aa3db
2021-01-25 10:29:57 -05:00
Tom Tromey
a625a8c9eb Fix fixed-point regression with recent GCC
A recent version of GCC changed how fixed-point types are described.
For example, a denominator in one test case now looks like:

    GNU_denominator      (exprloc)
     [ 0] implicit_value: 16 byte block: 00 00 b8 9d 0d 69 55 a0 01 00 00 00 00 00 00 00

... the difference being that this now uses exprloc and emits a
DW_OP_implicit_value for the 16-byte block.  (DWARF 5 still uses
DW_FORM_data16.)

This change was made here:

    https://gcc.gnu.org/pipermail/gcc-patches/2020-December/560897.html

This patch updates gdb to handle this situation.

Note that, before GCC 11, this test would not give the same answer.
Earlier versions of GCC fell back to GNAT encodings for this case.

gdb/ChangeLog
2021-01-25  Tom Tromey  <tromey@adacore.com>

	* dwarf2/read.c (get_mpz): New function.
	(get_dwarf2_rational_constant): Use it.

gdb/testsuite/ChangeLog
2021-01-25  Tom Tromey  <tromey@adacore.com>

	* gdb.ada/fixed_points.exp: Add regression test.
	* gdb.ada/fixed_points/fixed_points.adb (FP5_Var): New variable.
	* gdb.ada/fixed_points/pck.adb (Delta5, FP5_Type): New.
2021-01-25 08:13:51 -07:00
Tom Tromey
191849105b Specially handle array contexts in Ada expression resolution
A user noticed that the Ada expression code in gdb did not
automatically disambiguate an enumerator in an array context.  That
is, an expression like "print array(enumerator)" is not ambiguous,
even if "enumerator" is declared in multiple enumerations, because the
correct one can be found by examining the array's index type.

This patch changes the Ada expression resolution code to handle this
case.

gdb/ChangeLog
2021-01-25  Tom Tromey  <tromey@adacore.com>

	* ada-lang.c (resolve_subexp): Handle array context.

gdb/testsuite/ChangeLog
2021-01-25  Tom Tromey  <tromey@adacore.com>

	* gdb.ada/local-enum.exp: Add enumerator resolution test.
2021-01-25 07:38:21 -07:00
Tom Tromey
acd6125f01 Add test case for symbol menu for local enumerators
Ada will normally present a menu to the user to allow manual
disambiguation of symbols.  The AdaCore internal GDB had a bug that
prevented this from happening.  Although this bug is not in the FSF
GDB, it seemed worthwhile to write a test case to ensure this.

gdb/testsuite/ChangeLog
2021-01-25  Tom Tromey  <tromey@adacore.com>

	* gdb.ada/local-enum.exp: New file.
	* gdb.ada/local-enum/local.adb: New file.
2021-01-25 07:38:21 -07:00
Fangrui Song
9e42b97628 Add some more DWARF-5 sections 2021-01-25 11:35:57 +00:00
Andrew Burgess
04de9f3e31 gdb/doc: move @menu blocks to the end of their enclosing @node
The @menus should be at the end of a @node.  We mostly get this right,
but there's a few places where we don't.  This commit fixes the 5
places we get this wrong.

I manually checked the info page and read each of the offending nodes
after this change and I believe they all still make sense with the
menu moved.

gdb/doc/ChangeLog:

	* gdb.texinfo (Specify Location): Move menu to the end of the
	node.
	(Auto-loading): Likewise.
	(Extending GDB): Likewise.
	(TUI): Likewise.
	(Operating System Information): Likewise.
2021-01-25 11:24:29 +00:00
Nick Clifton
b8df69003d Update linker scripts with the names of new DWARF-5 debug sections.
* scripttempl/DWARF.sc: Add .debug_loclists, .debug_rnglists,
	.debug_line_str and .debug_str_offsets.  Move .debug_macro and
	.debug_addr into DWARF-5 section.
2021-01-25 11:20:20 +00:00
GDB Administrator
123b18bf62 Automatic date update in version.in 2021-01-25 00:00:06 +00:00
H.J. Lu
940d0202fd DWARF-5: Ignore empty range in DWARF-5 line number tables
The DWARF5 spec does indeed explicitly say: "A bounded range entry whose
beginning and ending address offsets are equal (including zero) indicates
an empty range and may be ignored."

Since arange_add already ignores empty ranges, remove the whole check
which is equivalent to the check plus explicit continue.

	PR binutils/27231
	* dwarf2.c (read_rnglists): Ignore empty range when parsing line
	number tables.
2021-01-24 07:00:49 -08:00
H.J. Lu
eea133e655 gas: Add a testcase for PR gas/27228
PR gas/27228
	* testsuite/gas/elf/elf.exp: Run pr27228.
	* testsuite/gas/elf/pr27228.d: New file.
	* testsuite/gas/elf/pr27228.s: Likewise.
2021-01-24 04:14:30 -08:00
Nick Clifton
9b351c9bc9 Minor updates to the 'how to make a release' document 2021-01-24 11:53:57 +00:00
Alan Modra
68fcee4fa7 PR27228, .reloc wrong symbol emitted for undefined local symbol
Local symbols are of course supposed to be defined by their object
file, but in other cases a local symbol is promoted to global by gas
if undefined and referenced.  This patch stops gas wrongly replacing a
local undefined symbol with the undefined section symbol, resulting in
a .reloc undefined local symbol being emitted as global.

	PR 27228
	* write.c (resolve_reloc_expr_symbols): Don't assume local symbol
	is defined.
2021-01-24 16:16:45 +10:30
Tom Tromey
b10bae1875 Avoid crash when "compile" expression uses cooked register
If the "compile" command is used with an expression that happens to
require a cooked register, then GDB can crash.  This patch does not
fix the bug, but at least turns the crash into an error instead.

2021-01-23  Tom Tromey  <tom@tromey.com>

	PR compile/25575
	* compile/compile-loc2c.c (note_register): New function.
	(pushf_register_address, pushf_register): Use it.
2021-01-23 20:33:25 -07:00
Tom Tromey
3637a558a5 Use std::vector for "registers_used" in compile feature
This changes the GDB compile code to use std::vector<bool> when
computing which registers are used.  This is a bit more idiomatic, but
the main benefit is that it also adds some checking when the libstd++
debug mode is enabled.

2021-01-23  Tom Tromey  <tom@tromey.com>

	* symtab.h (struct symbol_computed_ops) <generate_c_location>:
	Change type of "registers_used".
	* dwarf2/loc.h (dwarf2_compile_property_to_c): Update.
	* dwarf2/loc.c (dwarf2_compile_property_to_c)
	(locexpr_generate_c_location, loclist_generate_c_location): Change
	type of "registers_used".
	* compile/compile.h (compile_dwarf_expr_to_c)
	(compile_dwarf_bounds_to_c): Update.
	* compile/compile-loc2c.c (pushf_register_address)
	(pushf_register, do_compile_dwarf_expr_to_c)
	(compile_dwarf_expr_to_c, compile_dwarf_bounds_to_c): Change type
	of "registers_used".
	* compile/compile-c.h (generate_c_for_variable_locations):
	Update.
	* compile/compile-c-symbols.c (generate_vla_size)
	(generate_c_for_for_one_variable): Change type of
	"registers_used".
	(generate_c_for_variable_locations): Return std::vector.
	* compile/compile-c-support.c (generate_register_struct): Change
	type of "registers_used".
	(compute): Update.
2021-01-23 20:33:25 -07:00
H.J. Lu
18454c151f DWARF-5: Fix parsing DWARF-5 line number tables
Advance rngs_ptr when parsing DW_RLE_offset_pair, which was missing in

commit c3757b583d
Author: Mark Wielaard <mark@klomp.org>
Date:   Tue Aug 25 15:33:00 2020 +0100

    Fix the linker's handling of DWARF-5 line number tables.

	PR binutils/27231
	* dwarf2.c (read_rnglists): Advance rngs_ptr after
	_bfd_safe_read_leb128 when parsing DW_RLE_offset_pair.
2021-01-23 18:17:48 -08:00
Tom Tromey
9f7f6cb8d2 Remove call to reset from compile_to_object
compile_to_object declares 'error_message' and then immediately calls
reset on it.  It seemed better to change it to use initialization
instead; and then I noticed that set_arguments could return a
unique_xmalloc_ptr<char> itself.

2021-01-23  Tom Tromey  <tom@tromey.com>

	* compile/compile-internal.h (class compile_instance)
	<set_arguments>: Change return type.
	* compile/compile.c (compile_to_object): Remove call to reset.
	(compile_instance::set_arguments): Change return type.
2021-01-23 17:48:48 -07:00
GDB Administrator
c99d72de18 Automatic date update in version.in 2021-01-24 00:00:05 +00:00
Simon Marchi
dd5ca05f47 gdb: fix regression in copy_type_recursive
Commit 5b7d941b90 ("gdb: add owner-related methods to struct type")
introduced a regression when running gdb.base/jit-reader-simple.exp and
others.  A NULL pointer dereference happens here:

    #3  0x0000557b7e9e8650 in gdbarch_obstack (arch=0x0) at /home/simark/src/binutils-gdb/gdb/gdbarch.c:484
    #4  0x0000557b7ea5b138 in copy_type_recursive (objfile=0x614000006640, type=0x62100018da80, copied_types=0x62100018e280) at /home/simark/src/binutils-gdb/gdb/gdbtypes.c:5537
    #5  0x0000557b7ea5dcbb in copy_type_recursive (objfile=0x614000006640, type=0x62100018e200, copied_types=0x62100018e280) at /home/simark/src/binutils-gdb/gdb/gdbtypes.c:5598
    #6  0x0000557b802cef51 in preserve_one_value (value=0x6110000b3640, objfile=0x614000006640, copied_types=0x62100018e280) at /home/simark/src/binutils-gdb/gdb/value.c:2518
    #7  0x0000557b802cf787 in preserve_values (objfile=0x614000006640) at /home/simark/src/binutils-gdb/gdb/value.c:2562
    #8  0x0000557b7fbaf19b in reread_symbols () at /home/simark/src/binutils-gdb/gdb/symfile.c:2489
    #9  0x0000557b7ec65d1d in run_command_1 (args=0x0, from_tty=1, run_how=RUN_NORMAL) at /home/simark/src/binutils-gdb/gdb/infcmd.c:439
    #10 0x0000557b7ec67a97 in run_command (args=0x0, from_tty=1) at /home/simark/src/binutils-gdb/gdb/infcmd.c:546

This is inside a TYPE_ALLOC macro.  The fact that gdbarch_obstack is
called means that the type is flagged as being arch-owned, but arch=0x0
means that type::arch returned NULL, probably meaning that the m_owner
field contains NULL.

If we look at the code before the problematic patch, in the
copy_type_recursive function, we see:

    if (! TYPE_OBJFILE_OWNED (type))
      return type;

    ...

    TYPE_OBJFILE_OWNED (new_type) = 0;
    TYPE_OWNER (new_type).gdbarch = get_type_arch (type);

The last two lines were replaced with:

    new_type->set_owner (type->arch ());

get_type_arch and type->arch isn't the same thing: get_type_arch gets
the type's arch owner if it is arch-owned, and gets the objfile's arch
if the type is objfile owned.  So it always returns non-NULL.
type->arch returns the type's arch if the type is arch-owned, else NULL.
So since the original type is objfile owned, it effectively made the new
type arch-owned (that is good) but set the owner to NULL (that is bad).

Fix this by using get_type_arch again there.

I spotted one other similar change in lookup_array_range_type, in the
original patch.  But that one appears to be correct, as it is executed
only if the type is arch-owned.

Add some asserts in type::set_owner to ensure we never set a NULL owner.
That would have helped catch the issue a little bit earlier, so it could
help in the future.

gdb/ChangeLog:

	* gdbtypes.c (copy_type_recursive): Use get_type_arch.
	* gdbtypes.h (struct type) <set_owner>: Add asserts.

Change-Id: I5d8bc7bfc83b3abc579be0b5aadeae4241179a00
2021-01-23 17:36:55 -05:00
Lancelot SIX
d3ee35dbf7 Improve gdb_tilde_expand logic.
Before this patch, gdb_tilde_expand would use glob(3) in order to expand
tilde at the begining of a path. This implementation has limitation when
expanding a tilde leading path to a non existing file since glob fails to
expand.

This patch proposes to use glob only to expand the tilde component of the
path and leaves the rest of the path unchanged.

This patch is a followup to the following discution:
https://sourceware.org/pipermail/gdb-patches/2021-January/174776.html

Before the patch:

	gdb_tilde_expand("~") -> "/home/lsix"
	gdb_tilde_expand("~/a/c/b") -> error() is called

After the patch:

	gdb_tilde_expand("~") -> "/home/lsix"
	gdb_tilde_expand("~/a/c/b") -> "/home/lsix/a/c/b"

Tested on x84_64 linux.

gdb/ChangeLog:

	* Makefile.in (SELFTESTS_SRCS): Add
	unittests/gdb_tilde_expand-selftests.c.
	* unittests/gdb_tilde_expand-selftests.c: New file.

gdbsupport/ChangeLog:

	* gdb_tilde_expand.cc (gdb_tilde_expand): Improve
	implementation.
	(gdb_tilde_expand_up): Delegate logic to gdb_tilde_expand.
	* gdb_tilde_expand.h (gdb_tilde_expand): Update description.
2021-01-23 17:17:38 +00:00
Tom Tromey
ef45cb65a7 Use readline's variant of Windows patch
A while back, Eli sent a patch to readline that was incorporated by
upstream readline in a slightly different form.  To cut down on
divergences between GDB and upstream readline, I am checking in this
patch to use the readline code.

readline/readline/ChangeLog.gdb
2021-01-23  Tom Tromey  <tom@tromey.com>

	* input.c [_WIN32]: Use code from upstream readline.
2021-01-23 09:24:20 -07:00