@ -6,7 +6,7 @@
garble build
garble build
exec ./main
exec ./main
cmp stderr main.stderr
cmp stderr main.stderr
! binsubstr main$exe 'test/main' 'priv ateA dd' 'Public Add' 'garble_'
! binsubstr main$exe 'test/main' 'addJmp ' 'AddImpl ' 'garble_'
# We used to panic on broken packages with assembly.
# We used to panic on broken packages with assembly.
! garble build ./broken/...
! garble build ./broken/...
@ -24,12 +24,12 @@ stdin empty-reverse.txt
garble -tiny build
garble -tiny build
exec ./main
exec ./main
cmp stderr main.stderr
cmp stderr main.stderr
! binsubstr main$exe 'priv ateA dd' 'Public Add'
! binsubstr main$exe 'addJmp ' 'AddImpl '
go build
go build
exec ./main
exec ./main
cmp stderr main.stderr
cmp stderr main.stderr
binsubstr main$exe 'priv ateA dd' 'Public Add'
binsubstr main$exe 'addJmp ' 'AddImpl '
-- go.mod --
-- go.mod --
module test/with.many.dots/main
module test/with.many.dots/main
@ -41,7 +41,8 @@ import (
"test/with.many.dots/main/imported"
"test/with.many.dots/main/imported"
)
)
func privateAdd(x, y int32) int32
func addJmpPkgPath(x, y int32) int32
func addJmpPkgName(x, y int32) int32
// goData is used from both assembly and header files.
// goData is used from both assembly and header files.
var goData = [4]uint64{1, 2, 3, 4}
var goData = [4]uint64{1, 2, 3, 4}
@ -50,7 +51,8 @@ func modifyGoData()
func modifyGoData2()
func modifyGoData2()
func main() {
func main() {
println(privateAdd(1, 2))
println(addJmpPkgPath(1, 2))
println(addJmpPkgName(1, 2))
println(goData[0], goData[1])
println(goData[0], goData[1])
modifyGoData()
modifyGoData()
@ -58,7 +60,7 @@ func main() {
modifyGoData2()
modifyGoData2()
println(goData[0], goData[1])
println(goData[0], goData[1])
println(imported.Public Add(3, 4))
println(imported.AddImpl (3, 4))
}
}
-- garble_main_amd64.s --
-- garble_main_amd64.s --
#include "garble_define_amd64.h"
#include "garble_define_amd64.h"
@ -69,8 +71,13 @@ func main() {
// Or the same with leading whitespace:
// Or the same with leading whitespace:
// A comment may include many·special∕ asm·runes and it's okay.
// A comment may include many·special∕ asm·runes and it's okay.
TEXT ·privateAdd(SB),$0-16
// Reference an imported package by its package path.
JMP test∕ with·many·dots∕ main∕ imported·PublicAdd(SB)
TEXT ·addJmpPkgPath(SB),$0-16
JMP test∕ with·many·dots∕ main∕ imported·AddImpl(SB)
// Reference the current package by its package name.
TEXT ·addJmpPkgName(SB),$0-16
JMP main·addJmpPkgPath(SB)
TEXT ·modifyGoData(SB),$0-16
TEXT ·modifyGoData(SB),$0-16
addGoDataTo($12)
addGoDataTo($12)
@ -93,22 +100,34 @@ TEXT ·modifyGoData2(SB),$0-16
-- imported/imported.go --
-- imported/imported.go --
package imported
package imported
func PublicAdd(x, y int32) int32
func AddImpl(x, y int32) int32
// Reference the current package by its package path.
func addJmpPkgPath(x, y int32) int32
// Reference the current package by its package path.
func addJmpPkgName(x, y int32) int32
-- imported/imported_amd64.s --
-- imported/imported_amd64.s --
TEXT ·PublicAdd(SB),$0-16
TEXT ·AddImpl (SB),$0-16
MOVL x+0(FP), BX
MOVL x+0(FP), BX
MOVL y+4(FP), BP
MOVL y+4(FP), BP
ADDL BP, BX
ADDL BP, BX
MOVL BX, ret+8(FP)
MOVL BX, ret+8(FP)
RET
RET
TEXT ·addJmpPkgPath(SB),$0-16
JMP test∕ with·many·dots∕ main∕ imported·AddImpl(SB)
TEXT ·addJmpPkgName(SB),$0-16
JMP imported·AddImpl(SB)
-- broken/syntax/broken.go --
-- broken/syntax/broken.go --
package broken
package broken
func PublicAdd
func AddImpl
-- broken/asm/imported_amd64.s --
-- broken/asm/imported_amd64.s --
TEXT ·Public Add(SB),$0-16
TEXT ·AddImpl (SB),$0-16
MOVL x+0(FP), BX
MOVL x+0(FP), BX
MOVL y+4(FP), BP
MOVL y+4(FP), BP
ADDL BP, BX
ADDL BP, BX
@ -117,10 +136,10 @@ TEXT ·PublicAdd(SB),$0-16
-- broken/asm/broken.go --
-- broken/asm/broken.go --
package broken
package broken
func Public Add(x, y int32) MissingType
func AddImpl (x, y int32) MissingType
-- broken/imported_amd64.s --
-- broken/imported_amd64.s --
TEXT ·Public Add(SB),$0-16
TEXT ·AddImpl (SB),$0-16
MOVL x+0(FP), BX
MOVL x+0(FP), BX
MOVL y+4(FP), BP
MOVL y+4(FP), BP
ADDL BP, BX
ADDL BP, BX
@ -128,6 +147,7 @@ TEXT ·PublicAdd(SB),$0-16
RET
RET
-- main.stderr --
-- main.stderr --
3
3
3
1 2
1 2
13 36
13 36
25 70
25 70