{"action":"created","issue":{"url":"https://api.github.com/repos/golang/go/issues/12055","labels_url":"https://api.github.com/repos/golang/go/issues/12055/labels{/name}","comments_url":"https://api.github.com/repos/golang/go/issues/12055/comments","events_url":"https://api.github.com/repos/golang/go/issues/12055/events","html_url":"https://github.com/golang/go/issues/12055","id":99488982,"number":12055,"title":"runtime: link-time nosplit stack overflow compiled with -N","user":{"login":"rhysh","id":230685,"avatar_url":"https://avatars.githubusercontent.com/u/230685?v=3","gravatar_id":"","url":"https://api.github.com/users/rhysh","html_url":"https://github.com/rhysh","followers_url":"https://api.github.com/users/rhysh/followers","following_url":"https://api.github.com/users/rhysh/following{/other_user}","gists_url":"https://api.github.com/users/rhysh/gists{/gist_id}","starred_url":"https://api.github.com/users/rhysh/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rhysh/subscriptions","organizations_url":"https://api.github.com/users/rhysh/orgs","repos_url":"https://api.github.com/users/rhysh/repos","events_url":"https://api.github.com/users/rhysh/events{/privacy}","received_events_url":"https://api.github.com/users/rhysh/received_events","type":"User","site_admin":false},"labels":[],"state":"closed","locked":false,"assignee":null,"milestone":{"url":"https://api.github.com/repos/golang/go/milestones/2","html_url":"https://github.com/golang/go/milestones/Go1.5Maybe","labels_url":"https://api.github.com/repos/golang/go/milestones/2/labels","id":905114,"number":2,"title":"Go1.5Maybe","description":"Things that might make Go 1.5, but aren't critical.\r\n","creator":{"login":"bradfitz","id":2621,"avatar_url":"https://avatars.githubusercontent.com/u/2621?v=3","gravatar_id":"","url":"https://api.github.com/users/bradfitz","html_url":"https://github.com/bradfitz","followers_url":"https://api.github.com/users/bradfitz/followers","following_url":"https://api.github.com/users/bradfitz/following{/other_user}","gists_url":"https://api.github.com/users/bradfitz/gists{/gist_id}","starred_url":"https://api.github.com/users/bradfitz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bradfitz/subscriptions","organizations_url":"https://api.github.com/users/bradfitz/orgs","repos_url":"https://api.github.com/users/bradfitz/repos","events_url":"https://api.github.com/users/bradfitz/events{/privacy}","received_events_url":"https://api.github.com/users/bradfitz/received_events","type":"User","site_admin":false},"open_issues":8,"closed_issues":42,"state":"open","created_at":"2014-12-16T02:39:13Z","updated_at":"2015-08-06T23:59:51Z","due_on":"2015-07-31T04:00:00Z","closed_at":null},"comments":2,"created_at":"2015-08-06T17:41:49Z","updated_at":"2015-08-06T23:59:51Z","closed_at":"2015-08-06T23:59:51Z","body":"With tip on darwin/amd64, building without optimizations (`-gcflags '-N -l'`) fails with \"nosplit stack overflow\". Building with the race detector and without optimizations results in more and larger overflows.\r\n\r\nSimilar to #9721. /cc @rsc \r\n\r\n```\r\n$ go version\r\ngo version devel +fced03a Thu Aug 6 02:59:16 2015 +0000 darwin/amd64\r\n```\r\n\r\n```\r\n$ go test -gcflags '-N -l' runtime\r\n# testmain\r\nruntime.cgocallbackg: nosplit stack overflow\r\n\t504\tassumed on entry to runtime.cgocallbackg (nosplit)\r\n\t416\tafter runtime.cgocallbackg (nosplit) uses 88\r\n\t408\ton entry to runtime.exitsyscall (nosplit)\r\n\t288\tafter runtime.exitsyscall (nosplit) uses 120\r\n\t280\ton entry to runtime.exitsyscallfast (nosplit)\r\n\t120\tafter runtime.exitsyscallfast (nosplit) uses 160\r\n\t112\ton entry to runtime.writebarrierptr (nosplit)\r\n\t64\tafter runtime.writebarrierptr (nosplit) uses 48\r\n\t56\ton entry to runtime.writebarrierptr_nostore1 (nosplit)\r\n\t0\tafter runtime.writebarrierptr_nostore1 (nosplit) uses 56\r\n\t-8\ton entry to runtime.acquirem (nosplit)\r\nreflect.typelinks: nosplit stack overflow\r\n\t504\tassumed on entry to reflect.typelinks (nosplit)\r\n\t352\tafter reflect.typelinks (nosplit) uses 152\r\n\t344\ton entry to runtime.typedmemmove (nosplit)\r\n\t320\tafter runtime.typedmemmove (nosplit) uses 24\r\n\t312\ton entry to runtime.heapBitsBulkBarrier (nosplit)\r\n\t192\tafter runtime.heapBitsBulkBarrier (nosplit) uses 120\r\n\t184\ton entry to runtime.throw (nosplit)\r\n\t160\tafter runtime.throw (nosplit) uses 24\r\n\t152\ton entry to runtime.dopanic (nosplit)\r\n\t72\tafter runtime.dopanic (nosplit) uses 80\r\n\t64\ton entry to runtime.getcallerpc (nosplit)\r\n\t56\tafter runtime.getcallerpc (nosplit) uses 8\r\n\t48\ton entry to runtime.nextBarrierPC (nosplit)\r\n\t8\tafter runtime.nextBarrierPC (nosplit) uses 40\r\n\t0\ton entry to runtime.panicindex\r\n\t-8\ton entry to runtime.morestack (nosplit)\r\nruntime.cgocallback_gofunc: nosplit stack overflow\r\n\t504\tassumed on entry to runtime.cgocallback_gofunc (nosplit)\r\n\t496\tafter runtime.cgocallback_gofunc (nosplit) uses 8\r\n\t488\ton entry to runtime.cgocallbackg (nosplit)\r\n\t400\tafter runtime.cgocallbackg (nosplit) uses 88\r\n\t392\ton entry to runtime.exitsyscall (nosplit)\r\n\t272\tafter runtime.exitsyscall (nosplit) uses 120\r\n\t264\ton entry to runtime.exitsyscallfast (nosplit)\r\n\t104\tafter runtime.exitsyscallfast (nosplit) uses 160\r\n\t96\ton entry to runtime.writebarrierptr (nosplit)\r\n\t48\tafter runtime.writebarrierptr (nosplit) uses 48\r\n\t40\ton entry to runtime.writebarrierptr_nostore1 (nosplit)\r\n\t-16\tafter runtime.writebarrierptr_nostore1 (nosplit) uses 56\r\nFAIL\truntime [build failed]\r\n```\r\n\r\n```\r\n$ go test -race -gcflags '-N -l' runtime\r\n# testmain\r\nruntime.cgocall: nosplit stack overflow\r\n\t504\tassumed on entry to runtime.cgocall (nosplit)\r\n\t448\tafter runtime.cgocall (nosplit) uses 56\r\n\t440\ton entry to runtime.entersyscall (nosplit)\r\n\t408\tafter runtime.entersyscall (nosplit) uses 32\r\n\t400\ton entry to runtime.reentersyscall (nosplit)\r\n\t288\tafter runtime.reentersyscall (nosplit) uses 112\r\n\t280\ton entry to runtime.casgstatus (nosplit)\r\n\t200\tafter runtime.casgstatus (nosplit) uses 80\r\n\t192\ton entry to runtime.throw (nosplit)\r\n\t168\tafter runtime.throw (nosplit) uses 24\r\n\t160\ton entry to runtime.dopanic (nosplit)\r\n\t64\tafter runtime.dopanic (nosplit) uses 96\r\n\t56\ton entry to runtime.getcallerpc (nosplit)\r\n\t48\tafter runtime.getcallerpc (nosplit) uses 8\r\n\t40\ton entry to runtime.nextBarrierPC (nosplit)\r\n\t0\tafter runtime.nextBarrierPC (nosplit) uses 40\r\n\t-8\ton entry to runtime.panicindex\r\nruntime.cgocallbackg: nosplit stack overflow\r\n\t504\tassumed on entry to runtime.cgocallbackg (nosplit)\r\n\t416\tafter runtime.cgocallbackg (nosplit) uses 88\r\n\t408\ton entry to runtime.exitsyscall (nosplit)\r\n\t264\tafter runtime.exitsyscall (nosplit) uses 144\r\n\t256\ton entry to runtime.exitsyscallfast (nosplit)\r\n\t88\tafter runtime.exitsyscallfast (nosplit) uses 168\r\n\t80\ton entry to runtime.writebarrierptr (nosplit)\r\n\t32\tafter runtime.writebarrierptr (nosplit) uses 48\r\n\t24\ton entry to runtime.writebarrierptr_nostore1 (nosplit)\r\n\t-40\tafter runtime.writebarrierptr_nostore1 (nosplit) uses 64\r\nruntime.acquireSudog: nosplit stack overflow\r\n\t504\tassumed on entry to runtime.acquireSudog (nosplit)\r\n\t200\tafter runtime.acquireSudog (nosplit) uses 304\r\n\t192\ton entry to runtime.throw (nosplit)\r\n\t168\tafter runtime.throw (nosplit) uses 24\r\n\t160\ton entry to runtime.dopanic (nosplit)\r\n\t64\tafter runtime.dopanic (nosplit) uses 96\r\n\t56\ton entry to runtime.getcallerpc (nosplit)\r\n\t48\tafter runtime.getcallerpc (nosplit) uses 8\r\n\t40\ton entry to runtime.nextBarrierPC (nosplit)\r\n\t0\tafter runtime.nextBarrierPC (nosplit) uses 40\r\n\t-8\ton entry to runtime.panicindex\r\nruntime.entersyscallblock: nosplit stack overflow\r\n\t504\tassumed on entry to runtime.entersyscallblock (nosplit)\r\n\t280\tafter runtime.entersyscallblock (nosplit) uses 224\r\n\t272\ton entry to runtime.casgstatus (nosplit)\r\n\t192\tafter runtime.casgstatus (nosplit) uses 80\r\n\t184\ton entry to runtime.throw (nosplit)\r\n\t160\tafter runtime.throw (nosplit) uses 24\r\n\t152\ton entry to runtime.dopanic (nosplit)\r\n\t56\tafter runtime.dopanic (nosplit) uses 96\r\n\t48\ton entry to runtime.getcallerpc (nosplit)\r\n\t40\tafter runtime.getcallerpc (nosplit) uses 8\r\n\t32\ton entry to runtime.nextBarrierPC (nosplit)\r\n\t-8\tafter runtime.nextBarrierPC (nosplit) uses 40\r\nreflect.typelinks: nosplit stack overflow\r\n\t504\tassumed on entry to reflect.typelinks (nosplit)\r\n\t344\tafter reflect.typelinks (nosplit) uses 160\r\n\t336\ton entry to runtime.typedmemmove (nosplit)\r\n\t312\tafter runtime.typedmemmove (nosplit) uses 24\r\n\t304\ton entry to runtime.heapBitsBulkBarrier (nosplit)\r\n\t152\tafter runtime.heapBitsBulkBarrier (nosplit) uses 152\r\n\t144\ton entry to runtime.throw (nosplit)\r\n\t120\tafter runtime.throw (nosplit) uses 24\r\n\t112\ton entry to runtime.dopanic (nosplit)\r\n\t16\tafter runtime.dopanic (nosplit) uses 96\r\n\t8\ton entry to runtime.getcallerpc (nosplit)\r\n\t0\tafter runtime.getcallerpc (nosplit) uses 8\r\n\t-8\ton entry to runtime.nextBarrierPC (nosplit)\r\nruntime.cgocallback_gofunc: nosplit stack overflow\r\n\t504\tassumed on entry to runtime.cgocallback_gofunc (nosplit)\r\n\t496\tafter runtime.cgocallback_gofunc (nosplit) uses 8\r\n\t488\ton entry to runtime.cgocallbackg (nosplit)\r\n\t400\tafter runtime.cgocallbackg (nosplit) uses 88\r\n\t392\ton entry to runtime.exitsyscall (nosplit)\r\n\t248\tafter runtime.exitsyscall (nosplit) uses 144\r\n\t240\ton entry to runtime.exitsyscallfast (nosplit)\r\n\t72\tafter runtime.exitsyscallfast (nosplit) uses 168\r\n\t64\ton entry to runtime.writebarrierptr (nosplit)\r\n\t16\tafter runtime.writebarrierptr (nosplit) uses 48\r\n\t8\ton entry to runtime.writebarrierptr_nostore1 (nosplit)\r\n\t-56\tafter runtime.writebarrierptr_nostore1 (nosplit) uses 64\r\nFAIL\truntime [build failed]\r\n```\r\n\r\n\r\n"},"comment":{"url":"https://api.github.com/repos/golang/go/issues/comments/128542282","html_url":"https://github.com/golang/go/issues/12055#issuecomment-128542282","issue_url":"https://api.github.com/repos/golang/go/issues/12055","id":128542282,"user":{"login":"rhysh","id":230685,"avatar_url":"https://avatars.githubusercontent.com/u/230685?v=3","gravatar_id":"","url":"https://api.github.com/users/rhysh","html_url":"https://github.com/rhysh","followers_url":"https://api.github.com/users/rhysh/followers","following_url":"https://api.github.com/users/rhysh/following{/other_user}","gists_url":"https://api.github.com/users/rhysh/gists{/gist_id}","starred_url":"https://api.github.com/users/rhysh/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rhysh/subscriptions","organizations_url":"https://api.github.com/users/rhysh/orgs","repos_url":"https://api.github.com/users/rhysh/repos","events_url":"https://api.github.com/users/rhysh/events{/privacy}","received_events_url":"https://api.github.com/users/rhysh/received_events","type":"User","site_admin":false},"created_at":"2015-08-06T23:59:51Z","updated_at":"2015-08-06T23:59:51Z","body":"That works well enough for my needs. Thank you."}}