diff options
Diffstat (limited to 'lldb/source/Plugins/Process/POSIX/NativeProcessELF.cpp')
| -rw-r--r-- | lldb/source/Plugins/Process/POSIX/NativeProcessELF.cpp | 71 |
1 files changed, 1 insertions, 70 deletions
diff --git a/lldb/source/Plugins/Process/POSIX/NativeProcessELF.cpp b/lldb/source/Plugins/Process/POSIX/NativeProcessELF.cpp index 50b2d05df3e..559b16c8fd6 100644 --- a/lldb/source/Plugins/Process/POSIX/NativeProcessELF.cpp +++ b/lldb/source/Plugins/Process/POSIX/NativeProcessELF.cpp @@ -107,73 +107,4 @@ lldb::addr_t NativeProcessELF::GetELFImageInfoAddress() { return LLDB_INVALID_ADDRESS; } -template <typename T> -llvm::Expected<SVR4LibraryInfo> -NativeProcessELF::ReadSVR4LibraryInfo(lldb::addr_t link_map_addr) { - ELFLinkMap<T> link_map; - size_t bytes_read; - auto error = - ReadMemory(link_map_addr, &link_map, sizeof(link_map), bytes_read); - if (!error.Success()) - return error.ToError(); - - char name_buffer[PATH_MAX]; - error = ReadMemory(link_map.l_name, &name_buffer, sizeof(name_buffer), - bytes_read); - if (bytes_read == 0) - return error.ToError(); - name_buffer[PATH_MAX - 1] = '\0'; - - SVR4LibraryInfo info; - info.name = std::string(name_buffer); - info.link_map = link_map_addr; - info.base_addr = link_map.l_addr; - info.ld_addr = link_map.l_ld; - info.next = link_map.l_next; - - return info; -} - -llvm::Expected<std::vector<SVR4LibraryInfo>> -NativeProcessELF::GetLoadedSVR4Libraries() { - // Address of DT_DEBUG.d_ptr which points to r_debug - lldb::addr_t info_address = GetSharedLibraryInfoAddress(); - if (info_address == LLDB_INVALID_ADDRESS) - return llvm::createStringError(llvm::inconvertibleErrorCode(), - "Invalid shared library info address"); - // Address of r_debug - lldb::addr_t address = 0; - size_t bytes_read; - auto status = - ReadMemory(info_address, &address, GetAddressByteSize(), bytes_read); - if (!status.Success()) - return status.ToError(); - if (address == 0) - return llvm::createStringError(llvm::inconvertibleErrorCode(), - "Invalid r_debug address"); - // Read r_debug.r_map - lldb::addr_t link_map = 0; - status = ReadMemory(address + GetAddressByteSize(), &link_map, - GetAddressByteSize(), bytes_read); - if (!status.Success()) - return status.ToError(); - if (address == 0) - return llvm::createStringError(llvm::inconvertibleErrorCode(), - "Invalid link_map address"); - - std::vector<SVR4LibraryInfo> library_list; - while (link_map) { - llvm::Expected<SVR4LibraryInfo> info = - GetAddressByteSize() == 8 ? ReadSVR4LibraryInfo<uint64_t>(link_map) - : ReadSVR4LibraryInfo<uint32_t>(link_map); - if (!info) - return info.takeError(); - if (!info->name.empty() && info->base_addr != 0) - library_list.push_back(*info); - link_map = info->next; - } - - return library_list; -} - -} // namespace lldb_private +} // namespace lldb_private
\ No newline at end of file |

