LLDB
mainline
llvm-project
lldb
source
Plugins
Process
POSIX
NativeProcessELF.h
Go to the documentation of this file.
1
//===-- NativeProcessELF.h ------------------------------------ -*- C++ -*-===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
9
#ifndef liblldb_NativeProcessELF_H_
10
#define liblldb_NativeProcessELF_H_
11
12
#include "
Plugins/Process/Utility/AuxVector.h
"
13
#include "
lldb/Host/common/NativeProcessProtocol.h
"
14
#include "llvm/BinaryFormat/ELF.h"
15
#include <optional>
16
17
namespace
lldb_private
{
18
19
/// \class NativeProcessELF
20
/// Abstract class that extends \a NativeProcessProtocol with ELF specific
21
/// logic. Meant to be subclassed by ELF based NativeProcess* implementations.
22
class
NativeProcessELF
:
public
NativeProcessProtocol
{
23
using
NativeProcessProtocol::NativeProcessProtocol
;
24
25
public
:
26
std::optional<uint64_t>
GetAuxValue
(
enum
AuxVector::EntryType
type);
27
28
protected
:
29
template
<
typename
T>
struct
ELFLinkMap
{
30
T
l_addr
;
31
T
l_name
;
32
T
l_ld
;
33
T
l_next
;
34
T
l_prev
;
35
};
36
37
lldb::addr_t
GetSharedLibraryInfoAddress
()
override
;
38
39
template
<
typename
ELF_EHDR,
typename
ELF_PHDR,
typename
ELF_DYN>
40
lldb::addr_t
GetELFImageInfoAddress
();
41
42
llvm::Expected<std::vector<SVR4LibraryInfo>>
43
GetLoadedSVR4Libraries
()
override
;
44
45
template
<
typename
T>
46
llvm::Expected<SVR4LibraryInfo>
47
ReadSVR4LibraryInfo
(
lldb::addr_t
link_map_addr);
48
49
void
NotifyDidExec
()
override
;
50
51
std::unique_ptr<AuxVector>
m_aux_vector
;
52
std::optional<lldb::addr_t>
m_shared_library_info_addr
;
53
};
54
55
// Explicitly declare the two 32/64 bit templates that NativeProcessELF.cpp will
56
// define. This allows us to keep the template definition here and usable
57
// elsewhere.
58
extern
template
lldb::addr_t
NativeProcessELF::GetELFImageInfoAddress
<
59
llvm::ELF::Elf32_Ehdr, llvm::ELF::Elf32_Phdr, llvm::ELF::Elf32_Dyn>();
60
extern
template
lldb::addr_t
NativeProcessELF::GetELFImageInfoAddress
<
61
llvm::ELF::Elf64_Ehdr, llvm::ELF::Elf64_Phdr, llvm::ELF::Elf64_Dyn>();
62
63
}
// namespace lldb_private
64
65
#endif
lldb::addr_t
uint64_t addr_t
Definition:
lldb-types.h:83
lldb_private::NativeProcessELF::GetSharedLibraryInfoAddress
lldb::addr_t GetSharedLibraryInfoAddress() override
Definition:
NativeProcessELF.cpp:31
lldb_private::NativeProcessELF::ELFLinkMap::l_name
T l_name
Definition:
NativeProcessELF.h:31
lldb_private::NativeProcessELF::GetAuxValue
std::optional< uint64_t > GetAuxValue(enum AuxVector::EntryType type)
Definition:
NativeProcessELF.cpp:17
lldb_private::NativeProcessProtocol::NativeProcessProtocol
NativeProcessProtocol(lldb::pid_t pid, int terminal_fd, NativeDelegate &delegate)
Definition:
NativeProcessProtocol.cpp:28
AuxVector.h
lldb_private::NativeProcessELF::NotifyDidExec
void NotifyDidExec() override
Notify the delegate that an exec occurred.
Definition:
NativeProcessELF.cpp:184
lldb_private::NativeProcessELF::m_shared_library_info_addr
std::optional< lldb::addr_t > m_shared_library_info_addr
Definition:
NativeProcessELF.h:52
NativeProcessProtocol.h
lldb_private::NativeProcessELF::GetLoadedSVR4Libraries
llvm::Expected< std::vector< SVR4LibraryInfo > > GetLoadedSVR4Libraries() override
Definition:
NativeProcessELF.cpp:143
lldb_private::NativeProcessELF::ELFLinkMap::l_next
T l_next
Definition:
NativeProcessELF.h:33
AuxVector::EntryType
EntryType
Constants describing the type of entry.
Definition:
AuxVector.h:26
lldb_private::NativeProcessELF::GetELFImageInfoAddress
lldb::addr_t GetELFImageInfoAddress()
Definition:
NativeProcessELF.cpp:47
lldb_private::NativeProcessProtocol
Definition:
NativeProcessProtocol.h:49
lldb_private::NativeProcessELF::ELFLinkMap::l_prev
T l_prev
Definition:
NativeProcessELF.h:34
lldb_private::NativeProcessELF::ELFLinkMap::l_ld
T l_ld
Definition:
NativeProcessELF.h:32
lldb_private
A class that represents a running process on the host machine.
Definition:
SBCommandInterpreterRunOptions.h:16
lldb_private::NativeProcessELF::ELFLinkMap::l_addr
T l_addr
Definition:
NativeProcessELF.h:30
lldb_private::NativeProcessELF
Definition:
NativeProcessELF.h:22
lldb_private::NativeProcessELF::ReadSVR4LibraryInfo
llvm::Expected< SVR4LibraryInfo > ReadSVR4LibraryInfo(lldb::addr_t link_map_addr)
Definition:
NativeProcessELF.cpp:118
lldb_private::NativeProcessELF::m_aux_vector
std::unique_ptr< AuxVector > m_aux_vector
Definition:
NativeProcessELF.h:51
lldb_private::NativeProcessELF::ELFLinkMap
Definition:
NativeProcessELF.h:29
Generated on Sat Jan 28 2023 15:36:16 for LLDB by
1.8.17