aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2015-07-27[ARM] Fix extern protected data handlingSzabolcs Nagy6-0/+47
Emit *GLOB_DAT instead of *RELATIVE relocs for protected data in shared objects. This is needed for the fix of glibc bug 17711: https://sourceware.org/bugzilla/show_bug.cgi?id=17711 bfd: PR ld/18705 * elf32-arm.c (elf_backend_extern_protected_data): Define. ld/testsuite: PR ld/18705 * ld-arm/protected-data.d: New. * ld-arm/protected-data.s: New. * ld-arm/arm-elf.exp: Add new test.
2015-07-27Automatic date update in version.inGDB Administrator1-1/+1
2015-07-26Compile PR ld/18718 tests with -O2H.J. Lu2-5/+10
PR ld/18718 * ld-elf/shared.exp: Compile PR ld/18718 tests with -O2.
2015-07-26Set errcnt and warncnt to 0 in run_host_cmd_yesnoH.J. Lu2-0/+9
run_host_cmd_yesno should set errcnt and warncnt to 0. Otherwise, they may leak to the next run. * lib/ld-lib.exp (run_host_cmd_yesno): Set errcnt and warncnt to 0.
2015-07-26Make arm_unaligned_reloc test less sensitive to disassembler output format.Doug Kwan3-14/+22
2015-07-25remote.c: Make read_ptid return a null value when no thread id is found.Kevin Buettner2-1/+34
When using GDB to debug an RX target using the GDB remote protocol, using a Renesas supplied debug agent, I encountered the following assertion error: thread.c:85: internal-error: inferior_thread: Assertion `tp' failed. A problem internal to GDB has been detected, further debugging may prove unreliable. Create a core file of GDB? (y or n) n Command aborted. This assertion error occurs due to the fact that the value associated with inferior_ptid is not on the thread list. The remote debug output (obtained with "set debug remote 1") is fairly short, so I will include it up to the point where things go wrong - which is somewhat before the assertion failure: (gdb) target remote coyote.lan:61234 Remote debugging using coyote.lan:61234 Sending packet: $qSupported:multiprocess+;swbreak+;hwbreak+;qRelocInsn+#c9...Ack Packet received: PacketSize=c00;qXfer:memory-map:read-;qXfer:features:read-;QStartNoAckMode+;multiprocess+;QNonStop+ Packet qSupported (supported-packets) is supported Sending packet: $QStartNoAckMode#b0...Ack Packet received: OK Sending packet: $Hgp0.0#ad...Packet received: OK Sending packet: $QNonStop:0#8c...Packet received: OK Sending packet: $qTStatus#49...Packet received: Packet qTStatus (trace-status) is NOT supported Sending packet: $?#3f...Packet received: S02 Sending packet: $qfThreadInfo#bb...Packet received: m1 Sending packet: $qsThreadInfo#c8...Packet received: l Sending packet: $qAttached:a410#bf...Packet received: 0 Packet qAttached (query-attached) is supported Sending packet: $Hc-1#09...Packet received: OK Sending packet: $qC#b4...Packet received: QC not supported Above is the trace starting from the invocation of "target remote" through the call of get_current_thread() in remote_start_remote(). Below, I've pasted this line of code along with additional lines of context. The test following the call is especially important to understanding both the problem and my patch. /* We have thread information; select the thread the target says should be current. If we're reconnecting to a multi-threaded program, this will ideally be the thread that last reported an event before GDB disconnected. */ inferior_ptid = get_current_thread (wait_status); if (ptid_equal (inferior_ptid, null_ptid)) { /* Odd... The target was able to list threads, but not tell us which thread was current (no "thread" register in T stop reply?). Just pick the first thread in the thread list then. */ inferior_ptid = thread_list->ptid; } } Prior to getting to the code pasted above, remote_start_remote() made a call to target_update_thread_list(). This corresponds to the following lines from the above trace: Sending packet: $qfThreadInfo#bb...Packet received: m1 Sending packet: $qsThreadInfo#c8...Packet received: l Sending packet: $qAttached:a410#bf...Packet received: 0 Packet qAttached (query-attached) is supported Once target_update_thread_list has completed, the thread list contains a single entry: {pid = 42000, lwp = 1, tid = 0}. remote_start_remote() then makes a call to set_continue_thread(), accounting for this line of the trace: Sending packet: $Hc-1#09...Packet received: OK Finally, the call to get_current_thread() is responsible for the last line of the trace that I provided above: Sending packet: $qC#b4...Packet received: QC not supported get_current_thread() calls stop_reply_extract_thread() with the wait status. This returns null_ptid. get_current_thread() then calls remote_current_thread with a null inferior_ptid. After the calls to putpkt() and getpkt(), rs->buf[0] is 'Q', so read_ptid() is called and its result is returned. The buffer passed to read_ptid() is " not supported". read_ptid ultimately returns a ptid of {pid = 4200, lwp = 0, tid = 0}. However, this thread is not on the thread list. As noted earlier, the call to target_update_thread_list() had placed {pid = 42000, lwp = 1, tid = 0} on the list. This is the only thread in the list. When these calls ultimately return to remote_start_remote(), inferior_ptid gets set to {pid = 4200, lwp = 0, tid = 0}, which (again) is not on the thread list. It appears to me that the string " not supported" is coming from the debug agent. If so, it should be fixed, but I don't see a reason to not consult the thread list in order to place a valid thread id in inferior_ptid. This (consultation of the thread list) is what is done when inferior_ptid is null_ptid: if (ptid_equal (inferior_ptid, null_ptid)) { /* Odd... The target was able to list threads, but not tell us which thread was current (no "thread" register in T stop reply?). Just pick the first thread in the thread list then. */ inferior_ptid = thread_list->ptid; } My patch causes a null inferior_ptid to be returned by read_ptid when no thread id is found in the response from the debug agent. This return value ends up being returned by remote_current_thread() and then by get_current_thread. The assignment then places this null value into inferior_ptid. That, in turn, allows the ptid_equal test (noted above) to fetch a valid thread from the thread list. I no longer see the assertion failure due a good value (which is on the thread list) being placed in inferior_ptid. This patch also adds two log warnings that may be output when "set debug remote 1" is used. When running against the Renesas debug agent mentioned earlier, this is the relevant portion of the log output: Sending packet: $qC#b4...Packet received: QC not supported warning: garbage in qC reply warning: couldn't determine remote current thread; picking first in list. gdb/ChangeLog: * remote.c (read_ptid): Return null_ptid when no thread id is found. (remote_current_thread): Add log warning for malformed qC reply. (remote_start_remote): Add log warning when current thread not found.
2015-07-26Automatic date update in version.inGDB Administrator1-1/+1
2015-07-25Revert "Sync readline/ to version 7.0 alpha"Patrick Palka98-10044/+4497
This reverts commit b558ff043d41ba8d17a82f5f9ae5f9dade66160e. This reverts commit 4a11f2065906976675808364ddbd1c0f77eea41f. The initial import commit failed to retain local changes made to readline's configure.in (and the commit message erroneously stated that there were no local changes that needed to be reapplied). Also the import caused a couple of build errors and a scattering of testsuite regressions throughout many arches. It's probably better to start over with this import, hopefully more carefully next time.
2015-07-25Revert: * Makefile.in (check/%.exp): Pass directory for GDB_PARALLEL.Doug Evans5-81/+22
Regressions, e.g., http://gdb-build.sergiodj.net/builders/Fedora-x86_64-m32/builds/1501 gdb/testsuite/ChangeLog: Revert: * Makefile.in (check/%.exp): Pass directory for GDB_PARALLEL. (workers/%.worker, build-perf): New rule. (GDB_PERFTEST_MODE): New variable. (check-perf): Use it. (clean): Clean up gdb.perf parallel build subdirs. * lib/build-piece.exp: New file. * lib/cache.exp (gdb_do_cache): Include $GDB_PARALLEL in path name. * lib/gdb.exp (standard_output_file): Include $GDB_PARALLEL in path name. (standard_temp_file): Ditto. (GDB_PARALLEL handling): Make outputs,temp,cache directories as subdirs of $GDB_PARALLEL.
2015-07-25Don't build readline's shared libs by defaultPatrick Palka3-2/+7
Since the sync to version 7.0-alpho, readline now by default builds (unused) shared libraries alongside static libraries, whereas before it only built static libraries. A couple of GDB buildbots were not happy with this change: http://gdb-build.sergiodj.net/builders/AIX-POWER7-plain/builds/240 http://gdb-build.sergiodj.net/builders/Fedora-i686/builds/1518 To get these buildbots building again, this patch alters readline's configure.ac file to not build shared libraries by default, as was the case with readline 6.2. A more permanent fix may be to alter the top-level Makefile.def to pass --disable-shared to readline, or to investigate why these building these shared libraries are giving the buildbots trouble. (I think the proximate reason why the i686 buildbot fails is because it passes CFLAGS=-m32 instead of CC="gcc -m32" to the top-level configure script, and readline's linker commands don't inherit CFLAGS. Not sure about the AIX failure.) readline/ChangeLog.gdb: * configure.ac: Default opt_shared_libs to no. * configure: Regenerate.
2015-07-25Add missing ChangeLog filesH.J. Lu2-0/+13
2015-07-25Skip missing symbol version section check for executableH.J. Lu3-2/+77
Missing symbol version section is a run-time problem only if it will be referenced dynamically at run-time. We should skip the check for locally defined symbol, which isn't referenced by shared library, when linking executable. bfd/ PR ld/18718 * elflink.c (elf_link_output_extsym): Check symbol version section check only if not linking executable, the symbol is referenced by shared library or not locally defined. ld/testsuite/ PR ld/18718 * ld-elf/pr18718.c: New file. * ld-elf/shared.exp: Run tests for PR ld/18718.
2015-07-25Sync readline/ to version 7.0 alphaPatrick Palka98-4499/+10041
This patch syncs our upstream copy of readline from version 6.2 to the latest version, 7.0 alpha (released July 10 2015). I essentially copied what was done the last time readline was synced, when Jan updated to readline 6.2 in 2011: http://sourceware.org/ml/gdb-patches/2011-05/msg00003.html Procedure: 1. I extracted the readline-7.0-alpha tarball on top of readline/. 2. I deleted all the new files under doc/ that were deliberately omitted before. 3. I regenerated readline/configure and readline/examples/rlfe/configure using autoconf 2.64. No other configure files need regenerating. 4. I updated the function gdb_printable_part in completer.c with a trivial change made to the readline function it is based off of, printable_part in readline/complete.c. There is more work to be done in completer.c to sync it with readline/complete.c, but it is non-trivial and should probably be done separately anyway. Local patches that had to be reapplied: None. readline 7.0 alpha contains all of our local readline patches. New files in readline/: colors.{c,h} examples/{hist_erasedups,hist_purgecmd,rl-callbacktest,rlbasic}.c parse-colors.{c,h} readline.pc.in configure.ac Deleted files in readline/: configure.in Regressions: After the sync there is one testsuite regression, the test "signal SIGINT" in gdb.gdb/selftest.exp which now FAILs. Previously, the readline 6.2 SIGINT handler would temporarily reinstall the underlying application's SIGINT handler and immediately re-raise SIGINT so that the orginal handler gets invoked. But now (since readline 6.3) its SIGINT handler does not re-raise SIGINT or directly invoke the original handler; it now sets a flag marking that SIGINT was raised, and waits until readline explicitly has control to call the application's SIGINT handler. Anyway, because SIGINT is no longer re-raised from within readline's SIGINT handler, doing "signal SIGINT" with a stopped inferior gdb process will no longer resume and then immediately stop the process (since there is no 2nd SIGINT to immediately catch). Instead, the inferior gdb process will now just print "Quit" and continue to run. So with this commit, this particular test case is adjusted to reflect this change in behavior (we now have to send a 2nd SIGINT manually to stop it). Aside from this one testsuite regression, I personally noticed no regression in user-visible behavior. Though I only tested on x86_64 and on i686 Debian Stretch. Getting this kind of change in at the start of the GDB 7.11 development cycle will allow us to get a lot of passive testing from developers and from bleeding-edge users. readline/ChangeLog.gdb: Import readline 7.0 alpha * configure: Regenerate. * examples/rlfe/configure: Regenerate. gdb/ChangeLog: * completer.c (gdb_printable_part): Sync with readline function it is based off of. gdb/testsuite/ChangeLog: * gdb.gdb/selftest.exp (test_with_self): Update test to now expect the GDB inferior to no longer immediately stop after being resumed with "signal SIGINT".
2015-07-25Fix broken -Bsymbolic-functionsAlan Modra10-13/+72
For selected targets. The testcase reveals a number of targets that still need fixing. bfd/ * elf32-arm.c (elf32_arm_final_link_relocate): Use SYMBOLIC_BIND to check if a symbol should be bound symbolically. * elf32-hppa.c (elf32_hppa_check_relocs, elf32_hppa_adjust_dynamic_symbol, elf32_hppa_relocate_section, elf32_hppa_finish_dynamic_symbol): Likewise. * elf32-m68k.c (elf_m68k_check_relocs, elf_m68k_relocate_section): Likewise. * elf32-nios2.c (nios2_elf32_relocate_section, nios2_elf32_check_relocs, allocate_dynrelocs): Likewise. * elf32-tic6x.c (elf32_tic6x_finish_dynamic_symbol, elf32_tic6x_relocate_section): Likewise. ld/testsuite/ * ld-elf/symbolic-func.s, * ld-elf/symbolic-func.r: New test. * ld-elf/elf.exp: Run it.
2015-07-24Revert 4fd4095a5ffe3d4e50e0dac5f8ad37b8478afa9d, log individual measurements.Doug Evans2-13/+0
I think I lost a patch along the way, because I remember needing something like this, but the reverted patch isn't the right way to do this. Removing ... gdb/testsuite/ChangeLog: * gdb.perf/lib/perftest/measure.py (MeasurementCpuTime::stop): Print result. (MeasurementWallTime::stop): Ditto. (MeasurementVmSizeTime::stop): Ditto.
2015-07-25Automatic date update in version.inGDB Administrator1-1/+1
2015-07-24Add gmonster-{1,2} perf testcases.Doug Evans30-0/+1175
These testcases are mocks of real programs. GDB doesn't care what the programs do, they just have to look and/or behave like the real program. These testcases exercise gdb when debugging really large programs. E.g., gmonster-1 has 10,000 CUs, and gmonster-2 has 1000 shared libs (which is actually a little small, 5000 would be more accurate). gdb/testsuite/ChangeLog: * gdb.perf/lib/perftest/utils.py: New file. * gdb.perf/gm-hello.cc: New file. * gdb.perf/gm-pervasive-typedef.cc: New file. * gdb.perf/gm-pervasive-typedef.h: New file. * gdb.perf/gm-std.cc: New file. * gdb.perf/gm-std.h: New file. * gdb.perf/gm-use-cerr.cc: New file. * gdb.perf/gm-utils.h: New file. * gdb.perf/gmonster-null-lookup.py: New file. * gdb.perf/gmonster-pervasive-typedef.py: New file. * gdb.perf/gmonster-print-cerr.py: New file. * gdb.perf/gmonster-ptype-string.py: New file. * gdb.perf/gmonster-runto-main.py: New file. * gdb.perf/gmonster-select-file.py: New file. * gdb.perf/gmonster1-null-lookup.exp: New file. * gdb.perf/gmonster1-pervasive-typedef.exp: New file. * gdb.perf/gmonster1-print-cerr.exp: New file. * gdb.perf/gmonster1-ptype-string.exp: New file. * gdb.perf/gmonster1-runto-main.exp: New file. * gdb.perf/gmonster1-select-file.exp: New file. * gdb.perf/gmonster1.cc: New file. * gdb.perf/gmonster1.exp: New file. * gdb.perf/gmonster2-null-lookup.exp: New file. * gdb.perf/gmonster2-pervasive-typedef.exp: New file. * gdb.perf/gmonster2-print-cerr.exp: New file. * gdb.perf/gmonster2-ptype-string.exp: New file. * gdb.perf/gmonster2-runto-main.exp: New file. * gdb.perf/gmonster2-select-file.exp: New file. * gdb.perf/gmonster2.cc: New file. * gdb.perf/gmonster2.exp: New file.
2015-07-24Add perf testcase generator.Doug Evans4-0/+1740
gdb/testsuite/ChangeLog: * gdb.perf/README: New file. * lib/perftest.exp (tcl_string_list_to_python_list): New function. * lib/gen-perf-test.exp: New file.
2015-07-24PerfTest::assemble functions return results.Doug Evans7-19/+61
gdb/testsuite/ChangeLog: * lib/perftest.exp (PerfTest::compile): Unconditionally call body. (PerfTest::startup): New function. (PerfTest::run): Return result of calling body. (PerfTest::assemble): Rewrite. * gdb.perf/backtrace.exp (PerfTest::assemble): Update function result. * gdb.perf/disassemble.exp (PerfTest::assemble): Ditto. * gdb.perf/single-step.exp (PerfTest::assemble): Ditto. * gdb.perf/skip-prologue.exp (PerfTest::assemble): Ditto. * gdb.perf/solib.exp (PerfTest::assemble): Ditto.
2015-07-24lib/gdb.exp (clean_restart): Make executable optional.Doug Evans2-6/+19
gdb/testsuite/ChangeLog: * lib/gdb.exp (clean_restart): Make executable optional.
2015-07-24Clean up testsuite compiler_info support.Doug Evans4-14/+41
gdb/testsuite/ChangeLog: * gdb.base/watchpoint.exp (test_complex_watchpoint): Remove compiler_info references. * gdb.cp/temargs.exp: Ditto. * lib/gdb.exp: Unset compiler_info instead of setting to "unknown". (get_compiler_info): Early exit if already computed. Set compiler_info to "unknown" if there was a problem. (test_compiler_info): Add function comment. Call get_compiler_info.
2015-07-24Add parallel build support for perf tests.Doug Evans5-6/+96
gdb/testsuite/ChangeLog: * Makefile.in (check/%.exp): Pass directory for GDB_PARALLEL. (workers/%.worker, build-perf): New rule. (GDB_PERFTEST_MODE): New variable. (check-perf): Use it. (clean): Clean up gdb.perf parallel build subdirs. * lib/build-piece.exp: New file. * lib/cache.exp (gdb_do_cache): Include $GDB_PARALLEL in path name. * lib/gdb.exp (standard_output_file): Include $GDB_PARALLEL in path name. (standard_temp_file): Ditto. (GDB_PARALLEL handling): Make outputs,temp,cache directories as subdirs of $GDB_PARALLEL.
2015-07-24Workaround debian change to default value of --as-needed.Doug Evans3-6/+25
gdb/testsuite/ChangeLog: * lib/future.exp (gdb_default_target_compile): New option "early_flags". * lib/gdb.exp (gdb_compile): Undo debian's change in default of --as-needed.
2015-07-24Print data from individual perf runs.Doug Evans2-0/+13
gdb/testsuite/ChangeLog: * gdb.perf/lib/perftest/measure.py (MeasurementCpuTime::stop): Print result. (MeasurementWallTime::stop): Ditto. (MeasurementVmSizeTime::stop): Ditto.
2015-07-24Call gdb_exit before gdb_skip_xml_test on gdb.base/catch-syscall.expSergio Durigan Junior2-0/+6
The gdb_skip_xml_test procedure explicitly says that it cannot be invoked when GDB is running. However, the testcase for "catch syscall" is wrongly doing that, which is causing a failure on native-extended-gdbserver tests: new FAIL: gdb.base/catch-syscall.exp: set tdesc filename /home/gdb-buildbot/fedora-x86-64-3/fedora-x86-64-native-extended-gdbserver-m32/build/gdb/testsuite/outputs/gdb.base/catch-syscall/trivial.xml (got interactive prompt) This obvious commit fixes this, by calling gdb_exit before gdb_skip_xml_test. Checked in as obvious. gdb/testsuite/ChangeLog 2015-07-24 Sergio Durigan Junior <sergiodj@redhat.com> * gdb.base/catch-syscall.exp: Call gdb_exit before gdb_skip_xml_test.
2015-07-24Fix s390 GNU/Linux build after enum __ptrace_request changesPedro Alves2-10/+16
The buildbot noticed that the enum __ptrace_request series broke the s390 GNU/Linux build: ../../binutils-gdb/gdb/s390-linux-nat.c: In function 'fetch_regs': ../../binutils-gdb/gdb/s390-linux-nat.c:226:54: error: macro "ptrace" requires 4 arguments, but only 3 given if (ptrace (PTRACE_PEEKUSR_AREA, tid, (long) &parea) < 0) ^ ../../binutils-gdb/gdb/s390-linux-nat.c: In function 'store_regs': ../../binutils-gdb/gdb/s390-linux-nat.c:243:54: error: macro "ptrace" requires 4 arguments, but only 3 given if (ptrace (PTRACE_PEEKUSR_AREA, tid, (long) &parea) < 0) ^ Fix this the same way it's handled everywhere else -- just pass 0 as forth argument, which also handles non-varargs ptrace prototypes in non-glibc libcs, e.g., Bionic (if it ever gets a s390 port...). gdb/ChangeLog: 2015-07-24 Pedro Alves <palves@redhat.com> * s390-linux-nat.c (fetch_regs, store_regs, fetch_fpregs) (s390_stopped_by_watchpoint, s390_prepare_to_resume): Pass 0 as forth argument to ptrace PTRACE_PEEKUSR_AREA/PTRACE_POKEUSR_AREA.
2015-07-24gdb.python/py-events.exp and normal_stop observers orderingPedro Alves4-7/+14
I have patches that: 1 - make the CLI print stop info from a normal_stop observer, like MI does. 2 - happen to change the order in which the Python and CLI/TUI normal_stop observers are installed. With those in place, py-events.exp regresses like shown below [1], because the Python stop events are output before CLI prints stop info, instead of after, and the test doesn't expect that. With the same Python hooks, the order in which MI and Python events is emited today is already undefined, because MI also uses the normal_stop observer for output. I see no reason that we should in general define the order observers, interpreters and scripting languages get their turn at being notified of these events. So this patch makes the test cope with Python->CLI output order too. Tested on x86_64 Fedora 20. gdb/testsuite/ 2015-07-24 Pedro Alves <palves@redhat.com> * gdb.python/py-events.exp: Accept output between the stop event and the prompt. * gdb.python/py-evsignal.exp: Likewise. * gdb.python/py-evthreads.exp: Likewise. [1] - The regressions in question look like: Before said patches: (gdb) continue Continuing. event type: continue Breakpoint 2, first () at /home/pedro/gdb/mygit/build/../src/gdb/testsuite/gdb.python/py-events.c:30 30 for (i = 0; i < 2; i++) event type: stop event type: stop stop reason: breakpoint first breakpoint number: 2 breakpoint number: 2 breakpoint number: 3 all threads stopped (gdb) PASS: gdb.python/py-events.exp: continue After said patches: (gdb) continue Continuing. event type: continue event type: stop event type: stop stop reason: breakpoint first breakpoint number: 2 breakpoint number: 2 breakpoint number: 3 all threads stopped Breakpoint 2, first () at /home/pedro/gdb/mygit/build/../src/gdb/testsuite/gdb.python/py-events.c:30 30 for (i = 0; i < 2; i++) (gdb) FAIL: gdb.python/py-events.exp: continue
2015-07-24PR gdb/18717: internal error if non-leader thread exits processPedro Alves5-4/+104
If a non-leader thread exits the process while all other threads are ptrace-stopped, native gdb fails an assertion. The test added by this commit catches it: /home/pedro/gdb/mygit/build/../src/gdb/linux-nat.c:3198: internal-error: linux_nat_filter_event: Assertion `lp->resumed' failed. A problem internal to GDB has been detected, further debugging may prove unreliable. Quit this debugging session? (y or n) FAIL: gdb.threads/non-leader-exit-process.exp: program exits normally (GDB internal error) The fix is just to remove the assertion. With that out of the way, neither GDB not GDBserver handle this perfectly though, so I'm adding a KFAIL: (gdb) continue Continuing. [Thread 0x7ffff7fc0700 (LWP 15350) exited] No unwaited-for children left. Couldn't get registers: No such process. (gdb) KFAIL: gdb.threads/non-ldr-exit.exp: program exits normally (PRMS: gdb/18717) gdb/ChangeLog: 2015-07-24 Pedro Alves <palves@redhat.com> PR gdb/18717 * linux-nat.c (linux_nat_filter_event): Don't assert that the lwp is resumed, and extend the debug log. gdb/testsuite/ChangeLog: 2015-07-24 Pedro Alves <palves@redhat.com> PR gdb/18717 * gdb.threads/non-ldr-exit.c: New file. * gdb.threads/non-ldr-exit.exp: New file.
2015-07-24Fix failed exec error messagePedro Alves2-1/+5
Ref: https://sourceware.org/ml/gdb-patches/2015-07/msg00629.html This fixes the bogus command line in the error message shown when the SHELL environment variable points somewhere that's not something that resembles a shell: $ SHELL=/nonexisting gdb /home/pedro/a.out (gdb) r Starting program: /home/pedro/a.out - Cannot exec /home/pedro/a.out -c exec /home/pedro/a.out . + Cannot exec /nonexisting -c exec /home/pedro/a.out . Error: No such file or directory During startup program exited with code 127. (gdb) gdb/ChangeLog: 2015-07-24 Pedro Alves <palves@redhat.com> * fork-child.c (fork_inferior): Print argv[0] instead of exec_file.
2015-07-24Add 'U' suffix to silence GCC 6 warningH.J. Lu2-7/+17
GCC 6 warns: error: result of ‘63 << 26’ requires 33 bits to represent, but ‘int’ only has 32 bits [-Werror=shift-overflow=] on 0x3f << 26. This patch adds 'U' suffix to make integer constant unsigned. * alpha.c (OP_Jxx): Add 'U' suffix to make it unsigned. (OP_BSR): Likewise. (Jxx_FUNC_JMP): Likewise. (Jxx_FUNC_JSR): Likewise. (Jxx_FUNC_RET): Likewise. (Jxx_FUNC_JSR_COROUTINE): Likewise. (alpha_find_call): Replace 0x3f with 0x3fU.
2015-07-24Use 0xffffffffffffffffLL to silence GCC 6 warningH.J. Lu2-1/+5
GCC 6 warns: error: result of ‘4294967295ll << 32’ requires 65 bits to represent, but ‘long long int’ only has 64 bits [-Werror=shift-overflow=] on ((((bfd_signed_vma) 0xffffffff) << 32) | 0xffffffff). This patch replaces it with bfd_signed_vma) 0xffffffffffffffffLL. * stabs.c (parse_stab_range_type): Use 0xffffffffffffffffLL.
2015-07-24Fix the evaluation of RL78 complex relocs, by making immediate values be ↵Nick Clifton12-4/+59
computed relative to a new absolute symbol. gas * config/tc-rl78.c (rl78_abs_sym): New local variable. (md_begin): Initialise the new symbol. (OPIMM): Define the value to be relative to the new symbol and not the absolute section symbol. ld * emulparams/elf32rl78.sh (OTHER_SECTIONS): Provide a value for the _-rl78_abs__ symbol. tests * gas/all/struct.d: Allow for extra symbols in the output. * gas/macros/test1.d: Likewise. * gas/elf/elf.exp: Add an rl78 machine. * gas/elf/sections2e-rl78: New file. tests * binutils-all/localize-hidden-1.d: Allow for extra symbols in the output. * binutils-all/strip-11.d: Skip for the RL78.
2015-07-24Linux: sys/ptrace.h -> nat/gdb_ptrace.h everywherePedro Alves38-35/+81
So that we pick the enum __ptrace_request fix everywhere. gdb/ChangeLog: 2015-07-24 Pedro Alves <palves@redhat.com> * aarch64-linux-nat.c: Include nat/gdb_ptrace.h instead of sys/ptrace.h. * alpha-linux-nat.c: Likewise. * amd64-linux-nat.c: Likewise. * arm-linux-nat.c: Likewise. * hppa-linux-nat.c: Likewise. * i386-linux-nat.c: Likewise. * ia64-linux-nat.c: Likewise. * linux-fork.c: Likewise. * linux-nat.c: Likewise. * m32r-linux-nat.c: Likewise. * m68klinux-nat.c: Likewise. * mips-linux-nat.c: Likewise. * nat/linux-btrace.c: Likewise. * nat/linux-ptrace.c: Likewise. * nat/linux-ptrace.h * nat/mips-linux-watch.c: Likewise. * nat/x86-linux-dregs.c: Likewise. * ppc-linux-nat.c: Likewise. * s390-linux-nat.c: Likewise. * spu-linux-nat.c: Likewise. * tilegx-linux-nat.c: Likewise. * x86-linux-nat.c: Likewise. * xtensa-linux-nat.c: Likewise. gdb/gdbserver/ChangeLog: 2015-07-24 Pedro Alves <palves@redhat.c: Likewise.om> * linux-aarch64-low.c: Include nat/gdb_ptrace.h instead of sys/ptrace.h. * linux-arm-low.c: Likewise. * linux-cris-low.c: Likewise. * linux-crisv32-low.c: Likewise. * linux-low.c: Likewise. * linux-m68k-low.c: Likewise. * linux-mips-low.c: Likewise. * linux-nios2-low.c: Likewise. * linux-s390-low.c: Likewise. * linux-sparc-low.c: Likewise. * linux-tic6x-low.c: Likewise. * linux-tile-low.c: Likewise. * linux-x86-low.c: Likewise.
2015-07-24C++: handle glibc's ptrace(enum __ptrace_request, ...)Pedro Alves8-21/+215
Building in C++ mode issues ~40 warnings like this: ../../src/gdb/linux-nat.c: In function ‘int linux_handle_extended_wait(lwp_info*, int, int)’: ../../src/gdb/linux-nat.c:2016:51: warning: invalid conversion from ‘int’ to ‘__ptrace_request’ [-fpermissive] ptrace (PTRACE_GETEVENTMSG, pid, 0, &new_pid); The issue is that in glibc, ptrace's first parameter is an enum. That's not a problem if we pick the PTRACE_XXX requests from sys/ptrace.h, as those will be values of the corresponding enum. However, we have fallback definitions for PTRACE_XXX symbols when the system headers miss them (such as PTRACE_GETEVENTMSG above), and those are plain integer constants. E.g., nat/linux-ptrace.h: #define PTRACE_GETEVENTMSG 0x4201 One idea would be to fix this by defining those fallbacks like: -#define PTRACE_GETEVENTMSG 0x4201 +#define PTRACE_GETEVENTMSG ((enum __ptrace_request) 0x4201) However, while glibc's ptrace uses enum __ptrace_request for first parameter: extern long int ptrace (enum __ptrace_request __request, ...) __THROW; other libc's, like e.g., Android's bionic do not -- in that case, the first parameter is int: long ptrace(int request, pid_t pid, void * addr, void * data); So the fix I came up is to make configure/ptrace.m4 also detect the type of the ptrace's first parameter and defin PTRACE_TYPE_ARG1, as already does the for parameters 3-4, and then simply wrap ptrace with a macro that casts the first argument to the detected type. (I'm leaving adding a nicer wrapper for when we drop building in C). While this adds the wrapper, GNU/Linux files won't use it until the next patch, which makes all native GNU/Linux files include gdb_ptrace.h. gdb/ChangeLog: 2015-07-24 Pedro Alves <palves@redhat.com> * ptrace.m4 (ptrace tests): Test in C++ mode. Try with 'enum __ptrace_request as first parameter type instead of int. (PTRACE_TYPE_ARG1): Define. * nat/gdb_ptrace.h [!PTRACE_TYPE_ARG5] (ptrace): Define as wrapper that casts first argument to PTRACE_TYPE_ARG1. * config.in: Regenerate. * configure: Regenerate. gdb/gdbserver/ChangeLog: 2015-07-24 Pedro Alves <palves@redhat.com> * config.in: Regenerate. * configure: Regenerate.
2015-07-24Move gdb_ptrace.h to nat/Pedro Alves3-1/+7
Now that gdbserver's configure defines PTRACE_TYPE_ARGx etc., we'll be able to make gdbserver use gdb_ptrace.h too. Move it to the native target files directory. gdb/ChangeLog: 2015-07-24 Pedro Alves <palves@redhat.com> * gdb_ptrace.h: Move ... * nat/gdb_ptrace.h: ... here. * inf-ptrace.c: Adjust.
2015-07-24make gdbserver use the same ptrace autoconf checks as gdbPedro Alves9-69/+335
This factors the ptrace checks out of gdb's configure.ac to a new ptrace.m4 file, and then makes gdbserver's configure.ac source it too. gdb/ChangeLog: 2015-07-24 Pedro Alves <palves@redhat.com> * acinclude.m4: Include ptrace.m4. * configure.ac: Call GDB_AC_PTRACE and move ptrace checks ... * ptrace.m4: ... to this new file. gdb/gdbserver/ChangeLog: 2015-07-24 Pedro Alves <palves@redhat.com> * acinclude.m4: Include ../ptrace.m4. * configure.ac: Call GDB_AC_PTRACE. * config.in, configure: Regenerate.
2015-07-24Remove proc->priv->new_inferiorYao Qi3-15/+10
As the result of the previous patch, new_inferior is no longer used. This patch is to remove it. gdb/gdbserver: 2015-07-24 Yao Qi <yao.qi@linaro.org> * linux-low.c (linux_create_inferior): Remove setting to proc->priv->new_inferior. (linux_attach): Likewise. (linux_low_filter_event): Likewise. * linux-low.h (struct process_info_private) <new_inferior>: Remove.
2015-07-24Initialise target descrption after skipping extra traps for --wrapperYao Qi8-13/+84
Nowadays, when --wrapper is used, GDBserver skips extra traps/stops in the wrapper program, and stops at the first instruction of the program to be debugged. However, GDBserver created target description in the first stop of inferior, and the executable of the inferior is the wrapper program rather than the program to be debugged. In this way, the target description can be wrong if the architectures of wrapper program and program to be debugged are different. This is shown by some fails in gdb.server/wrapper.exp on buildbot. We are testing i686-linux GDB (Fedora-i686) on an x86_64-linux box (fedora-x86-64-4) in buildbot, such configuration causes fails in gdb.server/wrapper.exp like this: spawn /home/gdb-buildbot-2/fedora-x86-64-4/fedora-i686/build/gdb/testsuite/../../gdb/gdbserver/gdbserver --once --wrapper env TEST=1 -- :2346 /home/gdb-buildbot-2/fedora-x86-64-4/fedora-i686/build/gdb/testsuite/outputs/gdb.server/wrapper/wrapper Process /home/gdb-buildbot-2/fedora-x86-64-4/fedora-i686/build/gdb/testsuite/outputs/gdb.server/wrapper/wrapper created; pid = 8795 Can't debug 64-bit process with 32-bit GDBserver Exiting target remote localhost:2346 localhost:2346: Connection timed out. (gdb) FAIL: gdb.server/wrapper.exp: setting breakpoint at marker See https://sourceware.org/ml/gdb-testers/2015-q3/msg01541.html In this case, program to be debugged ("wrapper") is 32-bit but wrapper program ("/usr/bin/env") is 64-bit, so GDBserver gets the 64-bit target description instead of 32-bit. The root cause of this problem is that GDBserver creates target description too early, and the rationale of fix could be creating target description once the GDBserver skips extra traps and inferior stops at the first instruction of the program we want to debug. IOW, when GDBserver skips extra traps, the inferior's tdesc is NULL, and mywait and its callees shouldn't use inferior's tdesc, so in this patch, we skip code that requires register access, see changes in linux_resume_one_lwp_throw and need_step_over_p. In linux_low_filter_event, if target description isn't initialised and GDBserver attached the process, we create target description immediately, because GDBserver don't have to skip extra traps for attach, IOW, it makes no sense to use --attach and --wrapper together. Otherwise, the process is launched by GDBserver, we keep the status pending, and return. After GDBserver skipped extra traps in start_inferior, we call a target_ops hook arch_setup to initialise target description there. gdb/gdbserver: 2015-07-24 Yao Qi <yao.qi@linaro.org> * linux-low.c (linux_arch_setup): New function. (linux_low_filter_event): If proc->tdesc is NULL and proc->attached is true, call the_low_target.arch_setup. Otherwise, keep status pending, and return. (linux_resume_one_lwp_throw): Don't call get_pc if thread->while_stepping isn't NULL. Don't call get_thread_regcache if proc->tdesc is NULL. (need_step_over_p): Return 0 if proc->tdesc is NULL. (linux_target_ops): Install arch_setup. * server.c (start_inferior): Call the_target->arch_setup. * target.h (struct target_ops) <arch_setup>: New field. (target_arch_setup): New marco. * lynx-low.c (lynx_target_ops): Update. * nto-low.c (nto_target_ops): Update. * spu-low.c (spu_target_ops): Update. * win32-low.c (win32_target_ops): Update.
2015-07-24Set proc->priv->new_inferior out of linux_add_processYao Qi2-5/+15
Nowadays, we set proc->priv->new_inferior to 1 inside linux_add_process, and new_inferior is used as a flag to initialise target description later. linux_add_process is used for the three cases, fork/vfork event (handle_extended_wait), run the program (linux_create_inferior), and attach to the process (linux_attach). In the first case, the child's target description is copied from parent's, so we don't need to initialise target description again later, which means we don't need to set proc->priv->new_inferior to 1 in this case. For the rest of two cases, we need this flag. This patch move the code setting proc->priv->new_inferior to 1 inside linux_add_process to linux_create_inferior and linux_attach. No functionality is changed. gdb/gdbserver: 2015-07-24 Yao Qi <yao.qi@linaro.org> * linux-low.c (linux_add_process): Don't set proc->priv->new_inferior. (linux_create_inferior): Set proc->priv->new_inferior to 1. (linux_attach): Likewise.
2015-07-24Refactor start_inferiorYao Qi2-12/+15
This patch is to refactor function start_inferior that signal_pid is return in one place. gdb/gdbserver: 2015-07-24 Yao Qi <yao.qi@linaro.org> * server.c (start_inferior): Code refactor.
2015-07-24Test --wrapper when restarting process.Yao Qi2-0/+25
My patch series will affect the code starting inferior in GDBserver (callees of start_inferior), so we need tests to cover how start_inferior is used in different cases. In server.c:process_serial_event, start_inferior is used when GBDserver receives 'R' packet, and this patch is to add a test for this path, and see how --wrapper option works when the process is restarted. gdb/testsuite: 2015-07-24 Yao Qi <yao.qi@linaro.org> * gdb.server/ext-wrapper.exp: Test --wrapper option when restarting process.
2015-07-24Set general_thread after restartYao Qi4-1/+87
When I run gdb.server/ext-restart.exp, I get the following GDB internal error, run^M The program being debugged has been started already.^M Start it from the beginning? (y or n) y^M Sending packet: $vKill;53c5#3d...Packet received: OK^M Packet vKill (kill) is supported^M Sending packet: $vFile:close:6#b6...Packet received: F0^M Sending packet: $vFile:close:3#b3...Packet received: F0^M Starting program: /scratch/yao/gdb/build-git/x86_64/gdb/testsuite/gdb.server/ext-restart ^M Sending packet: $QDisableRandomization:1#cf...Packet received: OK^M Sending packet: $R0#82...Sending packet: $qC#b4...Packet received: QCp53c5.53c5^M <-- [1] Sending packet: $qAttached:53c5#c9...Packet received: E01^M warning: Remote failure reply: E01^M .... 0x00002aaaaaaac2d0 in ?? () from target:/lib64/ld-linux-x86-64.so.2^M /home/yao/SourceCode/gnu/gdb/git/gdb/thread.c:88: internal-error: inferior_thread: Assertion `tp' failed.^M A problem internal to GDB has been detected,^M further debugging may prove unreliable.^M Quit this debugging session? (y or n) FAIL: gdb.server/ext-restart.exp: run to main (GDB internal error) Resyncing due to internal error. the test is to restart the program, to make sure GDBserver handles packet 'R' correctly. From the GDBserver output, we can see, Remote debugging from host 127.0.0.1^M Process /scratch/yao/gdb/build-git/x86_64/gdb/testsuite/gdb.server/ext-restart created; pid = 21445^M GDBserver restarting^M Process /scratch/yao/gdb/build-git/x86_64/gdb/testsuite/gdb.server/ext-restart created; pid = 21446^M Killing process(es): 21446 we first start process 21445(0x53c5), kill it and restart a new process 21446. However, in the gdb output above [1], we can see that the reply of qC is still the old process id rather than the new one. Looks general_thread isn't up to date after GDBserver receives R packet. This patch is to update general_thread after call start_inferior. gdb/gdbserver: 2015-07-24 Yao Qi <yao.qi@linaro.org> * server.c (process_serial_event): Set general_thread. gdb/testsuite: 2015-07-24 Yao Qi <yao.qi@linaro.org> * gdb.server/ext-restart.exp: New file.
2015-07-24Test --wrapper in extended-remoteYao Qi3-5/+67
We didn't test --wrapper option in extended-remote before, this patch is to add a test case for it. In order to pass option --wrapper to gdbserver in extended-remote, I add arg in gdbserver_start_extended, and its default value is "", so that other places use gdbserver_start_extended don't have to be updated. gdb/testsuite: 2015-07-24 Yao Qi <yao.qi@linaro.org> * lib/gdbserver-support.exp (gdbserver_start_extended): Add argument options. * gdb.server/ext-wrapper.exp: New file.
2015-07-24Replace -g with -ggdb3 in ld compress testsH.J. Lu4-12/+18
Use -ggdb3 to generate .debug_macro sections, which are bigger and are always compressed. * ld-elf/compress.exp (build_tests): Replace -g with -ggdb3. * ld-elf/zlibbegin.rS: Also expect "GC". * ld-elf/zlibnormal.rS: Likewise.
2015-07-24Remove leading/trailing white spaces in ChangeLogH.J. Lu51-1421/+1421
2015-07-24Correct reloc section nameAlan Modra2-1/+7
* elf.c (_bfd_elf_assign_file_positions_for_non_load): Use .rela prefix for reloc section corresponding to rela section associated with renamed debug section.
2015-07-24bfd_get_section_by_name_if hash chain traversalAlan Modra2-8/+10
This function stops too soon, as I found when the hash chain happened to contain two .debug_macro sections and a .bss section: .debug_macro -> .bss -> .debug_macro * section.c (bfd_get_section_by_name_if): Iterate over entire hash chain.
2015-07-24Automatic date update in version.inGDB Administrator1-1/+1
2015-07-232015-07-23 Ian Coolidge <icoolidge@google.com>Han Shen3-3/+15
Plumb --pic-veneer option for gold. gold/ChangeLog: * arm.cc (Reloc_stub::stub_type_for_reloc): Plumb to stub generation. * options.h (General_options): Add --pic-veneer option.
2015-07-23Fix DT_MIPS_RLD_MAP_REL tag for n64 target and 32-bit host.Joseph Myers2-1/+7
For the case of MIPS n64 target and 32-bit host, the computation of the DT_MIPS_RLD_MAP_REL tag involves sdyn->output_section->vma + sdyn->output_offset (64-bit) being added to b (32-bit host pointer), so losing the high part and resulting in an incorrect DT_MIPS_RLD_MAP_REL tag, and all dynamically linked glibc tests failing for n64. This patch fixes this (spot-tested with glibc tests; however, I don't have a self-contained testcase for this bug). * elfxx-mips.c (_bfd_mips_elf_finish_dynamic_sections) <DT_MIPS_RLD_MAP_REL>: Add target address to host address difference, not to host pointer.