Skip to content
This repository has been archived by the owner on Dec 1, 2021. It is now read-only.

linux gcc8 fun name error #11

Open
zeromake opened this issue Jun 6, 2018 · 3 comments
Open

linux gcc8 fun name error #11

zeromake opened this issue Jun 6, 2018 · 3 comments
Assignees
Labels

Comments

@zeromake
Copy link

zeromake commented Jun 6, 2018

env

  • system: linux amd64(archlinux)
  • gcc: v8.1.0
  • clang & llvm: v6.0.0
  • yasm: v1.3.0
  • c2goasm: last master
  • asm2plan9s: last master

problem

run

git clone https://github.com/minio/c2goasm.git
cd c2goasm/test/cpp
./assemble.sh ./MaddConstant.cpp
cd ../../
go build
./c2goasm -a ./test/cpp/MaddConstant.s ./test/MaddConstant_amd64.s

error

Processing ./test/cpp/MaddConstant.s
panic: Failed to find function prototype for _Z12MaddConstantPfS_S_

goroutine 1 [running]:
main.parseCompanionFile(0xc4200131c0, 0x1c, 0xc420013268, 0x16, 0x0, 0x0, 0x1, 0x40e6d9, 0x51eb80, 0xc42004d850)
        /home/zero/go-works/src/c2goasm/arguments.go:75 +0x24c
main.process(0xc420094600, 0x1e, 0x20, 0xc4200131c0, 0x1c, 0x0, 0x0, 0x0, 0x0, 0x0)
        /home/zero/go-works/src/c2goasm/c2goasm.go:86 +0x205
main.main()
        /home/zero/go-works/src/c2goasm/c2goasm.go:264 +0x390

Try to repair

diff --git a/subroutine.go b/subroutine.go

