aboutsummaryrefslogtreecommitdiff
path: root/gdb
AgeCommit message (Collapse)AuthorFilesLines
2017-09-20Make "list ambiguous" show symbol names tooPedro Alves8-12/+45
Currently, with an ambiguous "list first,last", we get: (gdb) list bar,main Specified first line 'bar' is ambiguous: file: "src/gdb/testsuite/gdb.cp/overload.cc", line number: 97 file: "src/gdb/testsuite/gdb.cp/overload.cc", line number: 98 This commit makes gdb's output above a bit clearer by printing the symbol name as well: (gdb) list bar,main Specified first line 'bar' is ambiguous: file: "src/gdb/testsuite/gdb.cp/overload.cc", line number: 97, symbol: "bar(A)" file: "src/gdb/testsuite/gdb.cp/overload.cc", line number: 98, symbol: "bar(B)" And while at it, makes gdb print the symbol name when actually listing multiple locations too. I.e., before (with "set listsize 2"): (gdb) list bar file: "src/gdb/testsuite/gdb.cp/overload.cc", line number: 97 96 97 int bar (A) { return 11; } file: "src/gdb/testsuite/gdb.cp/overload.cc", line number: 98 97 int bar (A) { return 11; } 98 int bar (B) { return 22; } After: (gdb) list bar file: "src/gdb/testsuite/gdb.cp/overload.cc", line number: 97, symbol: "bar(A)" 96 97 int bar (A) { return 11; } file: "src/gdb/testsuite/gdb.cp/overload.cc", line number: 98, symbol: "bar(B)" 97 int bar (A) { return 11; } 98 int bar (B) { return 22; } Currently, the result of decoding a linespec loses information about the original symbol that was found. All we end up with is an address. This makes it difficult to find the original symbol again to get at its print name. Fix that by storing a pointer to the symbol in the sal. We already store the symtab and obj_section, so it feels like a natural progression to me. This avoids having to do any extra symbol lookup too. gdb/ChangeLog: 2017-09-20 Pedro Alves <palves@redhat.com> * cli/cli-cmds.c (list_command): Use print_sal_location. (print_sal_location): New function. (ambiguous_line_spec): Use print_sal_location. * linespec.c (symbol_to_sal): Record the symbol in the sal. * symtab.c (find_function_start_sal): Likewise. * symtab.h (symtab_and_line::symbol): New field. gdb/testsuite/ChangeLog: 2017-09-20 Pedro Alves <palves@redhat.com> * gdb.base/list-ambiguous.exp (test_list_ambiguous_symbol): Expect symbol names in gdb's output. * gdb.cp/overload.exp ("list all overloads"): Likewise.
2017-09-20Fix "list ambiguous_variable"Pedro Alves6-46/+86
The "list" command allows specifying the name of variables as argument, not just functions, so that users can type "list a_global_variable". That support is a broken when it comes to ambiguous locations though. If there's more than one such global variable in the program, e.g., static globals in different compilation units, GDB ends up listing the source of the first variable it finds, only. linespec.c does find both symbol and minsym locations for all the globals. The problem is that it ends up merging all the resulting sals into one, because they all have address, zero. I.e., all sals end up with sal.pc == 0, so maybe_add_address returns false for all but the first. The zero addresses appear because: - in the minsyms case, linespec.c:minsym_found incorrectly treats all minsyms as if they were function/text symbols. In list mode we can end up with data symbols there, and we shouldn't be using find_pc_sect_line on data symbols. - in the debug symbols case, symbol_to_sal misses recording an address (sal.pc) for non-block, non-label symbols. gdb/ChangeLog: 2017-09-20 Pedro Alves <palves@redhat.com> * linespec.c (minsym_found): Handle non-text minsyms. (symbol_to_sal): Record a sal.pc for non-block, non-label symbols. gdb/testsuite/ChangeLog: 2017-09-20 Pedro Alves <palves@redhat.com> * gdb.base/list-ambiguous.exp (test_list_ambiguous_function): Rename to ... (test_list_ambiguous_symbol): ... this and add a symbol name parameter. Adjust. (test_list_ambiguous_function): Reimplement on top of test_list_ambiguous_symbol and also test listing ambiguous variables. * gdb.base/list-ambiguous0.c (ambiguous): Rename to ... (ambiguous_fun): ... this. (ambiguous_var): New. * gdb.base/list-ambiguous1.c (ambiguous): Rename to ... (ambiguous_fun): ... this. (ambiguous_var): New.
2017-09-20[OBV] amd64-features-makefile: add missing backslash.Walfred Tedeschi2-1/+6
In an old commit the backslash of was missing in the rule for creating the i386-avx-mpx-avx512-pku.dat file. No need to regenerate the files, this was done by another commit from Yao. 2017-09-20 Walfred Tedeschi <walfred.tedeschi@intel.com> * features/Makefile (i386-avx-mpx-avx512-pku.dat): Add backslash.
2017-09-20add ChangeLog from previous commitWalfred Tedeschi1-0/+6
2017-09-20gdb - avx512: tests were failing due to missing memory aligment.Walfred Tedeschi1-64/+64
Test was running on a fault during code execution. Analysis have shown that the wrong instruction had been used. An instruction that takes not alligned memory is more appropriated for the task. ChangeLog: 2017-09-20 Walfred Tedeschi <walfred.tedeschi@intel.com> gdb/testesuite/ChangeLog: * gdb.arch/i386-avx512.c (move_zmm_data_to_reg): Use vmovups instead vmovaps. (move_zmm_data_to_memory): Use vmovups instead vmovaps. Change-Id: I4a95560861ef1792ed6ce86578fdd726162863f1
2017-09-19Add a 'starti' command.John Baldwin9-26/+225
This works like 'start' but it stops at the first instruction rather than the first line in main(). This is useful if one wants to single step through runtime linker startup. While here, introduce a RUN_ARGS_HELP macro for shared help text between run, start, and starti. This includes expanding the help for start and starti to include details from run's help text. gdb/ChangeLog: * NEWS (Changes since GDB 8.0): Add starti. * infcmd.c (enum run_break): New. (run_command_1): Queue pending event for RUN_STOP_AT_FIRST_INSN case. (run_command): Use enum run_how. (start_command): Likewise. (starti_command): New function. (RUN_ARGS_HELP): New macro. (_initialize_infcmd): Use RUN_ARGS_HELP for run and start commands. Add starti command. gdb/doc/ChangeLog: * gdb.texinfo (Starting your Program): Add description of starti command. Mention starti command as an alternative for debugging the elaboration phase. gdb/testsuite/ChangeLog: * gdb.base/starti.c: New file. * gdb.base/starti.exp: New file. * lib/gdb.exp (gdb_starti_cmd): New procedure.
2017-09-19Remove one explicit rule for monitor.oYao Qi2-11/+4
gdb/monitor.c was removed by 40e0b27 (Delete the remaining ROM monitor targets). gdb: 2017-09-19 Yao Qi <yao.qi@linaro.org> * Makefile.in (monitor.o): Remove the rule.
2017-09-19Use DISABLE_COPY_AND_ASSIGNYao Qi19-63/+46
We have many classes that copy cotr and assignment operator are deleted, so this patch replaces these existing mechanical code with macro DISABLE_COPY_AND_ASSIGN. gdb: 2017-09-19 Yao Qi <yao.qi@linaro.org> * annotate.h (struct annotate_arg_emitter): Use DISABLE_COPY_AND_ASSIGN. * common/refcounted-object.h (refcounted_object): Likewise. * completer.h (struct completion_result): Likewise. * dwarf2read.c (struct dwarf2_per_objfile): Likewise. * filename-seen-cache.h (filename_seen_cache): Likewise. * gdbcore.h (thread_section_name): Likewise. * gdb_regex.h (compiled_regex): Likewise. * gdbthread.h (scoped_restore_current_thread): Likewise. * inferior.h (scoped_restore_current_inferior): Likewise. * jit.c (jit_reader): Likewise. * linespec.h (struct linespec_result): Likewise. * mi/mi-parse.h (struct mi_parse): Likewise. * nat/fork-inferior.c (execv_argv): Likewise. * progspace.h (scoped_restore_current_program_space): Likewise. * python/python-internal.h (class gdbpy_enter): Likewise. * regcache.h (regcache): Likewise. * target-descriptions.c (struct tdesc_reg): Likewise. (struct tdesc_type): Likewise. (struct tdesc_feature): Likewise. * ui-out.h (ui_out_emit_type): Likewise.
2017-09-18dwarf2expr: Remove unused abort_expression label in execute_stack_opSimon Marchi2-1/+5
The label abort_expression is unused, so remove it. gdb/ChangeLog: * dwarf2expr.c (dwarf_expr_context::execute_stack_op): Remove label abort_expression.
2017-09-16Refactor handle_qxfer_libraries and friends to use std::stringSimon Marchi2-55/+19
Using std::string in handle_qxfer_libraries and friends allow to simplify the code. We don't have to manually free the buffer, and we don't have to pre-compute the required space. gdb/gdbserver/ChangeLog: * server.c (accumulate_file_name_length): Remove. (emit_dll_description): Adjust to std::string change. (handle_qxfer_libraries): Use std::string to hold document.
2017-09-16Make xml_escape_text return an std::stringSimon Marchi10-66/+43
This is a simple replacement, it allows removing some manual free'ing in the callers. gdb/ChangeLog: * common/buffer.c (buffer_xml_printf): Adjust. * common/xml-utils.c (xml_escape_text): Change return type to std::string, update code accordingly. * common/xml-utils.h (xml_escape_text): Change return type to std::string. * rs6000-aix-tdep.c (rs6000_aix_shared_library_to_xml): Adjust. * windows-tdep.c (windows_xfer_shared_library): Adjust. * unittests/xml-utils-selftests.c (test_xml_escape_text): Adjust. gdb/gdbserver/ChangeLog: * linux-low.c (linux_qxfer_libraries_svr4): Adjust to change of return type of xml_escape_text. * server.c (emit_dll_description): Likewise.
2017-09-16Add unit test for xml_escape_textSimon Marchi3-2/+56
The following patch modifies xml_escape_text, so I took the opportunity to write a unit test for it. gdb/ChangeLog: * Makefile.in (SUBDIR_UNITTESTS_SRCS): Add new source file. (SUBDIR_UNITTESTS_OBS): Add new object file. * unittests/xml-utils-selftests.c: New file.
2017-09-16Add selftests run filteringSimon Marchi29-108/+287
With the growing number of selftests, I think it would be useful to be able to run only a subset of the tests. This patch associates a name to each registered selftest. It then allows doing something like: (gdb) maintenance selftest aarch64 Running self-tests. Running selftest aarch64-analyze-prologue. Running selftest aarch64-process-record. Ran 2 unit tests, 0 failed or with gdbserver: ./gdbserver --selftest=aarch64 In both cases, only the tests that contain "aarch64" in their name are ran. To help validate that the tests you want to run were actually ran, it also prints a message with the test name before running each test. Right now, all the arch-dependent tests are registered as a single test of the selftests. To be able to filter those too, I made them "first-class citizen" selftests. The selftest type is an interface, with different implementations for "simple selftests" and "arch selftests". The run_tests function simply iterates on that an invokes operator() on each test. I changed the tests data structure from a vector to a map, because - it allows iterating in a stable (alphabetical) order - it allows to easily verify if a test with a given name has been registered, to avoid duplicates There's also a new command "maintenance info selftests" that lists the registered selftests. gdb/ChangeLog: * common/selftest.h (selftest): New struct/interface. (register_test): Add name parameter, add new overload. (run_tests): Add filter parameter. (for_each_selftest_ftype): New typedef. (for_each_selftest): New declaration. * common/selftest.c (tests): Change type to map<string, unique_ptr<selftest>>. (simple_selftest): New struct. (register_test): New function. (register_test): Add name parameter and use it. (run_tests): Add filter parameter and use it. Add prints. Adjust to vector -> map change. * aarch64-tdep.c (_initialize_aarch64_tdep): Add names when registering selftests. * arm-tdep.c (_initialize_arm_tdep): Likewise. * disasm-selftests.c (_initialize_disasm_selftests): Likewise. * dwarf2-frame.c (_initialize_dwarf2_frame): Likewise. * dwarf2loc.c (_initialize_dwarf2loc): Likewise. * findvar.c (_initialize_findvar): Likewise. * gdbarch-selftests.c (_initialize_gdbarch_selftests): Likewise. * maint.c (maintenance_selftest): Update call to run_tests. (maintenance_info_selftests): New function. (_initialize_maint_cmds): Register "maintenance info selftests" command. Update "maintenance selftest" doc. * regcache.c (_initialize_regcache): Add names when registering selftests. * rust-exp.y (_initialize_rust_exp): Likewise. * selftest-arch.c (gdbarch_selftest): New struct. (gdbarch_tests): Remove. (register_test_foreach_arch): Add name parameter. Call register_test. (tests_with_arch): Remove, move most content to gdbarch_selftest::operator(). (_initialize_selftests_foreach_arch): Remove. * selftest-arch.h (register_test_foreach_arch): Add name parameter. (run_tests_with_arch): New declaration. * utils-selftests.c (_initialize_utils_selftests): Add names when registering selftests. * utils.c (_initialize_utils): Likewise. * unittests/array-view-selftests.c (_initialize_array_view_selftests): Likewise. * unittests/environ-selftests.c (_initialize_environ_selftests): Likewise. * unittests/function-view-selftests.c (_initialize_function_view_selftests): Likewise. * unittests/offset-type-selftests.c (_initialize_offset_type_selftests): Likewise. * unittests/optional-selftests.c (_initialize_optional_selftests): Likewise. * unittests/scoped_restore-selftests.c (_initialize_scoped_restore_selftests): Likewise. * NEWS: Document "maintenance selftest" and "maint info selftests". gdb/gdbserver/ChangeLog: * server.c (captured_main): Accept argument for --selftest. Update run_tests call. * linux-x86-tdesc-selftest.c (initialize_low_tdesc): Add names when registering selftests. gdb/doc/ChangeLog: * gdb.texinfo (Maintenance Commands): Document filter parameter of "maint selftest". Document "maint info selftests" command.
2017-09-16mi_load_progress: Restore current_uiout using a scoped_restoreSimon Marchi2-5/+7
Simply use a scoped_restore instead of manually saving and restoring current_uiout. gdb/ChangeLog: * mi/mi-main.c (mi_load_progress): Restore current_uiout using a scoped_restore.
2017-09-16mi_load_progress: Use unique_ptr to manage ui_out lifetimeSimon Marchi2-10/+15
In mi_load_progress, we xfree a ui_out object. Because ui_out is not trivially destructible, it should be freed with delete. This patch makes use of a unique_ptr to do it. gdb/ChangeLog: * mi/mi-main.c (mi_load_progress): Make uiout variable a unique_ptr. diff --git a/gdb/mi/mi-main.c b/gdb/mi/mi-main.c index 0ee2605..0359dc1 100644 --- a/gdb/mi/mi-main.c +++ b/gdb/mi/mi-main.c @@ -2325,7 +2325,6 @@ mi_load_progress (const char *section_name, static char *previous_sect_name = NULL; int new_section; struct ui_out *saved_uiout; - struct ui_out *uiout; struct mi_interp *mi = (struct mi_interp *) current_interpreter (); /* This function is called through deprecated_show_load_progress @@ -2333,17 +2332,19 @@ mi_load_progress (const char *section_name, of this function. */ saved_uiout = current_uiout; + std::unique_ptr<ui_out> uiout; + if (current_interp_named_p (INTERP_MI) || current_interp_named_p (INTERP_MI2)) - current_uiout = mi_out_new (2); + uiout.reset (mi_out_new (2)); else if (current_interp_named_p (INTERP_MI1)) - current_uiout = mi_out_new (1); + uiout.reset (mi_out_new (1)); else if (current_interp_named_p (INTERP_MI3)) - current_uiout = mi_out_new (3); + uiout.reset (mi_out_new (3)); else return; - uiout = current_uiout; + current_uiout = uiout.get (); new_section = (previous_sect_name ? strcmp (previous_sect_name, section_name) : 1); @@ -2356,12 +2357,12 @@ mi_load_progress (const char *section_name, fputs_unfiltered (current_token, mi->raw_stdout); fputs_unfiltered ("+download", mi->raw_stdout); { - ui_out_emit_tuple tuple_emitter (uiout, NULL); + ui_out_emit_tuple tuple_emitter (uiout.get (), NULL); uiout->field_string ("section", section_name); uiout->field_int ("section-size", total_section); uiout->field_int ("total-size", grand_total); } - mi_out_put (uiout, mi->raw_stdout); + mi_out_put (uiout.get (), mi->raw_stdout); fputs_unfiltered ("\n", mi->raw_stdout); gdb_flush (mi->raw_stdout); } @@ -2374,19 +2375,18 @@ mi_load_progress (const char *section_name, fputs_unfiltered (current_token, mi->raw_stdout); fputs_unfiltered ("+download", mi->raw_stdout); { - ui_out_emit_tuple tuple_emitter (uiout, NULL); + ui_out_emit_tuple tuple_emitter (uiout.get (), NULL); uiout->field_string ("section", section_name); uiout->field_int ("section-sent", sent_so_far); uiout->field_int ("section-size", total_section); uiout->field_int ("total-sent", total_sent); uiout->field_int ("total-size", grand_total); } - mi_out_put (uiout, mi->raw_stdout); + mi_out_put (uiout.get (), mi->raw_stdout); fputs_unfiltered ("\n", mi->raw_stdout); gdb_flush (mi->raw_stdout); } - xfree (uiout); current_uiout = saved_uiout; }
2017-09-15Use std::vector on tdesc->reg_defs (gdbserver/tdesc.h)Sergio Durigan Junior4-45/+52
This is a followup patch to the build breakage fix on AArch64. While doing the fix, I found it better to convert tdesc->reg_defs (on gdbserver/tdesc.h) from using VEC to using std::vector. This makes the code easier to read and maintain, and also is one more step towards the C++fication. Regtested on BuildBot. 2017-09-16 Sergio Durigan Junior <sergiodj@redhat.com> * regcache.c (get_thread_regcache): Update code to use "std::vector" instead of "VEC" for "target_desc.reg_defs". (regcache_cpy): Likewise. (registers_to_string): Likewise. (registers_from_string): Likewise. (find_regno): Likewise. (supply_regblock): Likewise. (regcache_raw_read_unsigned): Likewise. * tdesc.c (init_target_desc): Likewise. (tdesc_create_reg): Likewise. * tdesc.h: Remove declaration of "tdesc_reg_p". Include <vector>. (struct target_desc) <reg_defs>: Convert to "std::vector". (target_desc): Do not initialize "reg_defs". (~target_desc): Update code to use "std::vector" instead of "VEC" for "target_desc.reg_defs". (operator==): Likewise.
2017-09-15Sync libiberty/ & include/ with GCCPedro Alves2-8/+13
Note this brings in the interface files for libcc1/G++ as well, which we will be needing in GDB soon anyway. That commit renamed a method in the C interface and that required a small update to GDB's compile/ code, which I've included that in this patch to keep the tree building. include/ChangeLog: 2017-09-15 Pedro Alves <palves@redhat.com> * ansidecl.h (DISABLE_COPY_AND_ASSIGN): New macro. 2017-09-12 Jiong Wang <jiong.wang@arm.com> * dwarf2.def (DW_CFA_AARCH64_negate_ra_state): New DW_CFA_DUP. * dwarf2.h (DW_CFA_DUP): New define. 2017-08-21 Richard Biener <rguenther@suse.de> * simple-object.h (simple_object_copy_lto_debug_sections): New function. 2017-05-18 Martin Liska <mliska@suse.cz> * ansidecl.h: Define CONSTEXPR macro. 2017-05-24 Nathan Sidwell <nathan@acm.org> * libiberty.h (ASTRDUP): Adjust cast to avoid warning. 2017-01-30 Alexandre Oliva <aoliva@redhat.com> Introduce C++ support in libcc1. * gcc-c-fe.def (int_type_v0): Rename from... (int_type): ... this. Introduce new version. (float_type_v0): Rename from... (float_type): ... this. Introduce new version. (char_type): New. * gcc-c-interface.h (gcc_c_api_version): Add GCC_C_FE_VERSION_1. (gcc_type_array): Move... * gcc-interface.h: ... here. * gcc-cp-fe.def: New. * gcc-cp-interface.h: New. 2016-04-29 Oleg Endo <olegendo@gcc.gnu.org> * longlong.h (umul_ppmm): Remove SHMEDIA checks. (__umulsidi3, count_leading_zeros): Remove SHMEDIA implementations. 2017-09-15 Yao Qi <yao.qi@linaro.org> Pedro Alves <palves@redhat.com> * ansidecl.h (DISABLE_COPY_AND_ASSIGN): New macro. 2017-09-12 Jiong Wang <jiong.wang@arm.com> * dwarf2.def (DW_CFA_AARCH64_negate_ra_state): New DW_CFA_DUP. * dwarf2.h (DW_CFA_DUP): New define. 2017-08-21 Richard Biener <rguenther@suse.de> * simple-object.h (simple_object_copy_lto_debug_sections): New function. 2017-05-18 Martin Liska <mliska@suse.cz> * ansidecl.h: Define CONSTEXPR macro. 2017-05-24 Nathan Sidwell <nathan@acm.org> * libiberty.h (ASTRDUP): Adjust cast to avoid warning. 2017-01-30 Alexandre Oliva <aoliva@redhat.com> Introduce C++ support in libcc1. * gcc-c-fe.def (int_type_v0): Rename from... (int_type): ... this. Introduce new version. (float_type_v0): Rename from... (float_type): ... this. Introduce new version. (char_type): New. * gcc-c-interface.h (gcc_c_api_version): Add GCC_C_FE_VERSION_1. (gcc_type_array): Move... * gcc-interface.h: ... here. * gcc-cp-fe.def: New. * gcc-cp-interface.h: New. 2016-04-29 Oleg Endo <olegendo@gcc.gnu.org> * longlong.h (umul_ppmm): Remove SHMEDIA checks. (__umulsidi3, count_leading_zeros): Remove SHMEDIA implementations. libiberty/ChangeLog: 2017-09-15 Nathan Sidwell <nathan@acm.org> PR demangler/82195 * cp-demangle.c (d_name): Add 'toplevel' parm. Pass to ... (d_local_name): ... here. Parse trailing function args on nested local_name. (d_encoding, d_special_name, d_class_enum_type): Adjust d_name calls. * testsuite/demangle-expected: Add tests. 2017-09-15 Richard Biener <rguenther@suse.de> PR lto/81968 * simple-object-elf.c (simple_object_elf_copy_lto_debug_sections): Iterate marking dependent sections necessary. 2017-09-15 Nathan Sidwell <nathan@acm.org> * cp-demangle.c (is_fnqual_component_type): Reimplement using FNQUAL_COMPONENT_CASE. (d_encoding): Hold bare_function_type in local var. (d_local_name): Build name in both cases and build result once. Collapse switch-if to single conditional. (d_local_name): * testsuite/demangle-expected: Realign blank lines with tests. 2017-09-12 Jiong Wang <jiong.wang@arm.com> * dwarfnames.c (DW_CFA_DUP): New define. gdb/ChangeLog: 2017-09-15 Pedro Alves <palves@redhat.com> * compile/compile-c-types.c (convert_enum, convert_int) (convert_float): Adjust to refer to int_type_v0 and float_type_v0.
2017-09-15gdbserver: Remove thread_to_gdb_idSimon Marchi6-40/+30
As explained in the previous patch, the gdb_id concept is no longer relevant. The function thread_to_gdb_id is trivial, it returns the thread's ptid. Remove it and replace its usage with ptid_of. The changes in nto-low.c and lynx-low.c are fairly straightforward, but I was not able to build test them. gdb/gdbserver/ChangeLog: * inferiors.h (thread_to_gdb_id): Remove. * inferiors.c (thread_to_gdb_id): Remove. * server.c (handle_qxfer_threads_worker, handle_query): Adjust. * lynx-low.c (lynx_resume, lynx_wait_1, lynx_fetch_registers, lynx_store_registers, lynx_read_memory, lynx_write_memory): Likewise. * nto-low.c (nto_fetch_registers, nto_store_registers, nto_stopped_by_watchpoint, nto_stopped_data_address): Likewise.
2017-09-15gdbserver: Remove gdb_id_to_thread_idSimon Marchi4-28/+16
From what I understand, this function is not doing anything useful as of today. Here's the result of my archeological research: - The field thread_info::gdb_id was added in a06660f7 Use LWP IDs for thread IDs in gdbserver There was problem when using a 32-bits gdb with a 64-bits gdbserver. For some reason that I don't fully understand, the thread ids exchanged between gdb and gdbserver could overflow a 32 bits data type. My guess is that they were the thread address (e.g. the 0x7ffff7f20b40 in "Thread 0x7ffff7f20b40 (LWP 1058)" today). This patch changed that so gdb/gdbserver would talk in terms of the OS assigned numerical id (as shown in ps). It therefore added a way to convert between this gdb_id (the numerical id) and the thread id (the address). - 95954743cb Implement the multiprocess extensions, and add linux multiprocess supportNon-stop mode support. This patch made gdbserver deal with threads using their numerical ids and not the address-like id. Starting from there, the gdb_id <-> thread id conversion was not needed anymore, since the remote protocol and gdbserver were using the same kind of ids again. The gdb_id field in the thread_info structure was also unused starting there. - d50171e4 Teach linux gdbserver to step-over-breakpoints. This patch moved the thread_info structure around, and got rid of the gdb_id field (which was unused). Looking at the implementation of gdb_id_to_thread_id, it is not doing anything useful. It is looking up a thread by ptid using find_thread_ptid, which basically loops over all threads looking at their entry.id field. If a thread with that ptid is found, it returns its entry.id field. So it will always return the same thing as it input (with the exception of if no thread exist with that ptid, then it will return null_ptid). gdb/gdbserver/ChangeLog: * inferiors.h (gdb_id_to_thread_id): Remove. * inferiors.c (gdb_id_to_thread_id): Remove. * server.c (process_serial_event): Adjust to gdb_id_to_thread_id removal. Move pid declaration closer to where it's used.
2017-09-15gdbserver: Move detach code to its own functionSimon Marchi2-90/+101
The code required to handle the 'D' packet is non trivial, so move it out to its own function. The moved out code is identical, except for the call to strtol and some breaks that became returns. Tested manually, and by running gdb.base/*detach*.exp with native-gdbserver and native-extended-gdbserver. gdb/gdbserver/ChangeLog: * server.c (handle_detach): New function. (process_serial_event): Move code out, call handle_detach.
2017-09-15Deduplicate require_running macros and move them upSimon Marchi2-36/+41
I find it very confusing to define the require_running in the middle of the file, and re-define it to something else later in the middle of the same file. I think it would be better if those macros had different names so that we know exactly what they do. gdb/gdbserver/ChangeLog: * server.c (require_running): Rename to ... (require_running_or_return): ... this ... (require_running_or_break): ... and this. (handle_query, process_serial_event): Adjust.
2017-09-15linux-low: Remove unused variablesSimon Marchi2-1/+5
gdb/gdbserver/ChangeLog: * linux-low.c (linux_set_resume_request): Remove unused variables.
2017-09-15dwarf2read: Replace copy_string usages with savestringSimon Marchi2-17/+8
copy_string does the exact same thing as savestring, so replace the usages of the former with the latter. gdb/ChangeLog: * dwarf2read.c (copy_string): Remove. (parse_macro_definition): Replace copy_string with savestring.
2017-09-15gdbserver: Remove duplicate functions to find any thread of processSimon Marchi6-70/+24
We have about 6 functions/callbacks to find_inferior meant to find a thread that belongs to a given pid. Remove all but find_any_thread_of_pid and replace their uses with find_any_thread_of_pid. gdb/gdbserver/ChangeLog: * server.c (first_thread_of): Remove. (process_serial_event): Replace usage of first_thread_of with find_any_thread_of_pid. * tracepoint.c (same_process_p): Remove. (gdb_agent_about_to_close): Replace usage of same_process_p with find_any_thread_of_pid. * linux-x86-low.c (same_process_callback): Remove. (x86_arch_setup_process_callback): Replace usage of same_process_callback with find_any_thread_of_pid. * thread-db.c (any_thread_of): Remove. (switch_to_process): Replace usage of any_thread_of with find_any_thread_of_pid. * inferiors.c (thread_pid_matches_callback): Remove. (find_thread_process): Adjust to use find_any_thread_of_pid.
2017-09-15Fix x86 build failuresYao Qi2-3/+11
Christophe Lyon told me that GDB build failed on i386-linux with --enable-64-bit-bfd=yes, so I audit the gdb/configure.tgt again. I find that i386-darwin has the same issue too. Additionally, GDB for solaris target fails to build too. This patch fixes all of them. gdb: 2017-09-15 Yao Qi <yao.qi@linaro.org> * configure.tgt (i[34567]86-*-darwin*): Append amd64.o to gdb_target_obs. (i[34567]86-*-solaris2.1[0-9]* | x86_64-*-solaris2.1[0-9]*): Likewise. (i[34567]86-*-linux*): Likewise.
2017-09-14Make dwarf_expr_context::stack an std::vectorSimon Marchi3-78/+64
Replace the manually managed array with a vector. It is mostly straightforward, except maybe one thing in execute_stack_op, in the handling of DW_OP_fbreg. When the code stumbles on that opcode while evaluating an expression, it needs to evaluate a subexpression to find where the fb reg has been saved. Rather than creating a new context, it reuses the current context. It saves the size of the stack before and restores the stack to that size after. I think we can do a little bit better by saving the current stack locally and installing a new empty stack. This way, if the subexpression is malformed and underflows, we'll get an exception. Before, it would have overwritten the top elements of the top-level expression. The evaluation of the top-level expression would have then resumed with the same stack size, but possibly some corrupted elements. gdb/ChangeLog: * dwarf2expr.h (dwarf_stack_value): Add constructor. (dwarf_expr_context) <~dwarf_expr_context>: Define as default. <stack>: Change type to std::vector. <stack_len, stack_allocated>: Remove. <grow_stack>: Remove. * dwarf2expr.c (dwarf_expr_context::dwarf_expr_context): Adjust. (dwarf_expr_context::~dwarf_expr_context): Remove. (dwarf_expr_context::grow_stack): Remove. (dwarf_expr_context::push): Adjust. (dwarf_expr_context::pop): Adjust. (dwarf_expr_context::fetch): Adjust. (dwarf_expr_context::fetch_in_stack_memory): Adjust. (dwarf_expr_context::stack_empty_p): Adjust. (dwarf_expr_context::execute_stack_op): Adjust.
2017-09-14gdb.base/nodebug.exp: Rename called functionsPedro Alves2-2/+22
I'm seeing these failures on my system: FAIL: gdb.base/nodebug.exp: p (double) mult (2.0, 3.0) FAIL: gdb.base/nodebug.exp: p ((double (*) (double, double)) mult)(2.0f, 3.0f) FAIL: gdb.base/nodebug.exp: p ((double (*) (double, double)) mult)(2, 3) The problem is simply that GDB is finding a symbol named "mult" from glibc's debug info: (gdb) ptype mult type = enum expression_operator {var, num, lnot, mult, divide, module, plus, minus, less_than, greater_than, less_or_equal, greater_or_equal, equal, not_equal, land, lor, qmop} (gdb) info types expression_operator All types matching regular expression "expression_operator": File plural-exp.h: enum expression_operator; Fix this by unloading symbols from shared libraries. gdb/testsuite/ChangeLog: 2017-09-14 Pedro Alves <palves@redhat.com> * gdb.base/nodebug.exp (nodebug_runto): New procedure. (top level): Use it instead of runto.
2017-09-14Make dwarf_expr_context::stack_empty_p return a boolSimon Marchi3-2/+8
gdb/ChangeLog: * dwarf2expr.h (dwarf_expr_context) <stack_empty_p>: Change return type to bool. * dwarf2expr.c (dwarf_expr_context::stack_empty_p): Likewise.
2017-09-14Make dwarf_stack_value::in_stack_memory a boolSimon Marchi4-19/+35
Replace int with bool, because that's what it is. gdb/ChangeLog: * dwarf2expr.h (dwarf_expr_piece) <v.mem.in_stack_memory>: Change type to bool. (dwarf_stack_value) <in_stack_memory>: Likewise. (dwarf_expr_context) <push_address>: Change parameter type to bool. <fetch_in_stack_memory>: Change return type to bool. <push>: Change parameter type to bool. * dwarf2expr.c (dwarf_expr_context::push): Change parameter type to bool. (dwarf_expr_context::push_address): Likewise. (dwarf_expr_context::fetch_in_stack_memory): Change return type to bool. (dwarf_expr_context::execute_stack_op): Adjust. * dwarf2loc.c (dwarf2_evaluate_loc_desc_full): Adjust.
2017-09-14Make dwarf_expr_piece::pieces an std::vectorSimon Marchi4-124/+124
Change the manually managed array dwarf_expr_piece::piece with an std::vector. After passing the pieces array to allocate_piece_closure, dwarf2_evaluate_loc_desc_full doesn't need that data anymore. We can therefore move the content of the vector to avoid copying it. Reg-tested on the buildbot. gdb/ChangeLog: * dwarf2expr.h (struct dwarf_expr_piece): Move up. (struct dwarf_expr_context) <n_pieces>: Remove. <pieces>: Change type to std::vector. * dwarf2expr.c (dwarf_expr_context::dwarf_expr_context): Adjust. (dwarf_expr_context::~dwarf_expr_context): Don't manually free pieces. (dwarf_expr_context::add_piece): Adjust. * dwarf2loc.c (struct piece_closure): Initialize fields. <n_pieces>: Remove. <pieces>: Change type to std::vector. (allocate_piece_closure): Adjust, change parameter to std::vector rvalue and std::move it to piece_closure. (rw_pieced_value): Adjust. (check_pieced_synthetic_pointer): Adjust. (indirect_synthetic_pointer): Adjust. (coerce_pieced_ref): Adjust. (free_pieced_value_closure): Adjust. Use delete to free piece_closure. (dwarf2_evaluate_loc_desc_full): Adjust. std::move ctx.pieces to allocate_piece_closure. (dwarf2_loc_desc_get_symbol_read_needs): Adjust.
2017-09-12probe: Replace VEC(probe_ops_cp) with std::vectorSimon Marchi6-31/+26
This patch replaces the usage of VEC to store pointers to probe_ops with an std::vector. The sole usage of that vector type is one global variable that holds the ops for the various kinds of probes, so this is pretty straightforward (no allocation/deallocation issues). gdb/ChangeLog: * probe.h (probe_ops_cp): Remove typedef. (DEF_VEC_P (probe_ops_cp)): Remove. (all_probe_ops): Change type to std::vector. * probe.c (info_probes_for_ops): Adjust to vector change. (probe_linespec_to_ops): Likewise. (all_probe_ops): Change type to std::vector. (_initialize_probe): Adjust to vector change. * dtrace-probe.c (_initialize_dtrace_probe): Likewise. * elfread.c (elf_get_probes): Likewise. * stap-probe.c (_initialize_stap_probe): Likewise.
2017-09-12Make collect_probes return an std::vectorSimon Marchi3-94/+92
Change collect_probes so it returns an std::vector<bound_probe> instead of a VEC(bound_probe_s). This allows removing some cleanups. It also seems like enable_probes_command and disable_probes_command were not freeing that vector. The comparison function compare_probes needs to be updated to return a bool indicating whether the first parameter is "less than" the second parameter. I defined two constructors to bound_probe. The default constructor is needed, for example, so the instance in struct bp_location can be constructed without parameters. The constructor with parameters is useful so we can use emplace_back and pass the values directly. The s390 builder on the buildbot shows a weird failure that I can't explain: ../../binutils-gdb/gdb/elfread.c: In function void probe_key_free(bfd*, void*): ../../binutils-gdb/gdb/elfread.c:1346:8: error: types may not be defined in a for-range-declaration [-Werror] for (struct probe *probe : *probes) ^~~~~~ I guess it's a bug with that specific version< of the compiler, since no other gcc gives me that error. It is using: g++ (GCC) 6.3.1 20161221 (Red Hat 6.3.1-1) Any idea about this problem? gdb/ChangeLog: * probe.h (struct bound_probe): Define constructors. * probe.c (bound_probe_s): Remove typedef. (DEF_VEC_O (bound_probe_s)): Remove VEC. (collect_probes): Change return type to std::vector, remove cleanup. (compare_probes): Return bool, change parameter type. Change semantic to "less than". (gen_ui_out_table_header_info): Change parameter to std::vector and update. (exists_probe_with_pops): Likewise. (info_probes_for_ops): Update to std::vector change. (enable_probes_command): Likewise. (disable_probes_command): Likewise.
2017-09-12Make probe_ops::get_probes fill an std::vectorSimon Marchi8-60/+65
This patch changes one usage of VEC to std::vector. It is a relatively straightforward 1:1 change. The implementations of sym_probe_fns::sym_get_probes return a borrowed reference to their probe vectors, meaning that the caller should not free it. In the new code, I made them return a const reference to the vector. This patch and the following one were tested by the buildbot. I didn't see any failures that looked related to this one. gdb/ChangeLog: * probe.h (struct probe_ops) <get_probes>: Change parameter from vec to std::vector. * probe.c (parse_probes_in_pspace): Update. (find_probes_in_objfile): Update. (find_probe_by_pc): Update. (collect_probes): Update. (probe_any_get_probes): Update. * symfile.h (struct sym_probe_fns) <sym_get_probes> Change return type to reference to std::vector. * dtrace-probe.c (dtrace_process_dof_probe): Change parameter to std::vector and update. (dtrace_process_dof): Likewise. (dtrace_get_probes): Likewise. * elfread.c (elf_get_probes): Change return type to std::vector, store an std::vector in bfd_data. (probe_key_free): Update to std::vector. * stap-probe.c (handle_stap_probe): Change parameter to std::vector and update. (stap_get_probes): Likewise. * symfile-debug.c (debug_sym_get_probes): Change return type to std::vector and update.
2017-09-11Remove make_show_memory_breakpoints_cleanupTom Tromey7-58/+46
This removes make_show_memory_breakpoints_cleanup, replacing it with make_scoped_restore_show_memory_breakpoints and updating all callers. ChangeLog 2017-09-11 Tom Tromey <tom@tromey.com> * breakpoint.c (program_breakpoint_here_p): Update. * target.c (make_scoped_restore_show_memory_breakpoints): Rename from make_show_memory_breakpoints_cleanup. Return a scoped_restore_tmpl<int>. (restore_show_memory_breakpoints): Remove. * ppc-linux-tdep.c (ppc_linux_memory_remove_breakpoint): Update. * mem-break.c (memory_validate_breakpoint): Update. * ia64-tdep.c (ia64_memory_insert_breakpoint): Update. (ia64_memory_remove_breakpoint): Update. (ia64_breakpoint_from_pc): Update. * target.h (make_scoped_restore_show_memory_breakpoints): Rename from make_show_memory_breakpoints_cleanup.
2017-09-11Use std::string in d-namespace.cTom Tromey2-33/+17
This removes some cleanups from d-namespace.c by replacing manual string management with std::string. ChangeLog 2017-09-11 Tom Tromey <tom@tromey.com> * d-namespace.c (d_lookup_symbol): Use std::string. (find_symbol_in_baseclass): Likewise.
2017-09-11Use std::string in ctf_startTom Tromey2-12/+10
This changes ctf_start to use std::string, allowing for some cleanup removal. ChangeLog 2017-09-11 Tom Tromey <tom@tromey.com> * ctf.c (ctf_start): Use std::string.
2017-09-11Remove cleanups from find_frame_funnameTom Tromey6-55/+49
This changes find_frame_funname to return a unique_xmalloc_ptr and then fixes up the callers. This removes several cleanups. ChangeLog 2017-09-11 Tom Tromey <tom@tromey.com> * ada-lang.c (is_known_support_routine): Update. (ada_unhandled_exception_name_addr_from_raise): Update. * guile/scm-frame.c (gdbscm_frame_name): Update. * python/py-frame.c (frapy_name): Update. (frapy_function): Update. * stack.h (find_frame_funname): Update. * stack.c (find_frame_funname): Return unique_xmalloc_ptr. (print_frame): Update.
2017-09-11Remove cleanups from findcmd.cTom Tromey2-64/+35
This removes cleanups from findcmd.c, replacing manual buffer management with a gdb::byte_vector. ChangeLog 2017-09-11 Tom Tromey <tom@tromey.com> * findcmd.c (put_bits): Take a gdb::byte_vector. (parse_find_args): Return gdb::byte_vector. "args" now const. Remove "pattern_bufp" and "pattern_lenp" parameters. Remove cleanups. (find_command): Update.
2017-09-11Replace clear_hook_in_cleanup with scoped_restore_hook_inTom Tromey2-10/+28
This removes clear_hook_in_cleanup in favor of a scoped_restore-like class. scoped_restore itself can't be used because hook_in is a bitfield. ChangeLog 2017-09-11 Tom Tromey <tom@tromey.com> * cli/cli-script.c (class scoped_restore_hook_in): New. (clear_hook_in_cleanup): Remove. (execute_cmd_pre_hook, execute_cmd_post_hook): Use scoped_restore_hook_in.
2017-09-11Replace interp_set_temp with scoped_restore_interpTom Tromey4-10/+37
This removes interp_set_temp and an associated cleanup, in favor of a new RAII class, scoped_restore_interp. ChangeLog 2017-09-11 Tom Tromey <tom@tromey.com> * cli/cli-script.c (restore_interp): Remove. (read_command_lines): Use scoped_restore_interp. * interps.c (scoped_restore_interp::set_temp): Rename from interp_set_temp. * interps.h (class scoped_restore_interp): New. (interp_set_temp): Remove.
2017-09-11Change setup_breakpoint_reporting to return a scoped_restoreTom Tromey4-17/+20
This changes setup_breakpoint_reporting to return a scoped_restore, allowing for some cleanup removal. ChangeLog 2017-09-11 Tom Tromey <tom@tromey.com> * mi/mi-cmd-catch.c (mi_cmd_catch_assert) (mi_cmd_catch_exception, mi_catch_load_unload): Update. * mi/mi-cmd-break.c (setup_breakpoint_reporting): Return a scoped_restore. (mi_cmd_break_insert_1): Update. * mi/mi-cmd-break.h (setup_breakpoint_reporting): Return a scoped_restore.
2017-09-11Make extract_arg return a std::stringTom Tromey10-85/+92
Change extract_arg to return a std::string and fix up all the users. I think string is mildly better than unique_xmalloc_ptr<char>, when possible, because it provides a more robust API. I changed the error messages emitted from find_location_by_number to avoid either writing to a string or an extra allocation; this can be changed but I thought that the new message was not any less clear. You can see an example in the testsuite patch. ChangeLog 2017-09-11 Tom Tromey <tom@tromey.com> * demangle.c (demangle_command): Update. * breakpoint.c (disable_command): Update. (enable_command): Update. (find_location_by_number): Make "number" const. Use get_number_trailer. * cli/cli-utils.c (extract_arg): Return std::string. * probe.c (parse_probe_linespec): Update. Change types. (collect_probes): Take string arguments. (parse_probe_linespec): Likewise. (info_probes_for_ops): Update. (enable_probes_command): Update. (disable_probes_command): Update. * break-catch-sig.c (catch_signal_split_args): Update. * mi/mi-parse.c (mi_parse): Update. testsuite/ChangeLog 2017-09-11 Tom Tromey <tom@tromey.com> * gdb.base/ena-dis-br.exp (test_ena_dis_br): Update test.
2017-09-11Constify language_enumTom Tromey3-2/+7
Change language_enum to take a const argument. ChangeLog 2017-09-11 Tom Tromey <tom@tromey.com> * language.h (language_enum): Make argument const. * language.c (language_enum): Make argument const.
2017-09-11Rename _const functions to use overloading insteadTom Tromey37-125/+154
This renames a few functions -- skip_spaces_const, skip_to_space_const, get_number_const, extract_arg_const -- to drop the "_const" suffix and instead rely on overloading. This makes future const fixes simpler by reducing the number of lines that must be changed. I think it is also not any less clear, as all these functions have the same interface as their non-const versions by design. Furthermore there's an example of using an overload in-tree already, namely check_for_argument. This patch was largely created using some perl one-liners; then a few fixes were applied by hand. ChangeLog 2017-09-11 Tom Tromey <tom@tromey.com> * common/common-utils.h (skip_to_space): Remove macro, redeclare as function. (skip_to_space): Rename from skip_to_space_const. * common/common-utils.c (skip_to_space): New function. (skip_to_space): Rename from skip_to_space_const. * cli/cli-utils.h (get_number): Rename from get_number_const. (extract_arg): Rename from extract_arg_const. * cli/cli-utils.c (get_number): Rename from get_number_const. (extract_arg): Rename from extract_arg_const. (number_or_range_parser::get_number): Use ::get_number. * aarch64-linux-tdep.c, ada-lang.c, arm-linux-tdep.c, ax-gdb.c, break-catch-throw.c, breakpoint.c, cli/cli-cmds.c, cli/cli-dump.c, cli/cli-script.c, cli/cli-setshow.c, compile/compile.c, completer.c, demangle.c, disasm.c, findcmd.c, linespec.c, linux-tdep.c, linux-thread-db.c, location.c, mi/mi-parse.c, minsyms.c, nat/linux-procfs.c, printcmd.c, probe.c, python/py-breakpoint.c, record.c, rust-exp.y, serial.c, stack.c, stap-probe.c, tid-parse.c, tracepoint.c: Update all callers.
2017-09-11Make it simpler to add events to PythonTom Tromey17-303/+250
The first patch in this series went through several iterations as I'd forgotten how many places had to be touched to add a new event and a new event type. This patch simplifies the process using two new ".def" files. Now, a new event type can be added by adding a line to "py-event-types.def", and a new event registry can be added by adding a line to "py-all-events.def". ChangeLog 2017-09-11 Tom Tromey <tom@tromey.com> * python/python.c (do_start_initialization): Use py-event-types.def to initialize types. Define all object type structures. * python/python-internal.h: Don't declare event initialization functions. * python/py-threadevent.c (thread_event_object_type): Don't define. * python/py-stopevent.c (stop_event_object_type): Don't define. * python/py-signalevent.c (signal_event_object_type): Don't declare or define. * python/py-newobjfileevent.c (new_objfile_event_object_type) (clear_objfiles_event_object_type): Don't declare or define. * python/py-infevents.c (inferior_call_pre_event_object_type) (inferior_call_post_event_object_type) (register_changed_event_object_type) (memory_changed_event_object_type): Don't declare or define. * python/py-inferior.c (new_thread_event_object_type) (new_inferior_event_object_type) (inferior_deleted_event_object_type): Don't declare or define. * python/py-exitedevent.c (exited_event_object_type): Don't declare or define. * python/py-evts.c (gdbpy_initialize_py_events): Use py-all-events.def. * python/py-events.h (thread_event_object_type): Don't declare. (events_object): Use py-all-events.def. * python/py-event.h (GDBPY_NEW_EVENT_TYPE): Remove. Use py-event-types.def. * python/py-event-types.def: New file. * python/py-continueevent.c (create_continue_event_object): Don't declare or define. * python/py-bpevent.c (breakpoint_event_object_type): Don't declare or define. * python/py-all-events.def: New file.
2017-09-11Small event ownership clean up in Python layerTom Tromey10-23/+44
It seems cleaner to me for functions like create_thread_event_object, which pass object ownership to their callers, to directly return a gdb_ref<>. This way the ownership transfer is part of the API. This patch makes this change. ChangeLog 2017-09-11 Tom Tromey <tom@tromey.com> * python/py-threadevent.c (create_thread_event_object): Return gdbpy_ref. * python/py-stopevent.h (create_stop_event_object) (create_breakpoint_event_object, create_signal_event_object): Update. * python/py-stopevent.c (create_stop_event_object): Return gdbpy_ref. (emit_stop_event): Update. * python/py-signalevent.c (create_signal_event_object): Return gdbpy_ref. * python/py-infevents.c (create_inferior_call_event_object): Update. * python/py-event.h (create_event_object) (create_thread_event_object): Update. * python/py-event.c (create_event_object): Return gdbpy_ref. * python/py-continueevent.c: Return gdbpy_ref. * python/py-bpevent.c (create_breakpoint_event_object): Return gdbpy_ref.
2017-09-11Add new_inferior, inferior_deleted, and new_thread eventsTom Tromey14-7/+229
This adds a few new events to gdb's Python layer: new_inferior, inferior_deleted, and new_thread. I wanted to be able to add a combined inferior/thread display window to my GUI, and I needed a few events to make this work. This is PR python/15622. ChangeLog 2017-09-11 Tom Tromey <tom@tromey.com> PR python/15622: * NEWS: Add entry. * python/python.c (do_start_initialization): Initialize new event types. * python/python-internal.h (gdbpy_initialize_new_inferior_event) (gdbpy_initialize_inferior_deleted_event) (gdbpy_initialize_new_thread_event): Declare. * python/py-threadevent.c (create_thread_event_object): Add option "thread" parameter. * python/py-inferior.c (new_thread_event_object_type) (new_inferior_event_object_type) (inferior_deleted_event_object_type): Declare. (python_new_inferior, python_inferior_deleted): New functions. (add_thread_object): Emit new_thread event. (gdbpy_initialize_inferior): Attach new functions to corresponding observers. (new_thread, new_inferior, inferior_deleted): Define new event types. * python/py-evts.c (gdbpy_initialize_py_events): Add new registries. * python/py-events.h (events_object) <new_inferior, inferior_deleted, new_thread>: New fields. * python/py-event.h (create_thread_event_breakpoint): Add optional "thread" parameter. doc/ChangeLog 2017-09-11 Tom Tromey <tom@tromey.com> * python.texi (Events In Python): Document new events. testsuite/ChangeLog 2017-09-11 Tom Tromey <tom@tromey.com> * gdb.python/py-infthread.exp: Add tests for new_thread event. * gdb.python/py-inferior.exp: Add tests for new inferior events.
2017-09-10Fix build breakage on GNU/Linux AArch64, take 2Sergio Durigan Junior2-4/+11
The last commit unfortunately was not enough to fix the build breakage on AArch64. I made a mistake and did not test it alone on BuildBot, but along with another patch that was responsible for fixing the breakage. The failure is: In file included from /usr/include/string.h:640:0, from build-gnulib-gdbserver/import/string.h:41, from ../../../binutils-gdb/gdb/gdbserver/../common/common-defs.h:56, from ../../../binutils-gdb/gdb/gdbserver/server.h:22, from ../../../binutils-gdb/gdb/gdbserver/regcache.c:19: In function ‘void* memset(void*, int, size_t)’, inlined from ‘regcache* init_register_cache(regcache*, const target_desc*, unsigned char*)’ at ../../../binutils-gdb/gdb/gdbserver/regcache.c:150:50: /usr/include/aarch64-linux-gnu/bits/string3.h:81:32: error: call to ‘__warn_memset_zero_len’ declared with attribute warning: memset used with constant zero length parameter; this could be due to transposed parameters [-Werror] __warn_memset_zero_len (); ^ In function ‘void* memset(void*, int, size_t)’, inlined from ‘regcache* get_thread_regcache(thread_info*, int)’ at ../../../binutils-gdb/gdb/gdbserver/regcache.c:57:60: /usr/include/aarch64-linux-gnu/bits/string3.h:81:32: error: call to ‘__warn_memset_zero_len’ declared with attribute warning: memset used with constant zero length parameter; this could be due to transposed parameters [-Werror] __warn_memset_zero_len (); This is likely due to a GCC bug, because for some reason the compiler assumes that the third argument to the memset: memset (regcache->register_status, REG_UNAVAILABLE, VEC_length (tdesc_reg_p, regcache->tdesc->reg_defs)); is always zero, which is not always true. Anyway, the simple fix for this is to guard the memset calls with: if (!VEC_empty (tdesc_reg_p, regcache->tdesc->reg_defs)) This time, I made sure to regtest only this patch on BuildBot, and it finally solved the breakage. gdb/gdbserver/ChangeLog: 2017-09-10 Sergio Durigan Junior <sergiodj@redhat.com> * regcache.c (get_thread_regcache): Guard calls to "memset" with "!VEC_empty".
2017-09-10Fix build breakage on GNU/Linux AArch64Sergio Durigan Junior3-3/+9
This patch fixes the build breakage that has been happening on AArch64 since September 5th. The breakage was introduced by the following commit: author Yao Qi <yao.qi@linaro.org> Tue, 5 Sep 2017 04:54:52 -0400 (09:54 +0100) committer Yao Qi <yao.qi@linaro.org> Tue, 5 Sep 2017 04:54:52 -0400 (09:54 +0100) commit f7000548a2b79d7e5cb924468117ca4245e6b820 Use VEC for target_desc.reg_defs The build log for this commit can be seen here: <https://gdb-build.sergiodj.net/builders/Ubuntu-AArch64-native-gdbserver-m64/builds/2696/steps/compile%20gdb/logs/stdio> And the underlying problem is that the code is not calling the new function "allocate_target_description" to allocate the "struct target_desc" using "new" instead of XNEW, which end up not properly initializing the fields of the structure. Regtested on BuildBot. gdb/gdbserver/ChangeLog: 2017-09-10 Sergio Durigan Junior <sergiodj@redhat.com> * linux-low.c (handle_extended_wait): Use "allocate_target_description" instead of "XNEW". * linux-x86-low.c (initialize_low_arch): Likewise.
2017-09-10gdb: Remove check for gdb_stderr == NULLAndrew Burgess2-2/+8
Recent changes made gdb_stderr a macro: #define gdb_stderr (*current_ui_gdb_stderr_ptr ()) and current_ui_gdb_stderr_ptr return this: &current_ui->m_gdb_stderr The problem is that this is undefined if current_ui is NULL, which can happen early on during gdb start up. If we run into an error during early gdb start up then we write the error message to gdb_stderr. However, if we are too early during the start up then current_ui is NULL, and using the gdb_stderr macro triggers undefined behaviour. We try to avoid this using a check 'gdb_stderr == NULL' which was fine before the recent changes, but now, still triggers undefined behaviour. A better check is instead 'current_ui == NULL' which is what I use in this patch. Triggering this failure is pretty hard, most of the really early errors are only triggered if pretty basic things are not as expected, for example, if the default signal handlers are not as expected. Seeing one of these errors trigger usually means that someone working on gdb has made an incorrect change. Still, the errors are present in gdb, and should we ever trigger one it would be nice if gdb didn't crash. For testing this change I've been applying this patch which adds an unconditional error into a function called early during gdb start up. Later in the same function is a real error call which, in some circumstances could be triggered: ## START ## diff --git a/gdb/common/signals-state-save-restore.c b/gdb/common/signals-state-save-restore.c index d11a9ae006c..d75ba70f894 100644 --- a/gdb/common/signals-state-save-restore.c +++ b/gdb/common/signals-state-save-restore.c @@ -37,6 +37,9 @@ static sigset_t original_signal_mask; void save_original_signals_state (void) { + + internal_error (__FILE__, __LINE__, "example error"); + #ifdef HAVE_SIGACTION int i; int res; ## END ## gdb/ChangeLog: * utils.c (abort_with_message): Don't compare gdb_stderr to NULL, check current_ui instead. (internal_vproblem): Likewise.