Hongtao Liu [Tue, 3 Mar 2020 14:21:37 +0000 (06:21 -0800)]
x86: Improve -malign-branch
According to intel SDM manual, not all compare flag-modifying instructions
are marcro-fusible with subsequent jcc instructions. For those non-fusible
instructions, -malign-branch doesn't need to align them, only jcc itself
needs to be aligned.
Here are 2 restrictions which separate macro-fusible instruction from not
Restriction 1:
If TEST/AND/CMP/ADD/SUB/INC/DEC is one of the following format:
cmp m, imm
add m, imm
sub m, imm
test m, imm
and m, imm
inc m
dec m
it is unfusible with any jcc instruction.
Restriction 2:
/* Table 3-2. Macro-Fusible Instructions in Haswell Microarchitecture
Note it also works for Skylake and Cascadelake.
---------------------------------------------------------------------
| JCC | ADD/SUB/CMP | INC/DEC | TEST/AND |
| ------ | ----------- | ------- | -------- |
| Jo | N | N | Y |
| Jno | N | N | Y |
| Jc/Jb | Y | N | Y |
| Jae/Jnb | Y | N | Y |
| Je/Jz | Y | Y | Y |
| Jne/Jnz | Y | Y | Y |
| Jna/Jbe | Y | N | Y |
| Ja/Jnbe | Y | N | Y |
| Js | N | N | Y |
| Jns | N | N | Y |
| Jp/Jpe | N | N | Y |
| Jnp/Jpo | N | N | Y |
| Jl/Jnge | Y | Y | Y |
| Jge/Jnl | Y | Y | Y |
| Jle/Jng | Y | Y | Y |
| Jg/Jnle | Y | Y | Y |
Update maybe_fused_with_jcc_p to check if operands of CMP like instructions
can be fused with condition jump.
* gas/config/tc-i386.h (i386_tc_frag_data): Add member mf_type.
(TC_FRAG_INIT): Init mf_type.
* gas/config/tc-i386.c (enum mf_jcc_kind): New enum.
(enum mf_cmp_kind): Ditto.
(maybe_fused_with_jcc_p): Add argument mf_cmp_p to get
mf_type of corresponding instructons, exclude unfusible
instructions.
(add_fused_jcc_padding_frag_p): Likewise.
(add_branch_padding_frag_p): Likewise.
(output_insn): Record mf_type for corresponding instructions.
(i386_macro_fusible_p): New function.
(i386_next_fusible_jcc_frag): Rename from i386_next_jcc_frag,
add argument cmp_fragP to return next fusible jcc frag only.
(i386_classify_machine_dependant_frag): Seperate macro-fusible
instructions from condition jump.
* gas/testsuite/gas/i386/align-branch-9.s: New file.
* gas/testsuite/gas/i386/align-branch-9.d: Ditto.
* gas/testsuite/gas/i386/x86-64-align-branch-9.s: Ditto.
* gas/testsuite/gas/i386/x86-64-align-branch-9.d: Ditto.
* gas/testsuite/gas/i386/i386.exp: Run new tests.
Luis Machado [Tue, 25 Feb 2020 00:04:05 +0000 (21:04 -0300)]
Update GDB to use new AUXV entry types
I noticed GDB didn't know a particular AT tag (51) when doing some debugging.
Turns out we're missing a few entries compared to glibc's headers.
This patch adds them to GDB and fixes a failure in gdb.base/auxv.exp as
a result.
gdb/ChangeLog:
2020-03-03 Luis Machado <luis.machado@linaro.org>
* auxv.c (default_print_auxv_entry): Add new AUXV entries.
Luis Machado [Tue, 3 Mar 2020 13:13:53 +0000 (13:13 +0000)]
Add missing AT tags to the ELF common header.
* elf/common.h (AT_L1I_CACHESIZE, AT_L1I_CACHEGEOMETRY)
(AT_L1D_CACHESIZE, AT_L1D_CACHEGEOMETRY, AT_L2_CACHESIZE)
(AT_L2_CACHEGEOMETRY, AT_L3_CACHESIZE, AT_L3_CACHEGEOMETRY)
(AT_MINSIGSTKSZ): New defines, imported from glibc.
Sergey Belyashov [Tue, 3 Mar 2020 13:09:19 +0000 (13:09 +0000)]
Fix a potential illegal memory access in the Z80 assembler.
PR 25604
* config/tc-z80.c (contains_register): Prevent an illegal memory
access when checking an expression for a register name.
Nick Clifton [Tue, 3 Mar 2020 12:53:00 +0000 (12:53 +0000)]
Note that the --rpath-link command line option will search the contents of the SEARCH_DIR linker script directive, if one is provided.
PR 25588
* ld.texi (Options): Update the description of the --rpath-link
option.
Alan Modra [Tue, 3 Mar 2020 09:57:36 +0000 (20:27 +1030)]
bfd_check_format_matches preserving matches vs. cleanups
It didn't take long for oss-fuzz to find double frees due to a bug in
the cleanup logic. It's seen when reading in any alpha-vms object
file except when alpha_vms_vec is the default. But alpha_vms_vec is
of course the default when building for --target=alpha-dec-vms (and
naturally what I used to test the cleanup support since that is the
only target with a cleanup that does anything currently).
Anyway, the bug is that if bfd_check_format_matches is to preserve a
match the cleanup for that match can't be run. Quite obviously that
would destroy part of the match state.
* format.c (struct bfd_preserve): Add cleanup field.
(bfd_preserve_save): Add cleanup param and save.
(bfd_preserve_restore): Return cleanup.
(bfd_preserve_finish): Call the cleanup for the discarded match.
(bfd_check_format_matches): Pass cleanup to bfd_preserve_save,
and clear when preserving a match. Restore cleanup too when
restoring that match.
Tom de Vries [Tue, 3 Mar 2020 10:34:53 +0000 (11:34 +0100)]
[gdb/testsuite] Fix gdb.mi/gdb2549.exp with check-read1
When running gdb.mi/gdb2549.exp with check-read1, we get:
...
Running src/gdb/testsuite/gdb.mi/gdb2549.exp ...
FAIL: gdb.mi/gdb2549.exp: register values t (timeout)
...
The problem is that the command generates a lot of output, which is matched by
a single '.*':
...
mi_gdb_test "666-data-list-register-values t" \
"666\\^done,register-values=\\\[\{number=\"$decimal\",value=\"$binary\"\}.*\\\]" \
"register values t"
...
Fix this by splitting up the matching and calling exp_continue after each
number/value pair.
Tested on x86_64-linux with make targets check and check-read1.
gdb/testsuite/ChangeLog:
2020-03-03 Tom de Vries <tdevries@suse.de>
* gdb.mi/gdb2549.exp: Fix "register values t" check-read1 timeout.
Tom de Vries [Tue, 3 Mar 2020 09:50:07 +0000 (10:50 +0100)]
[gdb/testsuite] Fix tcl error in gdb.mi/list-thread-groups-available.exp
When running gdb.mi/list-thread-groups-available.exp, we get:
...
Running gdb.mi/list-thread-groups-available.exp ...
ERROR: tcl error sourcing gdb.mi/list-thread-groups-available.exp.
ERROR: Too many arguments to gdb_test_multiple
...
The problem is that the gdb_test_multiple call has as last argument a
$mi_gdb_prompt, which is no longer supported syntax since
590003dc0e
"[gdb/testsuite] Add -lbl option in gdb_test_multiple".
Fix this by using the new -prompt syntax.
Tested on x86_64-linux.
gdb/testsuite/ChangeLog:
2020-03-03 Tom de Vries <tdevries@suse.de>
* gdb.mi/list-thread-groups-available.exp: Use -prompt syntax for
gdb_test_multiple call.
Tom de Vries [Tue, 3 Mar 2020 09:33:49 +0000 (10:33 +0100)]
[gdb/testsuite] Fix mi-sym-info.exp with check-read1
When running gdb.mi/mi-sym-info.exp with check-read1, we run into:
...
FAIL: gdb.mi/mi-sym-info.exp: List all functions
FAIL: gdb.mi/mi-sym-info.exp: List all variables
...
The problem is that while the $mi_gdb_prompt is active, gdb_test_multiple is
used without -prompt "$mi_gdb_prompt$", so it defaults to matching $gdb_prompt.
Fix this by adding the missing gdb_test_multiple arguments.
Reg-tested on x86_64-linux with make targets check and check-read1.
gdb/testsuite/ChangeLog:
2020-03-03 Tom de Vries <tdevries@suse.de>
* gdb.mi/mi-sym-info.exp: Add missing -prompt "$mi_gdb_prompt$" to
gdb_test_multiple calls.
GDB Administrator [Tue, 3 Mar 2020 00:00:46 +0000 (00:00 +0000)]
Automatic date update in version.in
Alan Modra [Mon, 2 Mar 2020 22:14:26 +0000 (08:44 +1030)]
Tidy obj-coff.h
* config/obj-coff.h: Remove vestiges of coff-m68k and pe-mips
support.
Simon Marchi [Mon, 2 Mar 2020 20:47:04 +0000 (15:47 -0500)]
Small clean up of use_displaced_stepping
This function returns the result of a quite big condition. I think it
would be more readeable if it was broken up in smaller pieces and
commented. This is what this patch does.
I also introduced gdbarch_supports_displaced_stepping, since it shows
the intent better than checking for gdbarch_displaced_step_copy_insn_p.
I also used that new function in displaced_step_prepare_throw.
I also updated the comment on top of can_use_displaced_stepping, which
seemed a bit outdated with respect to non-stop. The comment likely
dates from before it was possible to have targets that always operate
non-stop under the hood, even when the user-visible mode is all-stop.
No functional changes intended.
gdb/ChangeLog:
* infrun.c (gdbarch_supports_displaced_stepping): New.
(use_displaced_stepping): Break up conditions in smaller pieces.
Use gdbarch_supports_displaced_stepping.
(displaced_step_prepare_throw): Use
gdbarch_supports_displaced_stepping.
Andrew Burgess [Wed, 22 Jan 2020 18:21:58 +0000 (18:21 +0000)]
gdb: Allow GDB to _not_ load a previous command history
This commit aims to give a cleaner mechanism by which the user can
prevent GDB from trying to load any previous command history.
Currently the user can change the path to the history file, either
using a command line flag, or by setting the GDBHISTFILE environment
variable, and if the path is set to a non-existent file, then
obviously GDB wont load any command history. However, this feels like
a bit of a bodge, I'd like to add an official mechanism by which we
can disable command history loading.
Why would we want to prevent command history loading? The specific
use case I have is GDB starting with a CWD that is a network mounted
directory, and there is no command history present. Still GDB will
access the network in order to check for the file. In my particular
use case I'm actually starting a large number of GDB instances in
parallel, all in the same network mounted directory, the large number
of network accesses looking for this file introduces a noticeable
delay at GDB startup.
The approach I'm proposing here is a slight adjustment to the current
rules for setting up the history filename. Currently, if a user does
this, they see an error:
(gdb) set history filename
Argument required (filename to set it to.).
However, if a user does this:
$ GDBHISTFILE= gdb --quiet
(gdb) set history save on
(gdb) q
warning: Could not rename -gdb18416~ to : No such file or directory
So, we already have a bug in this area. My plan is to allow the empty
filename to be accepted, and for this to mean, neither load, nor save
the command history.
This does mean that we now have two mechanisms to prevent saving the
command history:
(gdb) set history filename
or
(gdb) set history save off
But the only way to prevent loading the command history is to set the
filename to the empty string _before_ you get to a GDB prompt, either
using a command line option, or the environment variable.
I've updated some of the show commands, for example this session:
(gdb) set history filename
(gdb) show history filename
There is no filename currently set for recording the command history in.
(gdb) show history save
Saving of the history record on exit is off.
(gdb) set history save on
(gdb) show history save
Saving of the history is disabled due to the value of 'history filename'.
(gdb) set history filename /tmp/hist
(gdb) show history save
Saving of the history record on exit is on.
I've updated the manual, and added some tests.
gdb/ChangeLog:
* NEWS: Mention new behaviour of the history filename.
* top.c (write_history_p): Add comment.
(show_write_history_p): Add header comment, give a different
message when history writing is on, but the history filename is
empty.
(history_filename): Add comment.
(history_filename_empty): New function.
(show_history_filename): Add header comment, give a different
message when the filename is empty.
(init_history): Compare history_filename against nullptr, and only
read history if the filename is not empty.
(set_history_filename): Add header comment, and only make
non-empty filenames absolute.
(init_main): Make the filename argument to 'set history filename'
optional.
gdb/doc/ChangeLog:
* gdb.texinfo (Command History): Extend description for
GDBHISTFILE and GDBHISTSIZE, add detail about the filename for
'set history filename' being optional. Describe the effect of an
empty history filename on 'set history save on'.
gdb/testsuite/ChangeLog:
* gdb.base/default.exp: Remove test of 'set history filename'.
* gdb.base/gdbinit-history.exp: Add tests for setting the history
filename to the empty string.
* lib/gdb.exp (gdb_init): Unset environment variables GDBHISTFILE
and GDBHISTSIZE.
Change-Id: Ia586e4311182fac99113b60f11ef8a11fbd5450b
Christian Biesinger [Mon, 2 Mar 2020 17:28:14 +0000 (11:28 -0600)]
Fix arm-netbsd build error: convert from FPA to VFP
The floating point register interface has changed to this:
https://github.com/NetBSD/src/blob/trunk/sys/arch/arm/include/reg.h
It now uses VFP instead of FPA registers. This patch updates
arm-nbsd-nat.c accordingly.
Also implements read_description so that these registers are correctly
printed by "info registers" et al.
Tested by compiling & running on arm-netbsd on qemu.
gdb/ChangeLog:
2020-03-02 Christian Biesinger <cbiesinger@google.com>
* arm-nbsd-nat.c (arm_supply_fparegset): Rename to...
(arm_supply_vfpregset): ...this, and update to use VFP registers.
(fetch_fp_register): Update.
(fetch_fp_regs): Update.
(store_fp_register): Update.
(store_fp_regs): Update.
(arm_netbsd_nat_target::read_description): New function.
(fetch_elfcore_registers): Update.
Andrew Burgess [Thu, 30 Jan 2020 14:35:40 +0000 (14:35 +0000)]
gdb/remote: Restore support for 'S' stop reply packet
With this commit:
commit
5b6d1e4fa4fc6827c7b3f0e99ff120dfa14d65d2
Date: Fri Jan 10 20:06:08 2020 +0000
Multi-target support
There was a regression in GDB's support for older aspects of the
remote protocol. Specifically, when a target sends the 'S' stop reply
packet (which doesn't include a thread-id) then GDB has to figure out
which thread actually stopped.
Before the above commit GDB figured this out by using inferior_ptid in
process_stop_reply, which contained the ptid of the current
process/thread. This would be fine for single threaded
targets (which is the only place using an S packet makes sense), but
in the general case, relying on inferior_ptid for processing a stop is
wrong - there's no reason to believe that what was GDB's current
thread will be the same thread that just stopped in the target.
With the above commit the inferior_ptid now has the value null_ptid
inside process_stop_reply, this can be seen in do_target_wait, where
we call switch_to_inferior_no_thread before calling do_target_wait_1.
The problem this causes can be seen in the new test that runs
gdbserver using the flag --disable-packet=T, and causes GDB to throw
this assertion:
inferior.c:279: internal-error: inferior* find_inferior_pid(process_stratum_target*, int): Assertion `pid != 0' failed.
A similar problem was fixed in this commit:
commit
3cada74087687907311b52781354ff551e10a0ed
Date: Thu Jan 11 00:23:04 2018 +0000
Fix backwards compatibility with old GDBservers (PR remote/22597)
However, this commit deals with the case where the T packet doesn't
include a thread-id, not the S packet case. This commit solves the
problem providing a thread-id at the GDB side if the remote target
doesn't provide one. The thread-id provided comes from
remote_state::general_thread, however, though this does work, I don't
think it is the ideal solution.
The remote_state tracks two threads, the continue_thread and the
general_thread, these are updated when GDB asks the remote target to
switch threads. The general_thread is set before performing things
like register or memory accesses, and the continue_thread is set
before things like continue or step commands. Further, the
general_thread is updated after a target stops to reference the thread
that stopped.
The first thing to note from the above description is that we have a
cycle of dependency, when a T packet arrives without a thread-id we
fill in the thread-id from the general_thread data. The thread-id
from the stop event is then used to set the general_thread. This in
itself feels a little weird.
The second question is why use the general_thread at all? You'd think
given how they are originally set that the continue thread would be a
better choice. The problem with this is that the continue_thread, if
the user just does "continue", will be set to the minus_one_ptid, in
the remote protocol this means all threads. When the stop arrives
with no thread-id and we use continue_thread we end up with a very
similar assertion to before because we now end up trying to lookup a
thread using the minus_one_ptid. By contrast, once GDB has connected
to a remote target the general_thread will be set to a valid
thread-id, after which, if the target is single threaded, and stop
events arrive without a thread-id, everything works fine.
There is one slight weirdness with the above behaviour though. When
GDB first connects to the remote target inferior_ptid is null_ptid,
however, upon connecting we query the remote for its threads. As the
thread information arrives GDB adds the threads to its internal
database, and this process involves setting inferior_ptid to the id of
each new thread in turn. Once we know about all the threads we wait
for a stop event from the remote target to indicate that GDB is now in
control of the target.
The problem is that after adding the new threads we don't reset
inferior_ptid, and the code path we use to wait for a stop event from
the target also doesn't reset inferior_ptid, so it turns out that
during the initial connection inferior_ptid is not null_ptid. This is
lucky, because during the initial connection the general_thread
variable _is_ set to null_ptid.
So, during the initial connection, if the first stop event is missing
a thread-id then we "provide" a thead-id from general_thread. This
turns out to be null_ptid meaning no thread-id is known, and then
during process_stop_reply we fill in the missing thread-id using
inferior_ptid.
This was all discussed on the mailing list here:
https://sourceware.org/ml/gdb-patches/2020-02/msg01011.html
My proposal for a fix then is:
1. Move the call to switch_to_inferior_no_thread into
do_target_wait_1, this means that in all cases where we are waiting
for an inferior the inferior_ptid will be set to null_ptid. This is
good as no wait code should rely on inferior_ptid.
2. Remove the use of general_thread from the 'T' packet processing.
The general_thread read here was only ever correct by chance, and we
shouldn't be using it this way.
3. Remove use of inferior_ptid from process_stop_event as this is
wrong, and will always be null_ptid now anyway.
4. When a stop_event has null_ptid due to a lack of thread-id (either
from a T packet or an S packet) then pick the first non exited thread
in the target and use that. This will be fine for single threaded
targets. A multi-thread or multi-inferior aware remote target
should be using T packets with a thread-id, so we give a warning if
the target is multi-threaded, and we are still missing a thread-id.
5. Extend the existing test that covered the T packet with missing
thread-id to also cover the S packet.
gdb/ChangeLog:
* remote.c (remote_target::remote_parse_stop_reply): Don't use the
general_thread if the stop reply is missing a thread-id.
(remote_target::process_stop_reply): Use the first non-exited
thread if the target didn't pass a thread-id.
* infrun.c (do_target_wait): Move call to
switch_to_inferior_no_thread to ....
(do_target_wait_1): ... here.
gdb/testsuite/ChangeLog:
* gdb.server/stop-reply-no-thread.exp: Add test where T packet is
disabled.
Andrew Burgess [Fri, 28 Feb 2020 21:33:26 +0000 (21:33 +0000)]
gdbserver: Add mechanism to prevent sending T stop packets
There is a developer only feature in gdbserver that provides a
command line option --disable-packet that prevents some packets from
being sent, which is used to increase test coverage within GDB.
This commit extends this mechanism to prevent GDBserver from sending
the T stop reply packets, instead limiting GDBserver to only send the
S stop reply packets.
The S stop reply packet is part of the older target control mechanism,
which has design flaws that were worked around with the introduction
of the newer target control mechanism, which uses the T stop reply
packet.
Limiting GDBserver to use S stop packets instead of T stop packets
will, inevitably, mean that GDBserver doesn't function correctly in
many cases involving multiple threads, however, I don't think this is
too important, this is a developer only feature, intended to allow us
to test GDB.
A new test that makes use of this feature will be added in the next
commit.
gdbserver/ChangeLog:
* remote-utils.cc (prepare_resume_reply): Add ability to convert T
reply into an S reply.
* server.cc (disable_packet_T): New global.
(captured_main): Set new global when appropriate.
* server.h (disable_packet_T): Declare.
Tom de Vries [Mon, 2 Mar 2020 13:47:27 +0000 (14:47 +0100)]
[gdb/testsuite] Add -lbl option in gdb_test_multiple
Add gdb_test_multiple option -lbl, that adds a regexp after the user code that
reads one line, and discards it:
...
-re "\r\n\[^\r\n\]*(?=\r\n)" {
exp_continue
}
...
In order to be able to write:
...
gdb_test_multiple "command" "testname" -lbl {
...
}
...
rewrite the promp_regexp argument usage into the similar:
...
gdb_test_multiple "command" "testname" -prompt $prompt_regexp {
...
}
...
Build and reg-tested on x86_64-linux.
Tested gdb.base/corefile-buildid.exp with both make targets check and
check-read1.
gdb/testsuite/ChangeLog:
2020-03-02 Pedro Alves <palves@redhat.com>
Tom de Vries <tdevries@suse.de>
* lib/gdb.exp (gdb_test_multiple): Handle prompt_regexp option using
-prompt prefix, before user_code argument. Add -lbl option likewise.
(skip_python_tests_prompt, skip_libstdcxx_probe_tests_prompt)
(gdb_is_target_1): Add -prompt prefix and move to before user_code
argument.
* gdb.base/corefile-buildid.exp: Use -lbl option. Rewrite regexps to
have "\r\n" at start-of-line, instead of at end-of-line.
Alan Modra [Mon, 2 Mar 2020 13:38:42 +0000 (00:08 +1030)]
Re: bfd_cleanup for object_p
I hate files that you can't compile.
* cisco-core.c (cisco_core_file_p): Return bfd_cleanup.
* hpux-core.c (hpux_core_core_file_p): Update prototype.
* sco5-core.c (sco5_core_file_p): Return bfd_cleanup.
(core_sco5_vec): Correct initialisers.
Alan Modra [Mon, 2 Mar 2020 13:12:08 +0000 (23:42 +1030)]
Re: bfd_cleanup for object_p
More missing core file support changes.
* aix386-core.c (aix386_core_file_p): Return bfd_cleanup.
* aix5ppc-core.c (xcoff64_core_p): Likewise.
* cisco-core.c (cisco_core_file_validate): Likewise.
* hppabsd-core.c (hppabsd_core_core_file_p): Likewise.
* hpux-core.c (hpux_core_core_file_p): Likewise.
* irix-core.c (irix_core_core_file_p): Likewise.
* lynx-core.c (lynx_core_file_p): Likewise.
* netbsd-core.c (netbsd_core_file_p): Likewise.
* osf-core.c (osf_core_core_file_p): Likewise.
* ptrace-core.c (ptrace_unix_core_file_p): Likewise.
* sco5-core.c (sco5_core_file_p): Likewise.
Jon Turney [Sat, 29 Feb 2020 13:33:35 +0000 (13:33 +0000)]
gdb: Move defs.h before any system header in debuginfod-support.c
* defs.h includes config.h
* config.h may define _GNU_SOURCE
* if _GNU_SOURCE is defined, that must be before including any system
header (see feature_test_macro(7))
This is necessary to ensure that a prototype for mkostemp() is brought
into scope by <stdlib.h> when compiling filestuff.h, on platforms where
_GNU_SOURCE isn't unconditionally defined for C++.
In file included from ../../gdb/../gdbsupport/scoped_fd.h:24,
from ../../gdb/debuginfod-support.c:22:
../../gdb/../gdbsupport/filestuff.h: In function ‘int gdb_mkostemp_cloexec(char*, int)’:
../../gdb/../gdbsupport/filestuff.h:59:10: error: ‘mkostemp’ was not declared in this scope; did you mean ‘mkstemp’?
gdb/ChangeLog:
2020-02-29 Jon Turney <jon.turney@dronecode.org.uk>
* debuginfod-support.c: Include defs.h first.
Aaron Merey [Mon, 2 Mar 2020 12:46:47 +0000 (12:46 +0000)]
The procedure to find an unused port for the debuginfod tests is susceptible to a TOCTOU failure. Change port finding in order to avoid this. Also use 'expect' to interact with the server process since we now use the server's output to determine whether a port is in use.
* binutils/testsuite/binutils-all/debuginfod.exp: Improve port
selection.
H.J. Lu [Mon, 2 Mar 2020 12:35:23 +0000 (04:35 -0800)]
trad_unix_core_file_p: Return bfd_cleanup
* trad-core.c (trad_unix_core_file_p): Return bfd_cleanup.
H.J. Lu [Mon, 2 Mar 2020 11:56:36 +0000 (03:56 -0800)]
Import latest fixes to libiberty from GCC
lto: Also copy .note.gnu.property section
When generating the separate file with LTO debug sections, we should
also copy .note.gnu.property section.
PR lto/93966
* simple-object.c (handle_lto_debug_sections): Also copy
.note.gnu.property section.
Nick Clifton [Mon, 2 Mar 2020 10:02:02 +0000 (10:02 +0000)]
Restore readelf's string dump to previous behaviour where newlines were caused line breaks.
PR 25543
* readelf.c (dump_section_as_strings): Display new-line characters
as \n and then insert a line break.
* testsuite/binutils-all/pr25543.s: New test.
* testsuite/binutils-all/pr25543.d: Test driver.
* testsuite/binutils-all/readelf.exp: Run the new test.
Alan Modra [Mon, 2 Mar 2020 04:51:09 +0000 (15:21 +1030)]
bfd_cleanup for object_p
The object_p (and archive_p, core_file_p) functions are not supposed
to have any target specific malloc'd memory attached to the bfd on
their return. This should be obvious on a failure return, but it's
also true for a successful return. The reason is that even though the
object_p recognises the file, that particular target may not be used
and thus the bfd won't be closed calling close_and_cleanup for the
target that allocated the memory.
It turns out that the object_p bfd_target* return value isn't needed.
In all cases except ld/plugin.c the target is abfd->xvec and with
ld/plugin.c the target isn't used. So this patch returns a cleanup
function from object_p instead, called in bfd_check_format_matches to
tidy the bfd before trying a different target match. The only cleanup
that does anything at this stage is the alpha-vms one.
bfd/
* targets.c (bfd_cleanup): New typedef.
(struct bfd <_bfd_check_format>): Return a bfd_cleanup.
* libbfd-in.h (_bfd_no_cleanup): Define.
* format.c (bfd_reinit): Add cleanup parameter, call it.
(bfd_check_format_matches): Set cleanup from _bfd_check_format
call and pass to bfd_reinit. Delete temp, use abfd->xvec instead.
* aout-target.h (callback, object_p): Return bfd_cleanup.
* aout-tic30.c (tic30_aout_callback, tic30_aout_object_p): Likewise.
* archive.c (bfd_generic_archive_p): Likewise.
* binary.c (binary_object_p): Likewise.
* coff-alpha.c (alpha_ecoff_object_p): Likewise.
* coff-ia64.c (ia64coff_object_p): Likewise.
* coff-rs6000.c (_bfd_xcoff_archive_p, rs6000coff_core_p): Likewise.
* coff-sh.c (coff_small_object_p): Likewise.
* coff-stgo32.c (go32_check_format): Likewise.
* coff64-rs6000.c (xcoff64_archive_p, rs6000coff_core_p),
(xcoff64_core_p): Likewise.
* coffgen.c (coff_real_object_p, coff_object_p): Likewise.
* elf-bfd.h (bfd_elf32_object_p, bfd_elf32_core_file_p),
(bfd_elf64_object_p, bfd_elf64_core_file_p): Likewise.
* elfcode.h (elf_object_p): Likewise.
* elfcore.h (elf_core_file_p): Likewise.
* i386msdos.c (msdos_object_p): Likewise.
* ihex.c (ihex_object_p): Likewise.
* libaout.h (some_aout_object_p): Likewise.
* libbfd-in.h (bfd_generic_archive_p, _bfd_dummy_target),
(_bfd_vms_lib_alpha_archive_p, _bfd_vms_lib_ia64_archive_p): Likewise.
* libbfd.c (_bfd_dummy_target): Likewise.
* libcoff-in.h (coff_object_p): Likewise.
* mach-o-aarch64.c (bfd_mach_o_arm64_object_p),
(bfd_mach_o_arm64_core_p): Likewise.
* mach-o-arm.c (bfd_mach_o_arm_object_p),
(bfd_mach_o_arm_core_p): Likewise.
* mach-o-i386.c (bfd_mach_o_i386_object_p),
(bfd_mach_o_i386_core_p): Likewise.
* mach-o-x86-64.c (bfd_mach_o_x86_64_object_p),
(bfd_mach_o_x86_64_core_p): Likewise.
* mach-o.c (bfd_mach_o_header_p, bfd_mach_o_gen_object_p),
(bfd_mach_o_gen_core_p, bfd_mach_o_fat_archive_p): Likewise.
* mach-o.h (bfd_mach_o_object_p, bfd_mach_o_core_p),
(bfd_mach_o_fat_archive_p, bfd_mach_o_header_p): Likewise.
* mmo.c (mmo_object_p): Likewise.
* pef.c (bfd_pef_object_p, bfd_pef_xlib_object_p): Likewise.
* peicode.h (coff_real_object_p, pe_ILF_object_p),
(pe_bfd_object_p): Likewise.
* plugin.c (ld_plugin_object_p, bfd_plugin_object_p): Likewise.
* ppcboot.c (ppcboot_object_p): Likewise.
* rs6000-core.c (rs6000coff_core_p): Likewise.
* som.c (som_object_setup, som_object_p): Likewise.
* srec.c (srec_object_p, symbolsrec_object_p): Likewise.
* tekhex.c (tekhex_object_p): Likewise.
* vms-alpha.c (alpha_vms_object_p): Likewise.
* vms-lib.c (_bfd_vms_lib_archive_p, _bfd_vms_lib_alpha_archive_p),
(_bfd_vms_lib_ia64_archive_p, _bfd_vms_lib_txt_archive_p): Likewise.
* wasm-module.c (wasm_object_p): Likewise.
* xsym.c (bfd_sym_object_p): Likewise.
* xsym.h (bfd_sym_object_p): Likewise.
* aoutx.h (some_aout_object_p): Likewise, and callback parameter
return type.
* pdp11.c (some_aout_object_p): Likewise.
* plugin.c (register_ld_plugin_object_p): Update object_p
parameter type.
* plugin.h (register_ld_plugin_object_p): Likewise.
* bfd-in2.h: Regenerate.
* libbfd.h: Regenerate.
* libcoff.h: Regenerate.
ld/
* plugin.c (plugin_object_p): Return a bfd_cleanup.
(plugin_cleanup): New function.
H.J. Lu [Mon, 2 Mar 2020 01:07:12 +0000 (17:07 -0800)]
plugin: Copy the no_export field to the IR dummy object
Copy the no_export field to the IR dummy object when claiming an IR
object.
PR ld/25618
* plugin.c (plugin_object_p): Copy the no_export field to the IR
dummy object.
* testsuite/ld-plugin/lto.exp (lto_link_elf_tests): Add
PR ld/25618 tests.
* testsuite/ld-plugin/pr25618.d: New file.
* testsuite/ld-plugin/pr25618a.cc: Likewise.
* testsuite/ld-plugin/pr25618a.h: Likewise.
* testsuite/ld-plugin/pr25618b.cc: Likewise.
* testsuite/ld-plugin/pr25618b.h: Likewise.
Alan Modra [Sun, 1 Mar 2020 23:47:18 +0000 (10:17 +1030)]
miscellaneous SEC_SMALL_DATA
This patch arranges for symbols defined in .sdata and .sbss to be
reported by nm with 'g' and 's' flags, for coff targets that support
.sdata and .sbss.
The assembler changes regarding SEC_SMALL_DATA are really just
documentation. As far as I'm aware, this won't change any assembler
output.
bfd/
* coff-alpha.c (alpha_ecoff_le_vec): Add SEC_SMALL_DATA to
applicable section flags.
* coff-mips.c (mips_ecoff_le_vec, mips_ecoff_be_vec): Likewise.
(mips_ecoff_bele_vec): Likewise.
* coffcode.h (sec_to_styp_flags): Set SEC_SMALL_DATA for .sdata
and .sbss sections.
* ecoff.c (_bfd_ecoff_new_section_hook): Likewise.
(_bfd_ecoff_styp_to_sec_flags): Likewise.
gas/
* config/tc-m32r.c (md_begin): Set SEC_SMALL_DATA on .scommon section.
* config/tc-mips.c (s_change_sec): Set SEC_SMALL_DATA for .sdata
and .sbss sections.
* config/tc-score.c: Delete !BFD_ASSEMBLER code throughout.
(s3_s_change_sec): Set SEC_SMALL_DATA for .sbss section.
(s3_s_score_lcomm): Likewise.
* config/tc-score7.c: Similarly.
* read.c (bss_alloc): Set SEC_SMALL_DATA for .sbss section.
Alan Modra [Sun, 1 Mar 2020 23:46:39 +0000 (10:16 +1030)]
ELF SEC_SMALL_DATA
For those ELF targets that have .sdata or .sbss sections, or similar
sections, arrange to mark the sections with the SEC_SMALL_DATA flag.
This fixes regressions in nm symbol type caused by removing .sdata
and .sbss from coff_section_type with commit
49d9fd42ac.
* elf32-m32r.c (m32r_elf_section_flags): New function.
(elf_backend_section_flags): Define.
* elf32-nds32.c (nds32_elf_section_flags): New function.
(elf_backend_section_flags): Define.
* elf32-ppc.c (ppc_elf_section_from_shdr): Set SEC_SMALL_DATA for
.sbss and .sdata sections.
* elf32-v850.c (v850_elf_section_from_shdr): Set SEC_SMALL_DATA
for SHF_V850_GPREL sections.
* elf64-alpha.c (elf64_alpha_section_from_shdr): Delete outdated
FIXME.
* elf64-hppa.c (elf64_hppa_section_from_shdr): Set SEC_SMALL_DATA
for SHF_PARISC_SHORT sections.
* elf64-ppc.c (ppc64_elf_section_flags): New function.
(elf_backend_section_flags): Define.
* elfxx-mips.c (_bfd_mips_elf_section_from_shdr): Set SEC_SMALL_DATA
for SHF_MIPS_GPREL sections. Delete FIXME.
Alan Modra [Sun, 1 Mar 2020 23:46:02 +0000 (10:16 +1030)]
elf_backend_section_flags and _bfd_elf_init_private_section_data
I was looking at elf_backend_section_flags as a means of setting
SEC_SMALL_DATA for .sdata, .sbss and the like, and condidered adding
an asection* parameter to access the section name easily before
realising that hdr->bfd_section of course makes the section
available. So no new parameter needed. In fact the flagword*
parameter isn't needed either, so out it goes.
The patch also tidies some horrible code in _bfd_elf_new_section_hook
that can change whether known ABI sections have sh_type and sh_flags
set up depending on which of the bfd_make_section functions is used.
(Some of those set section flags before _bfd_elf_new_section_hook is
called, others leave the flags zero.) The function also had some
hacks for .init_array and .fini_array to affect how
_bfd_elf_init_private_section_data behaved for those sections. It's
cleaner to do that in _bfd_elf_init_private_section_data. So that all
goes and we now init sh_type and sh_flags for all known ABI sections
in _bfd_elf_new_section_hook. _bfd_elf_init_private_section_data is
changed to suit, and now doesn't just single out SHT_INIT_ARRAY and
SHT_FINI_ARRAY but rather any of the special section types.
The _bfd_elf_new_section_hook change resulting in
+FAIL: ld-aarch64/erratum835769-843419
exposing some errors in the aarch64 backend. elfNN_aarch64_size_stubs
should not be looking at linker created sections in the stub bfd. Nor
should code like "symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr" be
run without first checking that input_bfd is ELF.
* elf-bfd.h (elf_backend_section_flags): Remove flagword* param.
* elf.c (_bfd_elf_make_section_from_shdr): Set section flags before
calling elf_backend_section_flags with adjusted params. Use
newsect->flags past that point.
(_bfd_elf_new_section_hook): Always set sh_type and sh_flags for
special sections.
(_bfd_elf_init_private_section_data): Allow normal sh_type sections
to have their type overridden, and all sh_flags but processor and
os specific.
* elf32-arm.c (elf32_arm_section_flags): Adjust for changed params.
* elf32-mep.c (mep_elf_section_flags): Likewise.
* elf32-nios2.c (nios2_elf32_section_flags): Likewise.
* elf64-alpha.c (elf64_alpha_section_flags): Likewise.
* elf64-ia64-vms.c (elf64_ia64_section_flags): Likewise.
* elfnn-ia64.c (elfNN_ia64_section_flags): Likewise.
* elfnn-aarch64.c (elfNN_aarch64_size_stubs): Exclude the linker
stub BFD and non-aarch64 input files when scanning for stubs.
Alan Modra [Sun, 1 Mar 2020 23:45:36 +0000 (10:15 +1030)]
alpha-coff: large memory allocation
* coff-alpha.c (alpha_ecoff_get_elt_at_filepos): Provide an upper
limit to decompressed element size.
Alan Modra [Sun, 1 Mar 2020 23:40:55 +0000 (10:10 +1030)]
alpha-vms: prevent endless recursion
* vms-lib.c (vms_traverse_index): Add recur_count param and
update calls. Fail on excessive recursion.
Alan Modra [Sun, 1 Mar 2020 23:44:57 +0000 (10:14 +1030)]
alpha-vms: error paths not freeing memory and malloc result checks
When realloc fails it doesn't free the old memory. In BFD we usually
will exit with an error on a realloc fail, so want to tidy up memory
on error paths. That's done by bfd_realloc_or_free.
* vms-alpha.c (vms_get_remaining_object_record): Use
bfd_realloc_or_free rather than bfd_realloc.
(add_symbol_entry, vector_grow1, alpha_vms_slurp_relocs): Likewise.
(dst_define_location, parse_module): Likewise, and check realloc
return status before using memory. Return status from function
adjusting all callers.
GDB Administrator [Mon, 2 Mar 2020 00:00:22 +0000 (00:00 +0000)]
Automatic date update in version.in
GDB Administrator [Sun, 1 Mar 2020 00:01:11 +0000 (00:01 +0000)]
Automatic date update in version.in
GDB Administrator [Sat, 29 Feb 2020 00:00:15 +0000 (00:00 +0000)]
Automatic date update in version.in
Simon Marchi [Fri, 28 Feb 2020 23:58:17 +0000 (18:58 -0500)]
Update libinproctrace.so path in lib/trace-support.exp
Following the move to gdbserver to the top-level, the path to
libinproctrace.so in testsuite/lib/trace-support.exp is no longer valid.
This can be observed by running:
$ make check TESTS="gdb.trace/ftrace.exp" RUNTESTFLAGS="--target_board=native-gdbserver"
...
ERROR: error copying "/home/smarchi/build/binutils-gdb/gdb/testsuite/../gdbserver/libinproctrace.so": no such file or directory
Adjust the path to libinproctrace.so by adding a "..". With this patch,
the test mentioned above runs fine.
gdb/testsuite/ChangeLog:
* lib/trace-support.exp (get_in_proc_agent): Adjust path to
libinproctrace.so.
Sergio Durigan Junior [Tue, 25 Feb 2020 20:50:16 +0000 (15:50 -0500)]
Fix comment for 'gdb_dlopen'
The 'gdb_dlopen' function doesn't return NULL if the shlib load
fails; it actually throws an error. This patch updates the comment
to reflect this.
gdbsupport/ChangeLog:
2020-02-28 Sergio Durigan Junior <sergiodj@redhat.com>
* gdb-dlfcn.h (gdb_dlopen): Update comment.
Luis Machado [Wed, 26 Feb 2020 13:37:28 +0000 (10:37 -0300)]
Fix SVE-related failure in gdb.arch/aarch64-fp.exp
The gdb.arch/aarch64-fp.exp test assumes it is dealing with a regular SIMD
target that exposes the V registers as raw registers. SVE-enabled targets
turn the V registers into pseudo-registers.
That is all fine, but the testcase uses the "info registers" command, which
prints pseudo-register's contents twice. One for the hex format and another
for the natural format of the type.
(gdb) info registers v0
v0 {d = {f = {0x0, 0x0}, u = {0x1716151413121110, 0x1f1e1d1c1b1a1918}, s = {0x1716151413121110, 0x1f1e1d1c1b1a1918}}, s = {f = {0x0, 0x0, 0x0, 0x0}, u = {0x13121110, 0x17161514, 0x1b1a1918, 0x1f1e1d1c}, s = {0x13121110, 0x17161514, 0x1b1a1918, 0x1f1e1d1c}}, h = {f = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, u = {0x1110, 0x1312, 0x1514, 0x1716, 0x1918, 0x1b1a, 0x1d1c, 0x1f1e}, s = {0x1110, 0x1312, 0x1514, 0x1716, 0x1918, 0x1b1a, 0x1d1c, 0x1f1e}}, b = {u = {0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f}, s = {0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f}}, q = {u = {0x1f1e1d1c1b1a19181716151413121110}, s = {0x1f1e1d1c1b1a19181716151413121110}}} {d = {f = {1.
846323925681849e-197, 8.
5677456166123577e-159}, u = {
1663540288323457296,
2242261671028070680}, s = {
1663540288323457296,
2242261671028070680}}, s = {f = {1.
84362032e-27, 4.
84942184e-25, 1.
27466897e-22, 3.
34818801e-20}, u = {
319951120,
387323156,
454695192,
522067228}, s = {
319951120,
387323156,
454695192,
522067228}}, h = {f = {0.
00061798, 0.
00086308, 0.
0012398, 0.00173, 0.
0024872, 0.
0034676, 0.
0049896, 0.
0069504}, u = {4368, 4882, 5396, 5910, 6424, 6938, 7452, 7966}, s = {4368, 4882, 5396, 5910, 6424, 6938, 7452, 7966}}, b = {u = {16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31}, s = {16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31}}, q = {u = {
41362427191743139026751447860679676176}, s = {
41362427191743139026751447860679676176}}}
(gdb) p/x $v0
$1 = {d = {f = {0x0, 0x0}, u = {0x1716151413121110, 0x1f1e1d1c1b1a1918}, s = {0x1716151413121110, 0x1f1e1d1c1b1a1918}}, s = {f = {0x0, 0x0, 0x0, 0x0}, u = {0x13121110, 0x17161514, 0x1b1a1918, 0x1f1e1d1c}, s = {0x13121110, 0x17161514, 0x1b1a1918, 0x1f1e1d1c}}, h = {f = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, u = {0x1110, 0x1312, 0x1514, 0x1716, 0x1918, 0x1b1a, 0x1d1c, 0x1f1e}, s = {0x1110, 0x1312, 0x1514, 0x1716, 0x1918, 0x1b1a, 0x1d1c, 0x1f1e}}, b = {u = {0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f}, s = {0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f}}, q = {u = {0x1f1e1d1c1b1a19181716151413121110}, s = {0x1f1e1d1c1b1a19181716151413121110}}}
Since the testcase is not expecting that, we run into a couple failures:
FAIL: gdb.arch/aarch64-fp.exp: check register v0 value
FAIL: gdb.arch/aarch64-fp.exp: check register v1 value
The following patch switches to using "p/x" for printing register values, which
prints the values once with the hex format, instead of twice.
gdb/testsuite/ChangeLog
2020-02-28 Luis Machado <luis.machado@linaro.org>
* gdb.arch/aarch64-fp.exp: Switch from "info registers" command
to "p/x".
Luis Machado [Tue, 25 Feb 2020 13:09:19 +0000 (10:09 -0300)]
Fix gdb.arch/aarch64-dbreg-contents.exp build failures
I ran into the following failures when running tests under QEMU:
--
gdb compile failed, binutils-gdb/gdb/testsuite/gdb.arch/aarch64-dbreg-contents.c: In function 'set_watchpoint':
binutils-gdb/gdb/testsuite/gdb.arch/aarch64-dbreg-contents.c:41:29: error: storage size of 'dreg_state' isn't known
struct user_hwdebug_state dreg_state;
^~~~~~~~~~
In file included from /usr/include/aarch64-linux-gnu/bits/types/struct_iovec.h:23:0,
from /usr/include/aarch64-linux-gnu/sys/uio.h:23,
from binutils-gdb/gdb/testsuite/gdb.arch/aarch64-dbreg-contents.c:17:
binutils-gdb/gdb/testsuite/gdb.arch/aarch64-dbreg-contents.c:69:18: error: invalid use of undefined type 'struct user_hwdebug_state'
iov.iov_len = (offsetof (struct user_hwdebug_state, dbg_regs)
^
binutils-gdb/gdb/testsuite/gdb.arch/aarch64-dbreg-contents.c:74:5: warning: implicit declaration of function 'error'; did you mean 'errno'? [-Wimplicit-function-declaration]
error (1, errno, "PTRACE_SETREGSET: NT_ARM_HW_WATCH");
^~~~~
errno
binutils-gdb/gdb/testsuite/gdb.arch/aarch64-dbreg-contents.c: In function 'main':
binutils-gdb/gdb/testsuite/gdb.arch/aarch64-dbreg-contents.c:87:3: warning: implicit declaration of function 'atexit'; did you mean '_Exit'? [-Wimplicit-function-declaration]
atexit (cleanup);
^~~~~~
_Exit
binutils-gdb/gdb/testsuite/gdb.arch/aarch64-dbreg-contents.c:89:11: warning: implicit declaration of function 'fork' [-Wimplicit-function-declaration]
child = fork ();
^~~~
--
The following patch fixes those by adding the necessary include files.
With that said, the test doesn't pass at present. I'll have to investigate it
a bit more.
gdb/testsuite/ChangeLog:
2020-02-28 Luis Machado <luis.machado@linaro.org>
* gdb.arch/aarch64-dbreg-contents.c: Include stdlib.h, unistd,
asm/ptrace.h and error.h.
Tom de Vries [Fri, 28 Feb 2020 15:14:53 +0000 (16:14 +0100)]
[gdb] Don't set initial language using previous language
When language is set to auto, part of loading an executable is to update the
language accordingly. This is implemented by set_initial_language.
In case of a c++ executable without DW_AT_main_subprogram,
set_initial_language finds "main" in the minimal symbols, and does a lookup of
"main" in the symbol tables to determine the language of the symbol, and uses
that as initial language.
The symbol lookup is done using lookup_symbol which is a wrapper around
lookup_symbol_in_language, using the current language.
So, consider two c++ executables a.out and b.out, which we'll load one after
another. If we track the resulting lookup_symbol_in_language calls:
...
$ gdb -batch \
-ex "b lookup_symbol_in_language" \
-ex r -ex c -ex c \
--args gdb
...
we find that indeed lookup_symbol_in_language is called once using language_c, and
once using language_c_plus:
...
(gdb) file a.out
Reading symbols from a.out...
Breakpoint 1, lookup_symbol_in_language (name=0x5555568c2050 "main", \
block=0x0, domain=VAR_DOMAIN, lang=language_c, is_a_field_of_this=0x0) \
at ../../gdb/symtab.c:1905
1905 {
(gdb) file b.out
Load new symbol table from "b.out"? (y or n) y
Reading symbols from b.out...
Breakpoint 1, lookup_symbol_in_language (name=0x5555568c2030 "main", \
block=0x0, domain=VAR_DOMAIN, lang=language_cplus, is_a_field_of_this=0x0) \
at ../../gdb/symtab.c:1905
1905 {
(gdb)
...
It seems like a bad idea to have the previous language play a role
in determining the executable language.
Fix this by using lookup_symbol_in_language in set_initial_language with the
default language c as argument.
Tested on x86_64-linux.
gdb/ChangeLog:
2020-02-28 Tom de Vries <tdevries@suse.de>
* symfile.c (set_initial_language): Use default language for lookup.
Simon Marchi [Fri, 28 Feb 2020 15:07:46 +0000 (10:07 -0500)]
Pass correct die_reader_specs in cutu_reader::init_tu_and_read_dwo_dies
Running anything with the fission.exp board fails since commit
c0ab21c22bb ("Replace init_cutu_and_read_dies with a class").
GDB crashes while reading the DWARF info. cu is NULL in
read_signatured_type:
Thread 1 "gdb" received signal SIGSEGV, Segmentation fault.
0x000055555780663e in read_signatured_type
sig_type=0x6210000c3600) at /home/simark/src/binutils-gdb/gdb/dwarf2/read.c:22782
22782 gdb_assert (cu->die_hash == NULL);
(top-gdb) bt
#0 0x000055555780663e in read_signatured_type (sig_type=0x6210000c3600) at /home/simark/src/binutils-gdb/gdb/dwarf2/read.c:22782
#1 0x00005555578062dd in load_full_type_unit (per_cu=0x6210000c3600) at /home/simark/src/binutils-gdb/gdb/dwarf2/read.c:22758
#2 0x00005555577c5fb7 in queue_and_load_dwo_tu (slot=0x60600007fc00, info=0x6210000c34e0) at /home/simark/src/binutils-gdb/gdb/dwarf2/read.c:12674
#3 0x0000555559934232 in htab_traverse_noresize (htab=0x60b000063670, callback=0x5555577c5e61 <queue_and_load_dwo_tu(void**, void*)>, info=0x6210000c34e0)
at /home/simark/src/binutils-gdb/libiberty/hashtab.c:775
#4 0x00005555577c6252 in queue_and_load_all_dwo_tus (per_cu=0x6210000c34e0) at /home/simark/src/binutils-gdb/gdb/dwarf2/read.c:12701
#5 0x000055555777ebd8 in dw2_do_instantiate_symtab (per_cu=0x6210000c34e0, skip_partial=false) at /home/simark/src/binutils-gdb/gdb/dwarf2/read.c:2371
#6 0x000055555777eea2 in dw2_instantiate_symtab (per_cu=0x6210000c34e0, skip_partial=false) at /home/simark/src/binutils-gdb/gdb/dwarf2/read.c:2395
#7 0x0000555557786ab6 in dw2_lookup_symbol (objfile=0x614000007240, block_index=GLOBAL_BLOCK, name=0x602000025310 "main", domain=VAR_DOMAIN)
at /home/simark/src/binutils-gdb/gdb/dwarf2/read.c:3539
After creating the reader object, the reader.cu field should not be
NULL. By checking the commit previous to the faulty one mentioned
above, I noticed that the cu field is normally set by
init_cu_die_reader, called from read_cutu_die_from_dwo, itself called
from cutu_reader::init_tu_and_read_dwo_dies, itself called from
cutu_reader's constructor.
However, cutu_reader::init_tu_and_read_dwo_dies calls
read_cutu_die_from_dwo, passing a pointer to a local `die_reader_specs`
variable. So it's the `cu` field of that object that gets set.
cutu_reader itself is a `die_reader_specs` (it inherits from it), and
the intention was most likely to pass `this` to read_cutu_die_from_dwo.
This way, the fields of the cutu_reader object, which
read_signatured_type will use, are set.
With this, I am able to use:
make check RUNTESTFLAGS='--target_board=fission'
and it looks much better. There are still some failures to be
investigated, but that's the usual state of the testsuite.
gdb/ChangeLog:
* dwarf2/read.c (cutu_reader::init_tu_and_read_dwo_dies): Remove
reader variable, pass `this` to read_cutu_die_from_dwo.
Tom de Vries [Fri, 28 Feb 2020 15:05:50 +0000 (16:05 +0100)]
[gdb/testsuite] Fix psymtab expansion postponement in c-linkage-name.exp
The test-case gdb.base/c-linkage-name.exp starts with the following test:
...
gdb_test "print symada__cS" \
" = {a =
100829103}" \
"print symada__cS before partial symtab expansion"
...
However, printing the state of the partial symtabs using maint info psymtabs
shows that in fact the symtab has already been expanded:
...
{ psymtab c-linkage-name.c ((struct partial_symtab *) 0x1e27b40)^M
readin yes^M
...
This is due to set_initial_language, which looks up the main symbol, which
expands the psymtab containing main.
Fix this by moving all but main into a separate source file c-linkage-name-2.c.
Tested on x86_64-linux.
gdb/testsuite/ChangeLog:
2020-02-28 Tom de Vries <tdevries@suse.de>
* gdb.base/c-linkage-name.c (main): Call do_something_other_cu.
(struct wrapper, do_something, mundane/symada__cS): Move ...
* gdb.base/c-linkage-name-2.c: ... here. New source file.
* gdb.base/c-linkage-name.exp: Add verification of psymtab expansion.
Update "print symada__cS before partial symtab expansion" regexp.
Update breakpoint location. Flush symbol cache after expansion.
Luis Machado [Fri, 21 Feb 2020 20:58:48 +0000 (17:58 -0300)]
Harden gdb.arch/aarch64-pauth.exp and fix a failure
When running this testcase against a QEMU with PAC support, i noticed we
were failing to recognize the additional [PAC] that is emitted in the
backtrace, resulting in this failure:
FAIL: gdb.arch/aarch64-pauth.exp: backtrace
I've made the test use multi_line to make the pattern more clear.
Tested against aarch64-linux-gnu with and without PAC support.
gdb/testsuite/ChangeLog:
2020-02-28 Luis Machado <luis.machado@linaro.org>
* gdb.arch/aarch64-pauth.exp: Recognize optional PAC output.
YunQiang Su [Fri, 28 Feb 2020 07:58:13 +0000 (15:58 +0800)]
MIPS/fix_loongson3_llsc: fix when target has multi labels
When there is multi-labels on the same insn, the current code
will take care about the last one. it may cause that no sync
is added at the target.
Here we scan all labels with same value of
S_GET_VALUE(label_list->label)
by label_list->next.
2020-02-28 YunQiang Su <syq@debian.org>
PR gas/25539
* config/tc-mips.c (fix_loongson3_llsc): Compare label value
to handle multi-labels.
(has_label_name): New.
Alan Modra [Fri, 28 Feb 2020 02:32:42 +0000 (13:02 +1030)]
alpha-vms: memory leak
* vms-lib.c (_bfd_vms_lib_archive_p): Free memory on error paths.
Alan Modra [Fri, 28 Feb 2020 02:05:44 +0000 (12:35 +1030)]
alpha-vms: large memory allocation
This patch simplifies reading of image headers. It's really not worth
trying to avoid re-reading a 12 byte buffer and then read in
VMS_BLOCK_SIZE chunks, better just to throw the buffer away and use
_bfd_malloc_and_read which does checks against file size.
* vms-alpha.c (alpha_vms_object_p): Use _bfd_malloc_and_read.
Remove duplicate undersize check.
Aaron Merey [Fri, 28 Feb 2020 00:07:01 +0000 (19:07 -0500)]
gdb: Check for nullptr when computing srcpath
This fixes a regression caused by commit
0d79cdc494d5:
$ make check TESTS="gdb.dwarf2/dw2-ranges-base.exp"
[...]
ERROR: GDB process no longer exists
This error is caused by an abort during the computation of srcpath
when SYMTAB_DIRNAME (s) == NULL.
Computing srcpath only when SYMTAB_DIRNAME (s) is not NULL fixes this
error. Also change the condition for calling debuginfod_source_query
to include whether srcpath could be computed.
gdb/ChangeLog:
2020-02-27 Aaron Merey <amerey@redhat.com>
* source.c (open_source_file): Check for nullptr when computing
srcpath.
GDB Administrator [Fri, 28 Feb 2020 00:00:33 +0000 (00:00 +0000)]
Automatic date update in version.in
Tom Tromey [Thu, 27 Feb 2020 21:05:49 +0000 (14:05 -0700)]
Remove field_info::nfields member
I noticed that there's no real reason to have field_info::nfields in
the DWARF reader. It simply mirrors information that is already
available. This patch removes it, in favor of a convenience method.
gdb/ChangeLog
2020-02-27 Tom Tromey <tromey@adacore.com>
* dwarf2/read.c (struct field_info) <nfields>: Now a method, not a
member.
(dwarf2_add_field): Don't update nfields.
(dwarf2_attach_fields_to_type, process_structure_scope): Update.
Alan Modra [Thu, 27 Feb 2020 05:56:19 +0000 (16:26 +1030)]
mmix-mmo set SEC_DATA for .data section
With the bfd_decode_symclass change, ld SIZEOF test fails due to
data_end being reported as type '?'.
bfd/
PR 24511
* mmo.c (mmo_scan): Set SEC_DATA for .data.
ld/
PR 24511
* testsuite/ld-mmix/b-fixo2.d: Adjust for .data change.
* testsuite/ld-mmix/sec-2.d: Likewise.
* testsuite/ld-mmix/sec-3.d: Likewise.
* testsuite/ld-mmix/sec-4.d: Likewise.
* testsuite/ld-mmix/spec802.d: Likewise.
* testsuite/ld-mmix/spec803.d: Likewise.
* testsuite/ld-mmix/spec804.d: Likewise.
* testsuite/ld-mmix/spec805.d: Likewise.
* testsuite/ld-mmix/spec806.d: Likewise.
* testsuite/ld-mmix/spec807.d: Likewise.
* testsuite/ld-mmix/spec808.d: Likewise.
Alan Modra [Thu, 27 Feb 2020 03:53:34 +0000 (14:23 +1030)]
.idata symbols should be reported with i or I flag by nm
PR 24511
* syms.c (stt): Trim off all but 'e', 'i' and 'p' entries.
(coff_section_type): Adjust comment.
(decode_section_type): Likewise. Call coff_section_type before
decode_section_type.
(bfd_decode_symclass): Use 'c' for common sections other than
the standard one.
Andrew Burgess [Thu, 27 Feb 2020 16:42:17 +0000 (16:42 +0000)]
gdb: Use std::abs instead of abs on LONGEST types
Use std::abs so that we get the C++ overloaded version that matches
the argument type instead of the C abs function which is only for int
arguments.
There should be no user visible change after this commit.
gdb/ChangeLog:
* gdbtypes.c (create_array_type_with_stride): Use std::abs not
abs.
Nick Clifton [Thu, 27 Feb 2020 16:28:25 +0000 (16:28 +0000)]
Fix an illegal memory access by readelf when displaying the contents of a corrupt IA64 binary.
PR 25526
* readelf.c (process_ia64_vms_dynamic_relocs): Check to see if
get_data is unable to load the string table.
Tom de Vries [Thu, 27 Feb 2020 13:27:09 +0000 (14:27 +0100)]
[gdb/testsuite] Remove unused globals
Remove unused global variable declarations.
Tested on x86_64-linux.
gdb/testsuite/ChangeLog:
2020-02-27 Tom de Vries <tdevries@suse.de>
* config/sid.exp: Remove unused globals.
* gdb.base/attach.exp: Same.
* gdb.base/catch-load.exp: Same.
* gdb.base/dbx.exp: Same.
* lib/gdb.exp: Same.
* lib/mi-support.exp: Same.
* lib/prompt.exp: Same.
Tom de Vries [Thu, 27 Feb 2020 09:16:00 +0000 (10:16 +0100)]
[gdb/testsuite] Fix spawn in tuiterm.exp
When running gdb.stabs/weird.exp by itself it passes, but if we run a gdb.tui
test before it, we get:
...
$ make check RUNTESTFLAGS="gdb.stabs/weird.exp gdb.tui/basic.exp"
Running /data/gdb_versions/devel/src/gdb/testsuite/gdb.tui/basic.exp ...
Running /data/gdb_versions/devel/src/gdb/testsuite/gdb.stabs/weird.exp ...
ERROR: Couldn't make test case. -1 {spawn failed}
...
In more detail, using -v:
...
Executing on build: sed -f aout.sed weird.def weird.s (timeout = 300)
builtin_spawn [open ...]^M
pid is 19060 19061 -19060 -19061
spawn -open file10 failed, 1 can't read "spawn_out(slave,name)": \
no such variable, can't read "spawn_out(slave,name)": no such variable
while executing
"set gdb_spawn_name $spawn_out(slave,name)"
(procedure "spawn" line 5)
invoked from within
"spawn -ignore SIGHUP -leaveopen file10"
invoked from within
"catch "spawn -ignore SIGHUP -leaveopen $id" result2"
ERROR: Couldn't make test case. -1 {spawn failed}
...
When running the gdb.tui test, spawn gets renamed to a local version from
lib/tuiterm.exp. The local version calls expect's spawn, and then makes the
local spawn_out(slave,name) variable accessible in the global variable
gdb_spawn_name.
However, the weird.exp test-case uses remote_exec build, which ends up using
local_exec, which given that there's input/output redirection uses open:
...
set result [catch {open "| ${commandline} $inp |& tee $outpf" RDONLY} id]
...
followed by spawn using the -leaveopen option:
...
set result [catch "spawn -ignore SIGHUP -leaveopen $id" result2]
...
which apparently has the effect that spawn_out(slave,name) is not set.
Fix this in the lib/tuiterm.exp local spawn proc by detecting the case that
spawn_out(slave,name) is not set, and handling it accordingly.
Tested gdb.stabs/weird.exp and gdb.tui/*.exp on x86_64-linux.
gdb/testsuite/ChangeLog:
2020-02-27 Tom de Vries <tdevries@suse.de>
* lib/tuiterm.exp (spawn): Handle case that spawn_out(slave,name) is
not set.
Alan Modra [Thu, 27 Feb 2020 03:41:35 +0000 (14:11 +1030)]
_bfd_xcoff_read_ar_hdr tidy
* coff-rs6000.c (_bfd_xcoff_read_ar_hdr): Put all data in one
malloc'd block.
Alan Modra [Thu, 27 Feb 2020 03:20:21 +0000 (13:50 +1030)]
bfd_stat_arch_elt buffer overflow
If you manage to put an xcoff object file into a non-xcoff archive
(created by first putting a non-xcoff object file into it), and have
xcoff support compiled into libbfd, then objdump -x on the archive
can segfault. The problem is that _bfd_xcoff_stat_arch_elt expects
abfd->arelt_data->arch_header to be one of the xcoff variants, but
arelt_data is generated depending on the archive format, *not* the
element format.
* bfd.c (bfd_stat_arch_elt): Use vector of containing archive,
if file is an archive element.
* bfd-in2.h: Regenerate.
GDB Administrator [Thu, 27 Feb 2020 00:00:26 +0000 (00:00 +0000)]
Automatic date update in version.in
Tom Tromey [Wed, 26 Feb 2020 22:41:07 +0000 (15:41 -0700)]
Specialize partial_symtab for DWARF include files
Include files are represented by a partial symtab, but don't expand to
anything. From dwarf2_psymtab::expand_psymtab:
if (per_cu == NULL)
{
/* It's an include file, no symbols to read for it.
Everything is in the parent symtab. */
readin = true;
return;
}
This patch introduces a new specialization of partial_symtab to handle
this case. In addition to being slightly smaller, I believe an
include file is the only situation where a DWARF psymtab can result in
a null compunit_symtab. This adds an assert to that effect as well.
This change will simplify one of the psymtab sharing patches.
gdb/ChangeLog
2020-02-26 Tom Tromey <tom@tromey.com>
* dwarf2/read.c (struct dwarf2_include_psymtab): New.
(dwarf2_create_include_psymtab): Use dwarf2_include_psymtab.
(dwarf2_psymtab::expand_psymtab, dwarf2_psymtab::readin_p)
(dwarf2_psymtab::get_compunit_symtab): Remove null checks for
per_cu_data.
Tom Tromey [Wed, 26 Feb 2020 22:41:07 +0000 (15:41 -0700)]
Remove casts from dwarf2/index-write.c
dwarf2/index-write.c casts pointers to "dwarf2_psymtab *", but as far
as I can tell, it does not actually use any DWARF-specific fields of
the psymtab. So, this patch changes this code to use partial_symtab
instead. This removes nearly every cast, leaving just the unavoidable
one from addrmap iteration.
gdb/ChangeLog
2020-02-26 Tom Tromey <tom@tromey.com>
* dwarf2/index-write.c (psym_index_map): Change type.
(add_address_entry_worker, write_one_signatured_type)
(recursively_count_psymbols, recursively_write_psymbols)
(class debug_names, psyms_seen_size, write_gdbindex)
(write_debug_names): Use partial_symtab, not dwarf2_psymtab.
Aaron Merey [Wed, 26 Feb 2020 22:40:49 +0000 (17:40 -0500)]
Add debuginfod support to GDB
debuginfod is a lightweight web service that indexes ELF/DWARF debugging
resources by build-id and serves them over HTTP.
This patch enables GDB to query debuginfod servers for separate debug
files and source code when it is otherwise not able to find them.
GDB can be built with debuginfod using the --with-debuginfod configure
option.
This requires that libdebuginfod be installed and found at configure time.
debuginfod is packaged with elfutils, starting with version 0.178.
For more information see https://sourceware.org/elfutils/.
Tested on x86_64 Fedora 31.
gdb/ChangeLog:
2020-02-26 Aaron Merey <amerey@redhat.com>
* Makefile.in: Handle optional debuginfod support.
* NEWS: Update.
* README: Add --with-debuginfod summary.
* config.in: Regenerate.
* configure: Regenerate.
* configure.ac: Handle optional debuginfod support.
* debuginfod-support.c: debuginfod helper functions.
* debuginfod-support.h: Ditto.
* doc/gdb.texinfo: Add --with-debuginfod to configure options
summary.
* dwarf2/read.c (dwarf2_get_dwz_file): Query debuginfod servers
when a dwz file cannot be found.
* elfread.c (elf_symfile_read): Query debuginfod servers when a
debuginfo file cannot be found.
* source.c (open_source_file): Query debuginfod servers when a
source file cannot be found.
* top.c (print_gdb_configuration): Include
--{with,without}-debuginfod in the output.
gdb/testsuite/ChangeLog:
2020-02-26 Aaron Merey <amerey@redhat.com>
* gdb.debuginfod: New directory for debuginfod tests.
* gdb.debuginfod/main.c: New test file.
* gdb.debuginfod/fetch_src_and_symbols.exp: New tests.
Jérémie Galarneau [Tue, 18 Feb 2020 00:08:03 +0000 (19:08 -0500)]
gdb: print thread names in thread apply command output
This makes the thread apply command print the thread's name. The use
of target_pid_to_str is replaced by thread_target_id_str, which
provides the same output as "info threads".
Before:
(gdb) thread apply 2 bt
Thread 2 (Thread 0x7fd245602700 (LWP 3837)):
[...]
After:
(gdb) thread apply 2 bt
Thread 2 (Thread 0x7fd245602700 (LWP 3837) "HT cleanup"):
[...]
The thread's description header is pre-computed before running the
command since the command may change the selected inferior. This is
not permitted by thread_target_id_str as target_thread_name asserts
that `info->inf == current_inferior ()`.
This situation arises in the `gdb.threads/threadapply.exp` test which
kills and removes the inferior as part of a "thread apply" command.
gdb/ChangeLog:
* thread.c (thr_try_catch_cmd): Print thread name.
Simon Marchi [Wed, 26 Feb 2020 14:35:22 +0000 (09:35 -0500)]
Move more declarations from dwarf2/loc.h to dwarf2/read.h
All these functions have their implementations in dwarf2/read.c, so move
their declarations to dwarf2/read.h. Move the doc to the header, at the
same time.
gdb/ChangeLog:
* dwarf2/loc.h (dwarf2_fetch_die_loc_sect_off,
dwarf2_fetch_die_loc_cu_off, dwarf2_fetch_constant_bytes,
dwarf2_fetch_die_type_sect_off): Move to...
* dwarf2/read.h (dwarf2_fetch_die_loc_sect_off,
dwarf2_fetch_die_loc_cu_off, dwarf2_fetch_constant_bytes,
dwarf2_fetch_die_type_sect_off): ... here.
* dwarf2/read.c (dwarf2_fetch_die_loc_sect_off,
dwarf2_fetch_die_loc_cu_off, dwarf2_fetch_constant_bytes,
dwarf2_fetch_die_type_sect_off): Move doc to header file.
Matthew Malcomson [Wed, 26 Feb 2020 14:23:11 +0000 (14:23 +0000)]
[binutils][arm] Arm CDE CX*A instructions allow condition code
The implementation of the Arm CDE CX*A instructions doesn't allow a
condition code on the instructions but does allow the instruction in an
ITBlock.
The specification has been recently updated, though this is yet to be
published.
The instructions now should allow a suffix, and should behave in the
standard way around ITBlocks.
This patch removes the custom pred_instruction_type and handling for
these instructions, and uses the standard INSIDE_IT_INSN predication
type to describe the new instructions.
gas/ChangeLog:
2020-02-26 Matthew Malcomson <matthew.malcomson@arm.com>
* config/tc-arm.c (enum pred_instruction_type): Remove
NEUTRAL_IT_NO_VPT_INSN predication type.
(cxn_handle_predication): Modify to require condition suffixes.
(handle_pred_state): Remove NEUTRAL_IT_NO_VPT_INSN cases.
* testsuite/gas/arm/cde-scalar.s: Update test.
* testsuite/gas/arm/cde-warnings.l: Update test.
* testsuite/gas/arm/cde-warnings.s: Update test.
Tom de Vries [Wed, 26 Feb 2020 13:52:00 +0000 (14:52 +0100)]
[gdb] Don't set initial language if set manually
Initially, gdb sets the language to auto/c:
...
$ gdb -q
(gdb) show language
The current source language is "auto; currently c".
...
And after loading a c++ executable, that changes to auto/c++:
...
(gdb) file a.out
Reading symbols from a.out...
(gdb) show language
The current source language is "auto; currently c++".
...
Now consider setting the language manually to c:
...
$ gdb -q
(gdb) show language
The current source language is "auto; currently c".
(gdb) set language c
(gdb) show language
The current source language is "c".
...
The resulting language is manual/c.
Surprisingly, a subsequent load of the c++ executable:
...
(gdb) file a.out
Reading symbols from a.out...
(gdb) show language
The current source language is "c++".
...
gets us language manual/c++.
Loading the file should get us either:
- auto/c++, or
- manual/c.
That is, either the manual setting should be reset by loading, or the manual
setting should persist.
Fix this in the manual/c fashion. [ Though we could make some gdb setting to
choose one or the other. ]
Build and reg-tested on x86_64-linux.
[ Note: In PR23710 comment 1 a cc1 binary is attached for which gdb is slow when
loading and settting a breakpoint on do_rpo_vn:
...
$ time.sh gdb cc1 -batch -ex "b do_rpo_vn"
Breakpoint 1 at 0xd40e30: do_rpo_vn. (2 locations)
maxmem:
1463496
real: 8.88
user: 8.59
system: 0.35
...
This fix enables a speedup by manually setting the language before
loading, reducing executing time with ~17%, due to not having to load the full
symtab containing main:
...
$ time.sh gdb -iex "set language c++" cc1 -batch -ex "b do_rpo_vn"
Breakpoint 1 at 0xd40e30: do_rpo_vn. (2 locations)
maxmem:
1067308
real: 7.36
user: 7.14
system: 0.28
... ]
gdb/ChangeLog:
2020-02-26 Tom de Vries <tdevries@suse.de>
PR gdb/25603
* symfile.c (set_initial_language): Exit-early if
language_mode == language_mode_manual.
gdb/testsuite/ChangeLog:
2020-02-26 Tom de Vries <tdevries@suse.de>
PR gdb/25603
* gdb.base/persistent-lang.cc: New test.
* gdb.base/persistent-lang.exp: New file.
H.J. Lu [Wed, 26 Feb 2020 11:56:28 +0000 (03:56 -0800)]
ld: Add PR ld/25593 tests
PR ld/25593
* testsuite/ld-plugin/lto.exp: Run PR ld/25593 tests.
* testsuite/ld-plugin/pr25593.d: New file.
* testsuite/ld-plugin/pr25593a-1.c: Likewise.
* testsuite/ld-plugin/pr25593a-2.c: Likewise.
* testsuite/ld-plugin/pr25593b.c: Likewise.
* testsuite/ld-plugin/pr25593c.c: Likewise.
* testsuite/ld-plugin/pr25593d.c: Likewise.
* testsuite/ld-plugin/pr25593e.c: Likewise.
Alan Modra [Wed, 26 Feb 2020 06:32:38 +0000 (17:02 +1030)]
Archive sanity checks
Adds some sanity checking to size values read from file.
* archive.c (do_slurp_bsd_armap): Increase minimum parsed_size, and
bfd_set_error on failing test. Don't bother changing bfd_error on
file read error. Check symdef_count is multiple of BSD_SYMDEF_SIZE.
Check sym name is within string buffer. Use size_t for some vars.
(do_slurp_coff_armap): Use size_t for some variables, fix size of
int_buf. Don't change bfd_error on file read error. Use
_bfd_mul_overflow when calculating carsym buffer size. Reorder
calculations to catch overflows before they occur. malloc and
free raw armap rather than using bfd_alloc. Read raw armap before
allocating carsym+strings buffer.
(_bfd_slurp_extended_name_table): Localize variables. Check
name size against file size.
Alan Modra [Wed, 26 Feb 2020 04:44:48 +0000 (15:14 +1030)]
Re: vms buffer overflows and large memory allocation
git commit
c893ce360a changed buffer management, in the process
introducing a bug on an error return path.
* vms-lib.c (vms_lib_read_index): Release correct buffer.
Simon Marchi [Wed, 26 Feb 2020 04:38:26 +0000 (23:38 -0500)]
Move dwarf2_read_addr_index declaration to dwarf2/read.h
The implementation is in dwarf2/read.c, so the declaration belongs in
dwarf2/read.h. Also, move the documentation there.
gdb/ChangeLog:
* dwarf2/loc.h (dwarf2_read_addr_index): Move...
* dwarf2/read.h (dwarf2_read_addr_index): ... here.
* dwarf2/read.c (dwarf2_read_addr_index): Move doc to header.
Alan Modra [Wed, 26 Feb 2020 02:32:42 +0000 (13:02 +1030)]
rx: memory allocation without checking for NULL return
* elf32-rx.c (rx_elf_relocate_section): Use bfd_malloc rather than
malloc. Check for NULL return from bfd_malloc.
(rx_table_find, rx_table_map): Likewise.
(rx_set_section_contents): Check bfd_alloc return.
(rx_dump_symtab): Don't alloc internal_syms or external_syms.
Alan Modra [Wed, 26 Feb 2020 02:27:19 +0000 (12:57 +1030)]
gas gettext warning
gettext("") returns the header entry with meta information, not the
empty string.
* config/tc-arm.c (reg_expected_msgs[REG_TYPE_RNB]): Don't use
N_() on empty string.
Alan Modra [Wed, 26 Feb 2020 02:08:11 +0000 (12:38 +1030)]
gas strncpy warning
Avoid a warning that the buffer may not be zero terminated.
* read.c (read_a_source_file): Call strncpy with length one
less than size of original_case_string.
Alan Modra [Tue, 25 Feb 2020 05:04:46 +0000 (15:34 +1030)]
Indent labels
Labels don't go in the first column according to standard emacs C
indent rules, and I got annoyed enough at seeing diff -p show a label
rather than the function name to fix this.
bfd/
* aoutx.h: Indent labels correctly. Format error strings.
* archive.c: Likewise.
* archive64.c: Likewise.
* coff-arm.c: Likewise.
* coff-rs6000.c: Likewise.
* coff-stgo32.c: Likewise.
* cpu-arm.c: Likewise.
* dwarf2.c: Likewise.
* elf-ifunc.c: Likewise.
* elf-properties.c: Likewise.
* elf-s390-common.c: Likewise.
* elf-strtab.c: Likewise.
* elf.c: Likewise.
* elf32-arm.c: Likewise.
* elf32-bfin.c: Likewise.
* elf32-cr16.c: Likewise.
* elf32-csky.c: Likewise.
* elf32-i386.c: Likewise.
* elf32-m68k.c: Likewise.
* elf32-msp430.c: Likewise.
* elf32-nds32.c: Likewise.
* elf32-nios2.c: Likewise.
* elf32-pru.c: Likewise.
* elf32-xtensa.c: Likewise.
* elf64-ia64-vms.c: Likewise.
* elf64-x86-64.c: Likewise.
* elfcode.h: Likewise.
* elfcore.h: Likewise.
* elflink.c: Likewise.
* elfnn-aarch64.c: Likewise.
* elfnn-ia64.c: Likewise.
* elfnn-riscv.c: Likewise.
* elfxx-mips.c: Likewise.
* elfxx-sparc.c: Likewise.
* elfxx-x86.c: Likewise.
* i386lynx.c: Likewise.
* merge.c: Likewise.
* pdp11.c: Likewise.
* plugin.c: Likewise.
* reloc.c: Likewise.
binutils/
* elfedit.c: Indent labels correctly.
* readelf.c: Likewise.
* resres.c: Likewise.
gas/
* config/obj-elf.c: Indent labels correctly.
* config/obj-macho.c: Likewise.
* config/tc-aarch64.c: Likewise.
* config/tc-alpha.c: Likewise.
* config/tc-arm.c: Likewise.
* config/tc-cr16.c: Likewise.
* config/tc-crx.c: Likewise.
* config/tc-frv.c: Likewise.
* config/tc-i386-intel.c: Likewise.
* config/tc-i386.c: Likewise.
* config/tc-ia64.c: Likewise.
* config/tc-mn10200.c: Likewise.
* config/tc-mn10300.c: Likewise.
* config/tc-nds32.c: Likewise.
* config/tc-riscv.c: Likewise.
* config/tc-s12z.c: Likewise.
* config/tc-xtensa.c: Likewise.
* config/tc-z80.c: Likewise.
* read.c: Likewise.
* symbols.c: Likewise.
* write.c: Likewise.
ld/
* emultempl/cskyelf.em: Indent labels correctly.
* ldfile.c: Likewise.
* ldlang.c: Likewise.
* plugin.c: Likewise.
opcodes/
* aarch64-asm.c: Indent labels correctly.
* aarch64-dis.c: Likewise.
* aarch64-gen.c: Likewise.
* aarch64-opc.c: Likewise.
* alpha-dis.c: Likewise.
* i386-dis.c: Likewise.
* nds32-asm.c: Likewise.
* nfp-dis.c: Likewise.
* visium-dis.c: Likewise.
Alan Modra [Tue, 25 Feb 2020 02:20:10 +0000 (12:50 +1030)]
PR25593, --as-needed breaks DT_NEEDED order with linker plugin
This patch delays setting up DT_NEEDED dynamic tags until all object
files and libraries have been opened and their symbols processed,
rather than adding the tags while processing symbols. Tags are
ordered according to the position of the associated library on the
command line and linker scripts. It is still possible with
--as-needed libs that are mentioned more than once for tags to be
ordered according to which mention was needed. For example with
"--as-needed a.so b.so c.so b.so" when b.so is not needed by a.so or
any other prior object file but is needed by c.so, the order of tags
will be "A C B".
bfd/
PR 25593
* elf-bfd.h (struct elf_link_hash_table): Rename "loaded" to
"dyn_loaded".
(bfd_elf_add_dt_needed_tag): Declare.
* elf-strtab.c (_bfd_elf_strtab_restore): Handle NULL buf.
* elflink.c (bfd_elf_add_dt_needed_tag): Make global and rename
from elf_add_dt_needed_tag. Remove soname and doit param.
(elf_link_add_object_symbols): Don't use elf_add_dt_needed_tag
to see whether as-needed lib is already loaded, use dyn_loaded
list instead. When saving and restoring around as-needed lib
handle possibility that dynstr has not been initialised. Don't
add DT_NEEDED tags here. Limit dyn_loaded list to dynamic libs.
Mark libs loaded via DT_NEEDED entries of other libs with
DYN_NO_NEEDED if they should not be mentioned in DT_NEEDED of
the output.
(elf_link_check_versioned_symbol): Remove now unneccesary
DYNAMIC check when traversing dyn_loaded list.
ld/
PR 25593
* ldelf.c (ldelf_try_needed): Add DT_NEEDED lib to input_bfds.
(ldelf_after_open): Save state of input_bfds list before loading
DT_NEEDED libs. Traverse input_bfds list adding DT_NEEDED tags.
Restore input_bfds list.
* testsuite/ld-cris/gotplt1.d: Adjust for changed .dynstr order.
Alan Modra [Tue, 25 Feb 2020 02:18:43 +0000 (12:48 +1030)]
Limit bogus archive parsed_size
Archive element size is given by data in the archive, and thus is
subject to attack by fuzzers. The only harm this allows is allocation
of huge amounts of memory, but some systems don't handle that well.
So limit archive element size to archive file size.
* bfdio.c (bfd_get_file_size): Ignore bogus archive element sizes.
GDB Administrator [Wed, 26 Feb 2020 00:00:30 +0000 (00:00 +0000)]
Automatic date update in version.in
Andrew Burgess [Wed, 19 Feb 2020 19:01:51 +0000 (19:01 +0000)]
Merge upstream GCC changes for include/ and libiberty/ directories
This commit pulls in the latest changes for the include/ and
libiberty/ directories. The last sync was in commit
533da48302a26885a972e4379eccc26b364e5b53.
This commit also removes the file libiberty/rust-demangle.h, this file
has been removed in upstream GCC, and should have been deleted as part
of the previous sync up, which included this ChangeLog entry:
2019-11-16 Eduard-Mihai Burtescu <eddyb@lyken.rs>
....
* rust-demangle.h: Remove.
I've grep'd over the binutils-gdb source and can find no reference to
the rust-demangle.h file, and everything seems to build fine without
it, so I assume its continued existence was a mistake.
include/ChangeLog:
Import from gcc mainline:
2020-02-05 Andrew Burgess <andrew.burgess@embecosm.com>
* hashtab.h (htab_remove_elt): Make a parameter const.
(htab_remove_elt_with_hash): Likewise.
libiberty/ChangeLog:
* rust-demangle.h: Removed.
Import from gcc mainline:
2020-02-05 Andrew Burgess <andrew.burgess@embecosm.com>
* hashtab.c (htab_remove_elt): Make a parameter const.
(htab_remove_elt_with_hash): Likewise.
2020-01-23 Alexandre Oliva <oliva@adacore.com>
* argv.c (writeargv): Output empty args as "".
2020-01-18 Iain Sandoe <iain@sandoe.co.uk>
* cp-demangle.c (cplus_demangle_operators): Add the co_await
operator.
* testsuite/demangle-expected: Test co_await operator mangling.
Andrew Burgess [Sat, 18 Jan 2020 22:38:29 +0000 (22:38 +0000)]
gdb/fortran: Support negative array stride in one limited case
This commit adds support for negative Fortran array strides in one
limited case, that is the case of a single element array with a
negative array stride.
The changes in this commit will be required in order for more general
negative array stride support to work correctly, however, right now
other problems in GDB prevent negative array strides from working in
the general case.
The reason negative array strides don't currently work in the general
case is that when dealing with such arrays, the base address for the
objects data is actually the highest addressed element, subsequent
elements are then accessed with a negative offset from that address,
and GDB is not currently happy with this configuration.
The changes here can be summarised as, stop treating signed values as
unsigned, specifically, the array stride, and offsets calculated using
the array stride.
This issue was identified on the mailing list by Sergio:
https://sourceware.org/ml/gdb-patches/2020-01/msg00360.html
The test for this issue is a new one written by me as the copyright
status of the original test is currently unknown.
gdb/ChangeLog:
* gdbtypes.c (create_array_type_with_stride): Handle negative
array strides.
* valarith.c (value_subscripted_rvalue): Likewise.
gdb/testsuite/ChangeLog:
* gdb.fortran/derived-type-striding.exp: Add a new test.
* gdb.fortran/derived-type-striding.f90: Add pointer variable for
new test.
Luis Machado [Tue, 25 Feb 2020 14:56:58 +0000 (11:56 -0300)]
[AArch64] Fix typo in comment
Just a trivial typo fix in a comment.
gdb/ChangeLog
2020-02-25 Luis Machado <luis.machado@linaro.org>
* aarch64-tdep.c (aarch64_vnv_type): Fix comment typo.
Andrew Burgess [Tue, 25 Feb 2020 14:37:25 +0000 (14:37 +0000)]
gdb/testsuite: Remove source file path from test name
Having paths in test names makes comparing test results from two
separate runs (in different directories) harder.
gdb/testsuite/ChangeLog:
* gdb.base/cached-source-file.exp: Avoid source file paths in test
names.
H.J. Lu [Tue, 25 Feb 2020 11:30:33 +0000 (03:30 -0800)]
Don't call lto-wrapper for ar and ranlib
Since ar and ranlib don't need to know symbol types to work properly,
we should avoid calling lto-wrapper for them to speed them up.
bfd/
PR binutils/25584
* plugin.c (need_lto_wrapper_p): New.
(bfd_plugin_set_program_name): Add an int argument to set
need_lto_wrapper_p.
(get_lto_wrapper): Return FALSE if need_lto_wrapper_p isn't
set.
* plugin.h (bfd_plugin_set_program_name): Add an int argument.
binutils/
PR binutils/25584
* ar.c (main): Pass 0 to bfd_plugin_set_program_name.
* nm.c (main): Pass 1 to bfd_plugin_set_program_name.
Claudiu Zissulescu [Tue, 25 Feb 2020 08:27:07 +0000 (10:27 +0200)]
[ARC][committed] Update int_vector_base aux register.
INT_VECTOR_BASE auxiliary register is available across all ARC
architectures.
xxxx-xx-xx Claudiu Zissulescu <claziss@gmail.com>
* arc-regs.h (int_vector_base): Make it available for all ARC
CPUs.
Signed-off-by: Claudiu Zissulescu <claziss@gmail.com>
Tom de Vries [Tue, 25 Feb 2020 07:14:41 +0000 (08:14 +0100)]
[gdb/testsuite] Remove gcc/93866 xfail in methods.exp
The test-case gdb.go/methods.exp contains an xfail for PR gcc/93866.
However, that PR has been marked resolved-wontfix, with clarification that the
gccgo symbol names for methods are correct, even if they're not the same as
for gc.
Remove the xfail.
Tested on x86_64-linux with gccgo-10.
gdb/testsuite/ChangeLog:
2020-02-25 Tom de Vries <tdevries@suse.de>
PR go/18926
* gdb.go/methods.exp: Remove gcc/93866 xfail.
Simon Marchi [Tue, 25 Feb 2020 05:13:31 +0000 (00:13 -0500)]
Move dwarf2_get_die_type declaration to dwarf2/read.h
Since its implementation is in dwarf2/read.c, its declaration belongs in
dwarf2/read.h. Move the documentation to the .h at the same time.
gdb/ChangeLog:
* loc.h (dwarf2_get_die_type): Move to...
* read.h (dwarf2_get_die_type): ... here.
* read.c (dwarf2_get_die_type): Move doc to header.
Joel Brobecker [Tue, 25 Feb 2020 03:36:45 +0000 (07:36 +0400)]
gdb/copyright.py: Add generated files in gnulib/ to exclude list
This will prevent this script from updating the copyright year range
for those files.
Note that aclocal.m4 and configure are already in the EXCLUDE_ALL_LIST,
so they don't need to be added to the EXCLUDE_LIST.
gdb/ChangeLog:
* copypright.py (EXCLUDE_LIST): Add 'gnulib/config.in' and
'gnulib/Makefile.in' to the list.
GDB Administrator [Tue, 25 Feb 2020 00:00:33 +0000 (00:00 +0000)]
Automatic date update in version.in
Tom Tromey [Mon, 24 Feb 2020 22:50:57 +0000 (15:50 -0700)]
Fix a memory leak and remove an unused member
I noticed that setup_type_unit_groups leaks the symtab vector -- it
allocates this with XNEWVEC, but from what I can tell, nothing frees
it. This patch changes it to use XOBNEWVEC.
Also, the type_unit_unshareable::num_symtabs member is assigned but
never read. So, this removes it.
gdb/ChangeLog
2020-02-24 Tom Tromey <tom@tromey.com>
* dwarf2/read.h (struct type_unit_unshareable) <num_symtabs>:
Remove.
* dwarf2/read.c (dwarf2_cu::setup_type_unit_groups): Use
XOBNEWVEC.
Tom Tromey [Mon, 24 Feb 2020 22:50:57 +0000 (15:50 -0700)]
Convert IS_TYPE_UNIT_GROUP to method
This converts the IS_TYPE_UNIT_GROUP to a method on
dwarf2_per_cu_data.
gdb/ChangeLog
2020-02-24 Tom Tromey <tom@tromey.com>
* dwarf2/read.h (struct dwarf2_per_cu_data) <type_unit_group_p>:
New method.
* dwarf2/read.c (IS_TYPE_UNIT_GROUP): Remove.
(dw2_do_instantiate_symtab, dw2_get_file_names)
(build_type_psymtab_dependencies, load_full_type_unit): Update.
Tom Tromey [Mon, 24 Feb 2020 22:50:57 +0000 (15:50 -0700)]
Simplify setting of reading_partial_symbols
This simplifies the setting and clearing of reading_partial_symbols,
by using scoped_restore in the function that reads partial symbols.
gdb/ChangeLog
2020-02-24 Tom Tromey <tom@tromey.com>
* dwarf2read.c (dwarf2_build_psymtabs_hard): Use
make_scoped_restore.
(dwarf2_psymtab::read_symtab): Don't clear
reading_partial_symbols.
Andrew Burgess [Mon, 24 Feb 2020 16:39:26 +0000 (16:39 +0000)]
gdb/doc: Fix header alignment of 'info threads' example output
Fixes small white space issue in the example output of 'info threads'.
gdb/doc/ChangeLog:
* gdb.texinfo (Threads): Fix alignment in 'info threads' example
output.
Nick Clifton [Mon, 24 Feb 2020 14:52:34 +0000 (14:52 +0000)]
Updated translations for some of the binutils sub-directories.
Nick Clifton [Mon, 24 Feb 2020 14:39:34 +0000 (14:39 +0000)]
Fix a spelling mistake in the binutils documentation.
PR 25499
* doc/binutils.texi (objdump): Fix typo in description of
objdump's -g option.
Tom de Vries [Mon, 24 Feb 2020 14:32:36 +0000 (15:32 +0100)]
[gdb] Ensure listing of unused static var in info locals
Consider a test-case compiled with -g:
...
int main (void) {
static int b = 2;
return 0;
}
...
When running info locals in main, we get:
...
(gdb) info locals
No locals.
...
The info locals documentation states:
...
Print the local variables of the selected frame, each on a separate line.
These are all variables (declared either static or automatic) accessible at
the point of execution of the selected frame.
...
So, "info locals" should have printed static variable b.
The variable is present in dwarf info:
...
<2><14a>: Abbrev Number: 6 (DW_TAG_variable)
<14b> DW_AT_name : b
<153> DW_AT_const_value : 2
...
but instead of a location attribute, it has a const_value attribute, which
causes the corresponding symbol to have LOC_CONST, which causes info locals to
skip it.
Fix this by handling LOC_CONST in iterate_over_block_locals.
Build and reg-tested on x86_64-linux.
gdb/ChangeLog:
2020-02-24 Tom de Vries <tdevries@suse.de>
PR gdb/25592
* stack.c (iterate_over_block_locals): Handle LOC_CONST.
gdb/testsuite/ChangeLog:
2020-02-24 Tom de Vries <tdevries@suse.de>
PR gdb/25592
* gdb.base/info-locals-unused-static-var.c: New test.
* gdb.base/info-locals-unused-static-var.exp: New file.
Tom de Vries [Mon, 24 Feb 2020 11:30:48 +0000 (12:30 +0100)]
[gdb/testsuite] Fix layout next/prev/regs help message
With test-case gdb.gdb/unittest.exp, I run into:
...
(gdb) maintenance selftest^M
...
Running selftest help_doc_invariants.^M
help doc broken invariant: command 'layout next' help doc first line is \
not terminated with a '.' character^M
help doc broken invariant: command 'layout prev' help doc first line is \
not terminated with a '.' character^M
help doc broken invariant: command 'layout regs' help doc first line is \
not terminated with a '.' character^M
Self test failed: self-test failed at help-doc-selftests.c:95^M
...
Fix this by adding the missing '.' character.
Build and reg-tested on x86_64-linux.
gdb/ChangeLog:
2020-02-24 Tom de Vries <tdevries@suse.de>
* tui/tui-layout.c (_initialize_tui_layout): Fix help messages for
commands layout next/prev/regs.
Alan Modra [Mon, 24 Feb 2020 02:49:13 +0000 (13:19 +1030)]
Re: vms buffer overflows and large memory allocation
The last patch wasn't quite correct. I'd missed the fact that sbm_off
had been updated.
* vms-lib.c (_bfd_vms_lib_archive_p): Correct overflow checks.
Alan Modra [Mon, 24 Feb 2020 01:22:03 +0000 (11:52 +1030)]
vms buffer overflows and large memory allocation
* vms-lib.c (struct carsym_mem): Add limit.
(vms_add_index): Heed limit.
(vms_traverse_index): Catch buffer overflows. Remove outdated fixme.
(vms_lib_read_index): Set up limit. Catch 32-bit overflow.
Always return actual number read.
(_bfd_vms_lib_archive_p): Catch buffer overflows. Replace
assertion with error exit.
GDB Administrator [Mon, 24 Feb 2020 00:00:33 +0000 (00:00 +0000)]
Automatic date update in version.in
Simon Marchi [Sun, 23 Feb 2020 01:31:54 +0000 (20:31 -0500)]
gdb: update gnulib import
This is mostly to get this commit from gnulib:
e22cd2677a4b7beacbf30b93bb0559f7b89f96ce
Add ‘extern "C"’ to count-one-bits.h etc.
... which fixes this compilation problem I observed with clang++:
CXXLD gdb
arch/arm-get-next-pcs.o:arm-get-next-pcs.c:function thumb_get_next_pcs_raw(arm_get_next_pcs*): error: undefined reference to 'count_one_bits(unsigned int)'
<more such undefined references>
I built-tested on GNU/Linux x86-64 (gcc-9 and clang-9) as well as with the
x86_64-w64-mingw32-gcc cross-compiler.
gnulib/ChangeLog:
* update-gnulib.sh (GNULIB_COMMIT_SHA1): Bump to
e22cd2677a4b7beacbf30b93bb0559f7b89f96ce.
* Makefile.in, config.in, configure, import/*: Re-generate.
GDB Administrator [Sun, 23 Feb 2020 00:01:37 +0000 (00:01 +0000)]
Automatic date update in version.in
Tom Tromey [Sat, 22 Feb 2020 20:49:56 +0000 (13:49 -0700)]
Make dwarf2_compile_expr_to_ax static
I noticed that dwarf2_compile_expr_to_ax can be static. Nothing
outside of loc.c calls it.
gdb/ChangeLog
2020-02-22 Tom Tromey <tom@tromey.com>
* dwarf2/loc.h (dwarf2_compile_expr_to_ax): Don't declare.
* dwarf2/loc.c (dwarf2_compile_expr_to_ax): Now static.