At -O3 -g -gstrict-dwarf, gcc generates for an optimized out vla 'a' a
DW_TAG_variable with type DW_TAG_array_type containing one
DW_TAG_subrange_type, but without DW_AT_upper_bound or DW_AT_count, which
makes the upper bound value 'unknown':
...
.uleb128 0x15 # (DIE (0x161) DW_TAG_variable)
.long 0xec # DW_AT_abstract_origin
.long 0x170 # DW_AT_type
...
.uleb128 0xa # (DIE (0x170) DW_TAG_array_type)
.long 0x110 # DW_AT_type
.long 0x17f # DW_AT_sibling
.uleb128 0x17 # (DIE (0x179) DW_TAG_subrange_type)
.long 0xc6 # DW_AT_type
.byte 0 # end of children of DIE 0x170
...
But gdb prints '0' for the size of 'a':
...
/gdb ./vla-1.exe -batch -ex "b f1" -ex "run" -ex "p sizeof(a)"
Breakpoint 1 at 0x4004c0: f1. (2 locations)
Breakpoint 1, f1 (i=<optimized out>) at vla-1.c:18
18 }
$1 = 0
...
while <optimized out> would be more appropriate.
This patch fixes that in evaluate_subexp_for_sizeof.
Build and reg-tested on x86_64-linux.
2018-07-28 Tom de Vries <tdevries@suse.de>
* eval.c (evaluate_subexp_for_sizeof): Interpret size of dynamic type
with undefined upper bound as <optimized out>.
* gdb.base/vla-optimized-out-o3-strict.exp: New file.
Ref.: https://bugs.debian.org/904628
It has been reported that gcore's manpage is a bit imprecise when it
comes to two things:
- It doesn't explicity say that the command accepts more than one PID
on its CLI.
- It fails to mention that the argument passed through the "-o" option
is actually a prefix that will be used to compose the corefile's
filename, and not the actual filename.
I decided to give it a try and rewrite parts of the text to further
clarify these two points. I ended up rewording the "Description"
section because, IMHO, it was a bit confuse to understand.
To make things consistent, I've also renamed the "$name" variable in
the gcore.in script, and expanded the usage text.
gdb/doc/ChangeLog:
2018-07-27 Sergio Durigan Junior <sergiodj@redhat.com>
* gdb.texinfo (gcore man): Rewrite "Description" and "-o"
option sections to further clarify that gcore can take more
than one PID, and that "-o" is used to specify a prefix, not a
filename.
gdb/ChangeLog:
2018-07-27 Sergio Durigan Junior <sergiodj@redhat.com>
* gcore.in: Rename variable "name" to "prefix". Expand
"usage" text.
After f6ac5f3d "Convert struct target_ops to C++", we need to explicitly use
the global namespace when calling ::close() from windows_nat_target methods,
as that object has a close() method.
gdb/ChangeLog:
2018-07-14 Jon Turney <jon.turney@dronecode.org.uk>
* windows-nat.c (windows_nat_target::create_inferior): Update to
call close() in global namespace.
This patch finally makes partial symbols and partial symtabs
independent of the program space.
Specifically:
It changes add_psymbol_to_list to accept a section index, and changes
the psymbol readers to pass this. At the same time it removes the
code to add the objfile's section offset to the psymbol.
It adds an objfile argument to the psymtab textlow and texthigh
accessors and changes some code to use the raw variants instead.
It removes the "relocate" method from struct quick_symbol_functions,
as it is no longer needed any more.
It changes partial_symbol::address so that the relevant offset is now
applied at the point of use.
gdb/ChangeLog
2018-07-26 Tom Tromey <tom@tromey.com>
* dwarf-index-write.c (add_address_entry): Don't add objfile
offsets.
* dbxread.c (find_stab_function): Rename from
find_stab_function_addr. Return a bound_minimal_symbol.
(read_dbx_symtab): Use raw_text_low, raw_text_high.
Don't add objfile offsets.
(end_psymtab): Use raw_text_low, raw_text_high,
MSYMBOL_VALUE_RAW_ADDRESS.
(read_ofile_symtab): Update.
(process_one_symbol): Update.
* dwarf2read.c (create_addrmap_from_index): Don't add objfile
offsets.
(dw2_relocate): Remove.
(dw2_find_pc_sect_symtab): Bias PC by the text offset before
searching addrmap.
(dwarf2_gdb_index_functions, dwarf2_debug_names_functions):
Update.
(process_psymtab_comp_unit_reader, add_partial_symbol)
(add_partial_subprogram, dwarf2_ranges_read): Update.
(load_partial_dies): Update.
(add_address_entry): Don't add objfile offsets.
(dwarf2_build_include_psymtabs): Update.
(create_addrmap_from_aranges): Don't add objfile offsets.
(dw2_find_pc_sect_compunit_symtab): Update.
* mdebugread.c (parse_symbol): Don't add objfile offsets.
(parse_lines): Remove 'pst' parameter, replace with 'textlow'.
Update.
(parse_partial_symbols): Don't add objfile offsets. Use
raw_text_low, raw_text_high. Update.
(handle_psymbol_enumerators, psymtab_to_symtab_1): Update.
* objfiles.c (objfile_relocate1): Don't relocate psymtabs_addrmap
or call 'relocate' quick function. Clear psymbol_map.
* psympriv.h (struct partial_symbol) <address>: Add section
offset.
<set_unrelocated_address>: Rename from set_address.
<raw_text_low, raw_text_high>: New methods.
<text_low, text_high>: Add objfile parameter.
(add_psymbol_to_bcache): Add 'section' parameter. Call
set_unrelocated_address.
* psymtab.c (find_pc_sect_psymtab_closer, find_pc_sect_psymtab)
(find_pc_psymbol): Update.
(fixup_psymbol_section, relocate_psymtabs): Remove.
(dump_psymtab, psym_functions): Update.
(add_psymbol_to_bcache, add_psymbol_to_list): Add 'section'
parameter.
(maintenance_info_psymtabs, maintenance_check_psymtabs): Update.
(start_psymtab_common): Update.
* symfile-debug.c (debug_qf_relocate): Remove.
(debug_sym_quick_functions): Update.
* symfile.h (struct quick_symbol_functions) <relocate>: Remove.
* xcoffread.c (scan_xcoff_symtab): Don't add objfile offsets.
Update.
Right now some psymtab code checks whether a psymtab's textlow or
texthigh fields are valid by comparing against 0.
I imagine this is mildly wrong in the current environment, but once
psymtabs are relocated dynamically, it will no longer be correct,
because it will be much more normal to see a psymtab with a textlow of
zero -- this will just mean it appears at the start of the text
section.
This patch introduces validity bits to handle this situation more
nicely, and changes users of the code to follow.
gdb/ChangeLog
2018-07-26 Tom Tromey <tromey@redhat.com>
* dbxread.c (end_psymtab): Use text_high_valid and
text_low_valid.
* mdebugread.c (parse_partial_symbols): Use text_low_valid.
(psymtab_to_symtab_1): Use text_high_valid and text_low_valid.
* psympriv.h (struct partial_symtab) <m_text_low, m_text_high>:
Update comment.
<text_low_valid, text_high_valid>: New fields.
<set_text_low, set_text_high>: Update.
* xcoffread.c (scan_xcoff_symtab): Use text_low_valid.
This introduces accessors for the partial symbol table textlow and
texthigh fields. This lets us later arrange to relocate these values
at their point of use.
I did this conversion by renaming the fields. I didn't rename the
fields back afterward, thinking that on the off chance that someone
has a patch touching this area, then a merge would helpfully break
their compile.
I looked at making the fields private, but this interferes with the
memset in allocate_psymtab, and I didn't want to chase this down.
This conversion can be done later if need be.
gdb/ChangeLog
2018-07-26 Tom Tromey <tom@tromey.com>
* dbxread.c (read_dbx_symtab, end_psymtab, read_ofile_symtab):
Update.
* dwarf2read.c (dwarf2_create_include_psymtab): Don't initialize
textlow and texthigh fields.
(process_psymtab_comp_unit_reader, dwarf2_build_include_psymtabs):
Update.
* mdebugread.c (parse_lines, parse_partial_symbols)
(psymtab_to_symtab_1): Update.
* psympriv.h (struct partial_symtab) <m_text_low, m_text_high>:
Rename fields. Update comment. Now private.
<text_low, text_high, set_text_low, set_text_high>: New methods.
* psymtab.c (find_pc_sect_psymtab_closer, find_pc_sect_psymtab)
(find_pc_sect_psymbol, relocate_psymtabs, dump_psymtab)
(start_psymtab_common, maintenance_info_psymtabs)
(maintenance_check_psymtabs): Update.
* xcoffread.c (xcoff_end_psymtab): Don't initialize textlow and
texthigh fields.
(scan_xcoff_symtab): Update.
This introduces a partial_symbol::address method. This method takes
an objfile argument. This is necessary so that we can later relocate
a partial symbol at its point of use. It also adds an accessor to
compute the unrelocated value; and a method to be used for setting the
field.
Note that the new method doesn't actually perform any relocation yet.
That will come in a subsequent patch. However, the comments are
written to reflect the intended, rather than the temporary, semantics.
gdb/ChangeLog
2018-07-26 Tom Tromey <tromey@redhat.com>
* psympriv.h (struct partial_symbol) <unrelocated_address,
address, set_address>: New methods.
* psymtab.c (find_pc_sect_psymtab_closer, find_pc_sect_psymbol)
(fixup_psymbol_section, relocate_psymtabs): Update.
(print_partial_symbols): Add 'objfile' parameter. Update.
(dump_psymtab, add_psymbol_to_bcache, psym_fill_psymbol_map):
Update.
This is the psymbol analog to the patch to change the representation
of minimal symbols:
https://sourceware.org/ml/gdb-patches/2013-10/msg00524.html
It has the same rationale: namely, that we're going to change the code
to apply psymbol offsets at runtime. This will be done by adding an
argument to the SYMBOL_VALUE_ADDRESS macro -- but since we can't
convert all the symbol types at once, we need a new approach.
Because gdb now is in C++, this patch changes partial_symbol to
inherit from general_symbol_info, rather than renaming the field.
This simplifies code in some places.
Also, as noted before, these macros implement a kind of "phony
polymorphism" that is not actually useful in practice; so this patch
removes the macros in favor of simply referring directly to members.
In a few cases -- obj_section in this patch and the symbol address in
the future -- methods will be used instead.
Note that this removes the blanket memset from add_psymbol_to_bcache.
This hasn't really been needed since bcache was modified to allow
holes in objects and since psymtab took advantage of that. This
deletion was required due to changing partial_symbol to derive from
general_symbol_info.
gdb/ChangeLog
2018-07-26 Tom Tromey <tom@tromey.com>
* dwarf-index-write.c (write_psymbols, debug_names::insert)
(debug_names::write_psymbols): Update.
* psympriv.h (struct partial_symbol): Derive from
general_symbol_info.
<obj_section>: New method.
(PSYMBOL_DOMAIN, PSYMBOL_CLASS): Remove.n
* psymtab.c (find_pc_sect_psymtab_closer, find_pc_sect_psymtab)
(find_pc_sect_psymbol, fixup_psymbol_section)
(match_partial_symbol, lookup_partial_symbol, relocate_psymtabs)
(print_partial_symbols, recursively_search_psymtabs)
(compare_psymbols, psymbol_hash, psymbol_compare)
(add_psymbol_to_bcache, maintenance_check_psymtabs)
(psymbol_name_matches, psym_fill_psymbol_map): Update.
I noticed that there is a bit of dead code in end_psymtab.
This deletes it.
Normally I would investigate a fix for the code. However, considering
that the code has been this way a long time (since the first import to
sourceware) and considering that dbxread.c is not as important any
more, I think it's safe to just consider that there's no bug.
gdb/ChangeLog
2018-07-26 Tom Tromey <tromey@redhat.com>
* dbxread.c (end_psymtab): Remove dead code.
Add a maintenance command to disable the DWARF stack unwinders.
Normal users would not need this feature, but it is useful to allow
extended testing of fallback stack unwinding strategies, for example,
prologue scanners.
This is a partial implementation of the idea discussed in pr gdb/8434,
which talks about a generic ability to disable any frame unwinder.
Being able to arbitrarily disable any frame unwinder would be a more
complex patch, and I was unsure how useful such a feature would really
be, however, I can see (and have) a real need to disable DWARF
unwinders. That's why this patch only targets that specific set of
unwinders.
If in the future we find ourselves adding more switches to disable
different unwinders, then we should probably move to a more generic
solution, and remove this patch.
gdb/ChangeLog:
* dwarf2-frame-tailcall.c (tailcall_frame_sniffer): Exit early if
DWARF unwinders are disabled.
* dwarf2-frame.c: Add dwarf2read.h include.
(dwarf2_frame_sniffer): Exit early if DWARF unwinders are
disabled.
(dwarf2_frame_unwinders_enabled_p): Define.
(show_dwarf_unwinders_enabled_p): New function.
(_initialize_dwarf2_frame): Register switch to control DWARF
unwinder use.
* dwarf2-frame.h (dwarf2_frame_unwinders_enabled_p): Declare.
* dwarf2read.c (set_dwarf_cmdlist): Remove static keyword.
(show_dwarf_cmdlist): Remove static keyword.
* dwarf2read.h (set_dwarf_cmdlist): Declare.
(show_dwarf_cmdlist): Declare.
* NEWS: Document new feature.
gdb/doc/ChangeLog:
* gdb.texinfo (Maintenance Commands): Add description of
maintenance command to control dwarf unwinders.
gdb/testsuite/ChangeLog:
* gdb.base/maint.exp: Add check that dwarf unwinders control flag
is visible.
With the test-case contained in this patch and compiled for debug we run into
a segfault with trunk gdb:
...
$ gdb catch-follow-exec -batch -ex "catch exec" \
-ex "set follow-exec-mode new" -ex "run" -ex "info prog"
Catchpoint 1 (exec)
process xxx is executing new program: /usr/bin/ls
[New inferior 2 (process 0)]
[New process xxx]
Thread 2.1 "ls" hit Catchpoint 1 (exec'd /usr/bin/ls), in _start () from
/lib64/ld-linux-x86-64.so.2
Segmentation fault (core dumped)
...
The patch fixes the segfault by returning an error in info_program_command
if get_last_target_status returns minus_one_ptid.
The test-case is non-standard, because the standard approach runs into
PR23368, a problem with gdb going to the background.
Build and reg-tested on x86_64-linux.
2018-07-26 Tom de Vries <tdevries@suse.de>
PR breakpoints/23366
* infcmd.c (info_program_command): Handle ptid == minus_one_ptid.
* gdb.base/catch-follow-exec.c: New test.
* gdb.base/catch-follow-exec.exp: New file.
This patch generates a warning if DW_AT_upper_bound or DW_AT_count is defined,
but can't be translated. This is triggered for current gcc in lto mode for
vla test-cases.
Build and reg-tested on x86_64-linux.
2018-07-26 Tom de Vries <tdevries@suse.de>
* dwarf2read.c (read_subrange_type): Warn if DW_AT_upper_bound or
DW_AT_count can't be translated to a dynamic prop.
When compiling vla-optimized-out.c with -O3 and a recent gcc, and trying to
print the vla a in f1, we run into this gdb exception:
...
Cannot find matching parameter at DW_TAG_call_site 0x4003be at main
...
This is a regression introduced by 42dc7699a2 "[gdb/exp] Fix printing of type
of optimized out vla".
This patch fixes the regression by wrapping the ctx.eval call in
dwarf2_locexpr_baton_eval in try/catch, similar to what is done in
dwarf2_evaluate_loc_desc_full.
Build and reg-tested on x86_64-linux.
2018-07-25 Tom de Vries <tdevries@suse.de>
* dwarf2loc.c (dwarf2_locexpr_baton_eval): Wrap ctx.eval call in
try/catch.
* gdb.base/vla-optimized-out-o3.exp: New file. Reuse
vla-optimized-out.c.
When a single breakpoint location enableness was modified by a CLI
command, observers were not notified about it. This issue is now fixed.
gdb/ChangeLog:
* breakpoint.c (enable_disable_bp_num_loc): Notify observers.
gdb/testsuite/ChangeLog:
* gdb.mi/mi-breakpoint-location-ena-dis.cc: New file.
* gdb.mi/mi-breakpoint-location-ena-dis.exp: New file.
This patch is another attempt at really fixing the multitude of assertions
being seen where symbols of one language are being added to symbol lists of
another language.
In this specific case, the backtrace command (thread apply all bt full) that
is looking for the compunit containing the PC of the thread. That calls
get_prev_frame several times. This function calls (eventually)
dwarf2_frame_prev_register. That eventually ends up calling
find_pc_compunit_symtab.
In this function (find_pc_sect_compunit_symtab actually), we loop over all
compunits, calling the "quick" function dw2_find_pc_sect_compunit_symtab.
That function calls dw2_instantiate_symtab to read in all the CU's symbols.
Now the fun begins.
dw2_do_instantiate_symtab queues the per_cu for reading, using a default
"pretend" language of language_minimal with the expectation that this will
be set later.
The DIEs of this (only queued) CU are then processed.
The first DIE is DW_TAG_compile_unit. That's handled by read_file_scope.
(Nearly) The first thing read_file_scope does is:
get_scope_pc_bounds (die, &lowpc, &highpc, cu);
This function loops over the children of the current DIE (a compile_unit),
looking for bounds. The first such child is a subprogram, and we attempt to
get its bounds. We use dwarf2_attr to get at DW_AT_high_pc.
This subprogram has DW_AT_specification set, so dwarf_attr (via
follow_die_ref/follow_die_offset) will follow that, but follow_die_offset
*also* attempts to load the containing CU for the spec DIE. That spec DIE
lives inside a CU that is a partial_unit and has no language attribute. So
it simply inherits the language from the CU that elicited the read. [That
all happens in follow_die_offset.]
The original CU's language is still language_minimal -- we haven't gotten to
the line in read_file_scope that actually sets the language yet!
And that is the cause of these problems. The call to prepare_one_comp_unit
needs to be the *first* thing that is done when reading a CU so that the
CU's language can be recorded (and inherited by any referenced
partial_units).
Since a test reproducer for this has been so elusive, this patch also adds a
wrapper function around add_symbol_to_list which asserts when adding a
symbol of one language to a list containing symbols of a different language.
gdb/ChangeLog:
2017-07-24 Keith Seitz <keiths@redhat.com>
PR symtab/23010
* dwarf2read.c (dw2_add_symbol_to_list): New function.
(fixup_go_packaging, new_symbol): Use dw2_add_symbol_to_list
instead of add_symbol_to_list.
(read_file_scope): Call prepare_one_comp_unit before reading
any other DIEs.
configure checks for declarations of free, malloc, and realloc; but
the results are only used in a single spot: utils.c. I think these
checks are long since obsolete, so this patch removes them.
Grepping the entire tree for these HAVE_DECL_ symbols, the only uses
of possible interest to gdb come from bfd/sysdep.h; but this is not
(nor should be) included by gdb. (And furthermore I think the code
there is probably also obsolete.)
gdb/ChangeLog
2018-07-24 Tom Tromey <tom@tromey.com>
* utils.c (malloc, realloc, free): Don't declare.
* configure, config.in: Rebuild.
* configure.ac: Don't check for declarations of free, malloc, or
realloc.
This adds -Wunused-variable to the build. This required a special
check in configure in order to work around a bug in GCC 4.9. Simon
ound the correct test to use, so I've added him to the ChangeLog.
gdb/ChangeLog
2018-07-22 Simon Marchi <simon.marchi@polymtl.ca>
Tom Tromey <tom@tromey.com>
* warning.m4 (AM_GDB_WARNINGS): Add -Wunused-variable and special
test for it.
* configure: Rebuild.
gdb/gdbserver/ChangeLog
2018-07-22 Tom Tromey <tom@tromey.com>
* configure: Rebuild.
This changes regdat.sh to emit the xmltarget_${name} variable inside
the #ifndef IN_PROCESS_AGENT block. This avoids a -Wunused-variable
warning for some builds. Thanks to Pedro for investigating this one.
gdb/ChangeLog
2018-07-22 Tom Tromey <tom@tromey.com>
* regformats/regdat.sh: Define xmltarget_${name} inside
#ifndef IN_PROCESS_AGENT.
This removes a few unused variables from gdbserver.
The x86-tdesc.h change is a bit unusual for this series. This file
was not defining the multiple-include guard symbol, so I've added that
here. Also, it is hard to determine when i386_expedite_regs will be
needed, so this patch simply marks it ATTRIBUTE_UNUSED.
gdb/gdbserver/ChangeLog
2018-07-22 Tom Tromey <tom@tromey.com>
* win32-low.c (win32_create_inferior): Remove unused variables.
* gdbreplay.c (remote_open): Remove unused variable.
* remote-utils.c (remote_prepare): Remove unused variable.
* x86-tdesc.h (X86_TDESC_H): Define.
(amd64_expedite_regs): Define conditionally.
(i386_expedite_regs): Mark ATTRIBUTE_UNUSED.
* linux-x86-tdesc.c (i386_tdescs): Move inside #if.
* remote-utils.c (readchar): Remove unused variable.
This removes an unused declaration from value_fetch_lazy_bitfield.
Because it is not completely clear if the check_typedef call is needed
somewhere beneath this function, this is broken out into a separate
patch.
gdb/ChangeLog
2018-07-22 Tom Tromey <tom@tromey.com>
* value.c (value_fetch_lazy_bitfield): Remove unused variable.
This is actually a patch I found via another route. Joel had asked me
to write a test, but I still have not found the time to do this.
Meanwhile, -Wunused-variable also found this error.
gdb/ChangeLog
2018-07-22 Tom Tromey <tom@tromey.com>
* symfile.c (reread_symbols): Notify iter, not objfile.
The change to turn target ops into methods accidentally introduced a
bug in ravenscar-thread.c, changing some calls that were using
"arch_ops" to use the target beneath.
This patch changes ravenscar-thread.c to use these variables where
appropriate.
gdb/ChangeLog
2018-07-22 Tom Tromey <tom@tromey.com>
* ravenscar-thread.c (ravenscar_thread_target::store_registers):
Use arch_ops.
(ravenscar_thread_target::prepare_to_store): Likewise.
This removes some unused variables, and replaces the calls to
value_contents_for_printing with a call to value_fetch_lazy, when
needed.
gdb/ChangeLog
2018-07-22 Tom Tromey <tom@tromey.com>
* python/py-prettyprint.c (gdbpy_apply_val_pretty_printer): Remove
unused variable. Call value_fetch_lazy when needed.
* guile/scm-pretty-print.c (gdbscm_apply_val_pretty_printer):
Remove unused variable. Call value_fetch_lazy when needed.
This removes some unused declarations from m32c-tdep.c. Initially I
had thought that this entire code block was dead, but Simon pointed
out that it is not; so this patch simply removes some declarations.
gdb/ChangeLog
2018-07-22 Tom Tromey <tom@tromey.com>
* m32c-tdep.c (mark_dma): Return void.
(make_regs): Remove unused declarations.
This changes a couple of spots in guile/ to remove a variable
declaration but to still call a function for effect.
gdb/ChangeLog
2018-07-22 Tom Tromey <tom@tromey.com>
* guile/scm-cmd.c (gdbscm_dont_repeat): Call
cmdscm_get_valid_command_smob_arg_unsafe for effect.
* guile/scm-block.c (gdbscm_make_block_syms_iter): Call
bkscm_get_valid_block_smob_arg_unsafe for effect.
This changes bfin_push_dummy_call to use the result of check_typedef.
Calling check_typedef for effect was probably ok as well, but this
seemed a little nicer.
gdb/ChangeLog
2018-07-22 Tom Tromey <tom@tromey.com>
* bfin-tdep.c (bfin_push_dummy_call): Use arg_type, not
value_type.
This patch fixes various unused variable warnings that are related to
conditional compilation. In these cases, either the variable is now
protected by the same #if as its uses, or the declaration is simply
lowered into the conditionally-compiled block.
gdb/ChangeLog
2018-07-22 Tom Tromey <tom@tromey.com>
* windows-nat.c (saved_context): Conditionally define.
* remote.c (remote_target::remote_btrace_maybe_reopen):
Conditionally declare "warned".
* inflow.c (sigquit_ours): Conditionally define.
(new_tty): Move "tty" declaration inside #if.
* guile/guile.c (guile_datadir): Conditionally define.
* charset.c (set_be_le_names): Move some declarations inside #if.
* btrace.c (parse_xml_btrace): Move "errcode" declaration inside
#if.
(parse_xml_btrace_conf): Likewise.
This removes an unused variable from spu_get_overlay_table, replacing
it with an explanatory comment.
gdb/ChangeLog
2018-07-22 Tom Tromey <tom@tromey.com>
* spu-tdep.c (spu_get_overlay_table): Remove unused variable.
Some variables are not used when !HAVE_ELF, so avoid declaring them in
that case.
gdb/ChangeLog:
* arm-tdep.c (arm_gdbarch_init): Declare attr_arch and
attr_profile in HAVE_ELF.
* rs6000-tdep.c (bfd_uses_spe_extensions): Declare vector_abi in
HAVE_ELF.
I am currently working with these functions, and though this renaming
could help to reason about the code. Some functions take a frame and
will return the value associated to that frame, others will return the
value associated to the previous frame. Those usually conveniently
contain "unwind" in their name, but naming the variable next_frame
instead of frame helps remembering which frame we are dealing with.
I also included a little typo fix at the top of frame.h.
gdb/ChangeLog:
* frame.c (frame_register_unwind): Change parameter name.
(frame_unwind_register): Likewise.
(frame_unwind_register_value): Likewise.
(frame_unwind_register_signed): Likewise.
(frame_unwind_register_unsigned): Likewise.
* frame.h (frame_register_unwind): Likewise.
(frame_unwind_register): Likewise.
(frame_unwind_register_value): Likewise.
(frame_unwind_register_signed): Likewise.
(frame_unwind_register_unsigned): Likewise.
(frame_unwind_arch): Likewise.
binutils/
* MAINTAINERS: Update my e-mail address, downgrade to MIPS I-IV
ISA maintenance.
gdb/
* MAINTAINERS: Update my e-mail address, downgrade to MIPS I-IV
ISA maintenance.
sim/
* MAINTAINERS: Update my e-mail address, downgrade to MIPS I-IV
ISA maintenance.
Use `get_ptrace_pid' to get the ptrace PID from `inferior_ptid' rather
than extracting it by hand.
gdb/
* mips-linux-nat.c (mips_linux_nat_target::read_description):
Call `get_ptrace_pid' rather than extracting the ptrace PID by
hand.
This renames all the remaining members of buildsym_compunit to start
with "m_" to follow the general naming convention.
gdb/ChangeLog
2018-07-20 Keith Seitz <keiths@redhat.com>
* buildsym.h (struct buildsym_compunit) <m_objfile, m_subfiles,
m_main_subfile, m_comp_dir, m_producer, m_debugformat,
m_compunit_symtab, m_language>: Add "m_" prefix.
Update all uses.
* buildsym.c: Update all uses.
The record_line_ftype typedef was only used in the DWARF reader, and
we removed those uses a few patches ago. So, remove the typedef.
gdb/ChangeLog
2018-07-20 Tom Tromey <tom@tromey.com>
* buildsym-legacy.h (record_line): Don't use record_line_ftype.
* buildsym.h (record_line_ftype): Remove typedef.
Now that the DWARF reader uses the builder-based API, we can remove a
few "legacy" functions that were only ever called by it.
gdb/ChangeLog
2018-07-20 Tom Tromey <tom@tromey.com>
* buildsym-legacy.h (augment_type_symtab): Don't declare.
(end_expandable_symtab): Likewise.
(end_symtab_get_static_block): Likewise.
(end_symtab_from_static_block): Likewise.
* buildsym-legacy.c (augment_type_symtab): Remove.
(end_expandable_symtab): Remove.
(end_symtab_get_static_block): Remove.
(end_symtab_from_static_block): Remove.
This converts the DWARF reader to use the new-style buildsym API. A
new buildsym_compunit is created for each CU and is used to construct
the symbol table. In some cases the CU must be passed to functions
which previously did not accept it. FWIW I tend to think that most
methods in the DWARF reader ought to be methods on the dwarf2_cu
object.
gdb/ChangeLog
2018-07-20 Tom Tromey <tom@tromey.com>
* dwarf2read.c: Include buildsym.h.
(struct dwarf2_cu) <builder>: New method.
(fixup_go_packaging): Update.
(process_full_comp_unit, process_full_type_unit): Update. Don't
use scoped_free_pendings.
(using_directives): Add "cu" parameter, remove "language".
(read_import_statement, setup_type_unit_groups, )
(read_func_scope, read_lexical_block_scope)
(dwarf2_record_block_ranges, read_namespace): Update.
(lnp_state_machine::lnp_state_machine): Add cu parameter.
(lnp_state_machine::handle_end_sequence): Update.
(class lnp_state_machine) <m_cu>: New member.
<m_record_line_callback>: Remove.
<m_currently_recording_lines>: New member.
(lnp_state_machine::handle_set_file): Update.
(noop_record_line): Remove.
(dwarf_record_line_p): Add cu parameter.
(dwarf_record_line_1, dwarf_finish_line): Likewise.
(lnp_state_machine::record_line)
(lnp_state_machine::lnp_state_machine)
(lnp_state_machine::check_line_address, dwarf_decode_lines_1)
(dwarf_decode_lines): Update.
(dwarf2_start_subfile): Add cu parameter.
(dwarf2_start_symtab, new_symbol): Update.
(macro_start_file, dwarf_decode_macro_bytes): Add cu parameter.
Remove dwarf2_per_objfile parameter.
(dwarf_decode_macros): Update.
This changes cp_scan_for_anonymous_namespaces to use the
buildsym_compunit API, rather than the function-based API.
gdb/ChangeLog
2018-07-20 Tom Tromey <tom@tromey.com>
* stabsread.c (define_symbol): Update.
* buildsym-legacy.h (get_buildsym_compunit): Declare.
* dwarf2read.c (new_symbol): Update.
* cp-support.h (cp_scan_for_anonymous_namespaces): Update.
* cp-namespace.c: Include buildsym.h.
(cp_scan_for_anonymous_namespaces): Add "compunit" parameter.
* buildsym-legacy.c (get_buildsym_compunit): New function.
This introduces a new header, buildsym-legacy.h, and changes all the
symbol readers to use it. The idea is to put the function-based
interface, that relies on the buildsym_compunit global, into a
separate header. Then when a symbol reader is updated to use the new
interface, it can simply not include buildsym-legacy.h, so it's easy
to be sure that the new API is used everywhere.
gdb/ChangeLog
2018-07-20 Tom Tromey <tom@tromey.com>
* xcoffread.c: Include buildsym-legacy.h.
* windows-nat.c: Include buildsym-legacy.h.
* stabsread.c: Include buildsym-legacy.h.
* mdebugread.c: Include buildsym-legacy.h.
* buildsym-legacy.h: New file.
* buildsym-legacy.c: New file, from buildsym.c.
* go32-nat.c: Include buildsym-legacy.h.
* dwarf2read.c: Include buildsym-legacy.h.
* dbxread.c: Include buildsym-legacy.h.
* cp-namespace.c: Include buildsym-legacy.h.
* coffread.c: Include buildsym-legacy.h.
* buildsym.h: Move some contents to buildsym-legacy.h.
* buildsym.c: Include buildsym-legacy.h. Move many functions to
buildsym-legacy.c.
* Makefile.in (HFILES_NO_SRCDIR): Add buildsym-legacy.h.
This moves struct buildsym_compunit to buildsym.h. Now that the
members are private, and it no longer affects any global state in
buildsym.c, an instance can be used directly for symtab creation.
gdb/ChangeLog
2018-07-20 Tom Tromey <tom@tromey.com>
* buildsym.h (struct buildsym_compunit): Move from buildsym.c.
* buildsym.c (struct buildsym_compunit): Move to buildsym.h.
(buildsym_compunit::buildsym_compunit)
(buildsym_compunit::~buildsym_compunit)
(buildsym_compunit::get_macro_table): Define.
This patch arranges for the remaining buildsym global --
buildsym_compunit -- to only be cleared by the wrapper functions, not
by methods on struct buildsym_compunit. In the process,
reset_symtab_globals is removed.
gdb/ChangeLog
2018-07-20 Tom Tromey <tom@tromey.com>
* buildsym.c (reset_symtab_globals): Remove.
(buildsym_compunit::end_symtab_from_static_block): Update.
(buildsym_compunit::augment_type_symtab): Update.
(end_symtab_from_static_block): Call free_buildsym_compunit.
(augment_type_symtab, end_symtab, end_expandable_symtab):
Likewise.
A few files no longer need to include buildsym.h.
gdb/ChangeLog
2018-07-20 Tom Tromey <tom@tromey.com>
* arch-utils.c: Do not include buildsym.h.
* mipsread.c: Do not include buildsym.h.
* machoread.c: Do not include buildsym.h.
* elfread.c: Do not include buildsym.h.
This adds many methods to buildsym_compunit and makes the data members
private. Essentially the entire buildsym API is now available as a
method on buildsym_compunit. However, standalone functions are still
provided, as this is what the sybmol readers actually use.
gdb/ChangeLog
2018-07-20 Tom Tromey <tom@tromey.com>
* buildsym.c (buildsym_compunit::buildsym_compunit): Do more
initialization.
(buildsym_compunit): Add new constructor.
(struct buildsym_compunit) <get_last_source_file, finish_block,
record_block_range, start_subfile, patch_subfile_names,
push_subfile, pop_subfile, record_line, get_compunit_symtab,
set_last_source_start_addr, get_last_source_start_addr,
get_local_using_directives, set_local_using_directives,
get_global_using_directives, outermost_context_p,
get_current_context_stack, get_context_stack_depth,
get_current_subfile, get_local_symbols, get_file_symbols,
get_global_symbols, record_debugformat, record_producer,
push_context, pop_context, end_symtab_get_static_block,
end_symtab_from_static_block, end_symtab, end_expandable_symtab>:
New public methods.
<record_pending_block, finish_block_internal, make_blockvector,
watch_main_source_file_lossage, end_symtab_with_blockvector>: New
private methods.
Update all users.
This removes a redundant parameter from record_pending_block. It also
moves record_pending_block earlier in the file, so that a forward
declaration is no longer needed.
gdb/ChangeLog
2018-07-20 Tom Tromey <tom@tromey.com>
* buildsym.c (record_pending_block): Move earlier. Remove objfile
parameter.
(finish_block_internal): Update.
Nothing in buildsym.h relies on the "EXTERN" method of
declaration/definition, so remove the traces.
gdb/ChangeLog
2018-07-20 Tom Tromey <tom@tromey.com>
* buildsym.h (EXTERN): Don't define or undef.
* buildsym.c (EXTERN): Don't define.
Currently the DWARF reader sets the list_in_scope member of the CU
when first starting to process symbols. Future changes will make this
assert -- code will not be able to refer to these lists until after
start_symtab has been called. This patch prepares for the problem by
arranging to initialize list_in_scope in dwarf2_start_symtab.
gdb/ChangeLog
2018-07-20 Tom Tromey <tom@tromey.com>
* dwarf2read.c (process_full_comp_unit): Do not set list_in_scope.
(process_full_type_unit): Likewise.
(dwarf2_start_symtab): Set list_in_scope.
The DWARF reader was setting the list_in_scope member when reading
partial symbols. however, this member is only useful when reading
full symbols. Future patches will make this assert, so remove these
unneeded initializations.
gdb/ChangeLog
2018-07-20 Tom Tromey <tom@tromey.com>
* dwarf2read.c (process_psymtab_comp_unit_reader)
(build_type_psymtabs_reader): Do not set list_in_scope.
buildsym.c currently keeps a free list of "struct pending"s. However,
this didn't seem necessary to me, and so this patch removes the free
list.
gdb/ChangeLog
2018-07-20 Tom Tromey <tom@tromey.com>
* buildsym.c (free_pendings): Remove.
(add_symbol_to_list, scoped_free_pendings)
(finish_block_internal, buildsym_init): Update.
This moves the pending_blocks and pending_block_obstack into
buildsym_compunit.
The obstack could perhaps be merged with the addrmap obstack, but I
did not do that in this series.
gdb/ChangeLog
2018-07-20 Tom Tromey <tom@tromey.com>
* buildsym.h (class scoped_free_pendings): Remove constructor.
* buildsym.c (struct buildsym_compunit) <free_pending_blocks>: New
method.
<m_pending_block_obstack, m_pending_blocks>: New members.
(pending_block_obstack, pending_blocks): Remove.
(scoped_free_pendings::scoped_free_pendings): Default.
(~scoped_free_pendings): Update.
(free_pending_blocks): Remove.
(finish_block_internal, record_pending_block, make_blockvector)
(end_symtab_get_static_block, augment_type_symtab, push_context)
(buildsym_init): Update.
This moves the context stack globals to be members of
buildsym_compunit, changing the type to a std::vector in the process.
Because the callers expect the context stack object to be valid after
being popped, at Simon's suggestion I've changed pop_context to return
the object rather than the pointer.
gdb/ChangeLog
2018-07-20 Tom Tromey <tom@tromey.com>
* coffread.c (coff_symtab_read): Update.
* xcoffread.c (read_xcoff_symtab): Update.
* dwarf2read.c (new_symbol): Update.
(read_func_scope, read_lexical_block_scope): Update.
* dbxread.c (process_one_symbol): Update.
* buildsym.h (context_stack, context_stack_depth): Don't declare.
(outermost_context_p): Remove macro.
(outermost_context_p, get_current_context_stack)
(get_context_stack_depth): Declare.
(pop_context): Return struct context_stack.
* buildsym.c (struct buildsym_compunit) <m_context_stack: New
member.
(context_stack_size): Remove.
(INITIAL_CONTEXT_STACK_SIZE): Remove.
(prepare_for_building, end_symtab_get_static_block)
(augment_type_symtab, push_context): Update.
(pop_context): Return struct context_stack.
(outermost_context_p, get_current_context_stack)
(get_context_stack_depth): New functions.
(buildsym_init): Update.
This makes the Rust parser a pure parser and removes all the
(non-constant) globals from rust-exp.y. This seemed like a nice
simplification to me and I think it should probably be applied to all
the parsers. Perhaps it would be good to go even one step farther and
have all parsers derive from parser_state.
Tested on x86-64 Fedora 26.
gdb/ChangeLog
2018-07-20 Tom Tromey <tom@tromey.com>
* rust-exp.y: Now a pure parser. Update all rules.
(%union): Move earlier.
(current_parser, work_obstack): Remove globals.
(rust_parser, ~rust_parser): Update.
(class rust_parser) <copy_name, concat3, crate_name, super_name,
lex_character, lex_number, lex_string, lex_identifier,
rust_lookup_type, convert_params_to_types, convert_ast_to_type,
convert_name, convert_params_to_expression,
convert_ast_to_expression, ast_basic_type, ast_operation,
ast_compound_assignment, rust_op, ast_literal, ast_dliteral,
ast_structop, ast_structop_anonymous, ast_unary, ast_cast,
ast_call_ish, ast_path, ast_string, ast_struct, ast_range,
ast_array_type, ast_slice_type, ast_reference_type,
ast_pointer_type, ast_function_type, ast_tuple_type>: New methods.
(rust_parse): Update.
(rustyyerror, rustyylex): Add parser parameter.
(rust_lex_test_one, rust_lex_int_test, rust_lex_exception_test)
(rust_lex_stringish_test, rust_lex_test_sequence)
(rust_lex_test_trailing_dot, rust_lex_test_completion)
(rust_lex_test_push_back, rust_lex_tests): Update.
Make the noclone attribute on f1 in vla-optimized-out.c conditional. This
makes the test-case by default identical to
gcc/testsuite/gcc.dg/guality/vla-1.c.
Tested on x86_64-linux.
2018-07-20 Tom de Vries <tdevries@suse.de>
* gdb.base/vla-optimized-out.c: Make noclone attribute conditional on
NOCLONE macro.
* gdb.base/vla-optimized-out.exp: Use additional_flags -DNOCLONE.
The remaining gdb/guile cleanups all handle the memory returned by
gdbscm_scm_to_c_string.
This commit makes gdbscm_scm_to_c_string return a
gdb::unique_xmalloc_ptr instead of a naked pointer, and eliminates the
remaining cleanups.
gdb/ChangeLog:
2018-07-19 Pedro Alves <palves@redhat.com>
* guile/guile-internal.h (gdbscm_scm_to_c_string): Now returns a
gdb::unique_xmalloc_ptr.
* guile/scm-breakpoint.c (gdbscm_set_breakpoint_condition_x):
Adjust to use dbscm_wrap and gdb::unique_xmalloc_ptr.
* guile/scm-exception.c (gdbscm_exception_message_to_string): Use
copy-initialization.
* guile/scm-pretty-print.c (ppscm_print_children): Use
gdb::unique_xmalloc_ptr instead of cleanups.
(gdbscm_apply_val_pretty_printer): Remove cleanups.
* guile/scm-string.c (gdbscm_scm_to_c_string): Now returns a
gdb::unique_xmalloc_ptr.
* guile/scm-type.c (gdbscm_type_field, gdbscm_type_has_field_p):
Adjust to use gdb::unique_xmalloc_ptr.
* guile/scm-utils.c (extract_arg): Adjust.
* guile/scm-value.c (gdbscm_value_field): Adjust to use
gdb::unique_xmalloc_ptr instead of a cleanup.
Pedro's patch to introduce gdbscm_wrap removed the last caller of
make_cleanup_value_free_to_mark. This patch removes this function.
I'm checking this in as obvious. Tested by rebuilding, and by
grepping.
gdb/ChangeLog
2018-07-19 Tom Tromey <tom@tromey.com>
* utils.c (do_value_free_to_mark)
(make_cleanup_value_free_to_mark): Remove.
* utils.h (make_cleanup_value_free_to_mark): Remove.
I ran into a gdb.mi/list-thread-groups-available.exp failure:
...
Running gdb/testsuite/gdb.mi/list-thread-groups-available.exp ...
FAIL: gdb.mi/list-thread-groups-available.exp:
list available thread groups (unexpected output)
PASS: gdb.mi/list-thread-groups-available.exp:
list available thread groups with filter
...
When doing an experiment of running it 100 times in a row, the failure
reproduced 3 times.
Analyzing the original failure led to insufficient quoting of square brackets
in a regexp. This patch fixes the regexp, which resulted in 0 failures in a
100-in-a-row run.
Tested on x86_64-linux.
2018-07-19 Tom de Vries <tdevries@suse.de>
* gdb.mi/list-thread-groups-available.exp (cores_re): Fix quoting in
regular expression.
Commit 557e56be26 ("Eliminate most remaining cleanups under
gdb/guile/") missed adding the && to Args to really forward the
arguments properly. Noticed by inspection.
gdb/ChangeLog:
2018-07-19 Pedro Alves <palves@redhat.com>
* guile/guile-internal.h (gdbscm_wrap): Really make 'args' a
forwarding reference.
Note: the "may be modified" comment is no longer true nowadays.
gdb/ChangeLog:
2018-07-18 Pedro Alves <palves@redhat.com>
* guile/guile.c (gdbscm_execute_gdb_command): Adjust to use
gdbscm_wrap. Use gdb::unique_xmalloc_ptr<char> instead of a
cleanup.
The main complication with the Guile code is that we have two types of
exceptions to consider. GDB/C++ exceptions, and Guile/SJLJ
exceptions. Code that is facing the Guile interpreter must not throw
GDB exceptions, instead Scheme exceptions must be thrown. Also,
because Guile exceptions are SJLJ based, Guile-facing code must not
use local objects with dtors, unless wrapped in a scope with a
TRY/CATCH, because the dtors won't otherwise be run when a Guile
exceptions is thrown.
This commit adds a new gdbscm_wrap wrapper function than encapsulates
a pattern I noticed in many of the functions using
GDBSCM_HANDLE_GDB_EXCEPTION_WITH_CLEANUPS. The wrapper is written
such that you can pass either a lambda to it, or a function plus a
variable number of forwarded args. I used a lambda when its body
would be reasonably short, and a separate function in the larger
cases.
This also convers a few functions that were using
GDBSCM_HANDLE_GDB_EXCEPTION to use gdbscm_wrap too because they
followed a similar pattern.
A few cases of make_cleanup calls are replaced with explicit xfree
calls. The make_cleanup/do_cleanups calls in those cases are
pointless, because do_cleanups won't be called when a Scheme exception
is thrown.
We also have a couple cases of Guile-facing code using RAII-type
objects to manage memory, but those are incorrect, exactly because
their dtor won't be called if a Guile exception is thrown.
gdb/ChangeLog:
2018-07-18 Pedro Alves <palves@redhat.com>
* guile/guile-internal.h: Add comment about mixing GDB and Scheme
exceptions.
(GDBSCM_HANDLE_GDB_EXCEPTION_WITH_CLEANUPS): Delete.
(gdbscm_wrap): New.
* guile/scm-frame.c (gdbscm_frame_read_register): Use xfree
directly instead of a cleanup.
* guile/scm-math.c (vlscm_unop_gdbthrow): New, factored out from ...
(vlscm_unop): ... this. Reimplement using gdbscm_wrap.
(vlscm_binop_gdbthrow): New, factored out from ...
(vlscm_binop): ... this. Reimplement using gdbscm_wrap.
(vlscm_rich_compare): Use gdbscm_wrap.
* guile/scm-symbol.c (gdbscm_lookup_symbol): Use xfree directly
instead of a cleanup.
(gdbscm_lookup_global_symbol): Use xfree directly instead of a
cleanup.
* guile/scm-type.c (gdbscm_type_field, gdbscm_type_has_field_p):
Use xfree directly instead of a cleanup.
* guile/scm-value.c (gdbscm_make_value, gdbscm_make_lazy_value):
Adjust to use gdbscm_wrap and scoped_value_mark.
(gdbscm_value_optimized_out_p): Adjust to use gdbscm_wrap.
(gdbscm_value_address, gdbscm_value_dereference)
(gdbscm_value_referenced_value): Adjust to use gdbscm_wrap and
scoped_value_mark.
(gdbscm_value_dynamic_type): Use scoped_value_mark.
(vlscm_do_cast, gdbscm_value_field): Adjust to use gdbscm_wrap and
scoped_value_mark.
(gdbscm_value_subscript, gdbscm_value_call): Adjust to use
gdbscm_wrap and scoped_value_mark.
(gdbscm_value_to_string): Use xfree directly instead of a
cleanup. Move 'buffer' unique_ptr to TRY scope.
(gdbscm_value_to_lazy_string): Use xfree directly instead of a
cleanup. Move 'buffer' unique_ptr to TRY scope. Use
scoped_value_mark.
(gdbscm_value_fetch_lazy_x): Use gdbscm_wrap.
(gdbscm_parse_and_eval): Adjust to use gdbscm_wrap and
scoped_value_mark.
(gdbscm_history_ref, gdbscm_history_append_x): Adjust to use
gdbscm_wrap.
Consider this snippet from gcc/testsuite/gcc.dg/guality/vla-1.c:
...
int __attribute__((noinline))
f1 (int i)
{
char a[i + 1];
a[0] = 5; /* { dg-final { gdb-test .+1 "i" "5" } } */
return a[0]; /* { dg-final { gdb-test . "sizeof (a)" "6" } } */
}
...
When we compile the test-case with -O1 -g, and query the size of optimized
out vla 'a', we get:
...
$ ./gdb -batch -ex "b f1" -ex "r" -ex "p sizeof (a)" vla-1.exe
Breakpoint 1 at 0x4004a8: file vla-1.c, line 17.
Breakpoint 1, f1 (i=i@entry=5) at vla-1.c:17
17 return a[0];
$1 = 0
...
while we expect a size of '6'.
The problem is that default_read_var_value does not resolve the dynamic type
of a variable if the variable is optimized out.
This patch fixes that, and consequently gdb prints '6', as expected.
Tested on x86_64-linux.
2018-07-18 Tom de Vries <tdevries@suse.de>
* findvar.c (default_read_var_value): Also resolve dynamic type for
LOC_OPTIMIZED_OUT vars.
* gdb.base/vla-optimized-out.c: New test.
* gdb.base/vla-optimized-out.exp: New file.
Fix a bug with commit 4cc0665f24 ("microMIPS support"),
<https://sourceware.org/ml/gdb-patches/2012-05/msg00724.html>, and add
missing microMIPS SYSCALL instruction decoding needed to determine the
location to put a breakpoint at when single-stepping though a syscall.
gdb/
* mips-tdep.c (micromips_next_pc): Add SYSCALL instruction
decoding.
This changes gdbscm_scm_to_string to return a unique_xmalloc_ptr and
then fixes all the callers. This allows for the removal of some
cleanups.
gdb/ChangeLog
2018-07-17 Tom Tromey <tom@tromey.com>
* guile/scm-param.c (pascm_set_func, pascm_show_func)
(compute_enum_list, pascm_set_param_value_x)
(gdbscm_parameter_value): Update.
* guile/guile-internal.h (gdbscm_scm_to_string): Update.
(gdbscm_scm_to_host_string): Update.
* guile/scm-math.c (vlscm_convert_typed_value_from_scheme):
Update.
* guile/scm-cmd.c (cmdscm_add_completion): Update.
* guile/scm-pretty-print.c (ppscm_print_string_repr): Update.
* guile/scm-string.c (gdbscm_scm_to_string): Return
unique_xmalloc_ptr.
(gdbscm_scm_to_host_string): Likewise.
This changes gdbscm_safe_eval_string to return a unique_xmalloc_ptr.
This allows for the removal of some cleanups. It also fixes a
potential latent memory leak in gdbscm_set_backtrace.
gdb/ChangeLog
2018-07-17 Tom Tromey <tom@tromey.com>
* guile/guile.c (gdbscm_eval_from_control_command): Update.
* guile/guile-internal.h (gdbscm_safe_eval_string): Update.
* guile/scm-objfile.c (gdbscm_execute_objfile_script): Update.
* guile/scm-safe-call.c (gdbscm_safe_eval_string): Return
unique_xmalloc_ptr.
This changes gdbscm_exception_message_to_string to return a
unique_xmalloc_ptr, allowing for the removal of some cleanups.
unique_xmalloc_ptr was chosen because at the root of the call chains
is a function from Guile that returns a malloc'd string.
gdb/ChangeLog
2018-07-17 Tom Tromey <tom@tromey.com>
* guile/scm-param.c (pascm_signal_setshow_error): Update.
* guile/guile-internal.h (gdbscm_exception_message_to_string):
Update.
* guile/scm-cmd.c (cmdscm_function): Update.
* guile/scm-pretty-print.c
(ppscm_print_exception_unless_memory_error): Update.
* guile/scm-exception.c (gdbscm_exception_message_to_string):
Return unique_xmalloc_ptr.
This changes ppscm_make_pp_type_error_exception to use std::string,
removing a cleanup.
gdb/ChangeLog
2018-07-17 Tom Tromey <tom@tromey.com>
* guile/scm-pretty-print.c (ppscm_make_pp_type_error_exception):
Use string_printf.
gdb/
* riscv-tdep.c (riscv_has_feature): Delete comment that refers to
set_gdbarch_decr_pc_after_break. Call riscv_read_misa_reg always.
(riscv_gdbarch_init): Delete local has_compressed_isa. Delete now
unecessary braces after EF_RISCV_RVC test. Delete call to
set_gdbarch_decr_pc_after_break.
I think it doesn't really make sense to allow building gdb without the
CLI. Perhaps at one time this was a goal, but libgdb is long gone and
the CLI is intrinsic to gdb.
So, this patch removes the implementation of this configure option.
It is still recognized (this is autoconf's default), but does nothing.
This simplifies configure.ac and Makefile.in a bit.
Tested by rebuilding.
gdb/ChangeLog
2018-07-17 Tom Tromey <tom@tromey.com>
* configure.ac: Remove --disable-gdbcli.
* configure: Rebuild.
* Makefile.in (SUBDIR_CLI_DEPS, SUBDIR_CLI_LDFLAGS)
(SUBDIR_CLI_CFLAGS): Remove.
(SFILES): Use SUBDIR_CLI_SRCS.
(COMMON_OBS): Use SUBDIR_CLI_OBS.
PR gdb/18624 concerns an assertion failure that occurs when setting a
breakpoint in a Go program on Windows.
What happens here is that coff_symtab_read uses buildsym but does not
instantiate scoped_free_pendings. So, the struct pending objects are
never released. Later, dwarf2read.c calls buildsym_init, which
asserts.
This patch fixes the problem by instantiating scoped_free_pendings in
coff_symtab_read.
Tested using the test executable from the PR. I don't know how to
test this more fully.
gdb/ChangeLog
2018-07-17 Tom Tromey <tom@tromey.com>
PR gdb/18624:
* coffread.c (coff_symtab_read): Use scoped_free_pendings.
I found this when doing a --enable-targets=all build with libunwind-ia64
properly configured.
CXX ia64-vms-tdep.o
/home/emaisin/src/binutils-gdb/gdb/ia64-vms-tdep.c: In function ‘int ia64_vms_find_proc_info_x(unw_addr_space_t, unw_word_t, unw_proc_info_t*, int, void*)’:
/home/emaisin/src/binutils-gdb/gdb/ia64-vms-tdep.c:79:33: error: invalid conversion from ‘void*’ to ‘gdb_byte* {aka unsigned char*}’ [-fpermissive]
pi->unwind_info, pi->unwind_info_size);
^
In file included from /home/emaisin/src/binutils-gdb/gdb/target.h:70:0,
from /home/emaisin/src/binutils-gdb/gdb/exec.h:23,
from /home/emaisin/src/binutils-gdb/gdb/gdbcore.h:29,
from /home/emaisin/src/binutils-gdb/gdb/ia64-vms-tdep.c:25:
/home/emaisin/src/binutils-gdb/gdb/target/target.h:35:12: note: initializing argument 2 of ‘int target_read_memory(CORE_ADDR, gdb_byte*, ssize_t)’
extern int target_read_memory (CORE_ADDR memaddr, gdb_byte *myaddr,
^
gdb/ChangeLog:
* ia64-vms-tdep.c (ia64_vms_find_proc_info_x): Add cast.
Commit
9018be22e0 ("Make target_read_alloc & al return vectors")
failed to update the code in ia64-tdep.c, for HAVE_LIBUNWIND_IA64_H.
This patch fixes that.
gdb/ChangeLog:
* ia64-tdep.c (ktab_buf): New global.
(getunwind_table): Return a gdb::optional<gdb::byte_vector>.
(get_kernel_table): Adjust.
This changes a few explicit checks of context_stack_depth to use
outermost_context_p instead. This simplifies some future work.
gdb/ChangeLog
2018-07-16 Tom Tromey <tom@tromey.com>
* xcoffread.c (read_xcoff_symtab): Use outermost_context_p.
* dwarf2read.c (using_directives, new_symbol): Use
outermost_context_p.
* dbxread.c (process_one_symbol): Use outermost_context_p.
* coffread.c (coff_symtab_read): Use outermost_context_p.
free_pending_blocks can be static because scoped_free_pendings (et al)
arrange for it to be NULL in the "steady state". This removes a
couple of unnecessary calls to free_pending_blocks and changes it to
be static.
gdb/ChangeLog
2018-07-16 Tom Tromey <tom@tromey.com>
* xcoffread.c (xcoff_initial_scan): Don't call
free_pending_blocks.
* dbxread.c (dbx_symfile_read): Don't call free_pending_blocks.
* buildsym.h (class scoped_free_pendings): Add constructor.
(free_pending_blocks): Don't declare.
* buildsym.c (scoped_free_pendings::scoped_free_pendings): New.
(free_pending_blocks): Now static.
This moves the global subfile_stack to be a member of
buildsym_compunit. It also change this to be a std::vector, which
simplifies the code.
gdb/ChangeLog
2018-07-16 Tom Tromey <tom@tromey.com>
* buildsym.h (push_subfile, pop_subfile): Update declarations.
* buildsym.c (struct buildsym_compunit) <m_subfile_stack>: New
member.
(struct subfile_stack): Remove.
(subfile_stack): Remove.
(push_subfile, pop_subfile, buildsym_init): Update.
This changes buildsym.c to use gdb_assert rather than internal_error
in a couple of spots.
gdb/ChangeLog
2018-07-16 Tom Tromey <tom@tromey.com>
* buildsym.c (push_subfile): Use gdb_assert.
(pop_subfile): Use gdb_assert.
I discovered that merge_symbol_lists is unused, so this removes it.
gdb/ChangeLog
2018-07-16 Tom Tromey <tom@tromey.com>
* buildsym.h (merge_symbol_lists): Remove.
* buildsym.c (merge_symbol_lists): Remove.
scan_file_globals is defined in stabsread.c, so move its declaration
to stabsread.h.
gdb/ChangeLog
2018-07-16 Tom Tromey <tom@tromey.com>
* stabsread.c (scan_file_globals): Update comment.
* stabsread.h (scan_file_globals): Move from buildsym.h.
* buildsym.h (scan_file_globals): Move to stabsread.h.
buildsym_new_init is just an alias for buildsym_init. This removes
it. In the long run buildsym_init will also go away; this patch just
helps make things a bit clearer in the meantime.
gdb/ChangeLog
2018-07-16 Tom Tromey <tom@tromey.com>
* xcoffread.c (xcoff_new_init): Update.
* mipsread.c (mipscoff_new_init): Update.
* mdebugread.c (mdebug_build_psymtabs): Update.
* elfread.c (elf_new_init): Update.
* dbxread.c (dbx_new_init, coffstab_build_psymtabs)
(elfstab_build_psymtabs, stabsect_build_psymtabs): Update.
* buildsym.h (buildsym_new_init): Don't declare.
* buildsym.c (buildsym_new_init): Remove.
The global within_function is only used by a few symbol readers. This
patch moves the global out of buildsym and into stabsread, which
seemed like a better fit. It also arranges for the existing readers
to clear the global at the appropriate time.
gdb/ChangeLog
2018-07-16 Tom Tromey <tom@tromey.com>
* stabsread.h (within_function): Move from buildsym.h.
* stabsread.c (start_stabs): Clear within_function.
* coffread.c (coff_start_symtab): Clear within_function.
* buildsym.h (within_function): Move to stabsread.h.
* buildsym.c (prepare_for_building): Update.
processing_gcc is also only used by stabsread -- it is set by the
DWARF reader, but this turns out not to be needed. So, this patch
moves processing_gcc and removes the assignment from the DWARF reader.
gdb/ChangeLog
2018-07-16 Tom Tromey <tom@tromey.com>
* stabsread.h (processing_gcc_compilation): Move from buildsym.h.
* dwarf2read.c (dwarf2_start_symtab): Don't set
processing_gcc_compilation.
* buildsym.h (processing_gcc_compilation): Move to stabsread.h.
A few things that currently reside in buildsym.c turn out to be
specific to the stabs reader. This patch moves these from
buildsym.[ch] to stabsread.[ch].
gdb/ChangeLog
2018-07-16 Tom Tromey <tom@tromey.com>
* stabsread.h (HASHSIZE, hashname, symnum, next_symbol_text)
(next_symbol_text_func): Move from buildsym.h.
* stabsread.c (hashname): Move from buildsym.c.
* buildsym.h (HASHSIZE, symnum, next_symbol_text)
(next_symbol_text_func, hashname): Move to stabsread.h.
* buildsym.c: Don't include bcache.h
(hashname): Move to stasbread.c.
context_stack_size is declared in buildsym.h, but only used in
buildsym.c. This makes it static in buildsym.c.
gdb/ChangeLog
2018-07-16 Tom Tromey <tom@tromey.com>
* buildsym.h (context_stack_size): Don't declare.
* buildsym.c (context_stack_size): New global.
processing_acc_compilation is only used in dbxread.c, so move it
there.
gdb/ChangeLog
2018-07-16 Tom Tromey <tom@tromey.com>
* dbxread.c (processing_acc_compilation): New global.
* buildsym.h (processing_acc_compilation): Don't declare.
This moves the global have_line_numbers into buildsym_compunit.
gdb/ChangeLog
2018-07-16 Tom Tromey <tom@tromey.com>
* buildsym.c (struct buildsym_compunit) <m_have_line_numbers>: New
member.
(have_line_numbers): Remove.
(record_line, prepare_for_building, end_symtab_get_static_block)
(augment_type_symtab): Update.