On 64-bit FC25, the _dl_runtime_resolve function uses a conditional branch to
'call' a particular variant optimized for that system:
(gdb) disas _dl_runtime_resolve_avx_opt
Dump of assembler code for function _dl_runtime_resolve_avx_opt:
0x00007ffff7deeb60 <+0>: push %rax
0x00007ffff7deeb61 <+1>: push %rcx
0x00007ffff7deeb62 <+2>: push %rdx
0x00007ffff7deeb63 <+3>: mov $0x1,%ecx
0x00007ffff7deeb68 <+8>: xgetbv
0x00007ffff7deeb6b <+11>: mov %eax,%r11d
0x00007ffff7deeb6e <+14>: pop %rdx
0x00007ffff7deeb6f <+15>: pop %rcx
0x00007ffff7deeb70 <+16>: pop %rax
0x00007ffff7deeb71 <+17>: and $0x4,%r11d
0x00007ffff7deeb75 <+21>: bnd je 0x7ffff7def4a0 <_dl_runtime_resolve_sse_vex>
End of assembler dump.
When computing the function-level trace, btrace treats this as a switch from
_dl_runtime_resolve_avx_opt to _dl_runtime_resolve_sse_vex. We know that we
switched functions but we can't really say in which caller/callee relationship
those two functions are.
In addition to preserving the indentaion level, also preserve the caller
information. This is a heuristic since we don't really know. But at least in
this case, this seems to be the right thing to do.
This fixes a fail in gdb.btrace/rn-dl-bind.exp on 64-bit FC25.
gdb/
* btrace.c (ftrace_new_switch): Preserve up link and flags.
"_gp" could conflict with ABI-complient code. While it's probably OK
because MIPS uses this name, we figured it'd be good to clean this up
before a release with RISC-V in it.
ld/ChangeLog:
2017-02-13 Palmer Dabbelt <palmer@dabbelt.com>
* emulparams/elf32lriscv-defs.sh (SDATA_START_SYMBOLS): Change
_gp to __global_pointer$.
bfd/ChangeLog:
2017-02-13 Palmer Dabbelt <palmer@dabbelt.com>
* elfnn-riscv.c (riscv_global_pointer_value): Change _gp to
__global_pointer$.
2017-02-13 Thomas Preud'homme <thomas.preudhomme@arm.com>
gas/
* config/tc-arm.c (parse_ifimm_zero): Make prefix optional in unified
syntax.
* testsuite/gas/arm/vcmp-noprefix-imm.d: New file.
* testsuite/gas/arm/vcmp-noprefix-imm.s: New file.
PR binutils/21139
* readelf.c (target_specific_reloc_handling): Add num_syms
parameter. Check for symbol table overflow before accessing
symbol value. If reloc pointer is NULL, discard all saved state.
(apply_relocations): Pass num_syms to target_specific_reloc_handling.
Call target_specific_reloc_handling with a NULL reloc pointer
after processing all of the relocs.
This fairly obvious patch adds usage text to the load command's help text.
Originally it did not have usage and mentioned things like FILE and OFFSET
without explaining how those should be passed in the command.
gdb/ChangeLog:
2017-02-13 Luis Machado <lgustavo@codesourcery.com>
* symfile (_initialize_symfile): Add usage text to the load command's
help text.
gdb/doc/ChangeLog:
2017-02-13 Luis Machado <lgustavo@codesourcery.com>
* gdb.texinfo (Target Commands): Document the optional offset
argument for the load command.
This patch addresses timeout failures i noticed while testing aarch64-elf.
FAIL: gdb.linespec/explicit.exp: complete unique function name (timeout)
FAIL: gdb.linespec/explicit.exp: complete non-unique function name (timeout)
FAIL: gdb.linespec/explicit.exp: complete non-existant function name (timeout)
FAIL: gdb.linespec/explicit.exp: complete unique file name (timeout)
FAIL: gdb.linespec/explicit.exp: complete non-unique file name (timeout)
The timeouts were caused by an attempt to match a bell character (x07) that
doesn't show up on my particular test setup.
The bell character is output whenever one tries to complete a pattern and there
are multiple possible matches. When there is only one possible match, GDB will
complete the input pattern without outputting the bell character.
The reason for the discrepancy in this test's behavior is due to the use of
"main" for a unique name test.
On glibc-based systems, GDB may notice the "main_arena" symbol, which is
a data global part of glibc's malloc implementation. Therefore a bell character
will be output because we have a couple possible completion matches.
GDB should not be outputting such a data symbol as a possible match, but this
problem may/will be addressed in a future change and is besides the point of
this particular change.
On systems that are not based on glibc, GDB will not see any other possible
matches for completing "main", so there will be no bell characters.
The use of main is a bit fragile though, so the patch adds a new local function
with a name that has a greater chance of being unique and adjusts the test to
iuse it.
I've also added the regular expression switch (-re) to all the
gdb_test_multiple calls that were missing it. Hopefully this will reduce the
chances of someone wasting time trying to match a regular expression (a much
more common use case) when, in reality, the pattern is supposed to be matched
literally.
gdb/testsuite/ChangeLog
2017-02-13 Luis Machado <lgustavo@codesourcery.com>
* gdb.linespec/explicit.c (my_unique_function_name): New function.
(main): Call my_unique_function_name.
* gdb.linespec/explicit.exp: Use my_unique_function_name to test
completion of patterns with a single match.
Add missing -re switches to gdb_test_multiple calls.
This test attempts to load a x86 core file no matter what target
architectures the tested GDB supports. If GDB doesn't know how to handle
a i386 target, it is very likely the core file will not be recognized.
In this case we should still attempt to load a core file to make sure GDB
doesn't crash or throws an internal error. But we should not proceed to
try to read memory unconditionally.
This patch makes the test check for proper i386 arch support in GDB and bails
out if i386 is not supported and the core file format is not recognized.
This addresses the spurious aarch64-elf failures i'm seeing for this test.
gdb/testsuite/ChangeLog:
2017-02-13 Luis Machado <lgustavo@codesourcery.com>
* gdb.arch/i386-biarch-core.exp: Check for i386 arch support and
return if core file is not recognized.
PR binutils/21137
* readelf.c (target_specific_reloc_handling): Add end parameter.
Check for buffer overflow before writing relocated values.
(apply_relocations): Pass end to target_specific_reloc_handling.
* cgen-opc.c (cgen_lookup_insn): Delete buf and base_insn temps.
Use insn_bytes_value and insn_int_value directly instead. Don't
free allocated memory until function exit.
This is a follow-up to
https://sourceware.org/ml/gdb-patches/2017-02/msg00261.html
This patch restricts queries to the main UI, which allows to avoid two
different problems.
The first one is that GDB is issuing queries on secondary MI channels
for which a TTY is allocated. The second one is that GDB is not able to
handle queries on two (CLI) UIs simultaneously. Restricting queries to
the main UI allows to bypass these two problems.
More details on how/why these two problems happen:
1. Queries on secondary MI UI
The current criterion to decide if we should query the user is whether
the input stream is a TTY. The original way to start GDB in MI mode
from a front-end was to create a subprocess with pipes to its
stdin/stdout. In this case, the input was considered non-interactive
and queries were auto-answered. Now that front-ends can create the MI
channel as a separate UI connected to a dedicated TTY, GDB now
considers this input stream as interactive and sends queries to it.
By restricting queries to the main UI, we make sure we never query on
the secondary MI UI.
2. Simultaneous queries
As Pedro stated it, when you have two queries on two different CLI UIs
at the same time, you end up with the following pseudo stack:
#0 gdb_readline_wrapper
#1 defaulted_query // for UI #2#2 handle_command
#3 execute_command ("handle SIGTRAP" ....
#4 stdin_event_handler // input on UI #2#5 gdb_do_one_event
#7 gdb_readline_wrapper
#8 defaulted_query // for UI #1#9 handle_command
#10 execute_command ("handle SIGINT" ....
#11 stdin_event_handler // input on UI #1#12 gdb_do_one_event
#13 gdb_readline_wrapper
trying to answer the query on UI #1 will therefore answer for UI #2.
By restricting the queries to the main UI, we ensure that there will
never be more than one pending query, since you can't have two queries
on a UI at the same time.
I added a snippet to gdb.base/new-ui.exp to verify that we get a query
on the main UI, but that we don't on the secondary one (or, more
precisely, that it gets auto-answered).
gdb/ChangeLog:
* utils.c (defaulted_query): Don't query on secondary UIs.
gdb/testsuite/ChangeLog:
* gdb.base/new-ui.exp (do_test): Test queries behavior on main
and extra UIs.
I found another unused "cleanup" local variable, this time in
rust-lang.c. This patch removes it. Committing as obvious.
gdb/ChangeLog
2017-02-10 Tom Tromey <tom@tromey.com>
* rust-lang.c (rust_get_disr_info): Remove unused variable.
While testing this series I saw some errors from the Python test
suite. There were a couple of tests using "P" as a command; this
changes them to "p".
gdb/testsuite/ChangeLog
2017-02-10 Tom Tromey <tom@tromey.com>
* gdb.python/py-xmethods.exp: Use "p" command, not "P".
I found an unused local variables in a couple of places in the Python
code; this removes them.
gdb/ChangeLog
2017-02-10 Tom Tromey <tom@tromey.com>
* python/py-value.c (valpy_richcompare_throw): Remove unnecessary
"cleanup" local.
* python/py-type.c (typy_legacy_template_argument): Remove
unnecessary "cleanup" local.
This patch slightly refactors a couple of spots in the Python code to
avoid some gotos.
gdb/ChangeLog
2017-02-10 Tom Tromey <tom@tromey.com>
* python/python.c (do_start_initialization): New function, from
_initialize_python.
(_initialize_python): Call do_start_initialization.
* python/py-linetable.c (ltpy_iternext): Use explicit returns, not
goto.
This patch changes one more spot in the Python layer to use gdbpy_ref.
gdb/ChangeLog
2017-02-10 Tom Tromey <tom@tromey.com>
* python/py-prettyprint.c (pretty_print_one_value): Use
gdbpy_ref.
This uses the new gdbpy_ref template to simplify logic in various
parts of the Python layer; for example removing repeated error code or
removing gotos.
gdb/ChangeLog
2017-02-10 Tom Tromey <tom@tromey.com>
* python/py-cmd.c (cmdpy_destroyer): Use gdbpy_ref.
* python/py-breakpoint.c (gdbpy_breakpoint_deleted): Use
gdbpy_ref.
* python/py-type.c (field_new): Use gdbpy_ref.
* python/py-symtab.c (symtab_and_line_to_sal_object): Use
gdbpy_ref.
* python/py-progspace.c (pspy_new): Use gdbpy_ref.
(py_free_pspace): Likewise.
(pspace_to_pspace_object): Likewise.
* python/py-objfile.c (objfpy_new): Use gdbpy_ref.
(py_free_objfile): Likewise.
(objfile_to_objfile_object): Likewise.
* python/py-inferior.c (delete_thread_object): Use
gdbpy_ref.
(infpy_read_memory): Likewise.
(py_free_inferior): Likewise.
* python/py-evtregistry.c (create_eventregistry_object): Use
gdbpy_ref.
* python/py-event.c (create_event_object): Use gdbpy_ref.
This turns gdbpy_ref into a template class, so that it can be used to
wrap subclasses of PyObject. The default argument remains PyObject;
and this necessitated renaming uses of "gdbpy_ref" to "gdbpy_ref<>".
gdb/ChangeLog
2017-02-10 Tom Tromey <tom@tromey.com>
* python/py-ref.h (gdbpy_ref_policy): Now a template.
(gdbpy_ref): Now a template; allow subclasses of PyObject to be
used.
* python/py-arch.c, python/py-bpevent.c, python/py-breakpoint.c,
python/py-cmd.c, python/py-continueevent.c, python/py-event.c,
python/py-exitedevent.c, python/py-finishbreakpoint.c,
python/py-framefilter.c, python/py-function.c,
python/py-inferior.c, python/py-infevents.c,
python/py-linetable.c, python/py-newobjfileevent.c,
python/py-param.c, python/py-prettyprint.c, python/py-ref.h,
python/py-signalevent.c, python/py-stopevent.c,
python/py-symbol.c, python/py-threadevent.c, python/py-type.c,
python/py-unwind.c, python/py-utils.c, python/py-value.c,
python/py-varobj.c, python/py-xmethods.c, python/python.c,
varobj.c: Change gdbpy_ref to gdbpy_ref<>.
This patch introduces a bit of infrastructure -- namely, a minimal
std::optional analogue called gdb::optional, and an RAII template
class that works like make_cleanup_ui_out_tuple_begin_end or
make_cleanup_ui_out_list_begin_end -- and then uses these in the
Python code. This removes a number of cleanups and generally
simplifies this code.
std::optional is only available in C++17. Normally I would have had
this code check __cplusplus, but my gcc apparently isn't new enough to
find <optional>, even with -std=c++1z; so, because I could not test
it, the patch does not do this.
gdb/ChangeLog
2017-02-10 Tom Tromey <tom@tromey.com>
* ui-out.h (ui_out_emit_type): New class.
(ui_out_emit_tuple, ui_out_emit_list): New typedefs.
* python/py-framefilter.c (py_print_single_arg): Use gdb::optional
and ui_out_emit_tuple.
(enumerate_locals): Likewise.
(py_mi_print_variables, py_print_locals, py_print_args): Use
ui_out_emit_list.
(py_print_frame): Use gdb::optional, ui_out_emit_tuple,
ui_out_emit_list.
* common/gdb_optional.h: New file.
Currently, the breakpoint documentation refers to some commands taking breakpoint
"ranges" as arguments. We discussed this with Pedro and concluded that it would
be more accurate to speak in terms of breakpoint "lists", whose elements can optionally
be ranges. I also fixed a couple of minor mistakes in the docs.
gdb/ChangeLog:
* breakpoint.c (_initialize_breakpoint): Update the help description
of the 'commands' command to indicate that it takes a list argument.
gdb/doc/ChangeLog:
* gdb.texinfo (Breakpoints): Reword documentation to speak in terms of
space-separated breakpoint lists. Also add a missing @table command
and @cindex for breakpoint lists.
gdb/testsuite/ChangeLog:
* gdb.base/help.exp: Update match pattern for testing 'help commands'.
This commit fixes a segmentation fault on tab completion when
certain debuginfo is installed:
https://bugzilla.redhat.com/show_bug.cgi?id=1398387
gdb/ChangeLog:
* symtab.c (add_symtab_completions): Prevent NULL pointer
dereference.
If we are configuring for an arc/linux target, and --with-cpu=nps400 is
used at configure time then change the default linker emulation to the
nps specific version. All of the alternative linker emulations are
still available using the -mNAME option for ld.
ld/ChangeLog:
* configure.tgt (arc*-*-linux*): Change the default linker
emulation based on --with-cpu selection.
* NEWS: Mention new configuration option.
This commit removes interp::quiet_p / interp_quiet_p /
interp_set_quiet, because AFAICS, it doesn't really do anything.
interp_quiet is only ever checked inside interp_set nowadays:
if (!first_time && !interp_quiet_p (interp))
{
xsnprintf (buffer, sizeof (buffer),
"Switching to interpreter \"%.24s\".\n", interp->name);
current_uiout->text (buffer);
}
I did a bit of archaelogy, and found that back in 4a8f6654 (2003), it
was also called in another place, to decide whether to print the CLI
prompt.
AFAICS, that condition is always false today, making that if/then
block always dead code. If we remove that code, then there are no
interp_quiet_p uses left in the tree, so we can remove it all.
There are two paths that lead to interp_set calls:
#1 - When installing the top level interpreter. In this case,
FIRST_TIME is true.
#2 - In interpreter_exec_cmd. In this case, the interpreter is always
set quiet before interp_set is called.
Grepping a gdb.log of an x86_64 GNU/Linux run for "Switching to
interpreter" (before this patch) doesn't find any hits.
I suspect the intention of this message was to support something like
a "set interpreter ..." command that would change the interpreter
permanently. But there's no such command.
Tested on x86_64 Fedora 23.
gdb/ChangeLog:
2017-02-08 Pedro Alves <palves@redhat.com>
* interps.c (interp::interp): Remove reference to quiet_p.
(interp_set): Make static. Remove dead "Switching to" output
code.
(interp_quiet_p, interp_set_quiet): Delete.
(interpreter_exec_cmd): Don't set the interpreter quiet.
* interps.h (interp_quiet_p): Make static.
(class interp) <quiet_p>: Remove field
When defining a new macro, "command" is not recognized as an alias for
"commands":
(gdb) define breakmain
Type commands for definition of "breakmain".
End with a line saying just "end".
>break main
>command
>echo "IN MAIN\n"
>end
(gdb)
There is a special case for while-stepping, where 'ws' and 'stepping' are
recognized explicitely. Instead of adding more special cases, this change
uses cli-decode.
gdb/ChangeLog:
* cli/cli-decode.c (find_command_name_length): Make it extern.
* cli/cli-decode.h (find_command_name_length): Declare.
* cli/cli-script.c (command_name_equals, line_first_arg):
New functions.
(process_next_line): Use cli-decode to parse command names.
(build_command_line): Make args a constant pointer.
gdb/testsuite/ChangeLog:
* gdb.base/define.exp: Add test for command abbreviations
in define.
Case-insensitive search for command names is an obscure undocumented
feature, which seems to be unused, is not tested and not quite
consistent. Remove it.
gdb/ChangeLog:
* cli-decode.c (lookup_cmd_1, lookup_cmd_composition):
Remove case-insensitive search.
bfd/ChangeLog
2017-02-07 Andrew Waterman <andrew@sifive.com>
* elfnn-riscv.c (riscv_elf_finish_dynamic_sections): Only write PLT
entry size if PLT header is written.
gdb/ChangeLog:
2017-02-07 Jose E. Marchesi <jose.marchesi@oracle.com>
* sparc-tdep.c (sparc32_gdbarch_init): Do not place a + operator
at the end of the line.
Fixes ld/testsuite/ld-elf/shared.exp "Build libpr16496b.so".
The root cause is in bfd/elf64-sparc.c, elf64_sparc_slurp_one_reloc_table(),
bfd_get_symcount() was used for dynamic mode as well. The fix is to use
bfd_get_dynamic_symcount().
This has been tested with sparc64-linux-gnu, and it does not introduce any
regressions.
bfd/ChangeLog:
2017-02-06 Sheldon Lobo <sheldon.lobo@oracle.com>
Fix sparc64 dynamic relocation processing to use the dynamic
symbol count.
* elf64-sparc.c (elf64_sparc_slurp_one_reloc_table): Use 'dynamic'
to determine if bfd_get_symcount() or bfd_get_dynamic_symcount()
should be used.
This patch addresses BZ 21005, which is gdb failing to recognize an rdrand
instruction.
It enables support for both rdrand and rdseed and handles extended register
addressing (R8~R15) for 16-bit, 32-bit and 64-bit.
gdb/ChangeLog
2017-02-06 Luis Machado <lgustavo@codesourcery.com>
* NEWS: Mention support for record/replay of Intel 64 rdrand and
rdseed instructions.
i386-tdep.c (i386_process_record): Handle Intel 64 rdrand and rseed.
gdb/testsuite/ChangeLog:
2017-02-06 Luis Machado <lgustavo@codesourcery.com>
* gdb.reverse/insn-reverse.c: Include insn-reverse-x86.c.
* gdb.reverse/insn-reverse-x86.c: New file.