1 // Copyright 2017 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
5 package sanitizers_test
14 func TestShared(t
*testing
.T
) {
18 GOOS
, err
:= goEnv("GOOS")
32 src
: "msan_shared.go",
36 src
: "tsan_shared.go",
41 for _
, tc
:= range cases
{
43 name
:= strings
.TrimSuffix(tc
.src
, ".go")
44 t
.Run(name
, func(t
*testing
.T
) {
46 config
:= configure(tc
.sanitizer
)
47 config
.skipIfCSanitizerBroken(t
)
50 defer dir
.RemoveAll(t
)
52 lib
:= dir
.Join(fmt
.Sprintf("lib%s.%s", name
, libExt
))
53 mustRun(t
, config
.goCmd("build", "-buildmode=c-shared", "-o", lib
, srcPath(tc
.src
)))
55 cSrc
:= dir
.Join("main.c")
56 if err
:= ioutil
.WriteFile(cSrc
, cMain
, 0600); err
!= nil {
57 t
.Fatalf("failed to write C source file: %v", err
)
60 dstBin
:= dir
.Join(name
)
61 cmd
, err
:= cc(config
.cFlags
...)
65 cmd
.Args
= append(cmd
.Args
, config
.ldFlags
...)
66 cmd
.Args
= append(cmd
.Args
, "-o", dstBin
, cSrc
, lib
)
69 cmd
= hangProneCmd(dstBin
)
70 replaceEnv(cmd
, "LD_LIBRARY_PATH", ".")