in newtmgr/core/core_convert.go [249:304]
func (cc *CoreConvert) Convert() error {
if cc.Source == nil || cc.Target == nil {
return util.NewNewtError("Missing file parameters")
}
err := cc.readHdr()
if err != nil {
return err
}
for {
tlv, err := cc.readTlv()
if err != nil {
return err
}
if tlv == nil {
break
}
data_buf := make([]byte, tlv.Len)
cnt, err := cc.Source.Read(data_buf)
if err != nil {
return util.NewNewtError(fmt.Sprintf("Error reading: %s",
err.Error()))
}
if cnt != int(tlv.Len) {
return util.NewNewtError("Short file")
}
switch tlv.Type {
case COREDUMP_TLV_MEM:
cc.makeProgHdr(tlv.Off, data_buf)
case COREDUMP_TLV_IMAGE:
cc.ImageHash = data_buf
case COREDUMP_TLV_REGS:
if tlv.Len%4 != 0 {
return util.NewNewtError("Invalid register area size")
}
cc.makeRegInfo(data_buf)
default:
return util.NewNewtError("Unknown TLV type")
}
}
cc.makeElfHdr()
if err != nil {
return err
}
cc.setProgHdrOff()
binary.Write(cc.Target, binary.LittleEndian, cc.elfHdr)
for _, phdr := range cc.phdrs {
binary.Write(cc.Target, binary.LittleEndian, phdr)
}
for _, data := range cc.data {
cc.Target.Write(data)
}
return nil
}