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

Update dynamic logging to work with Go's 1.17+ calling convention #2108

Open
wants to merge 4 commits into
base: main
Choose a base branch
from

Conversation

ddelnano
Copy link
Member

@ddelnano ddelnano commented Feb 3, 2025

Summary: Update dynamic logging to work with Go's 1.17+ calling convention

Despite our earlier messaging that dynamic logging would be deprecated in #2105, I decided that it was easier to handle the new ABI instead of deprecating the Go parts of the dynamic tracer. My rationale for this is that the blocker for achieving feature parity for the new Go ABI, handling STRUCT_BLOB variables, is actually a concern for c/c++ tracepoint programs as well. I felt it was important to keep the dynamic tracer rather than deprecate it entirely.

As mentioned above, this change does not have full feature parity with the legacy ABI since STRUCT_BLOB variables don't work with register based calling conventions -- these variables copy a blob of memory with the assumption that a packed struct exists in a contiguous chunk of memory. However, this isn't unique to Go binaries as c/c++ applications can pass certain structs via registers as well.

This change replaces the previous Go STRUCT_BLOB tests with C equivalents that pass the variable on the stack. When a struct variable will be passed via a register, dynamic logging will now return an error and suggest to the user to access struct fields individually. This error and the test cases that assert the error is returned can be reverted to their original form once #2106 is complete.

Relevant Issues: #2105

Type of change: /kind cleanup

Test Plan: Existing tests pass and new ones were added where coverage was needed

Changelog Message: Update Go dynamic logging feature to support Go 1.17+ binaries

@ddelnano ddelnano marked this pull request as ready for review February 3, 2025 17:14
@ddelnano ddelnano requested a review from a team as a code owner February 3, 2025 17:14
This change has parity with the previous ABI's implementation with the
exception of handling structs that are passed via registers. This will
be handled in a later change

Signed-off-by: Dom Del Nano <[email protected]>
…OB coverage for struct variables

Signed-off-by: Dom Del Nano <[email protected]>
Signed-off-by: Dom Del Nano <[email protected]>
@ddelnano ddelnano force-pushed the ddelnano/update-dynamic-tracer-with-go-regabi-rebase2 branch from 1457947 to 5642386 Compare February 3, 2025 18:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant