Title: Decoding instructions should handle ENTER_EXECUTOR · Issue #107265 · python/cpython · GitHub
Open Graph Title: Decoding instructions should handle ENTER_EXECUTOR · Issue #107265 · python/cpython
X Title: Decoding instructions should handle ENTER_EXECUTOR · Issue #107265 · python/cpython
Description: There's a variety of places where we walk over an array of instructions, using some variant of for (int i = 0; i < num_instructions;) { int opcode = instructions[i].op.code; //
Open Graph Description: There's a variety of places where we walk over an array of instructions, using some variant of for (int i = 0; i < num_instructions;) { int opcode = instructions[i].op.code; // X Description: There's a variety of places where we walk over an array of instructions, using some variant of for (int i = 0; i < num_instructions;) { int opcode = instructions[i].op.code; // <decode EX...
Opengraph URL: https://github.com/python/cpython/issues/107265
X: @github
Domain: github.com
Links:
Viewport: width=device-width
Hey, it has json ld scripts:
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Decoding instructions should handle ENTER_EXECUTOR","articleBody":"There's a variety of places where we walk over an array of instructions, using some variant of\r\n```c\r\nfor (int i = 0; i \u003c num_instructions;) {\r\n int opcode = instructions[i].op.code;\r\n // \u003cdecode EXTENDED_ARG\u003e\r\n opcode = _PyOpcode_Deopt[opcode]; // or _Py_GetBaseOpcode(code, i)\r\n // \u003chandle opcode\u003e\r\n i += 1 + _PyOpcode_Caches[opcode]; // or _PyInstruction_GetLength(code, i)\r\n}\r\n```\r\nAll these make the mistake that if `opcode` is `ENTER_EXECUTOR`, it may obscure an underlying `JUMP_BACKWARD` instruction, which has a cache entry.\r\n\r\nI fixed this in gh-107256 for `_PyInstruction_GetLength()` and it was first reported in gh-107082, but there are a number of other occurrences. Basically every time we consult `_PyOpcode_Caches` we should ensure that the index is not `ENTER_EXECUTOR`.\r\n\r\nCC: @markshannon \r\n\r\n---\r\n\r\nPlaces where I found this:\r\n\r\n- [x] _PyInstruction_GetLength\r\n- [x] code_richcompare\r\n- [x] code_hash\r\n- [x] ~_Py_GetBaseOpcode~ **[should not be \"fixed\", it would break callers that need the oparg]**\r\n- [ ] mark_stacks\r\n- [ ] _PyFrame_OpAlreadyRan\r\n- [x] de_instrument?\r\n- [x] initialize_tools?\r\n- [x] remove_tools?\r\n- [x] _PyCode_Quicken?\r\n\r\nThere are possibly others.\r\n\r\n\u003c!-- gh-linked-prs --\u003e\r\n### Linked PRs\r\n* gh-108165\r\n* gh-108188\r\n* gh-108366\r\n* gh-108460\r\n* gh-108482\r\n* gh-108485\r\n* gh-108539\r\n* gh-109420\n* gh-111645\n\u003c!-- /gh-linked-prs --\u003e\r\n","author":{"url":"https://github.com/gvanrossum","@type":"Person","name":"gvanrossum"},"datePublished":"2023-07-25T19:51:22.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":16},"url":"https://github.com/107265/cpython/issues/107265"}
route-pattern /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) route-controller voltron_issues_fragments route-action issue_layout fetch-nonce v2:10a8a9d0-00d5-3768-d9a0-432428aa4c0f current-catalog-service-hash 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 request-id B434:189C33:23D64FF:2ED1998:696B5431 html-safe-nonce 2d2df8f6d446f06ed505fefb8e35dfc9881bf8efa72eef4791520c73f145c83f visitor-payload eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJCNDM0OjE4OUMzMzoyM0Q2NEZGOjJFRDE5OTg6Njk2QjU0MzEiLCJ2aXNpdG9yX2lkIjoiMTc3OTkzMjY0NTA2ODMzMDAzNCIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 visitor-hmac 2ee59dddd674f1b64022bf3713cb53c1b4223a6da687f3cd96f69fd20456cb55 hovercard-subject-tag issue:1821030435 github-keyboard-shortcuts repository,issues,copilot google-site-verification Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I octolytics-url https://collector.github.com/github/collect analytics-location / fb:app_id 1401488693436528 apple-itunes-app app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/python/cpython/107265/issue_layout twitter:image https://opengraph.githubassets.com/0aff83de3d85c923f3e96f0088f1386fb23d5461f36d1fb13314c86eb8b8c0e3/python/cpython/issues/107265 twitter:card summary_large_image og:image https://opengraph.githubassets.com/0aff83de3d85c923f3e96f0088f1386fb23d5461f36d1fb13314c86eb8b8c0e3/python/cpython/issues/107265 og:image:alt There's a variety of places where we walk over an array of instructions, using some variant of for (int i = 0; i < num_instructions;) { int opcode = instructions[i].op.code; // og:image:width 1200 og:image:height 600 og:site_name GitHub og:type object og:author:username gvanrossum hostname github.com expected-hostname github.com None 5f99f7c1d70f01da5b93e5ca90303359738944d8ab470e396496262c66e60b8d turbo-cache-control no-preview go-import github.com/python/cpython git https://github.com/python/cpython.git octolytics-dimension-user_id 1525981 octolytics-dimension-user_login python octolytics-dimension-repository_id 81598961 octolytics-dimension-repository_nwo python/cpython octolytics-dimension-repository_public true octolytics-dimension-repository_is_fork false octolytics-dimension-repository_network_root_id 81598961 octolytics-dimension-repository_network_root_nwo python/cpython turbo-body-classes logged-out env-production page-responsive disable-turbo false browser-stats-url https://api.github.com/_private/browser/stats browser-errors-url https://api.github.com/_private/browser/errors release 82560a55c6b2054555076f46e683151ee28a19bc ui-target full theme-color #1e2327 color-scheme light dark
URLs of crawlers that visited me.