Skip to content

packaging/aix: bundle libunwind derived from GCC runtime libgcc_s.a#50392

Merged
gh-worker-dd-mergequeue-cf854d[bot] merged 1 commit intomainfrom
pgimalac/aix-bundle-libunwind
May 6, 2026
Merged

packaging/aix: bundle libunwind derived from GCC runtime libgcc_s.a#50392
gh-worker-dd-mergequeue-cf854d[bot] merged 1 commit intomainfrom
pgimalac/aix-bundle-libunwind

Conversation

@pgimalac
Copy link
Copy Markdown
Member

@pgimalac pgimalac commented May 5, 2026

What does this PR do?

Creates libunwind.a(libunwind.so.1) in the embedded tree by extracting the shared object from the GCC runtime's libgcc_s.a and re-packaging it under the libunwind.so.1 member name that pydantic_core expects.

Motivation

pydantic_core/_pydantic_core.cpython-313.so links against libunwind.a(libunwind.so.1). Without bundling, import pydantic fails on hosts without the AIX Toolbox GCC installed.

The IBM XL C++ Runtime /usr/lib/libunwind.a was tried first but requires __xlcxx_personality_v0 from libc++abi.a, which is absent on AIX 7.2 TL2-TL4. GNU libunwind and LLVM libunwind both fail on AIX as well (GNU requires ELF headers; LLVM also pulls in libc++abi.a).

The GCC runtime libgcc_s.a already contains all _Unwind_* symbols and only depends on libc.a. Re-packaging its shr.o member as libunwind.so.1 gives pydantic_core what it needs with no extra dependencies, portable across all supported AIX releases.

Describe how you validated your changes

Full package build, installp install, and agent run on AIX 7.2:

  • libunwind.a(libunwind.so.1) correctly installed, only depends on libc.a(shr_64.o)
  • Agent starts via SRC, no unexpected errors in logs ✓
  • import pydantic_core2.41.5
  • agent check cpu → 11 metrics, OK ✓
  • agent check network → 34 metrics, OK ✓
  • agent check lparstats (Python check) → 483 metrics, OK ✓

Additional Notes

N/A

@github-actions github-actions Bot added the short review PR is simple enough to be reviewed quickly label May 5, 2026
@dd-octo-sts dd-octo-sts Bot added the internal Identify a non-fork PR label May 5, 2026
@pgimalac pgimalac added changelog/no-changelog No changelog entry needed qa/done QA done before merge and regressions are covered by tests labels May 5, 2026
@dd-octo-sts
Copy link
Copy Markdown
Contributor

dd-octo-sts Bot commented May 5, 2026

Files inventory check summary

File checks results against ancestor 80c7de40:

Results for datadog-agent_7.80.0~devel.git.488.94dd076.pipeline.111810022-1_amd64.deb:

No change detected

@pgimalac pgimalac force-pushed the pgimalac/aix-bundle-libunwind branch 2 times, most recently from fe92b2d to 07eb809 Compare May 6, 2026 11:34
@pgimalac pgimalac changed the title packaging/aix: bundle libunwind from IBM XL C++ Runtime packaging/aix: bundle libunwind derived from GCC runtime libgcc_s.a May 6, 2026
@pgimalac pgimalac force-pushed the pgimalac/aix-bundle-libunwind branch from 07eb809 to 1c7a69e Compare May 6, 2026 12:46
@pgimalac pgimalac marked this pull request as ready for review May 6, 2026 13:57
@pgimalac pgimalac requested a review from a team as a code owner May 6, 2026 13:57
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 1c7a69e248

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread packaging/aix/stages/01-native-libs.sh
pydantic_core links against libunwind.a(libunwind.so.1). We create this
archive by extracting the shared object from the GCC runtime libgcc_s.a
(which contains all _Unwind_* symbols) and re-packaging it as libunwind.so.1.

This avoids the IBM XL C++ Runtime libunwind (/usr/lib/libunwind.a) which
requires __xlcxx_personality_v0 from libc++abi.a — absent on AIX 7.2 TL2-TL4.
The GCC-derived version only depends on libc.a, making it portable across
all supported AIX releases.
@pgimalac pgimalac force-pushed the pgimalac/aix-bundle-libunwind branch from 1c7a69e to 94dd076 Compare May 6, 2026 17:17
@github-actions github-actions Bot added medium review PR review might take time and removed short review PR is simple enough to be reviewed quickly labels May 6, 2026
@pgimalac
Copy link
Copy Markdown
Member Author

pgimalac commented May 6, 2026

/merge

@gh-worker-devflow-routing-ef8351
Copy link
Copy Markdown

gh-worker-devflow-routing-ef8351 Bot commented May 6, 2026

View all feedbacks in Devflow UI.

2026-05-06 22:23:06 UTC ℹ️ Start processing command /merge


2026-05-06 22:23:09 UTC ℹ️ MergeQueue: pull request added to the queue

The expected merge time in main is approximately 1h (p90).


2026-05-06 22:30:36 UTC ℹ️ MergeQueue: Readding this merge request to the queue because another merge request processed with yours failed. No action is needed from your side.


