func()

in pkg/tools/elf/dwarf_init.go [220:258]


func (r *DwarfReader) getStructureFields(data *dwarf.Data, entry *dwarf.Entry) ([]*StructureFieldInfo, error) {
	reader := data.Reader()
	reader.Seek(entry.Offset)
	_, err := reader.Next()
	if err != nil {
		return nil, err
	}

	res := make([]*StructureFieldInfo, 0)
	for {
		child, err := reader.Next()
		if err != nil {
			return nil, err
		}
		if child == nil || child.Tag == 0 {
			break
		}

		if child.Tag != dwarf.TagMember {
			continue
		}

		name, ok := child.Val(dwarf.AttrName).(string)
		if !ok {
			continue
		}
		offset, ok := child.Val(dwarf.AttrDataMemberLoc).(int64)
		if !ok {
			continue
		}

		field := &StructureFieldInfo{
			Name:   name,
			Offset: offset,
		}
		res = append(res, field)
	}
	return res, nil
}