feat(asm): add .debug_frame CFI section for stack unwinding

Assisted-by: MiMo V2.5 Pro
This commit is contained in:
2026-08-21 01:20:21 +02:00
parent f153be8158
commit 746cef8100
6 changed files with 91 additions and 1 deletions
+10 -1
View File
@@ -12,6 +12,7 @@ type dwarfELFSections struct {
infoOff, infoSize int
lineOff, lineSize int
lineStrOff, lineStrSize int
frameOff, frameSize int
// Relocations for .debug_info address references.
infoRelocs []elfDwarfReloc
// Relocations for .debug_line address references.
@@ -91,6 +92,14 @@ func appendDWARFSections(out *[]byte, img *Image, srcFile string, symIdx map[str
infoBase := len(*out)
*out = append(*out, ds.debugInfo...)
// .debug_frame
if len(ds.debugFrame) > 0 {
align(1)
result.frameOff = len(*out)
result.frameSize = len(ds.debugFrame)
*out = append(*out, ds.debugFrame...)
}
// Patch .debug_info relocations.
for _, dr := range ds.infoRelocs {
if idx, ok := nameToIdx[dr.name]; ok {
@@ -130,5 +139,5 @@ func dwarfRelaRecords(dw *dwarfELFSections, relType uint32) []byte {
// dwarfSectionNames returns the DWARF section names for the string table.
var dwarfSectionNames = []string{
".debug_abbrev", ".debug_info", ".debug_line", ".debug_line_str",
".rela.debug_info", ".rela.debug_line",
".debug_frame", ".rela.debug_info", ".rela.debug_line",
}