aboutsummaryrefslogtreecommitdiff
path: root/gdb
AgeCommit message (Collapse)AuthorFilesLines
2018-03-30Use std::vector in uploaded_tpSimon Marchi6-46/+55
This patch changes the VEC(char_ptr) fields in uploaded_tp to use std::vector<char *>. At first, I wanted to creep in more changes, like using std::string, but it was making the patch too big and less focused, so I decided to keep it to just that. It also looks like the strings in those vectors are never free'd. If so, we can fix that in another patch. gdb/ChangeLog: * tracepoint.h (struct uploaded_tp): Initialize fields. <actions, step_actions, cmd_strings>: Change type to std::vector<char *>. * tracepoint.c (get_uploaded_tp): Allocate with new. (free_uploaded_tps): Free with delete. (parse_tracepoint_definition): Adjust to std::vector change. * breakpoint.c (read_uploaded_action): Likewise. (create_tracepoint_from_upload): Likewise. * ctf.c (ctf_write_uploaded_tp): Likewise. (SET_ARRAY_FIELD): Likewise. * tracefile-tfile.c (tfile_write_uploaded_tp): Likewise.
2018-03-30Remove some cleanups from solib-svr4.cTom Tromey2-46/+23
This removes a few cleanups from solib-svr4.c in a straightforward way. gdb/ChangeLog 2018-03-30 Tom Tromey <tom@tromey.com> * solib-svr4.c (lm_info_read): Use gdb::byte_vector. Return std::unique_ptr. (svr4_keep_data_in_core): Update. (svr4_read_so_list): Update.
2018-03-30Change target_read_string to use unique_xmalloc_ptrTom Tromey11-49/+55
This changes the out parameter of target_read_string to be a unique_xmalloc_ptr. This avoids a cleanup and sets the stage for more cleanup removals. This patch also removes a seemingly needless alloca from print_subexp_standard. gdb/ChangeLog 2018-03-30 Tom Tromey <tom@tromey.com> * windows-nat.c (handle_output_debug_string, handle_exception): Update. * target.h (target_read_string): Update. * target.c (target_read_string): Change "string" to unique_xmalloc_ptr. * solib-svr4.c (open_symbol_file_object, svr4_read_so_list): Update. * solib-frv.c (frv_current_sos): Update. * solib-dsbt.c (dsbt_current_sos): Update. * solib-darwin.c (darwin_current_sos): Update. * linux-thread-db.c (inferior_has_bug): Update. * expprint.c (print_subexp_standard) <case OP_OBJC_MSGCALL>: Update. Remove alloca. * ada-lang.c (ada_main_name): Update.
2018-03-30Remove free_dwo_file_cleanupTom Tromey2-30/+27
This removes free_dwo_file_cleanup, the last cleanup in dwarf2read.c. This is replaced with a unique_ptr; which, despite the fact that a dwo_file is obstack-allocated, seemed like the best fit. gdb/ChangeLog 2018-03-30 Tom Tromey <tom@tromey.com> * dwarf2read.c (struct free_dwo_file_cleanup_data): Remove. (struct dwo_file_deleter): New. (dwo_file_up): New typedef. (open_and_init_dwo_file): Use dwo_file_up. (free_dwo_file_cleanup): Remove.
2018-03-30Remove parameter from free_dwo_fileTom Tromey2-8/+9
The objfile parameter to free_dwo_file is unused, so remove it. gdb/ChangeLog 2018-03-30 Tom Tromey <tom@tromey.com> * dwarf2read.c (free_dwo_file): Remove "objfile" parameter. (free_dwo_file_cleanup, free_dwo_file_from_slot): Update.
2018-03-30Remove free_cached_comp_units cleanupsTom Tromey2-20/+32
This changes free_cached_comp_units from a cleanup function to an RAII class. gdb/ChangeLog 2018-03-30 Tom Tromey <tom@tromey.com> * dwarf2read.c (class free_cached_comp_units): New class. (dw2_instantiate_symtab, dwarf2_build_psymtabs_hard): Use it. (free_cached_comp_units): Remove function.
2018-03-30Remove make_cleanup_unpush_targetTom Tromey4-27/+31
This removes make_cleanup_unpush_target, replacing it with a unique_ptr. This may seem odd, because the object in question is not actually freed, but unique_ptr provided the necessary functionality. Tested by the buildbot. gdb/ChangeLog 2018-03-30 Tom Tromey <tom@tromey.com> * utils.h (make_cleanup_unpush_target): Remove. * inf-ptrace.c (struct target_unpusher): New. (target_unpush_up) New typedef. (inf_ptrace_create_inferior, inf_ptrace_attach): Use target_unpush_up. * utils.c (do_unpush_target, make_cleanup_unpush_target): Remove.
2018-03-27Remove cleanups from prompt_for_continueTom Tromey2-7/+6
This removes the cleanups from prompt_for_continue by the use of unique_xmalloc_ptr. gdb/ChangeLog 2018-03-27 Tom Tromey <tom@tromey.com> * utils.c (prompt_for_continue): Use unique_xmalloc_ptr.
2018-03-27Remove cleanups from gdb_readline_wrapperTom Tromey2-57/+59
This removes some cleanups from gdb_readline_wrapper by changing the existing gdb_readline_wrapper_cleanup struct to have a constructor and destructor, and then changing gdb_readline_wrapper to simply instantiate it on the stack. gdb/ChangeLog 2018-03-27 Pedro Alves <palves@redhat.com> Tom Tromey <tom@tromey.com> * top.c (class gdb_readline_wrapper_cleanup): Add constructor, destructor. Now a class. (gdb_readline_wrapper_cleanup): Remove function. (gdb_readline_wrapper): Remove cleanups.
2018-03-27C++-ify typedef hashTom Tromey6-165/+153
This changes the typedef_hash_table structure to be a C++ class. It adds constructors and destructors and changes some functions to be methods of the class. Then it changes the various users of this class to adapt. This allows for the removal of some cleanups. Regression tested by the buildbot. gdb/ChangeLog 2018-03-27 Tom Tromey <tom@tromey.com> * typeprint.h (struct type_print_options) <local_typedefs, global_typedefs>: Remove "struct" keyword. (class typedef_hash_table): New class. (recursively_update_typedef_hash, add_template_parameters) (create_typedef_hash, free_typedef_hash, copy_typedef_hash) (find_typedef_in_hash): Don't declare. * typeprint.c (struct typedef_hash_table): Move to typeprint.h. (typedef_hash_table::recursively_update): Rename from recursively_update_typedef_hash. Now a member. (typedef_hash_table::add_template_parameters): Rename from add_template_parameters. Now a member. (typedef_hash_table::typedef_hash_table): Now a constructor; rename from create_typedef_hash. (typedef_hash_table::~typedef_hash_table): Now a destructor; rename from free_typedef_hash. (do_free_typedef_hash, make_cleanup_free_typedef_hash) (do_free_global_table): Remove. (typedef_hash_table::typedef_hash_table): New constructor; renamed from copy_type_recursive. (create_global_typedef_table): Remove. (typedef_hash_table::find_global_typedef): Now a member of typedef_hash_table. (typedef_hash_table::find_typedef): Rename from find_typedef_in_hash; now a member. (whatis_exp): Update. * extension.h (struct ext_lang_type_printers): Add constructor and destructor. (start_ext_lang_type_printers, free_ext_lang_type_printers): Don't declare. * extension.c (ext_lang_type_printers::ext_lang_type_printers): Now a constructor; rename from start_ext_lang_type_printers. (ext_lang_type_printers): Now a destructor; rename from free_ext_lang_type_printers. * c-typeprint.c (find_typedef_for_canonicalize, c_print_type_1): Update. (c_type_print_base_struct_union): Update. Remove cleanups.
2018-03-27Include <cmath> in dwarf-index-write.cTom Tromey2-0/+5
On x86-64 Fedora 26, when building with the system gcc, I get: ../../binutils-gdb/gdb/dwarf-index-write.c: In member function ‘void debug_names::build()’: ../../binutils-gdb/gdb/dwarf-index-write.c:705:13: error: ‘pow’ is not a member of ‘std’ There are actually more messages, but this is sufficient to show the problem. The fix is to include <cmath>. I'm checking this in as obvious. Tested by building. gdb/ChangeLog 2018-03-27 Tom Tromey <tom@tromey.com> * dwarf-index-write.c: Include <cmath>.
2018-03-27set varsize-limit: New GDB setting for maximum dynamic object sizeJoel Brobecker11-0/+167
This is a command we somehow forgot to contribute at the time the Ada language was first contributed to the FSF. This command allows the user to change the maximum size we allow when reading memory from dynamic objects (the default is 65536 bytes). At the moment, this limit is only used by Ada, and so the implementation is kept inside ada-lang.c. However, it is conceivable that other language might want to use it also to handle the same kind of issues; for instance, this might be useful when handling dynamic types in C. So the name of the setting was made language-neutral, to allow for this. Note that an alias for "set var" needs to be introduced as well. We are not adding a test for that, since this is a feature that is already exercized by numerous existing tests. gdb/ChangeLog * NEWS: Add entry describing new "set|show varsize-limit" command. * ada-lang.c (_initialize_ada_language): Add "set/show varsize-limit" command. * printcmd.c (_initialize_printcmd): Add "set var" alias of "set variable". gdb/doc/ChangeLog: * gdb.texinfo (Ada Settings): New subsubsection. gdb/testsuite/ChangeLog: * gdb.ada/varsize_limit: New testcase. Tested on x86_64-linux.
2018-03-27Move DWARF index-related things to a separate fileSimon Marchi7-2053/+2256
I want to add a DWARF index-related feature (automatically produce index files when loading objfiles in GDB), but I don't want to add many hundred lines to the already too big dwarf2read.c. I thought it would be a logical split to move everything related to the DWARF index to its own file. I first tried to move everything that reads and writes DWARF indices to a separate file, but found that the "read" part is a little bit entangled with the rest of dwarf2read.c, so the line is hard to draw about where to split. The write part is quite isolated though, so I moved this part to a new file, dwarf-index-write.c. Some things are necessary to both reading and writing indices, so I placed them in dwarf-index-common.{c,h}. The idea would be to have a dwarf-index-read.c eventually that would use it too (for now that code is still in dwarf2read.c). This required moving some things to a new dwarf2read.h header, so they can be read by the code that writes the index. The patch is big in number of lines, but it's all existing code being moved around. The only changes are that some functions are not static anymore, a declaration is added in a .h file, and therefore the comment is moved there. I built-tested it with a little and big endian target. This patch is also available on the users/simark/split-dwarf2read branch. gdb/ChangeLog: * Makefile.in (COMMON_SFILES): Add dwarf-index-common.c and dwarf-index-write.c (HFILES_NO_SRCDIR): Add dwarf-index-common.h and dwarf2read.h. * dwarf-index-common.c: New file. * dwarf-index-common.h: New file. * dwarf-index-write.c: New file. * dwarf2read.c: Include dwarf2read.h and dwarf-index-common.h. (struct dwarf2_section_info): Move from here. (dwarf2_section_info_def): Likewise. (DEF_VEC_O (dwarf2_section_info_def)): Likewise. (offset_type): Likewise. (DW2_GDB_INDEX_SYMBOL_STATIC_SET_VALUE): Likewise. (DW2_GDB_INDEX_SYMBOL_KIND_SET_VALUE): Likewise. (DW2_GDB_INDEX_CU_SET_VALUE): Likewise. (byte_swap): Likewise. (MAYBE_SWAP): Likewise. (dwarf2_per_cu_ptr): Likewise. (DEF_VEC_P (dwarf2_per_cu_ptr)): Likewise. (struct tu_stats): Likewise. (struct dwarf2_per_objfile): Likewise. (struct dwarf2_per_cu_data): Likewise. (struct signatured_type): Likewise. (sig_type_ptr): Likewise. (DEF_VEC_P (sig_type_ptr)): Likewise. (INDEX4_SUFFIX): Likewise. (INDEX5_SUFFIX): Likewise. (DEBUG_STR_SUFFIX): Likewise. (dwarf2_read_section): Make non-static. (mapped_index_string_hash): Move from here. (dwarf5_djb_hash): Likewise. (file_write): Likewise. (class data_buf): Likewise. (struct symtab_index_entry): Likewise. (struct mapped_symtab): Likewise. (find_slot): Likewise. (hash_expand): Likewise. (add_index_entry): Likewise. (uniquify_cu_indices): Likewise. (class c_str_view): Likewise. (class c_str_view_hasher): Likewise. (class vector_hasher): Likewise. (write_hash_table): Likewise. (psym_index_map): Likewise. (struct addrmap_index_data): Likewise. (add_address_entry): Likewise. (add_address_entry_worker): Likewise. (write_address_map): Likewise. (symbol_kind): Likewise. (write_psymbols): Likewise. (struct signatured_type_index_data): Likewise. (write_one_signatured_type): Likewise. (recursively_count_psymbols): Likewise. (recursively_write_psymbols): Likewise. (class debug_names): Likewise. (check_dwarf64_offsets): Likewise. (psyms_seen_size): Likewise. (write_gdbindex): Likewise. (write_debug_names): Likewise. (assert_file_size): Likewise. (write_psymtabs_to_index): Likewise. (save_gdb_index_command): Likewise. (_initialize_dwarf2_read): Don't register the "save gdb-index" command. * dwarf2read.h: New file.
2018-03-27problem looking up some symbols when they have a linkage nameJoel Brobecker23-2/+278
This patch fixes a known failure in gdb.ada/maint_with_ada.exp (maintenance check-psymtabs). Another way to witness the same issue is by considering the following Ada declarations... type Wrapper is record A : Integer; end record; u00045 : constant Wrapper := (A => 16#060287af#); pragma Export (C, u00045, "symada__cS"); ... which declares a variable name "u00045" but with a linkage name which is "symada__cS". This variable is a record with one component, the Ada equivalent of a struct with one field in C. Trying to print that variable's value currently yields: (gdb) p /x <symada__cS> 'symada(char, signed)' has unknown type; cast it to its declared type This indicates that GDB was only able to find the minimal symbol, but not the full symbol. The expected output is: (gdb) print /x <symada__cS> $1 = (a => 0x60287af) The error message gives a hint about what's happening: We processed the symbol through gdb_demangle, which in the case of this particular symbol name, ends up matching the C++ naming scheme. As a result, the demangler transforms our symbol name into 'symada(char, signed)', thus breaking Ada lookups. This patch fixes the issue by first introducing a new language_defn attribute called la_store_sym_names_in_linkage_form_p, which is a boolean to be set to true for the few languages that do not want their symbols to have their names stored in demangled form, and false otherwise. We then use this language attribute to skip the call to gdb_demangle for all languages whose la_store_sym_names_in_linkage_form_p is true. In terms of the selection of languages for which the new attribute is set to true, the selection errs on the side of preserving the existing behavior, and only changes the behavior for the languages where we are certain storing symbol names in demangling form is not needed. It is conceivable that other languages might be in the same situation, but I not knowing in detail the symbol name enconding strategy, I decided to play it safe and let other language maintainers potentially adjust their language if it makes sense to do so. gdb/ChangeLog: PR gdb/22670 * dwarf2read.c (dwarf2_physname): Do not return the demangled symbol name if the CU's language stores symbol names in linkage format. * language.h (struct language_defn) <la_store_sym_names_in_linkage_form_p>: New field. Adjust all instances of this struct. gdb/testsuite/ChangeLog: * gdb.ada/maint_with_ada.exp: Remove PR gdb/22670 setup_kfail. * gdb.ada/notcplusplus: New testcase. * gdb.base/c-linkage-name.c: New file. * gdb.base/c-linkage-name.exp: New testcase. Tested on x86_64-linux. This also passes AdaCore's internal GDB testsuite.
2018-03-26Remove verbose code from backtrace commandTom Tromey2-18/+4
In https://sourceware.org/ml/gdb-patches/2017-06/msg00741.html, Pedro asks: > Doesn't the "info verbose on" bit affect frame filters too? The answer is that yes, it could. However, it's not completely effective, because the C code can't guess how many frames might need to be unwound to satisfy the request -- a frame filter will request as many frames as it needs. Also, I tried removing this code from backtrace, and I think the result is better without it. In particular, now the expansion line occurs just before the frame that caused the expansion, like: (gdb) bt no-filters #0 0x00007ffff576cecd in poll () from /lib64/libc.so.6 Reading in symbols for ../../binutils-gdb/gdb/event-loop.c...done. #1 0x00000000007ecc33 in gdb_wait_for_event (block=1) at ../../binutils-gdb/gdb/event-loop.c:772 #2 0x00000000007ec006 in gdb_do_one_event () at ../../binutils-gdb/gdb/event-loop.c:347 #3 0x00000000007ec03e in start_event_loop () at ../../binutils-gdb/gdb/event-loop.c:371 Reading in symbols for ../../binutils-gdb/gdb/main.c...done. #4 0x000000000086693d in captured_command_loop ( Reading in symbols for ../../binutils-gdb/gdb/exceptions.c...done. data=0x0) at ../../binutils-gdb/gdb/main.c:325 So, I am proposing this patch to simply remove this code. gdb/ChangeLog 2018-03-26 Tom Tromey <tom@tromey.com> * stack.c (backtrace_command_1): Remove verbose code.
2018-03-26Simplify exception handling in py-framefilter.cTom Tromey2-394/+167
This patch changes py-framefilter.c as suggested by Pedro in: https://sourceware.org/ml/gdb-patches/2017-06/msg00748.html In particular, gdb exceptions are now caught at the outermost layer, rather than in each particular function. This simplifies much of the code. gdb/ChangeLog 2018-03-26 Tom Tromey <tom@tromey.com> * python/py-framefilter.c (py_print_type): Don't catch exceptions. Return void. (py_print_value): Likewise. (py_print_single_arg): Likewise. (enumerate_args): Don't catch exceptions. (py_print_args): Likewise. (py_print_frame): Likewise. (gdbpy_apply_frame_filter): Catch exceptions here.
2018-03-26Improve "backtrace" help textTom Tromey2-6/+12
This improves help text in stack.c in two ways. First, it removes trailing newlines from various help strings. I think these are never needed. Second, it adds a "Usage" line to the "backtrace" text, as suggested by Pedro. gdb/ChangeLog 2018-03-26 Tom Tromey <tom@tromey.com> * stack.c (_initialize_stack): Remove trailing newlines from help text. Add "Usage" line to "backtrace" help.
2018-03-26Call wrap_hint in one more spot in py-framefilter.cTom Tromey2-0/+6
PR python/16486 notes that "bt" output is still wrapped differently when a frame filter is in use. This patch brings it a bit closer by adding one more wrap_hint call, in a place where stack.c does this as well. gdb/ChangeLog 2018-03-26 Tom Tromey <tom@tromey.com> PR python/16486: * python/py-framefilter.c (py_print_args): Call wrap_hint.
2018-03-26Return EXT_LANG_BT_ERROR in one more spot in py-framefilter.cTom Tromey2-0/+6
While reading py-framefilter.c, I found one spot where an exception could be caught but then not be turned into EXT_LANG_BT_ERROR. This patch fixes this spot. gdb/ChangeLog 2018-03-26 Tom Tromey <tom@tromey.com> * python/py-framefilter.c (py_print_single_arg): Return EXT_LANG_BT_ERROR from catch.
2018-03-26Move some code later in backtrace_command_1Tom Tromey2-52/+59
PR backtrace/15584 notes that some code in backtrace_command_1 is not useful when frame filters are in use. This patch moves this code into the no-frame-filters "if". This also removes the unused local "trailing_level", which I noticed while moving the code around. gdb/ChangeLog 2018-03-26 Tom Tromey <tom@tromey.com> PR backtrace/15584: * stack.c (backtrace_command_1): Move some code into no-filters "if".
2018-03-26Throw a "quit" on a KeyboardException in py-framefilter.cTom Tromey5-4/+41
If a C-c comes while the Python code for a frame filter is running, it will be turned into a Python KeyboardException. It seems good for this to be treated like a GDB quit, so this patch changes py-framefilter.c to notice this situation and call throw_quit in this case. gdb/ChangeLog 2018-03-26 Tom Tromey <tom@tromey.com> * python/py-framefilter.c (throw_quit_or_print_exception): New function. (gdbpy_apply_frame_filter): Use it. gdb/testsuite/ChangeLog 2018-03-26 Tom Tromey <tom@tromey.com> * gdb.python/py-framefilter.exp: Add test for KeyboardInterrupt. * gdb.python/py-framefilter.py (name_error): New global. (ErrorInName.function): Use name_error.
2018-03-26Allow C-c to work in backtrace in more casesTom Tromey2-11/+18
PR cli/17716 notes that it is difficult to C-c (or "q" at a pagination prompt) while backtracing using a frame filter. One reason for this is that many places in py-framefilter.c use RETURN_MASK_ALL in a try/catch. This patch changes these spots to use RETURN_MASK_ERROR instead. This is safe to do because this entire file is exception safe now. gdb/ChangeLog 2018-03-26 Tom Tromey <tom@tromey.com> PR cli/17716: * python/py-framefilter.c (py_print_type, py_print_value) (enumerate_args, py_print_args, gdbpy_apply_frame_filter): Use RETURN_MASK_ERROR.
2018-03-26Avoid manual resource management in py-framefilter.cTom Tromey2-15/+10
This patch removes the last bit of manual resource management from py-framefilter.c. This will be useful in the next patch. gdb/ChangeLog 2018-03-26 Tom Tromey <tom@tromey.com> * python/py-framefilter.c (enumerate_args): Use gdb::unique_xmalloc_ptr.
2018-03-26Remove EXT_LANG_BT_COMPLETEDTom Tromey3-9/+14
While looking at the frame filter code, I noticed that EXT_LANG_BT_COMPLETED is not really needed. Semantically there is no difference between the "completed" and "ok" results. So, this patch removes this constant. gdb/ChangeLog 2018-03-26 Tom Tromey <tom@tromey.com> * python/py-framefilter.c (py_print_frame): Return EXT_LANG_BT_OK. (gdbpy_apply_frame_filter): Update comment. * extension.h (enum ext_lang_bt_status) <EXT_LANG_BT_COMPLETED>: Remove. <EXT_LANG_BT_NO_FILTERS>: Change value.
2018-03-26Allow hiding of some filtered framesTom Tromey8-25/+57
When a frame filter elides some frames, they are still printed by "bt", indented a few spaces. PR backtrace/15582 notes that it would be nice for users if elided frames could simply be dropped. This patch adds this capability. gdb/ChangeLog 2018-03-26 Tom Tromey <tom@tromey.com> PR backtrace/15582: * stack.c (backtrace_command): Parse "hide" argument. * python/py-framefilter.c (py_print_frame): Handle PRINT_HIDE. * extension.h (enum frame_filter_flags) <PRINT_HIDE>: New constant. gdb/doc/ChangeLog 2018-03-26 Tom Tromey <tom@tromey.com> PR backtrace/15582: * gdb.texinfo (Backtrace): Mention "hide" argument. gdb/testsuite/ChangeLog 2018-03-26 Tom Tromey <tom@tromey.com> PR backtrace/15582: * gdb.python/py-framefilter.exp: Add "bt hide" test.
2018-03-26Change backtrace_command_1 calling to use flagsTom Tromey2-10/+13
The next patch will add more flags to backtrace_command_1; and rather than add another boolean argument, this patch changes it to accept a flags value. gdb/ChangeLog 2018-03-26 Tom Tromey <tom@tromey.com> * stack.c (backtrace_command_1): Remove "show_locals" parameter, add "flags". (backtrace_command): Remove "fulltrace", add "flags".
2018-03-26Rationalize "backtrace" command line parsingTom Tromey4-73/+57
The backtrace command has peculiar command-line parsing. In particular, it splits the command line, then loops over the arguments. If it sees a word it recognizes, like "full", it effectively drops this word from the argument vector. Then, it pastes together the remaining arguments, passing them on to backtrace_command_1, which in turn passes the resulting string to parse_and_eval_long. The documentation doesn't mention the parse_and_eval_long at all, so it is a bit of a hidden feature that you can "bt 3*2". The strange algorithm above also means you can "bt 3 * no-filters 2" and get 6 frames... This patch changes backtrace's command line parsing to be a bit more rational. Now, special words like "full" are only recognized at the start of the command. This also updates the documentation to describe the various bt options individually. gdb/ChangeLog 2018-03-26 Tom Tromey <tom@tromey.com> * stack.c (backtrace_command): Rewrite command line parsing. gdb/doc/ChangeLog 2018-03-26 Tom Tromey <tom@tromey.com> * gdb.texinfo (Backtrace): Describe options individually.
2018-03-26Remove DEF_VEC_I(offset_type)Simon Marchi2-2/+4
It is unused. gdb/ChangeLog: * dwarf2read.c (DEF_VEC_I(offset_type)): Remove.
2018-03-26Add include guard to filename-seen-cache.hSimon Marchi2-0/+9
While moving things around, I stumbled on filename_seen_cache being re-defined, because filename-seen-cache.h doesn't have an include guard. gdb/ChangeLog: * filename-seen-cache.h: Add include guard.
2018-03-26Remove struct keyword from section_addr_infoKeith Seitz3-2/+9
Buildbot pointed out a failiure in windows-nat.c: ../../binutils-gdb/gdb/windows-nat.c:582:10: error: using typedef-name 'section_addr_info' after 'struct' struct section_addr_info *addrs; ^~~~~~~~~~~~~~~~~ In file included from ../../binutils-gdb/gdb/windows-nat.c:49:0: ../../binutils-gdb/gdb/symfile.h:75:37: note: 'section_addr_info' has a previous declaration here typedef std::vector<other_sections> section_addr_info; ^~~~~~~~~~~~~~~~~ A recursive grep of the sources for "struct section_addr_info" reveals one additional reference in a comment. In both cases, this patch simply removes the struct keyword. gdb/ChangeLog: * symfile.c (place_section): Remove "struct" from section_addr_info in comment. * windows-nat.c (struct safe_symbol_file_add_args) <addrs>: Remove "struct" keyword from section_addr_info.
2018-03-26Make gdbserver reg_defs a vector of objectsAlan Hayward6-37/+42
gdb/ * regformats/regdef.h (reg): Add constructors. gdb/gdbserver/ * regcache.c (find_register_by_number): Return a ref. (find_regno): Use references. (register_size): Likewise. (register_data): Likewise. * tdesc.c (target_desc::~target_desc): Remove free calls. (target_desc::operator==): Use std::vector compare. (init_target_desc): Use reference. (tdesc_create_reg): Use reg constructors. * tdesc.h (struct target_desc): Replace pointer with object.
2018-03-25eval.c: reverse minsym and symPedro Alves2-4/+9
I noticed that in evaluate_funcall, where we handle OP_VAR_MSYM_VALUE/OP_VAR_VALUE to figure out the symbol's name gets the minimal_symbol/symbol backwards. Happens to be harmless in practice because the symbol name is recorded in the common initial sequence (in the general_symbol_info field). gdb/ChangeLog: 2018-03-25 Pedro Alves <palves@redhat.com> * eval.c (evaluate_funcall): Swap OP_VAR_MSYM_VALUE/OP_VAR_VALUE if then/else bodies in var_func_name extraction.
2018-03-25Fix date in gdb/ChangeLogPedro Alves1-1/+1
2018-03-23aarch64: Make "info address" resolve TLS variablesWeimin Pan3-15/+10
TLS variables can't be resolved on aarch64-linux-gnu Running the test case with upstream gdb shows two failures: (1) Receiving different error messages when printing TLS variable before program runs - because the ARM compiler does not emit dwarf attribute DW_AT_location for TLS, the result is expected and the baseline may need to be changed for aarch64. (2) Using "info address" command on C++ static TLS object resulted in "symbol unresolved" error - below is a snippet from the test case: class K { public: static __thread int another_thread_local; }; __thread int K::another_thread_local; (gdb) info address K::another_thread_local Symbol "K::another_thread_local" is unresolved. This patch contains fix for (2). Function info_address_command() handles the "info address" command and calls lookup_minimal_symbol_and_objfile() to find sym's symbol entry in mininal symbol table if SYMBOL_COMPUTED_OPS (sym) is false. Problem is that function lookup_minimal_symbol_and_objfile() only looked up an objfile's minsym ordinary hash table, not its demangled hash table, which was the reason why the C++ name was not found. The fix is to call lookup_minimal_symbol(), which already looks up entries in both minsym's hash tables, to find names when traversing the object file list in lookup_minimal_symbol_and_objfile(). Tested in both aarch64-linux-gnu and amd64-linux-gnu. No regressions.
2018-03-23Add psymbols for nested typesKeith Seitz7-1/+190
c++/22968 involves the inability of ptype to find a type definition for a type defined inside another type. I recently added some additional support for nested type definitions, but I apparently overlooked psymbols. The user reports that using -readnow fixes the problem: $ gdb 22968 -ex "ptype Outer::Inner" There is no field named Inner $ gdb -readnow 22968 -ex "ptype Outer::Inner" type = struct Outer::Inner { <no data field> } We clearly did not find a psymbol for Outer::Inner because it was located in another CU. This patch addresses this problem by scanning structs for additional psymbols. Rust is already doing this. With this patch, the identical result to "-readnow" is given (without using `-readnow', of course). gdb/ChangeLog: PR c++/22968 * dwarf2read.c (scan_partial_symbols): Scan structs/classes for nested type definitions for C++, too. gdb/testsuite/ChangeLog: PR c++/22968 * gdb.cp/subtypes.exp: New file. * gdb.cp/subtypes.h: New file. * gdb.cp/subtypes.cc: New file. * gdb.cp/subtypes-2.cc: New file.
2018-03-23Change machoread.c to use std::vectorTom Tromey2-56/+47
This changes machoread.c to use std::vector rather than VEC. This allows removing some cleanups. Regression tested by the buildbot, though I don't think anything actually tests macho reading. gdb/ChangeLog 2018-03-23 Tom Tromey <tom@tromey.com> * machoread.c (struct oso_el): Add a constructor. Don't define as a typedef. (macho_register_oso): Remove. (macho_symtab_read): Take a std::vector. (oso_el_compare_name): Now a std::sort comparator. (macho_symfile_read_all_oso): Take a std::vector. (macho_symfile_read): Use std::vector. Remove cleanups.
2018-03-23Make gdbserver find_register_by_number staticAlan Hayward3-16/+14
gdbserver/ * regcache.c (find_register_by_number): Make static. (find_regno): Use find_register_by_number * regcache.h (struct reg): Remove declaration.
2018-03-23gdb: Fix testsuite issue in gdb.arch/amd64-disp-step-avx.expAndrew Burgess3-8/+32
This test starts up and confirms that $xmm0 has the value 0, it then modifies $xmm0 (in the inferior) and confirms that the new value can be read (in GDB). On some machines I was noticing that this test would occasionally fail, and on investigation I believe that the reason for this is that the test is linked as a dynamically linked executable and makes use of the system libraries during startup. The reason that this causes problems is that both the runtime linker and the startup code run before main can, and do (on at least some platforms) make use of the XMM registers. In this commit I modify the test program slightly to allow it to be linked statically, without using the startup libraries. Now by the time GDB reaches the symbol main we have only executed one 'nop' instruction, and the XMM registers should all have the value 0. I've extended the test script to confirm that $xmm0 to $xmm15 are all initially 0, and I also check that at the point after $xmm0 has been modified, all the other XMM registers ($xmm1 to $xmm15) are still 0. The test program is still linked against libc in order that we can call the exit function, however, we now call _exit rather than exit in order to avoid all of the usual cleanup that exit does. This clean up tries to tear down things that are usually setup during the startup code, but now this isn't called calling exit will just result in a crash. gdb/testsuite/ChangeLog: * gdb.arch/amd64-disp-step-avx.S: Add '_start' label. (done): Call '_exit' not 'exit' to avoid atexit handlers. * gdb.arch/amd64-disp-step-avx.exp: Pass -static, and -nostartfiles when compiling the test. Confirm that all registers xmm0 to xmm15 are initially 0, and that xmm1 to xmm15 are 0 after.
2018-03-23gdb: Minor cleanup in some gdb.arch/* testsAndrew Burgess6-33/+16
A small number of tests incorrectly tried to pass -Wa,-g through to GCC as an extra compile time flag, either to gdb_compile or prepare_for_testing. The problem is that the syntax used for passing the flags was incorrect, and as a result these extra flags were being ignored. Luckily, the 'debug' flag was being passed in each case anyway, which means that the '-g' flag would already be added. Given that all these tests pass 'debug', and the invalid flag has been ignored for some time, I'm just removing the flags in this commit. I've also changed the tests from using gdb_compile to prepare_for_testing, which allows some extra code to be removed from a couple of tests scripts. There should be no change in the test results after this commit. gdb/testsuite/ChangeLog: * gdb.arch/amd64-disp-step-avx.exp: Remove unneeded assembler flag option, syntax was wrong anyway. * gdb.arch/arm-disp-step.exp: Likewise. * gdb.arch/sparc64-regs.exp: Likewise. * gdb.arch/amd64-disp-step.exp: Remove unneeded assembler flag option, syntax was wrong anyway, switch to use prepare_for_testing. * gdb.arch/i386-disp-step.exp: Likewise.
2018-03-23Move gdbserver tdesc header funcs to c fileAlan Hayward3-42/+57
gdbserver/ * tdesc.c (target_desc::~target_desc): Move to here. (target_desc::operator==): Likewise. * tdesc.h (target_desc::~target_desc): Move from here. (target_desc::operator==): Likewise.
2018-03-23Testsuite: fully migrate to use_gdb_stub convenience funcAndreas Arnez25-24/+52
In the GDB test suite, there are still multiple invocations of "target_info exists use_gdb_stub". However, the recommended way of checking for use_gdb_stub is to call the convenience function of the same name. Replace these occurrences and just call "use_gdb_stub" instead. gdb/testsuite/ChangeLog: * gdb.ada/exec_changed.exp: Replace "target_info exists use_gdb_stub" by "use_gdb_stub". * gdb.ada/start.exp: Likewise. * gdb.base/async-shell.exp: Likewise. * gdb.base/attach-pie-misread.exp: Likewise. * gdb.base/attach-wait-input.exp: Likewise. * gdb.base/break-entry.exp: Likewise. * gdb.base/break-interp.exp: Likewise. * gdb.base/dprintf-detach.exp: Likewise. * gdb.base/nostdlib.exp: Likewise. * gdb.base/solib-nodir.exp: Likewise. * gdb.base/statistics.exp: Likewise. * gdb.base/testenv.exp: Likewise. * gdb.mi/mi-exec-run.exp: Likewise. * gdb.mi/mi-start.exp: Likewise. * gdb.multi/dummy-frame-restore.exp: Likewise. * gdb.multi/multi-arch-exec.exp: Likewise. * gdb.multi/multi-arch.exp: Likewise. * gdb.multi/tids.exp: Likewise. * gdb.multi/watchpoint-multi.exp: Likewise. * gdb.python/py-events.exp: Likewise. * gdb.threads/attach-into-signal.exp: Likewise. * gdb.threads/attach-stopped.exp: Likewise. * gdb.threads/threadapply.exp: Likewise. * lib/selftest-support.exp: Likewise.
2018-03-22Remove some cleanups from record-full.cTom Tromey2-15/+12
This removes some cleanups from record-full.c in a straightforward way. Tested by the buildbot. gdb/ChangeLog 2018-03-22 Tom Tromey <tom@tromey.com> * record-full.c (record_full_exec_insn): Use gdb::byte_vector. (record_full_goto_bookmark): Use std::string.
2018-03-22ppc: Fix stwux and stdux masks in skip_prologuePedro Franco de Carvalho2-9/+8
This patch merges the masks for matching the stwux and stdux instructions in rs6000-tdep.c:skip_prologue into a single mask that only matches these two instructions. Commit 72dd273062 fixed the warning described in PR tdep/18295, this patch addresses the comment in the same PR indicating that the mask was too permissive. gdb/Changelog: PR tdep/18295 * rs6000-tdep.c (skip_prologue): Match both stwux and stdux a single mask.
2018-03-22ppc: Detect when LR is saved through frame pointerPedro Franco de Carvalho2-18/+63
This patch extends rs6000-tdep.c:skip_prologue so that it can detect when the Link Register is saved using the frame pointer (usually r31) in adition to the stack pointer (r1). The frame pointer offset from the frame base is tracked separately from the stack pointer offset for cases when the frame pointer is not in synch with the stack pointer at the moment of the LR save. Previously, "stq" could also be detected as an instruction that saves LR or CR. Because this was likely unintentional, this patch also restricts the matches to stw/stwu/std/stdu. gdb/ChangeLog: * rs6000-tdep.c (store_insn_p): New function. (skip_prologue): New variable alloca_reg_offset. Set lr_reg and cr_reg to their unshifted values. Use store_insn_p to match LR saves using either R1 or fdata->alloca_reg. Use store_insn_p to match CR saves. Set alloca_reg_offset when alloca_reg and framep are set. Remove lr_reg shift when assigning to fdata->lr_register.
2018-03-22Make "info proc cmdline" show args on GNU/LinuxAndreas Arnez4-4/+38
Currently "info proc cmdline" on GNU/Linux does not show the full command line, but only argument 0. And even a warning is shown if there are more. This was discussed in 2014 already: https://sourceware.org/ml/gdb-patches/2014-04/msg00212.html Follow the advice there and avoid target_fileio_read_stralloc. Instead, use target_fileio_read_alloc to read the whole command line and then replace NUL characters by spaces. Also add an appropriate test case. Note that gdbserver already handles this correctly. gdb/ChangeLog: * linux-tdep.c (linux_info_proc): For "info proc cmdline", print command line args instead of emitting a warning. gdb/testsuite/ChangeLog: * gdb.base/info-proc.exp: Add test for "info proc cmdline".
2018-03-22S390: Correct brace style in s390_get_wordsizeAndreas Arnez2-4/+9
This corrects bad formatting in the newly introduced function s390_get_wordsize. gdb/gdbserver/ChangeLog: * linux-s390-low.c (s390_get_wordsize): Correct brace style.
2018-03-22Get rid of VEC(static_tracepoint_marker_p)Simon Marchi14-195/+183
This patch replaces VEC(static_tracepoint_marker_p) with std::vector, and does some c++ification around that. I thought a new overload of hex2str was useful, so I added it as well as corresponding unit tests. I also added an overload of ui_out::field_string that takes an std::string directly. gdb/ChangeLog: * tracepoint.h (struct static_tracepoint_marker): Initialize fields, define default constructor, move constructor and move assignment, disable the rest. <str_id, extra>: Make std::string. (release_static_tracepoint_marker): Remove. (free_current_marker): Remove. * tracepoint.c (free_current_marker): Remove. (parse_static_tracepoint_marker_definition): Adjust to std::string, use new hex2str overload. (release_static_tracepoint_marker): Remove. (print_one_static_tracepoint_marker): Get marker by reference and adjust to std::string. (info_static_tracepoint_markers_command): Adjust to std::vector changes * target.h (static_tracepoint_marker_p): Remove typedef. (DEF_VEC_P(static_tracepoint_marker_p)): Remove. (struct target_ops) <to_static_tracepoint_marker_at>: Return bool. <to_static_tracepoint_markers_by_strid>: Return std::vector. * target-debug.h (target_debug_print_VEC_static_tracepoint_marker_p_p): Remove. (target_debug_print_std_vector_static_tracepoint_marker): New. (target_debug_print_struct_static_tracepoint_marker_p): Rename to... (target_debug_print_static_tracepoint_marker_p): ... this. * target-delegates.c: Re-generate. * breakpoint.h (struct tracepoint) <static_trace_marker_id>: Make std::string. * breakpoint.c (init_breakpoint_sal): Adjust to std::string. (decode_static_tracepoint_spec): Adjust to std::vector. (tracepoint_print_one_detail): Adjust to std::string. (strace_marker_decode_location): Adjust to std::string. (update_static_tracepoint): Adjust to std::string, remove call to release_static_tracepoint_marker. * linux-nat.c (linux_child_static_tracepoint_markers_by_strid): Adjust to std::vector. * remote.c (remote_static_tracepoint_marker_at): Return bool. (remote_static_tracepoint_markers_by_strid): Adjust to std::vector. * common/rsp-low.h (hex2str): New overload with explicit count of bytes. * common/rsp-low.c (hex2str): New overload with explicit count of bytes. * unittests/rsp-low-selftests.c (test_hex2str): New function. (_initialize_rsp_low_selftests): Add test_hex2str test. * unittests/tracepoint-selftests.c (test_parse_static_tracepoint_marker_definition): Adjust to std::string.
2018-03-22Make parse_static_tracepoint_marker_definition work with multiple static ↵Simon Marchi4-3/+91
tracepoint definitions Since I modify the parse_static_tracepoint_marker_definition function in the next patch, I wanted to write a unit test for it. Doing so showed that it doesn't handle multiple consecutive static tracepoint definitions separated by commas. However, the RSP documentation [1] states that servers may return multiple definitions, like: 1234:6d61726b657231:6578747261207374756666,abba:6d61726b657232: The problem is that the function uses strlen to compute the length of the last field (the extra field). If there are additional definitions in addition to the one we are currently parsing, the returned length will include those definitions, and we'll try to hex-decode past the extra field. This patch changes parse_static_tracepoint_marker_definition to consider the case where the current definition is followed by a comma and more definitions. It also adds the unit test that found the issue in the first place. I don't think this causes any backwards compatibility issues, because the previous code only handled single static tracepoint definitions, and the new code handles that correctly. gdb/ChangeLog: * tracepoint.c (parse_static_tracepoint_marker_definition): Consider case where the definition is followed by more definitions. * Makefile.in (SUBDIR_UNITTESTS_SRCS): Add tracepoint-selftests.c. * unittests/tracepoint-selftests.c: New. [1] https://sourceware.org/gdb/onlinedocs/gdb/Tracepoint-Packets.html#qTfSTM
2018-03-21Add myself as a write-after-approval GDB maintainer.Pedro Franco de Carvalho2-0/+6
gdb/ChangeLog: 2018-03-21 Pedro Franco de Carvalho <pedromfc@linux.vnet.ibm.com> * MAINTAINERS (Write After Approval): Add Pedro Franco de Carvalho.
2018-03-21S390: Make IPA recognize tdescs with guarded storageAndreas Arnez3-2/+23
The in-process agent does not handle tdescs with guarded storage yet. This is fixed. gdb/gdbserver/ChangeLog: * linux-s390-ipa.c (get_ipa_tdesc): Add handling for S390_TDESC_GS. * linux-s390-low.c (s390_get_ipa_tdesc_idx): Likewise. (initialize_low_tracepoint): Call init_registers_s390x_gs_linux64 and init_registers_s390_gs_linux64.