{"action":"created","issue":{"url":"https://api.github.com/repos/dotnet/coreclr/issues/282","labels_url":"https://api.github.com/repos/dotnet/coreclr/issues/282/labels{/name}","comments_url":"https://api.github.com/repos/dotnet/coreclr/issues/282/comments","events_url":"https://api.github.com/repos/dotnet/coreclr/issues/282/events","html_url":"https://github.com/dotnet/coreclr/pull/282","id":57862966,"number":282,"title":"Implement native stack unwinding for Linux","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},"labels":[{"url":"https://api.github.com/repos/dotnet/coreclr/labels/cla-not-required","name":"cla-not-required","color":"009800"}],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":11,"created_at":"2015-02-16T23:18:38Z","updated_at":"2015-02-17T21:00:59Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/dotnet/coreclr/pulls/282","html_url":"https://github.com/dotnet/coreclr/pull/282","diff_url":"https://github.com/dotnet/coreclr/pull/282.diff","patch_url":"https://github.com/dotnet/coreclr/pull/282.patch"},"body":"This change implements native stack unwinding using the libunwind on\r\nLinux. I have also fixed bunch of issues / details in the related code:\r\n1) 0x in front of %p inside format string\r\n2) Subtraction of -1 from dl_info.dli_sname\r\n3) Added .cfi_xxxx annotation to the CallDescrWorkerInternal and the\r\nLEAF_ENTRY / LEAF_END macros.\r\n4) Changed local labels in the CallDescrWorkerInternal to be prefixed by\r\n.L to see the CallDescrWorkerInternal in the stack trace\r\n5) Changed moveOWord to use movdqu - it was being called with one of the\r\nparameters unaligned"},"comment":{"url":"https://api.github.com/repos/dotnet/coreclr/issues/comments/74752234","html_url":"https://github.com/dotnet/coreclr/pull/282#issuecomment-74752234","issue_url":"https://api.github.com/repos/dotnet/coreclr/issues/282","id":74752234,"user":{"login":"jkotas","id":6668460,"avatar_url":"https://avatars.githubusercontent.com/u/6668460?v=3","gravatar_id":"","url":"https://api.github.com/users/jkotas","html_url":"https://github.com/jkotas","followers_url":"https://api.github.com/users/jkotas/followers","following_url":"https://api.github.com/users/jkotas/following{/other_user}","gists_url":"https://api.github.com/users/jkotas/gists{/gist_id}","starred_url":"https://api.github.com/users/jkotas/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jkotas/subscriptions","organizations_url":"https://api.github.com/users/jkotas/orgs","repos_url":"https://api.github.com/users/jkotas/repos","events_url":"https://api.github.com/users/jkotas/events{/privacy}","received_events_url":"https://api.github.com/users/jkotas/received_events","type":"User","site_admin":false},"created_at":"2015-02-17T21:00:59Z","updated_at":"2015-02-17T21:00:59Z","body":"> do you know if there is a case where a pointer to an object managed by GC would be stored in a register stored in one of the native frames\r\n\r\nYes, pointer to an object managed by GC would be stored in a register stored in one of the native frames.\r\n\r\n> One option we have here is to ensure that object pointed to by registers are always pinned\r\n\r\nIf the unwind on Mac does not support context pointers, I would not worry about it right now. It will  become a problem only once we start enabling GC - I would do it as part of enabling GC.\r\n\r\n>  It is not clear to me though what exactly needs to be done to do that.\r\n\r\nIt would require: keeping track of unavailable register context pointers in REGDISPLAY - it may be as simple as storing NULL as register context pointer when it is not available, and then using that information to pin the values that cannot be updated in EECodeManager::EnumGcRefs."}}