index 00d98f7..c6b3ec4 100644
--- a/subroutine.go
+++ b/subroutine.go
@@ -266,7 +266,7 @@ func extractNamePart(part string) (int, string) {
 func extractName(name string) string {

        // Only proceed for C++ mangled names
-       if !(strings.HasPrefix(name, "_ZN") || strings.HasPrefix(name, "__Z")) {
+       if !(strings.HasPrefix(name, "_ZN") || strings.HasPrefix(name, "__Z") || strings.HasPrefix(name, "_Z")) {
                return name
        }

but run go test -v ./... has error

FAIL    c2goasm/cgocmp [build failed]
=== RUN   TestMaddArgs10
--- PASS: TestMaddArgs10 (0.00s)
=== RUN   TestMaddConstant
unexpected fault address 0x0
fatal error: fault
[signal SIGSEGV: segmentation violation code=0x80 addr=0x0 pc=0x4e7ba3]

goroutine 6 [running]:
runtime.throw(0x52fa3b, 0x5)
        /usr/lib/go/src/runtime/panic.go:616 +0x81 fp=0xc420039e00 sp=0xc420039de0 pc=0x428a91
runtime.sigpanic()
        /usr/lib/go/src/runtime/signal_unix.go:395 +0x211 fp=0xc420039e50 sp=0xc420039e00 pc=0x43bc61
c2goasm/test._MaddConstant(0xc420039ea0, 0xc420039ec0, 0xc420039e70)
        /home/zero/go-works/src/c2goasm/test/MaddConstant_amd64.s:11 +0x13 fp=0xc420039e58 sp=0xc420039e50 pc=0x4e7ba3
c2goasm/test.MaddConstant(0x3f80000000000000, 0x4040000040000000, 0x40a0000040800000, 0x40e0000040c00000, 0x4000000000000000, 0x40c0000040800000, 0x4120000041000000, 0x4160000041400000, 0x0, 0x0, ...)
        /home/zero/go-works/src/c2goasm/test/MaddConstant_amd64.go:17 +0x5c fp=0xc420039ea0 sp=0xc420039e58 pc=0x4e5f3c
c2goasm/test.TestMaddConstant(0xc4200a21e0)
        /home/zero/go-works/src/c2goasm/test/MaddConstant_test.go:17 +0xd2 fp=0xc420039fa8 sp=0xc420039ea0 pc=0x4e65f2
testing.tRunner(0xc4200a21e0, 0x538520)
        /usr/lib/go/src/testing/testing.go:777 +0xd0 fp=0xc420039fd0 sp=0xc420039fa8 pc=0x4ad900
runtime.goexit()
        /usr/lib/go/src/runtime/asm_amd64.s:2361 +0x1 fp=0xc420039fd8 sp=0xc420039fd0 pc=0x454c51
created by testing.(*T).Run
        /usr/lib/go/src/testing/testing.go:824 +0x2e0

goroutine 1 [chan receive]:
testing.(*T).Run(0xc4200a21e0, 0x53176a, 0x10, 0x538520, 0x465d01)
        /usr/lib/go/src/testing/testing.go:825 +0x301
testing.runTests.func1(0xc4200a2000)
        /usr/lib/go/src/testing/testing.go:1063 +0x64
testing.tRunner(0xc4200a2000, 0xc42004ddf8)
        /usr/lib/go/src/testing/testing.go:777 +0xd0
testing.runTests(0xc42000a080, 0x5da340, 0x7, 0x7, 0x40e959)
        /usr/lib/go/src/testing/testing.go:1061 +0x2c4
testing.(*M).Run(0xc42009e000, 0x0)
        /usr/lib/go/src/testing/testing.go:978 +0x171
main.main()
        _testmain.go:56 +0x151
FAIL    c2goasm/test    0.003s

asm source

test/cpp/MaddConstant.s

	.file	"MaddConstant.cpp"
	.intel_syntax noprefix
	.text
	.p2align 4,,15
	.globl	_Z12MaddConstantPfS_S_
	.type	_Z12MaddConstantPfS_S_, @function
_Z12MaddConstantPfS_S_:
	vmovaps	ymm0, YMMWORD PTR [rdi]
	vmovaps	ymm1, YMMWORD PTR _ZL1a[rip]
	vfmadd132ps	ymm0, ymm1, YMMWORD PTR [rsi]
	vmovups	XMMWORD PTR [rdx], xmm0
	vextractf128	XMMWORD PTR 16[rdx], ymm0, 0x1
	vzeroupper
	ret
	.size	_Z12MaddConstantPfS_S_, .-_Z12MaddConstantPfS_S_
	.section	.rodata
	.align 32
	.type	_ZL1a, @object
	.size	_ZL1a, 32
_ZL1a:
	.long	1065353216
	.long	1073741824
	.long	1077936128
	.long	1082130432
	.long	1084227584
	.long	1086324736
	.long	1088421888
	.long	1090519040
	.ident	"GCC: (GNU) 8.1.0"
	.section	.note.GNU-stack,"",@progbits

test/MaddConstant_amd64.s

//+build !noasm !appengine
// AUTO-GENERATED BY C2GOASM -- DO NOT EDIT

TEXT ·_MaddConstant(SB), $0-24

    MOVQ vec1+0(FP), DI
    MOVQ vec2+8(FP), SI
    MOVQ result+16(FP), DX

    LONG $0x0728fcc5             // vmovaps    ymm0, YMMWORD PTR [rdi]
    QUAD $0x000000000d28fcc5     // vmovaps    ymm1, YMMWORD PTR _ZL1a[rip]
    LONG $0x9875e2c4; BYTE $0x06 // vfmadd132ps    ymm0, ymm1, YMMWORD PTR [rsi]
    LONG $0x0211f8c5             // vmovups    XMMWORD PTR [rdx], xmm0
    LONG $0x197de3c4; WORD $0x1042; BYTE $0x01 // vextractf128    XMMWORD PTR 16[rdx], ymm0, 0x1
    VZEROUPPER
    RET

source by my fork

@fwessels
Copy link
Contributor

fwessels commented Jun 6, 2018

Can you try to compile with clang (as opposed to GCC)?

@zeromake
Copy link
Author

zeromake commented Jun 7, 2018

@fwessels

use clang

diff --git a/test/cpp/assemble.sh b/test/cpp/assemble.sh
index 4bf4096..48d39c0 100755
--- a/test/cpp/assemble.sh
+++ b/test/cpp/assemble.sh
@@ -1 +1 @@
-c++ -O3 -mavx -mfma -masm=intel -fno-asynchronous-unwind-tables -fno-exceptions -fno-rtti -S $1
+clang -O3 -mavx -mfma -masm=intel -fno-asynchronous-unwind-tables -fno-exceptions -fno-rtti -S $1

MaddConstant test passed but other Test does not pass

/test/cpp/MaddArgs10.s

	.text
	.intel_syntax noprefix
	.file	"MaddArgs10.cpp"
	.globl	_Z10MaddArgs10PfS_S_S_S_S_S_S_S_S_ # -- Begin function _Z10MaddArgs10PfS_S_S_S_S_S_S_S_S_
	.p2align	4, 0x90
	.type	_Z10MaddArgs10PfS_S_S_S_S_S_S_S_S_,@function
_Z10MaddArgs10PfS_S_S_S_S_S_S_S_S_:     # @_Z10MaddArgs10PfS_S_S_S_S_S_S_S_S_
# %bb.0:
	push	rbx
	mov	r10, qword ptr [rsp + 40]
	mov	r11, qword ptr [rsp + 32]
	mov	rax, qword ptr [rsp + 16]
	mov	rbx, qword ptr [rsp + 24]
	vmovaps	ymm0, ymmword ptr [rdi]
	vmovaps	ymm1, ymmword ptr [rsi]
	vmovaps	ymm2, ymmword ptr [rcx]
	vmovaps	ymm3, ymmword ptr [r9]
	vmovaps	ymm4, ymmword ptr [rbx]
	vfmadd213ps	ymm1, ymm0, ymmword ptr [rdx]
	vfmadd213ps	ymm1, ymm2, ymmword ptr [r8]
	vfmadd213ps	ymm1, ymm3, ymmword ptr [rax]
	vfmadd213ps	ymm1, ymm4, ymmword ptr [r11]
	vmovups	ymmword ptr [r10], ymm1
	pop	rbx
	vzeroupper
	ret
.Lfunc_end0:
	.size	_Z10MaddArgs10PfS_S_S_S_S_S_S_S_S_, .Lfunc_end0-_Z10MaddArgs10PfS_S_S_S_S_S_S_S_S_
                                        # -- End function

	.ident	"clang version 6.0.0 (tags/RELEASE_600/final)"
	.section	".note.GNU-stack","",@progbits

test/MaddArgs10_amd64.s

//+build !noasm !appengine
// AUTO-GENERATED BY C2GOASM -- DO NOT EDIT

TEXT ·_MaddArgs10(SB), $40-80

    MOVQ vec1+0(FP), DI
    MOVQ vec2+8(FP), SI
    MOVQ vec3+16(FP), DX
    MOVQ vec4+24(FP), CX
    MOVQ vec5+32(FP), R8
    MOVQ vec6+40(FP), R9
    MOVQ vec7+48(FP), R10
    MOVQ vec8+56(FP), R11
    MOVQ vec9+64(FP), R12
    MOVQ result+72(FP), R13
    ADDQ $8, SP
    MOVQ R13, 24(SP)
    MOVQ R12, 16(SP)
    MOVQ R11, 8(SP)
    MOVQ R10, 0(SP)

    LONG $0x24548b4c; BYTE $0x28 // mov    r10, qword [rsp + 40]
    LONG $0x245c8b4c; BYTE $0x20 // mov    r11, qword [rsp + 32]
    LONG $0x24448b48; BYTE $0x10 // mov    rax, qword [rsp + 16]
    LONG $0x245c8b48; BYTE $0x18 // mov    rbx, qword [rsp + 24]
    LONG $0x0728fcc5             // vmovaps    ymm0, yword [rdi]
    LONG $0x0e28fcc5             // vmovaps    ymm1, yword [rsi]
    LONG $0x1128fcc5             // vmovaps    ymm2, yword [rcx]
    LONG $0x287cc1c4; BYTE $0x19 // vmovaps    ymm3, yword [r9]
    LONG $0x2328fcc5             // vmovaps    ymm4, yword [rbx]
    LONG $0xa87de2c4; BYTE $0x0a // vfmadd213ps    ymm1, ymm0, yword [rdx]
    LONG $0xa86dc2c4; BYTE $0x08 // vfmadd213ps    ymm1, ymm2, yword [r8]
    LONG $0xa865e2c4; BYTE $0x08 // vfmadd213ps    ymm1, ymm3, yword [rax]
    LONG $0xa85dc2c4; BYTE $0x0b // vfmadd213ps    ymm1, ymm4, yword [r11]
    LONG $0x117cc1c4; BYTE $0x0a // vmovups    yword [r10], ymm1
    SUBQ $8, SP
    VZEROUPPER
    RET

test error

=== RUN   TestMaddArgs10
runtime: unexpected return pc for c2goasm/test._MaddArgs10 called from 0xc420039ce0
stack: frame={sp:0xc420052c30, fp:0xc420052c68} stack=[0xc420052000,0xc420053000)
000000c420052b30:  0000000000000000  0000000000000000
000000c420052b40:  0000000000000000  0000000000000000
000000c420052b50:  000000000042947c <runtime.gwrite+76>  0000000000533921
000000c420052b60:  0000000000000019  0000000000000019
000000c420052b70:  0000000000000000  0000000000000000
000000c420052b80:  000000c420052bd0  0000000000429cfd <runtime.printstring+125>
000000c420052b90:  0000000000533921  0000000000000019
000000c420052ba0:  0000000000000019  0000000000533921
000000c420052bb0:  0000000000000019  0000000000533921
000000c420052bc0:  0000000000000019  0000000000000019
000000c420052bd0:  000000c420052c20  000000000043bc30 <runtime.sigpanic+480>
000000c420052be0:  0000000000533921  0000000000000019
000000c420052bf0:  000000000000000f  000000c420039c20
000000c420052c00:  0000000000000000  000000c420001080
000000c420052c10:  00000000005adb60  000000000000000f
000000c420052c20:  000000c420052c50  00000000004e7b5f <c2goasm/test._MaddArgs10+127>
000000c420052c30: <000000c420039da0  000000c420039dc0
000000c420052c40:  000000c420039de0  000000c420039cb0
000000c420052c50:  000000c420039cd0  00000000004e5ea1 <c2goasm/test.MaddArgs10+193>
000000c420052c60: !000000c420039ce0 >000000c420039d00
000000c420052c70:  000000c420039d20  000000c420039d40
000000c420052c80:  000000c420039d60  000000c420039d80
000000c420052c90:  000000c420039da0  000000c420039dc0
000000c420052ca0:  000000c420039de0  000000c420039cb0
000000c420052cb0:  0000000000000000  0000000000000000
000000c420052cc0:  0000000000000000  0000000000000000
000000c420052cd0:  000000c420039f98  00000000004e6343 <c2goasm/test.TestMaddArgs10+627>
000000c420052ce0:  3f80000000000000  4040000040000000
000000c420052cf0:  40a0000040800000  40e0000040c00000
000000c420052d00:  4000000000000000  40c0000040800000
000000c420052d10:  4120000041000000  4160000041400000
000000c420052d20:  4000000000000000  40c0000040800000
000000c420052d30:  4120000041000000  4160000041400000
000000c420052d40:  4000000000000000  40c0000040800000
000000c420052d50:  4120000041000000  4160000041400000
000000c420052d60:  4000000000000000
fatal error: unknown caller pc

runtime stack:
runtime.throw(0x531d00, 0x11)
        /usr/lib/go/src/runtime/panic.go:616 +0x81
runtime.gentraceback(0xffffffffffffffff, 0xffffffffffffffff, 0x0, 0xc420001080, 0x0, 0x0, 0x7fffffff, 0x538710, 0x7ffe2fb8ccf8, 0x0, ...)
        /usr/lib/go/src/runtime/traceback.go:257 +0x1bdb
runtime.copystack(0xc420001080, 0x1000, 0x1)
        /usr/lib/go/src/runtime/stack.go:891 +0x270
runtime.newstack()
        /usr/lib/go/src/runtime/stack.go:1063 +0x30f
runtime.morestack()
        /usr/lib/go/src/runtime/asm_amd64.s:480 +0x89

goroutine 5 [copystack]:
runtime.recordForPanic(0x533921, 0x19, 0x19)
        /usr/lib/go/src/runtime/print.go:40 +0x115 fp=0xc420052b58 sp=0xc420052b50 pc=0x429335
runtime.gwrite(0x533921, 0x19, 0x19)
        /usr/lib/go/src/runtime/print.go:90 +0x4c fp=0xc420052b90 sp=0xc420052b58 pc=0x42947c
runtime.printstring(0x533921, 0x19)
        /usr/lib/go/src/runtime/print.go:237 +0x7d fp=0xc420052be0 sp=0xc420052b90 pc=0x429cfd
runtime.sigpanic()
        /usr/lib/go/src/runtime/signal_unix.go:394 +0x1e0 fp=0xc420052c30 sp=0xc420052be0 pc=0x43bc30
runtime: unexpected return pc for c2goasm/test._MaddArgs10 called from 0xc420039ce0
stack: frame={sp:0xc420052c30, fp:0xc420052c68} stack=[0xc420052000,0xc420053000)
000000c420052b30:  0000000000000000  0000000000000000
000000c420052b40:  0000000000000000  0000000000000000
000000c420052b50:  000000000042947c <runtime.gwrite+76>  0000000000533921
000000c420052b60:  0000000000000019  0000000000000019
000000c420052b70:  0000000000000000  0000000000000000
000000c420052b80:  000000c420052bd0  0000000000429cfd <runtime.printstring+125>
000000c420052b90:  0000000000533921  0000000000000019
000000c420052ba0:  0000000000000019  0000000000533921
000000c420052bb0:  0000000000000019  0000000000533921
000000c420052bc0:  0000000000000019  0000000000000019
000000c420052bd0:  000000c420052c20  000000000043bc30 <runtime.sigpanic+480>
000000c420052be0:  0000000000533921  0000000000000019
000000c420052bf0:  000000000000000f  000000c420039c20
000000c420052c00:  0000000000000000  000000c420001080
000000c420052c10:  00000000005adb60  000000000000000f
000000c420052c20:  000000c420052c50  00000000004e7b5f <c2goasm/test._MaddArgs10+127>
000000c420052c30: <000000c420039da0  000000c420039dc0
000000c420052c40:  000000c420039de0  000000c420039cb0
000000c420052c50:  000000c420039cd0  00000000004e5ea1 <c2goasm/test.MaddArgs10+193>
000000c420052c60: !000000c420039ce0 >000000c420039d00
000000c420052c70:  000000c420039d20  000000c420039d40
000000c420052c80:  000000c420039d60  000000c420039d80
000000c420052c90:  000000c420039da0  000000c420039dc0
000000c420052ca0:  000000c420039de0  000000c420039cb0
000000c420052cb0:  0000000000000000  0000000000000000
000000c420052cc0:  0000000000000000  0000000000000000
000000c420052cd0:  000000c420039f98  00000000004e6343 <c2goasm/test.TestMaddArgs10+627>
000000c420052ce0:  3f80000000000000  4040000040000000
000000c420052cf0:  40a0000040800000  40e0000040c00000
000000c420052d00:  4000000000000000  40c0000040800000
000000c420052d10:  4120000041000000  4160000041400000
000000c420052d20:  4000000000000000  40c0000040800000
000000c420052d30:  4120000041000000  4160000041400000
000000c420052d40:  4000000000000000  40c0000040800000
000000c420052d50:  4120000041000000  4160000041400000
000000c420052d60:  4000000000000000
c2goasm/test._MaddArgs10(0xc420039d00, 0xc420039d20, 0xc420039d40, 0xc420039d60, 0xc420039d80, 0xc420039da0, 0xc420039dc0, 0xc420039de0, 0xc420039cb0, 0x0)
        /home/zero/go-works/src/c2goasm/test/MaddArgs10_amd64.s:30 +0x7f fp=0xc420052c68 sp=0xc420052c30 pc=0x4e7b5f
created by testing.(*T).Run
        /usr/lib/go/src/testing/testing.go:824 +0x2e0

goroutine 1 [chan receive]:
testing.(*T).Run(0xc4200a20f0, 0x5311d9, 0xe, 0x538518, 0x465d36)
        /usr/lib/go/src/testing/testing.go:825 +0x301
testing.runTests.func1(0xc4200a2000)
        /usr/lib/go/src/testing/testing.go:1063 +0x64
testing.tRunner(0xc4200a2000, 0xc42004ddf8)
        /usr/lib/go/src/testing/testing.go:777 +0xd0
testing.runTests(0xc42000a080, 0x5da340, 0x7, 0x7, 0x40e959)
        /usr/lib/go/src/testing/testing.go:1061 +0x2c4
testing.(*M).Run(0xc42009e000, 0x0)
        /usr/lib/go/src/testing/testing.go:978 +0x171
main.main()
        _testmain.go:56 +0x151
FAIL    c2goasm/test    0.004s

@zeromake
Copy link
Author

@fwessels
So what about has?

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

No branches or pull requests

3 participants