From 39de3110712cb4547a835777310dbead46c1a002 Mon Sep 17 00:00:00 2001 From: Zachary Turner Date: Tue, 9 Sep 2014 20:54:56 +0000 Subject: Create a HostThread abstraction. This patch moves creates a thread abstraction that represents a thread running inside the LLDB process. This is a replacement for otherwise using lldb::thread_t, and provides a platform agnostic interface to managing these threads. Differential Revision: http://reviews.llvm.org/D5198 Reviewed by: Jim Ingham llvm-svn: 217460 --- lldb/source/Host/linux/HostThreadLinux.cpp | 47 ++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 lldb/source/Host/linux/HostThreadLinux.cpp (limited to 'lldb/source/Host/linux/HostThreadLinux.cpp') diff --git a/lldb/source/Host/linux/HostThreadLinux.cpp b/lldb/source/Host/linux/HostThreadLinux.cpp new file mode 100644 index 00000000000..619bd245ab2 --- /dev/null +++ b/lldb/source/Host/linux/HostThreadLinux.cpp @@ -0,0 +1,47 @@ +//===-- HostThreadLinux.cpp -------------------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "lldb/Core/DataBuffer.h" +#include "lldb/Host/linux/HostThreadLinux.h" +#include "Plugins/Process/Linux/ProcFileReader.h" + +#include "llvm/ADT/SmallVector.h" + +#include + +using namespace lldb_private; + +HostThreadLinux::HostThreadLinux() + : HostThreadPosix() +{ +} + +HostThreadLinux::HostThreadLinux(lldb::thread_t thread) + : HostThreadPosix(thread) +{ +} + +void +HostThreadLinux::SetName(lldb::thread_t thread, llvm::StringRef name) +{ + ::pthread_setname_np(thread, name.data()); +} + +void +HostThreadLinux::GetName(lldb::thread_t thread, llvm::SmallVectorImpl &name) +{ + // Read /proc/$TID/comm file. + lldb::DataBufferSP buf_sp = ProcFileReader::ReadIntoDataBuffer(thread, "comm"); + const char *comm_str = (const char *)buf_sp->GetBytes(); + const char *cr_str = ::strchr(comm_str, '\n'); + size_t length = cr_str ? (cr_str - comm_str) : strlen(comm_str); + + name.clear(); + name.append(comm_str, comm_str + length); +} -- cgit v1.2.3