// asmText assembles a TEXT pseudo-op.
// TEXT runtime·sigtramp(SB),4,$0-0
-func (p *Parser) asmText(word string, operands [][]lex.Token) {
+func (p *Parser) asmText(operands [][]lex.Token) {
if len(operands) != 2 && len(operands) != 3 {
p.errorf("expect two or three operands for TEXT")
return
// asmData assembles a DATA pseudo-op.
// DATA masks<>+0x00(SB)/4, $0x00000000
-func (p *Parser) asmData(word string, operands [][]lex.Token) {
+func (p *Parser) asmData(operands [][]lex.Token) {
if len(operands) != 2 {
p.errorf("expect two operands for DATA")
return
// asmGlobl assembles a GLOBL pseudo-op.
// GLOBL shifts<>(SB),8,$256
// GLOBL shifts<>(SB),$256
-func (p *Parser) asmGlobl(word string, operands [][]lex.Token) {
+func (p *Parser) asmGlobl(operands [][]lex.Token) {
if len(operands) != 2 && len(operands) != 3 {
p.errorf("expect two or three operands for GLOBL")
return
// asmPCData assembles a PCDATA pseudo-op.
// PCDATA $2, $705
-func (p *Parser) asmPCData(word string, operands [][]lex.Token) {
+func (p *Parser) asmPCData(operands [][]lex.Token) {
if len(operands) != 2 {
p.errorf("expect two operands for PCDATA")
return
// asmFuncData assembles a FUNCDATA pseudo-op.
// FUNCDATA $1, funcdata<>+4(SB)
-func (p *Parser) asmFuncData(word string, operands [][]lex.Token) {
+func (p *Parser) asmFuncData(operands [][]lex.Token) {
if len(operands) != 2 {
p.errorf("expect two operands for FUNCDATA")
return
func (p *Parser) pseudo(word string, operands [][]lex.Token) bool {
switch word {
case "DATA":
- p.asmData(word, operands)
+ p.asmData(operands)
case "FUNCDATA":
- p.asmFuncData(word, operands)
+ p.asmFuncData(operands)
case "GLOBL":
- p.asmGlobl(word, operands)
+ p.asmGlobl(operands)
case "PCDATA":
- p.asmPCData(word, operands)
+ p.asmPCData(operands)
case "TEXT":
- p.asmText(word, operands)
+ p.asmText(operands)
default:
return false
}
return c + pad
}
-func spadjop(ctxt *obj.Link, p *obj.Prog, l, q obj.As) obj.As {
+func spadjop(ctxt *obj.Link, l, q obj.As) obj.As {
if ctxt.Arch.Family != sys.AMD64 || ctxt.Arch.PtrSize == 4 {
return l
}
p.To.Reg = REG_SP
v := int32(-p.From.Offset)
p.From.Offset = int64(v)
- p.As = spadjop(ctxt, p, AADDL, AADDQ)
+ p.As = spadjop(ctxt, AADDL, AADDQ)
if v < 0 {
- p.As = spadjop(ctxt, p, ASUBL, ASUBQ)
+ p.As = spadjop(ctxt, ASUBL, ASUBQ)
v = -v
p.From.Offset = int64(v)
}
p.To.Reg = REG_SP
v := int32(-p.From.Offset)
p.From.Offset = int64(v)
- p.As = spadjop(ctxt, p, AADDL, AADDQ)
+ p.As = spadjop(ctxt, AADDL, AADDQ)
if v < 0 {
- p.As = spadjop(ctxt, p, ASUBL, ASUBQ)
+ p.As = spadjop(ctxt, ASUBL, ASUBQ)
v = -v
p.From.Offset = int64(v)
}
var isAndroid = (objabi.GOOS == "android")
-func prefixof(ctxt *obj.Link, p *obj.Prog, a *obj.Addr) int {
+func prefixof(ctxt *obj.Link, a *obj.Addr) int {
if a.Reg < REG_CS && a.Index < REG_CS { // fast path
return 0
}
return
}
- pre := prefixof(ctxt, p, &p.From)
+ pre := prefixof(ctxt, &p.From)
if pre != 0 {
asmbuf.Put1(byte(pre))
}
- pre = prefixof(ctxt, p, &p.To)
+ pre = prefixof(ctxt, &p.To)
if pre != 0 {
asmbuf.Put1(byte(pre))
}
return false
}
-func indir_cx(ctxt *obj.Link, p *obj.Prog, a *obj.Addr) {
+func indir_cx(ctxt *obj.Link, a *obj.Addr) {
if ctxt.Headtype == objabi.Hnacl && ctxt.Arch.Family == sys.AMD64 {
a.Type = obj.TYPE_MEM
a.Reg = REG_R15
p.As = cmp
p.From.Type = obj.TYPE_REG
p.From.Reg = REG_SP
- indir_cx(ctxt, p, &p.To)
+ indir_cx(ctxt, &p.To)
p.To.Offset = 2 * int64(ctxt.Arch.PtrSize) // G.stackguard0
if cursym.CFunc() {
p.To.Offset = 3 * int64(ctxt.Arch.PtrSize) // G.stackguard1
p.As = cmp
p.From.Type = obj.TYPE_REG
p.From.Reg = REG_AX
- indir_cx(ctxt, p, &p.To)
+ indir_cx(ctxt, &p.To)
p.To.Offset = 2 * int64(ctxt.Arch.PtrSize) // G.stackguard0
if cursym.CFunc() {
p.To.Offset = 3 * int64(ctxt.Arch.PtrSize) // G.stackguard1
p = obj.Appendp(p, newprog)
p.As = mov
- indir_cx(ctxt, p, &p.From)
+ indir_cx(ctxt, &p.From)
p.From.Offset = 2 * int64(ctxt.Arch.PtrSize) // G.stackguard0
if cursym.CFunc() {
p.From.Offset = 3 * int64(ctxt.Arch.PtrSize) // G.stackguard1
}
// listEntry prints to standard output a line describing the entry.
-func listEntry(ar *Archive, entry *Entry, verbose bool) {
+func listEntry(entry *Entry, verbose bool) {
if verbose {
fmt.Fprintf(stdout, "%s\n", entry)
} else {
func (ar *Archive) printContents(entry *Entry) {
if ar.match(entry) {
if verbose {
- listEntry(ar, entry, false)
+ listEntry(entry, false)
}
ar.output(entry, stdout)
} else {
// tableOfContents implements the 't' command.
func (ar *Archive) tableOfContents(entry *Entry) {
if ar.match(entry) {
- listEntry(ar, entry, verbose)
+ listEntry(entry, verbose)
}
ar.skip(entry)
}
func (ar *Archive) extractContents(entry *Entry) {
if ar.match(entry) {
if verbose {
- listEntry(ar, entry, false)
+ listEntry(entry, false)
}
fd, err := os.OpenFile(entry.name, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, entry.mode)
if err != nil {