Skip to content

Resolve native symbols for containerized python applications#329

Open
pramodk wants to merge 1 commit into
bloomberg:mainfrom
pramodk:pramodk/container-native-symbols
Open

Resolve native symbols for containerized python applications#329
pramodk wants to merge 1 commit into
bloomberg:mainfrom
pramodk:pramodk/container-native-symbols

Conversation

@pramodk

@pramodk pramodk commented Jul 10, 2026

Copy link
Copy Markdown

Describe your changes

This change fixes native symbol lookup for Python processes running inside container runtimes such as Enroot.

When the libdwfl lookup cannot open an absolute module path from /proc/<pid>/maps, this PR now retries that same path through the target process root:

  /proc/<pid>/root/<mapped-path>

The fallback is only used after build-id lookup and normal host path lookup fail, so existing host behavior remains unchanged.

Fixes #327.

Testing performed

  • Built a PyStack wheel from this PR.
  • Validated with a standalone ctypes repro:
    • Host process: upstream and patched PyStack resolve Python and native frames.
    • Enroot process with current main: Python frames are visible, native symbol is missing.
    • Enroot process with this PR: Python frames are visible, native symbol is resolved.

Additional context

The issue is specific to native C/C++ symbol lookup. Python frames can still be visible because PyStack can inspect the target process, but native library paths from /proc/<pid>/maps may exist only inside the container filesystem. As containers are used extensively in certain domains like AI/ML/Data Science, it would be really helpful to fix this.

- Retry failed libdwfl module opens through /proc/<pid>/root for container-private absolute paths.
- Store target PID in DWFL module userdata so find_elf can build the process-root path.
- Preserve build-id and normal host path lookup before falling back to the target process root.

Signed-off-by: Pramod Kumbhar <prkumbhar@nvidia.com>
@pramodk pramodk force-pushed the pramodk/container-native-symbols branch 2 times, most recently from 9558b20 to 695ff34 Compare July 10, 2026 09:26
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.

Resolve native symbols for containerized Python processes using the target process root (via /proc/<pid>/root)

1 participant