{"record":{"id":"ba37fbea10049bdc","repo":"go-delve/delve","slug":"aligning-after-desc-v","errorCode":null,"errorMessage":"aligning after desc: %v","messagePattern":"aligning after desc: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/proc/core/linux_core.go","lineNumber":386,"sourceCode":"\t\t\t}\n\t\t\tnote.Desc = &fpregs\n\t\t}\n\tcase _NT_AUXV, elfwriter.DelveHeaderNoteType, elfwriter.DelveThreadNodeType:\n\t\tnote.Desc = desc\n\tcase _NT_FPREGSET:\n\t\tif machineType == _EM_AARCH64 {\n\t\t\terr = readFpregsetNote(note, &linutil.ARM64PtraceFpRegs{}, desc[:_ARM_FP_HEADER_START])\n\t\t} else if machineType == _EM_RISCV {\n\t\t\terr = readFpregsetNote(note, &linutil.RISCV64PtraceFpRegs{}, desc)\n\t\t} else if machineType == _EM_LOONGARCH {\n\t\t\terr = readFpregsetNote(note, &linutil.LOONG64PtraceFpRegs{}, desc)\n\t\t}\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\tif err := skipPadding(r, 4); err != nil {\n\t\treturn nil, fmt.Errorf(\"aligning after desc: %v\", err)\n\t}\n\treturn note, nil\n}\n\nfunc readFpregsetNote(note *note, fpregs interface{ Byte() []byte }, desc []byte) error {\n\trdr := bytes.NewReader(desc)\n\tif err := binary.Read(rdr, binary.LittleEndian, fpregs.Byte()); err != nil {\n\t\treturn err\n\t}\n\tnote.Desc = fpregs\n\treturn nil\n}\n\n// skipPadding moves r to the next multiple of pad.\nfunc skipPadding(r io.ReadSeeker, pad int64) error {\n\tpos, err := r.Seek(0, io.SeekCurrent)\n\tif err != nil {\n\t\treturn err","sourceCodeStart":368,"sourceCodeEnd":404,"githubUrl":"https://github.com/go-delve/delve/blob/a23773e6c31361e43246bc43a424ee009679b174/pkg/proc/core/linux_core.go#L368-L404","documentation":"readNote wraps a skipPadding failure after the note descriptor with this message. ELF notes require the descriptor to be padded to a 4-byte boundary; when the reader can't consume that padding (EOF or I/O error), the note stream is considered corrupt. Delve throws it because subsequent notes cannot be located reliably.","triggerScenarios":"The core file ends exactly at the end of the note descriptor with no 4-byte alignment padding; or r.Read fails during skipPadding while iterating NOTES in dlv core parsing.","commonSituations":"Dumps truncated by ulimit -c or disk-full right at a note boundary; interrupted file copies; custom dumpers that omit alignment padding (technically malformed ELF cores).","solutions":["Re-capture the core with a standard dumper (kernel or gcore) so all notes are 4-byte aligned.","Check the file size against the NOTES segment size in the ELF program headers (readelf -l <core>).","If the last note is the problem and earlier notes are intact, tolerate the truncation by re-dumping anyway — partial cores are unreliable.","Verify transfer integrity (checksums) before debugging."],"exampleFix":"// before\nnotes, err := readNotes(...) // fails on last note padding\nif err != nil { return err } // whole core rejected\n// after\nnotes, err := readNotes(...)\nif err != nil {\n    log.Printf(\"warning: core notes truncated: %v\", err)\n    // proceed only if >=1 complete PRSTATUS note was read\n    if len(notes) == 0 { return err }\n}","handlingStrategy":"validation","validationCode":"// Ensure the PT_NOTE segment is 4-byte aligned and fully present:\nfor _, p := range elfFile.Progs {\n    if p.Type == elf.PT_NOTE && (p.Filesz%4 != 0 || p.Off+p.Filesz > fileSize) {\n        return fmt.Errorf(\"core PT_NOTE malformed or truncated: off=%d size=%d\", p.Off, p.Filesz)\n    }\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Only accept cores from dumpers that emit properly aligned ELF notes.","Check file integrity (size + checksum) before any debugging session.","Set ulimit -c unlimited and verify the dump wasn't cut off.","Run readelf -l to confirm segment sizes fit within the file."],"tags":["core-dump","elf","io","alignment"],"backgroundTag":"truncated-core-file","analyzedSha":"a23773e6c31361e43246bc43a424ee009679b174","analyzedAt":"2026-08-31T15:12:45.221Z","schemaVersion":2},"datasetVersion":"2026-08-31T22:30:34.772Z"}