Shahab Vahedi [Wed, 19 Feb 2020 13:56:02 +0000 (14:56 +0100)]
gdb/testsuite: Regenerate the testglue if it is not in
For running the DejaGnu tests, some esoteric configurations
may require a testglue. This, for instance, is true about
testing ARC targets which uses its own DejaGnu board and
a simulator which does not support returning the program's exit
code. Therefore, for those tests that use "gdb_compile", a
"gdb_tg.o" file is compiled and linked into the final
executable.
There are tests that invoke "gdb_compile" from different
directories. Let's take a look at an example test:
gdb.base/fullname.exp. The purpose of this test is to build
the executable from different directories (absolute vs. relative
vs. other) and then check if gdb can handle setting breakpoints
accordingly.
When "gdb_compile" generates the "gdb_tg.o", it does not
do it again for the same test. Although this might seem
efficient, it can lead to problems when changing directories
before the next compile:
gdb compile failed, arc-elf32-gcc: error: gdb_tg.o:
No such file or directory
This patch checks if the wrapper file ("gdb_tg.o") is still in
reach and if it is not, it will stimulate the regeneration of
the wrapper.
It is worth mentioning that GCC's DejaGnu tests handle these
scenarios as well and they seem to be more efficient in doing so
by saving the library paths and manipulating them if necessary
[1]. However, for GDB tests, that require less compilations,
I think the proposed solution should be fine compared to a more
full fledged solution from GCC. The glue file in our case is
only 2 KiB.
Last but not least, I ran the x86_64 tests on an x86_64 host and
found no regression.
[1]
Avid coders may look for "set_ld_library_path_env_vars" in
gcc/testsuite/lib/target-libpath.exp.
gdb/testsuite/ChangeLog:
* lib/gdb.exp (gdb_wrapper_init): Reset
"gdb_wrapper_initialized" to 0 if "wrapper_file" does
not exist.
Tom Tromey [Fri, 21 Feb 2020 01:22:09 +0000 (18:22 -0700)]
Fix latent bug in dwarf2_find_containing_comp_unit
dwarf2_find_containing_comp_unit has this in its binary search:
if (mid_cu->is_dwz > offset_in_dwz
|| (mid_cu->is_dwz == offset_in_dwz
&& mid_cu->sect_off + mid_cu->length >= sect_off))
high = mid;
The intent here is to determine whether SECT_OFF appears in or before
MID_CU.
I believe this has an off-by-one error, and that the check should use
">" rather than ">=". If the two side are equal, then SECT_OFF
actually appears at the start of the next CU.
I've had this patch kicking around for ages but I forget how I found
the problem.
gdb/ChangeLog
2020-02-20 Tom Tromey <tom@tromey.com>
* dwarf2/read.c (dwarf2_find_containing_comp_unit): Use ">", not
">=", in binary search.
(dwarf2_find_containing_comp_unit): New overload.
(run_test): New self-test.
(_initialize_dwarf2_read): Register new test.
Nelson Chu [Wed, 12 Feb 2020 10:18:51 +0000 (02:18 -0800)]
RISC-V: Support the read-only CSR checking.
CSRRW and CSRRWI always write CSR. CSRRS, CSRRC, CSRRSI and CSRRCI write CSR
when RS1 isn't zero. The CSR is read only if the [11:10] bits of CSR address
is 0x3. The read-only CSR can not be written by the CSR instructions.
gas/
* config/tc-riscv.c (riscv_ip): New boolean insn_with_csr to indicate
we are assembling instruction with CSR. Call riscv_csr_read_only_check
after parsing all arguments.
(enum csr_insn_type): New enum is used to classify the CSR instruction.
(riscv_csr_insn_type, riscv_csr_read_only_check): New functions. These
are used to check if we write a read-only CSR by the CSR instruction.
* testsuite/gas/riscv/priv-reg-fail-read-only-01.s: New testcase. Test
all CSR for the read-only CSR checking.
* testsuite/gas/riscv/priv-reg-fail-read-only-01.d: Likewise.
* testsuite/gas/riscv/priv-reg-fail-read-only-01.l: Likewise.
* testsuite/gas/riscv/priv-reg-fail-read-only-02.s: New testcase. Test
all CSR instructions for the read-only CSR checking.
* testsuite/gas/riscv/priv-reg-fail-read-only-02.d: Likewise.
* testsuite/gas/riscv/priv-reg-fail-read-only-02.l: Likewise.
Nelson Chu [Wed, 12 Feb 2020 10:18:50 +0000 (02:18 -0800)]
RISC-V: Disable the CSR checking by default.
Add new .option `csr-check/no-csr-check` and GAS option `-mcsr-check
/-mno-csr-check` to enbale/disable the CSR checking. Disable the CSR
checking by default.
gas/
* config/tc-riscv.c: Add new .option and GAS options to enbale/disable
the CSR checking. We disable the CSR checking by default.
(reg_lookup_internal): Check the `riscv_opts.csr_check`
before we doing the CSR checking.
* doc/c-riscv.texi: Add description for the new .option and assembler
options.
* testsuite/gas/riscv/priv-reg-fail-fext.d: Add `-mcsr-check` to enable
the CSR checking.
* testsuite/gas/riscv/priv-reg-fail-rv32-only.d: Likewise.
Nelson Chu [Wed, 12 Feb 2020 10:18:49 +0000 (02:18 -0800)]
RISC-V: Support the ISA-dependent CSR checking.
According to the riscv privilege spec, some CSR are only valid when rv32 or
the specific extension is set. We extend the DECLARE_CSR and DECLARE_CSR_ALIAS
to record more informaton we need, and then check whether the CSR is valid
according to these information. We report warning message when the CSR is
invalid, so we have a choice between error and warning by --fatal-warnings
option. Also, a --no-warn/-W option is used to turn the warnings off, if
people don't want the warnings.
gas/
* config/tc-riscv.c (enum riscv_csr_class): New enum. Used to decide
whether or not this CSR is legal in the current ISA string.
(struct riscv_csr_extra): New structure to hold all extra information
of CSR.
(riscv_init_csr_hash): New function. According to the DECLARE_CSR and
DECLARE_CSR_ALIAS, insert CSR extra information into csr_extra_hash.
Call hash_reg_name to insert CSR address into reg_names_hash.
(md_begin): Call riscv_init_csr_hashes for each DECLARE_CSR.
(reg_csr_lookup_internal, riscv_csr_class_check): New functions.
Decide whether the CSR is valid according to the csr_extra_hash.
(init_opcode_hash): Update 'if (hash_error != NULL)' as hash_error is
not a boolean. This is same as riscv_init_csr_hash, so keep the
consistent usage.
* testsuite/gas/riscv/csr-dw-regnums.d: Add -march=rv32if option.
* testsuite/gas/riscv/priv-reg.d: Add f-ext by -march option.
* testsuite/gas/riscv/priv-reg-fail-fext.d: New testcase. The source
file is `priv-reg.s`, and the ISA is rv32i without f-ext, so the
f-ext CSR are not allowed.
* testsuite/gas/riscv/priv-reg-fail-fext.l: Likewise.
* testsuite/gas/riscv/priv-reg-fail-rv32-only.d: New testcase. The
source file is `priv-reg.s`, and the ISA is rv64if, so the
rv32-only CSR are not allowed.
* testsuite/gas/riscv/priv-reg-fail-rv32-only.l: Likewise.
include/
* opcode/riscv-opc.h: Extend DECLARE_CSR and DECLARE_CSR_ALIAS to
record riscv_csr_class.
opcodes/
* riscv-dis.c (print_insn_args): Updated since the DECLARE_CSR is changed.
gdb/
* riscv-tdep.c: Updated since the DECLARE_CSR is changed.
* riscv-tdep.h: Likewise.
* features/riscv/rebuild-csr-xml.sh: Generate the 64bit-csr.xml without
rv32-only CSR.
* features/riscv/64bit-csr.xml: Regernated.
binutils/
* dwarf.c: Updated since the DECLARE_CSR is changed.
Alan Modra [Thu, 20 Feb 2020 11:23:44 +0000 (21:53 +1030)]
PR25569, PDP11 ld -s clobbers last data byte
This patch fixes an ancient wart in aout support, in that text and
data section sizes are rounded up for alignment rather that just the
corresponding header sizes. Changing section sizes could conceivably
result in buffer overflows if section contents were held in memory.
Also, keeping the original section sizes allows this PR to be fixed
nicely.
bfd/
PR 25569
* aoutx.h (adjust_o_magic, adjust_z_magic, adjust_n_magic): Use
"text", "data" and "bss" section pointer vars. Don't update
section size, just exec header sizes.
(adjust_sizes_and_vmas): Don't update text section size. Set
initial exec header a_text. Print exec headers sizes.
* pdp11.c (adjust_o_magic, adjust_z_magic, adjust_n_magic),
(adjust_sizes_and_vmas): Similarly. Formatting.
(final_link): Correct final file extension.
gas/
PR 25569
* config/obj-aout.c (obj_aout_frob_file_before_fix): Don't loop
on section size adjustment, instead perform another write if
exec header size is larger than section size.
Make '{putchar,fputc}_unfiltered' use 'fputs_unfiltered'
There is currently a regression when using
'{putchar,fputc}_unfiltered' with 'puts_unfiltered' which was
introduced by one of the commits that reworked the unfiltered print
code.
The regression makes it impossible to use '{putchar,fputc}_unfiltered'
with 'puts_unfiltered', because the former writes directly to the
ui_file stream using 'stream->write', while the latter uses a buffered
mechanism (see 'wrap_buffer') and delays the printing.
If you do a quick & dirty hack on e.g. top.c:show_gdb_datadir:
rebuild GDB and invoke the "show data-directory" command, you will
see:
(gdb) show data-directory
>
TESTPUTSGDB's data directory is "/usr/local/share/gdb".
Note how the '>' was printed before the output, and "TEST" and "PUTS"
were printed together.
My first attempt to fix this was to always call 'flush_wrap_buffer' at
the end of 'fputs_maybe_filtered', since it seemed to me that the
function should always print what was requested. But I wasn't sure
this was the right thing to do, so I talked to Tom on IRC and he gave
me another, simpler idea: make '{putchar,fputc}_unfiltered' call into
the already existing 'fputs_unfiltered' function.
This patch implements the idea. I regtested it on the Buildbot, and
no regressions were detected.
gdb/ChangeLog:
2020-02-20 Sergio Durigan Junior <sergiodj@redhat.com>
Tom Tromey <tom@tromey.com>
Tom de Vries [Thu, 20 Feb 2020 16:46:17 +0000 (17:46 +0100)]
[gdb/testsuite] Fix hello.go xpass
With gdb.go/hello.go, we run into an xpass:
...
Thread 1 "hello" hit Breakpoint 1, main.main () at hello.go:7^M
7 func main () {^M
(gdb) print st^M
$1 = 0x0 ""^M
(gdb) XPASS: gdb.go/hello.exp: starting string check
...
The xfail is setup as follows:
...
\# This used to print "", i.e., the local "st" initialized as "".
setup_xfail "*-*-*"
It's not clear what gccgo/gc PR this xfail refers to.
It's also not clear why the empty string is both:
- listed as reason for xfail, and
- used in the pass pattern.
Furthermore, there's a comment in the hello.go testcase:
...
st := "Hello, world!" // this intentionally shadows the global "st"
...
while there's no global st variable present, only a variable myst:
...
var myst = "Shall we?"
...
Fix this by splitting up the test-case in two test-cases, hello.{go,exp} and
global-local-var-shadow.{go,exp}.
In hello.exp we no longer attempt to print st before its declaration. In
hello.go we remove the myst variable as well the comment related to shadowing.
In global-local-var-shadow.go, we rename myst to st, such that the comment
related to shadowing is correct. In global-local-var-shadow.exp we attempt to
print the value of st before the local definition, which should print the
value of the global definition, and xfail this with reference to GCC PR93844.
Tested on x86_64-linux, with gccgo 10.
gdb/testsuite/ChangeLog:
2020-02-20 Tom de Vries <tdevries@suse.de>
PR go/17018
* gdb.go/hello.exp: Copy ...
* gdb.go/global-local-var-shadow.exp: ... here. New file. Expect
print of st to print value of global definition. Add xfail for GCC
PR93844.
* gdb.go/hello.exp: Remove printing of st before definition.
* gdb.go/hello.go: Copy ...
* gdb.go/global-local-var-shadow.go: ... here. New test. Rename myst
to st.
* gdb.go/hello.go: Remove myst. Remove comment about shadowing.
gdbserver: finish turning the target ops vector into a class
Now that 'process_stratum_target' has a single field left, namely 'pt'
of type 'process_target', and that all the requests to a
'process_stratum_target' are forwarded to 'pt', meld the
'process_target' class into 'process_stratum_target'.
This essentially means
1. All the references of the form 'the_target->pt' become 'the_target'.
2. All the uses of the name 'process_target' become
'process_stratum_target'.
3. The platform-specific target op vectors (e.g. linux_target_ops) are
removed and instances of their "process target" classes are used
instead.
gdbserver/ChangeLog:
2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com>
* target.h (struct process_stratum_target): Remove.
(class process_target): Rename to ...
(class process_stratum_target): ... this.
* linux-low.h (class linux_process_target): Derive from
'process_stratum_target'.
* linux-low.cc (linux_target_ops): Remove.
(initialize_low): Set the_target to the singleton instance of
linux_process_target.
* lynx-low.h (class lynx_process_target): Derive from
'process_stratum_target'.
* lynx-low.cc (lynx_target_ops): Remove.
(initialize_low): Set the_target to the singleton instance of
lynx_process_target.
* nto-low.h (class nto_process_target): Derive from
'process_stratum_target'.
* nto-low.cc (nto_target_ops): Remove.
(initialize_low): Set the_target to the singleton instance of
nto_process_target.
* win32-low.h (class win32_process_target): Derive from
'process_stratum_target'.
* win32-low.cc (win32_target_ops): Remove.
(initialize_low): Set the_target to the singleton instance of
win32_process_target.
Replace 'the_target->pt' with 'the_target' in the uses below.
Pedro Alves [Mon, 17 Feb 2020 15:12:03 +0000 (16:12 +0100)]
gdbserver: simply copy the pointer in 'set_target_ops'
The 'set_target_ops' function takes a target op vector and creates a
clone of it via XNEW and memcpy. This is not necessary. 'the_target'
is a singleton, and the argument that is passed to 'set_target_ops' is
always the address of a global, static object. Therefore, update the
implementation to simply copy the pointer.
gdbserver/ChangeLog:
2020-02-20 Pedro Alves <palves@redhat.com>
* target.cc (set_target_ops): Simply copy the given target pointer
instead of creating a copy of the pointed object.
gdbserver: turn breakpoint kind-related target ops into methods
gdbserver/ChangeLog:
2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com>
Turn process_stratum_target's breakpoint_kind_from_pc,
sw_breakpoint_from_kind, and breakpoint_kind_from_current_state
ops into methods of process_target.
* target.h (struct process_stratum_target): Remove the target op.
(class process_target): Add the target op.
(target_breakpoint_kind_from_pc): Update the macro.
(target_breakpoint_kind_from_current_state): Update the macro.
(default_breakpoint_kind_from_pc): Remove declaration.
* target.cc (default_breakpoint_kind_from_pc): Turn into ...
(process_target::breakpoint_kind_from_pc): ... this.
(process_target::breakpoint_kind_from_current_state): Define.
gdbserver: start turning the target ops vector into a class
This is the beginning of a series of patches where the goal is to turn
the target ops vector into a class and all the target op function
pointers into methods of this class.
Currently, the target ops is a struct of function pointers. At the
end of the series, it becomes a class with methods, and the existing
low target definitions become subclasses. That is, we end up with the
following class hierarchy:
process_stratum_target either defines the default behavior for the
target ops or leaves them as pure virtual for the subclasses to
override.
The transformation is done by first introducing a helper class, called
'process_target', that is initially empty. An instance of this class
is added to the end of the current target ops vector. This new field
is called 'pt'. We will gradually carry target ops to the new class,
one by one, whereas the invocation of the target op will be converted
to a method call on 'pt'.
For instance, target op 'attach' is currently invoked as
(*the_target->attach) (args)
After moving 'attach' as a method to 'process_target', it will be
invoked as
the_target->pt->attach (args)
In this process, the concrete target vector definitions
(e.g. linux-low, win32-low, nto-low, etc.) are turned into derived
classes of 'process_target', so that they can either inherit the
default behavior of the target ops or can override the method.
We prefer to make this transition gradually rather than in a single
giant patch, to yield bite-size patches. The goal is that after each
patch gdbserver will still be buildable and testable.
The general rule of thumb when converting a target op to a method is
this:
(1) If the function call is protected with a NULL-check with an
obvious default behavior, simply implement that default behavior in
the base class (e.g.: supports_non_stop).
(2) If there is no NULL-check guard, the method becomes pure
virtual, and the derived targets are required to implement the method
(e.g.: attach).
(3) If there is a NULL-check but no apparent default behavior, or if
the NULL-check is utilized to populate a feature support packet,
introduce a 'supports_XYZ' method (e.g.: pid_to_exec_file).
The overall strategy is to preserve the existing behavior as much as
possible.
When we're done moving all the target ops into 'process_target', the
target op vector will contain nothing but the field 'pt'. At that
point, the auxiliary class 'process_target' will simply meld into
'process_stratum_target' and the method calls of the form
'the_target->pt->xyz' will be turned into 'the_target->xyz'.
The "linux-low" target has been built and reg-tested on X86_64 Linux
(Ubuntu). The "win32-low" target has been built (but not tested) via
cross-compilation to a x86_64-w64-mingw32 target. The "lynx-low" and
"nto-low" targets were neither built nor tested.
gdbserver/ChangeLog:
2020-02-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com>
* target.h (class process_target): New class definition.
(struct process_stratum_target) <pt>: New field with type
'process_target*'.
* linux-low.h (class linux_process_target): Define as a derived
class of 'process_target'.
* linux-low.cc (linux_target_ops): Add a linux_process_target*
as the 'pt' field.
* lynx-low.h (class lynx_process_target): Define as a derived
class of 'process_target'.
* lynx-low.cc (lynx_target_ops): Add a lynx_process_target*
as the 'pt' field.
* nto-low.h (class nto_process_target): Define as a derived
class of 'process_target'.
* nto-low.cc (nto_target_ops): Add an nto_process_target*
as the 'pt' field.
* win32-low.h (class win32_process_target): Define as a derived
class of 'process_target'.
* win32-low.cc (win32_target_ops): Add a win32_process_target*
as the 'pt' field.
Nick Clifton [Thu, 20 Feb 2020 13:08:29 +0000 (13:08 +0000)]
Stop the BFD library from automatically converting OS and PROC specific symbol section indicies to SHN_ABS, and provide a hook for backends to decide how such indicies should be processed.
* elf-bfd.h (struct elf_backend_data): Add symbol_section_index
callback.
* elfxx-target.h (elf_backend_symbol_section_index): Provide
default definition.
(elfNN_bed): Initialise the symbol_section_index field.
* elf.c (swap_out_syms): Call symbol_section_index, if defined, on
OS and PROC specific section indicies. Warn if converting other
reserved incidies to SHN_ABS.
Andrew Burgess [Fri, 17 Jan 2020 00:10:22 +0000 (00:10 +0000)]
gdb: Allow more control over where to find python libraries
The motivation behind this commit is to make it easier to bundle the
Python *.py library files with GDB when statically linking GDB against
libpython. The Python files will be manually added into the GDB
installation tree, and GDB should be able to find them at run-time.
The installation tree will look like this:
The benefit here is that the entire installation tree can be bundled
into a single archive and copied to another machine with a different
version of Python installed, and GDB will still work, including its
Python support.
In use the new configure options would be used something like this,
first build and install a static Python library:
mkdir python
cd python
# Clone or download Python into a src/ directory.
mkdir build
export PYTHON_INSTALL_PATH=$PWD/install
cd build
../src/configure --disable-shared --prefix=$PYTHON_INSTALL_PATH
make
make install
Now build and install GDB:
mkdir binutils-gdb
cd binutils-gdb
# Clone or download GDB into a src/ directory.
mkdir build
export GDB_INSTALL_DIR=$PWD/install
cd build
../src/configure \
--prefix=$GDB_INSTALL_DIR \
--with-python=$PYTHON_INSTALL_PATH/bin/python3 \
--with-python-libdir=$GDB_INSTALL_DIR/lib
make all-gdb
make install-gdb
Finally, copy the Python libraries into the GDB install:
After this the Python src, build, and install directories are no
longer needed and can be deleted.
If the new --with-python-libdir option is not used then the existing
behaviour is left unchanged, GDB will look for the Python libraries in
the lib/ directory within the python path. The concatenation of the
python prefix and the string 'lib/' is now done at configure time,
rather than at run time in GDB as it was previous, however, this was
never something that the user had dynamic control over, so there's no
loss of functionality.
Jim Wilson [Wed, 19 Feb 2020 22:51:07 +0000 (14:51 -0800)]
RISC-V: Convert the ADD/ADDI to the compressed MV/LI if RS1 is zero.
2020-02-19 Nelson Chu <nelson.chu@sifive.com>
gas/
* testsuite/gas/riscv/c-add-addi.d: New testcase.
* testsuite/gas/riscv/c-add-addi.s: Likewise.
opcodes/
* riscv-opc.c (riscv_opcodes): Convert add/addi to the compressed
c.mv/c.li if rs1 is zero.
Tom de Vries [Wed, 19 Feb 2020 21:57:19 +0000 (22:57 +0100)]
[gdb/testsuite] Fix xpass in gdb.python/lib-types.exp
When running gdb.python/lib-types.exp, we have an xpass:
...
(gdb) python print (str (typedef_const_typedef_class1_ref_obj.type))^M
typedef_const_typedef_class1_ref^M
(gdb) XPASS: gdb.python/lib-types.exp: \
python print (str (typedef_const_typedef_class1_ref_obj.type)) \
(PRMS gcc/55641)
...
When running the same with gcc 4.8, we have an xfail instead:
...
(gdb) python print (str (typedef_const_typedef_class1_ref_obj.type))^M
const typedef_const_typedef_class1_ref^M
(gdb) XFAIL: gdb.python/lib-types.exp: \
python print (str (typedef_const_typedef_class1_ref_obj.type)) \
(PRMS gcc/55641)
...
Fix the xpass by xfailing only for the gcc 4.8 pattern.
Tom de Vries [Wed, 19 Feb 2020 21:33:42 +0000 (22:33 +0100)]
[gdb/testsuite] Fix funcall_ref.exp xpass
When running gdb.ada/funcall_ref.exp I run into two XPASSes:
...
(gdb) p get ("Hello world!")^M
$1 = (n => 12, s => "Hello world!")^M
(gdb) XPASS: gdb.ada/funcall_ref.exp: p get ("Hello world!")
ptype get ("Hello world!")^M
type = <ref> record^M
n: natural;^M
s: access array (1 .. n) of character;^M
end record^M
(gdb) XPASS: gdb.ada/funcall_ref.exp: ptype get ("Hello world!")
...
The xfails are documented in funcall_ref.exp:
...
# Currently, GCC describes such functions as returning pointers (instead of
# references).
setup_xfail *-*-*
...
Using gnatmake 4.8, we can reproduce the XFAILs:
...
(gdb) p get ("Hello world!")^M
$1 = (access foo.bar) 0x6147b0 <system.secondary_stack.chunk+48>^M
(gdb) XFAIL: gdb.ada/funcall_ref.exp: p get ("Hello world!")
ptype get ("Hello world!")^M
type = access record^M
n: natural;^M
s: access array (1 .. n) of character;^M
end record^M
(gdb) XFAIL: gdb.ada/funcall_ref.exp: ptype get ("Hello world!")
...
Fix the XPASSes by:
- removing the xfail setup
- switching the order of the two tests
- detecting the "access record" type and declaring the first test unsupported,
and skipping the second test
Tested on x86_64-linux, both with gnatmake 4.8.5 and gnatmake 7.5.0.
gdb/testsuite/ChangeLog:
2020-02-19 Tom de Vries <tdevries@suse.de>
* gdb.ada/funcall_ref.exp: Replace xfail setup by unsupported check.
This is a simple cleanup. These functions used to use the objfile's
obstack for allocation in the hash tables, but they don't anymore.
Remove the unnecessary objfile parameters, which in turn allows removing
some local variables.
Tom de Vries [Wed, 19 Feb 2020 20:33:39 +0000 (21:33 +0100)]
[gdb/testsuite] Fix corefile-buildid.exp with check-read1
When running gdb.base/corefile-buildid.exp using check-read1, I run into:
...
FAIL: gdb.base/corefile-buildid.exp: shared: info files (timeout)
FAIL: gdb.base/corefile-buildid.exp: symlink shared: info files (timeout)
FAIL: gdb.base/corefile-buildid.exp: shared sepdebug: info files (timeout)
FAIL: gdb.base/corefile-buildid.exp: symlink shared sepdebug: info files \
(timeout)
...
This is caused by attempting to match the output of an "info files" command
using a single gdb_test in check_exec_file.
Fix this by doing line-by-line matching in check_exec_file.
Tested on x86_64-linux, using make targets check and check-read1.
gdb/testsuite/ChangeLog:
2020-02-19 Tom de Vries <tdevries@suse.de>
* gdb.base/corefile-buildid.exp (check_exec_file): Match info files
output line-by-line.
Tom Tromey [Wed, 19 Feb 2020 19:18:09 +0000 (12:18 -0700)]
Fix declaration of mips_pc_is_mips
A build where CORE_ADDR is not the same as bfd_vma pointed out that
mips_pc_is_mips is declared using bfd_vma as the parameter type, but
defined using CORE_ADDR. This patch fixes the declaration.
gdb/ChangeLog
2020-02-19 Tom Tromey <tromey@adacore.com>
* mips-tdep.h (mips_pc_is_mips): Parameter type is CORE_ADDR.
Andrew Burgess [Wed, 5 Feb 2020 11:50:07 +0000 (11:50 +0000)]
Merge changes from GCC for the config/ directory
GCC's config/ChangeLog since the last time this merge was done
(in the binutils-gdb commit 0b4d000cc4e8e77c823) is included at the
end of this commit message.
It is worth noting that the binutils-gdb commit 301a9420d947da1458
added the file config/debuginfod.m4 which is not present in GCC's
config/ directory. This file is preserved, unmodified, after this
commit.
In order to regenerate all of the configure files, I configured with
--enable-maintainer-mode, and built the 'all' target. I then did the
same thing on a source tree without this patch, and only committed
those files that changed when this patch was added.
2020-01-27 Andrew Burgess <andrew.burgess@embecosm.com>
* lib-link.m4 (AC_LIB_LINKFLAGS_BODY): Add new
--with-libXXX-type=... option. Use this to guide the selection of
either a shared library or a static library.
PR bootstrap/85574
* bootstrap-lto.mk (extra-compare): Set to gcc/lto1$(exeext).
2019-04-16 Martin Liska <mliska@suse.cz>
* bootstrap-lto-lean.mk: Filter out -flto in STAGEtrain_CFLAGS.
2019-04-09 Martin Liska <mliska@suse.cz>
* bootstrap-lto-lean.mk: New file.
2019-03-02 Johannes Pfau <johannespfau@gmail.com>
* mh-mingw: Also set __USE_MINGW_ACCESS flag for C++ code.
2018-10-31 Joseph Myers <joseph@codesourcery.com>
PR bootstrap/82856
* math.m4, tls.m4: Use AC_LANG_SOURCE.
Merge from binutils-gdb:
2018-06-19 Simon Marchi <simon.marchi@ericsson.com>
* override.m4 (_GCC_AUTOCONF_VERSION): Bump from 2.64 to 2.69.
config/ChangeLog:
* ax_count_cpus.m4: New file, backported from GCC.
* bootstrap-Og.mk: New file, backported from GCC.
* bootstrap-lto-lean.mk: New file, backported from GCC.
* bootstrap-lto.mk: Changes backported from GCC.
* futex.m4: Changes backported from GCC.
* gthr.m4: Changes backported from GCC.
* lib-link.m4: Changes backported from GCC.
* mh-mingw: Changes backported from GCC.
* no-executables.m4: Changes backported from GCC.
* tls.m4: Changes backported from GCC.
* toolexeclibdir.m4: New file, backported from GCC.
bfd
* cpu-z80.c: Add machine type compatibility checking.
gas
* config/tc-z80.c (md_parse_option): Do not use an underscore
prefix for local labels in SDCC compatability mode.
(z80_start_line_hook): Remove SDCC dollar label support.
* testsuite/gas/z80/sdcc.d: Update expected disassembly.
* testsuite/gas/z80/sdcc.s: Likewise.
Tom Tromey [Wed, 19 Feb 2020 14:50:21 +0000 (07:50 -0700)]
Remove useless NULL check in python.c
I noticed that do_start_initialization, in python.c, checks the result
of xmalloc. However, xmalloc cannot fail, so this check is useless.
This patch also changes the code to use XNEWVEC.
gdb/ChangeLog
2020-02-19 Tom Tromey <tromey@adacore.com>
* python/python.c (do_start_initialization): Use XNEWVEC. Remove
NULL check.
H.J. Lu [Wed, 19 Feb 2020 12:54:45 +0000 (04:54 -0800)]
x86: Mark cvtpi2ps and cvtpi2pd as MMX
* config/tc-i386.c (output_insn): Mark cvtpi2ps and cvtpi2pd
with GNU_PROPERTY_X86_FEATURE_2_MMX.
* testsuite/gas/i386/i386.exp: Run property-3 and
x86-64-property-3.
* testsuite/gas/i386/property-3.d: New file.
* testsuite/gas/i386/property-3.s: Likewise.
* testsuite/gas/i386/x86-64-property-3.d: Likewise.
Tom de Vries [Wed, 19 Feb 2020 07:24:44 +0000 (08:24 +0100)]
[gdb/testsuite] Be quiet about missing prelink in solib-overlap.exp
When running gdb.base/solib-overlap.exp, I get:
...
Running src/gdb/testsuite/gdb.base/solib-overlap.exp ...
sh: prelink: command not found
=== gdb Summary ===
nr of untested testcases 1
...
The verbose output on stdout/stderr is due to using system to execute
prelink, which also means that the output is not captured in gdb.log and
gdb.sum.
Fix this by using exec instead of system.
Tested on x86_64-linux, with:
- no prelink installed, and
- a fake prelink installed, using "cp /usr/bin/echo ~/bin/prelink".
gdb/testsuite/ChangeLog:
2020-02-19 Tom de Vries <tdevries@suse.de>
* gdb.base/solib-overlap.exp: Use exec instead of system to execute
prelink.
Tom de Vries [Wed, 19 Feb 2020 06:05:13 +0000 (07:05 +0100)]
[gdb/testsuite] Ignore pass in gdb_caching_proc
Before commit d4295de4f3 "[gdb/testsuite] Handle missing gnatmake in
gnat_runtime_has_debug_info", calling the gdb_caching_proc
gnat_runtime_has_debug_info could generate a pass because of using
gdb_compile_ada.
This has been fixed in that commit by using a factored out variant
gdb_compile_ada_1, which does not call pass.
Additionally, fix cases like this in more generic way: by ignoring pass calls
during execution of a gdb_caching_proc.
Build and reg-tested on x86_64-linux.
gdb/testsuite/ChangeLog:
2020-02-19 Tom de Vries <tdevries@suse.de>
* lib/cache.exp (ignore_pass, gdb_do_cache_wrap): New proc.
(gdb_do_cache): Use gdb_do_cache_wrap.
* gdb.base/gdb-caching-proc.exp (test_proc): Use gdb_do_cache_wrap.
Alan Modra [Wed, 19 Feb 2020 02:45:20 +0000 (13:15 +1030)]
Miscellaneous memory alloc related fixes
Some minor tidies. Allocating memory for internal relocs and symbols
after reading external relocs is slightly better with fuzzed files.
You can at least do something about silly sizes that way.
* aoutx.h (slurp_reloc_table): Allocate reloc_cache after
reading external relocs.
* ecoff.c (ecoff_slurp_reloc_table): Likewise.
* archive.c (_bfd_write_archive_contents): Don't twiddle bfd_error
after bfd_bread.
* archive64.c (_bfd_archive_64_bit_slurp_armap): Remove unnecessary
bfd_release.
* elf32-m32c.c (m32c_offset_for_reloc): Make shndx_buf a bfd_byte*.
(m32c_elf_relax_section): Likewise.
* elf32-rl78.c (rl78_offset_for_reloc): Likewise.
(rl78_elf_relax_section): Likewise.
* elf32-rx.c (rx_offset_for_reloc): Likewise.
(elf32_rx_relax_section): Likewise.
* mach-o.c (bfd_mach_o_alloc_and_read): Move earlier with better
parameter types and use..
(bfd_mach_o_read_dylinker, bfd_mach_o_read_dylib),
(bfd_mach_o_read_fvmlib, bfd_mach_o_read_str): ..in these functions.
* peicode.h (pe_bfd_object_p): Don't zero the part of opthdr
being read from file, just the extra.
* som.c (som_slurp_symbol_table): Allocate internal symbol buffer
after reading external syms. Free on failure.
Alan Modra [Wed, 19 Feb 2020 02:45:06 +0000 (13:15 +1030)]
_bfd_mul_overflow
This patch removes the bfd_alloc2 series of memory allocation functions,
replacing them with __builtin_mul_overflow followed by bfd_alloc. Why
do that? Well, a followup patch will implement _bfd_alloc_and_read
and I don't want to implement alloc2 variants as well.
Alan Modra [Wed, 19 Feb 2020 02:44:45 +0000 (13:14 +1030)]
alloc2 used unnecessarily
The bfd_alloc2 series of functions were invented to handle cases where
nmemb * size can overflow. This patch changes some places where the
calculation can't overflow.
* elf.c (bfd_section_from_shdr): Use bfd_zalloc rather than
bfd_zalloc2.
(assign_section_numbers): Likewise.
(elf_map_symbols): Likewise, and bfd_alloc rather than bfd_alloc2.
(_bfd_elf_map_sections_to_segments): Use bfd_malloc rather than
bfd_malloc2, size_t amt, and unsigned tls_count.
(rewrite_elf_program_header): Use bfd_malloc and size_t amt.
* elflink.c (elf_create_symbuf): Use bfd_malloc.
(elf_output_implib): Use bfd_alloc.
Alan Modra [Wed, 19 Feb 2020 02:44:28 +0000 (13:14 +1030)]
bfd_get_size cache
We have calls to bfd_get_size when swapping in ELF section headers.
Since object files can have a large number of sections, it's worth
caching the file size rather than making lots of stat system calls.
* bfd.c (struct bfd): Move format and direction to other
bitfields. Add "size".
* bfdio.c (bfd_get_size): Cache size when not writing file.
* opncls.c (bfd_get_debug_link_info_1): Allow for bfd_get_size
returning zero, ie. unknown.
(bfd_get_alt_debug_link_info): Likewise.
* bfd-in2.h: Regenerate.