From aff7bafa7d59b58fe3ee10c5ae31ee2277755f26 Mon Sep 17 00:00:00 2001 From: Gyuheon Oh Date: Mon, 16 Mar 2026 21:05:55 +0000 Subject: [PATCH 1/3] Tag whether glibc or musl --- libdd-crashtracker/src/crash_info/errors_intake.rs | 7 ++++++- libdd-crashtracker/src/crash_info/mod.rs | 7 +++++++ libdd-crashtracker/src/crash_info/telemetry.rs | 5 ++++- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/libdd-crashtracker/src/crash_info/errors_intake.rs b/libdd-crashtracker/src/crash_info/errors_intake.rs index dd732c76d2..75963e0c6e 100644 --- a/libdd-crashtracker/src/crash_info/errors_intake.rs +++ b/libdd-crashtracker/src/crash_info/errors_intake.rs @@ -5,7 +5,7 @@ use std::time::SystemTime; use crate::{OsInfo, SigInfo}; -use super::{build_crash_ping_message, CrashInfo, Experimental, Metadata, StackTrace}; +use super::{build_crash_ping_message, CrashInfo, Experimental, Metadata, StackTrace, LIBC}; use anyhow::Context; use chrono::{DateTime, Utc}; use http::{uri::PathAndQuery, Uri}; @@ -363,6 +363,7 @@ fn build_crash_info_tags(crash_info: &CrashInfo) -> String { append_signal_tags(&mut tags, siginfo); } + tags.push_str(&format!(",libc:{LIBC}")); tags } @@ -456,6 +457,8 @@ impl ErrorsIntakePayload { append_signal_tags(&mut ddtags, sig_info); } + ddtags.push_str(&format!(",libc:{LIBC}")); + let (error_type, message) = if let Some(sig_info) = sig_info { ( Some(format!("{:?}", sig_info.si_signo_human_readable)), @@ -689,6 +692,7 @@ mod tests { "si_code_human_readable:SEGV_BNDERR", "si_signo:11", "si_signo_human_readable:SIGSEGV", + &format!("libc:{}", super::super::LIBC), ]; let expected_metadata_tags = ["service:foo", "version:bar", "language_name:native"]; @@ -726,6 +730,7 @@ mod tests { "si_code_human_readable:SEGV_BNDERR", "si_signo:11", "si_signo_human_readable:SIGSEGV", + &format!("libc:{}", super::super::LIBC), ]; for tag in expected_tags { diff --git a/libdd-crashtracker/src/crash_info/mod.rs b/libdd-crashtracker/src/crash_info/mod.rs index 7ed811f6cf..f2153bc8d7 100644 --- a/libdd-crashtracker/src/crash_info/mod.rs +++ b/libdd-crashtracker/src/crash_info/mod.rs @@ -17,6 +17,13 @@ mod telemetry; mod test_utils; mod unknown_value; +#[cfg(target_env = "musl")] +pub(crate) const LIBC: &str = "musl"; +#[cfg(target_env = "gnu")] +pub(crate) const LIBC: &str = "glibc"; +#[cfg(not(any(target_env = "musl", target_env = "gnu")))] +pub(crate) const LIBC: &str = "unknown"; + pub use builder::*; pub use error_data::*; pub use errors_intake::*; diff --git a/libdd-crashtracker/src/crash_info/telemetry.rs b/libdd-crashtracker/src/crash_info/telemetry.rs index 8f6def58c6..4fa7b81b61 100644 --- a/libdd-crashtracker/src/crash_info/telemetry.rs +++ b/libdd-crashtracker/src/crash_info/telemetry.rs @@ -4,7 +4,7 @@ use std::{fmt::Write, time::SystemTime}; use crate::{ErrorKind, SigInfo}; -use super::{CrashInfo, Metadata}; +use super::{CrashInfo, Metadata, LIBC}; use anyhow::Context; use chrono::{DateTime, Utc}; use libdd_common::Endpoint; @@ -396,6 +396,7 @@ impl TelemetryCrashUploader { )); } + write!(tags, ",libc:{LIBC}").ok(); self.append_optional_tags(&mut tags); tags } @@ -448,6 +449,7 @@ fn extract_crash_info_tags(crash_info: &CrashInfo) -> anyhow::Result { siginfo.si_signo_human_readable )?; } + write!(&mut tags, ",libc:{LIBC}")?; Ok(tags) } @@ -556,6 +558,7 @@ mod tests { "si_signo_human_readable:SIGSEGV", "si_signo:11", "uuid:1d6b97cb-968c-40c9-af6e-e4b4d71e8781", + &format!("libc:{}", super::super::LIBC), ]), tags ); From 1b5f105c4e5db1bf216f138b71a07be9621d7c4f Mon Sep 17 00:00:00 2001 From: Gyuheon Oh Date: Mon, 16 Mar 2026 21:17:10 +0000 Subject: [PATCH 2/3] Include MSVC for windows and empty string for ambiguous --- libdd-crashtracker/src/crash_info/mod.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/libdd-crashtracker/src/crash_info/mod.rs b/libdd-crashtracker/src/crash_info/mod.rs index f2153bc8d7..def1a83458 100644 --- a/libdd-crashtracker/src/crash_info/mod.rs +++ b/libdd-crashtracker/src/crash_info/mod.rs @@ -21,8 +21,10 @@ mod unknown_value; pub(crate) const LIBC: &str = "musl"; #[cfg(target_env = "gnu")] pub(crate) const LIBC: &str = "glibc"; -#[cfg(not(any(target_env = "musl", target_env = "gnu")))] -pub(crate) const LIBC: &str = "unknown"; +#[cfg(target_env = "msvc")] +pub(crate) const LIBC: &str = "msvc"; +#[cfg(not(any(target_env = "musl", target_env = "gnu", target_env = "msvc")))] +pub(crate) const LIBC: &str = ""; pub use builder::*; pub use error_data::*; From 4e52749f0afb8dbac40de813d36b39b9f084c89c Mon Sep 17 00:00:00 2001 From: Gyuheon Oh Date: Mon, 16 Mar 2026 22:46:17 +0000 Subject: [PATCH 3/3] Target triple instead of c lib --- libdd-crashtracker/build.rs | 10 ++++++++++ libdd-crashtracker/src/crash_info/errors_intake.rs | 13 ++++++++----- libdd-crashtracker/src/crash_info/mod.rs | 10 ++-------- libdd-crashtracker/src/crash_info/telemetry.rs | 8 ++++---- 4 files changed, 24 insertions(+), 17 deletions(-) diff --git a/libdd-crashtracker/build.rs b/libdd-crashtracker/build.rs index de67741621..ba44902fe0 100644 --- a/libdd-crashtracker/build.rs +++ b/libdd-crashtracker/build.rs @@ -114,6 +114,11 @@ fn build_cpp_file() { #[cfg(unix)] fn main() { + println!( + "cargo:rustc-env=TARGET={}", + std::env::var("TARGET").unwrap() + ); + cc::Build::new() .file("src/crash_info/emit_sicodes.c") .compile("emit_sicodes"); @@ -139,6 +144,11 @@ fn main() { #[cfg(not(unix))] fn main() { + println!( + "cargo:rustc-env=TARGET={}", + std::env::var("TARGET").unwrap() + ); + // Build CXX bridge if feature is enabled #[cfg(feature = "cxx")] build_cxx_bridge(); diff --git a/libdd-crashtracker/src/crash_info/errors_intake.rs b/libdd-crashtracker/src/crash_info/errors_intake.rs index 75963e0c6e..0e735227d8 100644 --- a/libdd-crashtracker/src/crash_info/errors_intake.rs +++ b/libdd-crashtracker/src/crash_info/errors_intake.rs @@ -5,7 +5,9 @@ use std::time::SystemTime; use crate::{OsInfo, SigInfo}; -use super::{build_crash_ping_message, CrashInfo, Experimental, Metadata, StackTrace, LIBC}; +use super::{ + build_crash_ping_message, CrashInfo, Experimental, Metadata, StackTrace, TARGET_TRIPLE, +}; use anyhow::Context; use chrono::{DateTime, Utc}; use http::{uri::PathAndQuery, Uri}; @@ -363,7 +365,7 @@ fn build_crash_info_tags(crash_info: &CrashInfo) -> String { append_signal_tags(&mut tags, siginfo); } - tags.push_str(&format!(",libc:{LIBC}")); + tags.push_str(&format!(",target_triple:{TARGET_TRIPLE}")); tags } @@ -457,7 +459,7 @@ impl ErrorsIntakePayload { append_signal_tags(&mut ddtags, sig_info); } - ddtags.push_str(&format!(",libc:{LIBC}")); + ddtags.push_str(&format!(",target_triple:{TARGET_TRIPLE}")); let (error_type, message) = if let Some(sig_info) = sig_info { ( @@ -692,7 +694,7 @@ mod tests { "si_code_human_readable:SEGV_BNDERR", "si_signo:11", "si_signo_human_readable:SIGSEGV", - &format!("libc:{}", super::super::LIBC), + &format!("target_triple:{}", super::super::TARGET_TRIPLE), ]; let expected_metadata_tags = ["service:foo", "version:bar", "language_name:native"]; @@ -730,9 +732,10 @@ mod tests { "si_code_human_readable:SEGV_BNDERR", "si_signo:11", "si_signo_human_readable:SIGSEGV", - &format!("libc:{}", super::super::LIBC), + &format!("target_triple:{}", super::super::TARGET_TRIPLE), ]; + println!("payload.ddtags: {}", payload.ddtags); for tag in expected_tags { assert!( payload.ddtags.contains(tag), diff --git a/libdd-crashtracker/src/crash_info/mod.rs b/libdd-crashtracker/src/crash_info/mod.rs index def1a83458..eef319e47d 100644 --- a/libdd-crashtracker/src/crash_info/mod.rs +++ b/libdd-crashtracker/src/crash_info/mod.rs @@ -17,14 +17,8 @@ mod telemetry; mod test_utils; mod unknown_value; -#[cfg(target_env = "musl")] -pub(crate) const LIBC: &str = "musl"; -#[cfg(target_env = "gnu")] -pub(crate) const LIBC: &str = "glibc"; -#[cfg(target_env = "msvc")] -pub(crate) const LIBC: &str = "msvc"; -#[cfg(not(any(target_env = "musl", target_env = "gnu", target_env = "msvc")))] -pub(crate) const LIBC: &str = ""; +// This is set compile time +pub(crate) const TARGET_TRIPLE: &str = env!("TARGET"); pub use builder::*; pub use error_data::*; diff --git a/libdd-crashtracker/src/crash_info/telemetry.rs b/libdd-crashtracker/src/crash_info/telemetry.rs index 4fa7b81b61..23a860b931 100644 --- a/libdd-crashtracker/src/crash_info/telemetry.rs +++ b/libdd-crashtracker/src/crash_info/telemetry.rs @@ -4,7 +4,7 @@ use std::{fmt::Write, time::SystemTime}; use crate::{ErrorKind, SigInfo}; -use super::{CrashInfo, Metadata, LIBC}; +use super::{CrashInfo, Metadata, TARGET_TRIPLE}; use anyhow::Context; use chrono::{DateTime, Utc}; use libdd_common::Endpoint; @@ -396,7 +396,7 @@ impl TelemetryCrashUploader { )); } - write!(tags, ",libc:{LIBC}").ok(); + write!(tags, ",target_triple:{TARGET_TRIPLE}").ok(); self.append_optional_tags(&mut tags); tags } @@ -449,7 +449,7 @@ fn extract_crash_info_tags(crash_info: &CrashInfo) -> anyhow::Result { siginfo.si_signo_human_readable )?; } - write!(&mut tags, ",libc:{LIBC}")?; + write!(&mut tags, ",target_triple:{TARGET_TRIPLE}")?; Ok(tags) } @@ -558,7 +558,7 @@ mod tests { "si_signo_human_readable:SIGSEGV", "si_signo:11", "uuid:1d6b97cb-968c-40c9-af6e-e4b4d71e8781", - &format!("libc:{}", super::super::LIBC), + &format!("target_triple:{}", super::super::TARGET_TRIPLE), ]), tags );