{"action":"created","comment":{"url":"https://api.github.com/repos/dotnet/coreclr/pulls/comments/73481302","id":73481302,"diff_hunk":"@@ -304,7 +232,7 @@ NESTED_ENTRY OnHijackInteriorPointerTripThread, _TEXT, NoHandler\n \n     END_PROLOGUE\n \n-    call                C_FUNC(OnHijackInteriorPointerWorker)\n+    call                C_FUNC(OnHijackWorker)\n \n     free_stack          0x8\n     pop_register        rax","path":"src/vm/amd64/unixasmhelpers.S","position":102,"original_position":102,"commit_id":"14007de5eb1e27b4a22e3914c07f8cb11b74da40","original_commit_id":"24135e1902bc8df8a8c6cb647e88d01d1ce05a5b","user":{"login":"janvorli","id":10758568,"avatar_url":"https://avatars.githubusercontent.com/u/10758568?v=3","gravatar_id":"","url":"https://api.github.com/users/janvorli","html_url":"https://github.com/janvorli","followers_url":"https://api.github.com/users/janvorli/followers","following_url":"https://api.github.com/users/janvorli/following{/other_user}","gists_url":"https://api.github.com/users/janvorli/gists{/gist_id}","starred_url":"https://api.github.com/users/janvorli/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/janvorli/subscriptions","organizations_url":"https://api.github.com/users/janvorli/orgs","repos_url":"https://api.github.com/users/janvorli/repos","events_url":"https://api.github.com/users/janvorli/events{/privacy}","received_events_url":"https://api.github.com/users/janvorli/received_events","type":"User","site_admin":false},"body":"Ah, I am sorry, the diff has hidden the RDX manipulation and I have missed that.\r\nAs for the possibility of GC reference and floating point in the return value, yes, it is possible. It is valid to return a struct with one reference and one floating point in registers.","created_at":"2016-08-04T08:26:15Z","updated_at":"2016-08-04T08:26:15Z","html_url":"https://github.com/dotnet/coreclr/pull/6522#discussion_r73481302","pull_request_url":"https://api.github.com/repos/dotnet/coreclr/pulls/6522","_links":{"self":{"href":"https://api.github.com/repos/dotnet/coreclr/pulls/comments/73481302"},"html":{"href":"https://github.com/dotnet/coreclr/pull/6522#discussion_r73481302"},"pull_request":{"href":"https://api.github.com/repos/dotnet/coreclr/pulls/6522"}}},"pull_request":{"url":"https://api.github.com/repos/dotnet/coreclr/pulls/6522","id":79300621,"html_url":"https://github.com/dotnet/coreclr/pull/6522","diff_url":"https://github.com/dotnet/coreclr/pull/6522.diff","patch_url":"https://github.com/dotnet/coreclr/pull/6522.patch","issue_url":"https://api.github.com/repos/dotnet/coreclr/issues/6522","number":6522,"state":"open","locked":false,"title":"Implement GcInfo v2","user":{"login":"swaroop-sridhar","id":8977622,"avatar_url":"https://avatars.githubusercontent.com/u/8977622?v=3","gravatar_id":"","url":"https://api.github.com/users/swaroop-sridhar","html_url":"https://github.com/swaroop-sridhar","followers_url":"https://api.github.com/users/swaroop-sridhar/followers","following_url":"https://api.github.com/users/swaroop-sridhar/following{/other_user}","gists_url":"https://api.github.com/users/swaroop-sridhar/gists{/gist_id}","starred_url":"https://api.github.com/users/swaroop-sridhar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/swaroop-sridhar/subscriptions","organizations_url":"https://api.github.com/users/swaroop-sridhar/orgs","repos_url":"https://api.github.com/users/swaroop-sridhar/repos","events_url":"https://api.github.com/users/swaroop-sridhar/events{/privacy}","received_events_url":"https://api.github.com/users/swaroop-sridhar/received_events","type":"User","site_admin":false},"body":"Ref #4379\r\n\r\nThis change implements GcInfo version 2 for all platforms that use the\r\nGcInfo library (all architectures other than X86).\r\n\r\nChanges are:\r\n1) Defines ReturnKind enumeration for all platforms\r\n2) Change the GcInfo encoder library to encode the ReturnKind and ReversePInvokeFrame slot\r\n3) Change the CM's GcInfo decoder to encode the ReturnKind and ReversePInvokeFrame slot for GCINFO_VERSION 2\r\n4) Some corrections to GCINFO_MEASUREments\r\n5) Changes to RYU Jit to provide the correct information to the encoder\r\n6) Changes to the VM to use the ReturnKind information while hijacking a thread\r\n   - If ReturnKind is available from GcInfo, new hijack routines are used\r\n   - Otherwise, fall back to old method (for compatibility)\r\n7) Rework and simplify the thread hijack routines by scanning HijackFrames directly for gcroots\r\n8) Supporting code to implement the above features.\r\n\r\nReturning Structs in multiple registers\r\n\r\nHijacking for StructInRegs is currently only implemented for\r\nUnix SystemV ABI Multi-reg struct returns. However, the hijack-workers that use\r\nReturnKind are ready to handle other platforms (ex: ARM/ARM64 Windows)\r\nonce the corresponding HijackTripThread() assembly routines are defined.\r\n\r\nThe New feature flag: FEATURE_MULTIREG_RETURN is set for platforms where a struct value\r\ncan be returned in multiple registers [ex: Windows/Unix ARM/ARM64, Unix-AMD64]\r\nFEATURE_UNIX_AMD64_STRUCT_PASSING is a specific kind of FEATURE_MULTIREG_RETURN\r\nspecified by SystemV ABI for AMD64\r\n\r\nCompatibility with other JITs\r\n\r\n- All new GCInfo generated by RYU Jit is in GcInfo version 2\r\n- All Ngen images must be regenerated with the new GcInfo version.\r\n- Ready-to-run images with old GcInfo will continue to work.\r\n- Jit64/X64 uses the GcInfo library, so it generates GcInfo version 2.\r\n  However, it doesn't (yet) provide the data to encode the correct ReturnKind\r\n  Similar is the case for ARM32 code running on JIT32, and any other JITs\r\n  that may be using GcInfo library but not yet modified to use the new API.\r\n  So, compatibility is achived using RT_Unset flag.\r\n\r\nWhen ReturnKind is RT_Unset, it means that the JIT did not set\r\nthe ReturnKind in the GCInfo, and therefore the VM cannot rely on it,\r\nand must use other mechanisms (similar to GcInfo ver 1) to determine\r\nthe Return type's GC information.\r\n\r\nImplement GC root scanning for Hijack-frames\r\n\r\nThis change implements GCScanRoots() method for Hijacke-frames\r\nbased on the ReturnKind information available from the GcInfo.\r\nIf the exact ReturnKind is not available in the GcInfo, the\r\nthread-suspension logic will compute the ReturnKind based on\r\nthe method-signature.\r\n\r\nAs a result of this change, several hijack-helpers in the VM\r\nare cleaned up. There's only one implementation of HijackWorker()\r\nwhich handles all returnKinds, and one assembly helper for handling\r\nall methods that return a GC value.\r\n\r\nARM64\r\n\r\nOnly GcIndfo v2 is reliably supported for ARM64 platform.\r\nThe changes to thread-hijack mechanism fixes #6494 for ARM64.\r\n\r\nNo measurable change in JIT throughput, performance or native-image\r\nsize from this change.","created_at":"2016-07-29T03:07:38Z","updated_at":"2016-08-04T08:26:15Z","closed_at":null,"merged_at":null,"merge_commit_sha":"894a422c1cf1a646a1ff235d1ae51e8433df725e","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/dotnet/coreclr/pulls/6522/commits","review_comments_url":"https://api.github.com/repos/dotnet/coreclr/pulls/6522/comments","review_comment_url":"https://api.github.com/repos/dotnet/coreclr/pulls/comments{/number}","comments_url":"https://api.github.com/repos/dotnet/coreclr/issues/6522/comments","statuses_url":"https://api.github.com/repos/dotnet/coreclr/statuses/14007de5eb1e27b4a22e3914c07f8cb11b74da40","head":{"label":"swaroop-sridhar:gcinfov2","ref":"gcinfov2","sha":"14007de5eb1e27b4a22e3914c07f8cb11b74da40","user":{"login":"swaroop-sridhar","id":8977622,"avatar_url":"https://avatars.githubusercontent.com/u/8977622?v=3","gravatar_id":"","url":"https://api.github.com/users/swaroop-sridhar","html_url":"https://github.com/swaroop-sridhar","followers_url":"https://api.github.com/users/swaroop-sridhar/followers","following_url":"https://api.github.com/users/swaroop-sridhar/following{/other_user}","gists_url":"https://api.github.com/users/swaroop-sridhar/gists{/gist_id}","starred_url":"https://api.github.com/users/swaroop-sridhar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/swaroop-sridhar/subscriptions","organizations_url":"https://api.github.com/users/swaroop-sridhar/orgs","repos_url":"https://api.github.com/users/swaroop-sridhar/repos","events_url":"https://api.github.com/users/swaroop-sridhar/events{/privacy}","received_events_url":"https://api.github.com/users/swaroop-sridhar/received_events","type":"User","site_admin":false},"repo":{"id":31568014,"name":"coreclr","full_name":"swaroop-sridhar/coreclr","owner":{"login":"swaroop-sridhar","id":8977622,"avatar_url":"https://avatars.githubusercontent.com/u/8977622?v=3","gravatar_id":"","url":"https://api.github.com/users/swaroop-sridhar","html_url":"https://github.com/swaroop-sridhar","followers_url":"https://api.github.com/users/swaroop-sridhar/followers","following_url":"https://api.github.com/users/swaroop-sridhar/following{/other_user}","gists_url":"https://api.github.com/users/swaroop-sridhar/gists{/gist_id}","starred_url":"https://api.github.com/users/swaroop-sridhar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/swaroop-sridhar/subscriptions","organizations_url":"https://api.github.com/users/swaroop-sridhar/orgs","repos_url":"https://api.github.com/users/swaroop-sridhar/repos","events_url":"https://api.github.com/users/swaroop-sridhar/events{/privacy}","received_events_url":"https://api.github.com/users/swaroop-sridhar/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/swaroop-sridhar/coreclr","description":"This repo contains the .NET Core runtime, called CoreCLR. It is an execution engine for .NET apps, performing functions such as IL byte code loading, compilation to machine code and garbage collection. The repo contains the complete up-to-date CoreCLR codebase.","fork":true,"url":"https://api.github.com/repos/swaroop-sridhar/coreclr","forks_url":"https://api.github.com/repos/swaroop-sridhar/coreclr/forks","keys_url":"https://api.github.com/repos/swaroop-sridhar/coreclr/keys{/key_id}","collaborators_url":"https://api.github.com/repos/swaroop-sridhar/coreclr/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/swaroop-sridhar/coreclr/teams","hooks_url":"https://api.github.com/repos/swaroop-sridhar/coreclr/hooks","issue_events_url":"https://api.github.com/repos/swaroop-sridhar/coreclr/issues/events{/number}","events_url":"https://api.github.com/repos/swaroop-sridhar/coreclr/events","assignees_url":"https://api.github.com/repos/swaroop-sridhar/coreclr/assignees{/user}","branches_url":"https://api.github.com/repos/swaroop-sridhar/coreclr/branches{/branch}","tags_url":"https://api.github.com/repos/swaroop-sridhar/coreclr/tags","blobs_url":"https://api.github.com/repos/swaroop-sridhar/coreclr/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/swaroop-sridhar/coreclr/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/swaroop-sridhar/coreclr/git/refs{/sha}","trees_url":"https://api.github.com/repos/swaroop-sridhar/coreclr/git/trees{/sha}","statuses_url":"https://api.github.com/repos/swaroop-sridhar/coreclr/statuses/{sha}","languages_url":"https://api.github.com/repos/swaroop-sridhar/coreclr/languages","stargazers_url":"https://api.github.com/repos/swaroop-sridhar/coreclr/stargazers","contributors_url":"https://api.github.com/repos/swaroop-sridhar/coreclr/contributors","subscribers_url":"https://api.github.com/repos/swaroop-sridhar/coreclr/subscribers","subscription_url":"https://api.github.com/repos/swaroop-sridhar/coreclr/subscription","commits_url":"https://api.github.com/repos/swaroop-sridhar/coreclr/commits{/sha}","git_commits_url":"https://api.github.com/repos/swaroop-sridhar/coreclr/git/commits{/sha}","comments_url":"https://api.github.com/repos/swaroop-sridhar/coreclr/comments{/number}","issue_comment_url":"https://api.github.com/repos/swaroop-sridhar/coreclr/issues/comments{/number}","contents_url":"https://api.github.com/repos/swaroop-sridhar/coreclr/contents/{+path}","compare_url":"https://api.github.com/repos/swaroop-sridhar/coreclr/compare/{base}...{head}","merges_url":"https://api.github.com/repos/swaroop-sridhar/coreclr/merges","archive_url":"https://api.github.com/repos/swaroop-sridhar/coreclr/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/swaroop-sridhar/coreclr/downloads","issues_url":"https://api.github.com/repos/swaroop-sridhar/coreclr/issues{/number}","pulls_url":"https://api.github.com/repos/swaroop-sridhar/coreclr/pulls{/number}","milestones_url":"https://api.github.com/repos/swaroop-sridhar/coreclr/milestones{/number}","notifications_url":"https://api.github.com/repos/swaroop-sridhar/coreclr/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/swaroop-sridhar/coreclr/labels{/name}","releases_url":"https://api.github.com/repos/swaroop-sridhar/coreclr/releases{/id}","deployments_url":"https://api.github.com/repos/swaroop-sridhar/coreclr/deployments","created_at":"2015-03-02T22:57:03Z","updated_at":"2016-01-13T22:05:44Z","pushed_at":"2016-08-04T04:03:49Z","git_url":"git://github.com/swaroop-sridhar/coreclr.git","ssh_url":"git@github.com:swaroop-sridhar/coreclr.git","clone_url":"https://github.com/swaroop-sridhar/coreclr.git","svn_url":"https://github.com/swaroop-sridhar/coreclr","homepage":"","size":94112,"stargazers_count":0,"watchers_count":0,"language":"C#","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"dotnet:master","ref":"master","sha":"5b0953d50e9d0c6e388643210476d6a95a55a247","user":{"login":"dotnet","id":9141961,"avatar_url":"https://avatars.githubusercontent.com/u/9141961?v=3","gravatar_id":"","url":"https://api.github.com/users/dotnet","html_url":"https://github.com/dotnet","followers_url":"https://api.github.com/users/dotnet/followers","following_url":"https://api.github.com/users/dotnet/following{/other_user}","gists_url":"https://api.github.com/users/dotnet/gists{/gist_id}","starred_url":"https://api.github.com/users/dotnet/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dotnet/subscriptions","organizations_url":"https://api.github.com/users/dotnet/orgs","repos_url":"https://api.github.com/users/dotnet/repos","events_url":"https://api.github.com/users/dotnet/events{/privacy}","received_events_url":"https://api.github.com/users/dotnet/received_events","type":"Organization","site_admin":false},"repo":{"id":30092893,"name":"coreclr","full_name":"dotnet/coreclr","owner":{"login":"dotnet","id":9141961,"avatar_url":"https://avatars.githubusercontent.com/u/9141961?v=3","gravatar_id":"","url":"https://api.github.com/users/dotnet","html_url":"https://github.com/dotnet","followers_url":"https://api.github.com/users/dotnet/followers","following_url":"https://api.github.com/users/dotnet/following{/other_user}","gists_url":"https://api.github.com/users/dotnet/gists{/gist_id}","starred_url":"https://api.github.com/users/dotnet/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dotnet/subscriptions","organizations_url":"https://api.github.com/users/dotnet/orgs","repos_url":"https://api.github.com/users/dotnet/repos","events_url":"https://api.github.com/users/dotnet/events{/privacy}","received_events_url":"https://api.github.com/users/dotnet/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/dotnet/coreclr","description":"This repo contains the .NET Core runtime, called CoreCLR, and the base library, called mscorlib. It includes the garbage collector, JIT compiler, base .NET data types and many low-level classes.","fork":false,"url":"https://api.github.com/repos/dotnet/coreclr","forks_url":"https://api.github.com/repos/dotnet/coreclr/forks","keys_url":"https://api.github.com/repos/dotnet/coreclr/keys{/key_id}","collaborators_url":"https://api.github.com/repos/dotnet/coreclr/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/dotnet/coreclr/teams","hooks_url":"https://api.github.com/repos/dotnet/coreclr/hooks","issue_events_url":"https://api.github.com/repos/dotnet/coreclr/issues/events{/number}","events_url":"https://api.github.com/repos/dotnet/coreclr/events","assignees_url":"https://api.github.com/repos/dotnet/coreclr/assignees{/user}","branches_url":"https://api.github.com/repos/dotnet/coreclr/branches{/branch}","tags_url":"https://api.github.com/repos/dotnet/coreclr/tags","blobs_url":"https://api.github.com/repos/dotnet/coreclr/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/dotnet/coreclr/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/dotnet/coreclr/git/refs{/sha}","trees_url":"https://api.github.com/repos/dotnet/coreclr/git/trees{/sha}","statuses_url":"https://api.github.com/repos/dotnet/coreclr/statuses/{sha}","languages_url":"https://api.github.com/repos/dotnet/coreclr/languages","stargazers_url":"https://api.github.com/repos/dotnet/coreclr/stargazers","contributors_url":"https://api.github.com/repos/dotnet/coreclr/contributors","subscribers_url":"https://api.github.com/repos/dotnet/coreclr/subscribers","subscription_url":"https://api.github.com/repos/dotnet/coreclr/subscription","commits_url":"https://api.github.com/repos/dotnet/coreclr/commits{/sha}","git_commits_url":"https://api.github.com/repos/dotnet/coreclr/git/commits{/sha}","comments_url":"https://api.github.com/repos/dotnet/coreclr/comments{/number}","issue_comment_url":"https://api.github.com/repos/dotnet/coreclr/issues/comments{/number}","contents_url":"https://api.github.com/repos/dotnet/coreclr/contents/{+path}","compare_url":"https://api.github.com/repos/dotnet/coreclr/compare/{base}...{head}","merges_url":"https://api.github.com/repos/dotnet/coreclr/merges","archive_url":"https://api.github.com/repos/dotnet/coreclr/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/dotnet/coreclr/downloads","issues_url":"https://api.github.com/repos/dotnet/coreclr/issues{/number}","pulls_url":"https://api.github.com/repos/dotnet/coreclr/pulls{/number}","milestones_url":"https://api.github.com/repos/dotnet/coreclr/milestones{/number}","notifications_url":"https://api.github.com/repos/dotnet/coreclr/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/dotnet/coreclr/labels{/name}","releases_url":"https://api.github.com/repos/dotnet/coreclr/releases{/id}","deployments_url":"https://api.github.com/repos/dotnet/coreclr/deployments","created_at":"2015-01-30T22:10:02Z","updated_at":"2016-08-04T04:11:42Z","pushed_at":"2016-08-04T06:29:33Z","git_url":"git://github.com/dotnet/coreclr.git","ssh_url":"git@github.com:dotnet/coreclr.git","clone_url":"https://github.com/dotnet/coreclr.git","svn_url":"https://github.com/dotnet/coreclr","homepage":"https://docs.microsoft.com/dotnet/","size":104741,"stargazers_count":6753,"watchers_count":6753,"language":"C#","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1584,"mirror_url":null,"open_issues_count":916,"forks":1584,"open_issues":916,"watchers":6753,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/dotnet/coreclr/pulls/6522"},"html":{"href":"https://github.com/dotnet/coreclr/pull/6522"},"issue":{"href":"https://api.github.com/repos/dotnet/coreclr/issues/6522"},"comments":{"href":"https://api.github.com/repos/dotnet/coreclr/issues/6522/comments"},"review_comments":{"href":"https://api.github.com/repos/dotnet/coreclr/pulls/6522/comments"},"review_comment":{"href":"https://api.github.com/repos/dotnet/coreclr/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/dotnet/coreclr/pulls/6522/commits"},"statuses":{"href":"https://api.github.com/repos/dotnet/coreclr/statuses/14007de5eb1e27b4a22e3914c07f8cb11b74da40"}}}}
{"actor":{"display_login":"janvorli"}}