Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Profiler/Crashtracker] Bump libdatadog 16.0.3 #6589

Merged
merged 24 commits into from
Feb 19, 2025
Merged
Show file tree
Hide file tree
Changes from 22 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions build/cmake/FindLibdatadog.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,22 @@ endif()

include(FetchContent)

set(LIBDATADOG_VERSION "v14.3.1" CACHE STRING "libdatadog version")
set(LIBDATADOG_VERSION "v16.0.3" CACHE STRING "libdatadog version")

if (CMAKE_SYSTEM_PROCESSOR STREQUAL aarch64 OR CMAKE_SYSTEM_PROCESSOR STREQUAL arm64)
if (DEFINED ENV{IsAlpine} AND "$ENV{IsAlpine}" MATCHES "true")
set(SHA256_LIBDATADOG "57f83aff275628bb1af89c22bb4bd696726daf2a9e09b6cd0d966b29e65a7ad6" CACHE STRING "libdatadog sha256")
set(SHA256_LIBDATADOG "dd08d3a4dbbd765392121d27b790d7818e80dd28500b554db16e9186b1025ba9" CACHE STRING "libdatadog sha256")
set(FILE_TO_DOWNLOAD libdatadog-aarch64-alpine-linux-musl.tar.gz)
else()
set(SHA256_LIBDATADOG "36db8d50ccabb71571158ea13835c0f1d05d30b32135385f97c16343cfb6ddd4" CACHE STRING "libdatadog sha256")
set(SHA256_LIBDATADOG "decc01a2e0f732cabcc56594429a3dbc13678070e07f24891555dcc02df2e516" CACHE STRING "libdatadog sha256")
set(FILE_TO_DOWNLOAD libdatadog-aarch64-unknown-linux-gnu.tar.gz)
endif()
else()
if (DEFINED ENV{IsAlpine} AND "$ENV{IsAlpine}" MATCHES "true")
set(SHA256_LIBDATADOG "2f61fd21cf2f8147743e414b4a8c77250a17be3aecc42a69ffe54f0a603d5c92" CACHE STRING "libdatadog sha256")
set(SHA256_LIBDATADOG "8e09afd3cfb5ace85501f37b4bd6378299ebbf71189ccc2173169998b75b4b56" CACHE STRING "libdatadog sha256")
set(FILE_TO_DOWNLOAD libdatadog-${CMAKE_SYSTEM_PROCESSOR}-alpine-linux-musl.tar.gz)
else()
set(SHA256_LIBDATADOG "f01f05600591063eba4faf388f54c155ab4e6302e5776c7855e3734955f7daf7" CACHE STRING "libdatadog sha256")
set(SHA256_LIBDATADOG "caaec84fc9afbcb3ec4618791b3c3f1ead65196009e9f07fd382e863dc3bdc66" CACHE STRING "libdatadog sha256")
set(FILE_TO_DOWNLOAD libdatadog-${CMAKE_SYSTEM_PROCESSOR}-unknown-linux-gnu.tar.gz)
endif()
endif()
Expand Down
6 changes: 3 additions & 3 deletions build/vcpkg_local_ports/libdatadog/portfile.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@ set(LIBDATADOG_VERSION ${VERSION})
if(TARGET_TRIPLET STREQUAL "x64-windows" OR
TARGET_TRIPLET STREQUAL "x64-windows-static")
set(PLATFORM "x64")
set(LIBDATADOG_HASH "872f1567e8137d6e044e204eb0de749271ba64cf140c24f10c40719a24cbd9b8090325353e4c8a0562a4ff03249b48f8435e4fdcefb9032298d6487c7d087298")
set(LIBDATADOG_HASH "3ec847560bd1de86935c230f34cb58d2a0f3f17865349d094e18d3e8edf8518955ede05bf595dc3ca41f99a911760f891bcf58d92fc5c06ce6ad98cdc8f034e3")
elseif(TARGET_TRIPLET STREQUAL "x86-windows" OR
TARGET_TRIPLET STREQUAL "x86-windows-static")
set(PLATFORM "x86")
set(LIBDATADOG_HASH "653826d9852450fcebad49d7f132747326cfaeffefcadab92cbd23783fb33ff7ea81b412704c40e2800f36d5906297249f49e04b798c5c454abd69165204e6ad")
set(LIBDATADOG_HASH "2d884d76a35e4c37d05f6902c16b9e08ce1565976a6c9cf5fbd30273d8bd5385ad2523658eebadb02f90543191e217b028e86722ae7bcc08cbca2c342a5b5e79")
else()
message(FATAL_ERROR "Unsupported triplet: ${TARGET_TRIPLET}")
endif()
Expand Down Expand Up @@ -46,4 +46,4 @@ else()
file(INSTALL "${source_path}/${LIBDATADOG_FILENAME}/debug/static/datadog_profiling_ffi.lib" DESTINATION "${CURRENT_PACKAGES_DIR}/debug/lib")
endif()

