aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2014-02-09powerpc relax_section and section contents cacheAlan Modra5-108/+100
This patch provides a means for backend relax_section support to increase the size of a section without needing to reallocate section contents. This helps reduce memory usage when the added space does not need to be written in relax_section, as is the case for powerpc. Writing the stubs later means a few tweaks are needed in the powerpc relocate_section function, but also removes some code duplication since the extra ld -r relocs can be written there too. * elf-bfd.h (struct elf_backend_data): Add caches_rawsize. * elfxx-target.h (elf_backend_caches_rawsize): Define. (elfNN_bed): Init new field. * elflink.c (elf_link_input_bfd): Handle caches_rawsize. * elf32-ppc.c (shared_stub_entry): Zero addi offset. (ppc_elf_relax_section): Don't reallocate section here, write stubs, or write out relocs for ld -r here.. (ppc_elf_relocate_section): ..instead write stubs here, and use existing code to write out relocs for ld -r. Fix offset adjustment on reloc for little-endian. (elf_backend_caches_rawsize): Define.
2014-02-09daily updateAlan Modra1-1/+1
2014-02-08A phony target should not be a prerequisite of a real target fileMark Kettenis2-3/+6
gdb/ChangeLog: * Makefile.in (all-lib): Remove. ($(LIBGNU) $(GNULIB_H)): Replace with gits of remove all-lib target.
2014-02-08Fix typo in test nameAndreas Schwab2-1/+5
* gdb.python/py-framefilter.exp: Fix typo.
2014-02-08Test no =breakpoint-modified is emitted for modifications from MI commandsYao Qi2-0/+23
As design, =breakpoint-modified isn't emitted when breakpoints are modified by MI commands. This patch is to add tests for this. gdb/testsuite: 2014-02-08 Yao Qi <yao@codesourcery.com> * gdb.mi/mi-breakpoint-changed.exp (test_insert_delete_modify): Test that no =breakpoint-modified is emitted when breakpoints are modified through MI commands.
2014-02-08daily updateAlan Modra1-1/+1
2014-02-07add forgotten entry in previous checkinDoug Evans1-0/+1
(active_ext_lang_state): Fix typo in comment.
2014-02-07 * extension-priv.h (extension_language_script_ops): Add comment.Doug Evans2-3/+14
(extension_language_ops): Add comment.
2014-02-07Make sure we don't resume the stepped thread by accident.Pedro Alves5-1/+281
Say: <stopped at a breakpoint in thread 2> (gdb) thread 3 (gdb) step The above triggers the prepare_to_proceed/deferred_step_ptid process, which switches back to thread 2, to step over its breakpoint before getting back to thread 3 and "step" it. If while stepping over the breakpoint in thread 2, a signal arrives, and it is set to pass/nostop, we'll set a step-resume breakpoint at the supposed signal-handler resume address, and call keep_going. The problem is that we were supposedly stepping thread 3, and that keep_going delivers a signal to thread 2, and due to scheduler-locking off, resumes everything else, _including_ thread 3, the thread we want stepping. This means that we lose control of thread 3 until the next event, when we stop everything. The end result for the user, is that GDB lost control of the "step". Here's the current infrun debug output of the above, with the testcase in the patch below: infrun: clear_proceed_status_thread (Thread 0x2aaaab8f5700 (LWP 11663)) infrun: clear_proceed_status_thread (Thread 0x2aaaab6f4700 (LWP 11662)) infrun: clear_proceed_status_thread (Thread 0x2aaaab4f2b20 (LWP 11659)) infrun: proceed (addr=0xffffffffffffffff, signal=144, step=1) infrun: prepare_to_proceed (step=1), switched to [Thread 0x2aaaab6f4700 (LWP 11662)] infrun: resume (step=1, signal=0), trap_expected=1, current thread [Thread 0x2aaaab6f4700 (LWP 11662)] at 0x40098f infrun: wait_for_inferior () infrun: target_wait (-1, status) = infrun: 11659 [Thread 0x2aaaab6f4700 (LWP 11662)], infrun: status->kind = stopped, signal = SIGUSR1 infrun: infwait_normal_state infrun: TARGET_WAITKIND_STOPPED infrun: stop_pc = 0x40098f infrun: random signal 30 Program received signal SIGUSR1, User defined signal 1. infrun: signal arrived while stepping over breakpoint infrun: inserting step-resume breakpoint at 0x40098f infrun: resume (step=0, signal=30), trap_expected=0, current thread [Thread 0x2aaaab6f4700 (LWP 11662)] at 0x40098f ^^^ this is a wildcard resume. infrun: prepare_to_wait infrun: target_wait (-1, status) = infrun: 11659 [Thread 0x2aaaab6f4700 (LWP 11662)], infrun: status->kind = stopped, signal = SIGTRAP infrun: infwait_normal_state infrun: TARGET_WAITKIND_STOPPED infrun: stop_pc = 0x40098f infrun: BPSTAT_WHAT_STEP_RESUME infrun: resume (step=1, signal=0), trap_expected=1, current thread [Thread 0x2aaaab6f4700 (LWP 11662)] at 0x40098f ^^^ step-resume hit, meaning the handler returned, so we go back to stepping thread 3. infrun: prepare_to_wait infrun: target_wait (-1, status) = infrun: 11659 [Thread 0x2aaaab6f4700 (LWP 11662)], infrun: status->kind = stopped, signal = SIGTRAP infrun: infwait_normal_state infrun: TARGET_WAITKIND_STOPPED infrun: stop_pc = 0x40088b infrun: switching back to stepped thread infrun: Switching context from Thread 0x2aaaab6f4700 (LWP 11662) to Thread 0x2aaaab8f5700 (LWP 11663) infrun: resume (step=1, signal=0), trap_expected=0, current thread [Thread 0x2aaaab8f5700 (LWP 11663)] at 0x400938 infrun: prepare_to_wait infrun: target_wait (-1, status) = infrun: 11659 [Thread 0x2aaaab8f5700 (LWP 11663)], infrun: status->kind = stopped, signal = SIGTRAP infrun: infwait_normal_state infrun: TARGET_WAITKIND_STOPPED infrun: stop_pc = 0x40093a infrun: keep going infrun: resume (step=1, signal=0), trap_expected=0, current thread [Thread 0x2aaaab8f5700 (LWP 11663)] at 0x40093a infrun: prepare_to_wait infrun: target_wait (-1, status) = infrun: 11659 [Thread 0x2aaaab8f5700 (LWP 11663)], infrun: status->kind = stopped, signal = SIGTRAP infrun: infwait_normal_state infrun: TARGET_WAITKIND_STOPPED infrun: stop_pc = 0x40091e infrun: stepped to a different line infrun: stop_stepping [Switching to Thread 0x2aaaab8f5700 (LWP 11663)] 69 (*myp) ++; /* set breakpoint child_two here */ ^^^ we stopped at the wrong line. We still stepped a bit because the test is running in a loop, and when we got back to stepping thread 3, it happened to be in the stepping range. (The loop increments a counter, and the test makes sure it increments exactly once. Without the fix, the counter increments a bunch, since the user-stepped thread runs free without GDB noticing.) The fix is to switch to the stepping thread before continuing for the step-resume breakpoint. gdb/ 2014-02-07 Pedro Alves <palves@redhat.com> * infrun.c (handle_signal_stop) <signal arrives while stepping over a breakpoint>: Switch back to the stepping thread. gdb/testsuite/ 2014-02-07 Pedro Alves <pedro@codesourcery.com> Pedro Alves <palves@redhat.com> * gdb.threads/step-after-sr-lock.c: New file. * gdb.threads/step-after-sr-lock.exp: New file.
2014-02-07Fix gdb.threads/stepi-random-signal.exp on software single-step targets.Pedro Alves2-0/+9
Currently on software single-step Linux targets we get: (gdb) PASS: gdb.threads/stepi-random-signal.exp: before stepi: get hexadecimal valueof "$pc" stepi infrun: clear_proceed_status_thread (Thread 0x7ffff7fca700 (LWP 7073)) infrun: clear_proceed_status_thread (Thread 0x7ffff7fcb740 (LWP 7069)) infrun: proceed (addr=0xffffffffffffffff, signal=GDB_SIGNAL_DEFAULT, step=1) infrun: resume (step=1, signal=GDB_SIGNAL_0), trap_expected=0, current thread [Thread 0x7ffff7fcb740 (LWP 7069)] at 0x400700 infrun: wait_for_inferior () infrun: target_wait (-1, status) = infrun: 7069 [Thread 0x7ffff7fcb740 (LWP 7069)], infrun: status->kind = stopped, signal = GDB_SIGNAL_TRAP infrun: infwait_normal_state infrun: TARGET_WAITKIND_STOPPED infrun: stop_pc = 0x400704 infrun: software single step trap for Thread 0x7ffff7fcb740 (LWP 7069) infrun: stepi/nexti infrun: stop_stepping 44 while (counter != 0) (gdb) FAIL: gdb.threads/stepi-random-signal.exp: stepi (no random signal) Vs hardware-step targets: (gdb) PASS: gdb.threads/stepi-random-signal.exp: before stepi: get hexadecimal valueof "$pc" stepi infrun: clear_proceed_status_thread (Thread 0x7ffff7fca700 (LWP 9565)) infrun: clear_proceed_status_thread (Thread 0x7ffff7fcb740 (LWP 9561)) infrun: proceed (addr=0xffffffffffffffff, signal=GDB_SIGNAL_DEFAULT, step=1) infrun: resume (step=1, signal=GDB_SIGNAL_0), trap_expected=0, current thread [Thread 0x7ffff7fcb740 (LWP 9561)] at 0x400700 infrun: wait_for_inferior () infrun: target_wait (-1, status) = infrun: 9561 [Thread 0x7ffff7fcb740 (LWP 9561)], infrun: status->kind = stopped, signal = GDB_SIGNAL_CHLD infrun: infwait_normal_state infrun: TARGET_WAITKIND_STOPPED infrun: stop_pc = 0x400700 infrun: random signal (GDB_SIGNAL_CHLD) infrun: random signal, keep going infrun: resume (step=1, signal=GDB_SIGNAL_CHLD), trap_expected=0, current thread [Thread 0x7ffff7fcb740 (LWP 9561)] at 0x400700 infrun: prepare_to_wait infrun: target_wait (-1, status) = infrun: 9561 [Thread 0x7ffff7fcb740 (LWP 9561)], infrun: status->kind = stopped, signal = GDB_SIGNAL_TRAP infrun: infwait_normal_state infrun: TARGET_WAITKIND_STOPPED infrun: stop_pc = 0x400704 infrun: stepi/nexti infrun: stop_stepping 44 while (counter != 0) (gdb) PASS: gdb.threads/stepi-random-signal.exp: stepi The test turns on infrun debug, does a stepi while a SIGCHLD is pending, and checks whether the "random signal" paths in infrun.c are taken. On the software single-step variant above, those paths were not taken. This is a test bug. The Linux backend short-circuits reporting signals that are set to pass/nostop/noprint. But _only_ if the thread is _not_ single-stepping. So on hardware-step targets, even though the signal is set to pass/nostop/noprint by default, the thread is indeed told to single-step, and so the core sees the signal. On the other hand, on software single-step architectures, the backend never actually gets a single-step request (steps are emulated by setting a breakpoint at the next pc, and then the target told to continue, not step). So the short-circuiting code triggers and the core doesn't see the signal. The fix is to make the test be sure the target doesn't bypass reporting the signal to the core. Tested on x86_64 Fedora 17, both with and without a series that implements software single-step for x86_64. gdb/testsuite/ 2014-02-07 Pedro Alves <palves@redhat.com> * gdb.threads/stepi-random-signal.exp: Set SIGCHLD to print.
2014-02-07 * cache.c (bfd_cache_max_open): Cast RLIM_INFINITY to rlim_t.Rainer Orth2-1/+5
2014-02-07Return early in target_xfer_partial when LEN is zero.Yao Qi2-0/+8
Nowadays, argument LEN of to_xfer_partial can be zero in some cases, and each implementation may do nothing and return zero, indicating transfer is done. That is fine. However, when we change to_xfer_partial to return target_xfer_status, we have to check every return value of most of to_xfer_partial implementations, return TARGET_XFER_DONE if return value is zero. This patch simplifies this by checking LEN in target_xfer_partial, and return 0 if LEN is zero. Regression tested on x86_84-linux. Is it OK? gdb: 2014-02-07 Yao Qi <yao@codesourcery.com> * target.c (target_xfer_partial): Return zero if LEN is zero.
2014-02-07Replace -1 with TARGET_XFER_E_IOYao Qi23-71/+105
Hi, This patch replaces -1 with TARGET_XFER_E_IO in the implementations of to_xfer_partial and their callees. This change is quite mechanical, and makes the next patch shorter. gdb: 2014-02-07 Yao Qi <yao@codesourcery.com> * auxv.c (procfs_xfer_auxv): Replace -1 with TARGET_XFER_E_IO. (ld_so_xfer_auxv): Likewise. * bfd-target.c (target_bfd_xfer_partial): Likewise. * bsd-kvm.c (bsd_kvm_xfer_partial): Likewise. * corelow.c (core_xfer_partial): Likewise. * ctf.c (ctf_xfer_partial): Likewise. * darwin-nat.c (darwin_read_dyld_info): Likewise. (darwin_xfer_partial): Likewise. * exec.c (exec_xfer_partial): Likewise. * gnu-nat.c (gnu_xfer_partial): Likewise. * ia64-hpux-nat.c (ia64_hpux_xfer_uregs): Likewise. * inf-ptrace.c (inf_ptrace_xfer_partial): Likewise. * inf-ttrace.c (inf_ttrace_xfer_partial): Likewise. * linux-nat.c (linux_xfer_siginfo): Likewise. (linux_proc_xfer_spu): Likewise. * procfs.c (procfs_xfer_partial): Likewise. * record-full.c (record_full_xfer_partial): Likewise. (record_full_core_xfer_partial): Likewise. * remote-sim.c (gdbsim_xfer_partial): Likewise. * remote.c (remote_write_qxfer): Likewise. (remote_write_qxfer, remote_read_qxfer): Likewise. (remote_xfer_partial): Likewise. * rs6000-nat.c (rs6000_xfer_partial): Likewise. (rs6000_xfer_shared_libraries): Likewise. * sparc-nat.c (sparc_xfer_wcookie): Likewise. * spu-linux-nat.c (spu_proc_xfer_spu): Likewise. (spu_xfer_partial): Likewise. * target.c (memory_xfer_partial_1): Likewise. * tracepoint.c (tfile_xfer_partial): Likewise. * windows-nat.c (windows_xfer_shared_libraries): Likewise. (windows_xfer_partial): Likewise.
2014-02-07core_xfer_shared_libraries and core_xfer_shared_libraries_aix returns ULONGESTYao Qi7-22/+41
This patch documents the return value of core_xfer_shared_libraries_aix and core_xfer_shared_libraries gdbarch methods, and changes return type to ULONGEST from LONGEST. In a following patch, core_xfer_partial. is changed to check their return values and return an appropriate target_xfer_status. gdb: 2014-02-07 Yao Qi <yao@codesourcery.com> * gdbarch.sh (core_xfer_shared_libraries): Returns ULONGEST. Add comments. (core_xfer_shared_libraries_aix): Likewise. * gdbarch.c, gdbarch.h: Regenerated. * i386-cygwin-tdep.c (windows_core_xfer_shared_libraries): Return ULONGEST. Change 'len_avail' type to ULONGEST. * rs6000-aix-tdep.c (rs6000_aix_ld_info_to_xml): Likewise. * rs6000-aix-tdep.h (rs6000_aix_ld_info_to_xml): Update declaration. (rs6000_aix_core_xfer_shared_libraries_aix): Return ULONGEST.
2014-02-07Tweak in memory_errorYao Qi2-3/+9
This patch adds a local variable exception of type 'enum errors' and pass it to throw_error, because 'err' is of type 'enum target_xfer_error', and we're abusing it to store an 'enum errors'. gdb: 2014-02-07 Yao Qi <yao@codesourcery.com> * corefile.c (memory_error): Get 'exception' from ERR and pass 'exception' to throw_error.
2014-02-06Fix problem where -u is ignored when a weak undef is seen.Cary Coutant6-41/+224
When the linker has a weak undefined symbol, it normally does not select an archive library member just to satisfy the reference. If the same symbol is also listed in a -u option, however, we should select the archive library member. This patch reorders the code in Library_base::should_include_member so that the additional checks are performed in the case of a weak undef. gold/ 2014-02-06 Cary Coutant <ccoutant@google.com> * archive.cc (Library_base::should_include_member): Reorder code to check for -u option if a weak undef has already been seen. * testsuite/Makefile.am (weak_undef_test_2): New test case. * testsuite/Makefile.in: Regenerate. * testsuite/weak_undef_file3.cc: New file. * testsuite/weak_undef_file4.cc: New file. * testsuite/weak_undef_test_2.cc: New file.
2014-02-07daily updateAlan Modra1-1/+1
2014-02-06Fix i386-sse-stack-align.exp regression since GDB_PARALLEL.Jan Kratochvil2-1/+6
gdb/testsuite/ 2014-02-06 Jan Kratochvil <jan.kratochvil@redhat.com> Fix i386-sse-stack-align.exp regression since GDB_PARALLEL. * gdb.arch/i386-sse-stack-align.exp: Use standard_output_file.
2014-02-06binutils/ChangeLog:Andrew Pinski6-0/+15
2014-02-06 Andrew Pinski <apinski@cavium.com> * readelf.c (get_machine_flags): Handle E_MIPS_MACH_OCTEON3 case. elfcpp/ChangeLog: 2014-02-06 Andrew Pinski <apinski@cavium.com> * mips.h (E_MIPS_MACH_OCTEON3): New enum constant. include/elf/ChangeLog: 2014-02-06 Andrew Pinski <apinski@cavium.com> * mips.h (E_MIPS_MACH_OCTEON3): New machine flag.
2014-02-06indentation fixlet in gdbserver/Makefile.in.Tom Tromey2-1/+5
This fixes a minor indentation issue in gdbserver/Makefile.in. 2014-02-06 Tom Tromey <tromey@redhat.com> * Makefile.in (SFILES): Fix indentation.
2014-02-06Add readelf support for dumping gold version note sections.Cary Coutant2-0/+16
binutils/ PR binutils/16444 * readelf.c (print_gnu_note): Add support for NT_GNU_GOLD_VERSION.
2014-02-06 PR target/59788Rainer Orth2-1/+7
* ltmain.sh (opt_duplicate_compiler_generated_deps): Enable on *solaris2*.
2014-02-05Fix issues with gold undefined symbol diagnostics.Cary Coutant3-8/+24
PR binutils/15435 complains that gold issues a visibility error for an weak undefined symbol with hidden visibility. The message should be suppressed if the symbol is a weak undef. An earlier patch to add an extra note about key functions when a class's vtable symbol is undefined missed a case where the reference to the vtable came from a shared library. This patch moves the check to a lower-level routine that catches both cases. gold/ 2014-02-05 Cary Coutant <ccoutant@google.com> * errors.cc (Errors::undefined_symbol): Move undef vtable symbol check to here. * target-reloc.h (is_strong_undefined): New function. (relocate_section): Move undef vtable symbol check from here. Check for is_strong_undefined.
2014-02-05Add missing gold/ChangeLog entry.Cary Coutant1-0/+30
2014-02-05fix copyright year in new files in previous checkinDoug Evans4-4/+4
2014-02-05Extension Language APIDoug Evans36-723/+2290
* configure.ac (libpython checking): Remove all but python.o from CONFIG_OBS. Remove all but python.c from CONFIG_SRCS. * configure: Regenerate. * Makefile.in (SFILES): Add extension.c. (HFILES_NO_SRCDIR): Add extension.h, extension-priv.h (COMMON_OBS): Add extension.o. * extension.h: New file. * extension-priv.h: New file. * extension.c: New file. * python/python-internal.h: #include "extension.h". (gdbpy_auto_load_enabled): Declare. (gdbpy_apply_val_pretty_printer): Declare. (gdbpy_apply_frame_filter): Declare. (gdbpy_preserve_values): Declare. (gdbpy_breakpoint_cond_says_stop): Declare. (gdbpy_breakpoint_has_cond): Declare. (void source_python_script_for_objfile): Delete. * python/python.c: #include "extension-priv.h". Delete inclusion of "observer.h". (extension_language_python): Moved here and renamed from script_language_python in py-auto-load.c. Redefined to be of type extension_language_defn. (python_extension_script_ops): New global. (python_extension_ops): New global. (struct python_env): New member previous_active. (restore_python_env): Call restore_active_ext_lang. (ensure_python_env): Call set_active_ext_lang. (gdbpy_clear_quit_flag): Renamed from clear_quit_flag, made static. New arg extlang. (gdbpy_set_quit_flag): Renamed from set_quit_flag, made static. New arg extlang. (gdbpy_check_quit_flag): Renamed from check_quit_flag, made static. New arg extlang. (gdbpy_eval_from_control_command): Renamed from eval_python_from_control_command, made static. New arg extlang. (gdbpy_source_script) Renamed from source_python_script, made static. New arg extlang. (gdbpy_before_prompt_hook): Renamed from before_prompt_hook. Change result to int. New arg extlang. (gdbpy_source_objfile_script): Renamed from source_python_script_for_objfile, made static. New arg extlang. (gdbpy_start_type_printers): Renamed from start_type_printers, made static. New args extlang, extlang_printers. Change result type to "void". (gdbpy_apply_type_printers): Renamed from apply_type_printers, made static. New arg extlang. Rename arg printers to extlang_printers and change type to ext_lang_type_printers *. (gdbpy_free_type_printers): Renamed from free_type_printers, made static. Replace argument arg with extlang, extlang_printers. (!HAVE_PYTHON, eval_python_from_control_command): Delete. (!HAVE_PYTHON, source_python_script): Delete. (!HAVE_PYTHON, gdbpy_should_stop): Delete. (!HAVE_PYTHON, gdbpy_breakpoint_has_py_cond): Delete. (!HAVE_PYTHON, start_type_printers): Delete. (!HAVE_PYTHON, apply_type_printers): Delete. (!HAVE_PYTHON, free_type_printers): Delete. (_initialize_python): Delete call to observer_attach_before_prompt. (finalize_python): Set/restore active extension language. (gdbpy_finish_initialization) Renamed from finish_python_initialization, made static. New arg extlang. (gdbpy_initialized): New function. * python/python.h: #include "extension.h". Delete #include "value.h", "mi/mi-cmds.h". (extension_language_python): Declare. (GDBPY_AUTO_FILE_NAME): Delete. (enum py_bt_status): Moved to extension.h and renamed to ext_lang_bt_status. (enum frame_filter_flags): Moved to extension.h. (enum py_frame_args): Moved to extension.h and renamed to ext_lang_frame_args. (finish_python_initialization): Delete. (eval_python_from_control_command): Delete. (source_python_script): Delete. (apply_val_pretty_printer): Delete. (apply_frame_filter): Delete. (preserve_python_values): Delete. (gdbpy_script_language_defn): Delete. (gdbpy_should_stop, gdbpy_breakpoint_has_py_cond): Delete. (start_type_printers, apply_type_printers, free_type_printers): Delete. * auto-load.c: #include "extension.h". (GDB_AUTO_FILE_NAME): Delete. (auto_load_gdb_scripts_enabled): Make public. New arg extlang. (script_language_gdb): Delete, moved to extension.c and renamed to extension_language_gdb. (source_gdb_script_for_objfile): Delete. (auto_load_pspace_info): New member unsupported_script_warning_printed. (loaded_script): Change type of language member to struct extension_language_defn *. (init_loaded_scripts_info): Initialize unsupported_script_warning_printed. (maybe_add_script): Make static. Change type of language arg to struct extension_language_defn *. (clear_section_scripts): Reset unsupported_script_warning_printed. (auto_load_objfile_script_1): Rewrite to use extension language API. (auto_load_objfile_script): Make public. Remove support-compiled-in and auto-load-enabled checks, moved to auto_load_scripts_for_objfile. (source_section_scripts): Rewrite to use extension language API. (load_auto_scripts_for_objfile): Rewrite to use auto_load_scripts_for_objfile. (collect_matching_scripts_data): Change type of language member to struct extension_language_defn *. (auto_load_info_scripts): Change type of language arg to struct extension_language_defn *. (unsupported_script_warning_print): New function. (script_not_found_warning_print): Make static. (_initialize_auto_load): Rewrite construction of scripts-directory help. * auto-load.h (struct objfile): Add forward decl. (struct script_language): Delete. (struct auto_load_pspace_info): Add forward decl. (struct extension_language_defn): Add forward decl. (maybe_add_script): Delete. (auto_load_objfile_script): Declare. (script_not_found_warning_print): Delete. (auto_load_info_scripts): Update prototype. (auto_load_gdb_scripts_enabled): Declare. * python/py-auto-load.c (gdbpy_auto_load_enabled): Renamed from auto_load_python_scripts_enabled and made public. (script_language_python): Delete, moved to python.c. (gdbpy_script_language_defn): Delete. (info_auto_load_python_scripts): Update to use extension_language_python. * breakpoint.c (condition_command): Replace call to gdbpy_breakpoint_has_py_cond with call to get_breakpoint_cond_ext_lang. (bpstat_check_breakpoint_conditions): Replace call to gdbpy_should_stop with call to breakpoint_ext_lang_cond_says_stop. * python/py-breakpoint.c (gdbpy_breakpoint_cond_says_stop): Renamed from gdbpy_should_stop. Change result type to enum scr_bp_stop. New arg slang. Return SCR_BP_STOP_UNSET if py_bp_object is NULL. (gdbpy_breakpoint_has_cond): Renamed from gdbpy_breakpoint_has_py_cond. New arg slang. (local_setattro): Print name of extension language with existing stop condition. * valprint.c (val_print, value_print): Update to call apply_ext_lang_val_pretty_printer. * cp-valprint.c (cp_print_value): Update call to apply_ext_lang_val_pretty_printer. * python/py-prettyprint.c: Remove #ifdef HAVE_PYTHON. (gdbpy_apply_val_pretty_printer): Renamed from apply_val_pretty_printer. New arg extlang. (!HAVE_PYTHON, apply_val_pretty_printer): Delete. * cli/cli-cmds.c (source_script_from_stream): Rewrite to use extension language API. * cli/cli-script.c (execute_control_command): Update to call eval_ext_lang_from_control_command. * mi/mi-cmd-stack.c (mi_cmd_stack_list_frames): Update to use enum ext_lang_bt_status values. Update call to apply_ext_lang_frame_filter. (mi_cmd_stack_list_locals): Ditto. (mi_cmd_stack_list_args): Ditto. (mi_cmd_stack_list_variables): Ditto. * mi/mi-main.c: Delete #include "python/python-internal.h". Add #include "extension.h". (mi_cmd_list_features): Replace reference to python internal variable gdb_python_initialized with call to ext_lang_initialized_p. * stack.c (backtrace_command_1): Update to use enum ext_lang_bt_status. Update to use enum ext_lang_frame_args. Update to call apply_ext_lang_frame_filter. * python/py-framefilter.c (extract_sym): Update to use enum ext_lang_bt_status. (extract_value, py_print_type, py_print_value): Ditto. (py_print_single_arg, enumerate_args, enumerate_locals): Ditto. (py_mi_print_variables, py_print_locals, py_print_args): Ditto. (py_print_frame): Ditto. (gdbpy_apply_frame_filter): Renamed from apply_frame_filter. New arg extlang. Update to use enum ext_lang_bt_status. * top.c (gdb_init): Delete #ifdef HAVE_PYTHON call to finish_python_initialization. Replace with call to finish_ext_lang_initialization. * typeprint.c (do_free_global_table): Update to call free_ext_lang_type_printers. (create_global_typedef_table): Update to call start_ext_lang_type_printers. (find_global_typedef): Update to call apply_ext_lang_type_printers. * typeprint.h (struct ext_lang_type_printers): Add forward decl. (type_print_options): Change type of global_printers from "void *" to "struct ext_lang_type_printers *". * value.c (preserve_values): Update to call preserve_ext_lang_values. * python/py-value.c: Remove #ifdef HAVE_PYTHON. (gdbpy_preserve_values): Renamed from preserve_python_values. New arg extlang. (!HAVE_PYTHON, preserve_python_values): Delete. * utils.c (quit_flag): Delete, moved to extension.c. (clear_quit_flag, set_quit_flag, check_quit_flag): Delete, moved to extension.c. * eval.c: Delete #include "python/python.h". * main.c: Delete #include "python/python.h". * defs.h: Update comment. testsuite/ * gdb.python/py-breakpoint.exp (test_bkpt_eval_funcs): Update expected output. * gdb.gdb/python-interrupts.exp: New file.
2014-02-06Document the GDB 7.7 release in gdb/ChangeLogJoel Brobecker1-0/+4
gdb/ChangeLog: GDB 7.7 released.
2014-02-05Fix problems with the --dynamic-list option.Cary Coutant13-6/+347
PR gold/13577 complains that even though symbols listed in the --dynamic-list script are exported, they are still bound symbolically if -Bsymbolic is also used. There are two underlying problems here. First, -Bsymbolic should be overridden by --dynamic-list, since the dynamic list provides an explicit list of symbols that are not bound within the library, and if we go ahead and set DT_SYMBOLIC, then the dynamic loader will bind it within the library anyway. Second, gold did not properly identify the symbols listed in the file as preemptible. PR gold/16530 complains that symbols listed in the --dynamic-list script can still be garbage collected. I've fixed this by checking the symbols as they're added to the symbol table. (Unlike the --export-dynamic-symbol option, we can't iterate over the list, because the --dynamic-list script can have wildcards in it.) gold/ 2014-02-05 Cary Coutant <ccoutant@google.com> PR gold/13577 * options.cc (General_options::parse_dynamic_list): Set have_dynamic_list_. (General_options::General_options): Initialize have_dynamic_list_. (General_options::finalize): Turn off -Bsymbolic and -Bsymbolic-functions if --dynamic-list provided. * options.h (General_options::have_dynamic_list): New function. (General_options::have_dynamic_list_): New data member. * symtab.h (Symbol::is_preemptible): Handle --dynamic-list correctly. PR gold/16530 * symtab.cc (Symbol_table::add_from_relobj): If symbol is named in --dynamic-list, mark it. * testsuite/Makefile.am (gc_dynamic_list_test.sh): New test case. (dynamic_list_2): New test case. * testsuite/Makefile.in: Regenerate. * testsuite/dynamic_list_2.cc: New file. * testsuite/dynamic_list_2.t: New file. * testsuite/dynamic_list_lib1.cc: New file. * testsuite/dynamic_list_lib2.cc: New file. * testsuite/gc_dynamic_list_test.c: New file. * testsuite/gc_dynamic_list_test.sh: New file. * testsuite/gc_dynamic_list_test.t: New file.
2014-02-05Keep current_inferior in sync with event_child.Doug Evans2-1/+9
* linux-low.c (linux_wait_for_event): Improve comment. (linux_wait_1): Keep current_inferior in sync with event_child.
2014-02-06daily updateAlan Modra1-1/+1
2014-02-05Avoid bison-isms when using yacc.Mark Kettenis2-0/+11
YYPRINT is a bison-ism so c_print_token() ends up being unused when yacc is used which makes gcc unhappy. Make sure we only define YYPRINT and c_print_token() when bison is used to generate the parser. gdb/ChangeLog: * c-exp.y (YYPRINT, c_print_token): Only define if YYBISON is defined.
2014-02-05Use rs->buf after getpktYao Qi2-6/+8
Hi, The following code snippet looks wrong to me char *buf = rs->buf; getpkt (&rs->buf, &rs->buf_size, 0); packet_ok (buf, ); if rs->buf is reallocated in getpkt, buf points to an out of dated memory. This patch removes local 'buf' and uses rs->buf. gdb: 2014-02-05 Yao Qi <yao@codesourcery.com> * remote.c (remote_pass_signals): Remove local 'buf' and use rs->buf. (remote_program_signals): Likewise.
2014-02-05Create inferior for ctf target.Yao Qi4-1/+44
This patch creates inferior when GDB opens a ctf trace data, to be consistent with tfile target. A test case is added to test for live target, tfile and ctf target. gdb: 2014-02-05 Yao Qi <yao@codesourcery.com> * ctf.c: Include "inferior.h" and "gdbthread.h". (CTF_PID): A new macro. (ctf_open): Call inferior_appeared and add_thread_silent. (ctf_close): Call exit_inferior_silent and set inferior_ptid. (ctf_thread_alive): New function. (init_ctf_ops): Install ctf_thread_alive to to_thread_alive. gdb/testsuite: 2014-02-05 Yao Qi <yao@codesourcery.com> * gdb.trace/report.exp (use_collected_data): Test the output of "info threads" and "info inferiors".
2014-02-05Create inferior for tfile targetYao Qi4-3/+41
When a trace file is loaded in Eclipse, it is expected to see thread and process (=thread-group-started and =thread-created). Create an inferior and add a thread for this purpose. This patch just reverts my previous patch. gdb/testsuite: 2014-02-05 Yao Qi <yao@codesourcery.com> Revert this patch: 2013-05-24 Yao Qi <yao@codesourcery.com> * gdb.trace/tfile.exp: Test inferior and thread. gdb: 2014-02-05 Yao Qi <yao@codesourcery.com> Revert this patch: 2013-05-24 Yao Qi <yao@codesourcery.com> * tracepoint.c (TFILE_PID): Remove. (tfile_open): Don't add thread and inferior. (tfile_close): Don't set 'inferior_ptid'. Don't call exit_inferior_silent. (tfile_thread_alive): Remove. (init_tfile_ops): Don't set field 'to_thread_alive' of tfile_ops.
2014-02-05daily updateAlan Modra1-1/+1
2014-02-04Call remote_check_symbols even if only symbol-file (not file) has been givenChristian Eggers2-1/+6
The Eclipse "C/C++ GDB Hardware Debugging" plugin runs only the "symbol-file" command. In this case, remote_check_symbols is not called and no qSymbol:: packet is sent to the server (OpenOCD in my case). gdb/ 2014-02-04 Christian Eggers <ceggers@gmx.de> (tiny change) * remote.c (remote_start_remote): Call remote_check_symbols even if only symbol-file (not file) has been given.
2014-02-04Fix PowerPC targets minor memory leaks found by CoverityJan Kratochvil3-8/+44
bfd/ 2014-02-04 Jan Kratochvil <jan.kratochvil@redhat.com> * coff-rs6000.c (xcoff_write_archive_contents_big): Free OFFSETS in return paths. Three times. * elf64-ppc.c (ppc64_elf_link_hash_table_create): Free HTAB in all return paths. (ppc64_elf_tls_optimize): Free TOC_REF in return path. (ppc64_elf_edit_toc): Free USED in return path.
2014-02-04PowerPC64 ELFv2 ABI: skip global entry point codeUlrich Weigand10-2/+156
This patch handles another aspect of the ELFv2 ABI, which unfortunately requires common code changes. In ELFv2, functions may provide both a global and a local entry point. The global entry point (where the function symbol points to) is intended to be used for function-pointer or cross-module (PLT) calls, and requires r12 to be set up to the entry point address itself. The local entry point (which is found at a fixed offset after the global entry point, as defined by bits in the symbol table entries' st_other field), instead expects r2 to be set up to the current TOC. Now, when setting a breakpoint on a function by name, you really want that breakpoint to trigger either way, no matter whether the function is called via its local or global entry point. Since the global entry point will always fall through into the local entry point, the way to achieve that is to simply set the breakpoint at the local entry point. One way to do that would be to have prologue parsing skip the code sequence that makes up the global entry point. Unfortunately, this does not work reliably, since -for optimized code- GDB these days will not actuall invoke the prologue parsing code but instead just set the breakpoint at the symbol address and rely on DWARF being correct at any point throughout the function ... Unfortunately, I don't really see any way to express the notion of local entry points with the current set of gdbarch callbacks. Thus this patch adds a new callback, skip_entrypoint, that is somewhat analogous to skip_prologue, but is called every time GDB needs to determine a function start address, even in those cases where GDB decides to not call skip_prologue. As a side effect, the skip_entrypoint implementation on ppc64 does not need to perform any instruction parsing; it can simply rely on the local entry point flags in the symbol table entry. With this implemented, two test cases would still fail to set the breakpoint correctly, but that's because they use the construct: gdb_test "break *hello" Now, using "*hello" explicitly instructs GDB to set the breakpoint at the numerical value of "hello" treated as function pointer, so it will by definition only hit the global entry point. I think this behaviour is unavoidable, but acceptable -- most people do not use this construct, and if they do, they get what they asked for ... In one of those two test cases, use of this construct is really not appropriate. I think this was added way back when as a means to work around prologue skipping problems on some platforms. These days that shouldn't really be necessary any more ... For the other (step-bt), we really want to make sure backtracing works on the very first instruction of the routine. To enable that test also on powerpc64le-linux, we can modify the code to call the test function via function pointer (which makes it use the global entry point in the ELFv2 ABI). gdb/ChangeLog: * gdbarch.sh (skip_entrypoint): New callback. * gdbarch.c, gdbarch.h: Regenerate. * symtab.c (skip_prologue_sal): Call gdbarch_skip_entrypoint. * infrun.c (fill_in_stop_func): Likewise. * ppc-linux-tdep.c: Include "elf/ppc64.h". (ppc_elfv2_elf_make_msymbol_special): New function. (ppc_elfv2_skip_entrypoint): Likewise. (ppc_linux_init_abi): Install them for ELFv2. gdb/testsuite/ChangeLog: * gdb.base/sigbpt.exp: Do not use "*" when setting breakpoint on a function. * gdb.base/step-bt.c: Call hello via function pointer to make sure its first instruction is executed on powerpc64le-linux.
2014-02-04PowerPC64 ELFv2 ABI: structure passing / returnUlrich Weigand2-0/+251
Another significant difference in the ELFv2 ABI is that "homogeneous" floating-point and vector aggregates, i.e. aggregates the consist (recursively) only of members of the same floating-point or vector type, are passed in a series of floating-point / vector registers, as if they were seperate parameters. (This is similar to the ARM ABI.) This applies to both calls and returns. In addition when returning any aggregate of up to 16 bytes, ELFv2 now used general-purpose registers. This patch adds support for these aspects of the ABI, which is relatively straightforward after the refactoring patch to ppc-sysv-tdep.c. gdb/ChangeLog: * ppc-sysv-tdep.c (ppc64_aggregate_candidate): New routine. (ppc64_elfv2_abi_homogeneous_aggregate): Likewise. (ppc64_sysv_abi_push_param): Handle ELFv2 homogeneous structs. (ppc64_sysv_abi_return_value): Likewise. Also, handle small structures returned in GPRs.
2014-02-04PowerPC64 ELFv2 ABI: stack frame layout changesUlrich Weigand2-3/+12
This implementes another change in ELFv2: the stack frame no longer contains the reserved double words for linker and compiler use (which weren't really used for much of anything anyway). This affects placement of on-stack parameters in inferior calls. gdb/ChangeLog: * ppc-sysv-tdep.c (ppc64_sysv_abi_push_dummy_call): Use correct offset to the stack parameter list for the ELFv2 ABI.
2014-02-04PowerPC64 ELFv2 ABI: no function descriptorsUlrich Weigand3-26/+48
This implements the most significant difference with the ELFv2 ABI: we no longer use function descriptors. The patch consists mostly of switching off code to deal with descriptors :-) In addition, when calling an inferior function, we no longer need to provide its TOC in r2. Instead, ELFv2 code expects to be called with r12 pointing to the code address itself. gdb/ChangeLog: * ppc-linux-tdep.c (ppc_linux_init_abi): Only call set_gdbarch_convert_from_func_ptr_addr and set_gdbarch_elf_make_msymbol_special for ELFv1. * ppc-sysv-tdep.c (ppc64_sysv_abi_push_param): Only handle function descriptors on ELFv1. (ppc64_sysv_abi_push_dummy_call): Likewise. On ELFv2, set up r12 at function entry.
2014-02-04PowerPC64 ELFv2 ABI: base supportUlrich Weigand3-0/+54
This is the first patch of a series to implement support for the PowerPC ELFv2 ABI. While powerpc64le-linux will use ELFv2, and the existing powerpc64-linux code will continue to use ELFv1, in theory ELFv2 is also defined for big-endian systems (and ELFv1 was also defined for little-endian systems). Therefore this patch adds a new tdep->elf_abi variable to decide which ABI version to use. This is detected from the ELF header e_flags value; if this is not present, we default to ELFv2 on little-endian and ELFv1 otherwise. This patch does not yet introduce any actual difference in GDB's handling of the two ABIs. Those will be added by the remainder of this patch series. For an overview of the changes in ELFv2, have a look at the comments in the patch series that added ELFv2 to GCC, starting at: http://gcc.gnu.org/ml/gcc-patches/2013-11/msg01144.html gdb/ChangeLog: * ppc-tdep.h (enum powerpc_elf_abi): New data type. (struct gdbarch_tdep): New member elf_abi. * rs6000-tdep.c: Include "elf/ppc64.h". (rs6000_gdbarch_init): Detect ELF ABI version.
2014-02-04PowerPC64 little-endian fixes: 128-bit DFP parameters / registersUlrich Weigand5-11/+27
The powerpc64le-linux ABI specifies that when a 128-bit DFP value is passed in a pair of floating-point registers, the first register holds the most-significant part of the value. This is as opposed to the usual rule on little-endian systems, where the first register would hold the least-significant part. This affects two places in GDB, the read/write routines for the 128-bit DFP pseudo-registers, and the function call / return sequence. For the former, current code already distinguishes between big- and little-endian targets, but gets the latter wrong. This is presumably because *GCC* also got it wrong, and GDB matches the old GCC behavior. But GCC is now fixed: http://gcc.gnu.org/ml/gcc-patches/2013-11/msg02145.html so GDB needs to be fixed too. (Old code shouldn't really be an issue since there is no code "out there" so far that uses dfp128 on little-endian ...) gdb/ChangeLog: * ppc-sysv-tdep.c (ppc64_sysv_abi_push_freg): Use correct order within a register pair holding a DFP 128-bit value on little-endian. (ppc64_sysv_abi_return_value_base): Likewise. * rs6000-tdep.c (dfp_pseudo_register_read): Likewise. (dfp_pseudo_register_write): Likewise. gdb/testsuite/ChangeLog: * gdb.arch/powerpc-d128-regs.exp: Enable on powerpc64*-*.
2014-02-04PowerPC64 little-endian fixes: 32-bit DFP parametersUlrich Weigand2-2/+14
Passing a 32-bit DFP in register needs to use the least-significant part of the register. Like with a previous patch that addressed the same issue for small structs, this patch makes sure the appropriate offset is used on little-endian systems. gdb/ChangeLog: * ppc-sysv-tdep.c (ppc64_sysv_abi_push_freg): Use correct offset on little-endian when passing _Decimal32. (ppc64_sysv_abi_return_value_base): Likewise for return values.
2014-02-04PowerPC64 little-endian fixes: VSX tests and pseudo-regsUlrich Weigand4-10/+52
Many VSX test were failing on powerpc64le-linux, since -as opposed to the AltiVec tests- there never were little-endian versions of the test patterns. This patch adds such patterns, along the lines of altivec-regs.exp. In addition, there is an actual code change required: For those VSX registers that overlap a floating-point register, the FP register overlaps the most-significant half of the VSX register both on big- and little-endian systems. However, on little-endian systems, that half is stored at an offset of 8 bytes (not 0). This works already for the "real" FP registers, but current code gets it wrong for the "extended" pseudo FP register GDB generates for the second half of the VSX register bank. This patch updates the corresponding pseudo read/write routines to take the appropriate offset into consideration. gdb/ChangeLog: * rs6000-tdep.c (efpr_pseudo_register_read): Use correct offset of the overlapped FP register within the VSX register on little- endian platforms. (efpr_pseudo_register_write): Likewise. gdb/testsuite/ChangeLog: * gdb.arch/vsx-regs.exp: Check target endianness. Provide variants of the test patterns for use on little-endian systems.
2014-02-04PowerPC64 little-endian fixes: AltiVec testsUlrich Weigand2-7/+11
A couple of AltiVec tests fail spuriously on powerpc64le-linux, because they compare against an incorrect pattern. Note that those tests already contain little-endian variants of the patterns, but those seem to have bit-rotted a bit: when outputting a vector, GDB no longer omits trailing zero elements (as it used to do in the past). This patch updates the pattern to the new GDB output behavior. In addition, the patch updates the endian test to use the new gdb_test_multiple logic instead of gdb_expect. gdb/testsuite/ChangeLog: * gdb.arch/altivec-regs.exp: Use gdb_test_multiple for endian test. (decimal_vector): Fix for little-endian.
2014-02-04PowerPC64 little-endian fixes: structure passingUlrich Weigand2-1/+7
When passing a small structure in a GPR, the ABI specifies that it should be passed in the least-significant bytes of the register (or stack slot). On big-endian systems, this means the value needs to be stored at an offset, which is what current code does. However, on little-endian systems, the least-significant bytes are addresses with offset 0. This patch fixes that. gdb/ChangeLog: * ppc-sysv-tdep.c (ppc64_sysv_abi_push_val): Use correct offset on little-endian when passing small structures.
2014-02-04Refactor ppc64 function call and return value handlingUlrich Weigand2-694/+503
This patch refactors the ppc64 function call and return value handling code in ppc-sysv-tdep.c. The main problem to be addressed by this refactoring is the code duplication caused by certain aggregate types: According to the ABI, some types are to be decomposed into component types for parameter and return value handling. For example, complex types are to be passed as if the real and imaginary component were separate arguments. Similarly, certain OpenCL vector types are passed as if they were multiple separate arguments of the vector element type. With the new ELFv2 ABI, there is another case: "homogeneous aggregates" (e.g. a struct containing 4 floats) are passed in multiple floating point registers as well. Unfortunately, the current code is not structured to easily model these ABI properties. For example, code to pass complex values re-implements code to pass the underlying (floating-point) type. This has already led to some unfortunate code duplication, and with the addition of ELFv2 ABI support, I would have had to add yet more such duplication. To avoid that, I've decided to refactor the code in order to re-use subroutines that handle the "base" types when handling those aggregate types. This was not intended to cause any difference on current (ELFv1) ABI code, but in fact it fixes a bug: FAIL: gdb.base/varargs.exp: print find_max_float_real(4, fc1, fc2, fc3, fc4) This was caused by the old code in ppc64_sysv_abi_push_float incorrectly handling floating-point arguments to vararg routines, which just happens to work out correctly automatically in the refactored code ... gdb/ChangeLog: * ppc-sysv-tdep.c (get_decimal_float_return_value): Update comment. (struct ppc64_sysv_argpos): New data structure. (ppc64_sysv_abi_push_float): Remove. (ppc64_sysv_abi_push_val): New function. (ppc64_sysv_abi_push_integer): Likewise. (ppc64_sysv_abi_push_freg): Likewise. (ppc64_sysv_abi_push_vreg): Likewise. (ppc64_sysv_abi_push_param): Likewise. (ppc64_sysv_abi_push_dummy_call): Refactor to use those new routines. (ppc64_sysv_abi_return_value_base): New function. (ppc64_sysv_abi_return_value): Refactor to use it.
2014-02-04Document support for powerpc64le-*-linux* targetUlrich Weigand2-0/+7
gdb/ChangeLog: * NEWS: Document new target powerpc64le-*-linux*.
2014-02-04Add support for ELF core files on OpenBSD/sparc64.Mark Kettenis2-10/+51
gdb/ChangeLog: * sparc64obsd-tdep.c (sparc64obsd_gregset): New variable. (sparc64obsd_supply_gregset): Handle registers sets used in ELF core dumps. (sparc64obsd_init_abi): Adjust minimum size of the general purpose register set used in ELF core dumps. Add floating-point register set.