aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2014-03-03Fix various copyright issuesAlan Modra17-13/+47
binutils/ * README: Add "Copyright Notices" paragraph. gas/ * config/bfin-lex-wrapper.c: Correct copyright date. * config/tc-frv.c: Correct copyright punctuation. * config/tc-ip2k.c: Likewise. * config/tc-iq2000.c: Likewise. * config/tc-mep.c: Likewise. * config/tc-tic4x.c: Likewise. * config/tc-tic4x.h: Likewise. ld/testsuite/ * ld-scripts/phdrs2.exp: Correct copyright punctuation. * ld-v850/v850.exp: Correct copyright typo. opcodes/ * i386-gen.c (process_copyright): Emit copyright notice on one line. gold/ * dwp.cc (print_version): Update copyright year to current.
2014-03-03daily updateAlan Modra1-1/+1
2014-03-02* infrun.c (handle_signal_stop): Replace test forDoug Evans2-16/+19
TARGET_WAITKIND_STOPPED with an assert.
2014-03-02guile/scm-objfile.c (ofscm_mark_objfile_smob): Fix typo in comment.Doug Evans2-1/+5
2014-03-02guile/lib/gdb/printing.scm (append-pretty-printer!): Fix thinko.Doug Evans2-1/+5
2014-03-02daily updateAlan Modra1-1/+1
2014-03-01Silence ARI warning.Mark Kettenis2-1/+5
gdb/ChangeLog: * obsd-nat.c: Include "gdb_wait.h" instead of <sys/wait.h>.
2014-03-01Enable rhreads support on OpenBSD/i386.Mark Kettenis3-3/+11
gdb/ChangeLog: * i386obsd-nat.c: Include "obsd-nat.h". (_initialize_i386obsd_nat): Call obsd_add_target instead of add_target. * config/i386/obsd.mh (NATDEPFILES): Add obsd-nat.o.
2014-03-01Eliminate pointer signedness warning.Mark Kettenis2-1/+5
gdb/ChangeLog: * i386obsd-nat.c (i386obsd_supply_pcb): Cast 'sf' to 'gdb_byte *'.
2014-03-01ld-arm/long-plt-format.d, ld-arm/arm-elf.exp: Adjust for arm-eabi.Yuri Gribov3-11/+15
2014-03-01Fix ChangeLog.Mark Kettenis1-2/+3
2014-03-01Enable rthreads support on OpenBSD/mips64.Mark Kettenis3-2/+10
gdb/ChangeLog: * mips64obsd-nat.c: Include "obsd-nath". (_initialize_mips64obsd_nat): Call obsd_add_target instead of add_target * config/mips/obsd64.mh (NATDEPFILES): Add obsd-nat.o.
2014-03-01Enable rthreads support on OpenBSD/amd64.Mark Kettenis3-3/+10
gdb/ChangeLog: * amd64obsd-nat.c (_initialize_amd64obsd_nat): Call obsd_add_target instead of add_target. * config/i386/obsd64.mh (NATDEPFILES): Add obsd-nat.o.
2014-03-01 * config/tc-avr.c: Remove atxmega16x1.Denis Chertykov2-1/+4
2014-02-28Remove the unnecesary argument METHOD to valops.c:find_oload_champ.Siva Chandra2-11/+24
* valops.c (find_oload_champ): Remove unneccesary argument METHOD. (find_overload_match): Update call to find_oload_champ. (find_oload_champ_namespace_loop): Likewise
2014-03-01daily updateAlan Modra1-1/+1
2014-02-28Add sparc64obsd-nat.c to ALLDEPFILES.Mark Kettenis2-1/+4
gdb/ChangeLog: * Makefile.in (ALLDEPFILES): Add sparc64obsd-nat.c.
2014-02-28Enable rthreads supports on OpenBSD/sparc64.Mark Kettenis4-1/+141
gdb/ChangeLog: * configure.host (sparc64-*-openbsd*): Set gdb_host to obsd64. * config/sparc/obsd64.mh: New file. * sparc64obsd-nat.c: New file.
2014-02-28Stupid git never fucking does what I want!Mark Kettenis1-3/+3
2014-02-28Support rthreads on OpenBSD 5.2 and later.Mark Kettenis4-2/+219
OpenBSD 5.2 and later have a proper threads implementation based on kernel threads. Debugging support is provided through additional ptrace(2) requests, so this diff extends the generic code in inf-ptrace.c with OpenBSD-specific code to discover additional threads. gdb/ChangeLog: * obsd-nat.h: New file. * obsd-nat.c: New file. * Makefile.in (HFILES_NO_SRCDIR): Add obsd-nat.h. (ALLDEPFILES): Add obsd-nat.c.
2014-02-28constify ui_out_implTom Tromey6-13/+17
This patch constifies ui_out_impl in struct ui_out, and various instances of ui_out_impl. This removes a couple of FIXME comments (near cli_ui_out_impl and mi_ui_out_impl) that did not make sense to me. Tested by rebuilding. 2014-02-28 Tom Tromey <tromey@redhat.com> * cli-out.c (cli_ui_out_impl): Now const. Remove comment. * cli-out.h (cli_ui_out_impl): Now const. * mi/mi-out.c (mi_ui_out_impl): Now const. Remove comment. * ui-out.c (struct ui_out) <impl>: Now const. (default_ui_out_impl): Now const. (ui_out_new): Make 'impl' parameter const. * ui-out.h (ui_out_new): Update.
2014-02-28Incorrect .debug_line prologue header length for 64-bit DWARFAlan Modra2-2/+11
Don't be clever, calculate the length directly as the difference of two symbols. * dwarf2dbg.c (out_debug_line): Correct .debug_line header_length field for 64-bit dwarf.
2014-02-28Fix check_relocs/gc_sweep_hook mismatchAlan Modra2-1/+9
PR ld/16643 * elflink.c (elf_gc_sweep): Call gc_sweep_hook for exactly the same conditions we called check_relocs.
2014-02-28Regenerate opcodes/msp430-decode.cAlan Modra2-157/+179
Cosmetic changes. * msp430-decode.c: Regenerate.
2014-02-28daily updateAlan Modra1-1/+1
2014-02-27Prevent compiler warning.Mark Kettenis2-1/+5
GCC 4.2.1 complains about first_l_name may be used uninitialized, and my brain agrees. gdb/ChangeLog: * solib-svr4.c (svr4_read_so_list): Initialize first_l_name to 0.
2014-02-27StackGhost cookie is per-process.Mark Kettenis2-5/+5
gdb/ChangeLog: * sparc-nat.c (sparc_xfer_wcookie): Always use process ID.
2014-02-27Additional PR 8882 fix.Jan Kratochvil2-4/+8
runtest gdb.base/corefile.exp ==23174== ERROR: AddressSanitizer: heap-use-after-free on address 0x604400008c88 at pc 0x68f0be bp 0x7fffae9d7490 sp 0x7fffae9d7480 READ of size 8 at 0x604400008c88 thread T0 #0 0x68f0bd in svr4_read_so_list (/home/jkratoch/redhat/gdb-clean/gdb/gdb+0x68f0bd) #1 0x68f64e in svr4_current_sos_direct (/home/jkratoch/redhat/gdb-clean/gdb/gdb+0x68f64e) #2 0x68f757 in svr4_current_sos (/home/jkratoch/redhat/gdb-clean/gdb/gdb+0x68f757) #3 0xcebbff in update_solib_list (/home/jkratoch/redhat/gdb-clean/gdb/gdb+0xcebbff) 0x604400008c88 is located 8 bytes inside of 1104-byte region [0x604400008c80,0x6044000090d0) freed by thread T0 here: #0 0x7f52677500f9 (/lib64/libasan.so.0+0x160f9) #1 0xd2c68a in xfree (/home/jkratoch/redhat/gdb-clean/gdb/gdb+0xd2c68a) #2 0xceb364 in free_so (/home/jkratoch/redhat/gdb-clean/gdb/gdb+0xceb364) #3 0xca59f8 in do_free_so (/home/jkratoch/redhat/gdb-clean/gdb/gdb+0xca59f8) #4 0x93432a in do_my_cleanups (/home/jkratoch/redhat/gdb-clean/gdb/gdb+0x93432a) #5 0x934406 in do_cleanups (/home/jkratoch/redhat/gdb-clean/gdb/gdb+0x934406) #6 0x68efa9 in svr4_read_so_list (/home/jkratoch/redhat/gdb-clean/gdb/gdb+0x68efa9) I did not notice it during my review in: Re: [PATCH v2] Skip vDSO when reading SO list (PR 8882) https://sourceware.org/ml/gdb-patches/2013-09/msg00888.html gdb/ 2014-02-27 Jan Kratochvil <jan.kratochvil@redhat.com> Additional PR 8882 fix. * solib-svr4.c (svr4_read_so_list): Change first to first_l_name. Message-ID: <20140226220918.GA10431@host2.jankratochvil.net>
2014-02-27opcodes/Yufeng Zhang5-10/+117
* aarch64-tbl.h (aarch64_opcode_table): Replace IMM0 with FPIMM0 for fcmeq, fcmgt, fcmge, fcmlt and fcmle. gas/testsuite/ * gas/aarch64/fp-const0-parsing.s: New test. * gas/aarch64/fp-const0-parsing.d: Likewise.
2014-02-27opcodes/Yufeng Zhang5-2/+25
* aarch64-opc.c (print_register_offset_address): Call get_int_reg_name to prepare the register name. gas/testsuite/ * gas/aarch64/ldst-reg-reg-offset.s: Add tests. * gas/aarch64/ldst-reg-reg-offset.d: Update.
2014-02-27Linux waitpid/__WALL emulation wrapper: If WNOHANG is set, don't touch ↵Pedro Alves2-8/+18
sigprocmask. Just a small optimization. No need to block/unblock signals if we're not going to call sigsuspend. gdb/ 2014-02-27 Pedro Alves <palves@redhat.com> * nat/linux-waitpid.c (my_waitpid): Only block signals if WNOHANG isn't set.
2014-02-27This patch adds support for ARM PLT entries that support a full 32-bit ↵Yuri Gribov11-46/+162
offset range. Enabled via the use of a new linker command line option: --long-plt. * bfd-in.h: Add export of bfd_elf32_arm_use_long_plt. * bfd-in2.h: Regenerate. * elf32-arm.c (elf32_arm_plt_entry_long): New array. (elf32_arm_link_hash_table_create): Set plt_entry_size to 16 if using long PLT entries. (bfd_elf32_arm_use_long_plt): New function. (elf32_arm_populate_plt_entry): Add support for long PLT entries. * emultempl/armelf.em (OPTION_LONG_PLT): Define. (PARSE_AND_LIST_LONGOPTS): Add long-plt. (PARSE_AND_LIST_OPTIONS): Likewise. (PARSE_AND_LIST_ARGS_CASES): Handle long-plt. * ld.texinfo: Document --long-plt. * ld-arm/long-plt-format.s: New test case. * ld-arm/long-plt-format.d: Expected disassembly. * ld-arm/arm-elf.exp: Run the new test.
2014-02-27Teach GDBserver's Linux backend about no unwaited-for children ↵Pedro Alves4-352/+568
(TARGET_WAITKIND_NO_RESUMED). GDBserver currently hangs forever in waitpid if the leader thread exits before other threads, or if all resumed threads exit - e.g., next over a thread exit with sched-locking on. This is exposed by leader-exit.exp. leader-exit.exp is part of a series of tests for a set of related problems. See <http://www.sourceware.org/ml/gdb-patches/2011-10/msg00704.html>: " To recap, on the Linux kernel, ptrace/waitpid don't allow reaping the leader thread until all other threads in the group are reaped. When the leader exits, it goes zombie, but waitpid will not return an exit status until the other threads are gone. This is presently exercised by the gdb.threads/leader-exit.exp test. The fix for that test, in linux-nat.c:wait_lwp, handles the case where we see the leader gone when we're stopping all threads to report an event to some other thread to the core. (...) The latter bit about not blocking if there no resumed threads in the process also applies to some other thread exiting, not just the main thread. E.g., this test starts a thread, and runs to a breakpoint in that thread: ... (gdb) c Continuing. [New Thread 0x7ffff75a4700 (LWP 23397)] [Switching to Thread 0x7ffff75a4700 (LWP 23397)] Breakpoint 2, thread_a (arg=0x0) at ../../../src/gdb/testsuite/gdb.threads/no-unwaited-for-left.c:28 28 return 0; /* break-here */ (gdb) info threads * 2 Thread 0x7ffff75a4700 (LWP 23397) thread_a (arg=0x0) at ../../../src/gdb/testsuite/gdb.threads/no-unwaited-for-left.c:28 1 Thread 0x7ffff7fcb720 (LWP 23391) 0x00007ffff7bc606d in pthread_join (threadid=140737343276800, thread_return=0x0) at pthread_join.c:89 The thread will exit as soon as we resume it. But if we only resume that thread, leaving the rest of the threads stopped: (gdb) set scheduler-locking on (gdb) c Continuing. ^C^C^C^C^C^C^C^C " This patch fixes the issues by implementing TARGET_WAITKIND_NO_RESUMED on GDBserver, similarly to what the patch above did for native Linux GDB. gdb.threads/leader-exit.exp now passes. gdb.threads/no-unwaited-for-left.exp now at least errors out instead of hanging: continue Continuing. warning: Remote failure reply: E.No unwaited-for children left. [Thread 15454] #1 stopped. 0x00000034cf408e60 in pthread_join (threadid=140737353922368, thread_return=0x0) at pthread_join.c:93 93 lll_wait_tid (pd->tid); (gdb) FAIL: gdb.threads/no-unwaited-for-left.exp: continue stops when the main thread exits The gdb.threads/non-ldr-exc-*.exp tests are skipped because GDBserver unfortunately doesn't support fork/exec yet, but I'm confident this fixes the related issues. I'm leaving modeling TARGET_WAITKIND_NO_RESUMED in the RSP for a separate pass. (BTW, in case of error in response to a vCont, it would be better for GDB to query the target for the current thread, or re-select one, instead of assuming current inferior_ptid is still the selected thread.) This implementation is a little different from GDB's, because I'm avoiding bringing in more of this broken use of waitpid(PID) into GDBserver. Specifically, this avoids waitpid(PID) when stopping all threads. There's really no need for wait_for_sigstop to wait for each LWP in turn. Instead, with some refactoring, we make it reuse linux_wait_for_event. gdb/gdbserver/ 2014-02-27 Pedro Alves <palves@redhat.com> PR 12702 * inferiors.h (A_I_NEXT, ALL_INFERIORS_TYPE, ALL_PROCESSES): New macros. * linux-low.c (delete_lwp, handle_extended_wait): Add debug output. (last_thread_of_process_p): Take a PID argument instead of a thread pointer. (linux_wait_for_lwp): Delete. (num_lwps, check_zombie_leaders, not_stopped_callback): New functions. (linux_low_filter_event): New function, party factored out from linux_wait_for_event. (linux_wait_for_event): Rename to ... (linux_wait_for_event_filtered): ... this. Add new filter ptid argument. Partly rewrite. Always use waitpid(-1, WNOHANG) and sigsuspend. Check for zombie leaders. (linux_wait_for_event): Reimplement as wrapper around linux_wait_for_event_filtered. (linux_wait_1): Handle TARGET_WAITKIND_NO_RESUMED. Assume that if a normal or signal exit is seen, it's the whole process exiting. (wait_for_sigstop): No longer a for_each_inferior callback. Rewrite on top of linux_wait_for_event_filtered. (stop_all_lwps): Call wait_for_sigstop directly. * server.c (resume, handle_target_event): Handle TARGET_WAITKIND_NO_RESUMED.
2014-02-27Move linux-nat.c:status_to_str to nat/linux-waitpid.c.Pedro Alves4-25/+40
So that gdbserver's Linux backend can use it too. gdb/ 2014-02-27 Pedro Alves <palves@redhat.com> PR 12702 * linux-nat.c (status_to_str): Moved to nat/linux-waitpid.c. * nat/linux-waitpid.c: Include string.h. (status_to_str): Moved here and made extern. * nat/linux-waitpid.h (status_to_str): New declaration.
2014-02-27Move ptid_match to common/ptid.c.Hui Zhu5-24/+32
So that gdbserver can use it too. gdb/ 2014-02-27 Hui Zhu <hui@codesourcery.com> PR 12702 * infrun.c (ptid_match): Move ... * common/ptid.c (ptid_match): ... here. * inferior.h (ptid_match): Move ... * common/ptid.h (ptid_match): ... here.
2014-02-27This patch adds a default manifest in to the final links performed by the ↵Nick Clifton17-34/+184
Cygwin and MinGW targets. The manifest is necessary in order for the linked binaries to be executed in a Windows 8 environment. The manifest is added using a linker script so that this feature will be compiler-neutral. The resource merging code in the linker means that if an application provides its own manifest then the default manifest will be ignored. * configure.in (all_emul_extra_binaries): New variable. Populated by invoking configure.tgt. (EMUL_EXTRA_BINARIES): New substitution. * configure: Regenerate. * configure.tgt (target_extra_binaries): New variable. Set to default-manifest.o for Cygwin and MinGW targets. * Makefile.am (EMUL_EXTRA_BINARIES): New variable. Initialised by the configure script. (ALL_EMUL_EXTRA_BINARIES): New variable. (default-manifest.o): New rule to build the default manifest. (ld_new_DEPENDENCIES): Add EMUL_EXTRA_BINARIES. (install-data-local): Add EMUL_EXTRA_BINARIES. * Makefile.in: Regenerate. * ld.texinfo: Document default manifest support. * emulparams/i386pe.sh (DEFAULT_MANIFEST): Define. * emulparams/i386pep.sh (DEFAULT_MANIFEST): Define. * emultempl/default-manifest.rc: New file. * scripttempl/pe.sc (R_RSRC): Include DEFAULT_MANIFEST, if defined. * scripttempl/pep.sc (R_RSRC): Likewise. * ld-pe/longsecn-1.d: Allow for extra sections. * ld-pe/longsecn-2.d: Likewise. * ld-pe/longsecn.d: Likewise. * ld-pe/secrel.d: Likewise.
2014-02-27Fix ELF ppc32 targets that don't use ppc32elf.emAlan Modra5-10/+45
5446cbdf82892a800ed7eef563a795e75223ec52 broke powerpc-lynxos, powerpc-netware, powerpc-windiss and powerpc-vxworks. bfd/ * elf32-ppc.c (ppc_elf_link_hash_table_create): Provide default params for targets that don't use ppc32elf.em. ld/ * emulparams/elf32ppcvxworks.sh: Source plt_unwind.sh and use ppc32elf.em. * emultempl/ppc32elf.em (ppc_after_open): Don't compile for vxworks. (LDEMUL_AFTER_OPEN): Don't set for vxworks. (PARSE_AND_LIST_LONGOPTS, PARSE_AND_LIST_OPTIONS): Exclude -secure-plt, -bss-plt and -sdata-got when vxworks.
2014-02-27Call common OpenBSD ABI init code on OpenBSD/mips64.Mark Kettenis3-1/+10
* mips64obsd-tdep.c (mips64obsd_init_abi): Call obsd_init_abi. * configure.tgt (mips64*-*-openbsd*): Add obsd-tdep.c to gdb_target_obs.
2014-02-27Add gdbarch auxv parsing for OpenBSD.Mark Kettenis2-1/+32
gdb/Changelog: * obsd-tdep.c (obsd_auxv_parse): New function. (obsd_init_abi): Set auxv_parse.
2014-02-27Add auxv parsing to the architecture vector.Mark Kettenis5-0/+61
Necessary to fix parsing auxv entries from core files on systems that use the layout specified by ELF instead of the incompatible variant used by Linux. gdb/Changelog: * gdbarch.sh (auxv_parse): New. * gdbarch.h: Regenerated. * gdbarch.c: Regenerated. * auxv.c (target_auxv_parse): Call gdbarch_parse_auxv if provided.
2014-02-27daily updateAlan Modra1-1/+1
2014-02-26guile: Add 'history-append!' procedure.Ludovic Courtès6-0/+56
gdb/ 2014-02-26 Ludovic Courtès <ludo@gnu.org> * guile/scm-value.c (gdbscm_history_append_x): New function. (value_functions): Add it. gdb/testsuite/ 2014-02-26 Ludovic Courtès <ludo@gnu.org> * gdb.guile/scm-value.exp (test_value_in_inferior): Add test for 'history-append!'. gdb/doc/ 2014-02-26 Ludovic Courtès <ludo@gnu.org> * gdb/doc/guile.texi (Basic Guile): Document 'history-append!'.
2014-02-26gdbserver/Windows: Rely purely on event info when handling DLL load eventJoel Brobecker2-168/+18
This is the GDBserver counterpart of a change we recently made in GDB to only rely on get_image_name to determine its name. This simplification, in turn, allows us to remove a fair amount of functions and globals which now become unused. gdb/gdbserver/ChangeLog: * win32-low.c (psapi_get_dll_name, * win32_CreateToolhelp32Snapshot): Delete. (win32_CreateToolhelp32Snapshot, win32_Module32First) (win32_Module32Next, load_toolhelp, toolhelp_get_dll_name): Delete. (handle_load_dll): Add function description. Remove code using psapi_get_dll_name and toolhelp_get_dll_name.
2014-02-26windows: Factorize handling of DLL load address offsetJoel Brobecker2-12/+22
This patch is a small cleanup that moves the magic 0x1000 offset to apply to a DLL's base address inside the win32_add_one_solib function, rather than delegate that reponsibility to its callers. gdb/gdbserver/ChangeLog: * win32-low.c (win32_add_one_solib): Add 0x1000 to load_addr. Add comment. (win32_add_all_dlls): Remove 0x1000 offset applied to DLL base address when calling win32_add_one_solib. (handle_load_dll): Delete local variable load_addr. Remove 0x1000 offset applied to DLL base address when calling win32_add_one_solib. (handle_unload_dll): Add comment.
2014-02-26gdbserver/windows: Ignore DLL load/unload events during child initialization.Joel Brobecker2-46/+61
This GDBserver patch mirrors a change made in GDB wich 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. As a side-effect, it fixes a small bug where win32_ensure_ntdll_loaded was missing a 0x1000 offset in the DLL base address. This problem should only be visible on the 64bit version of Windows 8.1, since this is the only platform where win32_ensure_ntdll_loaded is actually needed. gdb/gdbserver/ChangeLog: * win32-low.c (win32_add_all_dlls): Renames win32_ensure_ntdll_loaded. Rewrite function documentation. Adjust implementation to always load all DLLs. Add 0x1000 offset to DLL base address when calling win32_add_one_solib. (child_initialization_done): New static global. (do_initial_child_stuff): Set child_initialization_done to zero during child initialization, and 1 after. Replace call to win32_ensure_ntdll_loaded by call to win32_add_all_dlls. Add comment. (match_dll_by_basename, dll_is_loaded_by_basename): Delete. (handle_unload_dll): Add function documentation. (get_child_debug_event): Ignore load and unload DLL events during child initialization.
2014-02-26DWARF: Read constant-class addresses correctlyJoel Brobecker9-28/+491
Starting with DWARF version 4, the description of the DW_AT_high_pc attribute was amended to say: if it is of class constant, the value is an unsigned integer offset which when added to the low PC gives the address of the first location past the last instruction associated with the entity. A change was made in Apr 27th, 2012 to reflect that change: | commit 91da14142c0171e58a91ad58a32fd010b700e761 | Author: Mark Wielaard <mjw@redhat.com> | Date: Fri Apr 27 18:55:19 2012 +0000 | | * dwarf2read.c (dwarf2_get_pc_bounds): Check DW_AT_high_pc form to | see whether it is an address or a constant offset from DW_AT_low_pc. | (dwarf2_record_block_ranges): Likewise. | (read_partial_die): Likewise. Unfortunately, this new interpretation is now used regardless of the CU's DWARF version. It turns out that one of WindRiver's compilers (FTR: Diabdata 4.4) is generating DWARF version 2 info with DW_AT_high_pc attributes improperly using the data4 form. Because of that, we miscompute all high PCs incorrectly. This leads to a lot of symtabs having overlapping ranges, which in turn causes havoc in pc-to-symtab-and-line translations. One visible effect is when inserting a breakpoint on a given function: (gdb) b world Breakpoint 1 at 0x4005c4 The source location of the breakpoint is missing. The output should be: (gdb) b world Breakpoint 1 at 0x4005c8: file dw2-rel-hi-pc-world.c, line 24. What happens in this case is that the pc-to-SAL translation first starts be trying to find the symtab associated to our PC using each symtab's ranges. Because of the high_pc miscomputation, many symtabs end up matching, and the heuristic trying to select the most probable one unfortunately returns one that is unrelated (it really had no change in this case to do any better). Once we have the wrong symtab, the start searching the associated linetable, where the addresses are correct, thus finding no match, and therefore no SAL. This patch is an attempt at handling the situation as gracefully as we can, without guarantees. It introduces a new function "attr_value_as_address" which uses the correct accessor for getting the value of a given attribute. It then adjust the code throughout this unit to use this function instead of assuming that addresses always have the DW_FORM_addr format. It also fixes the original issue of miscomputing the high_pc by limiting the new interpretation of constant form DW_AT_high_pc attributes to units using DWARF version 4 or later. gdb/ChangeLog: * dwarf2read.c (attr_value_as_address): New function. (dwarf2_find_base_address, read_call_site_scope): Use attr_value_as_address in place of DW_ADDR. (dwarf2_get_pc_bounds): Use attr_value_as_address to get the low and high addresses. Slight rework of the handling of the high pc being a constant form, and limit it to DWARF verson 4 or higher. (dwarf2_record_block_ranges): Likewise. (read_partial_die): Likewise. (new_symbol_full): Use attr_value_as_address in place of DW_ADDR. gdb/testsuite/ChangeLog: * gdb.dwarf2/dw2-abs-hi-pc-hello-dbg.S: New file. * gdb.dwarf2/dw2-abs-hi-pc-hello.c: New file. * gdb.dwarf2/dw2-abs-hi-pc-world-dbg.S: New file. * gdb.dwarf2/dw2-abs-hi-pc-world.c: New file. * gdb.dwarf2/dw2-abs-hi-pc.c: New file. * gdb.dwarf2/dw2-abs-hi-pc.exp: New file. Tested on x86_64-linux.
2014-02-26make "file" use the BFD cache betterTom Tromey2-4/+16
Right now the "file" command will discard the exec_bfd and then possibly open a new one. If this ends up reopening the same file, it can cause needless work by gdb -- destroying all the per-BFD data just to re-read it again. This patch changes the code to hold a reference to the old exec_bfd while opening the new one. The possible downside of this is a higher peak memory use. 2014-02-26 Tom Tromey <tromey@redhat.com> * exec.c (exec_file_attach): Hold a reference to exec_bfd.
2014-02-26add short-circuit logic to elfread.cTom Tromey5-13/+41
If minimal symbols have already been read into a per-BFD object, then a symbol reader can skip re-reading them. This changes the ELF reader to do so. We only skip the work if the file is ELF+DWARF. If it has stabs or mdebug sections, then I think extra information is computed during the minsym creation pass; and so we must still repeat it. Eventually even this will go away, once all symbol types have switched to being progspace-independent. In the meantime this has no negative effect -- it is just a missing optimization for a small set of users. This change also required a somewhat non-obvious change to the OBJSTAT accounting code. If a symbol reader skips re-reading minimal symbols, then the corresponding OBJSTAT will not be updated. This leads to a test failure in gdb.base/maint.exp. To fix this, I've moved the needed stat field out of objfile and into the per-BFD object. 2014-02-26 Tom Tromey <tromey@redhat.com> * elfread.c (elf_read_minimal_symbols): Return early if minimal symbols have already been read. Add "ei" parameter. (elf_symfile_read): Call elf_read_minimal_symbols earlier. * minsyms.c (prim_record_minimal_symbol_full): Update. * objfiles.h (struct objstats) <n_minsyms>: Move... (struct objfile_per_bfd_storage) <n_minsyms>: ... here. * symmisc.c (print_objfile_statistics): Update.
2014-02-26split out elf_read_minimal_symbolsTom Tromey2-31/+48
This is just a simple refactoring in elfread.c to split out the minsym-reading code into its own function. 2014-02-26 Tom Tromey <tromey@redhat.com> * elfread.c (elf_read_minimal_symbols): New function, from elf_symfile_read. (elf_symfile_read): Call it.
2014-02-26move minimal symbols to per-bfdTom Tromey6-75/+120
Now that minimal symbols are independent of the program space, we can move them to the per-BFD object. This lets us save memory in the multi-inferior case; and, once the symbol readers are updated, time. The other prerequisite for this move is that all the objects referred to by the minimal symbols have a lifetime at least as long as the per-BFD object. I think this is satisfied partially by this patch (moving the copied names there) and partially by earlier patches moving the demangled name hash. This patch contains a bit of logic to avoid creating new minimal symbols if they have already been read for a given BFD. This allows us to avoid trying to update all the symbol readers for this condition. At first glance this may seem like a hack, but some symbol readers mix psym and minsym reading, and would require logic just like this regardless -- and it is simpler and less error-prone to just do the work in a central spot. 2014-02-26 Tom Tromey <tromey@redhat.com> * minsyms.c (lookup_minimal_symbol, iterate_over_minimal_symbols) (lookup_minimal_symbol_text, lookup_minimal_symbol_by_pc_name) (lookup_minimal_symbol_solib_trampoline) (lookup_minimal_symbol_by_pc_section_1) (lookup_minimal_symbol_and_objfile): Update. (prim_record_minimal_symbol_full): Use the per-BFD obstack. Don't allocate a minimal symbol if minsyms have already been read. (build_minimal_symbol_hash_tables): Update. (install_minimal_symbols): Do nothing if minsyms already read. Use the per-BFD obstack. (terminate_minimal_symbol_table): Use the per-BFD obstack. * objfiles.c (allocate_objfile): Call terminate_minimal_symbol_table later. (have_minimal_symbols): Update. * objfiles.h (struct objfile_per_bfd_storage) <msymbols, minimal_symbol_count, msymbol_hash, msymbol_demangled_hash>: Move from struct objfile. <minsyms_read>: New field. (struct objfile) <msymbols, minimal_symbol_count, msymbol_hash, msymbol_demangled_hash>: Move. (ALL_OBJFILE_MSYMBOLS): Update. * symfile.c (read_symbols): Set minsyms_read. (reread_symbols): Update. * symmisc.c (dump_objfile, dump_msymbols): Update.