vcpkg_install_copyright(FILE_LIST "${source_path}/${LIBDATADOG_FILENAME}/LICENSE")
vcpkg_install_copyright(FILE_LIST "${source_path}/${LIBDATADOG_FILENAME}/LICENSE")
2 changes: 1 addition & 1 deletion build/vcpkg_local_ports/libdatadog/vcpkg.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "libdatadog",
"version-string": "14.3.1",
"version-string": "16.0.3",
"description": "Package providing libdatadog prebuilt binaries for Windows only.",
"dependencies": []
}
2 changes: 1 addition & 1 deletion global.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@
"version": "9.0.102",
"rollForward": "minor"
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ std::vector<ModuleInfo> CrashReportingLinux::GetModules()
moduleBaseAddresses[path] = baseAddress;
}

auto buildId = ElfBuildId(path.data());
auto buildId = BuildId::From(path.data());
modules.push_back(ModuleInfo{ start, end, baseAddress, std::move(path), std::move(buildId) });
}

Expand Down Expand Up @@ -222,16 +222,17 @@ std::vector<StackFrame> CrashReportingLinux::GetThreadFrames(int32_t tid, Resolv

auto demangleResult = ddog_crasht_demangle(libdatadog::to_char_slice(stackFrame.method), DDOG_CRASHT_DEMANGLE_OPTIONS_COMPLETE);

if (demangleResult.tag == DDOG_CRASHT_STRING_WRAPPER_RESULT_OK)
if (demangleResult.tag == DDOG_STRING_WRAPPER_RESULT_OK)
{
// TODO: There is currently no safe way to free the StringWrapper
auto stringWrapper = demangleResult.ok;

if (stringWrapper.message.len > 0)
{
stackFrame.method = std::string((char*)stringWrapper.message.ptr, stringWrapper.message.len);
}
ddog_StringWrapper_drop(&demangleResult.ok);
}
// TODO free memory for error
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ struct ModuleInfo
uintptr_t baseAddress;
std::string path;
// defined in CrashReporting.h
ElfBuildId build_id;
BuildId build_id;
};

class CrashReportingLinux : public CrashReporting
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -171,9 +171,7 @@ std::vector<StackFrame> CrashReportingWindows::GetThreadFrames(int32_t tid, Reso
if (module != nullptr)
{
stackFrame.moduleAddress = module->startAddress;
stackFrame.hasPdbInfo = module->hasPdbInfo;
stackFrame.pdbAge = module->pdbAge;
stackFrame.pdbSig = module->pdbSig;
stackFrame.buildId = module->buildId;

std::ostringstream methodName;
methodName << module->path << "!<unknown>+" << std::hex << (nativeStackFrame.AddrPC.Offset - module->startAddress);
Expand Down Expand Up @@ -233,10 +231,9 @@ std::vector<ModuleInfo> CrashReportingWindows::GetModules()
resolvedModuleName = moduleName;
}

ModuleInfo module{ (uintptr_t)moduleInfo.lpBaseOfDll, (uintptr_t)moduleInfo.lpBaseOfDll + moduleInfo.SizeOfImage, std::move(resolvedModuleName), false, 0, 0 };

FillPdbInfo((uintptr_t)moduleInfo.lpBaseOfDll, module);
auto buildId = ExtractBuildId((uintptr_t)moduleInfo.lpBaseOfDll);

ModuleInfo module{(uintptr_t)moduleInfo.lpBaseOfDll, (uintptr_t)moduleInfo.lpBaseOfDll + moduleInfo.SizeOfImage, std::move(resolvedModuleName), std::move(buildId)};
modules.push_back(std::move(module));
}
}
Expand Down Expand Up @@ -271,35 +268,35 @@ std::vector<BYTE> CrashReportingWindows::ReadRemoteMemory(HANDLE process, uintpt
return {};
}

