Skip to content

Conversation

@mszabo-wikia
Copy link
Contributor

Historically, HHVM statically linked the system libbfd to power stack trace symbolization in its crash reports and in perf map files. This was disabled for OSS in D2137703[1] because of the wildly differing libbfd ABI across target systems. D3742004[2] and D3855027[3] then brought in folly::Symbolizer for both use cases, but this remained gated behind a Meta-only define.

folly::Symbolizer has been stable in upstream folly for a while now, so let's enable it unconditionally and deshim the experimental/ header. This also allows removing the dead libbfd integration. For this to work, the folly build must be built with and able to find libunwind, which isn't a given when building against libc++ and LLVM libunwind on Ubuntu as it installs includes into a subdirectory, so provide an additional hint for this case.

This allows us to finally have a proper stacktrace rather than raw memory addresses in crash reports, such as:

Core dumped: Segmentation fault
Stack trace in /tmp/stacktrace.902095.log
Host: hhvm-jammy-vm
ProcessID: 902095
ThreadID: 281473658339392
ThreadPID: 902095
Name: /usr/local/bin/hhvm
CmdLine: hhvm ../hhvm/hphp/test/quick/dv.php
Type: Segmentation fault
Runtime: hhvm
Version: heads/7.70.0-slack-0-g7be53eff8d22faa0383a128696fae83b224aedd5
DebuggerCount: 0

Arguments: ../hhvm/hphp/test/quick/dv.php
ThreadType: CLI

-------------------------------Treadmill Information----------------------------
Now: 235093382994348
OldestStartTime: 235093373066177
InflightRequestsSize: 1

Active Requests:
  281473658339392 1 235093373066177 (age 9ms) (timeout 0s) CLISession OLDEST

------------------------------------------------------------------------------

CPP Stacktrace:

 # 0  HPHP::jit::FixupMap::processFixupForVMFrame(HPHP::jit::VMFrame)
 # 1  HPHP::jit::FixupMap::fixupWork(HPHP::ActRec*, bool)
 # 2  HPHP::jit::detail::syncVMRegsWork(bool)
 # 3  HPHP::createBacktrace(HPHP::BacktraceArgs const&)
 # 4  HPHP::f_debug_backtrace(long, long)
 # 5  HPHP::throwable_init(HPHP::ObjectData*)
 # 6  HPHP::ObjectData* HPHP::ObjectData::newInstance<false>(HPHP::Class*)
 # 7  HPHP::SystemLib::AllocRuntimeExceptionObject(HPHP::Variant const&)
 # 8  HPHP::SystemLib::throwRuntimeExceptionObject(HPHP::Variant const&)
 # 9  HPHP::throwMissingArgument(HPHP::Func const*, int)

PHP Stacktrace:

 #0  main() called at [/home/mszabo/hhvm/hphp/test/quick/dv.php:28]
 #1  main_entry()

[1] a66dd13
[2] c11ad4e
[3] 0e082c4

Historically, HHVM statically linked the system libbfd to power
stack trace symbolization in its crash reports and in perf map files.
This was disabled for OSS in D2137703[1] because of the wildly differing libbfd ABI across
target systems. D3742004[2] and D3855027[3] then brought in
folly::Symbolizer for both use cases, but this remained gated behind a
Meta-only define.

folly::Symbolizer has been stable in upstream folly for a while now, so
let's enable it unconditionally and deshim the experimental/ header.
This also allows removing the dead libbfd integration.
For this to work, the folly build must be built with and able to find libunwind,
which isn't a given when building against libc++ and LLVM libunwind
on Ubuntu as it installs includes into a subdirectory, so provide an
additional hint for this case.

This allows us to finally have a proper stacktrace rather than raw
memory addresses in crash reports, such as:
```
Core dumped: Segmentation fault
Stack trace in /tmp/stacktrace.902095.log
Host: hhvm-jammy-vm
ProcessID: 902095
ThreadID: 281473658339392
ThreadPID: 902095
Name: /usr/local/bin/hhvm
CmdLine: hhvm ../hhvm/hphp/test/quick/dv.php
Type: Segmentation fault
Runtime: hhvm
Version: heads/7.70.0-slack-0-g7be53eff8d22faa0383a128696fae83b224aedd5
DebuggerCount: 0

Arguments: ../hhvm/hphp/test/quick/dv.php
ThreadType: CLI

-------------------------------Treadmill Information----------------------------
Now: 235093382994348
OldestStartTime: 235093373066177
InflightRequestsSize: 1

Active Requests:
  281473658339392 1 235093373066177 (age 9ms) (timeout 0s) CLISession OLDEST

------------------------------------------------------------------------------

CPP Stacktrace:

 # 0  HPHP::jit::FixupMap::processFixupForVMFrame(HPHP::jit::VMFrame)
 # 1  HPHP::jit::FixupMap::fixupWork(HPHP::ActRec*, bool)
 # 2  HPHP::jit::detail::syncVMRegsWork(bool)
 # 3  HPHP::createBacktrace(HPHP::BacktraceArgs const&)
 # 4  HPHP::f_debug_backtrace(long, long)
 # 5  HPHP::throwable_init(HPHP::ObjectData*)
 # 6  HPHP::ObjectData* HPHP::ObjectData::newInstance<false>(HPHP::Class*)
 # 7  HPHP::SystemLib::AllocRuntimeExceptionObject(HPHP::Variant const&)
 # 8  HPHP::SystemLib::throwRuntimeExceptionObject(HPHP::Variant const&)
 # 9  HPHP::throwMissingArgument(HPHP::Func const*, int)

PHP Stacktrace:

 #0  main() called at [/home/mszabo/hhvm/hphp/test/quick/dv.php:28]
 #1  main_entry()

```

[1] facebook@a66dd13
[2] facebook@c11ad4e
[3] facebook@0e082c4
@meta-cla meta-cla bot added the CLA Signed label Dec 5, 2025
@meta-codesync
Copy link

meta-codesync bot commented Dec 5, 2025

@facebook-github-bot has imported this pull request. If you are a Meta employee, you can view this in D88499314. (Because this pull request was imported automatically, there will not be any future comments.)

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant