unwinding/dwarf: Add `.debug_frame` based stack unwinding
related #293
also, see https://github.com/parca-dev/parca-agent/issues/782 (.zdebug_frame)
- [ ] DWARF64 parsing support
- [ ] Ability to specify additional debug information
This has some good information on the differences: https://docs.rs/gimli/0.16.0/gimli/struct.DebugFrame.html#differences-between-debug_frame-and-eh_frame
Parca Agent amd64 and arm64 of v0.9.1 have .eh_frame sections: https://gist.github.com/brancz/b163d154e9f8179051ef457f0f4a9983
The x86_64 ABI require .eh_frame (it's a loadable section), but not .debug_frame. So far we've been able to profile all the native processes we tried with the DWARF CFI info in the former section.
Are there any users/customers that need .debug_frame support?
The x86_64 ABI require
.eh_frame(it's a loadable section), but not.debug_frame. So far we've been able to profile all the native processes we tried with the DWARF CFI info in the former section.Are there any users/customers that need
.debug_framesupport?
Maybe another question, is there a case where we don't have .eh_frame but .debug_frame?
I'm happy to close it until we have an actual request or real-life case.
Maybe another question, is there a case where we don't have .eh_frame but .debug_frame?
Not that I know of, but my knowledge here might not be complete
The x86_64 ABI require
.eh_frame(it's a loadable section), but not.debug_frame. So far we've been able to profile all the native processes we tried with the DWARF CFI info in the former section. Are there any users/customers that need.debug_framesupport?Maybe another question, is there a case where we don't have
.eh_framebut.debug_frame?
Wasn't that the case with CGO applications :thinking: But I don't remember exactly what was the conclusion of the research when we looked for it last time.
I agree though. We should probably wait for working on this until we come across the real use case.
I've been put in contact with the engineers working on debuginfo on the GraalVM and it turns out that it only populates .debug_frame, and any entries in .eh_frame only happen to be there because of GCC. (RE: #1915)