aboutsummaryrefslogtreecommitdiff
path: root/gdb
AgeCommit message (Collapse)AuthorFilesLines
2015-08-01Replace the block_found global with explicit data-flowPierre-Marie de Rodat50-697/+910
As Pedro suggested on gdb-patches@ (see https://sourceware.org/ml/gdb-patches/2015-05/msg00714.html), this change makes symbol lookup functions return a structure that includes both the symbol found and the block in which it was found. This makes it possible to get rid of the block_found global variable and thus makes block hunting explicit. gdb/ * ada-exp.y (write_object_renaming): Replace struct ada_symbol_info with struct block_symbol. Update field references accordingly. (block_lookup, select_possible_type_sym): Likewise. (find_primitive_type): Likewise. Also update call to ada_lookup_symbol to extract the symbol itself. (write_var_or_type, write_name_assoc): Likewise. * ada-lang.h (struct ada_symbol_info): Remove. (ada_lookup_symbol_list): Replace struct ada_symbol_info with struct block_symbol. (ada_lookup_encoded_symbol, user_select_syms): Likewise. (ada_lookup_symbol): Return struct block_symbol instead of a mere symbol. * ada-lang.c (defns_collected): Replace struct ada_symbol_info with struct block_symbol. (resolve_subexp, ada_resolve_function, sort_choices, user_select_syms, is_nonfunction, add_defn_to_vec, num_defns_collected, defns_collected, symbols_are_identical_enums, remove_extra_symbols, remove_irrelevant_renamings, add_lookup_symbol_list_worker, ada_lookup_symbol_list, ada_iterate_over_symbols, ada_lookup_encoded_symbol, get_var_value): Likewise. (ada_lookup_symbol): Return a block_symbol instead of a mere symbol. Replace struct ada_symbol_info with struct block_symbol. (ada_lookup_symbol_nonlocal): Likewise. (standard_lookup): Make block passing explicit through lookup_symbol_in_language. * ada-tasks.c (get_tcb_types_info): Update the calls to lookup_symbol_in_language to extract the mere symbol out of the returned value. (ada_tasks_inferior_data_sniffer): Likewise. * ax-gdb.c (gen_static_field): Likewise for the call to lookup_symbol. (gen_maybe_namespace_elt): Deal with struct symbol_in_block from lookup functions. (gen_expr): Likewise. * c-exp.y: Likewise. Remove uses of block_found. (lex_one_token, classify_inner_name, c_print_token): Likewise. (classify_name): Likewise. Rename the "sym" local variable to "bsym". * c-valprint.c (print_unpacked_pointer): Likewise. * compile/compile-c-symbols.c (convert_symbol_sym): Promote the "sym" parameter from struct symbol * to struct block_symbol. Use it to remove uses of block_found. Deal with struct symbol_in_block from lookup functions. (gcc_convert_symbol): Likewise. Update the call to convert_symbol_sym. * compile/compile-object-load.c (compile_object_load): Deal with struct symbol_in_block from lookup functions. * cp-namespace.c (cp_lookup_nested_symbol_1, cp_lookup_nested_symbol, cp_lookup_bare_symbol, cp_search_static_and_baseclasses, cp_lookup_symbol_in_namespace, cp_lookup_symbol_via_imports, cp_lookup_symbol_imports_or_template, cp_lookup_symbol_via_all_imports, cp_lookup_symbol_namespace, lookup_namespace_scope, cp_lookup_nonlocal, find_symbol_in_baseclass): Return struct symbol_in_block instead of mere symbols and deal with struct symbol_in_block from lookup functions. * cp-support.c (inspect_type, replace_typedefs, cp_lookup_rtti_type): Deal with struct symbol_in_block from lookup functions. * cp-support.h (cp_lookup_symbol_nonlocal, cp_lookup_symbol_from_namespace, cp_lookup_symbol_imports_or_template, cp_lookup_nested_symbol): Return struct symbol_in_block instead of mere symbols. * d-exp.y (d_type_from_name, d_module_from_name, push_variable, push_module_name): Deal with struct symbol_in_block from lookup functions. Remove uses of block_found. * eval.c (evaluate_subexp_standard): Update call to cp_lookup_symbol_namespace. * f-exp.y: Deal with struct symbol_in_block from lookup functions. Remove uses of block_found. (yylex): Likewise. * gdbtypes.c (lookup_typename, lookup_struct, lookup_union, lookup_enum, lookup_template_type, check_typedef): Deal with struct symbol_in_block from lookup functions. * guile/scm-frame.c (gdbscm_frame_read_var): Likewise. * guile/scm-symbol.c (gdbscm_lookup_symbol): Likewise. (gdbscm_lookup_global_symbol): Likewise. * gnu-v3-abi.c (gnuv3_get_typeid_type): Likewise. * go-exp.y: Likewise. Remove uses of block_found. (package_name_p, classify_packaged_name, classify_name): Likewise. * infrun.c (insert_exception_resume_breakpoint): Likewise. * jv-exp.y (push_variable): Likewise. * jv-lang.c (java_lookup_class, get_java_object_type): Likewise. * language.c (language_bool_type): Likewise. * language.h (struct language_defn): Update la_lookup_symbol_nonlocal to return a struct symbol_in_block rather than a mere symbol. * linespec.c (find_label_symbols): Deal with struct symbol_in_block from lookup functions. * m2-exp.y: Likewise. Remove uses of block_found. (yylex): Likewise. * mi/mi-cmd-stack.c (list_args_or_locals): Likewise. * objc-lang.c (lookup_struct_typedef, find_imps): Likewise. * p-exp.y: Likewise. Remove uses of block_found. (yylex): Likewise. * p-valprint.c (pascal_val_print): Likewise. * parse.c (write_dollar_variable): Likewise. Remove uses of block_found. * parser-defs.h (struct symtoken): Turn the SYM field into a struct symbol_in_block. * printcmd.c (address_info): Deal with struct symbol_in_block from lookup functions. * python/py-frame.c (frapy_read_var): Likewise. * python/py-symbol.c (gdbpy_lookup_symbol, gdbpy_lookup_global_symbol): Likewise. * skip.c (skip_function_command): Likewise. * solib-darwin.c (darwin_lookup_lib_symbol): Return a struct symbol_in_block instead of a mere symbol. * solib-spu.c (spu_lookup_lib_symbol): Likewise. * solib-svr4.c (elf_lookup_lib_symbol): Likewise. * solib.c (solib_global_lookup): Likewise. * solist.h (solib_global_lookup): Likewise. (struct target_so_ops): Update lookup_lib_global_symbol to return a struct symbol_in_block rather than a mere symbol. * source.c (select_source_symtab): Deal with struct symbol_in_block from lookup functions. * stack.c (print_frame_args, iterate_over_block_arg_vars): Likewise. * symfile.c (set_initial_language): Likewise. * symtab.c (SYMBOL_LOOKUP_FAILED): Turn into a struct symbol_in_block. (SYMBOL_LOOKUP_FAILED_P): New predicate as a macro. (struct symbol_cache_slot): Turn the FOUND field into a struct symbol_in_block. (block_found): Remove. (eq_symbol_entry): Update to deal with struct symbol_in_block in cache slots. (symbol_cache_lookup): Return a struct symbol_in_block rather than a mere symbol. (symbol_cache_mark_found): Add a BLOCK parameter to fill appropriately the cache slots. Update callers. (symbol_cache_dump): Update cache slots handling to the type change. (lookup_symbol_in_language, lookup_symbol, lookup_language_this, lookup_symbol_aux, lookup_local_symbol, lookup_symbol_in_objfile, lookup_global_symbol_from_objfile, lookup_symbol_in_objfile_symtabs, lookup_symbol_in_objfile_from_linkage_name, lookup_symbol_via_quick_fns, basic_lookup_symbol_nonlocal, lookup_symbol_in_static_block, lookup_static_symbol, lookup_global_symbol): Return a struct symbol_in_block rather than a mere symbol. Deal with struct symbol_in_block from other lookup functions. Remove uses of block_found. (lookup_symbol_in_block): Remove uses of block_found. (struct global_sym_lookup_data): Turn the RESULT field into a struct symbol_in_block. (lookup_symbol_global_iterator_cb): Update references to the RESULT field. (search_symbols): Deal with struct symbol_in_block from lookup functions. * symtab.h (struct symbol_in_block): New structure. (block_found): Remove. (lookup_symbol_in_language, lookup_symbol, basic_lookup_symbol_nonlocal, lookup_symbol_in_static_block, looku_static_symbol, lookup_global_symbol, lookup_symbol_in_block, lookup_language_this, lookup_global_symbol_from_objfile): Return a struct symbol_in_block rather than just a mere symbol. Update comments to remove mentions of block_found. * valops.c (find_function_in_inferior, value_struct_elt_for_reference, value_maybe_namespace_elt, value_of_this): Deal with struct symbol_in_block from lookup functions. * value.c (value_static_field, value_fn_field): Likewise.
2015-07-31testsuite: tcl exec& -> 'kill -9 $pid' is racy ↵Pedro Alves16-90/+163
(attach-many-short-lived-thread.exp races and others) The buildbots show that attach-many-short-lived-thread.exp is racy. But after staring at debug logs and playing with SystemTap scripts for a (long) while, I figured out that neither GDB, nor the kernel nor the test's program itself are at fault. The problem is simply that the testsuite machinery is currently subject to PID-reuse races. The attach-many-short-lived-threads.c test program just happens to be much more susceptible to trigger this race because threads and processes share the same number space on Linux, and the test spawns many many short lived threads in succession, thus enlarging the race window a lot. Part of the problem is that several tests spawn processes with "exec&" (in order to test the "attach" command) , and then at the end of the test, to make sure things are cleaned up, issue a 'remote_spawn "kill -p $testpid"'. Since with tcl's "exec&", tcl itself is responsible for reaping the process's exit status, when we go kill the process, testpid may have already exited _and_ its status may have (and often has) been reaped already. Thus it can happen that another process meanwhile reuses $testpid, and that "kill" command kills the wrong process... Frequently, that happens to be attach-many-short-lived-thread, but this explains other test's races as well. In the attach-many-short-lived-threads test, it sometimes manifests like this: (gdb) file /home/pedro/gdb/mygit/build/gdb/testsuite/gdb.threads/attach-many-short-lived-threads Reading symbols from /home/pedro/gdb/mygit/build/gdb/testsuite/gdb.threads/attach-many-short-lived-threads...done. (gdb) Loaded /home/pedro/gdb/mygit/build/gdb/testsuite/gdb.threads/attach-many-short-lived-threads into /home/pedro/gdb/mygit/build/gdb/testsuite/../../gdb/gdb attach 5940 Attaching to program: /home/pedro/gdb/mygit/build/gdb/testsuite/gdb.threads/attach-many-short-lived-threads, process 5940 warning: process 5940 is a zombie - the process has already terminated ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ptrace: Operation not permitted. (gdb) PASS: gdb.threads/attach-many-short-lived-threads.exp: iter 1: attach info threads No threads. (gdb) PASS: gdb.threads/attach-many-short-lived-threads.exp: iter 1: no new threads set breakpoint always-inserted on (gdb) PASS: gdb.threads/attach-many-short-lived-threads.exp: iter 1: set breakpoint always-inserted on Other times the process dies while the test is ongoing (the process is ptrace-stopped): (gdb) print again = 1 Cannot access memory at address 0x6020cc (gdb) FAIL: gdb.threads/attach-many-short-lived-threads.exp: iter 2: reset timer in the inferior (Recall that on Linux, SIGKILL is not interceptable) And other times it dies just while we're detaching: $4 = 319 (gdb) PASS: gdb.threads/attach-many-short-lived-threads.exp: iter 2: print seconds_left detach Can't detach Thread 0x7fb13b7de700 (LWP 1842): No such process (gdb) FAIL: gdb.threads/attach-many-short-lived-threads.exp: iter 2: detach GDB mishandles the latter (it should ignore ESRCH while detaching just like when continuing), but that's another story. The fix here is to change spawn_wait_for_attach to use Expect's 'spawn' command instead of Tcl's 'exec&' to spawn programs, because with spawn we control when to wait for/reap the process. That allows killing the process by PID without being subject to pid-reuse races, because even if the process is already dead, the kernel won't reuse the process's PID until the zombie is reaped. The other part of the problem lies in DejaGnu itself, unfortunately. I have occasionally seen tests (attach-many-short-lived-threads included, but not only that one) die with a random inexplicable SIGTERM too, and that too is caused by the same reason, except that in that case, the rogue SIGTERM is sent from this bit in DejaGnu's remote.exp: exec sh -c "exec > /dev/null 2>&1 && (kill -2 $pgid || kill -2 $pid) && sleep 5 && (kill $pgid || kill $pid) && sleep 5 && (kill -9 $pgid || kill -9 $pid) &" ... catch "wait -i $shell_id" Even if the program exits promptly, that whole cascade of kills carries on in the background, thus potentially killing the poor process that manages to reuse $pid... I sent a fix for that to the DejaGnu list: http://lists.gnu.org/archive/html/dejagnu/2015-07/msg00000.html With both patches in place, I haven't seen attach-many-short-lived-threads.exp fail again. Tested on x86_64 Fedora 20, native, gdbserver and extended-gdbserver. gdb/testsuite/ChangeLog: 2015-07-31 Pedro Alves <palves@redhat.com> * gdb.base/attach-pie-misread.exp: Rename $res to $test_spawn_id. Use spawn_id_get_pid. Wait for spawn id after eof. Use kill_wait_spawned_process instead of explicit "kill -9". * gdb.base/attach-pie-noexec.exp: Adjust to spawn_wait_for_attach returning a spawn id instead of a pid. Use spawn_id_get_pid and kill_wait_spawned_process. * gdb.base/attach-twice.exp: Likewise. * gdb.base/attach.exp: Likewise. (do_command_attach_tests): Use gdb_spawn_with_cmdline_opts and gdb_test_multiple. * gdb.base/solib-overlap.exp: Adjust to spawn_wait_for_attach returning a spawn id instead of a pid. Use spawn_id_get_pid and kill_wait_spawned_process. * gdb.base/valgrind-infcall.exp: Likewise. * gdb.multi/multi-attach.exp: Likewise. * gdb.python/py-prompt.exp: Likewise. * gdb.python/py-sync-interp.exp: Likewise. * gdb.server/ext-attach.exp: Likewise. * gdb.threads/attach-into-signal.exp (corefunc): Use spawn_wait_for_attach, spawn_id_get_pid and kill_wait_spawned_process. * gdb.threads/attach-many-short-lived-threads.exp: Adjust to spawn_wait_for_attach returning a spawn id instead of a pid. Use spawn_id_get_pid and kill_wait_spawned_process. * gdb.threads/attach-stopped.exp (corefunc): Use spawn_wait_for_attach, spawn_id_get_pid and kill_wait_spawned_process. * gdb.base/break-interp.exp: Rename $res to $test_spawn_id. Use spawn_id_get_pid. Wait for spawn id after eof. Use kill_wait_spawned_process instead of explicit "kill -9". * lib/gdb.exp (can_spawn_for_attach): Adjust comment. (kill_wait_spawned_process, spawn_id_get_pid): New procedures. (spawn_wait_for_attach): Use spawn instead of exec to spawn processes. Don't map cygwin/windows pids here. Now returns a spawn id list.
2015-07-31Fix m32r_remove_watchpoint parameter typeSimon Marchi2-3/+7
This change should have been in the previous patch (Mostly trivial enum fixes). gdb/ChangeLog: * remote-m32r-sdi.c (m32r_remove_watchpoint): Use enum type instead of integer.
2015-07-31Mostly trivial enum fixesSimon Marchi57-144/+290
This is a patch I extracted from Pedro's C++ branch. It contains the most trivial enum fixes, where an integer type/value was used instead of the appropriate enum type/value. It fixes many C++ errors, since in C++ you can't mix integers and enums implicitely. Regardless of the C++ conversion, I think this is a good cleanup to make use of the appropriate enum types. Regression-tested on native x86_64. gdb/ChangeLog: * aarch64-linux-nat.c (aarch64_linux_can_use_hw_breakpoint): Use enum type or value instead of integer. (aarch64_linux_insert_watchpoint): Likewise. (aarch64_linux_remove_watchpoint): Likewise. * ada-lang.c (ada_op_print_tab): Likewise. * amd64-linux-tdep.c (amd64_canonicalize_syscall): Likewise. (amd64_linux_syscall_record_common): Likewise. * arch-utils.c (target_byte_order_user): Likewise. (default_byte_order): Likewise. * arm-linux-nat.c (arm_linux_can_use_hw_breakpoint): Likewise. (arm_linux_get_hwbp_type): Likewise. (arm_linux_hw_watchpoint_initialize): Likewise. (arm_linux_insert_watchpoint): Likewise. * arm-linux-tdep.c (arm_canonicalize_syscall): Likewise. (arm_linux_syscall_record): Likewise. * breakpoint.c (update_watchpoint): Likewise. (breakpoint_here_p): Likewise. (bpstat_print): Likewise. (enable_breakpoint_disp): Likewise. * c-lang.c (c_op_print_tab): Likewise. * cli/cli-decode.c (add_info_alias): Likewise. * d-lang.c (d_op_print_tab): Likewise. * eval.c (evaluate_subexp_standard): Likewise. * f-exp.y (dot_ops): Likewise. (f77_keywords): Likewise. * f-lang.c (f_op_print_tab): Likewise. * go-lang.c (go_op_print_tab): Likewise. * guile/scm-breakpoint.c (gdbscm_make_breakpoint): Likewise. * guile/scm-cmd.c (gdbscm_make_command): Likewise. * guile/scm-param.c (gdbscm_make_parameter): Likewise. * guile/scm-pretty-print.c (gdbscm_apply_val_pretty_printer): Likewise. * guile/scm-string.c (struct scm_to_stringn_data): Likewise. (struct scm_from_stringn_data): Likewise. * i386-linux-tdep.c (i386_canonicalize_syscall): Likewise. * ia64-linux-nat.c (ia64_linux_insert_watchpoint): Likewise. (ia64_linux_remove_watchpoint): Likewise. (ia64_linux_can_use_hw_breakpoint): Likewise. * infrun.c (print_stop_event): Likewise. * jv-lang.c (java_op_print_tab): Likewise. * linux-nat.c (linux_proc_xfer_partial): Likewise. * linux-nat.h (struct lwp_info): Likewise. * linux-thread-db.c (enable_thread_event): Likewise. * m2-lang.c (m2_op_print_tab): Likewise. * mi/mi-cmd-stack.c (mi_cmd_stack_list_locals): Likewise. (mi_cmd_stack_list_variables): Likewise. * mi/mi-main.c (mi_cmd_trace_frame_collected): Likewise. * mi/mi-out.c (mi_table_begin): Likewise. (mi_table_header): Likewise. * mips-linux-nat.c (mips_linux_can_use_hw_breakpoint): Likewise. (mips_linux_insert_watchpoint): Likewise. (mips_linux_remove_watchpoint): Likewise. * nat/mips-linux-watch.c (mips_linux_watch_type_to_irw): Likewise. * nat/mips-linux-watch.h (struct mips_watchpoint): Likewise. (mips_linux_watch_type_to_irw): Likewise. * nto-procfs.c (procfs_can_use_hw_breakpoint): Likewise. (procfs_insert_hw_watchpoint): Likewise. (procfs_remove_hw_watchpoint): Likewise. (procfs_hw_watchpoint): Likewise. (procfs_can_use_hw_breakpoint): Likewise. (procfs_remove_hw_watchpoint): Likewise. (procfs_insert_hw_watchpoint): Likewise. * p-lang.c (pascal_op_print_tab): Likewise. * ppc-linux-nat.c (ppc_linux_can_use_hw_breakpoint): Likewise. * ppc-linux-tdep.c (ppu2spu_unwind_register): Likewise. * ppc-sysv-tdep.c (get_decimal_float_return_value): Likewise. * procfs.c (procfs_can_use_hw_breakpoint): Likewise. (procfs_insert_watchpoint): Likewise. (procfs_remove_watchpoint): Likewise. * psymtab.c (recursively_search_psymtabs): Likewise. * remote-m32r-sdi.c (m32r_can_use_hw_watchpoint): Likewise. (m32r_insert_watchpoint): Likewise. * remote-mips.c (mips_can_use_watchpoint): Likewise. (mips_insert_watchpoint): Likewise. (mips_remove_watchpoint): Likewise. * remote.c (watchpoint_to_Z_packet): Likewise. (remote_insert_watchpoint): Likewise. (remote_remove_watchpoint): Likewise. (remote_check_watch_resources): Likewise. * s390-linux-nat.c (s390_insert_watchpoint): Likewise. (s390_remove_watchpoint): Likewise. (s390_can_use_hw_breakpoint): Likewise. * s390-linux-tdep.c (s390_gdbarch_init): Likewise. * spu-linux-nat.c (spu_can_use_hw_breakpoint): Likewise. * target.h (struct target_ops): Likewise. * tilegx-tdep.c (tilegx_analyze_prologue): Likewise. * ui-out.c (struct ui_out_hdr): Likewise. (append_header_to_list): Likewise. (get_next_header): Likewise. (verify_field): Likewise. (ui_out_begin): Likewise. (ui_out_field_int): Likewise. (ui_out_field_fmt_int): Likewise. (ui_out_field_skip): Likewise. (ui_out_field_string): Likewise. (ui_out_field_fmt): Likewise. * varobj.c (new_variable): Likewise. * x86-nat.c (x86_insert_watchpoint): Likewise. (x86_remove_watchpoint): Likewise. (x86_can_use_hw_breakpoint): Likewise. * xtensa-tdep.h (struct gdbarch_tdep): Likewise. * inflow.c (enum gdb_has_a_terminal_flag_enum): Add name to previously anonymous enumeration type.. * linux-record.h (enum gdb_syscall): Add gdb_sys_no_syscall value. * target-debug.h (target_debug_print_enum_target_hw_bp_type): New. (target_debug_print_enum_bptype): New. * target-delegates.c: Regenerate.
2015-07-30Replace incorrect patch to gdb.cp/var-tag.exp.Sandra Loosemore2-1/+8
2015-07-30 Sandra Loosemore <sandra@codesourcery.com> gdb/testsuite/ * gdb.cp/var-tag.exp (do_global_tests): Revert broken commit 4bc4d42859e3b42c79c89295ef39944bdb3e6753 and apply the correct patch.
2015-07-30Don't allow non-stack memory writes in the prologue for nios2.Sandra Loosemore2-3/+6
2015-07-30 Sandra Loosemore <sandra@codesourcery.com> gdb/ * nios2-tdep.c (nios2_analyze_prologue): Do what the comment already says and disallow non-stack memory writes in the prologue.
2015-07-30Update trap/break handling in nios2 prologue analyzer.Sandra Loosemore2-14/+32
2015-07-30 Sandra Loosemore <sandra@codesourcery.com> gdb/ * nios2-tdep.c (nios2_analyze_prologue): Update comments to reflect how current GCC emits stack overflow checks. Match both trap and break instructions for backward compatibility. Disallow other trap and break instructions in the prologue.
2015-07-30Restrict gdb.arch/ppc64-symtab-cordic.exp to ppc64 targets.Sandra Loosemore2-0/+9
2015-07-30 Sandra Loosemore <sandra@codesourcery.com> gdb/testsuite/ * gdb.arch/ppc64-symtab-cordic.exp: Restrict to ppc64 targets.
2015-07-30Reapply fix for gdb.cp/var-tag.exp C++ failures.Sandra Loosemore2-3/+15
2015-07-30 Sandra Loosemore <sandra@codesourcery.com> gdb/testsuite/ Reapply: 2014-05-21 Mark Wielaard <mjw@redhat.com> * gdb.cp/var-tag.exp (do_global_tests): Handle underlying type.
2015-07-30remote follow fork and spurious child stops in non-stop modePedro Alves3-0/+39
Running gdb.threads/fork-plus-threads.exp against gdbserver in extended-remote mode, even though the test passes, we still see broken behavior: (gdb) PASS: gdb.threads/fork-plus-threads.exp: set detach-on-fork off continue & Continuing. (gdb) PASS: gdb.threads/fork-plus-threads.exp: continue & [New Thread 28092.28092] [Thread 28092.28092] #2 stopped. [New Thread 28094.28094] [Inferior 2 (process 28092) exited normally] [New Thread 28094.28105] [New Thread 28094.28109] ... [Thread 28174.28174] #18 stopped. [New Thread 28185.28185] [Inferior 10 (process 28174) exited normally] [New Thread 28185.28196] [Thread 28185.28185] #20 stopped. Cannot remove breakpoints because program is no longer writable. Further execution is probably impossible. [Inferior 11 (process 28185) exited normally] [Inferior 1 (process 28091) exited normally] PASS: gdb.threads/fork-plus-threads.exp: reached breakpoint info threads No threads. (gdb) PASS: gdb.threads/fork-plus-threads.exp: no threads left info inferiors Num Description Executable * 1 <null> /home/pedro/gdb/mygit/build/gdb/testsuite/gdb.threads/fork-plus-threads (gdb) PASS: gdb.threads/fork-plus-threads.exp: only inferior 1 left All the "[Thread FOO] #NN stopped." above are bogus, as well as the "Cannot remove breakpoints because program is no longer writable.", which is a consequence. The problem is that when we intercept a fork event, we should report the event for the parent, only, and leave the child stopped, but not report its stop event. GDB later decides whether to follow the parent or the child. But because handle_extended_wait does not set the child's last_status.kind to TARGET_WAITKIND_STOPPED, a stop_all_threads/unstop_all_lwps sequence (e.g., from trying to access memory) by mistake ends up queueing a SIGSTOP on the child, resuming it, and then when that SIGSTOP is intercepted, because the LWP has last_resume_kind set to resume_stop, gdbserver reports the stop to GDB, as GDB_SIGNAL_0: ... >>>> entering unstop_all_lwps unstopping all lwps proceed_one_lwp: lwp 1600 client wants LWP to remain 1600 stopped proceed_one_lwp: lwp 1828 Client wants LWP 1828 to stop. Making sure it has a SIGSTOP pending ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Sending sigstop to lwp 1828 pc is 0x3615ebc7cc Resuming lwp 1828 (continue, signal 0, stop expected) continue from pc 0x3615ebc7cc unstop_all_lwps done sigchld_handler <<<< exiting unstop_all_lwps handling possible target event >>>> entering linux_wait_1 linux_wait_1: [<all threads>] my_waitpid (-1, 0x40000001) my_waitpid (-1, 0x1): status(137f), 1828 LWFE: waitpid(-1, ...) returned 1828, ERRNO-OK LLW: waitpid 1828 received Stopped (signal) (stopped) pc is 0x3615ebc7cc Expected stop. LLW: resume_stop SIGSTOP caught for LWP 1828.1828. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ... linux_wait_1 ret = LWP 1828.1828, 1, 0 <<<< exiting linux_wait_1 Writing resume reply for LWP 1828.1828:1 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Tested on x86_64 Fedora 20, extended-remote. gdb/gdbserver/ChangeLog: 2015-07-30 Pedro Alves <palves@redhat.com> * linux-low.c (handle_extended_wait): Set the child's last reported status to TARGET_WAITKIND_STOPPED.
2015-07-30PR threads/18600: Inferiors left around after fork+thread spawnPedro Alves4-0/+30
The new gdb.threads/fork-plus-threads.exp test exposes one more problem. When one types "info inferiors" after running the program, one see's a couple inferior left still, while there should only be inferior #1 left. E.g.: (gdb) info inferiors Num Description Executable 4 process 8393 /home/pedro/bugs/src/test 2 process 8388 /home/pedro/bugs/src/test * 1 <null> /home/pedro/bugs/src/test (gdb) info threads Calling prune_inferiors() manually at this point (from a top gdb) does not remove them, because they still have inf->pid != 0 (while they shouldn't). This suggests that we never mourned those inferiors. Enabling logs (master + previous patch) we see: ... WL: waitpid Thread 0x7ffff7fc2740 (LWP 9513) received Trace/breakpoint trap (stopped) WL: Handling extended status 0x03057f LHEW: Got clone event from LWP 9513, new child is LWP 9579 [New Thread 0x7ffff37b8700 (LWP 9579)] WL: waitpid Thread 0x7ffff7fc2740 (LWP 9508) received 0 (exited) WL: Thread 0x7ffff7fc2740 (LWP 9508) exited. ^^^^^^^^ [Thread 0x7ffff7fc2740 (LWP 9508) exited] WL: waitpid Thread 0x7ffff7fc2740 (LWP 9499) received 0 (exited) WL: Thread 0x7ffff7fc2740 (LWP 9499) exited. [Thread 0x7ffff7fc2740 (LWP 9499) exited] RSRL: resuming stopped-resumed LWP Thread 0x7ffff37b8700 (LWP 9579) at 0x3615ef4ce1: step=0 ... (gdb) info inferiors Num Description Executable 5 process 9508 /home/pedro/bugs/src/test ^^^^ 4 process 9503 /home/pedro/bugs/src/test 3 process 9500 /home/pedro/bugs/src/test 2 process 9499 /home/pedro/bugs/src/test * 1 <null> /home/pedro/bugs/src/test (gdb) ... Note the "Thread 0x7ffff7fc2740 (LWP 9508) exited." line. That's this in wait_lwp: /* Check if the thread has exited. */ if (WIFEXITED (status) || WIFSIGNALED (status)) { thread_dead = 1; if (debug_linux_nat) fprintf_unfiltered (gdb_stdlog, "WL: %s exited.\n", target_pid_to_str (lp->ptid)); } } That was the leader thread reporting an exit, meaning the whole process is gone. So the problem is that this code doesn't understand that an WIFEXITED status of the leader LWP should be reported to infrun as process exit. gdb/ChangeLog: 2015-07-30 Pedro Alves <palves@redhat.com> PR threads/18600 * linux-nat.c (wait_lwp): Report to the core when thread group leader exits. gdb/testsuite/ChangeLog: 2015-07-30 Pedro Alves <palves@redhat.com> PR threads/18600 * gdb.threads/fork-plus-threads.exp: Test that "info inferiors" only shows inferior 1.
2015-07-30PR threads/18600: Threads left stopped after fork+thread spawnPedro Alves5-56/+243
When a program forks and another process start threads while gdb is handling the fork event, newly created threads are left stuck stopped by gdb, even though gdb presents them as "running", to the user. This can be seen with the test added by this patch. The test has the inferior fork a certain number of times and waits for all children to exit. Each fork child spawns a number of threads that do nothing and joins them immediately. Normally, the program should run unimpeded (from the point of view of the user) and exit very quickly. Without this fix, it doesn't because of some threads left stopped by gdb, so inferior 1 never exits. The program triggers when a new clone thread is found while inside the linux_stop_and_wait_all_lwps call in linux-thread-db.c: linux_stop_and_wait_all_lwps (); ALL_LWPS (lp) if (ptid_get_pid (lp->ptid) == pid) thread_from_lwp (lp->ptid); linux_unstop_all_lwps (); Within linux_stop_and_wait_all_lwps, we reach linux_handle_extended_wait with the "stopping" parameter set to 1, and because of that we don't mark the new lwp as resumed. As consequence, the subsequent resume_stopped_resumed_lwps, called from linux_unstop_all_lwps, never resumes the new LWP. There's lots of cruft in linux_handle_extended_wait that no longer makes sense. On systems with CLONE events support, we don't rely on libthread_db for thread listing anymore, so the code that preserves stop_requested and the handling of last_resume_kind is all dead. So the fix is to remove all that, and simply always mark the new LWP as resumed, so that resume_stopped_resumed_lwps re-resumes it. gdb/ChangeLog: 2015-07-30 Pedro Alves <palves@redhat.com> Simon Marchi <simon.marchi@ericsson.com> PR threads/18600 * linux-nat.c (linux_handle_extended_wait): On CLONE event, always mark the new thread as resumed. Remove STOPPING parameter. (wait_lwp): Adjust call to linux_handle_extended_wait. (linux_nat_filter_event): Adjust call to linux_handle_extended_wait. (resume_stopped_resumed_lwps): Add debug output. gdb/testsuite/ChangeLog: 2015-07-30 Simon Marchi <simon.marchi@ericsson.com> Pedro Alves <palves@redhat.com> PR threads/18600 * gdb.threads/fork-plus-threads.c: New file. * gdb.threads/fork-plus-threads.exp: New file.
2015-07-30Remove isize output argument from fast_tracepoint_valid_atPierre Langlois9-20/+31
This patch removes the isize output argument from the fast_tracepoint_valid_at gdbarch hook. It was used to return the size of the instruction that needs to be replaced when installing a fast tracepoint. Instead of getting this value from the fast_tracepoint_valid_at hook, we can call the gdb_insn_length function. If we do not do this, then architectures which do not have a restriction on where to install the fast tracepoint will send uninitialized memory off to GDBserver. See remote_download_tracepoint: ~~~ int isize; if (gdbarch_fast_tracepoint_valid_at (target_gdbarch (), tpaddr, &isize, NULL)) xsnprintf (buf + strlen (buf), BUF_SIZE - strlen (buf), ":F%x", isize); ~~~ The default implementation of fast_tracepoint_valid_at will not set isize resulting in uninitialized memory being sent. Later on, GDBserver could use this information to compute a jump offset. gdb/ChangeLog: * arch-utils.c (default_fast_tracepoint_valid_at): Remove unused isize argument. * arch-utils.h (default_fast_tracepoint_valid_at): Likewise. * breakpoint.c (check_fast_tracepoint_sals): Adjust call to gdbarch_fast_tracepoint_valid_at. * gdbarch.sh (fast_tracepoint_valid_at): Remove isize argument. * gdbarch.h: Regenerate. * gdbarch.c: Regenerate. * i386-tdep.c (i386_fast_tracepoint_valid_at): Remove isize argument. Do not set it. * remote.c (remote_download_tracepoint): Adjust call to gdbarch_fast_tracepoint_valid_at. Call gdb_insn_length to get the instruction length.
2015-07-30Remove global variable arm_hwcapYao Qi2-7/+9
After previous patch, we don't need global variable arm_hwcap. This patch is to remove it. gdb/gdbserver: 2015-07-30 Yao Qi <yao.qi@linaro.org> * linux-arm-low.c (arm_hwcap): Remove it. (arm_read_description): New local variable arm_hwcap. Don't set arm_hwcap to zero.
2015-07-30Use regcache->tdesc instead of arm_hwcapYao Qi2-12/+20
arm_hwcap is a global variable, and we should avoid using it as much as we can. Instead of checking arm_hwcap, we can check whether regcache->tdesc is a certain kind of target description. This is what this patch does. gdb/gdbserver: 2015-07-30 Yao Qi <yao.qi@linaro.org> * linux-arm-low.c (arm_fill_wmmxregset): Don't use arm_hwcap. Use regcache->tdesc instead. (arm_store_wmmxregset): Likewise. (arm_fill_vfpregset): Likewise. (arm_store_vfpregset): Likewise.
2015-07-30Don't use arm_regmap and arm_num_regs in arm_fill_gregset and arm_store_gregsetYao Qi2-8/+20
In order to align with arm-linux-nat.c counterparts, we don't use arm_num_regs and arm_regmap in functions arm_fill_gregset and arm_store_gregset. Instead, we use register numbers. With this patch applied, arm_fill_gregset and arm_store_gregset don't need arm_num_regs and arm_regmap, and they will be moved to a separate file shared for both arm and aarch64 in the following patch. gdb/gdbserver: 2015-07-30 Yao Qi <yao.qi@linaro.org> * linux-arm-low.c: Include arch/arm.h. (arm_fill_gregset): Don't use arm_num_regs and arm_regmap. (arm_store_gregset): Likewise.
2015-07-30Move ARM register numbers enum to arch/arm.hYao Qi4-39/+69
This patch moves ARM register numbers enum to arch/arm.h, so that it can used by GDBserver too. This patch also creates a new directory gdb/arch in which arch-specific or target-specific files are placed. gdb: 2015-07-30 Yao Qi <yao.qi@linaro.org> * arm-tdep.h (enum gdb_regnum): Move it to ... * arch/arm.h: ... here. New file. * Makefile.in (HFILES_NO_SRCDIR): Add arch/arm.h.
2015-07-30[AArch64] Rename boolean arguments in decoding functionsPierre Langlois2-24/+37
This patch cleans up the decoding functions using booleans when they can decode two instructions. The boolean argument is used to know which of the two instructions was decoded. The instructions affected are BR/BLR, B/BL, CBZ/CBNZ and TBZ/TBNZ. These arguments would be named after a named bit in the instruction encoding, this patch renames them to 'is_XXX'. Furthermore, the 'unsigned' type would be used to describe a boolean while aarch64_decode_cb would use 'int' (see the 'is64' argument). This patch makes all booleans be 'int' and decoded bitfields be 'unsigned'. gdb/ChangeLog: * aarch64-tdep.c (decode_b): Rename link argument to is_bl. Change its type to int *. (decode_br): Rename link argument to is_blr. Change its type to int *. (decode_cb): Rename op argument to is_cbnz. Change its type to int *. (decode_tb): Rename op argument to is_tbnz. Change its type to int *. Set is_tbnz to either 1 or 0. (aarch64_analyze_prologue): Change type of is_link to int. Add new variables is_cbnz and is_tbnz. Adjust call to aarch64_decode_cb and aarch64_decode_tb.
2015-07-29MIPS ptrace build fixesSimon Marchi5-4/+16
Since Pedro's ptrace cleanups, the MIPS buildbot compilation fails. Code in MIPS native uses ptrace with 3 arguments, where ptrace requires 4. When looking at the definition of ptrace in /usr/include/sys/ptrace.h, it shows that it takes a variable number of arguments. The wrapper macro in nat/gdb_ptrace.h takes a fixed number of arguments (4). That would explain why it used to work and stopped. I am pushing this as obvious, tell me if there is any problem. I built-tested this with a MIPS toolchain (ct-ng), but I don't have any setup to test it. At least it should put back the buildbot builder in a better shape. gdb/ChangeLog: * mips-linux-nat.c (write_watchpoint_regs): Add NULL as ptrace's 4th parameter. (mips_linux_new_thread): Likewise. * nat/mips-linux-watch.c (mips_linux_read_watch_registers): Likewise. gdb/gdbserver/ChangeLog: * linux-mips-low.c (mips_linux_prepare_to_resume): Add NULL as ptrace's 4th parameter.
2015-07-29batch-preserve-term-settings.exp: use send_quit_command some morePatrick Palka2-17/+7
Just a slight cleanup. Committed as obvious. gdb/testsuite/ChangeLog: * gdb.base/batch-preserve-term-settings.exp (test_terminal_settings_preserved_after_cli_exit): Use send_quit_command.
2015-07-29Test that terminal settings are restored after quitting via SIGTERMPatrick Palka2-0/+122
Tested on x86_64 Debian Stretch, native, gdbserver and extended-gdbserver. Also tested that the various error paths, like if $PPID is empty or if SIGTERM did not not kill GDB, function correctly. gdb/testsuite/ChangeLog: * gdb.base/batch-preserve-term-settings.exp (send_quit_command): New proc. (test_terminal_settings_preserved_after_sigterm): New test.
2015-07-29Make gdb.base/multi-forks.exp work with the native-extended-gdbserver boardPedro Alves2-0/+8
Now that we can expect inferior output with the gdbserver boards, this is all it takes to have the test pass against extended-remote gdbserver. Don Breazeal originally wrong something like this: https://sourceware.org/ml/gdb-patches/2015-03/msg00506.html which was what originally inspired the introduction of $inferior_spawn_id. gdb/testsuite/ChangeLog: 2015-07-29 Pedro Alves <palves@redhat.com> Don Breazeal <donb@codesourcery.com> * gdb.base/multi-forks.exp (continue_to_exit_bp_loc): Expect output from both inferior_spawn_id and gdb_spawn_id.
2015-07-29Uniquefy gdb.threads/attach-into-signal.expSergio Durigan Junior2-61/+70
Hi, While examining BuildBot's logs, I noticed: <https://sourceware.org/ml/gdb-testers/2015-q3/msg03767.html> gdb.threads/attach-into-signal.exp has two nested loops and don't use unique messages. This commit fixes that. Pushed under the obvious rule. gdb/testsuite/ChangeLog: 2015-07-29 Sergio Durigan Junior <sergiodj@redhat.com> * gdb.threads/attach-into-signal.exp (corefunc): Use with_test_prefix on nested loops, uniquefying the test messages.
2015-07-29Fix typo in gdb.python/py-objfile.expSergio Durigan Junior2-1/+6
My last commit d60a92216e5d599fed6b37c58c744debe38a0b24 introduced a regression caused by a typo. This fixes it. Checked in as obvious. Thanks to Pedro for reporting. gdb/testsuite/ChangeLog: 2015-07-29 Sergio Durigan Junior <sergiodj@redhat.com> * gdb.python/py-objfile.exp: Fix typo that snuck in from my last commit.
2015-07-29Make sure terminal settings are restored before exitingPatrick Palka4-1/+125
When exiting GDB -- whether it's via the "quit" command, via a SIGTERM, or otherwise -- we should leave the terminal in the state we acquired it. To that end, we have to undo any modifications that may have been made by the TUI (ncurses) or by the CLI (readline). Tested on x86_64 Debian Stretch. gdb/ChangeLog: * top.c: Include "tui/tui.h". (undo_terminal_modifications_before_exit): New static function. (quit_force): Use it. gdb/testsuite/ChangeLog: * gdb.base/batch-preserve-term-settings.exp (test_terminal_settings_preserved_after_cli_exit): New test.
2015-07-29Initialize terminal_state to terminal_is_oursPatrick Palka2-1/+5
Right now this variable is initialized to 0 i.e. terminal_is_inferior and does not get set to terminal_is_ours until target_terminal_init() is called. This function however only gets called when an inferior is first created. In the meantime, terminal_state would wrongly remain set to terminal_is_inferior. Tested on x86_64 Debian Stretch -- native, gdbserver and extended-gdbserver. gdb/ChangeLog: * target.c (terminal_state): Initialize to terminal_is_ours.
2015-07-29Clean up batch-preserve-term-settings.expPatrick Palka2-13/+15
See ChangeLog for details. No functional change intended. Tested on x86_64 Debian Stretch by verifying that the gdb.log output remains unchanged for native, gdbserver and extended-gdbserver. gdb/testsuite/ChangeLog: * gdb.base/batch-preserve-term-settings.exp: Remove top-level manipulation of saved_gdbflags. (test_terminal_settings_preserved): Remove global declaration of the unused variable pagination_prompt. Remove manipulation of saved_gdbflags. Use a local variable EXTRA_GDBFLAGS instead of GDBFLAGS.
2015-07-29PR record/18691: Fix fails in solib-precsave.expYao Qi4-4/+16
We see the following regressions in testing on x86_64-linux, reverse-step^M Cannot access memory at address 0x2aaaaaed26c0^M (gdb) FAIL: gdb.reverse/solib-precsave.exp: reverse-step into solib function one when GDB reverse step into a function, GDB wants to skip prologue so it requests TARGET_OBJECT_CODE_MEMORY to read some code memory in memory_xfer_partial_1. However in dcache_read_memory_partial, the object becomes TARGET_OBJECT_MEMORY return ops->to_xfer_partial (ops, TARGET_OBJECT_MEMORY, NULL, myaddr, NULL, memaddr, len, xfered_len); in reverse debugging, ops->to_xfer_partial is record_full_core_xfer_partial and it will return TARGET_XFER_E_IO because it can't find any records. The test fails. At this moment, the delegate relationship is like dcache -> record-core -> core -> exec and we want to GDB read memory across targets, which means if the requested memory isn't found in record-core, GDB can read memory from core, and exec even further if needed. I find raw_memory_xfer_partial is exactly what I want. gdb: 2015-07-29 Yao Qi <yao.qi@linaro.org> PR record/18691 * dcache.c (dcache_read_memory_partial): Call raw_memory_xfer_partial. * target.c (raw_memory_xfer_partial): Make it non-static. * target.h (raw_memory_xfer_partial): Declare.
2015-07-29Don't set gdb,noinferiorio on gdbserver boardsPedro Alves2-3/+4
As all tests that check gdb,noinferiorio have been adjusted to expect inferior output with "-i $inferior_spawn_id", we can remove this now, and thus enable those tests against gdbserver. gdb/testsuite/ChangeLog: 2015-07-29 Pedro Alves <palves@redhat.com> * boards/gdbserver-base.exp: Don't set gdb,noinferiorio.
2015-07-29interrupt.exp: Revert back to checking gdb,noinferiorio at the topPedro Alves2-5/+10
The following patch will remove the gdb,noinferiorio setting from the gdbserver boards, so this bit can be reverted. gdb/testsuite/ChangeLog: 2015-07-29 Pedro Alves <palves@redhat.com> * gdb.base/interrupt.exp: Revert back to checking gdb,noinferiorio at the top.
2015-07-29Unbuffer all tests that rely on stdioPedro Alves16-6/+89
This forces all tests that rely on stdio to be unbuffered, like interrupt.exp was adjusted in 6f98576f. To recap, in some scenarios, GDB or GDBserver can be spawned with input _not_ connected to a tty, and then tests that rely on stdio fail with timeouts, because the inferior's stdout and stderr streams end up fully buffered. Calling gdb_unbuffer_output forces output to be unbuffered. See https://sourceware.org/ml/gdb-patches/2015-02/msg00809.html and https://sourceware.org/ml/gdb-patches/2015-02/msg00819.html. Tested on x86_64 Fedora 20, native, and against a remote gdbserver board file that connects to the target with ssh, with and without -t (create pty). gdb/testsuite/ChangeLog: 2015-07-29 Pedro Alves <palves@redhat.com> * gdb.base/call-ar-st.c: Include "../lib/unbuffer_output.c". (main): Call gdb_unbuffer_output. * gdb.base/call-rt-st.c: Include "../lib/unbuffer_output.c". (main): Call gdb_unbuffer_output. * gdb.base/call-strs.c: Include "../lib/unbuffer_output.c". (main): Call gdb_unbuffer_output. * gdb.base/call-strs.exp: Adjust to step over the gdb_unbuffer_output call. * gdb.base/catch-gdb-caused-signals.c: Include "../lib/unbuffer_output.c". (main): Call gdb_unbuffer_output. * gdb.base/dprintf.c: Include "../lib/unbuffer_output.c". (main): Call gdb_unbuffer_output. * gdb.base/ending-run.c: Include "../lib/unbuffer_output.c". (main): Call gdb_unbuffer_output. * gdb.base/run.c: Include "../lib/unbuffer_output.c". (main): Call gdb_unbuffer_output. * gdb.base/shlib-call.exp: Adjust to step over the gdb_unbuffer_output call. * gdb.base/shmain.c: Include "../lib/unbuffer_output.c". (main): Call gdb_unbuffer_output. * gdb.base/sizeof.c: Include "../lib/unbuffer_output.c". (main): Call gdb_unbuffer_output. * gdb.base/varargs.c: Include "../lib/unbuffer_output.c". (main): Rename to ... (test): ... this. (main): Reimplement. * gdb.base/varargs.exp: Run to test instead of to main. * gdb.mi/mi-dprintf.c: Include "../lib/unbuffer_output.c". (main): Call gdb_unbuffer_output.
2015-07-29Make gdb.mi/mi-dprintf.exp use $inferior_spawn_idPedro Alves2-32/+43
gdb/testsuite/ChangeLog: 2015-07-29 Pedro Alves <palves@redhat.com> * gdb.mi/mi-dprintf.exp (mi_expect_dprintf): New procedure, factore out from mi_continue_dprintf. For call-style dprintfs, expect dprintf output out of $inferior_spawn_id. (mi_continue_dprintf): Use mi_expect_dprintf. * gdb.mi/mi-dprintf.c: Include "../lib/unbuffer_output.c". (main): Call gdb_unbuffer_output.
2015-07-29Adjust MI to $inferior_spawn_idPedro Alves2-35/+30
Rather than trying to determine where (which spawn id) the inferior output comes out from, which depends on e.g., remote that supports file i/o remote protocol extension, vs remote that sends inferior output through a separate $inferior_spawn_id, vs native debugging, which sends output through $gdb_spawn_id, vs native debugging with a test that uses "separate-inferior-tty" (like mi-console.exp does), always expect inferior output from both $inferior_spawn_id and $gdb_spawn_id. mi-console.exp itself already copes with different possible outputs in a similar way: # Combine both outputs in a single pattern. set output "($semihosted_output|$native_output)" Fixes: FAIL: gdb.mi/mi-console.exp: Testing console output inferior output (timeout) when testing against local gdbserver with gdb,noinferiorio removed from the board file. gdb/testsuite/ChangeLog: 2015-07-29 Pedro Alves <palves@redhat.com> * lib/mi-support.exp (mi_inferior_spawn_id): Delete. (default_mi_gdb_start): Set inferior_spawn_id instead of mi_inferior_spawn_id. If $inferior_spawn_id is not set, set it to gdb_spawn_id. (mi_gdb_test): Always expect inferior output from both $inferior_spawn_id and $gdb_spawn_id.
2015-07-29Make gdb.gdb/selftest.exp use '-i $inferior_spawn_id'Pedro Alves2-5/+14
gdb/testsuite/ChangeLog: 2015-07-29 Pedro Alves <palves@redhat.com> * gdb.gdb/selftest.exp (test_with_self): Update comment. Use send_inferior and $inferior_spawn_id.
2015-07-29Make gdb.gdb/complaints.exp use '-i $inferior_spawn_id' and gdb_test_stdioPedro Alves2-46/+72
gdb/testsuite/ChangeLog: 2015-07-29 Pedro Alves <palves@redhat.com> * gdb.gdb/complaints.exp (test_initial_complaints) (test_serial_complaints, test_short_complaints): Use gdb_test_stdio. (test_empty_complaint): Handle $inferior_spawn_id != $gdb_spawn_id.
2015-07-29Make gdb.base/varargs.exp use gdb_test_stdioPedro Alves2-10/+19
gdb/testsuite/ChangeLog: 2015-07-29 Pedro Alves <palves@redhat.com> * gdb.base/varargs.exp: Use gdb_test_stdio.
2015-07-29Make gdb.base/shlib-call.exp use gdb_test_stdioPedro Alves2-8/+16
gdb/testsuite/ChangeLog: 2015-07-29 Pedro Alves <palves@redhat.com> * gdb.base/shlib-call.exp: Use gdb_test_stdio.
2015-07-29Make gdb.base/ending-run.exp use gdb_test_stdioPedro Alves2-3/+11
gdb/testsuite/ChangeLog: 2015-07-29 Pedro Alves <palves@redhat.com> * gdb.base/ending-run.exp: Use gdb_test_stdio.
2015-07-29Make gdb.base/call-rt-st.exp use $inferior_spawn_idPedro Alves2-15/+53
gdb/testsuite/ChangeLog: 2015-07-29 Pedro Alves <palves@redhat.com> * gdb.base/call-rt-st.exp (print_struct_call): Split "result" parameter into two new parameters, "inf_result" and "gdb_result". Expect inferior output and gdb output from $inferior_spawn_id and $gdb_spawn_id, respectively. Adjust all callers.
2015-07-29Make gdb.base/call-ar-st.exp use gdb_test_stdioPedro Alves2-201/+289
gdb/testsuite/ChangeLog: 2015-07-29 Pedro Alves <palves@redhat.com> * gdb.base/call-ar-st.exp: Use gdb_test_stdio+multi_line instead of gdb_test_sequence.
2015-07-29Make gdb.base/a2-run.exp use $inferior_spawn_id and gdb_test_stdioPedro Alves2-20/+77
This one is a little more complicated than the other patches in this series, because of the exit status wrapper handling, requiring a little state machine. gdb/testsuite/ChangeLog: 2015-07-29 Pedro Alves <palves@redhat.com> * gdb.base/a2-run.exp (saw_usage, saw_exit_wrapper) (saw_spurious_output): Expect inferior output from $inferior_spawn_id. Use gdb_test_stdio.
2015-07-29Make gdb.base/dprintf.exp use gdb_test_stdioPedro Alves2-44/+100
This one needed a larger revamp. The issue is that the "info breakpoints" test at the bottom of the file is broken on targets that can do both server-side dprintf, and inferior I/O, because then neither the breakpoint numbers match nor the "already hit N times" output. Address that by making the test restart gdb from scratch when switching between dprintf styles. Test groups are factored into procedures, and we now use with_test_prefix. While we're changing test messages, lowercase a few test messages, and then while at it, modernize a couple things here and there. gdb/testsuite/ChangeLog: 2015-07-29 Pedro Alves <palves@redhat.com> * gdb.base/dprintf.exp: Use standard_testfile. Change prepare_for_testing call. (srcfile): Don't set. (restart): New procedure. (test_dprintf): New procecure, use to continue over dprintfs. (test_call, test_agent): New procedures, tests moved here. Restart gdb and recreate dprintfs. Adjust expected output.
2015-07-29Make gdb.base/catch-gdb-caused-signals.exp use gdb_test_stdioPedro Alves2-1/+5
gdb/testsuite/ChangeLog: 2015-07-29 Pedro Alves <palves@redhat.com> * gdb.base/catch-gdb-caused-signals.exp: Use gdb_test_stdio.
2015-07-29Make gdb.base/call-strs.exp use gdb_test_stdioPedro Alves2-20/+34
gdb/testsuite/ChangeLog: 2015-07-29 Pedro Alves <palves@redhat.com> * gdb.base/call-strs.exp: Use gdb_test_stdio instead of gdb_test.
2015-07-29Make gdb.base/sizeof.exp use gdb_test_stdioPedro Alves2-4/+13
gdb/testsuite/ChangeLog: 2015-07-29 Pedro Alves <palves@redhat.com> * gdb.base/sizeof.exp (check_sizeof, check_valueof): Use gdb_test_stdio.
2015-07-29Introduce gdb_test_stdioPedro Alves2-0/+71
This adds a new helper procedure to be used by tests that rely on stdio. gdb/testsuite/ChangeLog: 2015-07-29 Pedro Alves <palves@redhat.com> * lib/gdb.exp (gdb_test_stdio): New procedure.
2015-07-29Don't rely on inferior I/O in gdb.base/restore.expPedro Alves2-14/+5
There seems to be no point in relying on stdio here. Simply use gdb_continue_to_end instead. (not removing the printf calls, as the .c file is half generated.) gdb/testsuite/ChangeLog: 2015-07-29 Pedro Alves <palves@redhat.com> * gdb.base/restore.exp (restore_tests): Use gdb_continue_to_end.
2015-07-29Don't rely on inferior I/O in {call-signal-resume, unwindonsignal}.expPedro Alves5-34/+16
These tests rely on inferior I/O, but that seems pointless and unrelated here. Simply remove the printf calls, and don't expect them. gdb/testsuite/ChangeLog: 2015-07-29 Pedro Alves <palves@redhat.com> * gdb.base/call-signal-resume.exp: Remove check for gdb,noinferiorio. Don't expect "no signal". Use gdb_test. * gdb.base/unwindonsignal.exp: Likewise. * gdb.base/call-signals.c (gen_signal): Remove printf call. * gdb.base/unwindonsignal.c (gen_signal): Likewise.
2015-07-29Don't rely on inferior I/O in gdb.base/siginfo-addr.expPedro Alves3-17/+16
No point in relying on stdio in this test. Simply run to a breakpoint instead. gdb/testsuite/ChangeLog: 2015-07-29 Pedro Alves <palves@redhat.com> * gdb.base/siginfo-addr.c (pass): New function. (handler): Call it iff si_addr is correct. * gdb.base/siginfo-addr.exp: Remove gdb_skip_stdio_test check. Set a breakpoint at "pass" and continue to it.
2015-07-28Uniquify test names from gdb.python/{py-objfile.exp,py-pp-registration.exp}Sergio Durigan Junior3-9/+22
While running some regression tests, I noticed that the two Python tests mentioned in the $SUBJECT contain non-unique names. This is a violation of our guidelines: <https://sourceware.org/gdb/wiki/GDBTestcaseCookbook#Make_sure_test_messages_are_unique> And also makes things harder for BuildBot. So I hacked both testcases and made every test name unique. I guess this could be considered an obvious patch, but I decided to post it before pushing because others may have different opinions about the names. OK to apply? gdb/testsuite/ChangeLog: 2015-07-28 Sergio Durigan Junior <sergiodj@redhat.com> * gdb.python/py-objfile.exp: Make some tests have unique names. * gdb.python/py-pp-registration.exp: Likewise.