The problem with doing that is that it doesn't actually change the
behaviour. We use pthread_create to create the new thread, which glibc
does with a clone with CLONE_SYSVSEM set. We can't tell the difference
between "guest program needs the new threads to not share SysV semaphore
behaviour" and "guest program doesn't care but didn't provide the flag"
so we err on the side of caution and refuse to create a thread that
doesn't behave the way the guest asked us for it to behave.

-- 
You received this bug notification because you are a member of qemu-
devel-ml, which is subscribed to QEMU.
https://bugs.launchpad.net/bugs/1696353

Title:
  golang binaries fail to start under linux-user

Status in QEMU:
  New

Bug description:
  With current master golang binaries fail when run under linux-user,
  for example:

  [will@localhost qemu]$ ./arm-linux-user/qemu-arm glide 
  runtime: failed to create new OS thread (have 2 already; errno=22)
  fatal error: newosproc

  runtime stack:
  runtime.throw(0x45f879, 0x9)
        /usr/lib/golang/src/runtime/panic.go:566 +0x78
  runtime.newosproc(0x1092c000, 0x1093bfe0)
        /usr/lib/golang/src/runtime/os_linux.go:160 +0x1b0
  runtime.newm(0x4ae1e8, 0x0)
        /usr/lib/golang/src/runtime/proc.go:1572 +0x12c
  runtime.main.func1()
        /usr/lib/golang/src/runtime/proc.go:126 +0x24
  runtime.systemstack(0x5ef900)
        /usr/lib/golang/src/runtime/asm_arm.s:247 +0x80
  runtime.mstart()
        /usr/lib/golang/src/runtime/proc.go:1079

  goroutine 1 [running]:
  runtime.systemstack_switch()
        /usr/lib/golang/src/runtime/asm_arm.s:192 +0x4 fp=0x109287ac 
sp=0x109287a8
  runtime.main()
        /usr/lib/golang/src/runtime/proc.go:127 +0x5c fp=0x109287d4 
sp=0x109287ac
  runtime.goexit()
        /usr/lib/golang/src/runtime/asm_arm.s:998 +0x4 fp=0x109287d4 
sp=0x109287d4

  The reason for this is that the golang runtime does not pass the
  CLONE_SYSVMEM flag to clone so the clone flags checks fail:

  https://github.com/golang/go/blob/master/src/runtime/os_linux.go#L155

  The attached patch allows golang binaries to start under linux-user.

To manage notifications about this bug go to:
https://bugs.launchpad.net/qemu/+bug/1696353/+subscriptions

Reply via email to