bool CrashReportingWindows::FillPdbInfo(uintptr_t baseAddress, ModuleInfo& moduleInfo)
BuildId CrashReportingWindows::ExtractBuildId(uintptr_t baseAddress)
{
// Read the DOS header
auto dosHeaderBuffer = _readMemory(baseAddress, sizeof(IMAGE_DOS_HEADER));
if (dosHeaderBuffer.empty())
{
return false;
return {};
}

auto dosHeader = reinterpret_cast<PIMAGE_DOS_HEADER>(dosHeaderBuffer.data());

if (dosHeader->e_magic != IMAGE_DOS_SIGNATURE)
{
return false;
return {};
}

// Read the NT headers
uintptr_t ntHeadersAddress = baseAddress + dosHeader->e_lfanew;
auto ntHeadersBuffer = _readMemory(ntHeadersAddress, sizeof(IMAGE_NT_HEADERS_GENERIC));
if (ntHeadersBuffer.empty())
{
return false;
return {};
}

auto ntHeaders = reinterpret_cast<IMAGE_NT_HEADERS_GENERIC*>(ntHeadersBuffer.data());

if (ntHeaders->Signature != IMAGE_NT_SIGNATURE)
{
return false;
return {};
}

// Check the PE type
Expand All @@ -308,7 +305,7 @@ bool CrashReportingWindows::FillPdbInfo(uintptr_t baseAddress, ModuleInfo& modul

if (!isPE32 && !isPE64)
{
return false;
return {};
}

// Read the debug directory according to the PE type
Expand All @@ -319,7 +316,7 @@ bool CrashReportingWindows::FillPdbInfo(uintptr_t baseAddress, ModuleInfo& modul
auto header32Buffer = _readMemory(ntHeadersAddress, sizeof(IMAGE_NT_HEADERS32));
if (header32Buffer.empty())
{
return false;
return {};
}

auto header32 = reinterpret_cast<IMAGE_NT_HEADERS32*>(header32Buffer.data());
Expand All @@ -330,7 +327,7 @@ bool CrashReportingWindows::FillPdbInfo(uintptr_t baseAddress, ModuleInfo& modul
auto header64Buffer = _readMemory(ntHeadersAddress, sizeof(IMAGE_NT_HEADERS64));
if (header64Buffer.empty())
{
return false;
return {};
}

auto header64 = reinterpret_cast<IMAGE_NT_HEADERS64*>(header64Buffer.data());
Expand All @@ -340,13 +337,13 @@ bool CrashReportingWindows::FillPdbInfo(uintptr_t baseAddress, ModuleInfo& modul
uintptr_t debugDirectoryAddress = baseAddress + debugDataDir.VirtualAddress;
if (debugDirectoryAddress == 0)
{
return false;
return {};
}

auto debugDirectoryBuffer = _readMemory(debugDirectoryAddress, debugDataDir.Size);
if (debugDirectoryBuffer.empty())
{
return false;
return {};
}

auto debugDirectory = reinterpret_cast<PIMAGE_DEBUG_DIRECTORY>(debugDirectoryBuffer.data());
Expand All @@ -367,10 +364,10 @@ bool CrashReportingWindows::FillPdbInfo(uintptr_t baseAddress, ModuleInfo& modul
// Extract the PDB info from the codeview entry
auto pdbInfoAddress = baseAddress + debugDirectory[i].AddressOfRawData;
auto pdbInfoBuffer = _readMemory(pdbInfoAddress, sizeof(CV_INFO_PDB70));

if (pdbInfoBuffer.empty())
{
return false;
return {};
}

auto pdbInfo = reinterpret_cast<CV_INFO_PDB70*>(pdbInfoBuffer.data());
Expand All @@ -379,16 +376,12 @@ bool CrashReportingWindows::FillPdbInfo(uintptr_t baseAddress, ModuleInfo& modul

if (pdbInfo->Signature == PDB70_SIGNATURE)
{
moduleInfo.pdbAge = pdbInfo->Age;
moduleInfo.pdbSig = pdbInfo->Guid;
moduleInfo.hasPdbInfo = true;

return true;
return BuildId::From(pdbInfo->Guid, pdbInfo->Age);
}
}
}

return false;
return {};
}

void CrashReportingWindows::SetMemoryReader(std::function<std::vector<BYTE>(uintptr_t, SIZE_T)> readMemory)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,7 @@ struct ModuleInfo
uintptr_t startAddress;
uintptr_t endAddress;
std::string path;
bool hasPdbInfo;
DWORD pdbAge;
GUID pdbSig;
BuildId buildId;
};

// PE32 and PE64 have different optional headers, which complexify the logic to fetch them
Expand All @@ -35,7 +33,7 @@ class CrashReportingWindows : public CrashReporting

int32_t STDMETHODCALLTYPE Initialize() override;

bool FillPdbInfo(uintptr_t baseAddress, ModuleInfo& moduleInfo);
BuildId ExtractBuildId(uintptr_t baseAddress);

void SetMemoryReader(std::function<std::vector<BYTE>(uintptr_t, SIZE_T)> readMemory);

Expand Down
Loading
Loading