2026-05-06 23:18:51 UTC ℹ️ MergeQueue: This merge request was merged

@gh-worker-dd-mergequeue-cf854d gh-worker-dd-mergequeue-cf854d Bot merged commit c896074 into main May 6, 2026
225 checks passed
@gh-worker-dd-mergequeue-cf854d gh-worker-dd-mergequeue-cf854d Bot deleted the pgimalac/aix-bundle-libunwind branch May 6, 2026 23:18
@github-actions github-actions Bot added this to the 7.80.0 milestone May 6, 2026
@cit-pr-commenter-54b7da
Copy link
Copy Markdown

Regression Detector

Regression Detector Results

Metrics dashboard
Target profiles
Run ID: e5c2a44a-aec6-41eb-ac30-5f6dcab9fbba

Baseline: 8c1054c
Comparison: c896074
Diff

Optimization Goals: ✅ Improvement(s) detected

perf experiment goal Δ mean % Δ mean % CI trials links
quality_gate_logs % cpu utilization -5.25 [-6.25, -4.24] 1 Logs bounds checks dashboard

Experiments ignored for regressions

Regressions in experiments with settings containing erratic: true are ignored.

perf experiment goal Δ mean % Δ mean % CI trials links
docker_containers_cpu % cpu utilization -1.01 [-3.86, +1.84] 1 Logs

Fine details of change detection per experiment

perf experiment goal Δ mean % Δ mean % CI trials links
quality_gate_idle memory utilization +0.48 [+0.43, +0.53] 1 Logs bounds checks dashboard
ddot_metrics_sum_cumulativetodelta_exporter memory utilization +0.37 [+0.14, +0.61] 1 Logs
docker_containers_memory memory utilization +0.25 [+0.13, +0.36] 1 Logs
quality_gate_security_idle memory utilization +0.17 [+0.09, +0.24] 1 Logs bounds checks dashboard
quality_gate_security_no_fs_load memory utilization +0.15 [+0.05, +0.24] 1 Logs bounds checks dashboard
uds_dogstatsd_20mb_12k_contexts_20_senders memory utilization +0.13 [+0.08, +0.18] 1 Logs
ddot_metrics memory utilization +0.07 [-0.12, +0.27] 1 Logs
file_to_blackhole_500ms_latency egress throughput +0.06 [-0.36, +0.49] 1 Logs
quality_gate_security_mean_fs_load memory utilization +0.06 [+0.02, +0.09] 1 Logs bounds checks dashboard
file_to_blackhole_0ms_latency egress throughput +0.05 [-0.53, +0.63] 1 Logs
file_to_blackhole_100ms_latency egress throughput +0.05 [-0.11, +0.20] 1 Logs
file_to_blackhole_1000ms_latency egress throughput +0.05 [-0.39, +0.48] 1 Logs
quality_gate_idle_all_features memory utilization +0.02 [-0.02, +0.06] 1 Logs bounds checks dashboard
uds_dogstatsd_to_api ingress throughput +0.01 [-0.19, +0.20] 1 Logs
uds_dogstatsd_to_api_v3 ingress throughput -0.02 [-0.22, +0.19] 1 Logs
tcp_dd_logs_filter_exclude ingress throughput -0.02 [-0.19, +0.14] 1 Logs
ddot_metrics_sum_delta memory utilization -0.03 [-0.22, +0.16] 1 Logs
otlp_ingest_metrics memory utilization -0.06 [-0.21, +0.10] 1 Logs
tcp_syslog_to_blackhole ingress throughput -0.07 [-0.26, +0.13] 1 Logs
otlp_ingest_logs memory utilization -0.48 [-0.59, -0.37] 1 Logs
ddot_logs memory utilization -0.54 [-0.61, -0.47] 1 Logs
ddot_metrics_sum_cumulative memory utilization -0.78 [-0.94, -0.62] 1 Logs
quality_gate_metrics_logs memory utilization -0.94 [-1.19, -0.69] 1 Logs bounds checks dashboard
docker_containers_cpu % cpu utilization -1.01 [-3.86, +1.84] 1 Logs
quality_gate_logs % cpu utilization -5.25 [-6.25, -4.24] 1 Logs bounds checks dashboard

Bounds Checks: ✅ Passed

