Commit Graph

370 Commits

Author SHA1 Message Date
Jan Kratochvil fbd1b77155 Fix accessing TLS variables with no debug info
Since 2273f0ac95 ("change minsyms not to be relocated at
read-time"), printing TLS symbols of objfiles with a non-zero base
address, without debug info, fails.

E.g., with:

 $ mv /usr/lib/debug /usr/lib/debug-x

to get debug info out of the way, we get:

 $ echo 'int main(){}' | gcc -pthread -x c -
 $ ./gdb -q -ex start -ex 'p (int) errno' ./a.out
 Cannot access memory at address 0xffffef7c0698

instead of the expected:

 $1 = 0

The regression is not visible with glibc debuginfo installed.

The problem is that we compute the address of TLS minsyms incorrectly.

To trigger the problem, it is important that the variable is in an
objfile with a non-zero base address.  While glibc is a shared library
for 'errno', it's easier for the testcase to use PIE instead of a
shlib.  For TLS variables in PT_EXEC the regression obviously does not
happen.

gdb/ChangeLog
2017-09-06  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* parse.c (find_minsym_type_and_address): Don't relocate addresses
	of TLS symbols.

gdb/testsuite/ChangeLog
2017-09-06  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* gdb.threads/tls-nodebug-pie.c: New file.
	* gdb.threads/tls-nodebug-pie.exp: New file.
2017-09-06 12:32:46 +01:00
Pedro Alves 46a4882b3c Stop assuming no-debug-info variables have type int
An earlier commit made GDB no longer assume no-debug-info functions
return int.  This commit gives the same treatment to variables.

Currently, you can end misled by GDB over output like this:

  (gdb) p var
  $1 = -1
  (gdb) p /x var
  $2 = 0xffffffff

until you realize that GDB is assuming that the variable is an "int",
because:

  (gdb) ptype var
  type = <data variable, no debug info>

You may try to fix it by casting, but that doesn't really help:

  (gdb) p /x (unsigned long long) var
  $3 = 0xffffffffffffffff            # incorrect
         ^^

That's incorrect output, because the variable was defined like this:

  uint64_t var = 0x7fffffffffffffff;
                   ^^

What happened is that with the cast, GDB did an int -> 'unsigned long
long' conversion instead of reinterpreting the variable as the cast-to
type.  To get at the variable properly you have to reinterpret the
variable's address manually instead, with either:

  (gdb) p /x *(unsigned long long *) &var
  $4 = 0x7fffffffffffffff
  (gdb) p /x {unsigned long long} &var
  $5 = 0x7fffffffffffffff

After this commit GDB does it for you.  This is what you'll get
instead:

  (gdb) p var
  'var' has unknown type; cast it to its declared type
  (gdb) p /x (unsigned long long) var
  $1 = 0x7fffffffffffffff

As in the functions patch, the "compile" machinery doesn't currently
have the cast-to type handy, so it continues assuming no-debug
variables have int type, though now at least it warns.

The change to gdb.cp/m-static.exp deserves an explanation:

 - gdb_test "print 'gnu_obj_1::method()::sintvar'" "\\$\[0-9\]+ = 4" \
 + gdb_test "print (int) 'gnu_obj_1::method()::sintvar'" "\\$\[0-9\]+ = 4" \

That's printing the "sintvar" function local static of the
"gnu_obj_1::method()" method.

The problem with that test is that that "'S::method()::static_var'"
syntax doesn't really work in C++ as you'd expect.  The way to make it
work correctly currently is to quote the method part, not the whole
expression, like:

  (gdb) print 'gnu_obj_1::method()'::sintvar

If you wrap the whole expression in quotes, like in m-static.exp, what
really happens is that the parser considers the whole string as a
symbol name, but there's no debug symbol with that name.  However,
local statics have linkage and are given a mangled name that demangles
to the same string as the full expression, so that's what GDB prints.
After this commit, and without the cast, the print in m-static.exp
would error out saying that the variable has unknown type:

  (gdb) p 'gnu_obj_1::method()::sintvar'
  'gnu_obj_1::method()::sintvar' has unknown type; cast it to its declared type

TBC, if currently (even before this series) you try to print any
function local static variable of type other than int, you'll get
bogus results.  You can see that with m-static.cc as is, even.
Printing the "svar" local, which is a boolean (1 byte) still prints as
"int" (4 bytes):

  (gdb) p 'gnu_obj_1::method()::svar'
  $1 = 1
  (gdb) ptype 'gnu_obj_1::method()::svar'
  type = <data variable, no debug info>

This probably prints some random bogus value on big endian machines.

If 'svar' was of some aggregate type (etc.) we'd still print it as
int, so the problem would have been more obvious...  After this
commit, you'll get instead:

  (gdb) p 'gnu_obj_1::method()::svar'
  'gnu_obj_1::method()::svar' has unknown type; cast it to its declared type

... so at least GDB is no longer misleading.  Making GDB find the real
local static debug symbol is the subject of the following patches.  In
the end, it'll all "Just Work".

gdb/ChangeLog:
2017-09-04  Pedro Alves  <palves@redhat.com>

	* ax-gdb.c: Include "typeprint.h".
	(gen_expr_for_cast): New function.
	(gen_expr) <OP_CAST, OP_CAST_TYPE>: Use it.
	<OP_VAR_VALUE, OP_MSYM_VAR_VALUE>: Error out if the variable's
	type is unknown.
	* dwarf2read.c (new_symbol_full): Fallback to int instead of
	nodebug_data_symbol.
	* eval.c: Include "typeprint.h".
	(evaluate_subexp_standard) <OP_VAR_VALUE, OP_VAR_MSYM_VALUE>:
	Error out if symbol has unknown type.
	<UNOP_CAST, UNOP_CAST_TYPE>: Common bits factored out to
	evaluate_subexp_for_cast.
	(evaluate_subexp_for_address, evaluate_subexp_for_sizeof): Handle
	OP_VAR_MSYM_VALUE.
	(evaluate_subexp_for_cast): New function.
	* gdbtypes.c (init_nodebug_var_type): New function.
	(objfile_type): Use it to initialize types of variables with no
	debug info.
	* typeprint.c (error_unknown_type): New.
	* typeprint.h (error_unknown_type): New declaration.
	* compile/compile-c-types.c (convert_type_basic): Handle
	TYPE_CODE_ERROR; warn and fallback to int for variables with
	unknown type.

gdb/testsuite/ChangeLog:
2017-09-04  Pedro Alves  <palves@redhat.com>

	* gdb.asm/asm-source.exp: Add casts to int.
	* gdb.base/nodebug.c (dataglobal8, dataglobal32_1, dataglobal32_2)
	(dataglobal64_1, dataglobal64_2): New globals.
	* gdb.base/nodebug.exp: Test different expressions involving the
	new globals, with print, whatis and ptype.  Add casts to int.
	* gdb.base/solib-display.exp: Add casts to int.
	* gdb.compile/compile-ifunc.exp: Expect warning.  Add cast to int.
	* gdb.cp/m-static.exp: Add cast to int.
	* gdb.dwarf2/dw2-skip-prologue.exp: Add cast to int.
	* gdb.threads/tls-nodebug.exp: Check that gdb errors out printing
	tls variable with no debug info without a cast.  Test with a cast
	to int too.
	* gdb.trace/entry-values.exp: Add casts.
2017-09-04 20:21:15 +01:00
Pedro Alves 7022349d5c Stop assuming no-debug-info functions return int
The fact that GDB defaults to assuming that functions return int, when
it has no debug info for the function has been a recurring source of
user confusion.  Recently this came up on the errno pretty printer
discussions.  Shortly after, it came up again on IRC, with someone
wondering why does getenv() in GDB return a negative int:

  (gdb) p getenv("PATH")
  $1 = -6185

This question (with s/getenv/random-other-C-runtime-function) is a FAQ
on IRC.

The reason for the above is:

 (gdb) p getenv
 $2 = {<text variable, no debug info>} 0x7ffff7751d80 <getenv>
 (gdb) ptype getenv
 type = int ()

... which means that GDB truncated the 64-bit pointer that is actually
returned from getent to 32-bit, and then sign-extended it:

 (gdb) p /x -6185
 $6 = 0xffffe7d7

The workaround is to cast the function to the right type, like:

 (gdb) p ((char *(*) (const char *)) getenv) ("PATH")
 $3 = 0x7fffffffe7d7 "/usr/local/bin:/"...

IMO, we should do better than this.

I see the "assume-int" issue the same way I see printing bogus values
for optimized-out variables instead of "<optimized out>" -- I'd much
rather that the debugger tells me "I don't know" and tells me how to
fix it than showing me bogus misleading results, making me go around
tilting at windmills.

If GDB prints a signed integer when you're expecting a pointer or
aggregate, you at least have some sense that something is off, but
consider the case of the function actually returning a 64-bit integer.
For example, compile this without debug info:

 unsigned long long
 function ()
 {
   return 0x7fffffffffffffff;
 }

Currently, with pristine GDB, you get:

 (gdb) p function ()
 $1 = -1                      # incorrect
 (gdb) p /x function ()
 $2 = 0xffffffff              # incorrect

maybe after spending a few hours debugging you suspect something is
wrong with that -1, and do:

 (gdb) ptype function
 type = int ()

and maybe, just maybe, you realize that the function actually returns
unsigned long long.  And you try to fix it with:

(gdb) p /x (unsigned long long) function ()
 $3 = 0xffffffffffffffff      # incorrect

... which still produces the wrong result, because GDB simply applied
int to unsigned long long conversion.  Meaning, it sign-extended the
integer that it extracted from the return of the function, to 64-bits.

and then maybe, after asking around on IRC, you realize you have to
cast the function to a pointer of the right type, and call that.  It
won't be easy, but after a few missteps, you'll get to it:

.....  (gdb) p /x ((unsigned long long(*) ()) function) ()
 $666 = 0x7fffffffffffffff             # finally! :-)


So to improve on the user experience, this patch does the following
(interrelated) things:

 - makes no-debug-info functions no longer default to "int" as return
   type.  Instead, they're left with NULL/"<unknown return type>"
   return type.

    (gdb) ptype getenv
    type = <unknown return type> ()

 - makes calling a function with unknown return type an error.

    (gdb) p getenv ("PATH")
    'getenv' has unknown return type; cast the call to its declared return type

 - and then to make it easier to call the function, makes it possible
   to _only_ cast the return of the function to the right type,
   instead of having to cast the function to a function pointer:

    (gdb) p (char *) getenv ("PATH")                      # now Just Works
    $3 = 0x7fffffffe7d7 "/usr/local/bin:/"...

    (gdb) p ((char *(*) (const char *)) getenv) ("PATH")  # continues working
    $4 = 0x7fffffffe7d7 "/usr/local/bin:/"...

   I.e., it makes GDB default the function's return type to the type
   of the cast, and the function's parameters to the type of the
   arguments passed down.

After this patch, here's what you'll get for the "unsigned long long"
example above:

 (gdb) p function ()
 'function' has unknown return type; cast the call to its declared return type
 (gdb) p /x (unsigned long long) function ()
 $4 = 0x7fffffffffffffff     # correct!

Note that while with "print" GDB shows the name of the function that
has the problem:

  (gdb) p getenv ("PATH")
  'getenv' has unknown return type; cast the call to its declared return type

which can by handy in more complicated expressions, "ptype" does not:

  (gdb) ptype getenv ("PATH")
  function has unknown return type; cast the call to its declared return type

This will be fixed in the next patch.

gdb/ChangeLog:
2017-09-04  Pedro Alves  <palves@redhat.com>

	* ada-lang.c (ada_evaluate_subexp) <TYPE_CODE_FUNC>: Don't handle
	TYPE_GNU_IFUNC specially here.  Throw error if return type is
	unknown.
	* ada-typeprint.c (print_func_type): Handle functions with unknown
	return type.
	* c-typeprint.c (c_type_print_base): Handle functions and methods
	with unknown return type.
	* compile/compile-c-symbols.c (convert_symbol_bmsym)
	<mst_text_gnu_ifunc>: Use nodebug_text_gnu_ifunc_symbol.
	* compile/compile-c-types.c: Include "objfiles.h".
	(convert_func): For functions with unknown return type, warn and
	default to int.
	* compile/compile-object-run.c (compile_object_run): Adjust call
	to call_function_by_hand_dummy.
	* elfread.c (elf_gnu_ifunc_resolve_addr): Adjust call to
	call_function_by_hand.
	* eval.c (evaluate_subexp_standard): Adjust calls to
	call_function_by_hand.  Handle functions and methods with unknown
	return type.  Pass expect_type to call_function_by_hand.
	* f-typeprint.c (f_type_print_base): Handle functions with unknown
	return type.
	* gcore.c (call_target_sbrk): Adjust call to
	call_function_by_hand.
	* gdbtypes.c (objfile_type): Leave nodebug text symbol with NULL
	return type instead of int.  Make nodebug_text_gnu_ifunc_symbol be
	an integer address type instead of nodebug.
	* guile/scm-value.c (gdbscm_value_call): Adjust call to
	call_function_by_hand.
	* infcall.c (error_call_unknown_return_type): New function.
	(call_function_by_hand): New "default_return_type" parameter.
	Pass it down.
	(call_function_by_hand_dummy): New "default_return_type"
	parameter.  Use it instead of defaulting to int.  If there's no
	default and the return type is unknown, throw an error.  If
	there's a default return type, and the called function has no
	debug info, then assume the function is prototyped.
	* infcall.h (call_function_by_hand, call_function_by_hand_dummy):
	New "default_return_type" parameter.
	(error_call_unknown_return_type): New declaration.
	* linux-fork.c (call_lseek): Cast return type of lseek.
	(inferior_call_waitpid, checkpoint_command): Adjust calls to
	call_function_by_hand.
	* linux-tdep.c (linux_infcall_mmap, linux_infcall_munmap): Adjust
	calls to call_function_by_hand.
	* m2-typeprint.c (m2_procedure): Handle functions with unknown
	return type.
	* objc-lang.c (lookup_objc_class, lookup_child_selector)
	(value_nsstring, print_object_command): Adjust calls to
	call_function_by_hand.
	* p-typeprint.c (pascal_type_print_varspec_prefix): Handle
	functions with unknown return type.
	(pascal_type_print_func_varspec_suffix): New function.
	(pascal_type_print_varspec_suffix) <TYPE_CODE_FUNC,
	TYPE_CODE_METHOD>: Use it.
	* python/py-value.c (valpy_call): Adjust call to
	call_function_by_hand.
	* rust-lang.c (rust_evaluate_funcall): Adjust call to
	call_function_by_hand.
	* valarith.c (value_x_binop, value_x_unop): Adjust calls to
	call_function_by_hand.
	* valops.c (value_allocate_space_in_inferior): Adjust call to
	call_function_by_hand.
	* typeprint.c (type_print_unknown_return_type): New function.
	* typeprint.h (type_print_unknown_return_type): New declaration.

gdb/testsuite/ChangeLog:
2017-09-04  Pedro Alves  <palves@redhat.com>

	* gdb.base/break-main-file-remove-fail.exp (test_remove_bp): Cast
	return type of munmap in infcall.
	* gdb.base/break-probes.exp: Cast return type of foo in infcall.
	* gdb.base/checkpoint.exp: Simplify using for loop.  Cast return
	type of ftell in infcall.
	* gdb.base/dprintf-detach.exp (dprintf_detach_test): Cast return
	type of getpid in infcall.
	* gdb.base/infcall-exec.exp: Cast return type of execlp in
	infcall.
	* gdb.base/info-os.exp: Cast return type of getpid in infcall.
	Bail on failure to extract the pid.
	* gdb.base/nodebug.c: #include <stdint.h>.
	(multf, multf_noproto, mult, mult_noproto, add8, add8_noproto):
	New functions.
	* gdb.base/nodebug.exp (test_call_promotion): New procedure.
	Change expected output of print/whatis/ptype with functions with
	no debug info.  Test all supported languages.  Call
	test_call_promotion.
	* gdb.compile/compile.exp: Adjust expected output to expect
	warning.
	* gdb.threads/siginfo-threads.exp: Likewise.
2017-09-04 20:21:13 +01:00
Pedro Alves 3a3fd0fd2c Fix removing inferiors from within "thread apply" commands
This patch fixes an internal error exposed by a test that does
something like:

  define kill-and-remove
    kill inferiors 2
    remove-inferiors 2
  end

  # Start one inferior.
  start

  # Start another inferior.
  add-inferior 2
  inferior 2
  start

  # Kill and remove inferior 1 while inferior 2 is selected.
  thread apply 1.1 kill-and-remove

The internal error looks like this:

 Thread 1.1 (Thread 0x7ffff7fc2700 (LWP 20677)):
 [Switching to inferior 1 [process 20677] (gdb/testsuite/outputs/gdb.threads/threadapply/threadapply)]
 [Switching to thread 1.1 (Thread 0x7ffff7fc2700 (LWP 20677))]
 #0  main () at src/gdb/testsuite/gdb.threads/threadapply.c:38
 38          for (i = 0; i < NUM; i++)
 src/gdb/inferior.c:66: internal-error: void set_current_inferior(inferior*): Assertion `inf != NULL' failed.
 A problem internal to GDB has been detected,
 further debugging may prove unreliable.
 Quit this debugging session? (y or n) FAIL: gdb.threads/threadapply.exp: kill_and_remove_inferior: try kill-and-remove: thread apply 1.1 kill-and-remove (GDB internal error)

There are several problems around this area of the code.  One is that
in do_restore_current_thread_cleanup, we do a look up of inferior by
ptid, which can find the wrong inferior if the previously selected
inferior exited and some other inferior was started with a reused pid
(rare, but still...).

The other problem is that the "remove-inferiors" command rejects
attempts to remove the current inferior, but when we get to
"remove-inferiors" in a "thread apply THR remove-inferiors 2" command,
the current inferior is the inferior of thread THR, not the previously
selected inferior, so if the previously selected inferior was inferior
2, that command still manages to wipe it, and then gdb restores the
old selected inferior, which is now a dangling pointer...

So the fix here is:

- Make make_cleanup_restore_current_thread store a pointer to the
  previously selected inferior directly, and use it directly instead
  of doing ptid look ups.

- Add a refcount to inferiors, very similar to thread_info's refcount,
  that is incremented/decremented by
  make_cleanup_restore_current_thread, and checked before deleting an
  inferior.  To avoid duplication, a new refcounted_object type is
  added, that both thread_info and inferior inherit from.

gdb/ChangeLog:
2017-04-19  Pedro Alves  <palves@redhat.com>

	* common/refcounted-object.h: New file.
	* gdbthread.h: Include "common/refcounted-object.h".
	(thread_info): Inherit from refcounted_object and add comments.
	(thread_info::incref, thread_info::decref)
	(thread_info::m_refcount): Delete.
	(thread_info::deletable): Use the refcounted_object::refcount()
	method.
	* inferior.c (current_inferior_): Add comment.
	(set_current_inferior): Increment/decrement refcounts.
	(prune_inferiors, remove_inferior_command): Skip inferiors marked
	not-deletable instead of comparing with the current inferior.
	(initialize_inferiors): Increment the initial inferior's refcount.
	* inferior.h (struct inferior): Forward declare.
	Include "common/refcounted-object.h".
	(current_inferior, set_current_inferior): Move declaration to
	before struct inferior's definition, and fix comment.
	(inferior): Inherit from refcounted_object.  Add comments.
	* thread.c (switch_to_thread_no_regs): Reference the thread's
	inferior pointer directly instead of doing a ptid lookup.
	(switch_to_no_thread): New function.
	(switch_to_thread(thread_info *)): New function, factored out
	from ...
	(switch_to_thread(ptid_t)): ... this.
	(restore_current_thread): Delete.
	(current_thread_cleanup): Remove 'inf_id' and 'was_removable'
	fields, and add 'inf' field.
	(do_restore_current_thread_cleanup): Check whether old->inf is
	alive instead of looking up an inferior by ptid.  Use
	switch_to_thread and switch_to_no_thread.
	(restore_current_thread_cleanup_dtor): Use old->inf directly
	instead of lookup up an inferior by id.  Decref the inferior.
	Don't restore 'removable'.
	(make_cleanup_restore_current_thread): Same the inferior pointer
	in old, instead of the inferior number.  Incref the inferior.
	Don't save/clear 'removable'.

gdb/testsuite/ChangeLog:
2017-04-19  Pedro Alves  <palves@redhat.com>

	* gdb.threads/threadapply.exp (kill_and_remove_inferior): New
	procedure.
	(top level): Call it.
	* lib/gdb.exp (gdb_define_cmd): New procedure.
2017-04-19 13:12:23 +01:00
Pedro Alves 5fd69d0ab2 Improve coverage of the PR threads/13217 regression test
- Make sure we end up with no thread selected after the detach.

- Test both "thread apply all" and "thread apply $some_threads", for
  completeness.

gdb/ChangeLog:
2017-04-13  Pedro Alves  <palves@redhat.com>

	PR threads/13217
	* gdb.threads/threadapply.exp (thr_apply_detach): New procedure.
	(top level): Call it twice, with different thread sets.
2017-04-13 16:18:16 +01:00
Yao Qi 55a9897675 Fix racy test in gdb.threads/thread-specific-bp.exp
I see the following test fail from time to time, due to the racy test
in gdb.threads/thread-specific-bp.exp.

continue -a^M
Continuing.^M
^M
Thread 1 "thread-specific" hit Breakpoint 4, end () at binutils-gdb/gdb/testsuite/gdb.threads/thread-specific-bp.c:29^M
29      }^M
(gdb) [Thread 0x40322460 (LWP 12950) exited]^M
Thread-specific breakpoint 3 deleted - thread 2 no longer in the thread list.^M
FAIL: gdb.threads/thread-specific-bp.exp: non-stop: continue to end (timeout)

This patch changes gdb_test to gdb_test_multiple to match prompt only
instead of both prompt and anchor.

gdb/testsuite:

2017-04-05  Yao Qi  <yao.qi@linaro.org>

	* gdb.threads/thread-specific-bp.exp (check_thread_specific_breakpoint):
	Use gdb_test_multiple, and don't match anchor.
2017-04-05 14:46:13 +01:00
Simon Marchi 896c0c1ede testsuite: Introduce dejagnu_version
The next patch will require checking the DejaGnu version.  There is
already a test that does this,
gdb.threads/attach-many-short-lived-threads.exp.  This patch introduces
a new procedure, dejagnu_version, and makes that test use it.

The version number is "right-padded" with zeroes, to make sure that we
always return a triplet (major, minor, patch).

The procedure does not consider the DejaGnu versions from git.  For
example, if you used DejaGnu from its current master branch, the version
would be "1.6.1-git", meaning that 1.6.1 will be the next release.  I
figured we'll cross that bridge when (and if) we get there.

gdb/testsuite/ChangeLog:

	* lib/gdb.exp (dejagnu_version): New proc.
	* gdb.threads/attach-many-short-lived-threads.exp (bad_dejagnu):
	Use dejagnu_version.
2017-03-13 18:02:07 -04:00
Pedro Alves c65d6b55b3 Fix PR18360 - internal error when using "interrupt -a"
If you do "interrupt -a" just while some thread is stepping over a
breakpoint, gdb trips on an internal error.

The test added by this patch manages to trigger this consistently by
spawning a few threads that are constantly tripping on a conditional
breakpoint whose condition always evaluates to false.  With current
gdb, you get:

~~~
 interrupt -a
 .../src/gdb/inline-frame.c:343: internal-error: void skip_inline_frames(ptid_t): Assertion `find_inline_frame_state (ptid) == NULL' failed.
 A problem internal to GDB has been detected,
 further debugging may prove unreliable.
 Quit this debugging session? (y or n) FAIL: gdb.threads/interrupt-while-step-over.exp: displaced-stepping=on: iter=0: interrupt -a (GDB internal error)
[...]
 .../src/gdb/inline-frame.c:343: internal-error: void skip_inline_frames(ptid_t): Assertion `find_inline_frame_state (ptid) == NULL' failed.
 A problem internal to GDB has been detected,
 further debugging may prove unreliable.
 Quit this debugging session? (y or n) FAIL: gdb.threads/interrupt-while-step-over.exp: displaced-stepping=off: iter=0: wait for stops (GDB internal error)
~~~

The assertion triggers because we're processing a stop for a thread
that had already stopped before and thus had already its inline-frame
state filled in.

Calling handle_inferior_event_1 directly within a
"thread_stop_requested" observer is something that I've wanted to get
rid of before, for being fragile.  Nowadays, infrun is aware of
threads with pending events, so we can use that instead, and let the
normal fetch_inferior_event -> handle_inferior_event code path handle
the forced stop.

The change to finish_step_over is necessary because sometimes a thread
that was told to PTRACE_SINGLESTEP reports back a SIGSTOP instead of a
SIGTRAP (i.e., we tell it to single-step, and then interrupt it quick
enough that on the kernel side the thread dequeues the SIGTOP before
ever having had a chance of executing the instruction to be stepped).
SIGSTOP gets translated to a GDB_SIGNAL_0.  And then finish_step_over
would miss calling clear_step_over_info, and thus miss restarting the
other threads (which in this case of threads with pending events,
means setting their "resumed" flag, so their pending events can be
consumed).

And now that we always restart threads in finish_step_over, we no
longer need to do that in handle_signal_stop.

Tested on x86_64 Fedora 23, native and gdbserver.

gdb/ChangeLog:
2017-03-08  Pedro Alves  <palves@redhat.com>

	PR gdb/18360
	* infrun.c (start_step_over, do_target_resume, resume)
	(restart_threads): Assert we're not resuming a thread that is
	meant to be stopped.
	(infrun_thread_stop_requested_callback): Delete.
	(infrun_thread_stop_requested): If the thread is internally
	stopped, queue a pending stop event and clear the thread's
	inline-frame state.
	(handle_stop_requested): New function.
	(handle_syscall_event, handle_inferior_event_1): Use
	handle_stop_requested.
	(handle_stop_requested): New function.
	(handle_signal_stop): Set the thread's stop_signal here instead of
	at caller.
	(finish_step_over): Clear step over info unconditionally.
	(handle_signal_stop): If the user had interrupted the event
	thread, consider the stop a random signal.
	(handle_signal_stop) <signal arrived while stepping over
	breakpoint>: Don't restart threads here.
	(stop_waiting): Don't clear step-over info here.

gdb/testsuite/ChangeLog:
2017-03-08  Pedro Alves  <palves@redhat.com>

	PR gdb/18360
	* gdb.threads/interrupt-while-step-over.c: New file.
	* gdb.threads/interrupt-while-step-over.exp: New file.
2017-03-08 18:54:34 +00:00
Joel Brobecker 61baf725ec update copyright year range in GDB files
This applies the second part of GDB's End of Year Procedure, which
updates the copyright year range in all of GDB's files.

gdb/ChangeLog:

        Update copyright year range in all GDB files.
2017-01-01 10:52:34 +04:00
Luis Machado 5b362f04b2 Fix more cases of improper test names
I noticed more occurrences of improper test names. The rather mechanical,
tedious and large patch below addresses, hopefully, most of the leftover cases.

As usual, another pair of eyes is welcome to check if missed something or did
an invalid substitution.

This patch also fixes the prepare_for_testing calls to pass proper test names.

gdb/testsuite/ChangeLog:

2016-12-23  Luis Machado  <lgustavo@codesourcery.com>

	Fix test names for the following files:

	* gdb.ada/exec_changed.exp
	* gdb.ada/info_types.exp
	* gdb.arch/aarch64-atomic-inst.exp
	* gdb.arch/aarch64-fp.exp
	* gdb.arch/altivec-abi.exp
	* gdb.arch/altivec-regs.exp
	* gdb.arch/amd64-byte.exp
	* gdb.arch/amd64-disp-step.exp
	* gdb.arch/amd64-dword.exp
	* gdb.arch/amd64-entry-value-inline.exp
	* gdb.arch/amd64-entry-value-param.exp
	* gdb.arch/amd64-entry-value-paramref.exp
	* gdb.arch/amd64-entry-value.exp
	* gdb.arch/amd64-i386-address.exp
	* gdb.arch/amd64-invalid-stack-middle.exp
	* gdb.arch/amd64-invalid-stack-top.exp
	* gdb.arch/amd64-optimout-repeat.exp
	* gdb.arch/amd64-prologue-skip.exp
	* gdb.arch/amd64-prologue-xmm.exp
	* gdb.arch/amd64-stap-special-operands.exp
	* gdb.arch/amd64-stap-wrong-subexp.exp
	* gdb.arch/amd64-tailcall-cxx.exp
	* gdb.arch/amd64-tailcall-noret.exp
	* gdb.arch/amd64-tailcall-ret.exp
	* gdb.arch/amd64-tailcall-self.exp
	* gdb.arch/amd64-word.exp
	* gdb.arch/arm-bl-branch-dest.exp
	* gdb.arch/arm-disp-step.exp
	* gdb.arch/arm-neon.exp
	* gdb.arch/arm-single-step-kernel-helper.exp
	* gdb.arch/avr-flash-qualifier.exp
	* gdb.arch/disp-step-insn-reloc.exp
	* gdb.arch/e500-abi.exp
	* gdb.arch/e500-regs.exp
	* gdb.arch/ftrace-insn-reloc.exp
	* gdb.arch/i386-avx512.exp
	* gdb.arch/i386-bp_permanent.exp
	* gdb.arch/i386-byte.exp
	* gdb.arch/i386-cfi-notcurrent.exp
	* gdb.arch/i386-disp-step.exp
	* gdb.arch/i386-dr3-watch.exp
	* gdb.arch/i386-float.exp
	* gdb.arch/i386-gnu-cfi.exp
	* gdb.arch/i386-mpx-map.exp
	* gdb.arch/i386-mpx-sigsegv.exp
	* gdb.arch/i386-mpx-simple_segv.exp
	* gdb.arch/i386-mpx.exp
	* gdb.arch/i386-permbkpt.exp
	* gdb.arch/i386-prologue.exp
	* gdb.arch/i386-signal.exp
	* gdb.arch/i386-size-overlap.exp
	* gdb.arch/i386-unwind.exp
	* gdb.arch/i386-word.exp
	* gdb.arch/mips-fcr.exp
	* gdb.arch/powerpc-d128-regs.exp
	* gdb.arch/powerpc-stackless.exp
	* gdb.arch/ppc64-atomic-inst.exp
	* gdb.arch/s390-stackless.exp
	* gdb.arch/s390-tdbregs.exp
	* gdb.arch/s390-vregs.exp
	* gdb.arch/sparc-sysstep.exp
	* gdb.arch/thumb-bx-pc.exp
	* gdb.arch/thumb-singlestep.exp
	* gdb.arch/thumb2-it.exp
	* gdb.arch/vsx-regs.exp
	* gdb.asm/asm-source.exp
	* gdb.base/a2-run.exp
	* gdb.base/advance.exp
	* gdb.base/all-bin.exp
	* gdb.base/anon.exp
	* gdb.base/args.exp
	* gdb.base/arithmet.exp
	* gdb.base/async-shell.exp
	* gdb.base/async.exp
	* gdb.base/attach-pie-noexec.exp
	* gdb.base/attach-twice.exp
	* gdb.base/auto-load.exp
	* gdb.base/bang.exp
	* gdb.base/bitfields.exp
	* gdb.base/break-always.exp
	* gdb.base/break-caller-line.exp
	* gdb.base/break-entry.exp
	* gdb.base/break-inline.exp
	* gdb.base/break-on-linker-gcd-function.exp
	* gdb.base/break-probes.exp
	* gdb.base/break.exp
	* gdb.base/breakpoint-shadow.exp
	* gdb.base/call-ar-st.exp
	* gdb.base/call-sc.exp
	* gdb.base/call-signal-resume.exp
	* gdb.base/call-strs.exp
	* gdb.base/callfuncs.exp
	* gdb.base/catch-fork-static.exp
	* gdb.base/catch-gdb-caused-signals.exp
	* gdb.base/catch-load.exp
	* gdb.base/catch-signal-fork.exp
	* gdb.base/catch-signal.exp
	* gdb.base/catch-syscall.exp
	* gdb.base/charset.exp
	* gdb.base/checkpoint.exp
	* gdb.base/chng-syms.exp
	* gdb.base/code-expr.exp
	* gdb.base/code_elim.exp
	* gdb.base/commands.exp
	* gdb.base/completion.exp
	* gdb.base/complex.exp
	* gdb.base/cond-expr.exp
	* gdb.base/condbreak.exp
	* gdb.base/consecutive.exp
	* gdb.base/continue-all-already-running.exp
	* gdb.base/coredump-filter.exp
	* gdb.base/corefile.exp
	* gdb.base/dbx.exp
	* gdb.base/debug-expr.exp
	* gdb.base/define.exp
	* gdb.base/del.exp
	* gdb.base/disabled-location.exp
	* gdb.base/disasm-end-cu.exp
	* gdb.base/disasm-optim.exp
	* gdb.base/display.exp
	* gdb.base/duplicate-bp.exp
	* gdb.base/ena-dis-br.exp
	* gdb.base/ending-run.exp
	* gdb.base/enumval.exp
	* gdb.base/environ.exp
	* gdb.base/eu-strip-infcall.exp
	* gdb.base/eval-avoid-side-effects.exp
	* gdb.base/eval-skip.exp
	* gdb.base/exitsignal.exp
	* gdb.base/expand-psymtabs.exp
	* gdb.base/filesym.exp
	* gdb.base/find-unmapped.exp
	* gdb.base/finish.exp
	* gdb.base/float.exp
	* gdb.base/foll-exec-mode.exp
	* gdb.base/foll-exec.exp
	* gdb.base/foll-fork.exp
	* gdb.base/fortran-sym-case.exp
	* gdb.base/freebpcmd.exp
	* gdb.base/func-ptr.exp
	* gdb.base/func-ptrs.exp
	* gdb.base/funcargs.exp
	* gdb.base/gcore-buffer-overflow.exp
	* gdb.base/gcore-relro-pie.exp
	* gdb.base/gcore-relro.exp
	* gdb.base/gcore.exp
	* gdb.base/gdb1090.exp
	* gdb.base/gdb11530.exp
	* gdb.base/gdb11531.exp
	* gdb.base/gdb1821.exp
	* gdb.base/gdbindex-stabs.exp
	* gdb.base/gdbvars.exp
	* gdb.base/hbreak.exp
	* gdb.base/hbreak2.exp
	* gdb.base/included.exp
	* gdb.base/infcall-input.exp
	* gdb.base/inferior-died.exp
	* gdb.base/infnan.exp
	* gdb.base/info-macros.exp
	* gdb.base/info-os.exp
	* gdb.base/info-proc.exp
	* gdb.base/info-shared.exp
	* gdb.base/info-target.exp
	* gdb.base/infoline.exp
	* gdb.base/interp.exp
	* gdb.base/interrupt.exp
	* gdb.base/jit-reader.exp
	* gdb.base/jit-simple.exp
	* gdb.base/kill-after-signal.exp
	* gdb.base/kill-detach-inferiors-cmd.exp
	* gdb.base/label.exp
	* gdb.base/langs.exp
	* gdb.base/ldbl_e308.exp
	* gdb.base/line-symtabs.exp
	* gdb.base/linespecs.exp
	* gdb.base/list.exp
	* gdb.base/long_long.exp
	* gdb.base/longest-types.exp
	* gdb.base/maint.exp
	* gdb.base/max-value-size.exp
	* gdb.base/memattr.exp
	* gdb.base/mips_pro.exp
	* gdb.base/morestack.exp
	* gdb.base/moribund-step.exp
	* gdb.base/multi-forks.exp
	* gdb.base/nested-addr.exp
	* gdb.base/nextoverexit.exp
	* gdb.base/noreturn-finish.exp
	* gdb.base/noreturn-return.exp
	* gdb.base/nostdlib.exp
	* gdb.base/offsets.exp
	* gdb.base/opaque.exp
	* gdb.base/pc-fp.exp
	* gdb.base/permissions.exp
	* gdb.base/print-symbol-loading.exp
	* gdb.base/prologue-include.exp
	* gdb.base/psymtab.exp
	* gdb.base/ptype.exp
	* gdb.base/random-signal.exp
	* gdb.base/randomize.exp
	* gdb.base/range-stepping.exp
	* gdb.base/readline-ask.exp
	* gdb.base/recpar.exp
	* gdb.base/recurse.exp
	* gdb.base/relational.exp
	* gdb.base/restore.exp
	* gdb.base/return-nodebug.exp
	* gdb.base/return.exp
	* gdb.base/run-after-attach.exp
	* gdb.base/save-bp.exp
	* gdb.base/scope.exp
	* gdb.base/sect-cmd.exp
	* gdb.base/set-lang-auto.exp
	* gdb.base/set-noassign.exp
	* gdb.base/setvar.exp
	* gdb.base/sigall.exp
	* gdb.base/sigbpt.exp
	* gdb.base/siginfo-addr.exp
	* gdb.base/siginfo-infcall.exp
	* gdb.base/siginfo-obj.exp
	* gdb.base/siginfo.exp
	* gdb.base/signals-state-child.exp
	* gdb.base/signest.exp
	* gdb.base/sigstep.exp
	* gdb.base/sizeof.exp
	* gdb.base/skip.exp
	* gdb.base/solib-corrupted.exp
	* gdb.base/solib-nodir.exp
	* gdb.base/solib-search.exp
	* gdb.base/stack-checking.exp
	* gdb.base/stale-infcall.exp
	* gdb.base/stap-probe.exp
	* gdb.base/start.exp
	* gdb.base/step-break.exp
	* gdb.base/step-bt.exp
	* gdb.base/step-line.exp
	* gdb.base/step-over-exit.exp
	* gdb.base/step-over-syscall.exp
	* gdb.base/step-resume-infcall.exp
	* gdb.base/step-test.exp
	* gdb.base/store.exp
	* gdb.base/structs3.exp
	* gdb.base/sym-file.exp
	* gdb.base/symbol-without-target_section.exp
	* gdb.base/term.exp
	* gdb.base/testenv.exp
	* gdb.base/ui-redirect.exp
	* gdb.base/until.exp
	* gdb.base/unwindonsignal.exp
	* gdb.base/value-double-free.exp
	* gdb.base/vla-datatypes.exp
	* gdb.base/vla-ptr.exp
	* gdb.base/vla-sideeffect.exp
	* gdb.base/volatile.exp
	* gdb.base/watch-cond-infcall.exp
	* gdb.base/watch-cond.exp
	* gdb.base/watch-non-mem.exp
	* gdb.base/watch-read.exp
	* gdb.base/watch-vfork.exp
	* gdb.base/watchpoint-cond-gone.exp
	* gdb.base/watchpoint-delete.exp
	* gdb.base/watchpoint-hw-hit-once.exp
	* gdb.base/watchpoint-hw.exp
	* gdb.base/watchpoint-stops-at-right-insn.exp
	* gdb.base/watchpoints.exp
	* gdb.base/wchar.exp
	* gdb.base/whatis-exp.exp
	* gdb.btrace/buffer-size.exp
	* gdb.btrace/data.exp
	* gdb.btrace/delta.exp
	* gdb.btrace/dlopen.exp
	* gdb.btrace/enable.exp
	* gdb.btrace/exception.exp
	* gdb.btrace/function_call_history.exp
	* gdb.btrace/gcore.exp
	* gdb.btrace/instruction_history.exp
	* gdb.btrace/nohist.exp
	* gdb.btrace/reconnect.exp
	* gdb.btrace/record_goto-step.exp
	* gdb.btrace/record_goto.exp
	* gdb.btrace/rn-dl-bind.exp
	* gdb.btrace/segv.exp
	* gdb.btrace/step.exp
	* gdb.btrace/stepi.exp
	* gdb.btrace/tailcall-only.exp
	* gdb.btrace/tailcall.exp
	* gdb.btrace/tsx.exp
	* gdb.btrace/unknown_functions.exp
	* gdb.btrace/vdso.exp
	* gdb.compile/compile-ifunc.exp
	* gdb.compile/compile-ops.exp
	* gdb.compile/compile-print.exp
	* gdb.compile/compile-setjmp.exp
	* gdb.cp/abstract-origin.exp
	* gdb.cp/ambiguous.exp
	* gdb.cp/annota2.exp
	* gdb.cp/annota3.exp
	* gdb.cp/anon-ns.exp
	* gdb.cp/anon-struct.exp
	* gdb.cp/anon-union.exp
	* gdb.cp/arg-reference.exp
	* gdb.cp/baseenum.exp
	* gdb.cp/bool.exp
	* gdb.cp/breakpoint.exp
	* gdb.cp/bs15503.exp
	* gdb.cp/call-c.exp
	* gdb.cp/casts.exp
	* gdb.cp/chained-calls.exp
	* gdb.cp/class2.exp
	* gdb.cp/classes.exp
	* gdb.cp/cmpd-minsyms.exp
	* gdb.cp/converts.exp
	* gdb.cp/cp-relocate.exp
	* gdb.cp/cpcompletion.exp
	* gdb.cp/cpexprs.exp
	* gdb.cp/cplabel.exp
	* gdb.cp/cplusfuncs.exp
	* gdb.cp/cpsizeof.exp
	* gdb.cp/ctti.exp
	* gdb.cp/derivation.exp
	* gdb.cp/destrprint.exp
	* gdb.cp/dispcxx.exp
	* gdb.cp/enum-class.exp
	* gdb.cp/exception.exp
	* gdb.cp/exceptprint.exp
	* gdb.cp/expand-psymtabs-cxx.exp
	* gdb.cp/expand-sals.exp
	* gdb.cp/extern-c.exp
	* gdb.cp/filename.exp
	* gdb.cp/formatted-ref.exp
	* gdb.cp/fpointer.exp
	* gdb.cp/gdb1355.exp
	* gdb.cp/gdb2495.exp
	* gdb.cp/hang.exp
	* gdb.cp/impl-this.exp
	* gdb.cp/infcall-dlopen.exp
	* gdb.cp/inherit.exp
	* gdb.cp/iostream.exp
	* gdb.cp/koenig.exp
	* gdb.cp/local.exp
	* gdb.cp/m-data.exp
	* gdb.cp/m-static.exp
	* gdb.cp/mb-ctor.exp
	* gdb.cp/mb-inline.exp
	* gdb.cp/mb-templates.exp
	* gdb.cp/member-name.exp
	* gdb.cp/member-ptr.exp
	* gdb.cp/meth-typedefs.exp
	* gdb.cp/method.exp
	* gdb.cp/method2.exp
	* gdb.cp/minsym-fallback.exp
	* gdb.cp/misc.exp
	* gdb.cp/namelessclass.exp
	* gdb.cp/namespace-enum.exp
	* gdb.cp/namespace-nested-import.exp
	* gdb.cp/namespace.exp
	* gdb.cp/nextoverthrow.exp
	* gdb.cp/no-dmgl-verbose.exp
	* gdb.cp/non-trivial-retval.exp
	* gdb.cp/noparam.exp
	* gdb.cp/nsdecl.exp
	* gdb.cp/nsimport.exp
	* gdb.cp/nsnested.exp
	* gdb.cp/nsnoimports.exp
	* gdb.cp/nsrecurs.exp
	* gdb.cp/nsstress.exp
	* gdb.cp/nsusing.exp
	* gdb.cp/operator.exp
	* gdb.cp/oranking.exp
	* gdb.cp/overload-const.exp
	* gdb.cp/overload.exp
	* gdb.cp/ovldbreak.exp
	* gdb.cp/ovsrch.exp
	* gdb.cp/paren-type.exp
	* gdb.cp/parse-lang.exp
	* gdb.cp/pass-by-ref.exp
	* gdb.cp/pr-1023.exp
	* gdb.cp/pr-1210.exp
	* gdb.cp/pr-574.exp
	* gdb.cp/pr10687.exp
	* gdb.cp/pr12028.exp
	* gdb.cp/pr17132.exp
	* gdb.cp/pr17494.exp
	* gdb.cp/pr9067.exp
	* gdb.cp/pr9167.exp
	* gdb.cp/pr9631.exp
	* gdb.cp/printmethod.exp
	* gdb.cp/psmang.exp
	* gdb.cp/psymtab-parameter.exp
	* gdb.cp/ptype-cv-cp.exp
	* gdb.cp/ptype-flags.exp
	* gdb.cp/re-set-overloaded.exp
	* gdb.cp/ref-types.exp
	* gdb.cp/rtti.exp
	* gdb.cp/scope-err.exp
	* gdb.cp/shadow.exp
	* gdb.cp/smartp.exp
	* gdb.cp/static-method.exp
	* gdb.cp/static-print-quit.exp
	* gdb.cp/temargs.exp
	* gdb.cp/templates.exp
	* gdb.cp/try_catch.exp
	* gdb.cp/typedef-operator.exp
	* gdb.cp/typeid.exp
	* gdb.cp/userdef.exp
	* gdb.cp/using-crash.exp
	* gdb.cp/var-tag.exp
	* gdb.cp/virtbase.exp
	* gdb.cp/virtfunc.exp
	* gdb.cp/virtfunc2.exp
	* gdb.cp/vla-cxx.exp
	* gdb.disasm/t01_mov.exp
	* gdb.disasm/t02_mova.exp
	* gdb.disasm/t03_add.exp
	* gdb.disasm/t04_sub.exp
	* gdb.disasm/t05_cmp.exp
	* gdb.disasm/t06_ari2.exp
	* gdb.disasm/t07_ari3.exp
	* gdb.disasm/t08_or.exp
	* gdb.disasm/t09_xor.exp
	* gdb.disasm/t10_and.exp
	* gdb.disasm/t11_logs.exp
	* gdb.disasm/t12_bit.exp
	* gdb.disasm/t13_otr.exp
	* gdb.dlang/circular.exp
	* gdb.dwarf2/arr-stride.exp
	* gdb.dwarf2/arr-subrange.exp
	* gdb.dwarf2/atomic-type.exp
	* gdb.dwarf2/bad-regnum.exp
	* gdb.dwarf2/bitfield-parent-optimized-out.exp
	* gdb.dwarf2/callframecfa.exp
	* gdb.dwarf2/clztest.exp
	* gdb.dwarf2/corrupt.exp
	* gdb.dwarf2/data-loc.exp
	* gdb.dwarf2/dup-psym.exp
	* gdb.dwarf2/dw2-anon-mptr.exp
	* gdb.dwarf2/dw2-anonymous-func.exp
	* gdb.dwarf2/dw2-bad-mips-linkage-name.exp
	* gdb.dwarf2/dw2-bad-unresolved.exp
	* gdb.dwarf2/dw2-basic.exp
	* gdb.dwarf2/dw2-canonicalize-type.exp
	* gdb.dwarf2/dw2-case-insensitive.exp
	* gdb.dwarf2/dw2-common-block.exp
	* gdb.dwarf2/dw2-compdir-oldgcc.exp
	* gdb.dwarf2/dw2-compressed.exp
	* gdb.dwarf2/dw2-const.exp
	* gdb.dwarf2/dw2-cp-infcall-ref-static.exp
	* gdb.dwarf2/dw2-cu-size.exp
	* gdb.dwarf2/dw2-dup-frame.exp
	* gdb.dwarf2/dw2-entry-value.exp
	* gdb.dwarf2/dw2-icycle.exp
	* gdb.dwarf2/dw2-ifort-parameter.exp
	* gdb.dwarf2/dw2-inline-break.exp
	* gdb.dwarf2/dw2-inline-param.exp
	* gdb.dwarf2/dw2-intercu.exp
	* gdb.dwarf2/dw2-intermix.exp
	* gdb.dwarf2/dw2-lexical-block-bare.exp
	* gdb.dwarf2/dw2-linkage-name-trust.exp
	* gdb.dwarf2/dw2-minsym-in-cu.exp
	* gdb.dwarf2/dw2-noloc.exp
	* gdb.dwarf2/dw2-op-call.exp
	* gdb.dwarf2/dw2-op-out-param.exp
	* gdb.dwarf2/dw2-opt-structptr.exp
	* gdb.dwarf2/dw2-param-error.exp
	* gdb.dwarf2/dw2-producer.exp
	* gdb.dwarf2/dw2-ranges-base.exp
	* gdb.dwarf2/dw2-ref-missing-frame.exp
	* gdb.dwarf2/dw2-reg-undefined.exp
	* gdb.dwarf2/dw2-regno-invalid.exp
	* gdb.dwarf2/dw2-restore.exp
	* gdb.dwarf2/dw2-restrict.exp
	* gdb.dwarf2/dw2-single-line-discriminators.exp
	* gdb.dwarf2/dw2-strp.exp
	* gdb.dwarf2/dw2-undefined-ret-addr.exp
	* gdb.dwarf2/dw2-unresolved.exp
	* gdb.dwarf2/dw2-var-zero-addr.exp
	* gdb.dwarf2/dw4-sig-types.exp
	* gdb.dwarf2/dwz.exp
	* gdb.dwarf2/dynarr-ptr.exp
	* gdb.dwarf2/enum-type.exp
	* gdb.dwarf2/gdb-index.exp
	* gdb.dwarf2/implptr-64bit.exp
	* gdb.dwarf2/implptr-optimized-out.exp
	* gdb.dwarf2/implptr.exp
	* gdb.dwarf2/implref-array.exp
	* gdb.dwarf2/implref-const.exp
	* gdb.dwarf2/implref-global.exp
	* gdb.dwarf2/implref-struct.exp
	* gdb.dwarf2/mac-fileno.exp
	* gdb.dwarf2/main-subprogram.exp
	* gdb.dwarf2/member-ptr-forwardref.exp
	* gdb.dwarf2/method-ptr.exp
	* gdb.dwarf2/missing-sig-type.exp
	* gdb.dwarf2/nonvar-access.exp
	* gdb.dwarf2/opaque-type-lookup.exp
	* gdb.dwarf2/pieces-optimized-out.exp
	* gdb.dwarf2/pieces.exp
	* gdb.dwarf2/pr10770.exp
	* gdb.dwarf2/pr13961.exp
	* gdb.dwarf2/staticvirtual.exp
	* gdb.dwarf2/subrange.exp
	* gdb.dwarf2/symtab-producer.exp
	* gdb.dwarf2/trace-crash.exp
	* gdb.dwarf2/typeddwarf.exp
	* gdb.dwarf2/valop.exp
	* gdb.dwarf2/watch-notconst.exp
	* gdb.fortran/array-element.exp
	* gdb.fortran/charset.exp
	* gdb.fortran/common-block.exp
	* gdb.fortran/complex.exp
	* gdb.fortran/derived-type-function.exp
	* gdb.fortran/derived-type.exp
	* gdb.fortran/logical.exp
	* gdb.fortran/module.exp
	* gdb.fortran/multi-dim.exp
	* gdb.fortran/nested-funcs.exp
	* gdb.fortran/print-formatted.exp
	* gdb.fortran/subarray.exp
	* gdb.fortran/vla-alloc-assoc.exp
	* gdb.fortran/vla-datatypes.exp
	* gdb.fortran/vla-history.exp
	* gdb.fortran/vla-ptr-info.exp
	* gdb.fortran/vla-ptype-sub.exp
	* gdb.fortran/vla-ptype.exp
	* gdb.fortran/vla-sizeof.exp
	* gdb.fortran/vla-type.exp
	* gdb.fortran/vla-value-sub-arbitrary.exp
	* gdb.fortran/vla-value-sub-finish.exp
	* gdb.fortran/vla-value-sub.exp
	* gdb.fortran/vla-value.exp
	* gdb.fortran/whatis_type.exp
	* gdb.go/chan.exp
	* gdb.go/handcall.exp
	* gdb.go/hello.exp
	* gdb.go/integers.exp
	* gdb.go/methods.exp
	* gdb.go/package.exp
	* gdb.go/strings.exp
	* gdb.go/types.exp
	* gdb.go/unsafe.exp
	* gdb.guile/scm-arch.exp
	* gdb.guile/scm-block.exp
	* gdb.guile/scm-breakpoint.exp
	* gdb.guile/scm-cmd.exp
	* gdb.guile/scm-disasm.exp
	* gdb.guile/scm-equal.exp
	* gdb.guile/scm-frame-args.exp
	* gdb.guile/scm-frame-inline.exp
	* gdb.guile/scm-frame.exp
	* gdb.guile/scm-iterator.exp
	* gdb.guile/scm-math.exp
	* gdb.guile/scm-objfile.exp
	* gdb.guile/scm-ports.exp
	* gdb.guile/scm-symbol.exp
	* gdb.guile/scm-symtab.exp
	* gdb.guile/scm-value-cc.exp
	* gdb.guile/types-module.exp
	* gdb.linespec/break-ask.exp
	* gdb.linespec/cpexplicit.exp
	* gdb.linespec/explicit.exp
	* gdb.linespec/keywords.exp
	* gdb.linespec/linespec.exp
	* gdb.linespec/ls-dollar.exp
	* gdb.linespec/ls-errs.exp
	* gdb.linespec/skip-two.exp
	* gdb.linespec/thread.exp
	* gdb.mi/mi-async.exp
	* gdb.mi/mi-basics.exp
	* gdb.mi/mi-break.exp
	* gdb.mi/mi-catch-load.exp
	* gdb.mi/mi-cli.exp
	* gdb.mi/mi-cmd-param-changed.exp
	* gdb.mi/mi-console.exp
	* gdb.mi/mi-detach.exp
	* gdb.mi/mi-disassemble.exp
	* gdb.mi/mi-eval.exp
	* gdb.mi/mi-file-transfer.exp
	* gdb.mi/mi-file.exp
	* gdb.mi/mi-fill-memory.exp
	* gdb.mi/mi-inheritance-syntax-error.exp
	* gdb.mi/mi-linespec-err-cp.exp
	* gdb.mi/mi-logging.exp
	* gdb.mi/mi-memory-changed.exp
	* gdb.mi/mi-read-memory.exp
	* gdb.mi/mi-record-changed.exp
	* gdb.mi/mi-reg-undefined.exp
	* gdb.mi/mi-regs.exp
	* gdb.mi/mi-return.exp
	* gdb.mi/mi-reverse.exp
	* gdb.mi/mi-simplerun.exp
	* gdb.mi/mi-solib.exp
	* gdb.mi/mi-stack.exp
	* gdb.mi/mi-stepi.exp
	* gdb.mi/mi-syn-frame.exp
	* gdb.mi/mi-until.exp
	* gdb.mi/mi-var-block.exp
	* gdb.mi/mi-var-child.exp
	* gdb.mi/mi-var-cmd.exp
	* gdb.mi/mi-var-cp.exp
	* gdb.mi/mi-var-display.exp
	* gdb.mi/mi-var-invalidate.exp
	* gdb.mi/mi-var-list-children-invalid-grandchild.exp
	* gdb.mi/mi-vla-fortran.exp
	* gdb.mi/mi-watch.exp
	* gdb.mi/mi2-var-child.exp
	* gdb.mi/user-selected-context-sync.exp
	* gdb.modula2/unbounded-array.exp
	* gdb.multi/dummy-frame-restore.exp
	* gdb.multi/multi-arch-exec.exp
	* gdb.multi/multi-arch.exp
	* gdb.multi/tids.exp
	* gdb.multi/watchpoint-multi.exp
	* gdb.opencl/callfuncs.exp
	* gdb.opencl/convs_casts.exp
	* gdb.opencl/datatypes.exp
	* gdb.opencl/operators.exp
	* gdb.opencl/vec_comps.exp
	* gdb.opt/clobbered-registers-O2.exp
	* gdb.opt/inline-break.exp
	* gdb.opt/inline-bt.exp
	* gdb.opt/inline-cmds.exp
	* gdb.opt/inline-locals.exp
	* gdb.pascal/case-insensitive-symbols.exp
	* gdb.pascal/floats.exp
	* gdb.pascal/gdb11492.exp
	* gdb.python/lib-types.exp
	* gdb.python/py-arch.exp
	* gdb.python/py-as-string.exp
	* gdb.python/py-bad-printers.exp
	* gdb.python/py-block.exp
	* gdb.python/py-breakpoint-create-fail.exp
	* gdb.python/py-breakpoint.exp
	* gdb.python/py-caller-is.exp
	* gdb.python/py-cmd.exp
	* gdb.python/py-explore-cc.exp
	* gdb.python/py-explore.exp
	* gdb.python/py-finish-breakpoint.exp
	* gdb.python/py-finish-breakpoint2.exp
	* gdb.python/py-frame-args.exp
	* gdb.python/py-frame-inline.exp
	* gdb.python/py-frame.exp
	* gdb.python/py-framefilter-mi.exp
	* gdb.python/py-infthread.exp
	* gdb.python/py-lazy-string.exp
	* gdb.python/py-linetable.exp
	* gdb.python/py-mi-events.exp
	* gdb.python/py-mi-objfile.exp
	* gdb.python/py-mi.exp
	* gdb.python/py-objfile.exp
	* gdb.python/py-pp-integral.exp
	* gdb.python/py-pp-maint.exp
	* gdb.python/py-pp-re-notag.exp
	* gdb.python/py-pp-registration.exp
	* gdb.python/py-recurse-unwind.exp
	* gdb.python/py-strfns.exp
	* gdb.python/py-symbol.exp
	* gdb.python/py-symtab.exp
	* gdb.python/py-sync-interp.exp
	* gdb.python/py-typeprint.exp
	* gdb.python/py-unwind-maint.exp
	* gdb.python/py-unwind.exp
	* gdb.python/py-value-cc.exp
	* gdb.python/py-xmethods.exp
	* gdb.reverse/amd64-tailcall-reverse.exp
	* gdb.reverse/break-precsave.exp
	* gdb.reverse/break-reverse.exp
	* gdb.reverse/consecutive-precsave.exp
	* gdb.reverse/consecutive-reverse.exp
	* gdb.reverse/finish-precsave.exp
	* gdb.reverse/finish-reverse-bkpt.exp
	* gdb.reverse/finish-reverse.exp
	* gdb.reverse/fstatat-reverse.exp
	* gdb.reverse/getresuid-reverse.exp
	* gdb.reverse/i386-precsave.exp
	* gdb.reverse/i386-reverse.exp
	* gdb.reverse/i386-sse-reverse.exp
	* gdb.reverse/i387-env-reverse.exp
	* gdb.reverse/i387-stack-reverse.exp
	* gdb.reverse/insn-reverse.exp
	* gdb.reverse/machinestate-precsave.exp
	* gdb.reverse/machinestate.exp
	* gdb.reverse/next-reverse-bkpt-over-sr.exp
	* gdb.reverse/pipe-reverse.exp
	* gdb.reverse/readv-reverse.exp
	* gdb.reverse/recvmsg-reverse.exp
	* gdb.reverse/rerun-prec.exp
	* gdb.reverse/s390-mvcle.exp
	* gdb.reverse/step-precsave.exp
	* gdb.reverse/step-reverse.exp
	* gdb.reverse/time-reverse.exp
	* gdb.reverse/until-precsave.exp
	* gdb.reverse/until-reverse.exp
	* gdb.reverse/waitpid-reverse.exp
	* gdb.reverse/watch-precsave.exp
	* gdb.reverse/watch-reverse.exp
	* gdb.rust/generics.exp
	* gdb.rust/methods.exp
	* gdb.rust/modules.exp
	* gdb.rust/simple.exp
	* gdb.server/connect-with-no-symbol-file.exp
	* gdb.server/ext-attach.exp
	* gdb.server/ext-restart.exp
	* gdb.server/ext-wrapper.exp
	* gdb.server/file-transfer.exp
	* gdb.server/server-exec-info.exp
	* gdb.server/server-kill.exp
	* gdb.server/server-mon.exp
	* gdb.server/wrapper.exp
	* gdb.stabs/exclfwd.exp
	* gdb.stabs/gdb11479.exp
	* gdb.threads/clone-new-thread-event.exp
	* gdb.threads/corethreads.exp
	* gdb.threads/current-lwp-dead.exp
	* gdb.threads/dlopen-libpthread.exp
	* gdb.threads/gcore-thread.exp
	* gdb.threads/sigstep-threads.exp
	* gdb.threads/watchpoint-fork.exp
	* gdb.trace/actions-changed.exp
	* gdb.trace/backtrace.exp
	* gdb.trace/change-loc.exp
	* gdb.trace/circ.exp
	* gdb.trace/collection.exp
	* gdb.trace/disconnected-tracing.exp
	* gdb.trace/ftrace.exp
	* gdb.trace/mi-trace-frame-collected.exp
	* gdb.trace/mi-trace-unavailable.exp
	* gdb.trace/mi-traceframe-changed.exp
	* gdb.trace/mi-tsv-changed.exp
	* gdb.trace/no-attach-trace.exp
	* gdb.trace/passc-dyn.exp
	* gdb.trace/qtro.exp
	* gdb.trace/range-stepping.exp
	* gdb.trace/read-memory.exp
	* gdb.trace/save-trace.exp
	* gdb.trace/signal.exp
	* gdb.trace/status-stop.exp
	* gdb.trace/tfile.exp
	* gdb.trace/trace-break.exp
	* gdb.trace/trace-buffer-size.exp
	* gdb.trace/trace-condition.exp
	* gdb.trace/tracefile-pseudo-reg.exp
	* gdb.trace/tstatus.exp
	* gdb.trace/unavailable.exp
	* gdb.trace/while-dyn.exp
	* gdb.trace/while-stepping.exp
2016-12-23 10:52:18 -06:00
Luis Machado 84c93cd5f1 Fixup testcases outputting own name as a test name and standardize failed compilation messages
Changes in v3:

- Adjusted some testcases where the message "failed to compile" was not unique.

Changes in v2:

- Addressed comments from reviewers.
- Fixed spurious whitespaces.
- Changed compilation failure messages that included source/binary paths to
  ones that are short and deterministic.

---

Another bit of cleanup to the testsuite. We have a number of tests that are
not honoring the rule of not outputting their own name as a test name.

I fixed up all the offenders i could find with the following regular
expression:

"(xfail|kfail|kpass|fail|pass|unsupported|untested) ([A-Za-z0-9]+|\\\$(.)*testfile(.)*)\.exp$"

gdb/testsuite/ChangeLog:
2016-12-01  Luis Machado  <lgustavo@codesourcery.com>

	Fix test names and standardize compilation error messages throughout
	the following files:

	* gdb.ada/start.exp
	* gdb.arch/alpha-step.exp
	* gdb.arch/e500-prologue.exp
	* gdb.arch/ftrace-insn-reloc.exp
	* gdb.arch/gdb1291.exp
	* gdb.arch/gdb1431.exp
	* gdb.arch/gdb1558.exp
	* gdb.arch/i386-dr3-watch.exp
	* gdb.arch/i386-sse-stack-align.exp
	* gdb.arch/ia64-breakpoint-shadow.exp
	* gdb.arch/pa-nullify.exp
	* gdb.arch/powerpc-aix-prologue.exp
	* gdb.arch/thumb-bx-pc.exp
	* gdb.base/annota1.exp
	* gdb.base/annota3.exp
	* gdb.base/arrayidx.exp
	* gdb.base/assign.exp
	* gdb.base/attach.exp
	* gdb.base/auxv.exp
	* gdb.base/bang.exp
	* gdb.base/bfp-test.exp
	* gdb.base/bigcore.exp
	* gdb.base/bitfields2.exp
	* gdb.base/break-fun-addr.exp
	* gdb.base/break-probes.exp
	* gdb.base/call-rt-st.exp
	* gdb.base/callexit.exp
	* gdb.base/catch-fork-kill.exp
	* gdb.base/charset.exp
	* gdb.base/checkpoint.exp
	* gdb.base/comprdebug.exp
	* gdb.base/constvars.exp
	* gdb.base/coredump-filter.exp
	* gdb.base/cursal.exp
	* gdb.base/cvexpr.exp
	* gdb.base/detach.exp
	* gdb.base/display.exp
	* gdb.base/dmsym.exp
	* gdb.base/dprintf-pending.exp
	* gdb.base/dso2dso.exp
	* gdb.base/dtrace-probe.exp
	* gdb.base/dump.exp
	* gdb.base/enum_cond.exp
	* gdb.base/exe-lock.exp
	* gdb.base/exec-invalid-sysroot.exp
	* gdb.base/execl-update-breakpoints.exp
	* gdb.base/exprs.exp
	* gdb.base/fileio.exp
	* gdb.base/find.exp
	* gdb.base/finish.exp
	* gdb.base/fixsection.exp
	* gdb.base/foll-vfork.exp
	* gdb.base/frame-args.exp
	* gdb.base/gcore.exp
	* gdb.base/gdb1250.exp
	* gdb.base/global-var-nested-by-dso.exp
	* gdb.base/gnu-ifunc.exp
	* gdb.base/hashline1.exp
	* gdb.base/hashline2.exp
	* gdb.base/hashline3.exp
	* gdb.base/hbreak-in-shr-unsupported.exp
	* gdb.base/huge.exp
	* gdb.base/infcall-input.exp
	* gdb.base/info-fun.exp
	* gdb.base/info-shared.exp
	* gdb.base/jit-simple.exp
	* gdb.base/jit-so.exp
	* gdb.base/jit.exp
	* gdb.base/jump.exp
	* gdb.base/label.exp
	* gdb.base/lineinc.exp
	* gdb.base/logical.exp
	* gdb.base/longjmp.exp
	* gdb.base/macscp.exp
	* gdb.base/miscexprs.exp
	* gdb.base/new-ui-echo.exp
	* gdb.base/new-ui-pending-input.exp
	* gdb.base/new-ui.exp
	* gdb.base/nodebug.exp
	* gdb.base/nofield.exp
	* gdb.base/offsets.exp
	* gdb.base/overlays.exp
	* gdb.base/pending.exp
	* gdb.base/pointers.exp
	* gdb.base/pr11022.exp
	* gdb.base/printcmds.exp
	* gdb.base/prologue.exp
	* gdb.base/ptr-typedef.exp
	* gdb.base/realname-expand.exp
	* gdb.base/relativedebug.exp
	* gdb.base/relocate.exp
	* gdb.base/remote.exp
	* gdb.base/reread.exp
	* gdb.base/return2.exp
	* gdb.base/savedregs.exp
	* gdb.base/sep.exp
	* gdb.base/sepdebug.exp
	* gdb.base/sepsymtab.exp
	* gdb.base/set-inferior-tty.exp
	* gdb.base/setshow.exp
	* gdb.base/shlib-call.exp
	* gdb.base/sigaltstack.exp
	* gdb.base/siginfo-addr.exp
	* gdb.base/signals.exp
	* gdb.base/signull.exp
	* gdb.base/sigrepeat.exp
	* gdb.base/so-impl-ld.exp
	* gdb.base/solib-display.exp
	* gdb.base/solib-overlap.exp
	* gdb.base/solib-search.exp
	* gdb.base/solib-symbol.exp
	* gdb.base/structs.exp
	* gdb.base/structs2.exp
	* gdb.base/symtab-search-order.exp
	* gdb.base/twice.exp
	* gdb.base/unload.exp
	* gdb.base/varargs.exp
	* gdb.base/watchpoint-solib.exp
	* gdb.base/watchpoint.exp
	* gdb.base/whatis.exp
	* gdb.base/wrong_frame_bt_full.exp
	* gdb.btrace/dlopen.exp
	* gdb.cell/ea-standalone.exp
	* gdb.cell/ea-test.exp
	* gdb.cp/dispcxx.exp
	* gdb.cp/gdb2384.exp
	* gdb.cp/method2.exp
	* gdb.cp/nextoverthrow.exp
	* gdb.cp/pr10728.exp
	* gdb.disasm/am33.exp
	* gdb.disasm/h8300s.exp
	* gdb.disasm/mn10300.exp
	* gdb.disasm/sh3.exp
	* gdb.dwarf2/dw2-dir-file-name.exp
	* gdb.fortran/complex.exp
	* gdb.fortran/library-module.exp
	* gdb.guile/scm-pretty-print.exp
	* gdb.guile/scm-symbol.exp
	* gdb.guile/scm-type.exp
	* gdb.guile/scm-value.exp
	* gdb.linespec/linespec.exp
	* gdb.mi/gdb701.exp
	* gdb.mi/gdb792.exp
	* gdb.mi/mi-breakpoint-changed.exp
	* gdb.mi/mi-dprintf-pending.exp
	* gdb.mi/mi-dprintf.exp
	* gdb.mi/mi-exit-code.exp
	* gdb.mi/mi-pending.exp
	* gdb.mi/mi-solib.exp
	* gdb.mi/new-ui-mi-sync.exp
	* gdb.mi/pr11022.exp
	* gdb.mi/user-selected-context-sync.exp
	* gdb.opt/solib-intra-step.exp
	* gdb.python/py-events.exp
	* gdb.python/py-finish-breakpoint.exp
	* gdb.python/py-mi.exp
	* gdb.python/py-prettyprint.exp
	* gdb.python/py-shared.exp
	* gdb.python/py-symbol.exp
	* gdb.python/py-template.exp
	* gdb.python/py-type.exp
	* gdb.python/py-value.exp
	* gdb.reverse/solib-precsave.exp
	* gdb.reverse/solib-reverse.exp
	* gdb.server/solib-list.exp
	* gdb.stabs/weird.exp
	* gdb.threads/reconnect-signal.exp
	* gdb.threads/stepi-random-signal.exp
	* gdb.trace/actions.exp
	* gdb.trace/ax.exp
	* gdb.trace/backtrace.exp
	* gdb.trace/change-loc.exp
	* gdb.trace/deltrace.exp
	* gdb.trace/ftrace-lock.exp
	* gdb.trace/ftrace.exp
	* gdb.trace/infotrace.exp
	* gdb.trace/mi-tracepoint-changed.exp
	* gdb.trace/packetlen.exp
	* gdb.trace/passcount.exp
	* gdb.trace/pending.exp
	* gdb.trace/range-stepping.exp
	* gdb.trace/report.exp
	* gdb.trace/stap-trace.exp
	* gdb.trace/tfind.exp
	* gdb.trace/trace-break.exp
	* gdb.trace/trace-condition.exp
	* gdb.trace/trace-enable-disable.exp
	* gdb.trace/trace-mt.exp
	* gdb.trace/tracecmd.exp
	* gdb.trace/tspeed.exp
	* gdb.trace/tsv.exp
	* lib/perftest.exp
2016-12-01 14:47:50 -06:00
Luis Machado bb95117e10 Fix test names starting with uppercase using multi-line gdb_test/mi_gdb_test
This fixes offender testcases that have test names starting with uppercase
when using gdb_test/mi_gdb_test in a multi-line construct.

gdb/testsuite/ChangeLog
2016-12-01  Luis Machado  <lgustavo@codesourcery.com>

	Fix test names starting with uppercase throughout the files.

	* gdb.ada/array_return.exp
	* gdb.ada/expr_delims.exp
	* gdb.ada/mi_dyn_arr.exp
	* gdb.ada/mi_interface.exp
	* gdb.ada/mi_var_array.exp
	* gdb.ada/watch_arg.exp
	* gdb.arch/alpha-step.exp
	* gdb.arch/altivec-regs.exp
	* gdb.arch/e500-regs.exp
	* gdb.arch/powerpc-d128-regs.exp
	* gdb.base/arrayidx.exp
	* gdb.base/break.exp
	* gdb.base/checkpoint.exp
	* gdb.base/debug-expr.exp
	* gdb.base/dmsym.exp
	* gdb.base/radix.exp
	* gdb.base/sepdebug.exp
	* gdb.base/testenv.exp
	* gdb.base/watch_thread_num.exp
	* gdb.base/watchpoint-cond-gone.exp
	* gdb.cell/break.exp
	* gdb.cell/ea-cache.exp
	* gdb.compile/compile.exp
	* gdb.cp/gdb2495.exp
	* gdb.gdb/selftest.exp
	* gdb.gdb/xfullpath.exp
	* gdb.go/hello.exp
	* gdb.go/integers.exp
	* gdb.objc/basicclass.exp
	* gdb.pascal/hello.exp
	* gdb.pascal/integers.exp
	* gdb.python/py-breakpoint.exp
	* gdb.python/py-cmd.exp
	* gdb.python/py-linetable.exp
	* gdb.python/py-xmethods.exp
	* gdb.python/python.exp
	* gdb.reverse/consecutive-precsave.exp
	* gdb.reverse/finish-precsave.exp
	* gdb.reverse/i386-precsave.exp
	* gdb.reverse/machinestate-precsave.exp
	* gdb.reverse/sigall-precsave.exp
	* gdb.reverse/solib-precsave.exp
	* gdb.reverse/step-precsave.exp
	* gdb.reverse/until-precsave.exp
	* gdb.reverse/watch-precsave.exp
	* gdb.threads/leader-exit.exp
	* gdb.threads/pthreads.exp
	* gdb.threads/wp-replication.exp
	* gdb.trace/actions.exp
	* gdb.trace/mi-tsv-changed.exp
	* gdb.trace/tsv.exp
2016-12-01 14:44:38 -06:00
Luis Machado cdc7edd7b1 Fix test names starting with uppercase using gdb_test on a single line.
Changes in v3:
  Fixed incorrect substitutions.

This fixes offender testcases that have test names starting with uppercase
when using gdb_test in a single line construct.

gdb/testsuite/ChangeLog
2016-12-01  Luis Machado  <lgustavo@codesourcery.com>

	Fix test names starting with uppercase throughout the files.

	* gdb.arch/i386-mpx-simple_segv.exp
	* gdb.arch/i386-mpx.exp
	* gdb.arch/i386-permbkpt.exp
	* gdb.arch/pa-nullify.exp
	* gdb.arch/powerpc-d128-regs.exp
	* gdb.arch/vsx-regs.exp
	* gdb.base/bfp-test.exp
	* gdb.base/break.exp
	* gdb.base/breakpoint-shadow.exp
	* gdb.base/callfuncs.exp
	* gdb.base/charset.exp
	* gdb.base/commands.exp
	* gdb.base/completion.exp
	* gdb.base/dfp-test.exp
	* gdb.base/echo.exp
	* gdb.base/ending-run.exp
	* gdb.base/eval.exp
	* gdb.base/expand-psymtabs.exp
	* gdb.base/float128.exp
	* gdb.base/floatn.exp
	* gdb.base/foll-exec-mode.exp
	* gdb.base/gdb1056.exp
	* gdb.base/gdb11531.exp
	* gdb.base/kill-after-signal.exp
	* gdb.base/multi-forks.exp
	* gdb.base/overlays.exp
	* gdb.base/pending.exp
	* gdb.base/sepdebug.exp
	* gdb.base/testenv.exp
	* gdb.base/valgrind-db-attach.exp
	* gdb.base/watch_thread_num.exp
	* gdb.base/watchpoint-cond-gone.exp
	* gdb.base/watchpoint.exp
	* gdb.base/watchpoints.exp
	* gdb.cp/arg-reference.exp
	* gdb.cp/baseenum.exp
	* gdb.cp/operator.exp
	* gdb.cp/shadow.exp
	* gdb.dwarf2/dw2-op-out-param.exp
	* gdb.dwarf2/dw2-reg-undefined.exp
	* gdb.go/chan.exp
	* gdb.go/hello.exp
	* gdb.go/integers.exp
	* gdb.go/methods.exp
	* gdb.go/package.exp
	* gdb.guile/scm-parameter.exp
	* gdb.guile/scm-progspace.exp
	* gdb.guile/scm-value.exp
	* gdb.mi/mi-pending.exp
	* gdb.mi/user-selected-context-sync.exp
	* gdb.multi/multi-attach.exp
	* gdb.multi/tids.exp
	* gdb.opt/clobbered-registers-O2.exp
	* gdb.pascal/floats.exp
	* gdb.pascal/integers.exp
	* gdb.python/py-block.exp
	* gdb.python/py-events.exp
	* gdb.python/py-parameter.exp
	* gdb.python/py-symbol.exp
	* gdb.python/py-symtab.exp
	* gdb.python/py-type.exp
	* gdb.python/py-value.exp
	* gdb.python/py-xmethods.exp
	* gdb.python/python.exp
	* gdb.reverse/break-precsave.exp
	* gdb.reverse/consecutive-precsave.exp
	* gdb.reverse/finish-precsave.exp
	* gdb.reverse/i386-precsave.exp
	* gdb.reverse/machinestate-precsave.exp
	* gdb.reverse/sigall-precsave.exp
	* gdb.reverse/solib-precsave.exp
	* gdb.reverse/step-precsave.exp
	* gdb.reverse/until-precsave.exp
	* gdb.reverse/watch-precsave.exp
	* gdb.server/ext-attach.exp
	* gdb.server/ext-restart.exp
	* gdb.server/ext-run.exp
	* gdb.server/ext-wrapper.exp
	* gdb.stabs/gdb11479.exp
	* gdb.stabs/weird.exp
	* gdb.threads/attach-many-short-lived-threads.exp
	* gdb.threads/kill.exp
	* gdb.threads/watchpoint-fork.exp
2016-12-01 14:41:23 -06:00
Luis Machado bc6c7af4a2 Fix test names starting with uppercase output by basic functions
The following patch is based on the previous patch i sent and handles cases of
test names that start with an uppercase letter. Test names should start with
lowercase unless it starts with the name of a technology, architecture, ISA
etc.

This first patch addresses cases of test names output explicitly via xfail,
kfail, kpass, fail, pass, unsupported, untested and also names set with the
pattern "set test" and "set testname".

gdb/testsuite/ChangeLog:
2016-12-01  Luis Machado  <lgustavo@codesourcery.com>

	Fix test names starting with uppercase throughout all the files below.

	* gdb.ada/array_return.exp
	* gdb.ada/catch_ex.exp
	* gdb.ada/info_exc.exp
	* gdb.ada/mi_catch_ex.exp
	* gdb.ada/mi_dyn_arr.exp
	* gdb.ada/mi_ex_cond.exp
	* gdb.ada/mi_exc_info.exp
	* gdb.ada/mi_interface.exp
	* gdb.ada/mi_task_arg.exp
	* gdb.ada/mi_task_info.exp
	* gdb.ada/mi_var_array.exp
	* gdb.arch/alpha-step.exp
	* gdb.arch/amd64-disp-step.exp
	* gdb.arch/arm-disp-step.exp
	* gdb.arch/disp-step-insn-reloc.exp
	* gdb.arch/e500-prologue.exp
	* gdb.arch/ftrace-insn-reloc.exp
	* gdb.arch/gdb1558.exp
	* gdb.arch/i386-bp_permanent.exp
	* gdb.arch/i386-disp-step.exp
	* gdb.arch/i386-float.exp
	* gdb.arch/i386-gnu-cfi.exp
	* gdb.arch/ia64-breakpoint-shadow.exp
	* gdb.arch/mips16-thunks.exp
	* gdb.arch/pa-nullify.exp
	* gdb.arch/powerpc-aix-prologue.exp
	* gdb.arch/powerpc-power.exp
	* gdb.arch/ppc-dfp.exp
	* gdb.arch/s390-tdbregs.exp
	* gdb.arch/spu-info.exp
	* gdb.arch/spu-ls.exp
	* gdb.arch/thumb-bx-pc.exp
	* gdb.base/advance.exp
	* gdb.base/annota-input-while-running.exp
	* gdb.base/arrayidx.exp
	* gdb.base/asmlabel.exp
	* gdb.base/async.exp
	* gdb.base/attach-wait-input.exp
	* gdb.base/auto-connect-native-target.exp
	* gdb.base/batch-preserve-term-settings.exp
	* gdb.base/bfp-test.exp
	* gdb.base/bigcore.exp
	* gdb.base/bp-permanent.exp
	* gdb.base/break-always.exp
	* gdb.base/break-fun-addr.exp
	* gdb.base/break-idempotent.exp
	* gdb.base/break-main-file-remove-fail.exp
	* gdb.base/break-probes.exp
	* gdb.base/break-unload-file.exp
	* gdb.base/break.exp
	* gdb.base/call-ar-st.exp
	* gdb.base/call-rt-st.exp
	* gdb.base/call-sc.exp
	* gdb.base/call-signal-resume.exp
	* gdb.base/call-strs.exp
	* gdb.base/callexit.exp
	* gdb.base/callfuncs.exp
	* gdb.base/catch-gdb-caused-signals.exp
	* gdb.base/catch-signal-siginfo-cond.exp
	* gdb.base/catch-syscall.exp
	* gdb.base/compare-sections.exp
	* gdb.base/cond-eval-mode.exp
	* gdb.base/condbreak-call-false.exp
	* gdb.base/consecutive-step-over.exp
	* gdb.base/cursal.exp
	* gdb.base/disabled-location.exp
	* gdb.base/disasm-end-cu.exp
	* gdb.base/display.exp
	* gdb.base/double-prompt-target-event-error.exp
	* gdb.base/dprintf-bp-same-addr.exp
	* gdb.base/dprintf-detach.exp
	* gdb.base/dprintf-next.exp
	* gdb.base/dprintf-non-stop.exp
	* gdb.base/dprintf-pending.exp
	* gdb.base/dso2dso.exp
	* gdb.base/ending-run.exp
	* gdb.base/enum_cond.exp
	* gdb.base/examine-backward.exp
	* gdb.base/exe-lock.exp
	* gdb.base/exec-invalid-sysroot.exp
	* gdb.base/execl-update-breakpoints.exp
	* gdb.base/execution-termios.exp
	* gdb.base/fileio.exp
	* gdb.base/fixsection.exp
	* gdb.base/foll-exec-mode.exp
	* gdb.base/foll-exec.exp
	* gdb.base/fork-running-state.exp
	* gdb.base/frame-args.exp
	* gdb.base/fullpath-expand.exp
	* gdb.base/func-ptr.exp
	* gdb.base/gcore-relro-pie.exp
	* gdb.base/gdb1090.exp
	* gdb.base/gdb1555.exp
	* gdb.base/global-var-nested-by-dso.exp
	* gdb.base/gnu-ifunc.exp
	* gdb.base/hbreak-in-shr-unsupported.exp
	* gdb.base/hbreak-unmapped.exp
	* gdb.base/hook-stop.exp
	* gdb.base/infcall-input.exp
	* gdb.base/info-fun.exp
	* gdb.base/info-shared.exp
	* gdb.base/interrupt-noterm.exp
	* gdb.base/jit-so.exp
	* gdb.base/jit.exp
	* gdb.base/line-symtabs.exp
	* gdb.base/list.exp
	* gdb.base/longjmp.exp
	* gdb.base/macscp.exp
	* gdb.base/max-value-size.exp
	* gdb.base/nodebug.exp
	* gdb.base/nofield.exp
	* gdb.base/overlays.exp
	* gdb.base/paginate-after-ctrl-c-running.exp
	* gdb.base/paginate-bg-execution.exp
	* gdb.base/paginate-inferior-exit.exp
	* gdb.base/pending.exp
	* gdb.base/pr11022.exp
	* gdb.base/printcmds.exp
	* gdb.base/ptr-typedef.exp
	* gdb.base/ptype.exp
	* gdb.base/randomize.exp
	* gdb.base/range-stepping.exp
	* gdb.base/realname-expand.exp
	* gdb.base/relativedebug.exp
	* gdb.base/remote.exp
	* gdb.base/savedregs.exp
	* gdb.base/sepdebug.exp
	* gdb.base/set-noassign.exp
	* gdb.base/shlib-call.exp
	* gdb.base/shreloc.exp
	* gdb.base/sigaltstack.exp
	* gdb.base/sigbpt.exp
	* gdb.base/siginfo-addr.exp
	* gdb.base/siginfo-obj.exp
	* gdb.base/siginfo-thread.exp
	* gdb.base/signest.exp
	* gdb.base/signull.exp
	* gdb.base/sigrepeat.exp
	* gdb.base/skip.exp
	* gdb.base/so-impl-ld.exp
	* gdb.base/solib-corrupted.exp
	* gdb.base/solib-disc.exp
	* gdb.base/solib-display.exp
	* gdb.base/solib-overlap.exp
	* gdb.base/solib-search.exp
	* gdb.base/solib-symbol.exp
	* gdb.base/source-execution.exp
	* gdb.base/sss-bp-on-user-bp-2.exp
	* gdb.base/sss-bp-on-user-bp.exp
	* gdb.base/stack-checking.exp
	* gdb.base/stale-infcall.exp
	* gdb.base/step-break.exp
	* gdb.base/step-line.exp
	* gdb.base/step-over-exit.exp
	* gdb.base/step-test.exp
	* gdb.base/structs.exp
	* gdb.base/sym-file.exp
	* gdb.base/symtab-search-order.exp
	* gdb.base/term.exp
	* gdb.base/type-opaque.exp
	* gdb.base/unload.exp
	* gdb.base/until-nodebug.exp
	* gdb.base/until.exp
	* gdb.base/unwindonsignal.exp
	* gdb.base/watch-cond.exp
	* gdb.base/watch-non-mem.exp
	* gdb.base/watch_thread_num.exp
	* gdb.base/watchpoint-reuse-slot.exp
	* gdb.base/watchpoint-solib.exp
	* gdb.base/watchpoint.exp
	* gdb.btrace/dlopen.exp
	* gdb.cell/arch.exp
	* gdb.cell/break.exp
	* gdb.cell/bt.exp
	* gdb.cell/core.exp
	* gdb.cell/data.exp
	* gdb.cell/dwarfaddr.exp
	* gdb.cell/ea-cache.exp
	* gdb.cell/ea-standalone.exp
	* gdb.cell/ea-test.exp
	* gdb.cell/f-regs.exp
	* gdb.cell/fork.exp
	* gdb.cell/gcore.exp
	* gdb.cell/mem-access.exp
	* gdb.cell/ptype.exp
	* gdb.cell/registers.exp
	* gdb.cell/sizeof.exp
	* gdb.cell/solib-symbol.exp
	* gdb.cell/solib.exp
	* gdb.compile/compile-tls.exp
	* gdb.cp/exception.exp
	* gdb.cp/gdb2495.exp
	* gdb.cp/local.exp
	* gdb.cp/mb-inline.exp
	* gdb.cp/mb-templates.exp
	* gdb.cp/pr10687.exp
	* gdb.cp/pr9167.exp
	* gdb.cp/scope-err.exp
	* gdb.cp/templates.exp
	* gdb.cp/virtfunc.exp
	* gdb.dwarf2/dw2-dir-file-name.exp
	* gdb.dwarf2/dw2-single-line-discriminators.exp
	* gdb.fortran/complex.exp
	* gdb.fortran/library-module.exp
	* gdb.guile/guile.exp
	* gdb.guile/scm-cmd.exp
	* gdb.guile/scm-frame-inline.exp
	* gdb.guile/scm-objfile.exp
	* gdb.guile/scm-pretty-print.exp
	* gdb.guile/scm-symbol.exp
	* gdb.guile/scm-type.exp
	* gdb.guile/scm-value.exp
	* gdb.linespec/keywords.exp
	* gdb.linespec/ls-errs.exp
	* gdb.linespec/macro-relative.exp
	* gdb.linespec/thread.exp
	* gdb.mi/mi-breakpoint-changed.exp
	* gdb.mi/mi-dprintf-pending.exp
	* gdb.mi/mi-fullname-deleted.exp
	* gdb.mi/mi-logging.exp
	* gdb.mi/mi-pending.exp
	* gdb.mi/mi-solib.exp
	* gdb.mi/new-ui-mi-sync.exp
	* gdb.mi/user-selected-context-sync.exp
	* gdb.multi/dummy-frame-restore.exp
	* gdb.multi/multi-arch-exec.exp
	* gdb.multi/remove-inferiors.exp
	* gdb.multi/watchpoint-multi-exit.exp
	* gdb.opt/solib-intra-step.exp
	* gdb.perf/backtrace.exp
	* gdb.perf/single-step.exp
	* gdb.perf/skip-command.exp
	* gdb.perf/skip-prologue.exp
	* gdb.perf/solib.exp
	* gdb.python/lib-types.exp
	* gdb.python/py-as-string.exp
	* gdb.python/py-bad-printers.exp
	* gdb.python/py-block.exp
	* gdb.python/py-breakpoint.exp
	* gdb.python/py-cmd.exp
	* gdb.python/py-events.exp
	* gdb.python/py-evthreads.exp
	* gdb.python/py-finish-breakpoint.exp
	* gdb.python/py-finish-breakpoint2.exp
	* gdb.python/py-frame-inline.exp
	* gdb.python/py-frame.exp
	* gdb.python/py-inferior.exp
	* gdb.python/py-infthread.exp
	* gdb.python/py-mi.exp
	* gdb.python/py-objfile.exp
	* gdb.python/py-pp-maint.exp
	* gdb.python/py-pp-registration.exp
	* gdb.python/py-prettyprint.exp
	* gdb.python/py-recurse-unwind.exp
	* gdb.python/py-shared.exp
	* gdb.python/py-symbol.exp
	* gdb.python/py-symtab.exp
	* gdb.python/py-template.exp
	* gdb.python/py-type.exp
	* gdb.python/py-unwind-maint.exp
	* gdb.python/py-unwind.exp
	* gdb.python/py-value.exp
	* gdb.python/python.exp
	* gdb.reverse/finish-reverse-bkpt.exp
	* gdb.reverse/insn-reverse.exp
	* gdb.reverse/next-reverse-bkpt-over-sr.exp
	* gdb.reverse/solib-precsave.exp
	* gdb.reverse/solib-reverse.exp
	* gdb.stabs/gdb11479.exp
	* gdb.stabs/weird.exp
	* gdb.threads/fork-child-threads.exp
	* gdb.threads/fork-plus-threads.exp
	* gdb.threads/fork-thread-pending.exp
	* gdb.threads/forking-threads-plus-breakpoint.exp
	* gdb.threads/hand-call-in-threads.exp
	* gdb.threads/interrupted-hand-call.exp
	* gdb.threads/linux-dp.exp
	* gdb.threads/local-watch-wrong-thread.exp
	* gdb.threads/next-while-other-thread-longjmps.exp
	* gdb.threads/non-ldr-exit.exp
	* gdb.threads/pending-step.exp
	* gdb.threads/print-threads.exp
	* gdb.threads/process-dies-while-detaching.exp
	* gdb.threads/process-dies-while-handling-bp.exp
	* gdb.threads/pthreads.exp
	* gdb.threads/queue-signal.exp
	* gdb.threads/reconnect-signal.exp
	* gdb.threads/signal-command-handle-nopass.exp
	* gdb.threads/signal-command-multiple-signals-pending.exp
	* gdb.threads/signal-delivered-right-thread.exp
	* gdb.threads/signal-sigtrap.exp
	* gdb.threads/sigthread.exp
	* gdb.threads/staticthreads.exp
	* gdb.threads/stepi-random-signal.exp
	* gdb.threads/thread-unwindonsignal.exp
	* gdb.threads/thread_check.exp
	* gdb.threads/thread_events.exp
	* gdb.threads/tid-reuse.exp
	* gdb.threads/tls-nodebug.exp
	* gdb.threads/tls-shared.exp
	* gdb.threads/tls-so_extern.exp
	* gdb.threads/tls.exp
	* gdb.threads/wp-replication.exp
	* gdb.trace/actions-changed.exp
	* gdb.trace/actions.exp
	* gdb.trace/backtrace.exp
	* gdb.trace/change-loc.exp
	* gdb.trace/collection.exp
	* gdb.trace/deltrace.exp
	* gdb.trace/disconnected-tracing.exp
	* gdb.trace/entry-values.exp
	* gdb.trace/ftrace-lock.exp
	* gdb.trace/ftrace.exp
	* gdb.trace/infotrace.exp
	* gdb.trace/mi-trace-frame-collected.exp
	* gdb.trace/mi-trace-unavailable.exp
	* gdb.trace/mi-traceframe-changed.exp
	* gdb.trace/mi-tracepoint-changed.exp
	* gdb.trace/mi-tsv-changed.exp
	* gdb.trace/no-attach-trace.exp
	* gdb.trace/packetlen.exp
	* gdb.trace/passc-dyn.exp
	* gdb.trace/passcount.exp
	* gdb.trace/pending.exp
	* gdb.trace/pr16508.exp
	* gdb.trace/qtro.exp
	* gdb.trace/range-stepping.exp
	* gdb.trace/read-memory.exp
	* gdb.trace/report.exp
	* gdb.trace/save-trace.exp
	* gdb.trace/signal.exp
	* gdb.trace/stap-trace.exp
	* gdb.trace/status-stop.exp
	* gdb.trace/strace.exp
	* gdb.trace/tfile.exp
	* gdb.trace/tfind.exp
	* gdb.trace/trace-break.exp
	* gdb.trace/trace-condition.exp
	* gdb.trace/trace-enable-disable.exp
	* gdb.trace/trace-mt.exp
	* gdb.trace/tracecmd.exp
	* gdb.trace/tracefile-pseudo-reg.exp
	* gdb.trace/tspeed.exp
	* gdb.trace/tstatus.exp
	* gdb.trace/tsv.exp
	* gdb.trace/unavailable.exp
	* gdb.trace/while-dyn.exp
	* gdb.trace/while-stepping.exp
	* lib/gdb-guile.exp
	* lib/gdb.exp
	* lib/mi-support.exp
	* lib/pascal.exp
	* lib/perftest.exp
	* lib/prelink-support.exp
	* lib/selftest-support.exp
2016-12-01 14:40:05 -06:00
Yao Qi 41bfcd638a Swap "single-process" and "multi-process" in process-dies-while-detaching.exp
"single-process" and "multi-process" are used in the test message of
process-dies-while-detaching.exp, but they are misplaced due to

    set mode [expr {$multi_process ? "single-process" : "multi-process"}]

This patch is to swap them.

gdb/testsuite:

2016-08-01  Yao Qi  <yao.qi@linaro.org>

	* gdb.threads/process-dies-while-detaching.exp (do_test): Set
	variable mode to "multi-process" if $multi_process is 1, otherwise
	set it to "single-process".
2016-08-01 10:00:31 +01:00
Tom Tromey 0b31a4bcec PR python/20190 - compute TLS symbol without a frame
PR python/20190 arose from an exception I noticed when trying to use
the Python unwinder for Spider Monkey in Firefox.

The problem is that the unwinder wants to examine the value of a
thread-local variable.  However, sympy_value rejects this because
symbol_read_needs_frame returns true for a TLS variable.

This problem arose once before, though in a different context:

https://sourceware.org/bugzilla/show_bug.cgi?id=11803

At the time Pedro and Daniel pointed out a simpler way to fix that bug
(see links in 20190 if you are interested); but for this new bug I
couldn't think of a similar fix and ended up implementing Daniel's
other suggestion:

https://sourceware.org/ml/gdb-patches/2010-07/msg00393.html

That is, this patch makes it possible to detect whether a symbol needs
a specific frame, or whether it just needs the inferior to have
registers.

Built and regtested on x86-64 Fedora 24.

2016-07-26  Tom Tromey  <tom@tromey.com>

	* symtab.c (register_symbol_computed_impl): Update.
	PR python/20190:
	* value.h (symbol_read_needs): Declare.
	(symbol_read_needs_frame): Add comment.
	* symtab.h (struct symbol_computed_ops) <read_variable>: Update
	comment.
	<get_symbol_read_needs>: Rename.  Change return type.
	* findvar.c (symbol_read_needs): New function.
	(symbol_read_needs_frame): Rewrite.
	(default_read_var_value): Use symbol_read_needs.
	* dwarf2loc.c (struct symbol_needs_baton): Rename.
	<needs>: Renamed from needs_frame.  Changed type.
	(needs_frame_read_addr_from_reg, symbol_needs_get_reg_value)
	(symbol_needs_read_mem, symbol_needs_frame_base)
	(symbol_needs_frame_cfa, symbol_needs_tls_address)
	(symbol_needs_dwarf_call): Rename.
	(needs_dwarf_reg_entry_value): Update.
	(symbol_needs_ctx_funcs, dwarf2_loc_desc_get_symbol_read_needs):
	Rename and update.
	(locexpr_get_symbol_read_needs, loclist_symbol_needs): Likewise.
	(dwarf2_locexpr_funcs, dwarf2_loclist_funcs): Update.
	* defs.h (enum symbol_needs_kind): New.

2016-07-26  Tom Tromey  <tom@tromey.com>

	PR python/20190:
	* gdb.threads/tls.exp (check_thread_local): Add python symbol
	test.
2016-07-26 13:43:27 -06:00
Pedro Alves ced2dffbf1 Fix failure to detach if process exits while detaching on Linux
This commit fixes detaching on Linux when some thread exits the whole
thread group (process) just while we're detaching.

On Linux, a ptracer must detach from each LWP individually, with
PTRACE_DETACH.  Since PTRACE_DETACH sets the thread running free, if
one of the already-detached threads causes the whole thread group to
exit (e.g., simply calls exit), the kernel force-kills the other
threads in the group, making them zombie, just as we're still
detaching them.  Since PTRACE_DETACH against a zombie thread fails
with ESRCH, and gdb/gdbserver are not expecting this, the detach fails
with an error like: "Can't detach process: No such process.".

This patch detects this detach failure as normal, and instead of
erroring out, reaps the now-dead thread.

New test included, that exercises several different scenarios that
cause GDB/GDBserver to error out when it should not.

Tested on x86-64 GNU/Linux with {unix, native-gdbserver,
native-extended-gdbserver}

Note: without the previous fix, the "single-process + continue"
variant of the new test would fail with:

 (gdb) PASS: gdb.threads/process-dies-while-detaching.exp: single-process: continue: watchpoint: switch to parent
 continue
 Continuing.
 Warning:
 Could not insert hardware watchpoint 3.
 Could not insert hardware breakpoints:
 You may have requested too many hardware breakpoints/watchpoints.

 Command aborted.
 (gdb) FAIL: gdb.threads/process-dies-while-detaching.exp: single-process: continue: watchpoint: continue

gdb/gdbserver/ChangeLog:
2016-07-01  Pedro Alves  <palves@redhat.com>
	    Antoine Tremblay  <antoine.tremblay@ericsson.com>

	* linux-low.c: Change interface to take the target lwp_info
	pointer directly and return void.  Handle detaching from a zombie
	thread.
	(linux_detach_lwp_callback): New function.
	(linux_detach): Detach from the leader thread after detaching from
	the clone threads.

gdb/ChangeLog:
2016-07-01  Pedro Alves  <palves@redhat.com>
	    Antoine Tremblay  <antoine.tremblay@ericsson.com>

	* inf-ptrace.c (inf_ptrace_detach_success): New function, factored
	out from ...
	(inf_ptrace_detach): ... here.
	* inf-ptrace.h (inf_ptrace_detach_success): New declaration.
	* linux-nat.c (get_pending_status): Rename to ...
	(get_detach_signal): ... this, and return a host signal instead of
	filling in a wait status.
	(detach_one_lwp): New function, factored out from detach_callback
	and adjusted to handle detaching from a zombie thread.
	(detach_callback): Skip the leader thread.
	(linux_nat_detach): No longer defer to inf_ptrace_detach to detach
	the leader thread, nor build a signal string to pass down.
	Instead, use target_announce_detach, detach_one_lwp and
	inf_ptrace_detach_success.

gdb/testsuite/ChangeLog:
2016-07-01  Pedro Alves  <palves@redhat.com>
	    Antoine Tremblay  <antoine.tremblay@ericsson.com>

	* gdb.threads/process-dies-while-detaching.c: New file.
	* gdb.threads/process-dies-while-detaching.exp: New file.
2016-07-01 11:27:06 +01:00
Andrew Burgess cad8e26d2a gdb: Use UNSUPPORTED not XFAIL for unsupported target features
If a target does not support making function calls from GDB then in a
number of test files, we currently report an XFAIL and skip some, or all
of the tests.  This commit changes the XFAIL to an UNSUPPORTED as this
seems more appropriate in these cases.

Some of the tests used bug ID 2416 to be reported in the XFAIL.  In the
current GDB bugzilla bug 2416 has nothing to do with calling target
functions from GDB.

gdb/testsuite/ChangeLog:

	* gdb.base/call-ar-st.exp: Report unsupported rather than xfail
	for unsupported target features.
	* gdb.base/call-rt-st.exp: Likewise.
	* gdb.base/call-sc.exp: Likewise.
	* gdb.base/call-signal-resume.exp: Likewise.
	* gdb.base/call-strs.exp: Likewise.
	* gdb.base/callexit.exp: Likewise.
	* gdb.base/callfuncs.exp: Likewise.
	* gdb.base/nodebug.exp: Likewise.
	* gdb.base/printcmds.exp: Likewise.
	* gdb.base/ptype.exp: Likewise.
	* gdb.base/structs.exp: Likewise.
	* gdb.base/unwindonsignal.exp: Likewise.
	* gdb.cp/gdb2495.exp: Likewise.
	* gdb.cp/templates.exp: Likewise.
	* gdb.cp/virtfunc.exp: Likewise.
	* gdb.threads/hand-call-in-threads.exp: Likewise.
	* gdb.threads/interrupted-hand-call.exp: Likewise.
	* gdb.threads/thread-unwindonsignal.exp: Likewise.
2016-06-13 15:26:26 +01:00
Pedro Alves 744608cc85 Skip attach-many-short-lived-threads.exp on known-broken DejaGnu versions
If the testsuite is run with a DejaGnu version that predates the fix
from last year:

  [PATCH] DejaGnu kills the wrong process due to PID-reuse races
  http://lists.gnu.org/archive/html/dejagnu/2015-07/msg00005.html

... gdb.threads/attach-many-short-lived-threads.exp fails randomly,
often.  Other tests randomly fail due to that issue too, but this one
is _much_ more exposed.

DejaGnu 1.6 was released meanwhile, which includes that DejaGnu fix,
and also some distros backported the fix too.

So skip the test when run with older/broken DejaGnus.

gdb/testsuite/ChangeLog:
2016-05-27  Pedro Alves  <palves@redhat.com>

	* gdb.threads/attach-many-short-lived-threads.exp (bad_dejagnu):
	New procedure.
	(top level): Call it, and bail out of DejaGnu is known to be bad.
2016-05-27 16:18:28 +01:00
Pedro Alves 026a917475 Fix PR gdb/19828: gdb -p <process from a container>: internal error
When GDB attaches to a process, it looks at the /proc/PID/task/ dir
for all clone threads of that process, and attaches to each of them.

Usually, if there is more than one clone thread, it means the program
is multi threaded and linked with pthreads.  Thus when GDB soon after
attaching finds and loads a libthread_db matching the process, it'll
add a thread to the thread list for each of the initially found
lower-level LWPs.

If, however, GDB fails to find/load a matching libthread_db, nothing
is adding the LWPs to the thread list.  And because of that, "detach"
hits an internal error:

  (gdb) PASS: gdb.threads/clone-attach-detach.exp: fg attach 1: attach
  info threads
    Id   Target Id         Frame
  * 1    LWP 6891 "clone-attach-de" 0x00007f87e5fd0790 in __nanosleep_nocancel () at ../sysdeps/unix/syscall-template.S:84
  (gdb) FAIL: gdb.threads/clone-attach-detach.exp: fg attach 1: info threads shows two LWPs
  detach
  .../src/gdb/thread.c:1010: internal-error: is_executing: Assertion `tp' failed.
  A problem internal to GDB has been detected,
  further debugging may prove unreliable.
  Quit this debugging session? (y or n)
  FAIL: gdb.threads/clone-attach-detach.exp: fg attach 1: detach (GDB internal error)

From here:

  ...
  #8  0x00000000007ba7cc in internal_error (file=0x98ea68 ".../src/gdb/thread.c", line=1010, fmt=0x98ea30 "%s: Assertion `%s' failed.")
      at .../src/gdb/common/errors.c:55
  #9  0x000000000064bb83 in is_executing (ptid=...) at .../src/gdb/thread.c:1010
  #10 0x00000000004c23bb in get_pending_status (lp=0x12c5cc0, status=0x7fffffffdc0c) at .../src/gdb/linux-nat.c:1235
  #11 0x00000000004c2738 in detach_callback (lp=0x12c5cc0, data=0x0) at .../src/gdb/linux-nat.c:1317
  #12 0x00000000004c1a2a in iterate_over_lwps (filter=..., callback=0x4c2599 <detach_callback>, data=0x0) at .../src/gdb/linux-nat.c:899
  #13 0x00000000004c295c in linux_nat_detach (ops=0xe7bd30, args=0x0, from_tty=1) at .../src/gdb/linux-nat.c:1358
  #14 0x000000000068284d in delegate_detach (self=0xe7bd30, arg1=0x0, arg2=1) at .../src/gdb/target-delegates.c:34
  #15 0x0000000000694141 in target_detach (args=0x0, from_tty=1) at .../src/gdb/target.c:2241
  #16 0x0000000000630582 in detach_command (args=0x0, from_tty=1) at .../src/gdb/infcmd.c:2975
  ...

Tested on x86-64 Fedora 23.  Also confirmed the test passes against
gdbserver with "maint set target-non-stop".

gdb/ChangeLog:
2016-05-24  Pedro Alves  <palves@redhat.com>

	PR gdb/19828
	* linux-nat.c (attach_proc_task_lwp_callback): Mark the lwp
	resumed, and add the thread to GDB's thread list.

testsuite/ChangeLog:
2016-05-24  Pedro Alves  <palves@redhat.com>

	PR gdb/19828
	* gdb.threads/clone-attach-detach.c: New file.
	* gdb.threads/clone-attach-detach.exp: New file.
2016-05-24 14:51:32 +01:00
Simon Marchi d9019901f8 Rename gdb_load_shlibs to gdb_load_shlib
Rename gdb_load_shlibs to gdb_load_shlib to reflect that it can only
load a single shlib at the time.

gdb/testsuite/ChangeLog:

	* lib/gdb.exp (gdb_load_shlibs): Rename to...
	(gdb_load_shlib): ... this.
	* gdb.arch/ftrace-insn-reloc.exp: Adjust gdb_load_shlibs ->
	gdb_load_shlib.
	* gdb.base/catch-load.exp (one_catch_load_test): Likewise.
	* gdb.base/ctxobj.exp: Likewise.
	* gdb.base/dprintf-pending.exp: Likewise.
	* gdb.base/dso2dso.exp: Likewise.
	* gdb.base/fixsection.exp: Likewise.
	* gdb.base/gcore-relro.exp: Likewise.
	* gdb.base/gdb1555.exp: Likewise.
	* gdb.base/global-var-nested-by-dso.exp: Likewise.
	* gdb.base/gnu-ifunc.exp: Likewise.
	* gdb.base/hbreak-in-shr-unsupported.exp: Likewise.
	* gdb.base/jit-so.exp (one_jit_test): Likewise.
	* gdb.base/pending.exp: Likewise.
	* gdb.base/print-file-var.exp: Likewise.
	* gdb.base/print-symbol-loading.exp: Likewise.
	* gdb.base/shlib-call.exp: Likewise.
	* gdb.base/shreloc.exp: Likewise.
	* gdb.base/so-impl-ld.exp: Likewise.
	* gdb.base/solib-disc.exp: Likewise.
	* gdb.base/solib-nodir.exp: Likewise.
	* gdb.base/solib-overlap.exp: Likewise.
	* gdb.base/solib-symbol.exp: Likewise.
	* gdb.base/solib-weak.exp (do_test): Likewise.
	* gdb.base/sym-file.exp: Likewise.
	* gdb.base/symtab-search-order.exp: Likewise.
	* gdb.base/type-opaque.exp: Likewise.
	* gdb.base/unload.exp: Likewise.
	* gdb.base/watchpoint-solib.exp: Likewise.
	* gdb.compile/compile.exp: Likewise.
	* gdb.cp/gdb2384.exp: Likewise.
	* gdb.cp/infcall-dlopen.exp: Likewise.
	* gdb.cp/re-set-overloaded.exp: Likewise.
	* gdb.fortran/library-module.exp: Likewise.
	* gdb.opt/solib-intra-step.exp: Likewise.
	* gdb.python/py-finish-breakpoint.exp: Likewise.
	* gdb.python/py-shared.exp: Likewise.
	* gdb.reverse/solib-precsave.exp: Likewise.
	* gdb.reverse/solib-reverse.exp: Likewise.
	* gdb.server/solib-list.exp: Likewise.
	* gdb.threads/dlopen-libpthread.exp: Likewise.
	* gdb.threads/tls-shared.exp: Likewise.
	* gdb.threads/tls-so_extern.exp: Likewise.
	* gdb.trace/change-loc.exp: Likewise.
	* gdb.trace/ftrace-lock.exp: Likewise.
	* gdb.trace/ftrace.exp: Likewise.
	* gdb.trace/mi-tracepoint-changed.exp (test_reconnect): Likewise.
	* gdb.trace/pending.exp: Likewise.
	* gdb.trace/range-stepping.exp: Likewise.
	* gdb.trace/strace.exp (strace_remove_socket): Likewise.
	(strace_info_marker): Likewise.
	(strace_probe_marker): Likewise.
	(strace_trace_on_same_addr): Likewise.
	(strace_trace_on_diff_addr): Likewise.
	* gdb.trace/trace-break.exp: Likewise.
	* gdb.trace/trace-condition.exp: Likewise.
	* gdb.trace/trace-mt.exp: Likewise.
2016-04-27 18:09:14 -04:00
Simon Marchi c2f901dfb6 Fix gdb.threads/dlopen-libpthread.exp crash
Following, commit

  6e774b13c3 Make ftrace tests work with remote targets

the test gdb.threads/dlopen-libpthread.exp started to fail with:

  ERROR: error copying "/home/emaisin/build/binutils-gdb/gdb/testsuite/gdb.threads/dlopen-libpthread.so": no such file or directory

This is because the library path is not computed using
standard_output_file, so we try to gdb_load_shlibs an unexisting file.

gdb/testsuite/ChangeLog:

	* gdb.threads/dlopen-libpthread.exp: Set binfile_lib using
	standard_output_file.  Remove unused binfile variable.
2016-04-06 16:49:38 -04:00
Don Breazeal 7868401b7b PR remote/19496, interrupted syscall in forking-threads-plus-bkpt
This patch addresses "fork:Interrupted system call" (or wait:) failures
in gdb.threads/forking-threads-plus-breakpoint.exp.

The test program spawns ten threads, each of which do ten fork/waitpid
sequences.  The cause of the problem was that when one of the fork
children exited before the corresponding fork parent could initiate its
waitpid for that child, a SIGCHLD and/or SIGSTOP was delivered and
interrupted a fork or waitpid in another thread.

The fix was to wrap the system calls in a loop to retry the call if
it was interrupted, like:

do
  {
    pid = fork ();
  }
while (pid == -1 && errno == EINTR);

Since this is a Linux-only test I figure it is OK to use errno and EINTR.
I tried a number of alternative fixes using SIG_IGN, SA_RESTART,
pthread_sigblock, and bsd_signal, but none of these worked as well.

Tested on Nios II Linux target with x86 Linux host.

gdb/testsuite/ChangeLog:
2016-03-16  Don Breazeal  <donb@codesourcery.com>

	* gdb.threads/forking-threads-plus-breakpoint.c (thread_forks):
	Retry fork and waitpid on interrupted system call errors.
	* gdb.threads/forking-threads-plus-breakpoint.exp: (do_test):
	Use with_timeout_factor to increase timeout to 90.
2016-03-16 15:13:44 -07:00
Pedro Alves 00dbd492e4 More "Program" -> "Thread NN received signal" testsuite adjustment
These tests should have been adjusted by f303dbd60d (Fix PR
threads/19422 - show which thread caused stop), but clearly I had
missed grepping for potential-fail cases.

gdb/testsuite/ChangeLog
2016-03-09  Pedro Alves  <palves@redhat.com>

	* gdb.threads/attach-into-signal.exp: Adjust to "Program received
	signal" -> "Thread NN received signal" output change.
	* gdb.threads/ia64-sigill.exp: Likewise.
	* gdb.threads/linux-dp.exp: Likewise.
	* gdb.threads/manythreads.exp: Likewise.
	* gdb.threads/pending-step.exp: Likewise.
	* gdb.threads/print-threads.exp: Likewise.
	* gdb.threads/sigstep-threads.exp: Likewise.
	* gdb.threads/staticthreads.exp: Likewise.
	* gdb.threads/tls.exp: Likewise.
2016-03-09 20:24:14 +00:00
Pedro Alves 1e903e3203 Fix gdb.threads/watchpoint-fork*.c compilation
This testcase currently fails to compile on Fedora 23:

 .../src/gdb/testsuite/gdb.threads/watchpoint-fork-mt.c: In function 'start':
 .../src/gdb/testsuite/gdb.threads/watchpoint-fork-mt.c:70:11: warning: implicit declaration of function 'pthread_yield' [-Wimplicit-function-declaration]
	i = pthread_yield ();
	    ^
 .../src/gdb/testsuite/gdb.threads/watchpoint-fork-child.c: In function 'forkoff':
 .../src/gdb/testsuite/gdb.threads/watchpoint-fork-child.c:114:8: warning: implicit declaration of function 'pthread_yield' [-Wimplicit-function-declaratio
 n]
     i = pthread_yield ();
	 ^
 /tmp/ccUkNIsI.o: In function `start':
 .../src/gdb/testsuite/gdb.threads/watchpoint-fork-mt.c:70: undefined reference to `pthread_yield'
 (...)
 collect2: error: ld returned 1 exit status

 UNSUPPORTED: gdb.threads/watchpoint-fork.exp: child: multithreaded: Couldn't compile watchpoint-fork-child.c: unrecognized error
 UNTESTED: gdb.threads/watchpoint-fork.exp: child: multithreaded: watchpoint-fork.exp
 testcase .../src/gdb/testsuite/gdb.threads/watchpoint-fork.exp completed i

The glibc manual says, on _GNU_SOURCE:

 "You should define these macros by using ‘#define’ preprocessor
 directives at the top of your source code files. These directives must
 come before any #include of a system header file."

I instead put it in the header all the .c files of the testcase must
include anyway.

gdb/testsuite/ChangeLog:
2016-03-01  Pedro Alves  <palves@redhat.com>

	* gdb.threads/watchpoint-fork-child.c: Include "watchpoint-fork.h"
	before anything else.
	* gdb.threads/watchpoint-fork-mt.c: Likewise.  Don't define
	_GNU_SOURCE here.
	* gdb.threads/watchpoint-fork-st.c: Include "watchpoint-fork.h"
	before anything else.
	* gdb.threads/watchpoint-fork.h: Define _GNU_SOURCE.
2016-03-01 17:25:56 +00:00
Yao Qi 40fb20d037 Set breakpoint condition-evaluation in forking-threads-plus-breakpoint.exp
Proc do_test in forking-threads-plus-breakpoint.exp has an argument
cond_bp_target, but the test doesn't use it to set
"breakpoint condition-evaluation", which is an oversight in the test.

This patch fixes it by setting "breakpoint condition-evaluation" per
$cond_bp_target.

gdb/testsuite:

2016-02-18  Yao Qi  <yao.qi@linaro.org>

	* gdb.threads/forking-threads-plus-breakpoint.exp (do_test):
	Set "set breakpoint condition-evaluation" per $cond_bp_target.
2016-02-18 12:04:32 +00:00
Don Breazeal 4041ed7780 PR remote/19496, internal err forking-threads-plus-bkpt
This patch fixes an internal error that occurs in
gdb.threads/forking-threads-plus-breakpoint.exp:

/blah/binutils-gdb/gdb/target.c:2723: internal-error: Can't determine the
current address space of thread Thread 3170.3170

In default_thread_address_space, find_inferior_ptid couldn't find 3170.3170
because it had been overwritten in inferior_appeared, called as follows:

inferior_appeared
  remote_add_inferior
    remote_notice_new_inferior
      remote_update_thread_list

The cause of the problem was the following sequence of events:

* GDB knows only about the main thread

* the first fork event is reported to GDB, saved as pending_event

* qXfer:threads:read gets the threads from the remote.
  remove_new_fork_children id's the fork child from the pending event
  and removes it from the list reported to GDB.  All the rest of the
  threads, including the fork parent, are added to the GDB thread list.

* GDB stops all the threads.  All the stop events are pushed onto the
  stop reply queue behind the pending fork event.  The fork waitstatus
  is saved in the fork parent thread's pending status field
  thread_info.suspend.

* remote_wait_ns calls queued_stop_reply and process_stop_reply to
  remove the fork event from the front of the stop reply queue and save
  event information in the thread_info structure for the fork parent
  thread.  Unfortunately, none of the information saved in this way is
  the fork-specific information.

* A subsequent qXfer:threads:read packet gets the thread list including
  the fork parent and fork child.  remove_new_fork_children checks the
  thread list to see if there is a fork parent, doesn't find one, checks
  the stop reply queue for a pending fork event, doesn't find one, and
  allows the fork child thread to be reported to GDB before the fork
  event has been handled.  remote_update_thread_list calls
  remote_notice_new_thread and overwrites the current (main) thread in
  inferior_appeared.

So the fork event has been reported out of target_wait but it was left
pending on the infrun side (infrun.c:save_waitstatus).  IOW, the fork
event hasn't been processed by handle_inferior_event yet, so it hasn't
made it to tp->pending_follow yet.

The fix is to check thread_info.suspend along with the
thread_info.pending_follow in remote.c:remove_new_fork_children, to
prevent premature reporting of the fork child thread creation.

gdb/ChangeLog:

	PR remote/19496
	* remote.c (remove_new_fork_children): Check for pending
	fork status in thread_info.suspend.

gdb/testsuite/ChangeLog:

	PR remote/19496
	* gdb.threads/forking-threads-plus-breakpoint.exp (do_test):
	Remove kfail for PR remote/19496.
2016-02-16 08:56:06 -08:00
Simon Marchi 2151ccc56c Always organize test artifacts in a directory hierarchy
When running tests in parallel, each test puts its generated files in a
different directory, under "outputs".  I think it would be nice if it
was always the case, as it would isolate the test cases a bit more.  An
artifact created by a test wouldn't get overwritten by another test.

Also, it makes it easier to clean up.  A lot of executables are left all
over the place because their names do not appear in gdb.*/Makefile.  If
everything is in "outputs", then we just have to delete that directory
(which we already do).

At the same time it makes the gdb.foo directories and their Makefiles
useless in the build directory, since they are pretty much only used for
cleaning.

What do you think?

gdb/testsuite/ChangeLog:

	* Makefile.in (ALL_SUBDIRS): Remove.
	(clean mostlyclean): Do not recurse in ALL_SUBDIRS.
	(distclean maintainer-clean realclean): Likewise.
	* configure.ac (AC_OUTPUT): Remove gdb.*/Makefile.
	* configure: Regenerate.
	* gdb.ada/Makefile.in: Delete.
	* gdb.arch/Makefile.in: Likewise.
	* gdb.asm/Makefile.in: Likewise.
	* gdb.base/Makefile.in: Likewise.
	* gdb.btrace/Makefile.in: Likewise.
	* gdb.cell/Makefile.in: Likewise.
	* gdb.compile/Makefile.in: Likewise.
	* gdb.cp/Makefile.in: Likewise.
	* gdb.disasm/Makefile.in: Likewise.
	* gdb.dlang/Makefile.in: Likewise.
	* gdb.dwarf2/Makefile.in: Likewise.
	* gdb.fortran/Makefile.in: Likewise.
	* gdb.gdb/Makefile.in: Likewise.
	* gdb.go/Makefile.in: Likewise.
	* gdb.guile/Makefile.in: Likewise.
	* gdb.java/Makefile.in: Likewise.
	* gdb.linespec/Makefile.in: Likewise.
	* gdb.mi/Makefile.in: Likewise.
	* gdb.modula2/Makefile.in: Likewise.
	* gdb.multi/Makefile.in: Likewise.
	* gdb.objc/Makefile.in: Likewise.
	* gdb.opencl/Makefile.in: Likewise.
	* gdb.opt/Makefile.in: Likewise.
	* gdb.pascal/Makefile.in: Likewise.
	* gdb.perf/Makefile.in: Likewise.
	* gdb.python/Makefile.in: Likewise.
	* gdb.reverse/Makefile.in: Likewise.
	* gdb.server/Makefile.in: Likewise.
	* gdb.stabs/Makefile.in: Likewise.
	* gdb.threads/Makefile.in: Likewise.
	* gdb.trace/Makefile.in: Likewise.
	* gdb.xml/Makefile.in: Likewise.
	* lib/gdb.exp (make_gdb_parallel_path): Add check for
	GDB_PARALLEL.
	(standard_output_file): Remove check for GDB_PARALLEL, always
	return path in outputs/$subdir/$testname.
2016-02-08 14:02:36 -05:00
Pedro Alves 6b2e4f10ae Test gdb.threads/forking-threads-plus-breakpoint.exp with displaced stepping off
This exposes the internal error Don mentioned in PR19496:

  (1) internal error --  gdb/target.c:2713: internal-error: Can't determine the current address space of thread

More analysis here:

  https://sourceware.org/ml/gdb-patches/2016-01/msg00685.html

The (now kfailed) internal error looks like:

 continue &
 Continuing.
 (gdb) PASS: gdb.threads/forking-threads-plus-breakpoint.exp: cond_bp_target=1: detach_on_fork=on: displaced=off: continue &
 [New Thread 2846.2847]
 (...)
 [New Thread 2867.2867]
 /home/pedro/gdb/mygit/src/gdb/target.c:2723: internal-error: Can't determine the current address space of thread Thread 2846.2846

 A problem internal to GDB has been detected,
 further debugging may prove unreliable.
 Quit this debugging session? (y or n) KFAIL: gdb.threads/forking-threads-plus-breakpoint.exp: cond_bp_target=1: detach_on_fork=on: displaced=off: inferior 1 exited (GDB internal error) (PRMS: remote/19496)
 Resyncing due to internal error.

gdb/testsuite/ChangeLog:
2016-02-01  Pedro Alves  <palves@redhat.com>

	PR remote/19496
	* gdb.threads/forking-threads-plus-breakpoint.exp
	(displaced_stepping_supported): New global.
	(probe_displaced_stepping_support): New procedure.
	(do_test): Add 'displaced' parameter, and use it.
	(top level): Check for displaced stepping support.  Add displaced
	stepping on/off testing axis.
2016-02-01 18:48:04 +00:00
Pedro Alves f1da4b11ee Move foreach_with_prefix to lib/gdb.exp
gdb/testsuite/ChangeLog:
2016-01-25  Pedro Alves  <palves@redhat.com>

	* gdb.base/step-sw-breakpoint-adjust-pc.exp (foreach_with_prefix):
	Delete, moved to lib/gdb.exp.
	* gdb.threads/forking-threads-plus-breakpoint.exp
	(foreach_with_prefix): Likewise.
	* gdb.threads/process-dies-while-handling-bp.exp
	(foreach_with_prefix): Likewise.
	* lib/gdb.exp (foreach_with_prefix): New procedure.
2016-01-25 13:15:11 +00:00
Pedro Alves f303dbd60d Fix PR threads/19422 - show which thread caused stop
This commit changes GDB like this:

 - Program received signal SIGINT, Interrupt.
 + Thread 1 "main" received signal SIGINT, Interrupt.

 - Breakpoint 1 at 0x40087a: file threads.c, line 87.
 + Thread 3 "bar" hit Breakpoint 1 at 0x40087a: file threads.c, line 87.

 ... once the program goes multi-threaded.  Until GDB sees a second
thread spawn, the output is still the same as before, per the
discussion back in 2012:

  https://www.sourceware.org/ml/gdb/2012-11/msg00010.html

This helps non-stop mode, where you can't easily tell which thread hit
a breakpoint or received a signal:

 (gdb) info threads
   Id   Target Id         Frame
 * 1    Thread 0x7ffff7fc1740 (LWP 19362) "main" (running)
   2    Thread 0x7ffff7fc0700 (LWP 19366) "foo" (running)
   3    Thread 0x7ffff77bf700 (LWP 19367) "bar" (running)
 (gdb)
 Program received signal SIGUSR1, User defined signal 1.
 0x0000003616a09237 in pthread_join (threadid=140737353877248, thread_return=0x7fffffffd5b8) at pthread_join.c:92
 92          lll_wait_tid (pd->tid);
 (gdb) b threads.c:87
 Breakpoint 1 at 0x40087a: file threads.c, line 87.
 (gdb)
 Breakpoint 1, thread_function1 (arg=0x1) at threads.c:87
 87              usleep (1);  /* Loop increment.  */

The best the user can do is run "info threads" and try to figure
things out.

It actually also affects all-stop mode, in case of "handle SIG print
nostop":

...
  Program received signal SIGUSR1, User defined signal 1.

  Program received signal SIGUSR1, User defined signal 1.

  Program received signal SIGUSR1, User defined signal 1.

  Program received signal SIGUSR1, User defined signal 1.
...

The above doesn't give any clue that these were different threads
getting the SIGUSR1 signal.

I initially thought of lowercasing "breakpoint" in

  "Thread 3 hit Breakpoint 1"

but then after trying it I realized that leaving "Breakpoint"
uppercase helps the eye quickly find the relevant information.  It's
also easier to implement not showing anything about threads until the
program goes multi-threaded this way.

Here's a larger example session in non-stop mode:

  (gdb) c -a&
  Continuing.
  (gdb) interrupt -a
  (gdb)
  Thread 1 "main" stopped.
  0x0000003616a09237 in pthread_join (threadid=140737353877248, thread_return=0x7fffffffd5b8) at pthread_join.c:92
  92          lll_wait_tid (pd->tid);

  Thread 2 "foo" stopped.
  0x0000003615ebc6ed in nanosleep () at ../sysdeps/unix/syscall-template.S:81
  81      T_PSEUDO (SYSCALL_SYMBOL, SYSCALL_NAME, SYSCALL_NARGS)

  Thread 3 "bar" stopped.
  0x0000003615ebc6ed in nanosleep () at ../sysdeps/unix/syscall-template.S:81
  81      T_PSEUDO (SYSCALL_SYMBOL, SYSCALL_NAME, SYSCALL_NARGS)
  b threads.c:87
  Breakpoint 4 at 0x40087a: file threads.c, line 87.
  (gdb) b threads.c:67
  Breakpoint 5 at 0x400811: file threads.c, line 67.
  (gdb) c -a&
  Continuing.
  (gdb)
  Thread 3 "bar" hit Breakpoint 4, thread_function1 (arg=0x1) at threads.c:87
  87              usleep (1);  /* Loop increment.  */

  Thread 2 "foo" hit Breakpoint 5, thread_function0 (arg=0x0) at threads.c:68
  68              (*myp) ++;
  info threads
    Id   Target Id         Frame
  * 1  Thread 0x7ffff7fc1740 (LWP 31957) "main" (running)
    2  Thread 0x7ffff7fc0700 (LWP 31961) "foo" thread_function0 (arg=0x0) at threads.c:68
    3  Thread 0x7ffff77bf700 (LWP 31962) "bar" thread_function1 (arg=0x1) at threads.c:87
  (gdb) shell kill -SIGINT 31957
  (gdb)
  Thread 1 "main" received signal SIGINT, Interrupt.
  0x0000003616a09237 in pthread_join (threadid=140737353877248, thread_return=0x7fffffffd5b8) at pthread_join.c:92
  92          lll_wait_tid (pd->tid);
  info threads
    Id   Target Id         Frame
  * 1  Thread 0x7ffff7fc1740 (LWP 31957) "main" 0x0000003616a09237 in pthread_join (threadid=140737353877248, thread_return=0x7fffffffd5b8) at pthread_join.c:92
    2  Thread 0x7ffff7fc0700 (LWP 31961) "foo" thread_function0 (arg=0x0) at threads.c:68
    3  Thread 0x7ffff77bf700 (LWP 31962) "bar" thread_function1 (arg=0x1) at threads.c:87
  (gdb) t 2
  [Switching to thread 2, Thread 0x7ffff7fc0700 (LWP 31961)]
  #0  thread_function0 (arg=0x0) at threads.c:68
  68              (*myp) ++;
  (gdb) catch syscall
  Catchpoint 6 (any syscall)
  (gdb) c&
  Continuing.
  (gdb)
  Thread 2 "foo" hit Catchpoint 6 (call to syscall nanosleep), 0x0000003615ebc6ed in nanosleep () at ../sysdeps/unix/syscall-template.S:81
  81      T_PSEUDO (SYSCALL_SYMBOL, SYSCALL_NAME, SYSCALL_NARGS)

I'll work on documentation next if this looks agreeable.

This patch applies on top of the star wildcards thread IDs series:

  https://sourceware.org/ml/gdb-patches/2016-01/msg00291.html

For convenience, I've pushed this to the
users/palves/show-which-thread-caused-stop branch.

gdb/doc/ChangeLog:
2016-01-18  Pedro Alves  <palves@redhat.com>

	* gdb.texinfo (Threads): Mention that GDB displays the ID and name
	of the thread that hit a breakpoint or received a signal.

gdb/ChangeLog:
2016-01-18  Pedro Alves  <palves@redhat.com>

	* NEWS: Mention that GDB now displays the ID and name of the
	thread that hit a breakpoint or received a signal.
	* break-catch-sig.c (signal_catchpoint_print_it): Use
	maybe_print_thread_hit_breakpoint.
	* break-catch-syscall.c (print_it_catch_syscall): Likewise.
	* break-catch-throw.c (print_it_exception_catchpoint): Likewise.
	* breakpoint.c (maybe_print_thread_hit_breakpoint): New function.
	(print_it_catch_fork, print_it_catch_vfork, print_it_catch_solib)
	(print_it_catch_exec, print_it_ranged_breakpoint)
	(print_it_watchpoint, print_it_masked_watchpoint, bkpt_print_it):
	Use maybe_print_thread_hit_breakpoint.
	* breakpoint.h (maybe_print_thread_hit_breakpoint): Declare.
	* gdbthread.h (show_thread_that_caused_stop): Declare.
	* infrun.c (print_signal_received_reason): Print which thread
	received signal.
	* thread.c (show_thread_that_caused_stop): New function.

gdb/testsuite/ChangeLog:
2016-01-18  Pedro Alves  <palves@redhat.com>

	* gdb.base/async-shell.exp: Adjust expected output.
	* gdb.base/dprintf-non-stop.exp: Adjust expected output.
	* gdb.base/siginfo-thread.exp: Adjust expected output.
	* gdb.base/watchpoint-hw-hit-once.exp: Adjust expected output.
	* gdb.java/jnpe.exp: Adjust expected output.
	* gdb.threads/clone-new-thread-event.exp: Adjust expected output.
	* gdb.threads/continue-pending-status.exp: Adjust expected output.
	* gdb.threads/leader-exit.exp: Adjust expected output.
	* gdb.threads/manythreads.exp: Adjust expected output.
	* gdb.threads/pthreads.exp: Adjust expected output.
	* gdb.threads/schedlock.exp: Adjust expected output.
	* gdb.threads/siginfo-threads.exp: Adjust expected output.
	* gdb.threads/signal-command-multiple-signals-pending.exp: Adjust
	expected output.
	* gdb.threads/signal-delivered-right-thread.exp: Adjust expected
	output.
	* gdb.threads/sigthread.exp: Adjust expected output.
	* gdb.threads/watchpoint-fork.exp: Adjust expected output.
2016-01-18 15:15:18 +00:00
Pedro Alves 663f6d42f4 Add $_gthread convenience variable
This commit adds a new $_gthread convenience variable, that is like
$_thread, but holds the current thread's global thread id.

gdb/ChangeLog:
2016-01-13  Pedro Alves  <palves@redhat.com>

	* NEWS: Mention $_gthread.
	* gdbthread.h (struct thread_info) <global_num>: Mention
	$_gthread.
	* thread.c (thread_num_make_value_helper): New function.
	(thread_id_make_value): Delete.
	(thread_id_per_inf_num_make_value, global_thread_id_make_value):
	New.
	(thread_funcs): Adjust.
	(gthread_funcs): New.
	(_initialize_thread): Register $_gthread variable.

gdb/testsuite/ChangeLog:
2016-01-13  Pedro Alves  <palves@redhat.com>

	* gdb.base/default.exp: Expect $_gthread as well.
	* gdb.multi/tids.exp: Test $_gthread.
	* gdb.threads/thread-specific.exp: Test $_gthread.

gdb/doc/ChangeLog:
2016-01-13  Pedro Alves  <palves@redhat.com>

	* gdb.texinfo (Threads): Document the $_gthread convenience
	variable.
	(Convenience Vars): Likewise.
2016-01-13 11:03:19 +00:00
Pedro Alves 5d5658a1d3 Per-inferior/Inferior-qualified thread IDs
This commit changes GDB to track thread numbers per-inferior.  Then,
if you're debugging multiple inferiors, GDB displays
"inferior-num.thread-num" instead of just "thread-num" whenever it
needs to display a thread:

 (gdb) info inferiors
   Num  Description       Executable
   1    process 6022     /home/pedro/gdb/tests/threads
 * 2    process 6037     /home/pedro/gdb/tests/threads
 (gdb) info threads
   Id   Target Id         Frame
   1.1  Thread 0x7ffff7fc2740 (LWP 6022) "threads" (running)
   1.2  Thread 0x7ffff77c0700 (LWP 6028) "threads" (running)
   1.3  Thread 0x7ffff7fc2740 (LWP 6032) "threads" (running)
   2.1  Thread 0x7ffff7fc1700 (LWP 6037) "threads" (running)
   2.2  Thread 0x7ffff77c0700 (LWP 6038) "threads" (running)
 * 2.3  Thread 0x7ffff7fc2740 (LWP 6039) "threads" (running)
 (gdb)
...
 (gdb) thread 1.1
 [Switching to thread 1.1 (Thread 0x7ffff7fc2740 (LWP 8155))]
 (gdb)
...

etc.

You can still use "thread NUM", in which case GDB infers you're
referring to thread NUM of the current inferior.

The $_thread convenience var and Python's InferiorThread.num attribute
are remapped to the new per-inferior thread number.  It's a backward
compatibility break, but since it only matters when debugging multiple
inferiors, I think it's worth doing.

Because MI thread IDs need to be a single integer, we keep giving
threads a global identifier, _in addition_ to the per-inferior number,
and make MI always refer to the global thread IDs.  IOW, nothing
changes from a MI frontend's perspective.

Similarly, since Python's Breakpoint.thread and Guile's
breakpoint-thread/set-breakpoint-thread breakpoint methods need to
work with integers, those are adjusted to work with global thread IDs
too.  Follow up patches will provide convenient means to access
threads' global IDs.

To avoid potencially confusing users (which also avoids updating much
of the testsuite), if there's only one inferior and its ID is "1",
IOW, the user hasn't done anything multi-process/inferior related,
then the "INF." part of thread IDs is not shown.  E.g,.:

 (gdb) info inferiors
   Num  Description       Executable
 * 1    process 15275     /home/pedro/gdb/tests/threads
 (gdb) info threads
   Id   Target Id         Frame
 * 1    Thread 0x7ffff7fc1740 (LWP 15275) "threads" main () at threads.c:40
 (gdb) add-inferior
 Added inferior 2
 (gdb) info threads
   Id   Target Id         Frame
 * 1.1  Thread 0x7ffff7fc1740 (LWP 15275) "threads" main () at threads.c:40
 (gdb)

No regressions on x86_64 Fedora 20.

gdb/ChangeLog:
2016-01-13  Pedro Alves  <palves@redhat.com>

	* NEWS: Mention that thread IDs are now per inferior and global
	thread IDs.
	* Makefile.in (SFILES): Add tid-parse.c.
	(COMMON_OBS): Add tid-parse.o.
	(HFILES_NO_SRCDIR): Add tid-parse.h.
	* ada-tasks.c: Adjust to use ptid_to_global_thread_id.
	* breakpoint.c (insert_breakpoint_locations)
	(remove_threaded_breakpoints, bpstat_check_breakpoint_conditions)
	(print_one_breakpoint_location, set_longjmp_breakpoint)
	(check_longjmp_breakpoint_for_call_dummy)
	(set_momentary_breakpoint): Adjust to use global IDs.
	(find_condition_and_thread, watch_command_1): Use parse_thread_id.
	(until_break_command, longjmp_bkpt_dtor)
	(breakpoint_re_set_thread, insert_single_step_breakpoint): Adjust
	to use global IDs.
	* dummy-frame.c (pop_dummy_frame_bpt): Adjust to use
	ptid_to_global_thread_id.
	* elfread.c (elf_gnu_ifunc_resolver_stop): Likewise.
	* gdbthread.h (struct thread_info): Rename field 'num' to
	'global_num.  Add new fields 'per_inf_num' and 'inf'.
	(thread_id_to_pid): Rename thread_id_to_pid to
	global_thread_id_to_ptid.
	(pid_to_thread_id): Rename to ...
	(ptid_to_global_thread_id): ... this.
	(valid_thread_id): Rename to ...
	(valid_global_thread_id): ... this.
	(find_thread_id): Rename to ...
	(find_thread_global_id): ... this.
	(ALL_THREADS, ALL_THREADS_BY_INFERIOR): Declare.
	(print_thread_info): Add comment.
	* tid-parse.h: New file.
	* tid-parse.c: New file.
	* infcmd.c (step_command_fsm_prepare)
	(step_command_fsm_should_stop): Adjust to use the global thread
	ID.
	(until_next_command, until_next_command)
	(finish_command_fsm_should_stop): Adjust to use the global thread
	ID.
	(attach_post_wait): Adjust to check the inferior number too.
	* inferior.h (struct inferior) <highest_thread_num>: New field.
	* infrun.c (handle_signal_stop)
	(insert_exception_resume_breakpoint)
	(insert_exception_resume_from_probe): Adjust to use the global
	thread ID.
	* record-btrace.c (record_btrace_open): Use global thread IDs.
	* remote.c (process_initial_stop_replies): Also consider the
	inferior number.
	* target.c (target_pre_inferior): Clear the inferior's highest
	thread num.
	* thread.c (clear_thread_inferior_resources): Adjust to use the
	global thread ID.
	(new_thread): New inferior parameter.  Adjust to use it.  Set both
	the thread's global ID and the thread's per-inferior ID.
	(add_thread_silent): Adjust.
	(find_thread_global_id): New.
	(find_thread_id): Make static.  Adjust to rename.
	(valid_thread_id): Rename to ...
	(valid_global_thread_id): ... this.
	(pid_to_thread_id): Rename to ...
	(ptid_to_global_thread_id): ... this.
	(thread_id_to_pid): Rename to ...
	(global_thread_id_to_ptid): ... this.  Adjust.
	(first_thread_of_process): Adjust.
	(do_captured_list_thread_ids): Adjust to use global thread IDs.
	(should_print_thread): New function.
	(print_thread_info): Rename to ...
	(print_thread_info_1): ... this, and add new show_global_ids
	parameter.  Handle it.  Iterate over inferiors.
	(print_thread_info): Reimplement as wrapper around
	print_thread_info_1.
	(show_inferior_qualified_tids): New function.
	(print_thread_id): Use it.
	(tp_array_compar): Compare inferior numbers too.
	(thread_apply_command): Use tid_range_parser.
	(do_captured_thread_select): Use parse_thread_id.
	(thread_id_make_value): Adjust.
	(_initialize_thread): Adjust "info threads" help string.
	* varobj.c (struct varobj_root): Update comment.
	(varobj_create): Adjust to use global thread IDs.
	(value_of_root_1): Adjust to use global_thread_id_to_ptid.
	* windows-tdep.c (display_tib): No longer accept an argument.
	* cli/cli-utils.c (get_number_trailer): Make extern.
	* cli/cli-utils.h (get_number_trailer): Declare.
	(get_number_const): Adjust documentation.
	* mi/mi-cmd-var.c (mi_cmd_var_update_iter): Adjust to use global
	thread IDs.
	* mi/mi-interp.c (mi_new_thread, mi_thread_exit)
	(mi_on_normal_stop, mi_output_running_pid, mi_on_resume):
	* mi/mi-main.c (mi_execute_command, mi_cmd_execute): Likewise.
	* guile/scm-breakpoint.c (gdbscm_set_breakpoint_thread_x):
	Likewise.
	* python/py-breakpoint.c (bppy_set_thread): Likewise.
	* python/py-finishbreakpoint.c (bpfinishpy_init): Likewise.
	* python/py-infthread.c (thpy_get_num): Add comment and return the
	per-inferior thread ID.
	(thread_object_getset): Update comment of "num".

gdb/testsuite/ChangeLog:
2016-01-07  Pedro Alves  <palves@redhat.com>

	* gdb.base/break.exp: Adjust to output changes.
	* gdb.base/hbreak2.exp: Likewise.
	* gdb.base/sepdebug.exp: Likewise.
	* gdb.base/watch_thread_num.exp: Likewise.
	* gdb.linespec/keywords.exp: Likewise.
	* gdb.multi/info-threads.exp: Likewise.
	* gdb.threads/thread-find.exp: Likewise.
	* gdb.multi/tids.c: New file.
	* gdb.multi/tids.exp: New file.

gdb/doc/ChangeLog:
2016-01-07  Pedro Alves  <palves@redhat.com>

	* gdb.texinfo (Threads): Document per-inferior thread IDs,
	qualified thread IDs, global thread IDs and thread ID lists.
	(Set Watchpoints, Thread-Specific Breakpoints): Adjust to refer to
	thread IDs.
	(Convenience Vars): Document the $_thread convenience variable.
	(Ada Tasks): Adjust to refer to thread IDs.
	(GDB/MI Async Records, GDB/MI Thread Commands, GDB/MI Ada Tasking
	Commands, GDB/MI Variable Objects): Update to mention global
	thread IDs.
	* guile.texi (Breakpoints In Guile)
	<breakpoint-thread/set-breakpoint-thread breakpoint>: Mention
	global thread IDs instead of thread IDs.
	* python.texi (Threads In Python): Adjust documentation of
	InferiorThread.num.
	(Breakpoint.thread): Mention global thread IDs instead of thread
	IDs.
2016-01-13 10:59:43 +00:00
Pedro Alves b05b120205 Reapply: List inferiors/threads/pspaces in ascending order
[This reapplies a change that was accidentally reverted with c0ecb95f3d.]

Before:
  (gdb) info threads
    Id   Target Id         Frame
    3    Thread 0x7ffff77c3700 (LWP 29035) callme () at foo.c:30
    2    Thread 0x7ffff7fc4700 (LWP 29034) 0x000000000040087b in child_function_2 (arg=0x0) at foo.c:60
  * 1    Thread 0x7ffff7fc5740 (LWP 29030) 0x0000003b37209237 in pthread_join (threadid=140737353893632, thread_return=0x0) at pthread_join.c:92

After:
  (gdb) info threads
    Id   Target Id         Frame
  * 1    Thread 0x7ffff7fc5740 (LWP 29030) 0x0000003b37209237 in pthread_join (threadid=140737353893632, thread_return=0x0) at pthread_join.c:92
    2    Thread 0x7ffff7fc4700 (LWP 29034) 0x000000000040087b in child_function_2 (arg=0x0) at foo.c:60
    3    Thread 0x7ffff77c3700 (LWP 29035) callme () at foo.c:30

gdb/doc/ChangeLog:
2015-11-24  Pedro Alves  <palves@redhat.com>

	PR 17539
	* gdb.texinfo (Inferiors and Programs): Adjust "maint info
	program-spaces" example to ascending order listing.
	(Threads): Adjust "info threads" example to ascending order
	listing.
	(Forks): Adjust "info inferiors" example to ascending order
	listing.

gdb/ChangeLog:
2015-11-24  Pedro Alves  <palves@redhat.com>

	PR 17539
	* inferior.c (add_inferior_silent): Append the new inferior to the
	end of the list.
	* progspace.c (add_program_space): Append the new pspace to the
	end of the list.
	* thread.c (new_thread): Append the new thread to the end of the
	list.

gdb/testsuite/ChangeLog:
2015-11-24  Pedro Alves  <palves@redhat.com>

	PR 17539
	* gdb.base/foll-exec-mode.exp: Adjust to GDB listing inferiors and
	threads in ascending order.
	* gdb.base/foll-fork.exp: Likewise.
	* gdb.base/foll-vfork.exp: Likewise.
	* gdb.base/multi-forks.exp: Likewise.
	* gdb.mi/mi-nonstop.exp: Likewise.
	* gdb.mi/mi-nsintrall.exp: Likewise.
	* gdb.multi/base.exp: Likewise.
	* gdb.multi/multi-arch.exp: Likewise.
	* gdb.python/py-inferior.exp: Likewise.
	* gdb.threads/break-while-running.exp: Likewise.
	* gdb.threads/execl.exp: Likewise.
	* gdb.threads/gcore-thread.exp: Likewise.
	* gdb.threads/info-threads-cur-sal.exp: Likewise.
	* gdb.threads/kill.exp: Likewise.
	* gdb.threads/linux-dp.exp: Likewise.
	* gdb.threads/multiple-step-overs.exp: Likewise.
	* gdb.threads/next-bp-other-thread.exp: Likewise.
	* gdb.threads/step-bg-decr-pc-switch-thread.exp: Likewise.
	* gdb.threads/step-over-lands-on-breakpoint.exp: Likewise.
	* gdb.threads/step-over-trips-on-watchpoint.exp: Likewise.
	* gdb.threads/thread-find.exp: Likewise.
	* gdb.threads/tls.exp: Likewise.
	* lib/mi-support.exp (mi_reverse_list): Delete.
	(mi_check_thread_states): No longer reverse list.
2016-01-12 01:12:38 +00:00
Jan Kratochvil c0ecb95f3d testsuite: Fix false FAILs on too long base directory
I was getting

gu (print arg0)^M
= 0x7fffffffdafb
"/unsafebuild-x86_64-redhat-linux-gnu/gdb/testsuite.unix.-m64/outputs/gdb.guile/scm-value/scm-"...^M
(gdb) FAIL: gdb.guile/scm-value.exp: verify dereferenced value
python print (arg0)^M
0x7fffffffdafd
"/unsafebuild-x86_64-redhat-linux-gnu/gdb/testsuite.unix.-m64/outputs/gdb.python/py-value/py-v"...^M
(gdb) FAIL: gdb.python/py-value.exp: verify dereferenced value

and also:

(gdb) p argv[0]^M
$2 = 0x7fffffffd832 "/home/jkratoch/redhat/gdb-test-", 'x' <repeats 169
times>...^M
(gdb) FAIL: gdb.guile/scm-value.exp: argv[0] should be available on this
target

gdb/testsuite/ChangeLog
2016-01-11  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* gdb.guile/scm-value.exp (test_value_in_inferior): Set print elements
	and repeats to unlimited.
	* gdb.python/py-value.exp: Likewise.
	* lib/gdb.exp (gdb_has_argv0): Save and temporarily set print elements
	and repeats to unlimited.
2016-01-11 22:12:16 +01:00
Joel Brobecker 618f726fcb GDB copyright headers update after running GDB's copyright.py script.
gdb/ChangeLog:

        Update year range in copyright notice of all files.
2016-01-01 08:43:22 +04:00
Simon Marchi 3ca22649a6 Remove HP-UX references fom testsuite
This patch removes all special cases for HP-UX, for which support has
been removed earlier, that I found in the testsuite.  Note that the hppa
architecture != HP-UX, since other OSes can run on hppa, so I tried to
leave everything that is not HP-UX specific.

Two complete tests were completely HP-UX specific, so I removed them.

I ran the testsuite on Linux x86-64, native and native-gdbserver, and
noticed no regressions.

gdb/testsuite/ChangeLog:

	* gdb.asm/asm-source.exp: Remove HP-UX references.
	* gdb.base/annota1.exp: Likewise.
	* gdb.base/annota3.exp: Likewise.
	* gdb.base/attach.exp: Likewise.
	* gdb.base/bigcore.exp: Likewise.
	* gdb.base/break.exp: Likewise.
	* gdb.base/call-ar-st.exp: Likewise.
	* gdb.base/callfuncs.exp: Likewise.
	* gdb.base/catch-fork-static.exp: Likewise.
	* gdb.base/display.exp: Likewise.
	* gdb.base/foll-exec-mode.exp: Likewise.
	* gdb.base/foll-exec.exp: Likewise.
	* gdb.base/foll-fork.exp: Likewise.
	* gdb.base/foll-vfork.exp: Likewise.
	* gdb.base/funcargs.exp: Likewise.
	* gdb.base/hbreak2.exp: Likewise.
	* gdb.base/inferior-died.exp: Likewise.
	* gdb.base/interrupt.exp: Likewise.
	* gdb.base/multi-forks.exp: Likewise.
	* gdb.base/nodebug.exp: Likewise.
	* gdb.base/sepdebug.exp: Likewise.
	* gdb.base/solib1.c: Likewise.
	* gdb.base/step-test.exp: Likewise.
	* gdb.mi/non-stop.c: Likewise.
	* gdb.mi/pthreads.c: Likewise.
	* gdb.multi/bkpt-multi-exec.ex: Likewise.
	* gdb.threads/pthreads.c: Likewise.
	* gdb.threads/staticthreads.exp: Likewise.
	* lib/future.exp: Likewise.
	* lib/gdb.exp: Likewise.
	* gdb.base/so-indr-cl.c: Remove.
	* gdb.base/so-indr-cl.exp: Likewise.
	* gdb.base/solib.c: Likewise.
	* gdb.base/solib.exp: Likewise.
	* gdb.base/solib2.c: Likewise.
2015-12-21 12:51:54 -05:00
Sandra Loosemore 87a3a92c46 Skip tests that send ctrl-c to GDB if nointerrupts target property is set.
2015-12-14  Sandra Loosemore  <sandra@codesourcery.com>

	gdb/testsuite/
	* gdb.base/completion.exp: Skip tests that interrupt GDB with
	ctrl-C if nointerrupts target property is set.
	* gdb.base/double-prompt-target-event-error.exp: Likewise.
	* gdb.base/paginate-after-ctrl-c-running.exp: Likewise.
	* gdb.base/paginate-bg-execution.exp: Likewise.
	* gdb.base/paginate-execution-startup.exp: Likewise.
	* gdb.base/random-signal.exp: Likewise.
	* gdb.base/range-stepping.exp: Likewise.
	* gdb.cp/annota2.exp: Likewise.
	* gdb.cp/annota3.exp: Likewise.
	* gdb.gdb/selftest.exp: Likewise.
	* gdb.threads/continue-pending-status.exp: Likewise.
	* gdb.threads/leader-exit.exp: Likewise.
	* gdb.threads/manythreads.exp: Likewise.
	* gdb.threads/pthreads.exp: Likewise.
	* gdb.threads/schedlock.exp: Likewise.
	* gdb.threads/sigthread.exp: Likewise.
2015-12-14 15:02:59 -08:00
Don Breazeal a8f077dc25 Target remote mode fork and exec test updates
This patch updates tests for fork and exec events in target remote mode.
In the majority of cases this was a simple matter of removing some code
that disabled the test for target remote.  In a few cases the test needed
to be disabled; in those cases the gdb_protocol was checked instead of
using the [is_remote target] etc.

In a couple of cases we needed to use clean_restart, since target remote
doesn't support the run command, and in one case we had to modify an expect
expression to allow for a "multiprocess-style" ptid.

Tested with the patch that implemented target remote mode fork and exec
event support.

gdb/testsuite/ChangeLog:

	* gdb.base/execl-update-breakpoints.exp (main): Enable for target
	remote.
	* gdb.base/foll-exec-mode.exp (main): Disable for target remote.
	* gdb.base/foll-exec.exp (main): Enable for target remote.
	* gdb.base/foll-fork.exp (main): Likewise.
	* gdb.base/foll-vfork.exp (main): Likewise.
	* gdb.base/multi-forks.exp (main): Likewise, and use clean_restart.
	(proc continue_to_exit_bp_loc): Use clean_restart.
	* gdb.base/pie-execl.exp (main): Disable for target remote.
	* gdb.base/watch-vfork.exp (main): Enable for target remote.
	* gdb.mi/mi-nsthrexec.exp (main): Likewise.
	* gdb.threads/execl.exp (main): Likewise.
	* gdb.threads/fork-child-threads.exp (main): Likewise.
	* gdb.threads/fork-plus-threads.exp (main): Disable for target
	remote.
	* gdb.threads/fork-thread-pending.exp (main): Enable for target
	remote.
	* gdb.threads/linux-dp.exp (check_philosopher_stack): Allow
	pid.tid style ptids, instead of just tid.
	* gdb.threads/thread-execl.exp (main): Enable for target remote.
	* gdb.threads/watchpoint-fork.exp (main): Likewise.
	* gdb.trace/report.exp (use_collected_data): Allow pid.tid style
	ptids, instead of just tid.
2015-12-14 11:18:05 -08:00
Pedro Alves f2faf941ae Implement TARGET_WAITKIND_NO_RESUMED in the remote protocol
Testing with "maint set target-non-stop on" causes regressions in
tests that rely on TARGET_WAITKIND_NO_RESUMED, which isn't modelled on
the RSP.  In real all-stop, gdbserver detects the situation and
reporst error to GDB, and so the tests (e.g.,
gdb.threads/no-unwaited-for-left.exp) at fail quickly.  But with
"maint set target-non-stop on", GDB instead hangs forever waiting for
a stop reply that never comes, and so the tests take longer to time
out.

This adds a new "N" stop reply packet that maps 1-1 to
TARGET_WAITKIND_NO_RESUMED.

gdb/ChangeLog:
2015-11-30  Pedro Alves  <palves@redhat.com>

	PR 14618
	* NEWS (New remote packets): Mention the N stop reply.
	* remote.c (remote_protocol_features): Add "no-resumed" entry.
	(remote_query_supported): Report no-resumed+ support.
	(remote_parse_stop_reply): Handle 'N'.
	(process_stop_reply): Handle TARGET_WAITKIND_NO_RESUMED.
	(remote_wait_as): Handle 'N' / TARGET_WAITKIND_NO_RESUMED.
	(_initialize_remote): Register "set/show remote
	no-resumed-stop-reply" commands.

gdb/doc/ChangeLog:
2015-11-30  Pedro Alves  <palves@redhat.com>

	PR 14618
	* gdb.texinfo (Stop Reply Packets): Document the N stop reply.
	(Remote Configuration): Add the "set/show remote
	no-resumed-stop-reply" to the available settings table.
	(General Query Packets): Document the "no-resumed" qSupported
	feature.

gdb/gdbserver/ChangeLog:
2015-11-30  Pedro Alves  <palves@redhat.com>

	PR 14618
	* linux-low.c (linux_wait_1): If the last resumed thread is gone,
	report TARGET_WAITKIND_NO_RESUMED.
	* remote-utils.c (prepare_resume_reply): Handle
	TARGET_WAITKIND_NO_RESUMED.
	* server.c (report_no_resumed): New global.
	(handle_query) <qSupported>: Handle "no-resumed+".  Report
	"no-resumed+" support.
	(resume): When the target reports TARGET_WAITKIND_NO_RESUMED, only
	return error if the client doesn't support no-resumed events.
	(push_stop_notification): New function.
	(handle_target_event): Use it.  Report TARGET_WAITKIND_NO_RESUMED
	events if the client supports them.

gdb/testsuite/ChangeLog:
2015-11-30  Pedro Alves  <palves@redhat.com>

	* gdb.threads/no-unwaited-for-left.exp: Remove setup_kfail calls.
2015-11-30 18:43:24 +00:00
Simon Marchi f6512a69cd Add test for thread names
I couldn't find a test that verified the thread name functionality, so I
created a new one.

A target board can define gdb,no_thread_names if it doesn't support thread
names and wants to skip the tests that uses them.

This test has been made with Linux in mind.  Not all platforms use
pthread_setname_np to set the thread name, but some #ifdefs can be added
later in order to support other platforms.

Tested on x86-64 Ubuntu 14.04, native and remote.

gdb/testsuite/ChangeLog:

	* gdb.threads/names.exp: New file.
	* gdb.threads/names.c: New file.
	* README: Mention gdb,no_thread_names.
2015-11-26 13:09:30 -05:00
Pedro Alves 7e0aa6aa99 List inferiors/threads/pspaces in ascending order
Before:
  (gdb) info threads
    Id   Target Id         Frame
    3    Thread 0x7ffff77c3700 (LWP 29035) callme () at foo.c:30
    2    Thread 0x7ffff7fc4700 (LWP 29034) 0x000000000040087b in child_function_2 (arg=0x0) at foo.c:60
  * 1    Thread 0x7ffff7fc5740 (LWP 29030) 0x0000003b37209237 in pthread_join (threadid=140737353893632, thread_return=0x0) at pthread_join.c:92

After:
  (gdb) info threads
    Id   Target Id         Frame
  * 1    Thread 0x7ffff7fc5740 (LWP 29030) 0x0000003b37209237 in pthread_join (threadid=140737353893632, thread_return=0x0) at pthread_join.c:92
    2    Thread 0x7ffff7fc4700 (LWP 29034) 0x000000000040087b in child_function_2 (arg=0x0) at foo.c:60
    3    Thread 0x7ffff77c3700 (LWP 29035) callme () at foo.c:30

gdb/doc/ChangeLog:
2015-11-24  Pedro Alves  <palves@redhat.com>

	PR 17539
	* gdb.texinfo (Inferiors and Programs): Adjust "maint info
	program-spaces" example to ascending order listing.
	(Threads): Adjust "info threads" example to ascending order
	listing.
	(Forks): Adjust "info inferiors" example to ascending order
	listing.

gdb/ChangeLog:
2015-11-24  Pedro Alves  <palves@redhat.com>

	PR 17539
	* inferior.c (add_inferior_silent): Append the new inferior to the
	end of the list.
	* progspace.c (add_program_space): Append the new pspace to the
	end of the list.
	* thread.c (new_thread): Append the new thread to the end of the
	list.

gdb/testsuite/ChangeLog:
2015-11-24  Pedro Alves  <palves@redhat.com>

	PR 17539
	* gdb.base/foll-exec-mode.exp: Adjust to GDB listing inferiors and
	threads in ascending order.
	* gdb.base/foll-fork.exp: Likewise.
	* gdb.base/foll-vfork.exp: Likewise.
	* gdb.base/multi-forks.exp: Likewise.
	* gdb.mi/mi-nonstop.exp: Likewise.
	* gdb.mi/mi-nsintrall.exp: Likewise.
	* gdb.multi/base.exp: Likewise.
	* gdb.multi/multi-arch.exp: Likewise.
	* gdb.python/py-inferior.exp: Likewise.
	* gdb.threads/break-while-running.exp: Likewise.
	* gdb.threads/execl.exp: Likewise.
	* gdb.threads/gcore-thread.exp: Likewise.
	* gdb.threads/info-threads-cur-sal.exp: Likewise.
	* gdb.threads/kill.exp: Likewise.
	* gdb.threads/linux-dp.exp: Likewise.
	* gdb.threads/multiple-step-overs.exp: Likewise.
	* gdb.threads/next-bp-other-thread.exp: Likewise.
	* gdb.threads/step-bg-decr-pc-switch-thread.exp: Likewise.
	* gdb.threads/step-over-lands-on-breakpoint.exp: Likewise.
	* gdb.threads/step-over-trips-on-watchpoint.exp: Likewise.
	* gdb.threads/thread-find.exp: Likewise.
	* gdb.threads/tls.exp: Likewise.
	* lib/mi-support.exp (mi_reverse_list): Delete.
	(mi_check_thread_states): No longer reverse list.
2015-11-24 18:36:31 +00:00
Yao Qi 4081c0f122 Simplify gdb.threads/wp-replication.exp on counting HW watchpoints
Nowadays, test gdb.threads/wp-replication.exp uses a while loop to
repeatedly insert HW watchpoint, resume and check no error message
coming out, in order to count HW watchpoints  There are some
drawbacks in this way,

 - the loop could be endless.  I think this is use to making trouble
   to S/390, since we had such comment

      # Some targets (like S/390) behave as though supporting
      # unlimited hardware watchpoints.  In this case we just take a
      # safe exit out of the loop.

   I hit this today too because a GDB internal error is triggered
   on "continue" in the loop, and $done is 0 invariantly, so the loop
   can't end.
 - the code counting hardware watchpoint is too complicated.  We can
   use "set breakpoint always-inserted on" to get the result of inserting
   HW watchpoint without resuming the inferior.  In this way,
   watch_count_done and empty_cycle in c file is no longer needed.

In this patch, I change to use "set breakpoint always-inserted on" trick,
and only iterate $NR_THREADS times, to count the HW watchpoint.  In this
way, the loop can't be endless, and GDB doesn't need to resume the inferior.

gdb/testsuite:

2015-10-30  Yao Qi  <yao.qi@linaro.org>

	* gdb.threads/wp-replication.c (watch_count_done): Remove.
	(empty_cycle): Remove.
	(main): Don't call empty_cycle.  Don't use watch_count_done.
	* gdb.threads/wp-replication.exp: Don't set breakpoint on
	empty_cycle.  Rewrite the code counting HW watchpoints.
2015-10-30 15:54:58 +00:00
Pedro Alves 1ed415e2b9 non-stop-fair-events.exp slower on software single-step && !displ-step targets
On software single-step targets that don't support displaced stepping,
threads keep hitting each other's single-step breakpoints, and then
GDB needs to pause all threads to step past those.  The end result is
that progress in the main thread will be slower and it may take a bit
longer for the signal to be queued.  This patch bumps the timeout on
such targets.

gdb/testsuite/ChangeLog:
2015-09-16  Pedro Alves  <palves@redhat.com>
	    Sandra Loosemore <sandra@codesourcery.com>

	* gdb.threads/non-stop-fair-events.c (timeout): New global.
	(SECONDS): Redefine.
	(main): Call pthread_kill and alarm early.
	* gdb.threads/non-stop-fair-events.exp: Probe displaced stepping
	support.
	(test): If the target can't hardware step and doesn't support
	displaced stepping, increase the timeout.
2015-09-16 15:51:36 +01:00
Pedro Alves d136eff549 Make it easier to debug non-stop-fair-events.exp
If we enable infrun debug running this test, it quickly fails with a
full expect buffer.  That can be simply handled with a couple
exp_continues.  As it's annoying to hack this every time we need to
debug the test, this patch adds bits to enable debugging support
easily, with a one-line change.

And then, if any iteration of the test fails, we end up with a long
cascade of time outs.  Just bail out when we see the first fail.

gdb/testsuite/
2015-09-16  Pedro Alves  <palves@redhat.com>

	* gdb.threads/non-stop-fair-events.exp (gdb_test_no_anchor)
	(enable_debug): New procedures.
	(test): Use them.  Bail out if waiting for threads fails.
	(top level): Bail out if a test fails.
2015-09-16 15:51:36 +01:00
Philippe Waroquiers 5382cfab61 Fix PR/18564 - regression in showing __thread so extern variable
Ensure tls variable address is not relocated, as the msym addr
is an offset in the thread local storage of the shared library/object.
2015-09-15 21:12:39 +02:00
Pedro Alves d15dcecdee Fix gdb.threads/non-ldr-exc-3.exp race
gdb.threads/non-ldr-exc-3.exp is sometimes failing like this:

 [Switching to Thread 6831.6832]

 Breakpoint 2, thread_execler (arg=0x0) at /home/pedro/gdb/mygit/build/../src/gdb/testsuite/gdb.threads/non-ldr-exc-3.c:41
 41        if (execl (image, image, argv1, NULL) == -1) /* break-here */
 PASS: gdb.threads/non-ldr-exc-3.exp: lock-sched=on,non-stop=off: continue to breakpoint
 (gdb) set scheduler-locking on
 (gdb) FAIL: gdb.threads/non-ldr-exc-3.exp: lock-sched=on,non-stop=off: set scheduler-locking on

The problem is that the gdb_test_multiple is missing the prompt
anchor.  The problem was introduced by 2fd33e9448.  This reverts the
hunk that introduced the problem, reverting back to
gdb_continue_to_breakpoint.

gdb/testsuite/ChangeLog:
2015-09-15  Pedro Alves  <palves@redhat.com>

	* gdb.threads/non-ldr-exc-3.exp (do_test): Use
	gdb_continue_to_breakpoint instead of gdb_test_multiple.
2015-09-15 17:01:59 +01:00
Don Breazeal 2fd33e9448 Extended-remote exec test
This patch updates several exec-related tests and some of the library
functions in order to get them running with extended-remote.  There were
three changes that were required, as follows:

In gdb.base/foll-exec.exp, use 'clean_start' in place of proc 'zap_session'
to reset the state of the debugger between tests.  This sets 'remote
exec-file' to execute the correct binary file in each subsequent test.

In gdb.base/pie-execl.exp, there is an expect statement with an expression
that is used to match output from both gdb and the program under debug.
For the remote target, this had to be split into two expressions, using
$inferior_spawn_id to match the output from the program.

Because I had encountered problems with extended-remote exec events in
non-stop mode in my manual testing, I added non-stop testing to the
non-ldr-exc-[1234].exp tests.  In order to set non-stop mode for remote
targets, it is necessary to 'set non-stop on' after gdb has started, but
before it connects to gdbserver.  This is done using 'save_vars' to set
non-stop mode in GDBFLAGS, so GDB sets non-stop mode on startup.

gdb/testsuite/ChangeLog:

	* gdb.base/foll-exec.c: Add copyright header.  Fix
	formatting issues.
	* gdb.base/foll-exec.exp (zap_session): Delete proc.
	(do_exec_tests): Use clean_restart in place of zap_session,
	and for test initialization.  Fix formatting issues.  Use
	fail in place of perror.
	* gdb.base/pie-execl.exp (main): Use 'inferior_spawn_id' in
	an expect statement to match an expression with output from
	the program under debug.
	* gdb.threads/non-ldr-exc-1.exp (do_test, main): Add
	non-stop tests and pass stop mode argument to clean_restart.
	Use save_vars to enable non-stop in GDBFLAGS.
	* gdb.threads/non-ldr-exc-2.exp: Likewise.
	* gdb.threads/non-ldr-exc-3.exp: Likewise.
	* gdb.threads/non-ldr-exc-4.exp: Likewise.
2015-09-11 11:12:46 -07:00
Sandra Loosemore c0fa8fbd1c Improve hand-call-in-threads.exp failure handling.
2015-09-08  Sandra Loosemore  <sandra@codesourcery.com>

	gdb/testsuite/
	* gdb.threads/hand-call-in-threads.exp: Make sure the thread
	command actually switches threads.  Give up on remaining
	tests if target fails to stop at breakpoint.
2015-09-08 19:49:04 -07:00
Pedro Alves d4569d7bc5 Fix step-over-{trips-on-watchpoint|lands-on-breakpoint}.exp race
On a target that is both always in non-stop mode and can do displaced
stepping (such as native x86_64 GNU/Linux, with "maint set
target-non-stop on"), the step-over-trips-on-watchpoint.exp test
sometimes fails like this:

   (gdb) PASS: gdb.threads/step-over-trips-on-watchpoint.exp: no thread-specific bp: step: thread 1
   set scheduler-locking off
   (gdb) PASS: gdb.threads/step-over-trips-on-watchpoint.exp: no thread-specific bp: step: set scheduler-locking off
   step
  -[Switching to Thread 0x7ffff7fc0700 (LWP 11782)]
  -Hardware watchpoint 4: watch_me
  -
  -Old value = 0
  -New value = 1
  -child_function (arg=0x0) at /home/pedro/gdb/mygit/src/gdb/testsuite/gdb.threads/step-over-trips-on-watchpoint.c:39
  -39           other = 1; /* set thread-specific breakpoint here */
  -(gdb) PASS: gdb.threads/step-over-trips-on-watchpoint.exp: no thread-specific bp: step: step
  +wait_threads () at /home/pedro/gdb/mygit/src/gdb/testsuite/gdb.threads/step-over-trips-on-watchpoint.c:49
  +49       return 1; /* in wait_threads */
  +(gdb) FAIL: gdb.threads/step-over-trips-on-watchpoint.exp: no thread-specific bp: step: step

Note "scheduler-locking" was set off.  The problem is that on such
targets, the step-over of thread 2 and the "step" of thread 1 can be
set to run simultaneously (since with displaced stepping the
breakpoint isn't ever removed from the target), and sometimes, the
"step" of thread 1 finishes first, so it'd take another resume to see
the watchpoint trigger.  Fix this by replacing the wait_threads
function with a one-line infinite loop that doesn't call any function,
so that the "step" of thread 1 never finishes.

gdb/testsuite/ChangeLog:
2015-08-07  Pedro Alves  <palves@redhat.com>

	* gdb.threads/step-over-lands-on-breakpoint.c (wait_threads):
	Delete function.
	(main): Add alarm.  Run an infinite loop instead of calling
	wait_threads.
	* gdb.threads/step-over-lands-on-breakpoint.exp (do_test): Change
	comment.
	* gdb.threads/step-over-trips-on-watchpoint.c (wait_threads):
	Delete function.
	(main): Add alarm.  Run an infinite loop instead of calling
	wait_threads.
	* gdb.threads/step-over-trips-on-watchpoint.exp (do_test): Change
	comment.
2015-08-07 17:26:21 +01:00