* NEWS: Add item.
* symtab.h (compare_filenames_for_search): Declare.
* symtab.c (compare_filenames_for_search): New function.
(iterate_over_some_symtabs): Use it.
* symfile.h (struct quick_symbol_functions)
<map_symtabs_matching_filename>: Change spec.
* psymtab.c (partial_map_symtabs_matching_filename): Use
compare_filenames_for_search. Update for new spec.
* dwarf2read.c (dw2_map_symtabs_matching_filename): Use
compare_filenames_for_search. Update for new spec.
* breakpoint.c (clear_command): Use compare_filenames_for_search.
gdb/doc
* gdb.texinfo (Specify Location): Document relative file name
handling.
gdb/testsuite
* gdb.linespec/linespec.exp: Change some tests to use $decimal.
Add tests for relative directory.
* breakpoint.c (create_sals_from_address_default): New function.
(create_breakpoints_sal_default): Likewise.
(decode_linespec_default): Likewise.
(is_marker_spec): Removed.
(strace_marker_p): New function.
(init_breakpoint_sal): Using `strace_marker_p' instead of
`is_marker_spec'.
(create_breakpoint): Call method `create_sals_from_address' from
breakpoint_ops, replacing code that created SALs conditionally
on the type of the breakpoint. Call method `create_breakpoints_sal',
replacing code that created breakpoints conditionally on the type
wanted.
(base_breakpoint_create_sals_from_address): New function.
(base_breakpoint_create_breakpoints_sal): Likewise.
(base_breakpoint_decode_linespec): Likewise.
(base_breakpoint_ops): Add methods
`base_breakpoint_create_sals_from_address',
`base_breakpoint_create_breakpoints_sal' and
`base_breakpoint_decode_linespec'.
(bkpt_create_sals_from_address): New function.
(bkpt_create_breakpoints_sal): Likewise.
(bkpt_decode_linespec): Likewise.
(tracepoint_create_sals_from_address): Likewise.
(tracepoint_create_breakpoints_sal): Likewise.
(tracepoint_decode_linespec): Likewise.
(strace_marker_create_sals_from_address): Likewise.
(strace_marker_create_breakpoints_sal): Likewise.
(strace_marker_decode_linespec): Likewise.
(strace_marker_breakpoint_ops): New variable.
(addr_string_to_sals): Remove `marker_spec'. Call method
`decode_linespec' from breakpoint_ops, replacing code that decoded
an address string into a SAL. Use `strace_marker_p' instead of
`marker_spec'.
(strace_command): Decide whether we are dealing with a static
tracepoint with marker or not. Use the appropriate breakpoint_ops.
(initialize_breakpoint_ops): Initialize new fields of breakpoint_ops.
* breakpoint.h (linespec_result, linespec_sals): New forward
declarations.
(breakpoint_ops) <create_sals_from_address>,
<create_breakpoints_sal>, <decode_linespec>: New methods.
* varobj.c (ANONYMOUS_STRUCT_NAME): Define.
(ANONYMOUS_UNION_NAME): Define.
(is_path_expr_parent): New function.
(get_path_expr_parent): New function.
(is_anonymous_child): New function.
(create_child_with_value): If the child is anonymous and without
a name, assign an object name to it.
(c_describe_child): Use get_path_expr_parent to determine
the parent expression.
If there field represents an anonymous struct or union and
has no name, set an appropriate display name and expression.
(cplus_describe_child): Likewise.
(varobj_tree::get_path_expr): Assume that all varobjs are
compound unless they are known simple types.
Adjust path expressions based on parent type, path parent type,
and tree language.
(varobj_tree::walk_tree): Add LANGUAGE parameter and save it into
the root varobj.
(mi_walk_varobj_tree): Add LANGUAGE parameter.
* common/gdb_assert.h (gdb_static_assert): Rename static_assert to
an internal gdb_static_assert.
* mi/mi-common.c: Rename static_assert to gdb_static_assert.
First, fix a technical problem with the function recurser. The test sets a
watch on local_x at a point where its value is technically undefined. The
test is written assuming that the value is not initially 2, but nothing in the
C standard guarantees that.
Second, augment the existing test for variables in recursive calls to check an
equivalent expression that explicitly sets the scope of the local variable
being tracked.
2012-01-11 Paul Hilfinger <hilfingr@adacore.com>
* gdb.base/watchpoint.c (recurser): Initialize local_x.
(main): Repeat recurser call.
* gdb.base/watchpoint.exp: Check that 'watch recurser::local_x' is
equivalent to 'local_x'.
This test stops inside a recursive function after a few levels of recursion,
goes up some frames, and then accesses a local variable with 'print foo::val'
rather than the usual 'print val' to see if the former pays attention to the
selected frame.
2012-01-11 Paul Hilfinger <hilfingr@adacore.com>
Joel Brobecker <brobecker@adacore.com>
* gdb.base/recpar.c, gdb.base/recpar.exp: New files.
GDB used to search for the frame containing variables in a particular
lexical block starting from the current (top) frame, ignoring any
currently selected frame. It is not clear why this is desirable for
variables that require a frame; why would a user deliberately select
one frame and then expect to see the value of a variable in a more
recent frame? This change causes block_innermost_frame to start
looking from the selected frame, if there is one. It may be
unnecessarily conservative: we use get_selected_frame_if_set rather
than get_selected_frame in order to avoid the side effect of calling
select_frame, which would probably be harmless.
Expression-parsing routines previously made the unwarranted assumption
that all block-qualified variables (written with the GDB extension
<block>::<variable>) are static. As a result, they failed to update
innermost_block, which confused the watch commands about when
variables in watched expressions went out of scope, and also caused
the wrong variables to be watched. This patch also modifies these
routines to treat all local variables the same whether or not they are
block-qualified.
Finally, we add a paragraph to the "Program Variables" section of the texinfo
documentation concerning the use of "::" for accessing non-static variables.
2012-01-11 Paul Hilfinger <hilfingr@adacore.com>
* gdb/blockframe.c (block_innermost_frame): Start search from selected
frame, if present, or otherwise the current frame.
* gdb/c-exp.y (variable): Update innermost_block for
'block COLONCOLON NAME' clause.
* gdb/m2-exp.y (variable): Ditto.
* gdb/objc-exp.y (variable): Ditto.
* gdb/doc/gdb.texinfo (Variables): Document use of :: for non-static
variables.
"want_line_info". All callers updated.
(dwarf_decode_lines_1): New function.
(handle_DW_AT_stmt_list): Add function comment.
New arg "want_line_info". All callers updated.
(read_file_scope,read_type_unit_scope): Move comment from
handle_DW_AT_stmt_list to here.
partial_read_comp_unit_head. Replace "buffer", "buffer_size" and
"abfd" args with "section". All callers updated.
Error checking code moved ...
(error_check_comp_unit_head): ... here. New function.
(read_and_check_type_unit_head): Renamed from read_type_unit_head.
Delete arg "abfd". New arg "type_offset". All callers updated.
(create_debug_types_hash_table): Simplify by using
read_and_check_type_unit_head.
n_type_units. Rename type_comp_units to all_type_units.
All uses updated.
(add_signatured_type_cu_to_table): Renamed from
add_signatured_type_cu_to_list. All callers updated.
to top of file.
(dwarf2_find_comp_unit): Delete.
(process_psymtab_comp_unit): Make result "void".
Delete args buffer, info_ptr, buffer_size, and replace with
"section". All callers updated.
(dwarf2_build_psymtabs_hard): Simplify.
* infrun.c (normal_stop): Don't skip calling the normal_stop
observers if the thread was doing a multi-step, but stopped for
some reason other than stepping.
gdb/testsuite/
2012-01-05 Pedro Alves <alves.ped@gmail.com>
* gdb.mi/mi-stepn.c, gdb.mi/mi-stepn.exp: New files.
* gdb.python/py-events.c (first): Add bits for new "step N" test.
* gdb.python/py-events.exp: Test that "step N" tripping on a
breakpoint emits a breakpoint event.
We now use a different script to perform the update. This patch
updates the procedure in our documentation
gdb/doc/ChangeLog:
* gdbint.texinfo (Start of New Year Procedure): Update
to replace use of copyright.sh by use of copyright.py.
The body of this function has been commented out since Jul 1999, and
thus seems unnecessary. While at it, remove some commented out code
that seems to be related to the function being deleted.
gdb/ChangeLog:
* corefile.c (close_exec_file): Delete.
(reopen_exec_file): Remove commented out code that seems related
to close_exec_file, which is being deleted here.
* inferior.h (close_exec_file): Delete.
* fork-child.c (fork_inferior): Remove call to fork_inferior.
This is just a minor cleanup that reduces a bit the code in ada-lang.c
by using skip_spaces or skip_to_space, instead of doing the skipping
ourselves.
gdb/ChangeLog:
* ada-lang.c: #include "cli/cli-utils.h".
(get_selections): Use skip_spaces.
(ada_get_next_arg): Use skip_spaces and skip_to_space.
(catch_ada_exception_command_split): Use skip_spaces.
(ada_decode_assert_location): Likewise.
Trying to insert a breakpoint on `ops."<"', we get the following error:
(gdb) b ops."<"
malformed template specification in command
This is because locate_first_half skips the linespec until the dot,
and the decode_line_internal thinks that the dot might mean that
we have C++ or Java compound. It then tries calling decode_compound
which errors out because it sees the opening angle bracket but not
the closing one (I am guessing).
This patch short-circuits this part of the code when the current
language is Ada.
gdb/ChangeLog:
* linespec.c (decode_line_internal): Check for C++ or Java
compound constructs only if the current language is C, C++
or Java.
Revert:
2012-01-02 Jan Kratochvil <jan.kratochvil@redhat.com>
Joel Brobecker <brobecker@adacore.com>
Fix regression for gdb.cp/gdb2495.exp with gcc-4.7.
* arch-utils.c (displaced_step_at_entry_point): Incrase BP_LEN skip to
3 times.
* infcall.c (call_function_by_hand) <AT_SYMBOL>: Move it upwards and
fall through into AT_ENTRY_POINT.
(call_function_by_hand) <AT_ENTRY_POINT>: New variable bp_len. Adjust
DUMMY_ADDR with it.
* ppc-linux-tdep.c (ppc_linux_displaced_step_location): Increase
PPC_INSN_SIZE skip to 3 times.
When discarding data (minimal) symbols, we need to be careful to
not throw away the function descriptors. This makes a difference
on platforms where these descriptors are used and live in a data
section.
gdb/ChangeLog:
* linespec.c (add_minsym): Preserve function descriptors.
This patch now retires the old copyright.sh script which was using
emacs to perform the copyright update. It also completely rewrite
copyright.py to call update-copyright with the appropriate list
of files.
In addition to calling update-copyright, the new script also performs
a sanity-check on all the files that update-copyright could not update,
and sees whether the file might contain a copyright notice that
the script could not decipher.
gdb/ChangeLog:
* copyright.sh: Delete.
* copyright.py: Rewrite.
Fix regression for gdb.cp/gdb2495.exp with gcc-4.7.
* arch-utils.c (displaced_step_at_entry_point): Incrase BP_LEN skip to
3 times.
* infcall.c (call_function_by_hand) <AT_SYMBOL>: Move it upwards and
fall through into AT_ENTRY_POINT.
(call_function_by_hand) <AT_ENTRY_POINT>: New variable bp_len. Adjust
DUMMY_ADDR with it.
* ppc-linux-tdep.c (ppc_linux_displaced_step_location): Increase
PPC_INSN_SIZE skip to 3 times.
* amd64-linux-nat.c (update_debug_registers_callback): New comment on
the return value.
* i386-linux-nat.c (update_debug_registers_callback): Likewise.
gdb/testsuite/
* gdb.python/py-finish-breakpoint.exp: Add `.' prefix for ppc64
* gdb.python/py-finish-breakpoint2.exp: Skip testcase if python support
is not enabled.
* gdb.python/py-finish-breakpoint.c (test_exec_exit): Change the
parameter to self_exec, adjust the function.
(main): Check for argv[1] "exit". Use argv[0] for test_exec_exit.
* gdb.python/py-finish-breakpoint.exp (set var self_exec = 0): New test.
(set var do_exit = 0): Remove test.
(newline at end of file): Add one.
... to avoid code duplication.
gdb/ChangeLog:
* ada-lang.c (should_use_wild_match): New function.
(ada_lookup_simple_minsym): Use should_use_wild_match.
Minor simplification. Add comment.
(ada_lookup_symbol_list): Use should_use_wild_match.
Minor simplification.
... and replace it with call to xsnprintf, following GDB's coding rules.
gdb/ChangeLog:
* py-finishbreakpoint.c (bpfinishpy_init): Replace call to
sprintf by call to xsnprintf.
gdb/ChangeLog:
* linespec.c (struct collect_minsyms) [list_mode]: New field.
(add_minsym): Ignore data symbols if not in list mode.
(search_minsyms_for_name): Set local.list_mode.
gdb/testsuite/ChangeLog:
* gdb.base/dmsym.c, gdb.base/dmsym_main.c, gdb.base/dmsym.exp:
New files.
On Windows hosts, gdb_realpath is just an xstrdup. This makes filename
comparisons on Windows very chancy. Normally, we would normalize both
paths, and then compare. But since the normalization doesn't do
anything, two equivalent names on Windows might not match. This can
happen when trying to insert a breakpoint using the fullpath of a file.
For instance, if the compiler generated debug info that says that
the compilation directory is: `c:\\some\\double\\slashes\\dir', then
trying to insert a breakpoint on `c:/some/double/slashes/dir/foo.c:4'
does not work:
(gdb) b c:/some/double/slashes/dir/foo.c:4
No source file named c:/some/double/slashes/dir/foo.c:4.
(gdb) b c:\some\double\slashes\dir\foo.c:4
No source file named c:\some\double\slashes\dir\foo.c:4.
This fixes the problem by enhancing gdb_realpath on Windows hosts.
The code is inspired from libiberty's lrealpath.
gdb/ChangeLog:
* utils.c (gdb_realpath): Add better support for Windows hosts.
Fix racy FAILs.
* gdb.threads/fork-thread-pending.c (barrier): New variable.
(thread_function, thread_forker): Call pthread_barrier_wait for it.
(main): Call pthread_barrier_init for it.
* Makefile.in (SUBDIR_PYTHON_OBS): Add py-finishbreakpoint.o.
(SUBDIR_PYTHON_SRCS): Add python/py-finishbreakpoint.c.
Add build rule for this file.
* infcmd.c (print_return_value): Split to create get_return_value.
(get_return_value): New function based on print_return_value. Handle
case where stop_registers are not set.
* inferior.h (get_return_value): New prototype.
* python/py-breakpoint.c (bppy_pending_object): Make non-static.
(gdbpy_breakpoint_created): Set is_py_finish_bp is necessary.
(struct breakpoint_object): Move to python-internal.h
(BPPY_REQUIRE_VALID): Likewise.
(BPPY_SET_REQUIRE_VALID): Likewise.
(gdbpy_breakpoint_created): Initialize is_finish_bp.
(gdbpy_should_stop): Add pre/post hooks before/after calling stop
method.
* python/python-internal.h (breakpoint_object_type): Add as extern.
(bppy_pending_object): Likewise.
(typedef struct breakpoint_object) Removed.
(struct breakpoint_object): Moved from py-breakpoint.c.
Add field is_finish_bp.
(BPPY_REQUIRE_VALID): Moved from py-breakpoint.c.
(BPPY_SET_REQUIRE_VALID): Likewise.
(frame_object_to_frame_info): New prototype.
(gdbpy_initialize_finishbreakpoints): New prototype.
(bpfinishpy_is_finish_bp): Likewise.
(bpfinishpy_pre_stop_hook): Likewise.
(bpfinishpy_post_stop_hook): Likewise.
* python/py-finishbreakpoint.c: New file.
* python/py-frame.c(frame_object_to_frame_info): Make non-static and
accept PyObject instead of frame_object.
(frapy_is_valid): Don't cast to frame_object.
(frapy_name): Likewise.
(frapy_type): Likewise.
(frapy_unwind_stop_reason): Likewise.
(frapy_pc): Likewise.
(frapy_block): Likewise.
(frapy_function): Likewise.
(frapy_older): Likewise.
(frapy_newer): Likewise.
(frapy_find_sal): Likewise.
(frapy_read_var): Likewise.
(frapy_select): Likewise.
* python/python.c (gdbpy_is_stopped_at_finish_bp): New noop function.
(_initialize_python): Add gdbpy_initialize_finishbreakpoints.
* python/python.h: Include breakpoint.h
(gdbpy_is_stopped_at_finish_bp): New prototype.
doc/
* gdb.texinfo (Finish Breakpoints in Python): New subsection.
(Python API): Add menu entry for Finish Breakpoints.
testsuite/
* Makefile.in (EXECUTABLES): Add py-finish-breakpoint and
py-finish-breakpoint2
(MISCALLANEOUS): Add py-events-shlib.so and py-events-shlib-nodebug.so
* gdb.python/py-breakpoint.exp (mult_line): Define and use variable
instead of line number.
* gdb.python/py-finish-breakpoint.c: New file.
* gdb.python/py-finish-breakpoint.exp: New file.
* gdb.python/py-finish-breakpoint.py: New file.
* gdb.python/py-finish-breakpoint2.cc: New file.
* gdb.python/py-finish-breakpoint2.exp: New file.
* gdb.python/py-finish-breakpoint2.py: New file.
Partial fix of compatibility with gcc-4.7.
* gdb.cp/templates.exp (ptype T5<int>, ptype t5i): Turn all PASS cases
into XFAIL "new without size_t". Permit size_t for the KFAIL case.
Add comment to add a PASS case in the future.
* symfile.c (objfilep): New typedef and new DEF_VEC_P.
(reread_symbols): Remove variable reread_one, new variables
new_objfiles, all_cleanups and ix. Use new_objfiles instead of
reread_one. Push changed objfiles to new_objfiles, call
observer_notify_new_objfile for them later.
We are iterating over all symbols in a partial symtab that would
match a given name, so we should match the partial symbols
search name against the given name rather than using the natural
name. In C++, that does not make a difference, but it does in
Ada, because Ada searches using the symbol encoded name...
We also update the generation of the .gdb_index file to match this
change in the search. Although technically an incompatible change,
we do not increment the gdb_index version number, because Ada is
the only language where it would make a difference - except that
this feature is not supported for Ada.
gdb/ChangeLog:
* psymtab.c (expand_symtabs_matching_via_partial): Match
the partial symbols using their SYMBOL_SEARCH_NAME.
* symfile.h (struct quick_symbol_functions): Udate the
documentation of expand_symtabs_matching.
* dwarf2read.c (write_psymbols): Use SYMBOL_SEARCH_NAME instead
of SYMBOL_NATURAL_NAME in index entry.
This patch enhances the linespec parser to recognize unqualified
operator names in linespecs. This allows the user to insert a breakpoint
on operator "+" as follow, for instance:
(gdb) break "+"
Previously, it was possible to insert such a breakpoint, but one
had to fully qualify the function name. For instance:
(gdb) break ops."+"
gdb/ChangeLog:
* linespec.c (locate_first_half): Add handling of Ada operators
when the current language is Ada.
This fixes a problem where the debugger is trying to locate a minimal
symbol from its address, when the symbol is inside a section whose
VMA is different from its LMA.
We have a program that was built on ppc-elf using a linker script
such that data sections are placed in ROM, and then loaded onto RAM
at execution. So their VMA addresses are indeed different from
their LMA address.
Unfortunately, there is one place where GDB gets slightly confused
into thinking that these data sections are overlayed, while it's
not the case here. This show up when trying to print the list of
Ada tasks, where GDB is unable to determine their names, and thus
prints a generic `Ravenscar task' instead:
(gdb) info tasks
ID TID P-ID Pri State Name
1 1d580 127 Delay Sleep Ravenscar task
2 183f8 127 Delay Sleep Ravenscar task
* 3 13268 127 Runnable Ravenscar task
We expected:
(gdb) info tasks
ID TID P-ID Pri State Name
1 1d580 127 Delay Sleep environment_task
2 183f8 127 Delay Sleep raven2
* 3 13268 127 Runnable raven1
The name of the task is determined by looking up the symbol table
using the task ID, which is the address where the symbol is defined.
So, ada-tasks calls...
msym = lookup_minimal_symbol_by_pc (task_id);
... which in turn first tries to determine the section associated
to this address (find_pc_section), which itself uses a map of sections
to find it. The map itself is recomputed every time objfiles are
loaded/changed by `update_section_map'. And `update_section_map'
relies on `insert_section_p' to determine whether the section should
be inserted in the map or not.
This is where things get interesting for us, because `insert_section_p'
simply rejects overlay sections:
if (lma != 0 && lma != bfd_section_vma (abfd, section)
&& (bfd_get_file_flags (abfd) & BFD_IN_MEMORY) == 0)
/* This is an overlay section. IN_MEMORY check is needed to avoid
discarding sections from the "system supplied DSO" (aka vdso)
on some Linux systems (e.g. Fedora 11). */
return 0;
However, it shouldn't reject our section in this case, since overlay
debugging is off. The fix is to add a check that overlay debugging
is active before rejecting the section. This is similar to what is
done in `section_is_overlay' (which takes obj_section objects), for
instance.
gdb/Changelog:
* objfiles.c (insert_section_p): Do not detect overlay sections
if overlay debugging is off.
Consider the following declaration:
package Pck is
task Dummy_Task is
entry Start;
end Dummy_Task;
end Pck;
Inserting a breakpoint on the body of that task does not currently
work:
(gdb) b pck.dummy_task
"pck.dummy_task" is not a function
Make breakpoint pending on future shared library load? (y or [n]) n
What happens here is that the compiler generates two symbols:
(a) Symbol `pck__dummy_task' which is a *variable* referencing
the task;
(b) Symbol `pck__dummy_taskTKB' which is the subprogram implementing
the body of the task.
The symbol lookup only finds the variable before of the TKB suffix in
the subprogram name. This patch fixes the problem by adjusting the
ada-lang.c:is_name_suffix routine to recognize "TKB" suffixes. But
that's not enough, because the search in the symtab is performed via
the block dictionary, using a hashing algorithm. So, for the search
to find `pck__dummy_taskTKB', I had to modify the hashing function
to ignore TKB suffixes as well.
gdb/ChangeLog:
* ada-lang.c (is_name_suffix): Add handling of "TKB" suffixes.
Update function documentation.
* dictionary.c (dict_hash): Ignore "TKB" suffixes in hash
computation.
gdb/testsuite/ChangeLog:
* gdb.ada/task_bp: New testcase.
Jan Kratochvil <jan.kratochvil@redhat.com>
* linux-nat.c (add_lwp): Don't call linux_nat_new_thread on the
first LWP.
* amd64-linux-nat.c (update_debug_registers_callback): Instantiate
`lwp->arch_private' if NULL.
(amd64_linux_prepare_to_resume): Do nothing if `lwp->arch_private'
is NULL.
* i386-linux-nat.c (update_debug_registers_callback): Instantiate
`lwp->arch_private' if NULL.
(i386_linux_prepare_to_resume): Do nothing if `lwp->arch_private'
is NULL.