]> Cypherpunks repositories - gostls13.git/commitdiff
[dev.cc] cmd/asm: add a couple of error messages for things like $exit
authorRob Pike <r@golang.org>
Mon, 9 Feb 2015 19:45:36 +0000 (11:45 -0800)
committerRob Pike <r@golang.org>
Mon, 9 Feb 2015 21:08:32 +0000 (21:08 +0000)
These illegal addressing modes were caught downstream in the assembler
or link library, but we can give a better error message upstream.

Change-Id: Ib30ef4d94d5d8d44900276592edd7997e6f91e55
Reviewed-on: https://go-review.googlesource.com/4260
Reviewed-by: Russ Cox <rsc@golang.org>
src/cmd/asm/internal/asm/parse.go

index 3e0fb32ee7756cf2901cc92bc3c717a0b26b552e..8ba0973d97ab42f5155a8c2770c85bd8b3bfc6f5 100644 (file)
@@ -290,6 +290,9 @@ func (p *Parser) operand(a *obj.Addr) bool {
                        a.Type = obj.TYPE_ADDR
                }
                a.Reg = r1
+               if r1 == arch.RPC && prefix != 0 {
+                       p.errorf("illegal addressing mode for PC")
+               }
                a.Scale = scale
                p.get(')')
                if scale == 0 && p.peek() == '(' {
@@ -363,14 +366,22 @@ func (p *Parser) symbolReference(a *obj.Addr, name string, prefix rune) {
        }
        a.Sym = obj.Linklookup(p.linkCtxt, name, isStatic)
        if p.peek() == scanner.EOF {
+               if prefix != 0 {
+                       p.errorf("illegal addressing mode for symbol %s", name)
+               }
                return
        }
-       // Expect (SB) or (FP) or (SP).
+       // Expect (SB) or (FP), (PC), (SB), or (SP)
        p.get('(')
        reg := p.get(scanner.Ident).String()
        switch reg {
        case "FP":
                a.Name = obj.NAME_PARAM
+       case "PC":
+               // Fine as is.
+               if prefix != 0 {
+                       p.errorf("illegal addressing mode for PC")
+               }
        case "SB":
                a.Name = obj.NAME_EXTERN
                if isStatic != 0 {