fix #14 by exporting ArchiveMember.IsDataObj to allow users to create data archive members themselves

This commit is contained in:
Andrew LeFevre
2020-10-21 16:28:24 -04:00
parent 23d735563c
commit cc437dcdb1
2 changed files with 9 additions and 14 deletions
+8 -13
View File
@@ -27,9 +27,9 @@ import (
)
const (
CompilerObjName = "__.PKGDEF"
archiveHeaderLen = 60
initSymName = `""..inittask`
objHeaderLen = 80
)
// A Package is a parsed Go object file or archive defining a Go package.
@@ -60,20 +60,15 @@ type ArchiveMember struct {
NonPkgSymRefs []*Sym
SymRefs []SymRef
IsDataObj bool
textSyms []*Sym
symMap map[int]*Sym
isCompilerObj bool
isDataObj bool
}
func (a ArchiveMember) IsCompilerObj() bool {
return a.isCompilerObj
}
func (a ArchiveMember) IsDataObj() bool {
return a.isDataObj
return a.ArchiveHeader.Name == CompilerObjName
}
type ArchiveHeader struct {
@@ -534,7 +529,7 @@ func (r *objReader) parseArchive(importCfg ImportCfg, returnReader bool) (*goobj
var am *ArchiveMember
switch ar.Name {
case "__.PKGDEF":
case CompilerObjName:
ar.Data = make([]byte, size)
if err := r.readFull(ar.Data); err != nil {
return nil, err
@@ -545,7 +540,7 @@ func (r *objReader) parseArchive(importCfg ImportCfg, returnReader bool) (*goobj
am = new(ArchiveMember)
am.ArchiveHeader = ar
am.isCompilerObj = true
am.IsDataObj = true
default:
oldLimit := r.limit
r.limit = r.offset + size
@@ -573,7 +568,7 @@ func (r *objReader) parseArchive(importCfg ImportCfg, returnReader bool) (*goobj
if fsize != size {
ar.Data = append(ar.Data, 0x00)
}
am = &ArchiveMember{ArchiveHeader: ar, isDataObj: true}
am = &ArchiveMember{ArchiveHeader: ar, IsDataObj: true}
}
r.skip(r.limit - r.offset)
+1 -1
View File
@@ -44,7 +44,7 @@ func (pkg *Package) Write(path string) (err error) {
b.Write(arhdr[:])
curObjStartOff = b.Offset()
b.Write(ar.Data)
if ctxt.isCompilerObj || ctxt.isDataObj {
if ctxt.IsDataObj {
continue
}