{"action":"created","issue":{"url":"https://api.github.com/repos/golang/go/issues/17082","repository_url":"https://api.github.com/repos/golang/go","labels_url":"https://api.github.com/repos/golang/go/issues/17082/labels{/name}","comments_url":"https://api.github.com/repos/golang/go/issues/17082/comments","events_url":"https://api.github.com/repos/golang/go/issues/17082/events","html_url":"https://github.com/golang/go/issues/17082","id":176517893,"number":17082,"title":"runtime: drop support for linux/armv5E and linux/armv6","user":{"login":"minux","id":135652,"avatar_url":"https://avatars.githubusercontent.com/u/135652?v=3","gravatar_id":"","url":"https://api.github.com/users/minux","html_url":"https://github.com/minux","followers_url":"https://api.github.com/users/minux/followers","following_url":"https://api.github.com/users/minux/following{/other_user}","gists_url":"https://api.github.com/users/minux/gists{/gist_id}","starred_url":"https://api.github.com/users/minux/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/minux/subscriptions","organizations_url":"https://api.github.com/users/minux/orgs","repos_url":"https://api.github.com/users/minux/repos","events_url":"https://api.github.com/users/minux/events{/privacy}","received_events_url":"https://api.github.com/users/minux/received_events","type":"User","site_admin":false},"labels":[{"id":236419512,"url":"https://api.github.com/repos/golang/go/labels/Proposal","name":"Proposal","color":"ededed","default":false},{"id":246350233,"url":"https://api.github.com/repos/golang/go/labels/Proposal-Accepted","name":"Proposal-Accepted","color":"009800","default":false}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":{"url":"https://api.github.com/repos/golang/go/milestones/49","html_url":"https://github.com/golang/go/milestone/49","labels_url":"https://api.github.com/repos/golang/go/milestones/49/labels","id":2053058,"number":49,"title":"Go1.9","description":"","creator":{"login":"rsc","id":104030,"avatar_url":"https://avatars.githubusercontent.com/u/104030?v=3","gravatar_id":"","url":"https://api.github.com/users/rsc","html_url":"https://github.com/rsc","followers_url":"https://api.github.com/users/rsc/followers","following_url":"https://api.github.com/users/rsc/following{/other_user}","gists_url":"https://api.github.com/users/rsc/gists{/gist_id}","starred_url":"https://api.github.com/users/rsc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rsc/subscriptions","organizations_url":"https://api.github.com/users/rsc/orgs","repos_url":"https://api.github.com/users/rsc/repos","events_url":"https://api.github.com/users/rsc/events{/privacy}","received_events_url":"https://api.github.com/users/rsc/received_events","type":"User","site_admin":false},"open_issues":352,"closed_issues":31,"state":"open","created_at":"2016-10-06T18:17:55Z","updated_at":"2016-12-16T01:35:12Z","due_on":"2017-07-31T00:00:00Z","closed_at":null},"comments":37,"created_at":"2016-09-13T00:22:26Z","updated_at":"2016-12-16T01:45:39Z","closed_at":null,"body":"Since the introduction of Linux/ARM support, the minimum required\r\nhardware to run Go with Linux was ARMv5E, e.g.ARM926.\r\n\r\nAt that time, this choice makes sense because ARM9 systems are\r\nstill around, and we even had an ARMv5E builder for some time.\r\n\r\nHowever, ARMv5E lacks some important atomic instruction support.\r\nLDREX/STREX is introduced in ARMv6 (ARM11), and\r\nLDREXB/STREXB, LDREXH/STREXH, LDREXD/STREXD are introduced\r\nin ARMv6K. Without these instructions, we resort to emulating the\r\nrequired 64-bit atomic operation using 57 spinlocks selected by address\r\n(which uses mod and is a slow operation on ARM) [see https://tip.golang.org/src/runtime/internal/atomic/atomic_arm.go]\r\n\r\nI don't know how many projects out there that still uses ARMv5E and\r\nGo, but I don't expect many. I propose to increase the minimum\r\narchitectural requirement to ARMv6 (and possibly ARMv6K), so that\r\nat least we can use LDREX/STREX, which should help a lot with the\r\nnew atomic-heavy runtime.\r\n\r\nTo summarize the benefits,\r\n1. if we raise requirement to ARMv6, then we can intrinsicify 32-bit atomics.\r\n2. if we raise requirement to ARMv6K, then in addition to 1, we no long can\r\nremove the emulated 64-bit atomics from runtime by using the native\r\nLDREXD/STREXD instructions, but also intrinsicify them in the compiler\r\nlike other ports. We can also use YIELD instruction to address #16663.\r\n\r\nIf you still use Go on ARMv5E systems, please help by listing the processor\r\nmodel used. Thanks.\r\n\r\nPS: other supported OSes do require ARMv6K as only Linux provides\r\nrequired 64-bit cas kernel helper for sync/atomic. Another way to go\r\nis to modify the runtime/internal/atomic package to:\r\n1. use LDREXD/STREXD on non-linux,\r\n2. use kernel cas64 on linux.\r\nBut this solution will complicate maintaining the code and as we don't\r\nhave a real ARMv5E builder, I think the support is certainly going to\r\nbitrot.\r\n\r\nPS2: The core used by Raspberry Pi 1, ARM1176JZF-S, is ARMv6K,\r\nso this proposal won't affect Raspberry Pi 1, the most popular ARMv6\r\nsystems.\r\n"},"comment":{"url":"https://api.github.com/repos/golang/go/issues/comments/267496291","html_url":"https://github.com/golang/go/issues/17082#issuecomment-267496291","issue_url":"https://api.github.com/repos/golang/go/issues/17082","id":267496291,"user":{"login":"minux","id":135652,"avatar_url":"https://avatars.githubusercontent.com/u/135652?v=3","gravatar_id":"","url":"https://api.github.com/users/minux","html_url":"https://github.com/minux","followers_url":"https://api.github.com/users/minux/followers","following_url":"https://api.github.com/users/minux/following{/other_user}","gists_url":"https://api.github.com/users/minux/gists{/gist_id}","starred_url":"https://api.github.com/users/minux/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/minux/subscriptions","organizations_url":"https://api.github.com/users/minux/orgs","repos_url":"https://api.github.com/users/minux/repos","events_url":"https://api.github.com/users/minux/events{/privacy}","received_events_url":"https://api.github.com/users/minux/received_events","type":"User","site_admin":false},"created_at":"2016-12-16T01:45:39Z","updated_at":"2016-12-16T01:45:39Z","body":"We've got two requests for continuing ARMv5 support so far.\n\nhttps://groups.google.com/forum/#!topic/golang-dev/CO15hgslZ0o\nhttps://groups.google.com/d/msg/golang-dev/lWL6L9-DejU/4ybgle4bCgAJ\n\n\nThere will always be ARMv5 hardware in service, like there are still\nWindows 2000 in service. Yet we've dropped support for the latter.\nwe need to set a clear criteria for retaining ARMv5 support. My\nproposal is that we need to have a real linux/armv5e builder to retain\nthe support. With a little swap and a lowered GOGC, even 256MB\nRAM could complete all.bash (using tip to bootstrap), so the builder\nrequirement is not that hard to meet for an ARMv5 machine anymore.\n"}}
{"actor":{"display_login":"minux"}}