Commit 593ea3b3 authored by David Crawshaw's avatar David Crawshaw

cmd/go, misc: rework cwd handling for iOS tests

Another change in behvaior (bug) in LLDB. Despite the fact that
LLDB can dump the symtab of our test binaries and show the function
addresses, it can no longer call the functions. This means the chdir
trick on signal is failing.

This CL uses a new trick. For iOS, the exec script passes the change
in directory as an argument, and it is processed early by the test
harness generated by cmd/go.

For the iOS builders.

Change-Id: I8f5d0f831fe18de99f097761f89c5184d5bf2afb
Reviewed-on: https://go-review.googlesource.com/35152Reviewed-by: default avatarElias Naur <elias.naur@gmail.com>
Run-TryBot: David Crawshaw <crawshaw@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
parent 0642b8a2
...@@ -204,6 +204,11 @@ func run(bin string, args []string) (err error) { ...@@ -204,6 +204,11 @@ func run(bin string, args []string) (err error) {
var opts options var opts options
opts, args = parseArgs(args) opts, args = parseArgs(args)
// Pass the suffix for the current working directory as the
// first argument to the test. For iOS, cmd/go generates
// special handling of this argument.
args = append([]string{"cwdSuffix=" + pkgpath}, args...)
// ios-deploy invokes lldb to give us a shell session with the app. // ios-deploy invokes lldb to give us a shell session with the app.
s, err := newSession(appdir, args, opts) s, err := newSession(appdir, args, opts)
if err != nil { if err != nil {
...@@ -241,15 +246,6 @@ func run(bin string, args []string) (err error) { ...@@ -241,15 +246,6 @@ func run(bin string, args []string) (err error) {
s.doCmd("run", "stop reason = signal SIGUSR2", 20*time.Second) s.doCmd("run", "stop reason = signal SIGUSR2", 20*time.Second)
// Move the current working directory into the faux gopath.
if pkgpath != "src" {
s.do(`breakpoint delete 1`)
s.do(`expr char* $mem = (char*)malloc(512)`)
s.do(`expr $mem = (char*)getwd($mem, 512)`)
s.do(`expr $mem = (char*)strcat($mem, "/` + pkgpath + `")`)
s.do(`call (void)chdir($mem)`)
}
startTestsLen := s.out.Len() startTestsLen := s.out.Len()
fmt.Fprintln(s.in, `process continue`) fmt.Fprintln(s.in, `process continue`)
......
...@@ -1532,12 +1532,28 @@ func coverRegisterFile(fileName string, counter []uint32, pos []uint32, numStmts ...@@ -1532,12 +1532,28 @@ func coverRegisterFile(fileName string, counter []uint32, pos []uint32, numStmts
func main() { func main() {
{{if .IsIOS}} {{if .IsIOS}}
// Send a SIGUSR2, which will be intercepted by LLDB to // Send a SIGUSR2, which will be intercepted by LLDB to
// tell the test harness that installation was successful, // tell the test harness that installation was successful.
// and to give the exec script a chance set the current // See misc/ios/go_darwin_arm_exec.go.
// working directory. See misc/ios/go_darwin_arm_exec.go.
signal.Notify(make(chan os.Signal), syscall.SIGUSR2) signal.Notify(make(chan os.Signal), syscall.SIGUSR2)
syscall.Kill(0, syscall.SIGUSR2) syscall.Kill(0, syscall.SIGUSR2)
signal.Reset(syscall.SIGUSR2) signal.Reset(syscall.SIGUSR2)
// The first argument supplied to an iOS test is an offset
// suffix for the current working directory.
// Process it here, and remove it from os.Args.
const hdr = "cwdSuffix="
if len(os.Args) < 2 || len(os.Args[1]) <= len(hdr) || os.Args[1][:len(hdr)] != hdr {
panic("iOS test not passed a working directory suffix")
}
suffix := os.Args[1][len(hdr):]
dir, err := os.Getwd()
if err != nil {
panic(err)
}
if err := os.Chdir(dir + "/" + suffix); err != nil {
panic(err)
}
os.Args = append([]string{os.Args[0]}, os.Args[2:]...)
{{end}} {{end}}
{{if .CoverEnabled}} {{if .CoverEnabled}}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment