case 0: /* pseudo ops */
if false { /*debug['G']*/
- fmt.Printf("%x: %s: arm %d\n", uint32(p.Pc), p.From.Sym.Name, p.From.Sym.Fnptr)
+ fmt.Printf("%x: %s: arm\n", uint32(p.Pc), p.From.Sym.Name)
}
case 1: /* op R,[R],R */
if s.Type == 0 {
s.Type = obj.SRODATA
obj.Adduint32(ctxt, s, i32)
- s.Reachable = 0
}
p.From.Type = obj.TYPE_MEM
if s.Type == 0 {
s.Type = obj.SRODATA
obj.Adduint64(ctxt, s, i64)
- s.Reachable = 0
}
p.From.Type = obj.TYPE_MEM
if s.Type == 0 {
s.Type = SDATA
}
- s.Reachable = 1
if s.Size < off+wid {
s.Size = off + wid
Symgrow(ctxt, s, s.Size)
if s.Type == 0 {
s.Type = SDATA
}
- s.Reachable = 1
i := s.Size
s.Size += int64(ctxt.Arch.Ptrsize)
Symgrow(ctxt, s, s.Size)
if s.Type == 0 {
s.Type = SDATA
}
- s.Reachable = 1
i := s.Size
s.Size += 4
Symgrow(ctxt, s, s.Size)
if s.Type == 0 {
s.Type = SDATA
}
- s.Reachable = 1
if off+int64(ctxt.Arch.Ptrsize) > s.Size {
s.Size = off + int64(ctxt.Arch.Ptrsize)
Symgrow(ctxt, s, s.Size)
if s.Type == 0 {
s.Type = SDATA
}
- s.Reachable = 1
i := s.Size
s.Size += int64(ctxt.Arch.Ptrsize)
Symgrow(ctxt, s, s.Size)
if s.Type == 0 {
s.Type = SDATA
}
- s.Reachable = 1
i := s.Size
s.Size += 4
Symgrow(ctxt, s, s.Size)
)
type LSym struct {
- Name string
- Extname string
- Type int16
- Version int16
- Dupok uint8
- Cfunc uint8
- External uint8
- Nosplit uint8
- Reachable uint8
- Cgoexport uint8
- Special uint8
- Stkcheck uint8
- Hide uint8
- Leaf uint8
- Fnptr uint8
- Localentry uint8
- Seenglobl uint8
- Onlist uint8
- Printed uint8
- Symid int16
- Dynid int32
- Plt int32
- Got int32
- Align int32
- Elfsym int32
- Args int32
- Locals int32
- Value int64
- Size int64
- Allsym *LSym
- Next *LSym
- Sub *LSym
- Outer *LSym
- Gotype *LSym
- Reachparent *LSym
- Queue *LSym
- File string
- Dynimplib string
- Dynimpvers string
- Sect *struct{}
- Autom *Auto
- Text *Prog
- Etext *Prog
- Pcln *Pcln
- P []byte
- R []Reloc
+ Name string
+ Type int16
+ Version int16
+ Dupok uint8
+ Cfunc uint8
+ Nosplit uint8
+ Leaf uint8
+ Seenglobl uint8
+ Onlist uint8
+ Args int32
+ Locals int32
+ Value int64
+ Size int64
+ Next *LSym
+ Gotype *LSym
+ Autom *Auto
+ Text *Prog
+ Etext *Prog
+ Pcln *Pcln
+ P []byte
+ R []Reloc
}
type Pcln struct {
)
type Reloc struct {
- Off int32
- Siz uint8
- Done uint8
- Type int32
- Variant int32
- Add int64
- Xadd int64
- Sym *LSym
- Xsym *LSym
+ Off int32
+ Siz uint8
+ Type int32
+ Add int64
+ Xadd int64
+ Sym *LSym
+ Xsym *LSym
}
// Reloc.type
R_POWER_TOC
)
-// Reloc.variant
-const (
- RV_NONE = iota
- RV_POWER_LO
- RV_POWER_HI
- RV_POWER_HA
- RV_POWER_DS
- RV_CHECK_OVERFLOW = 1 << 8
- RV_TYPE_MASK = RV_CHECK_OVERFLOW - 1
-)
-
type Auto struct {
Asym *LSym
Link *Auto
}
// Pcdata iterator.
-// for(pciterinit(ctxt, &it, &pcd); !it.done; pciternext(&it)) { it.value holds in [it.pc, it.nextpc) }
+// for(pciterinit(ctxt, &it, &pcd); !it.done; pciternext(&it)) { it.value holds in [it.pc, it.nextpc) }
type Pciter struct {
d Pcdata
p []byte
// Link holds the context for writing object code from a compiler
// to be linker input or for reading that input into the linker.
type Link struct {
- Thechar int32
- Thestring string
Goarm int32
Headtype int
Arch *LinkArch
- Ignore func(string) int32
Debugasm int32
- Debugline int32
- Debughist int32
- Debugread int32
Debugvlog int32
- Debugstack int32
Debugzerostack int32
Debugdivmod int32
- Debugfloat int32
Debugpcln int32
Flag_shared int32
- Iself int32
Bso *Biobuf
Pathname string
Windows int32
Goroot_final string
Enforce_data_order int32
Hash map[SymVer]*LSym
- Allsym *LSym
- Nsymbol int32
LineHist LineHist
Imports []string
Plist *Plist
Autosize int32
Armsize int32
Pc int64
- Libdir []string
- Library []Library
Tlsoffset int
Diag func(string, ...interface{})
Mode int
- Curauto *Auto
- Curhist *Auto
Cursym *LSym
Version int
Textp *LSym
Etextp *LSym
- Histdepth int32
- Nhistfile int32
- Filesyms *LSym
}
type SymVer struct {
Version int
}
-type Library struct {
- Objref string
- Srcref string
- File string
- Pkg string
-}
-
// LinkArch is the definition of a single architecture.
type LinkArch struct {
ByteOrder binary.ByteOrder
Hwindows
)
-const (
- LinkAuto = 0 + iota
- LinkInternal
- LinkExternal
-)
-
-var linkbasepointer int
-
type Plist struct {
Name *LSym
Firstpc *Prog
s := new(LSym)
*s = LSym{}
- s.Dynid = -1
- s.Plt = -1
- s.Got = -1
s.Name = symb
s.Type = 0
s.Version = int16(v)
s.Value = 0
s.Size = 0
- ctxt.Nsymbol++
-
- s.Allsym = ctxt.Allsym
- ctxt.Allsym = s
return s
}
}
s = linknewsym(ctxt, symb, v)
- s.Extname = s.Name
ctxt.Hash[SymVer{symb, v}] = s
return s
if s.Type == 0 {
s.Type = obj.SRODATA
obj.Adduint32(ctxt, s, i32)
- s.Reachable = 0
}
p.From.Type = obj.TYPE_MEM
if s.Type == 0 {
s.Type = obj.SRODATA
obj.Adduint64(ctxt, s, i64)
- s.Reachable = 0
}
p.From.Type = obj.TYPE_MEM