aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2014-02-21Add file missed from last commit.Alan Modra1-0/+7
2014-02-21Add ppc476 workaround bootstrap testAlan Modra2-2/+15
I was running this by hand to test out --ppc476-workaround. Another bootstrap test doesn't take all that long, so let's add it to the testsuite. * ld-bootstrap/bootstrap.exp: Add ppc476 workaround test. * ld-bootstrap/ppc476.t: New file.
2014-02-21daily updateAlan Modra1-1/+1
2014-02-20Fix for PR tdep/16397: SystemTap SDT probe support for x86 doesn't work with ↵Sergio Durigan Junior8-1/+281
"triplet operands" This is the continuation of what Joel proposed on: <https://sourceware.org/ml/gdb-patches/2013-12/msg00977.html> Now that I have already submitted and pushed the patch to split i386_stap_parse_special_token into two smaller functions, it is indeed simpler to understand this patch. It occurs because, on x86, triplet displacement operands are allowed (like "-4+8-20(%rbp)"), and the current parser for this expression is buggy. It does not correctly extract the register name from the expression, which leads to incorrect evaluation. The parser was also being very "generous" with the expression, so I included a few more checks to ensure that we're indeed dealing with a triplet displacement operand. This patch also includes testcases for the two different kind of expressions that can be encountered on x86: the triplet displacement (explained above) and the three-argument displacement (as in "(%rbx,%ebx,-8)"). The tests are obviously arch-dependent and are placed under gdb.arch/. Message-ID: <m3mwj1j12v.fsf@redhat.com> URL: <https://sourceware.org/ml/gdb-patches/2014-01/msg00310.html> gdb/ 2014-02-20 Sergio Durigan Junior <sergiodj@redhat.com> PR tdep/16397 * i386-tdep.c (i386_stap_parse_special_token_triplet): Check if a number comes after the + or - signs. Adjust length of register name to be extracted. gdb/testsuite/ 2014-02-20 Sergio Durigan Junior <sergiodj@redhat.com> PR tdep/16397 * gdb.arch/amd64-stap-special-operands.exp: New file. * gdb.arch/amd64-stap-three-arg-disp.S: Likewise. * gdb.arch/amd64-stap-three-arg-disp.c: Likewise. * gdb.arch/amd64-stap-triplet.S: Likewise. * gdb.arch/amd64-stap-triplet.c: Likewise.
2014-02-20Add single sentence description to top of entry of previous commit.Doug Evans1-0/+1
2014-02-20mark *_varobj_ops as "extern"Tom Tromey2-4/+9
The AIX linker pointed out that gdb had multiple definitions of the various *_varobj_ops objects. This patch fixes the problem by marking the declarations as "extern" in varobj.h. Tested by rebuilding on x86-64 Fedora 18 and on AIX. 2014-02-20 Tom Tromey <tromey@redhat.com> * varobj.h (c_varobj_ops, cplus_varobj_ops, java_varobj_ops) (ada_varobj_ops): Mark "extern".
2014-02-20Remove all_lwps global.Doug Evans11-292/+459
* inferiors.h (ptid_of): Move here from linux-low.h. (pid_of, lwpid_of): Ditto. * linux-aarch64-low.c (debug_reg_change_callback): Update, "entry" parameter is a struct thread_info * now. (aarch64_notify_debug_reg_change): Fetch pid from current_inferior directly. Pass &all_threads to find_inferior instead of &all_lwps. (aarch64_stopped_data_address): Fetch lwpid from current_inferior directly. (aarch64_linux_prepare_to_resume): Fetch ptid from thread. (aarch64_arch_setup): Fetch lwpid from current_inferior directly. * linux-arm-low.c (update_registers_callback): Update, "entry" parameter is a struct thread_info * now. Fetch lwpid from current_inferior directly. (arm_insert_point): Pass &all_threads to find_inferior instead of &all_lwps. (arm_remove_point): Ditto. (arm_stopped_by_watchpoint): Fetch lwp from current_inferior. (arm_prepare_to_resume): Fetch pid from thread. (arm_read_description): Fetch lwpid from current_inferior directly. * linux-low.c (all_lwps): Delete. (delete_lwp): Delete call to remove_inferior. (handle_extended_wait): Fetch lwpid from thread. (add_lwp): Don't set lwp->entry.id. Remove call to add_inferior_to_list. (linux_attach_lwp_1): Fetch pid from current_inferior directly. (linux_kill_one_lwp): Fetch ptid,lwpid from thread. (kill_one_lwp_callback): Ditto. (linux_kill): Don't dereference NULL pointer. Fetch ptid,lwpid from thread. (get_detach_signal): Fetch ptid from thread. (linux_detach_one_lwp): Fetch ptid,lwpid from thread. Simplify call to regcache_invalidate_thread. (delete_lwp_callback): Update, "entry" parameter is a struct thread_info * now. Fetch pid from thread. (linux_mourn): Pass &all_threads to find_inferior instead of &all_lwps. (status_pending_p_callback): Update, "entry" parameter is a struct thread_info * now. Fetch ptid from thread. (find_lwp_pid): Update, "entry" parameter is a struct thread_info * now. (linux_wait_for_lwp): Fetch pid from thread. (linux_fast_tracepoint_collecting): Fetch lwpid from thread. (maybe_move_out_of_jump_pad): Fetch lwpid from current_inferior. (enqueue_one_deferred_signal): Fetch lwpid from thread. (dequeue_one_deferred_signal): Ditto. (cancel_breakpoint): Fetch ptid from current_inferior. (linux_wait_for_event): Pass &all_threads to find_inferior, not &all_lwps. Fetch ptid, lwpid from thread. (count_events_callback): Update, "entry" parameter is a struct thread_info * now. (select_singlestep_lwp_callback): Ditto. (select_event_lwp_callback): Ditto. (cancel_breakpoints_callback): Ditto. (linux_cancel_breakpoints): Pass &all_threads to find_inferior, not &all_lwps. (select_event_lwp): Ditto. Fetch ptid from event_thread. (unsuspend_one_lwp): Update, "entry" parameter is a struct thread_info * now. (unsuspend_all_lwps): Pass &all_threads to find_inferior, not &all_lwps. (linux_stabilize_threads): Ditto. And for for_each_inferior. Fetch lwpid from thread, not lwp. (linux_wait_1): Fetch ptid, lwpid from current_inferior. Pass &all_threads to find_inferior, not &all_lwps. (send_sigstop): Fetch lwpid from thread, not lwp. (send_sigstop_callback): Update, "entry" parameter is a struct thread_info * now. (suspend_and_send_sigstop_callback): Ditto. (wait_for_sigstop): Ditto. Fetch ptid, lwpid from thread, lwp. (stuck_in_jump_pad_callback): Update, "entry" parameter is a struct thread_info * now. (move_out_of_jump_pad_callback): Ditto. Fetch ptid, lwpid from thread, lwp. (lwp_running): Update, "entry" parameter is a struct thread_info * now. (stop_all_lwps): Fetch ptid from thread. Pass &all_threads to find_inferior, for_each_inferior, not &all_lwps. (linux_resume_one_lwp): Fetch lwpid from thread. (linux_set_resume_request): Update, "entry" parameter is a struct thread_info * now. Fetch pid, lwpid from thread. (resume_status_pending_p): Update, "entry" parameter is a struct thread_info * now. (need_step_over_p): Ditto. Fetch lwpid from thread. (start_step_over): Fetch lwpid from thread. (linux_resume_one_thread): Update, "entry" parameter is a struct thread_info * now. Fetch lwpid from thread. (linux_resume): Pass &all_threads to find_inferior, not &all_lwps. (proceed_one_lwp): Update, "entry" parameter is a struct thread_info * now. Fetch lwpid from thread. (unsuspend_and_proceed_one_lwp): Update, "entry" parameter is a struct thread_info * now. (proceed_all_lwps): Pass &all_threads to find_inferior, not &all_lwps. (unstop_all_lwps): Ditto. Fetch lwpid from thread. (regsets_fetch_inferior_registers): Fetch lwpid from current_inferior directly. (regsets_store_inferior_registers): Ditto. (fetch_register, store_register): Ditto. (linux_read_memory, linux_write_memory): Ditto. (linux_request_interrupt): Ditto. (linux_read_auxv): Ditto. (linux_xfer_siginfo): Ditto. (linux_qxfer_spu): Ditto. (linux_qxfer_libraries_svr4): Ditto. * linux-low.h (ptid_of, pid_of, lwpid_of): Delete, moved to inferiors.h. (get_lwp): Delete. (get_thread_lwp): Update. (struct lwp_info): Delete member "entry". Simplify comment for member "thread". (all_lwps): Delete. * linux-mips-low.c (mips_read_description): Fetch lwpid from current_inferior directly. (update_watch_registers_callback): Update, "entry" parameter is a struct thread_info * now. Fetch pid from thread. (mips_linux_prepare_to_resume): Fetch ptid from thread. (mips_insert_point): Fetch lwpid from current_inferior. Pass &all_threads to find_inferior, not &all_lwps. (mips_remove_point): Pass &all_threads to find_inferior, not &all_lwps. (mips_stopped_by_watchpoint): Fetch lwpid from current_inferior directly. (mips_stopped_data_address): Ditto. * linux-s390-low.c (s390_arch_setup): Fetch pid from current_inferior directly. * linux-tile-low.c (tile_arch_setup): Ditto. * linux-x86-low.c (x86_get_thread_area): Fetch lwpid from thread. (update_debug_registers_callback): Update, "entry" parameter is a struct thread_info * now. Fetch pid from thread. (i386_dr_low_set_addr): Fetch pid from current_inferior directly. Pass &all_threads to find_inferior, not &all_lwps. (i386_dr_low_get_addr): Fetch ptid from current_inferior directly. (i386_dr_low_set_control): Fetch pid from current_inferior directly. Pass &all_threads to find_inferior, not &all_lwps. (i386_dr_low_get_control): Fetch ptid from current_inferior directly. (i386_dr_low_get_status): Ditto. (x86_linux_prepare_to_resume): Fetch ptid from thread. (x86_siginfo_fixup): Fetch lwpid from current_inferior directly. (x86_linux_read_description): Ditto. * proc-service.c (ps_getpid): Fetch pid from current_inferior directly.
2014-02-20minor cleanup in dbxread.cTom Tromey2-2/+4
I happened to notice that last_o_file_start is write-only in read_dbx_symtab. This patch removes it. Tested by rebuilding. 2014-02-20 Tom Tromey <tromey@redhat.com> * dbxread.c (read_dbx_symtab): Remove last_o_file_start.
2014-02-20* inferiors.c (get_first_inferior): Fix buglet.Doug Evans2-2/+6
2014-02-20Simplify .section in dw2-icycle.SJoel Brobecker2-2/+7
The arm-elf assembler chokes on the extra parameters in the .section pseudo-op, so this patch removes them. gdb/testsuite/ChangeLog: * gdb.dwarf2/dw2-icycle.S: Remove second and third parameters in .section pseudo-op.
2014-02-20Move containing_scm arg from gdbscm_fill_eqable_gsmob_ptr_slotDoug Evans8-22/+28
to gdbscm_init_eqable_gsmob. * guile/scm-gsmob.c (gdbscm_init_eqable_gsmob): New arg containing_scm. All callers updated. (gdbscm_fill_eqable_gsmob_ptr_slot): Delete arg containing_scm. All callers updated. * guile/guile-internal.h (gdbscm_init_eqable_gsmob): Update. (gdbscm_fill_eqable_gsmob_ptr_slot): Update.
2014-02-20fix whitespace in previous commitDoug Evans1-0/+1
2014-02-20Fix PR symtab/16581Doug Evans6-2/+376
* dwarf2read.c (struct die_info): New member in_process. (reset_die_in_process): New function. (process_die): Set it at the start, reset when returning. (inherit_abstract_dies): Only call process_die if origin_child_die not already being processed. testsuite/ * gdb.dwarf2/dw2-icycle.S: New file. * gdb.dwarf2/dw2-icycle.c: New file. * gdb.dwarf2/dw2-icycle.exp: New file.
2014-02-20windows-nat.c: Bring comment back regarding handling of DLL load events.Joel Brobecker2-1/+29
This patch brings back a comment that got stripped down a bit too much during a recent change. gdb/ChangeLog: * windows-nat.c (handle_unload_dll): Add function documentation. (do_initial_windows_stuff): Add comment explaining why we wait until after inferior initialization has finished before processing all DLLs.
2014-02-20Change cpu for vptestnmd and vptestnmq instructions.Ilya Tocar16-356/+374
In latest release of AVX512 spec http://download-software.intel.com/sites/default/files/managed/50/1a/319433-018.pdf Vptestnmq and vptestnmq instructions have CPUID AVX512F, not AVX512CD. This patch fixes it. opcodes/ * i386-opc.tbl: Change CPU of vptestnmq, vptestnmd from CpuAVX512CD, to CpuAVX512F. * i386-tbl.h: Regenerate. gas/testsuite/ * gas/i386/avx512cd-intel.d: Remove vptestnmq, vptestnmd. * gas/i386/avx512cd.s: Ditto. * gas/i386/avx512cd.d: Ditto. * gas/i386/x86-64-avx512cd-intel.d: Ditto. * gas/i386/x86-64-avx512cd.s: Ditto. * gas/i386/x86-64-avx512cd.d: Ditto. * gas/i386/avx512f-intel.d: Add vptestnmq, vptestnmd. * gas/i386/avx512f.s: Ditto. * gas/i386/avx512f.d: Ditto. * gas/i386/x86-64-avx512f-intel.d: Ditto. * gas/i386/x86-64-avx512f.s: Ditto. * gas/i386/x86-64-avx512f.d: Ditto.
2014-02-20Simplify windows-nat.c::get_module_nameJoel Brobecker2-74/+63
Now that get_module_name is no longer called for handling DLL events, we can simplify it a bit, knowing that the only use is to get the executable's filename. While doing so, we adjusted the implementation a bit to avoid references to DLLs, renamed it to make its more-targeted usage more explicit, moved it right before the only function that uses it. We also remove the use of hard-coded length for the buffers being used. gdb/ChangeLog: * windows-nat.c (get_module_name): Delete. (windows_get_exec_module_filename): New function, mostly inspired from get_module_name. (windows_pid_to_exec_file): Replace call to get_module_name by call to windows_get_exec_module_filename.
2014-02-20Windows: Rely purely on event info when handling DLL load eventJoel Brobecker2-29/+16
When a DLL gets loaded an the debugger gets a debug event about it, the currently implementation in handle_load_dll currently tries to fetch the DLL's name by first iterating over all DLLs known to the system. It should be sufficient to rely on the name provided with the event, however, especially in the situation we are now, where we now know that we're past the statup phase for our inferior. This patch therefore simplifies windows-nat.c::handle_load_dll to only rely on the event's lpImageName. It also updates the function's comment to document the assumption regarding not being during the inferior's startup phase. And while at it, it fixes the function documentation, which was probably unintentionally inherited from another function (perhaps windows_wait). gdb/ChangeLog: * windows-nat.c (handle_load_dll): Rewrite this function's introductory comment. Remove code using get_module_name to get the DLL's name.
2014-02-20Ignore DLL load/unload events during inferior initialization.Joel Brobecker2-33/+22
This patch aims at simplifying DLL handling during the inferior initialization (process creation during the "run", or during an "attach"). Instead of processing each DLL load event, which is sometimes incomplete, we ignore these events until the inferior has completed its startup phase, and then just iterate over all DLLs via EnumProcessModules. gdb/ChangeLog: * windows-nat.c (get_windows_debug_event): Ignore LOAD_DLL_DEBUG_EVENT and UNLOAD_DLL_DEBUG_EVENT if windows_initialization_done == 0. (windows_add_all_dlls): Renames windows_ensure_ntdll_loaded. Adjust implementation to always load all DLLs. (do_initial_windows_stuff): Replace call to windows_ensure_ntdll_loaded by call to windows_add_all_dlls.
2014-02-20Deprecate windows-specific dll-symbols command and aliasesJoel Brobecker5-11/+36
The "dll-symbols" command, specific to native Windows platforms, gives the impression that the symbols were not loaded, first because it completes silently, and second because the "info shared" output does not get updated after the command completes: (gdb) dll-symbols C:\WINDOWS\syswow64\rpcrt4.dll (gdb) info shared From To Syms Read Shared Object Library [...] 0x77e51000 0x77ee2554 No C:\WINDOWS\system32\rpcrt4.dll (we exected the "Syms Read" column to read "Yes"). As far as I can tell, the symbols actually do get loaded, but completely independently from the solib framework, which explains the silent loading and the fact that the "Syms Read" column does not get updated. See windows-nat.c::safe_symbol_file_add_stub, which calls symbol_file_add instead of calling solib_add. But, aside from the fact that the "Syms Read" status does not get updated, I also noticed that it does not take into account the DLL's actual load address when loading its symbols. As a result, I believe that we get it wrong if the DLL does not get loaded at the prefered address. Rather than trying to fix this command, there does not seem to be a reason other than historical for having Windows-specific commands which essentially re-implements the "sharedlibrary" command. The command interface is slightly different (the latter takes a regexp rather than a plain filename), but it should be just as easy to use the "sharedlibrary" command, or its "share" alias, as usisng the "dll-symbols" command. For instance: (gdb) share rpcrt4.dll Reading symbols from C:\WINDOWS\system32\rpcrt4.dll...(no debugging symbols found)...done. Loaded symbols for C:\WINDOWS\system32\rpcrt4.dll (gdb) info shared From To Syms Read Shared Object Library [...] 0x77e51000 0x77ee2554 Yes (*) C:\WINDOWS\system32\rpcrt4.dll This patch therefore deprecates the "dll-symbols" command, as well as its two aliases "add-shared-symbol-files" and "assf", with a view of deleting them as soon as the 7.8 branch gets cut. gdb/ChangeLog: * windows-nat.c (_initialize_windows_nat): Deprecate the "dll-symbols" command. Turn the "add-shared-symbol-files" and "assf" aliases into commands, and deprecate them as well. * NEWS: Add entry explaining that "dll-symbols" and its two aliases are now deprecated. gdb/doc/ChangeLog: * gdb.texinfo (Files): Document "add-shared-symbol-files" and "assf" as being deprecated. (Cygwin Native): Likewise for "dll-symbols". (Non-debug DLL Symbols): Remove reference to "dll-symbols" as a way to force the loading of symbols from a DLL.
2014-02-20Fix ARI warning in thread-thread.c::dec_thread_get_ada_task_ptidJoel Brobecker2-3/+8
This patch fixes the following ARI warning: gdb/dec-thread.c:695: regression: multi-line string: Multi-line string must have the newline escaped I think the new-line was unintentional, so I simply removed it, and then reformatted the string to fit within our 70-80 max characters- per-line rule. gdb/ChangeLog: * dec-thread.c (dec_thread_get_ada_task_ptid): Avoid unescaped new-line in debug string. Remove trailing spaces.
2014-02-192014-02-20 Chung-Lin Tang <cltang@codesourcery.com>Chung-Lin Tang2-3/+12
* elf32-nios2.c (nios2_elf32_relocate_section): Fix calculation of GOTOFF relocations.
2014-02-19darwin-nat.c (darwin_xfer_partial): Fix return type.Stan Shebs2-1/+5
2014-02-19Add backlink from lwp_info to thread_info.Doug Evans5-8/+21
* gdbthread.h (add_thread): Change result type to struct thread_info *. * inferiors.c (add_thread): Change result type to struct thread_info *. All callers updated. (add_lwp): Call add_thread here instead of in callers. All callers updated. * linux-low.h (get_lwp_thread): Rewrite. (struct lwp_info): New member "thread". This speeds up gdbserver attach in non-stop mode because now get_lwp_thread doesn't do a linear search for the corresponding thread_info object.
2014-02-19 * linux-low.c (add_lwp): Change result to struct lwp_info *.Doug Evans2-4/+9
All callers updated.
2014-02-19* inferiors.c (add_thread): Fix whitespace.Doug Evans2-1/+5
2014-02-19Call overloaded operators to perform operations on gdb.Value objects.Siva Chandra8-12/+88
* NEWS: Add entry for the new feature * python/py-value.c (valpy_binop): Call value_x_binop for struct and class values. testsuite/ * gdb.python/py-value-cc.cc: Improve test case to enable testing operations on gdb.Value objects. * gdb.python/py-value-cc.exp: Add new test to test operations on gdb.Value objects. doc/ * python.texi (Values From Inferior): Add description about the new feature.
2014-02-19Replace code accessing list implementation details with API calls.Doug Evans10-108/+278
* dll.c (clear_dlls): Replace accessing list implemention details with API function. * gdbthread.h (get_first_thread): Declare. * inferiors.c (for_each_inferior_with_data): New function. (get_first_thread): New function. (find_thread_ptid): Simplify. (get_first_inferior): New function. (clear_list): Delete. (one_inferior_p): New function. (clear_inferior_list): New function. (clear_inferiors): Update. * inferiors.h (for_each_inferior_with_data): Declare. (clear_inferior_list): Declare. (one_inferior_p): Declare. (get_first_inferior): Declare. * linux-low.c (linux_wait_for_event): Replace accessing list implemention details with API function. * server.c (target_running): Ditto. (accumulate_file_name_length): New function. (emit_dll_description): New function. (handle_qxfer_libraries): Replace accessing list implemention details with API function. (handle_qxfer_threads_worker): New function. (handle_qxfer_threads_proper): Replace accessing list implemention details with API function. (handle_query): Ditto. (visit_actioned_threads_callback_ftype): New typedef. (visit_actioned_threads_data): New struct. (visit_actioned_threads): Rewrite to be find_inferior callback. (resume): Call find_inferior. (handle_status): Replace accessing list implemention details with API function. (process_serial_event): Replace accessing list implemention details with API function. * target.c (set_desired_inferior): Replace accessing list implemention details with API function. * tracepoint.c (same_process_p): New function. (gdb_agent_about_to_close): Replace accessing list implemention details with API function. * win32-low.c (child_delete_thread): Replace accessing list implemention details with API function. (match_dll_by_basename): New function. (dll_is_loaded_by_basename): New function. (win32_ensure_ntdll_loaded): Replace accessing list implemention details call to dll_is_loaded_by_basename.
2014-02-20daily updateAlan Modra1-1/+1
2014-02-19Rename inferior_list_entry uses from "head" to "entry" for consistency.Doug Evans11-29/+65
* dll.h (struct dll_info): Add comment. * gdbthread.h (struct thread_info): Add comment. (current_ptid): Simplify. * inferiors.c (add_process): Update. (remove_process): Update. * inferiors.h (struct process_info): Rename member "head" to "entry". * linux-low.c (delete_lwp): Update. (add_lwp): Update. (last_thread_of_process_p): Update. (kill_one_lwp_callback, linux_kill): Update. (status_pending_p_callback): Update. (wait_for_sigstop): Update. Simplify read of ptid. (start_step_over): Update. * linux-low.h (ptid_of, pid_of, lwpid_of): Update. (get_lwp_thread): Update. (struct lwp_info): Rename member "head" to "entry". * regcache.h (inferior_list_entry): Delete. * server.c (kill_inferior_callback): Update. (detach_or_kill_inferior_callback): Update. (print_started_pid): Update. (print_attached_pid): Update. (process_serial_event): Simplify read of ptid. * thread-db.c (thread_db_create_event): Update. (thread_db_get_tls_address): Update. * win32-low.c (current_inferior_ptid): Simplify.
2014-02-19List Yao Qi as nios2 maintainerStan Shebs2-0/+8
2014-02-19Don't output trailing spaceH.J. Lu4-41865/+41882
* i386-gen.c (output_cpu_flags): Don't output trailing space. (output_opcode_modifier): Likewise. (output_operand_type): Likewise. * i386-init.h: Regenerated. * i386-tbl.h: Likewise.
2014-02-19Create the second PLT for BND relocationsH.J. Lu9-37/+539
Intel MPX introduces 4 bound registers, which will be used for parameter passing in x86-64. Bound registers are cleared by branch instructions. Branch instructions with BND prefix will keep bound register contents. This leads to 2 requirements to 64-bit MPX run-time: 1. Dynamic linker (ld.so) should save and restore bound registers during symbol lookup. 2. Change the current 16-byte PLT0: ff 35 08 00 00 00 pushq GOT+8(%rip) ff 25 00 10 00 jmpq *GOT+16(%rip) 0f 1f 40 00 nopl 0x0(%rax) and 16-byte PLT1: ff 25 00 00 00 00 jmpq *name@GOTPCREL(%rip) 68 00 00 00 00 pushq $index e9 00 00 00 00 jmpq PLT0 which clear bound registers, to preserve bound registers. We use 2 new relocations: to mark branch instructions with BND prefix. When linker sees any R_X86_64_PC32_BND or R_X86_64_PLT32_BND relocations, it switches to a different PLT0: ff 35 08 00 00 00 pushq GOT+8(%rip) f2 ff 25 00 10 00 bnd jmpq *GOT+16(%rip) 0f 1f 00 nopl (%rax) to preserve bound registers for symbol lookup and it also creates an external PLT section, .pl.bnd. Linker will create a BND PLT1 entry in .plt: 68 00 00 00 00 pushq $index f2 e9 00 00 00 00 bnd jmpq PLT0 0f 1f 44 00 00 nopl 0(%rax,%rax,1) and a 8-byte BND PLT entry in .plt.bnd: f2 ff 25 00 00 00 00 bnd jmpq *name@GOTPCREL(%rip) 90 nop Otherwise, linker will create a legacy PLT1 entry in .plt: 68 00 00 00 00 pushq $index e9 00 00 00 00 jmpq PLT0 66 0f 1f 44 00 00 nopw 0(%rax,%rax,1) and a 8-byte legacy PLT in .plt.bnd: ff 25 00 00 00 00 jmpq *name@GOTPCREL(%rip) 66 90 xchg %ax,%ax The initial value of the GOT entry for "name" will be set to the the "pushq" instruction in the corresponding entry in .plt. Linker will resolve reference of symbol "name" to the entry in the second PLT, .plt.bnd. Prelink stores the offset of pushq of PLT1 (plt_base + 0x10) in GOT[1] and GOT[1] is stored in GOT[3]. We can undo prelink in GOT by computing the corresponding the pushq offset with GOT[1] + (GOT offset - &GOT[3]) * 2 Since for each entry in .plt except for PLT0 we create a 8-byte entry in .plt.bnd, there is extra 8-byte per PLT symbol. We also investigated the 16-byte entry for .plt.bnd. We compared the 8-byte entry vs the the 16-byte entry for .plt.bnd on Sandy Bridge. There are no performance differences in SPEC CPU 2000/2006 as well as micro benchmarks. Pros: No change to undo prelink in dynamic linker. Only 8-byte memory overhead for each PLT symbol. Cons: Extra .plt.bnd section is needed. Extra 8 byte for legacy branches to PLT. GDB is unware of the new layout of .plt and .plt.bnd. bfd/ * elf64-x86-64.c (elf_x86_64_bnd_plt0_entry): New. (elf_x86_64_legacy_plt_entry): Likewise. (elf_x86_64_bnd_plt_entry): Likewise. (elf_x86_64_legacy_plt2_entry): Likewise. (elf_x86_64_bnd_plt2_entry): Likewise. (elf_x86_64_bnd_arch_bed): Likewise. (elf_x86_64_link_hash_entry): Add has_bnd_reloc and plt_bnd. (elf_x86_64_link_hash_table): Add plt_bnd. (elf_x86_64_link_hash_newfunc): Initialize has_bnd_reloc and plt_bnd. (elf_x86_64_copy_indirect_symbol): Also copy has_bnd_reloc. (elf_x86_64_check_relocs): Create the second PLT for Intel MPX in 64-bit mode. (elf_x86_64_allocate_dynrelocs): Handle the second PLT for IFUNC symbols. Resolve call to the second PLT if it is created. (elf_x86_64_size_dynamic_sections): Keep the second PLT section. (elf_x86_64_relocate_section): Resolve PLT references to the second PLT if it is created. (elf_x86_64_finish_dynamic_symbol): Use BND PLT0 and fill the second PLT entry for BND relocation. (elf_x86_64_finish_dynamic_sections): Use MPX backend data if the second PLT is created. (elf_x86_64_get_synthetic_symtab): New. (bfd_elf64_get_synthetic_symtab): Likewise. Undefine for NaCl. ld/ * emulparams/elf_x86_64.sh (TINY_READONLY_SECTION): New. ld/testsuite/ * ld-x86-64/mpx.exp: Run bnd-ifunc-1 and bnd-plt-1. * ld-x86-64/bnd-ifunc-1.d: New file. * ld-x86-64/bnd-ifunc-1.s: Likewise. * ld-x86-64/bnd-plt-1.d: Likewise.
2014-02-19common/ptid.h: Mention that process_stratum targets should prefer ptid.lwp.Pedro Alves2-1/+11
It's best that we standardize on process_stratum targets using the ptid.lwp field to store thread ids. The idea being leave the ptid.tid field free for any thread_stratum target that might want to sit on top. This patch adds a comment in that direction to struct ptid's definition. gdb/ 2014-02-19 Pedro Alves <palves@redhat.com> * common/ptid.h (struct ptid): Mention that process_stratum targets should prefer ptid.lwp.
2014-02-19remote.c: Use the ptid.lwp field to store remote thread ids rather than ↵Pedro Alves2-17/+26
ptid.tid. From GDB's perspective, independently of how the target really implements threads, gdb/remote sees all threads as if kernel/system threads. A rationale along theses lines led to gdbserver storing thread ids in ptid.lwp in all ports. Because remote.c is currently using ptid.tid, we can't make gdbserver and gdb share bits of remote-specific code that manipulates ptids (e.g., write_ptid/read_ptid). This patch thus makes remote.c use ptid.lwp instead of ptid.tid. I believe that on the GDB side too, it's best that we standardize on process_stratum targets using the ptid.lwp field to store thread ids anyway. The idea being leave the ptid.tid field free for any thread_stratum target that might want to sit on top. Tested on x86_64 Fedora 17, w/ local gdbserver. gdb/ 2014-02-19 Pedro Alves <palves@redhat.com> * remote.c (remote_thread_alive, write_ptid, read_ptid) (read_ptid, remote_newthread_step, remote_threads_extra_info) (remote_get_ada_task_ptid, append_resumption, remote_stop_ns) (threadalive_test, remote_pid_to_str): Use the ptid.lwp field to store remote thread ids rather than ptid.tid. (_initialize_remote): Adjust.
2014-02-19convert to_get_unwinder and to_get_tailcall_unwinder to methodsTom Tromey5-20/+71
This converts to_get_unwinder and to_get_tailcall_unwinder to methods and arranges for them to use the new delegation scheme. This just lets us avoid having a differing style (neither new-style nor INHERIT) of delegation in the tree. 2014-02-19 Tom Tromey <tromey@redhat.com> * target.c (target_get_unwinder): Rewrite. (target_get_tailcall_unwinder): Rewrite. * record-btrace.c (record_btrace_to_get_unwinder): New function. (record_btrace_to_get_tailcall_unwinder): New function. (init_record_btrace_ops): Update. * target.h (struct target_ops) <to_get_unwinder, to_get_tailcall_unwinder>: Now function pointers. Use TARGET_DEFAULT_RETURN.
2014-02-19fix buglet in nto-procfs.cTom Tromey2-2/+9
I happened to notice that nto-procfs.c defines procfs_remove_hw_breakpoint but never uses it. This caused it not to be updated by my target-method-updating script. This patch fixes the function and installs it properly. I have no way to test this, however. 2014-02-19 Tom Tromey <tromey@redhat.com> * nto-procfs.c (procfs_remove_hw_breakpoint): Add 'self' argument. (init_procfs_ops): Correctly set to_remove_hw_breakpoint.
2014-02-19convert to_decr_pc_after_breakTom Tromey5-10/+31
This converts to_decr_pc_after_break to the new style of delegation, removing forward_target_decr_pc_after_break. 2014-02-19 Tom Tromey <tromey@redhat.com> * record-btrace.c (record_btrace_decr_pc_after_break): Delegate directly. * target-delegates.c: Rebuild. * target.h (struct target_ops) <to_decr_pc_after_break>: Use TARGET_DEFAULT_FUNC. * target.c (default_target_decr_pc_after_break): Rename from forward_target_decr_pc_after_break. Simplify. (target_decr_pc_after_break): Rely on delegation.
2014-02-19remove some calls to INHERIT and de_faultTom Tromey2-8/+5
This removes a few unnecessary calls to INHERIT and de_fault: * to_doc is only used when a target is registered * to_magic is only used when a target is pushed and not useful for current_target. * to_open and to_close are only ever called using a specific target_ops object; there is no need to de_fault them. 2014-02-19 Tom Tromey <tromey@redhat.com> * target.c (update_current_target): Do not INHERIT to_doc or to_magic. Do not de_fault to_open or to_close.
2014-02-19remove exec_set_find_memory_regionsTom Tromey5-27/+21
exec_set_find_memory_regions is used to modify the exec target. However, it only has a single caller, and so it is much clearer to simply set the appropriate field directly. It's also better for the coming multi-target world to avoid this kind of global state change anyway. 2014-02-19 Tom Tromey <tromey@redhat.com> * gcore.h (objfile_find_memory_regions): Declare. * gcore.c (objfile_find_memory_regions): No longer static. Add "self" argument. (_initialize_gcore): Don't call exec_set_find_memory_regions. * exec.c: Include gcore.h. (exec_set_find_memory_regions): Remove. (exec_find_memory_regions): Remove. (exec_do_find_memory_regions): Remove. (init_exec_ops): Update. * defs.h (exec_set_find_memory_regions): Remove.
2014-02-19pass NULL to TARGET_DEFAULT_RETURN when appropriateTom Tromey3-14/+22
This changes instances of TARGET_DEFAULT_RETURN(0) to TARGET_DEFAULT_RETURN(NULL) when appropriate. The use of "0" was a relic from an earlier implementation of make-target-delegates; and I didn't want to go back through the long patch series, fixing up conflicts, just to change this small detail. 2014-02-19 Tom Tromey <tromey@redhat.com> * target-delegates.c: Rebuild. * target.h (struct target_ops) <to_extra_thread_info, to_thread_name, to_pid_to_exec_file, to_get_section_table, to_memory_map, to_read_description, to_traceframe_info>: Use NULL, not 0, in TARGET_DEFAULT_RETURN.
2014-02-19remove function casts from target.cTom Tromey2-13/+29
This cleans up target.c to avoid function casts. 2014-02-19 Tom Tromey <tromey@redhat.com> * target.c (complete_target_initialization): Remove casts. Use return_zero_has_execution. (return_zero): Add "ignore" argument. (return_zero_has_execution): New function. (init_dummy_target): Remove casts. Use return_zero_has_execution.
2014-02-19minor cleanups to update_current_targetTom Tromey2-122/+11
During the conversion I kept all the "do not inherit" comments in update_current_target. However, now they are not needed. This patch updates the comments for INHERIT and de_fault, and removes the somewhat odd INHERIT of to_stratum. 2014-02-19 Tom Tromey <tromey@redhat.com> * target.c (update_current_target): Update comments. Do not INHERIT to_stratum.
2014-02-19change delegation for to_read_descriptionTom Tromey7-25/+47
This switches to_read_description to the "new normal" delegation scheme. This one was a bit trickier than the other changes due to the way that target_read_description handled delegation. I examined all the target implementations of to_read_description and changed the ones returning NULL to instead delegate. 2014-02-19 Tom Tromey <tromey@redhat.com> * arm-linux-nat.c (arm_linux_read_description): Delegate when needed. * corelow.c (core_read_description): Delegate when needed. * remote.c (remote_read_description): Delegate when needed. * target-delegates.c: Rebuild. * target.c (target_read_description): Rewrite. * target.h (struct target_ops) <to_read_description>: Update comment. Use TARGET_DEFAULT_RETURN.
2014-02-19convert to_can_runTom Tromey4-6/+29
2014-02-19 Tom Tromey <tromey@redhat.com> * target-delegates.c: Rebuild. * target.c (update_current_target): Don't inherit or default to_can_run. (find_default_run_target): Check against delegate_can_run. * target.h (struct target_ops) <to_can_run>: Use TARGET_DEFAULT_RETURN.
2014-02-19convert to_disconnectTom Tromey4-14/+29
2014-02-19 Tom Tromey <tromey@redhat.com> * target-delegates.c: Rebuild. * target.c (target_disconnect): Unconditionally delegate. * target.h (struct target_ops) <to_disconnect>: Use TARGET_DEFAULT_NORETURN.
2014-02-19convert to_stop_recordingTom Tromey5-13/+27
2014-02-19 Tom Tromey <tromey@redhat.com> * record.c (record_stop): Unconditionally delegate. * target-delegates.c: Rebuild. * target.c (target_stop_recording): Unconditionally delegate. * target.h (struct target_ops) <to_stop_recording>: Use TARGET_DEFAULT_IGNORE.
2014-02-19convert to_enable_btraceTom Tromey4-9/+26
2014-02-19 Tom Tromey <tromey@redhat.com> * target-delegates.c: Rebuild. * target.c (target_enable_btrace): Unconditionally delegate. * target.h (struct target_ops) <to_enable_btrace>: Use TARGET_DEFAULT_NORETURN.
2014-02-19convert to_read_btraceTom Tromey4-9/+26
2014-02-19 Tom Tromey <tromey@redhat.com> * target-delegates.c: Rebuild. * target.c (target_read_btrace): Unconditionally delegate. * target.h (struct target_ops) <to_read_btrace>: Use TARGET_DEFAULT_NORETURN.
2014-02-19convert to_teardown_btraceTom Tromey4-11/+26
2014-02-19 Tom Tromey <tromey@redhat.com> * target-delegates.c: Rebuild. * target.c (target_teardown_btrace): Unconditionally delegate. * target.h (struct target_ops) <to_teardown_btrace>: Use TARGET_DEFAULT_NORETURN.
2014-02-19convert to_disable_btraceTom Tromey4-11/+26
2014-02-19 Tom Tromey <tromey@redhat.com> * target-delegates.c: Rebuild. * target.c (target_disable_btrace): Unconditionally delegate. * target.h (struct target_ops) <to_disable_btrace>: Use TARGET_DEFAULT_NORETURN.