summaryrefslogtreecommitdiffstats
path: root/lldb/source/Plugins/Process/Linux
Commit message (Collapse)AuthorAgeFilesLines
* NativeThreadLinux: remove translation of some Linux signals to gdb signals.Todd Fiala2014-08-271-26/+14
| | | | | | | | | | | I copied this originally based on what debugserver was doing. This appears to be incorrect and unncessary for Linux. The LinuxSignals on the lldb side don't look for these and therefore they get handled incorrectly. Leaving the hook in place since I think darwin will continue to need to translate those signal numbers. llvm-svn: 216564
* Add Linux support for get thread area on ARM64 using ProcessMonitor debugging.Todd Fiala2014-08-271-5/+14
| | | | | | | | See http://reviews.llvm.org/D5073. Change by Paul Osmialowski. llvm-svn: 216553
* Add software breakpoint support for Linux aarch64.Todd Fiala2014-08-211-0/+11
| | | | | | | | See http://reviews.llvm.org/D4969 for details. Change by Paul Osmialowski. llvm-svn: 216188
* Enable more Linux aarch64 PTRACE support for local and remote debugging.Todd Fiala2014-08-212-15/+105
| | | | | | | | See http://reviews.llvm.org/D4803 for more details. Change by Paul Osmialowski. llvm-svn: 216185
* Move Host::GetArchitecture to HostInfo::GetArchitecture.Zachary Turner2014-08-202-6/+7
| | | | | | | | As a side effect, this patch also eliminates all of the preprocessor conditionals previously used to implement GetArchitecture(). llvm-svn: 216074
* Fix Linux to respect ASLR settings when launching processes to debug locally ↵Todd Fiala2014-08-174-8/+91
| | | | | | | | | | and remotely. See the following links for details: http://llvm.org/bugs/show_bug.cgi?id=20658 See http://reviews.llvm.org/D4941 llvm-svn: 215822
* Move FileSystem functions out of Host and into their own classes.Zachary Turner2014-08-151-2/+2
| | | | | | | | | | | | | | | | More specifically, this change can be summarized as follows: 1) Makes an lldbHostPosix library which contains code common to all posix platforms. 2) Creates Host/FileSystem.h which defines a common FileSystem interface. 3) Implements FileSystem.h in Host/windows and Host/posix. 4) Creates Host/FileCache.h, implemented in Host/common, which defines a class useful for storing handles to open files needed by the debugger. Differential Revision: http://reviews.llvm.org/D4889 llvm-svn: 215775
* Refactor FileAction out of ProcessLaunchInfo.Zachary Turner2014-08-141-3/+3
| | | | | | | | | | | | | FileAction was previously a nested class in ProcessLaunchInfo. This led to some unfortunate style consequences, such as requiring the AddPosixSpawnFileAction() funciton to be defined in the Target layer, instead of the more appropriate Host layer. This patch makes FileAction its own independent class in the Target layer, and then moves AddPosixSpawnFileAction() into Host as a result. Differential Revision: http://reviews.llvm.org/D4877 llvm-svn: 215649
* llgs: corrected Linux signal reception notification for SIGABRT, SIGSEGV and ↵Todd Fiala2014-08-121-81/+84
| | | | | | | | | their ilk. Added llgs/debugserver gdb-remote tests around SIGABRT and SIGSEGV signal reception notification. Found a few bugs in exception signal handling in Linux llgs. Fixed those. llvm-svn: 215458
* linux process: silence GCC switch coverage warningSaleem Abdulrasool2014-07-201-0/+2
| | | | | | | Add missing entry for eExecMessage message type to silence GCC switch coverage warning. llvm-svn: 213470
* Fix a type mismatch in NativeProcessLinux that shows up in 32-bit builds.Todd Fiala2014-07-101-1/+1
| | | | | | http://llvm.org/bugs/show_bug.cgi?id=20255 llvm-svn: 212685
* Fixes for broken Debian build - g++ 4.7 support.Todd Fiala2014-07-101-5/+5
| | | | | | | | | | | | | | | | | | | | | | | | These fix the broken debian lldb build, which is using g++ 4.7.2. TypeFormat changes: 1. stopped using the C++11 "dtor = default;" construct. The generated default destructor in the two derived classes wanted them to have a different throws() semantic that was causing 4.7 to fail to generate it. I switched these to empty destructors defined in the .cpp file. 2. Switched the m_types map from an ordered map to an unordered_map. g++ 4.7's c++ library supports the C++11 emplace() used by TypeFormat but the same c++ library's map impl does not. Since TypeFormat didn't look like it depended on ordering in the map, I just switched it to a std::unordered_map. NativeProcessLinux - g++ 4.7 chokes on lexing the "<::" in static_cast<::pid_t>(wpid). g++ 4.8+ and clang are fine with it. I just put a space in between the "<" and the "::" and that cleared it up. llvm-svn: 212681
* lldb - problem with some PTRACE_* constants in NativeProcessLinux.cpp fileTodd Fiala2014-07-021-1/+15
| | | | | | | | | | | | | | | | See http://reviews.llvm.org/D4366 for details. Change by Paul Paul Osmialowski Today this is the only problem that I'm facing trying to cross-compile lldb for AArch64 using Linaro's toolchain. PTRACE_GETREGS, PTRACE_SETREGS, PTRACE_GETFPREGS, PTRACE_SETFPREGS are not defined for AArch64 These things can be defined different ways for other architectures, e.g. for x86_64 Linux, asm/ptrace-abi.h defines them as preprocessor constants while sys/ptrace.h defines them in enum along with corresponding PT_* preprocessor constants NativeProcessLinux.cpp includes sys/ptrace.h To avoid accidental redefinition of enums with preprocessor constants, I'm proposing this patch which first checks for PT_* preprocessor constants then checks for PTRACE_* constants then when it still can not find them, it defines preprocessor constants. Similar approach was already used for PTRACE_GETREGSET and PTRACE_SETREGSET constants; in this case however it was easier, since enum values in sys/ptrace.h and preprocessor constants shared all exactly the same names (e.g. there's no additional PT_GETREGSET name defined). llvm-svn: 212225
* Use native ::pid_t in Linux ProcessMonitor (local debugging).Todd Fiala2014-07-011-14/+19
| | | | | | | | | | There were a few places where we were not catching the possibility of negative error codes in waitpid() calls. This change fixes those remaining after the llgs branch fixes to ProcessMonitor. Change by Shawn Best. llvm-svn: 212107
* Fixup Windows build breaks for the llgs upstream.Todd Fiala2014-06-304-1/+1178
| | | | | | | | Also moves NativeRegisterContextLinux* files into the Linux directory. These, like NativeProcessLinux, should only be built on Linux or a cross compiler with proper headers. llvm-svn: 212074
* Add lldb-gdbserver support for Linux x86_64.Todd Fiala2014-06-309-104/+4314
| | | | | | | | | | | | | | | | | | | | | This change brings in lldb-gdbserver (llgs) specifically for Linux x86_64. (More architectures coming soon). Not every debugserver option is covered yet. Currently the lldb-gdbserver command line can start unattached, start attached to a pid (process-name attach not supported yet), or accept lldb attaching and launching a process or connecting by process id. The history of this large change can be found here: https://github.com/tfiala/lldb/tree/dev-tfiala-native-protocol-linux-x86_64 Until mid/late April, I was not sharing the work and continued to rebase it off of head (developed via id tfiala@google.com). I switched over to user todd.fiala@gmail.com in the middle, and once I went to github, I did merges rather than rebasing so I could share with others. llvm-svn: 212069
* Factored out Linux proc file reading into separate class.Todd Fiala2014-06-303-0/+140
| | | | | | | | | | | | | Both NativeProcessLinux (in llgs branch) and Linux Host.cpp had similar code to handle /proc file reading. I factored that out into a new Linux-specific ProcFileReader class and added a method that the llgs branch will use for line-by-line parsing. This change also adds numerous Linux-specific files to Xcode that were missing from the Xcode project files. Related to https://github.com/tfiala/lldb/issues/27 llvm-svn: 212015
* lldb: deal with non-portable PTRACE-related constantsTodd Fiala2014-06-231-0/+20
| | | | | | | | See http://reviews.llvm.org/D4091 for details. Change by Paul Osmialowski. llvm-svn: 211503
* Move x86-specific struct user code for Linux ProcessMonitor behind #define ↵Todd Fiala2014-06-161-0/+4
| | | | | | | | | | guards. See http://reviews.llvm.org/D4092 for details. Change by Paul Osmialowski. (Minor tweaks to the comment by Todd.) llvm-svn: 211026
* Use getpgid() with waitpid() in case the process pgid is not equal to its ↵Andrew MacPherson2014-04-021-1/+1
| | | | | | pid, as is the case with a forked subprocess. Also a couple of fixes for unit test failures from Todd Fiala. llvm-svn: 205405
* sanitise sign comparisonsSaleem Abdulrasool2014-04-021-3/+3
| | | | | | | | This is a mechanical change addressing the various sign comparison warnings that are identified by both clang and gcc. This helps cleanup some of the warning spew that occurs during builds. llvm-svn: 205390
* Implement ProcessMonitor::Kill for LinuxEd Maste2014-04-012-34/+4
| | | | | | | | | | | | | | | | | | | | | On FreeBSD ptrace(PT_KILL) is used to terminate the traced process (as if PT_CONTINUE had been used with SIGKILL as the signal to be delivered), and is the desired behaviour for ProcessPOSIX::DoDestroy. On Linux, after ptrace(PTRACE_KILL) the traced process still exists and can be interrogated. It is only upon resume that it exits as though it received SIGKILL. As the Linux PTRACE_KILL behaviour is not used by LLDB, rename BringProcessIntoLimbo to Kill, and change the implementation to simply call kill() instead of using ptrace. Thanks to Todd F for testing (Ubuntu 12.04, gcc 4.8.2). Sponsored by: DARPA, AFRL Differential Revision: http://llvm-reviews.chandlerc.com/D3159 llvm-svn: 205337
* Make ProcessLinux return true for DetachRequiresHalt() because PTRACE_DETACH ↵Andrew MacPherson2014-03-251-0/+3
| | | | | | requires this. llvm-svn: 204759
* Suppress SIGSTOP under Linux and don't explicitly call SetResumeSignal() in ↵Andrew MacPherson2014-03-211-1/+1
| | | | | | POSIXThread, instead just let StopInfo handle it. llvm-svn: 204504
* Correct copy-and-pasted comments for DetachOperationEd Maste2014-03-171-2/+2
| | | | llvm-svn: 204064
* Moved various RegisterContext files from Process/POSIX to Process/Utility ↵Virgile Bello2014-03-121-0/+1
| | | | | | | | | for easier sharing. Fix Windows build by adding JITLoaderGDB and ProcessElfCore. RegisterContext: fixes for Windows build: sizeof(GPR::register) didn't work, switched to sizeof(((GPR*)NULL)->register). llvm-svn: 203667
* Get Linux i386 running.Todd Fiala2014-03-041-4/+0
| | | | | | | | | | | | | | | | | | | | | | | | | This change uses a fixed known offset for the Linux i386 DR0 register. This change also undoes the 32-bit wordsize change from r169645 that revolved around being 32-bit/64-bit friendly in WriteRegOperation::Execute within the Linux ProcessMonitor.cpp. I ran all the tests on x86_64 Linux with no failures. I also ran some simple tests with 32-bit Linux exe on x86_64 host and 32-bit linux exe on i686 32-bit host and these worked fine. Note (from Todd): the UserData struct in the Linux i386 register context (only used by Linux i386 host running Linux 32-bit inferior) is out of sync with what shows up in the sys/user.h for an 32-bit Linux build (per an earlier change of mine to make it look more like x86_64 host running x86 exe). I think we should (1) make i386 Linux targets run using the same register context (and correct ones) on i386 and x86_64 linux hosts if that is possible, and (2) we could use some tests around the register handling, particularly to verify things like DR0 registers are in the right spots on host/target combos that we can verify vs. known correct values. Change by Matthew Gardiner. llvm-svn: 202887
* Fix linux x86 debugging on a linux x86 host (32-bit on 32-bit).Todd Fiala2014-02-271-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This change fixes up issues with specifying the size of the i386 register infos for FPU registers. The bug was that for the i386 register context, the size of the FPU registers were still being computed based on the x86_64 FXSAVE structure. This change permits the FPR_SIZE macro to optionally be defined outside of RegisterInfos_i386.h, which RegisterContextLinux_i386.cpp does properly. It redefines the FPR_i386 structure with all the accessible parts that RegisterInfos_i386.h wants to see, which we had not done before when we made the overall size of the structure properly sized a recently. This change also modifies POSIXThread to create a RegisterContextLinux_i386 only when the host is 32-bit; otherwise, it uses the RegisterContextLinux_x86_64, which works properly for 32-bit and 64-bit inferiors on a 64-bit host. I tested this debugging a Linux x86 exe on an x86 host (Ubuntu 13.10 x86), and debugging a Linux x86 exe and a Linux x86-64 exe on an x86-64 host (Ubuntu 12.04 LTS). Those cases all worked. Thanks to Matthew Gardiner who discoverd may key insights into tracking down the issue. The motivation for this change and some of the code originates from him via this thread: http://lists.cs.uiuc.edu/pipermail/lldb-commits/Week-of-Mon-20140224/010554.html llvm-svn: 202428
* Fix ptrace log on i386 and include return valueEd Maste2014-02-241-4/+4
| | | | | | Patch by Matthew Gardiner llvm-svn: 202036
* FreeBSD hardware watchpoint implementationEd Maste2014-02-192-25/+0
| | | | | | | | | | | | | | | Implement x86_64 debug register read/write in support of hardware watchpoints. Hoist LinuxThread::TraceNotify code back into POSIXThread::TraceNotify() Patch by John Wolfe. We still need to rework this later to avoid the #ifdef FreeBSD. llvm-reviews.chandlerc.com/D2572 llvm.org/pr16706 llvm-svn: 201706
* Fix group stop signal handling issue on Linux.Todd Fiala2014-01-271-5/+14
| | | | | | | | | | This patch addresses a bug where in a multi-threaded program a new signal from the inferior may be received before all group-stop messages from an earlier signal have been handled. Patch by Andrew MacPherson llvm-svn: 200226
* Fix crash on Linux if sem_wait() is interrupted.Todd Fiala2014-01-241-2/+12
| | | | | | Patch by Andrew MacPherson. llvm-svn: 200049
* Fix Linux by partially reverting 196787Ed Maste2013-12-114-176/+1
| | | | llvm-svn: 197065
* Fix Linux build after r196787Ed Maste2013-12-094-2/+9
| | | | | | Patch from Xavier de Gaye llvm-svn: 196830
* Threaded inferior support for FreeBSDEd Maste2013-12-094-2/+170
| | | | | | | Modelled in part on GDBRemoteCommunicationClient. Review: http://llvm-reviews.chandlerc.com/D2267 llvm-svn: 196787
* Correct header guard #endif commentsEd Maste2013-12-041-1/+1
| | | | llvm-svn: 196381
* Removed unnecessary call to OpenFirstAvailableMaster.Richard Mitton2013-10-171-8/+0
| | | | | | | | ::Fork already does this internally, so this was simply leaking file handles. This fixes the problem where the test suite would occasionally run out of file handles. llvm-svn: 192929
* Added support for reading thread-local storage variables, as defined using ↵Richard Mitton2013-10-172-0/+95
| | | | | | | | | | | | | | | | | | | | | | | | | | | | the __thread modifier. To make this work this patch extends LLDB to: - Explicitly track the link_map address for each module. This is effectively the module handle, not sure why it wasn't already being stored off anywhere. As an extension later, it would be nice if someone were to add support for printing this as part of the modules list. - Allow reading the per-thread data pointer via ptrace. I have added support for Linux here. I'll be happy to add support for FreeBSD once this is reviewed. OS X does not appear to have __thread variables, so maybe we don't need it there. Windows support should eventually be workable along the same lines. - Make DWARF expressions track which module they originated from. - Add support for the DW_OP_GNU_push_tls_address DWARF opcode, as generated by gcc and recent versions of clang. Earlier versions of clang (such as 3.2, which is default on Ubuntu right now) do not generate TLS debug info correctly so can not be supported here. - Understand the format of the pthread DTV block. This is where it gets tricky. We have three basic options here: 1) Call "dlinfo" or "__tls_get_addr" on the inferior and ask it directly. However this won't work on core dumps, and generally speaking it's not a good idea for the debugger to call functions itself, as it has the potential to not work depending on the state of the target. 2) Use libthread_db. This is what GDB does. However this option requires having a version of libthread_db on the host cross-compiled for each potential target. This places a large burden on the user, and would make it very hard to cross-debug from Windows to Linux, for example. Trying to build a library intended exclusively for one OS on a different one is not pleasant. GDB sidesteps the problem and asks the user to figure it out. 3) Parse the DTV structure ourselves. On initial inspection this seems to be a bad option, as the DTV structure (the format used by the runtime to manage TLS data) is not in fact a kernel data structure, it is implemented entirely in useerland in libc. Therefore the layout of it's fields are version and OS dependent, and are not standardized. However, it turns out not to be such a problem. All OSes use basically the same algorithm (a per-module lookup table) as detailed in Ulrich Drepper's TLS ELF ABI document, so we can easily write code to decode it ourselves. The only question therefore is the exact field layouts required. Happily, the implementors of libpthread expose the structure of the DTV via metadata exported as symbols from the .so itself, designed exactly for this kind of thing. So this patch simply reads that metadata in, and re-implements libthread_db's algorithm itself. We thereby get cross-platform TLS lookup without either requiring third-party libraries, while still being independent of the version of libpthread being used. Test case included. llvm-svn: 192922
* Add exec support for Linux including common support for POSIX.Matt Kopec2013-10-091-2/+4
| | | | llvm-svn: 192319
* Clean up RegisterContextPOSIX i386 code.Michael Sartain2013-10-091-1/+2
| | | | | | | | | | | Use 32-bit register enums without gaps on 64-bit hosts. Don't show 64-bit registers when debugging 32-bit targets. Add psuedo gpr registers (ax, ah, al, etc.) Add mmx registers. Fix TestRegisters.py to not read ymm15 register on 32-bit targets. Fill out and move gcc/dwarf/gdb register enums to RegisterContext_x86.h llvm-svn: 192263
* If setgid fails for any reason, exit lldb.Sylvestre Ledru2013-09-281-2/+7
| | | | | | | scan-build was complaining about: The return value from the call to 'setgid' is not checked. If an error occurs in 'setgid', the following code may execute with unexpected privileges llvm-svn: 191618
* Fix build failures under GNU/Linux running on mipsSylvestre Ledru2013-09-191-0/+2
| | | | llvm-svn: 191027
* Warning cleanup.Michael Sartain2013-09-181-6/+5
| | | | llvm-svn: 190942
* Fixing a problem with thread creation signal order dependencyAndrew Kaylor2013-09-172-0/+78
| | | | llvm-svn: 190831
* Improve stability of Linux ProcessMonitor by not using fds for synchronization:Daniel Malea2013-09-162-113/+33
| | | | | | | | | | | | | | | | | | - ProcessMonitor::[Do|Serve]Operation no longer depend on file descriptors! - removed unused member functions CloseFD and EnableIPC - add semaphores to signal when an Operation is ready to be processed/complete. This commit fixes a bug that was identified under stress-testing (i.e. build LLVM while running tests) that led to LLDB becoming unresponsive because the read/write operations on file descriptors in ProcessMonitor were not checked. Other test runner improvement/convenience: - pickup environment variables LLDB_LINUX_LOG and LLDB_LINUX_LOG_OPTIONS to enable (Linux) logging when running the test suite. Example usage: $ LLDB_LINUX_LOG="mylog.txt" LLDB_LINUX_LOG_OPTIONS="process thread" python dotest.py llvm-svn: 190820
* Clean up RegisterContextPOSIX. Renamed to POSIXBreakpointProtocol.Michael Sartain2013-09-141-1/+1
| | | | | | Will clean up header files and m_register_infos shortly. llvm-svn: 190757
* Stop closing terminal fd from ProcessMonitor. It is owned by ↵Andrew Kaylor2013-09-141-1/+4
| | | | | | ConnectionFileDescriptor. llvm-svn: 190733
* Fixing a problem with inferior exit caused by signalAndrew Kaylor2013-09-041-0/+6
| | | | llvm-svn: 189953
* Move detach to FreeBSD- and Linux-specific classes.Ed Maste2013-08-302-0/+32
| | | | | | | | | On Linux there is no separate notion of a process (vs. a thread) for ptrace(); each thread needs to be individually detached. On FreeBSD we have a separate process context, and we detach just it. Review: http://llvm-reviews.chandlerc.com/D1418 llvm-svn: 189666
* Handle SI_KERNEL signal code for SIGSEGV exceptions.Matt Kopec2013-08-091-0/+6
| | | | | | Patch by Richard Mitton. llvm-svn: 188075
OpenPOWER on IntegriCloud