[Lldb-commits] [lldb] r298374 - Remove ProcFileReader
Pavel Labath via lldb-commits
lldb-commits at lists.llvm.org
Tue Mar 21 06:49:46 PDT 2017
Author: labath
Date: Tue Mar 21 08:49:45 2017
New Revision: 298374
URL: http://llvm.org/viewvc/llvm-project?rev=298374&view=rev
Log:
Remove ProcFileReader
This removes the last usage of ProcFileReader from NativeProcessLinux
and then deletes the class itself.
Removed:
lldb/trunk/source/Plugins/Process/Linux/ProcFileReader.cpp
lldb/trunk/source/Plugins/Process/Linux/ProcFileReader.h
Modified:
lldb/trunk/source/Plugins/Process/Linux/CMakeLists.txt
lldb/trunk/source/Plugins/Process/Linux/NativeProcessLinux.cpp
Modified: lldb/trunk/source/Plugins/Process/Linux/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/Linux/CMakeLists.txt?rev=298374&r1=298373&r2=298374&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Process/Linux/CMakeLists.txt (original)
+++ lldb/trunk/source/Plugins/Process/Linux/CMakeLists.txt Tue Mar 21 08:49:45 2017
@@ -11,7 +11,6 @@ add_lldb_library(lldbPluginProcessLinux
NativeRegisterContextLinux_mips64.cpp
NativeRegisterContextLinux_s390x.cpp
NativeThreadLinux.cpp
- ProcFileReader.cpp
SingleStepCheck.cpp
LINK_LIBS
Modified: lldb/trunk/source/Plugins/Process/Linux/NativeProcessLinux.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/Linux/NativeProcessLinux.cpp?rev=298374&r1=298373&r2=298374&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Process/Linux/NativeProcessLinux.cpp (original)
+++ lldb/trunk/source/Plugins/Process/Linux/NativeProcessLinux.cpp Tue Mar 21 08:49:45 2017
@@ -46,7 +46,6 @@
#include "NativeThreadLinux.h"
#include "Plugins/Process/POSIX/ProcessPOSIXLog.h"
-#include "ProcFileReader.h"
#include "Procfs.h"
#include "llvm/Support/FileSystem.h"
@@ -1432,11 +1431,11 @@ Error NativeProcessLinux::Kill() {
}
static Error
-ParseMemoryRegionInfoFromProcMapsLine(const std::string &maps_line,
+ParseMemoryRegionInfoFromProcMapsLine(llvm::StringRef &maps_line,
MemoryRegionInfo &memory_region_info) {
memory_region_info.Clear();
- StringExtractor line_extractor(maps_line.c_str());
+ StringExtractor line_extractor(maps_line);
// Format: {address_start_hex}-{address_end_hex} perms offset dev inode
// pathname
@@ -1597,36 +1596,36 @@ Error NativeProcessLinux::PopulateMemory
return Error();
}
- Error error = ProcFileReader::ProcessLineByLine(
- GetID(), "maps", [&](const std::string &line) -> bool {
- MemoryRegionInfo info;
- const Error parse_error =
- ParseMemoryRegionInfoFromProcMapsLine(line, info);
- if (parse_error.Success()) {
- m_mem_region_cache.emplace_back(
- info, FileSpec(info.GetName().GetCString(), true));
- return true;
- } else {
- LLDB_LOG(log, "failed to parse proc maps line '{0}': {1}", line,
- parse_error);
- return false;
- }
- });
-
- // If we had an error, we'll mark unsupported.
- if (error.Fail()) {
+ auto BufferOrError = getProcFile(GetID(), "maps");
+ if (!BufferOrError) {
m_supports_mem_region = LazyBool::eLazyBoolNo;
- return error;
- } else if (m_mem_region_cache.empty()) {
+ return BufferOrError.getError();
+ }
+ StringRef Rest = BufferOrError.get()->getBuffer();
+ while (! Rest.empty()) {
+ StringRef Line;
+ std::tie(Line, Rest) = Rest.split('\n');
+ MemoryRegionInfo info;
+ const Error parse_error = ParseMemoryRegionInfoFromProcMapsLine(Line, info);
+ if (parse_error.Fail()) {
+ LLDB_LOG(log, "failed to parse proc maps line '{0}': {1}", Line,
+ parse_error);
+ m_supports_mem_region = LazyBool::eLazyBoolNo;
+ return parse_error;
+ }
+ m_mem_region_cache.emplace_back(
+ info, FileSpec(info.GetName().GetCString(), true));
+ }
+
+ if (m_mem_region_cache.empty()) {
// No entries after attempting to read them. This shouldn't happen if
// /proc/{pid}/maps is supported. Assume we don't support map entries
// via procfs.
+ m_supports_mem_region = LazyBool::eLazyBoolNo;
LLDB_LOG(log,
"failed to find any procfs maps entries, assuming no support "
"for memory region metadata retrieval");
- m_supports_mem_region = LazyBool::eLazyBoolNo;
- error.SetErrorString("not supported");
- return error;
+ return Error("not supported");
}
LLDB_LOG(log, "read {0} memory region entries from /proc/{1}/maps",
Removed: lldb/trunk/source/Plugins/Process/Linux/ProcFileReader.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/Linux/ProcFileReader.cpp?rev=298373&view=auto
==============================================================================
--- lldb/trunk/source/Plugins/Process/Linux/ProcFileReader.cpp (original)
+++ lldb/trunk/source/Plugins/Process/Linux/ProcFileReader.cpp (removed)
@@ -1,103 +0,0 @@
-//===-- ProcFileReader.cpp --------------------------------------*- C++ -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "Plugins/Process/Linux/ProcFileReader.h"
-
-// C Headers
-#include <fcntl.h>
-#include <inttypes.h>
-#include <limits.h>
-#include <stdio.h>
-#include <sys/stat.h>
-
-// C++ Headers
-#include <fstream>
-
-// LLDB Headers
-#include "lldb/Utility/DataBufferHeap.h"
-#include "lldb/Utility/Error.h"
-
-using namespace lldb_private;
-using namespace lldb_private::process_linux;
-
-lldb::DataBufferSP ProcFileReader::ReadIntoDataBuffer(lldb::pid_t pid,
- const char *name) {
- int fd;
- char path[PATH_MAX];
-
- // Make sure we've got a nil terminated buffer for all the folks calling
- // GetBytes() directly off our returned DataBufferSP if we hit an error.
- lldb::DataBufferSP buf_sp(new DataBufferHeap(1, 0));
-
- // Ideally, we would simply create a FileSpec and call ReadFileContents.
- // However, files in procfs have zero size (since they are, in general,
- // dynamically generated by the kernel) which is incompatible with the
- // current ReadFileContents implementation. Therefore we simply stream the
- // data into a DataBuffer ourselves.
- if (snprintf(path, PATH_MAX, "/proc/%" PRIu64 "/%s", pid, name) > 0) {
- if ((fd = open(path, O_RDONLY, 0)) >= 0) {
- size_t bytes_read = 0;
- std::unique_ptr<DataBufferHeap> buf_ap(new DataBufferHeap(1024, 0));
-
- for (;;) {
- size_t avail = buf_ap->GetByteSize() - bytes_read;
- ssize_t status = read(fd, buf_ap->GetBytes() + bytes_read, avail);
-
- if (status < 0)
- break;
-
- if (status == 0) {
- buf_ap->SetByteSize(bytes_read);
- buf_sp.reset(buf_ap.release());
- break;
- }
-
- bytes_read += status;
-
- if (avail - status == 0)
- buf_ap->SetByteSize(2 * buf_ap->GetByteSize());
- }
-
- close(fd);
- }
- }
-
- return buf_sp;
-}
-
-Error ProcFileReader::ProcessLineByLine(
- lldb::pid_t pid, const char *name,
- std::function<bool(const std::string &line)> line_parser) {
- Error error;
-
- // Try to open the /proc/{pid}/maps entry.
- char filename[PATH_MAX];
- snprintf(filename, sizeof(filename), "/proc/%" PRIu64 "/%s", pid, name);
- filename[sizeof(filename) - 1] = '\0';
-
- std::ifstream proc_file(filename);
- if (proc_file.fail()) {
- error.SetErrorStringWithFormat("failed to open file '%s'", filename);
- return error;
- }
-
- // Read the file line by line, processing until either end of file or when the
- // line_parser returns false.
- std::string line;
- bool should_continue = true;
-
- while (should_continue && std::getline(proc_file, line)) {
- // Pass the line over to the line_parser for processing. If the line_parser
- // returns false, we
- // stop processing.
- should_continue = line_parser(line);
- }
-
- return error;
-}
Removed: lldb/trunk/source/Plugins/Process/Linux/ProcFileReader.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/Linux/ProcFileReader.h?rev=298373&view=auto
==============================================================================
--- lldb/trunk/source/Plugins/Process/Linux/ProcFileReader.h (original)
+++ lldb/trunk/source/Plugins/Process/Linux/ProcFileReader.h (removed)
@@ -1,37 +0,0 @@
-//===-- ProcFileReader.h ----------------------------------------*- C++ -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef liblldb_ProcFileReader_h_
-#define liblldb_ProcFileReader_h_
-
-#include <functional>
-
-#include "lldb/lldb-forward.h"
-#include "lldb/lldb-types.h"
-
-namespace lldb_private {
-namespace process_linux {
-
-class ProcFileReader {
-public:
- static lldb::DataBufferSP ReadIntoDataBuffer(lldb::pid_t pid,
- const char *name);
-
- /// Parse the /proc/{@a pid}/{@a name} file line by line, passing each line to
- /// line_parser, until
- /// either end of file or until line_parser returns false.
- static Error
- ProcessLineByLine(lldb::pid_t pid, const char *name,
- std::function<bool(const std::string &line)> line_parser);
-};
-
-} // namespace process_linux
-} // namespace lldb_private
-
-#endif // #ifndef liblldb_ProcFileReader_h_
More information about the lldb-commits
mailing list