diff options
author | Pavel Labath <labath@google.com> | 2015-06-29 09:18:17 +0000 |
---|---|---|
committer | Pavel Labath <labath@google.com> | 2015-06-29 09:18:17 +0000 |
commit | 33b51e87e1d89c6e1bd723942871b15ae1b9d0f0 (patch) | |
tree | 556c808697070ccecd907e134d31d7485a925ca1 /lldb/source/Host/linux | |
parent | a7a8e9a0184f406cd512b37f05e50fa05ea9115b (diff) | |
download | bcm5719-llvm-33b51e87e1d89c6e1bd723942871b15ae1b9d0f0.tar.gz bcm5719-llvm-33b51e87e1d89c6e1bd723942871b15ae1b9d0f0.zip |
[linux] Use cmake to detect support process_vm_readv (bug #23918)
Summary:
Some old linux versions do not have process_vm_readv function defined. Even older versions do not
have even the __NR_process_vm_readv syscall number. We use cmake to detect these situations and
fallback appropriately: in the first case, we can issue the syscall manually, while it the latter
case, we need to drop fast memory read support completely.
Test Plan: linux test suite passes
Reviewers: ovyalov, Eugene.Zelenko
Subscribers: tberghammer, lldb-commits
Differential Revision: http://reviews.llvm.org/D10727
llvm-svn: 240927
Diffstat (limited to 'lldb/source/Host/linux')
-rw-r--r-- | lldb/source/Host/linux/LibcGlue.cpp | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/lldb/source/Host/linux/LibcGlue.cpp b/lldb/source/Host/linux/LibcGlue.cpp new file mode 100644 index 00000000000..6e07134971d --- /dev/null +++ b/lldb/source/Host/linux/LibcGlue.cpp @@ -0,0 +1,29 @@ +//===-- LibcGlue.cpp --------------------------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// This file adds functions missing from libc on older versions of linux + +#include <unistd.h> +#include <sys/syscall.h> +#include <lldb/Host/linux/Uio.h> + +#ifndef HAVE_PROCESS_VM_READV // If the syscall wrapper is not available, provide one. +ssize_t process_vm_readv(::pid_t pid, + const struct iovec *local_iov, unsigned long liovcnt, + const struct iovec *remote_iov, unsigned long riovcnt, + unsigned long flags) +{ +#ifdef HAVE_NR_PROCESS_VM_READV // If we have the syscall number, we can issue the syscall ourselves. + return syscall(__NR_process_vm_readv, pid, local_iov, liovcnt, remote_iov, riovcnt, flags); +#else // If not, let's pretend the syscall is not present. + errno = ENOSYS; + return -1; +#endif +} +#endif |