perf experiment bounds_check_name replicates_passed observed_value links
docker_containers_cpu simple_check_run 10/10 697 ≥ 26
docker_containers_memory memory_usage 10/10 245.64MiB ≤ 370MiB
docker_containers_memory simple_check_run 10/10 682 ≥ 26
file_to_blackhole_0ms_latency memory_usage 10/10 0.16GiB ≤ 1.20GiB
file_to_blackhole_0ms_latency missed_bytes 10/10 0B = 0B
file_to_blackhole_1000ms_latency memory_usage 10/10 0.21GiB ≤ 1.20GiB
file_to_blackhole_1000ms_latency missed_bytes 10/10 0B = 0B
file_to_blackhole_100ms_latency memory_usage 10/10 0.17GiB ≤ 1.20GiB
file_to_blackhole_100ms_latency missed_bytes 10/10 0B = 0B
file_to_blackhole_500ms_latency memory_usage 10/10 0.18GiB ≤ 1.20GiB
file_to_blackhole_500ms_latency missed_bytes 10/10 0B = 0B
quality_gate_idle intake_connections 10/10 3 ≤ 4 bounds checks dashboard
quality_gate_idle memory_usage 10/10 140.73MiB ≤ 147MiB bounds checks dashboard
quality_gate_idle_all_features intake_connections 10/10 3 ≤ 4 bounds checks dashboard
quality_gate_idle_all_features memory_usage 10/10 467.51MiB ≤ 495MiB bounds checks dashboard
quality_gate_logs intake_connections 10/10 3 ≤ 6 bounds checks dashboard
quality_gate_logs memory_usage 10/10 179.71MiB ≤ 195MiB bounds checks dashboard
quality_gate_logs missed_bytes 10/10 0B = 0B bounds checks dashboard
quality_gate_metrics_logs cpu_usage 10/10 356.26 ≤ 2000 bounds checks dashboard
quality_gate_metrics_logs intake_connections 10/10 3 ≤ 6 bounds checks dashboard
quality_gate_metrics_logs memory_usage 10/10 378.33MiB ≤ 430MiB bounds checks dashboard
quality_gate_metrics_logs missed_bytes 10/10 0B = 0B bounds checks dashboard
quality_gate_security_idle cpu_usage 10/10 25.81 ≤ 40 bounds checks dashboard
quality_gate_security_idle memory_usage 10/10 292.08MiB ≤ 330MiB bounds checks dashboard
quality_gate_security_mean_fs_load cpu_usage 10/10 54.50 ≤ 70 bounds checks dashboard
quality_gate_security_mean_fs_load memory_usage 10/10 265.46MiB ≤ 320MiB bounds checks dashboard
quality_gate_security_no_fs_load cpu_usage 10/10 20.99 ≤ 40 bounds checks dashboard
quality_gate_security_no_fs_load memory_usage 10/10 277.62MiB ≤ 320MiB bounds checks dashboard

Explanation

Confidence level: 90.00%
Effect size tolerance: |Δ mean %| ≥ 5.00%

Performance changes are noted in the perf column of each table:

  • ✅ = significantly better comparison variant performance
  • ❌ = significantly worse comparison variant performance
  • ➖ = no significant change in performance

A regression test is an A/B test of target performance in a repeatable rig, where "performance" is measured as "comparison variant minus baseline variant" for an optimization goal (e.g., ingress throughput). Due to intrinsic variability in measuring that goal, we can only estimate its mean value for each experiment; we report uncertainty in that value as a 90.00% confidence interval denoted "Δ mean % CI".

For each experiment, we decide whether a change in performance is a "regression" -- a change worth investigating further -- if all of the following criteria are true:

  1. Its estimated |Δ mean %| ≥ 5.00%, indicating the change is big enough to merit a closer look.

  2. Its 90.00% confidence interval "Δ mean % CI" does not contain zero, indicating that if our statistical model is accurate, there is at least a 90.00% chance there is a difference in performance between baseline and comparison variants.

  3. Its configuration does not mark it "erratic".

CI Pass/Fail Decision

Passed. All Quality Gates passed.

  • quality_gate_idle_all_features, bounds check memory_usage: 10/10 replicas passed. Gate passed.
  • quality_gate_idle_all_features, bounds check intake_connections: 10/10 replicas passed. Gate passed.
  • quality_gate_security_mean_fs_load, bounds check memory_usage: 10/10 replicas passed. Gate passed.
  • quality_gate_security_mean_fs_load, bounds check cpu_usage: 10/10 replicas passed. Gate passed.
  • quality_gate_logs, bounds check memory_usage: 10/10 replicas passed. Gate passed.
  • quality_gate_logs, bounds check missed_bytes: 10/10 replicas passed. Gate passed.
  • quality_gate_logs, bounds check intake_connections: 10/10 replicas passed. Gate passed.
  • quality_gate_metrics_logs, bounds check memory_usage: 10/10 replicas passed. Gate passed.
  • quality_gate_metrics_logs, bounds check cpu_usage: 10/10 replicas passed. Gate passed.
  • quality_gate_metrics_logs, bounds check missed_bytes: 10/10 replicas passed. Gate passed.
  • quality_gate_metrics_logs, bounds check intake_connections: 10/10 replicas passed. Gate passed.
  • quality_gate_idle, bounds check memory_usage: 10/10 replicas passed. Gate passed.
  • quality_gate_idle, bounds check intake_connections: 10/10 replicas passed. Gate passed.
  • quality_gate_security_no_fs_load, bounds check cpu_usage: 10/10 replicas passed. Gate passed.
  • quality_gate_security_no_fs_load, bounds check memory_usage: 10/10 replicas passed. Gate passed.
  • quality_gate_security_idle, bounds check memory_usage: 10/10 replicas passed. Gate passed.
  • quality_gate_security_idle, bounds check cpu_usage: 10/10 replicas passed. Gate passed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

changelog/no-changelog No changelog entry needed internal Identify a non-fork PR kind/enhancement medium review PR review might take time qa/done QA done before merge and regressions are covered by tests team/agent-build

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants