{"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/50","html_url":"https://github.com/golang/go/milestone/50","labels_url":"https://api.github.com/repos/golang/go/milestones/50/labels","id":2073599,"number":50,"title":"Go1.9Maybe","description":"","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":60,"closed_issues":7,"state":"open","created_at":"2016-10-17T07:59:14Z","updated_at":"2017-01-10T21:21:25Z","due_on":"2017-08-01T07:00:00Z","closed_at":null},"comments":54,"created_at":"2016-09-13T00:22:26Z","updated_at":"2017-01-10T22:30:49Z","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/271719065","html_url":"https://github.com/golang/go/issues/17082#issuecomment-271719065","issue_url":"https://api.github.com/repos/golang/go/issues/17082","id":271719065,"user":{"login":"julioSab","id":5842795,"avatar_url":"https://avatars.githubusercontent.com/u/5842795?v=3","gravatar_id":"","url":"https://api.github.com/users/julioSab","html_url":"https://github.com/julioSab","followers_url":"https://api.github.com/users/julioSab/followers","following_url":"https://api.github.com/users/julioSab/following{/other_user}","gists_url":"https://api.github.com/users/julioSab/gists{/gist_id}","starred_url":"https://api.github.com/users/julioSab/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/julioSab/subscriptions","organizations_url":"https://api.github.com/users/julioSab/orgs","repos_url":"https://api.github.com/users/julioSab/repos","events_url":"https://api.github.com/users/julioSab/events{/privacy}","received_events_url":"https://api.github.com/users/julioSab/received_events","type":"User","site_admin":false},"created_at":"2017-01-10T22:30:49Z","updated_at":"2017-01-10T22:30:49Z","body":"In the same boat. We deployed hundreds of IoT gateways accross Africa with ARM5 and at least 3 years support. \r\nHardware in IOT can't be upgraded easily, software yes.\r\nAny serious IOT provider will think two times before puting trust in golang if this kind of decision appends.\r\nPlease reconsider this option."}}
{"actor":{"display_login":"julioSab"}}