{"action":"opened","number":1414,"pull_request":{"url":"https://api.github.com/repos/derekparker/delve/pulls/1414","id":231459471,"node_id":"MDExOlB1bGxSZXF1ZXN0MjMxNDU5NDcx","html_url":"https://github.com/derekparker/delve/pull/1414","diff_url":"https://github.com/derekparker/delve/pull/1414.diff","patch_url":"https://github.com/derekparker/delve/pull/1414.patch","issue_url":"https://api.github.com/repos/derekparker/delve/issues/1414","number":1414,"state":"open","locked":false,"title":"Plugin support (part 2)","user":{"login":"aarzilli","id":303620,"node_id":"MDQ6VXNlcjMwMzYyMA==","avatar_url":"https://avatars2.githubusercontent.com/u/303620?v=4","gravatar_id":"","url":"https://api.github.com/users/aarzilli","html_url":"https://github.com/aarzilli","followers_url":"https://api.github.com/users/aarzilli/followers","following_url":"https://api.github.com/users/aarzilli/following{/other_user}","gists_url":"https://api.github.com/users/aarzilli/gists{/gist_id}","starred_url":"https://api.github.com/users/aarzilli/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aarzilli/subscriptions","organizations_url":"https://api.github.com/users/aarzilli/orgs","repos_url":"https://api.github.com/users/aarzilli/repos","events_url":"https://api.github.com/users/aarzilli/events{/privacy}","received_events_url":"https://api.github.com/users/aarzilli/received_events","type":"User","site_admin":false},"body":"```\nproc: support debugging plugins\n\nThis change splits the BinaryInfo object into a slice of Image objects\ncontaining information about the base executable and each loaded shared\nlibrary (note: go plugins are shared libraries).\n\nDelve backens are supposed to call BinaryInfo.AddImage whenever they\ndetect that a new shared library has been loaded.\n\nMember fields of BinaryInfo that are used to speed up access to dwarf\n(Functions, packageVars, consts, etc...) remain part of BinaryInfo and\nare updated to reference the correct image object. This simplifies this\nchange.\n\nThis approach has a few shortcomings:\n\n1. Multiple shared libraries can define functions or globals with the\nsame name and we have no way to disambiguate between them.\n\n2. We don't have a way to handle library unloading.\n\nBoth of those affect C shared libraries much more than they affect go\nplugins. Go plugins can't be unloaded at all and a lot of name\ncollisions are prevented by import paths.\n\nThere's only one problem that is concerning: if two plugins both import\nthe same package they will end up with multiple definition for the same\nfunction.\nFor example if two plugins use fmt.Printf the final in-memory image\n(and therefore our BinaryInfo object) will end up with two copies of\nfmt.Printf at different memory addresses. If a user types\nbreak fmt.Printf\na breakpoint should be created at *both* locations.\nAllowing this is a relatively complex change that should be done in a\ndifferent PR than this.\n\nFor this reason I consider this approach an acceptable and sustainable\nstopgap.\n\nUpdates #865\n\nproc,proc/native,proc/gdbserial: initial plugin support\n\nAdds initial support for plugins, this is only the code needed to keep\ntrack of loaded plugins on linux (both native and gdbserial backend).\n\nIt does not actually implement support for debugging plugins on linux.\n\nUpdates #865\n\nproc: correctly extract name of functions that have been inlined\n\nIf a function can be inlined it will appear as two entries in\ndebug_info. A DW_TAG_subprogram entry with DW_AT_inlined = true (that\nwill be used as the abstract origin) and a second DW_TAG_subprogram\nentry with an abstract origin.\nTo retrieve the name of this second entry we must load its abstract\norigin.\n\nproc/*: allow stepping into functions without debug_info symbols\n\nIf proc.Step encounters a CALL instruction that points to an address\nthat isn't associated with any function it should still follow the\nCALL.\n\nThe circumstances creating this problem do not normally occur, it was\nencountered in the process of fixing a bug created by Go1.12.\n\ntests: minor fixes for Go 1.12\n\nproc: remove inversion of return variables from returnBreakpointInfo\n\nIt was never true that return variables were in the inverse order.\nInstead in Go1.11 return variables are saved in debug_info in an\narbitrary order and inverting them just happened to work for this\nspecific example.\n\nThis bug was fixed in Go 1.12, regardless we should attempt to\nrearrange return variables anyway.\n\n```\n","created_at":"2018-11-16T09:05:03Z","updated_at":"2018-11-16T09:05:03Z","closed_at":null,"merged_at":null,"merge_commit_sha":null,"assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/derekparker/delve/pulls/1414/commits","review_comments_url":"https://api.github.com/repos/derekparker/delve/pulls/1414/comments","review_comment_url":"https://api.github.com/repos/derekparker/delve/pulls/comments{/number}","comments_url":"https://api.github.com/repos/derekparker/delve/issues/1414/comments","statuses_url":"https://api.github.com/repos/derekparker/delve/statuses/ff9c8944c72736cf40072adb63ac23d9259e9ffd","head":{"label":"aarzilli:listlib","ref":"listlib","sha":"ff9c8944c72736cf40072adb63ac23d9259e9ffd","user":{"login":"aarzilli","id":303620,"node_id":"MDQ6VXNlcjMwMzYyMA==","avatar_url":"https://avatars2.githubusercontent.com/u/303620?v=4","gravatar_id":"","url":"https://api.github.com/users/aarzilli","html_url":"https://github.com/aarzilli","followers_url":"https://api.github.com/users/aarzilli/followers","following_url":"https://api.github.com/users/aarzilli/following{/other_user}","gists_url":"https://api.github.com/users/aarzilli/gists{/gist_id}","starred_url":"https://api.github.com/users/aarzilli/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aarzilli/subscriptions","organizations_url":"https://api.github.com/users/aarzilli/orgs","repos_url":"https://api.github.com/users/aarzilli/repos","events_url":"https://api.github.com/users/aarzilli/events{/privacy}","received_events_url":"https://api.github.com/users/aarzilli/received_events","type":"User","site_admin":false},"repo":{"id":37608792,"node_id":"MDEwOlJlcG9zaXRvcnkzNzYwODc5Mg==","name":"delve","full_name":"aarzilli/delve","private":false,"owner":{"login":"aarzilli","id":303620,"node_id":"MDQ6VXNlcjMwMzYyMA==","avatar_url":"https://avatars2.githubusercontent.com/u/303620?v=4","gravatar_id":"","url":"https://api.github.com/users/aarzilli","html_url":"https://github.com/aarzilli","followers_url":"https://api.github.com/users/aarzilli/followers","following_url":"https://api.github.com/users/aarzilli/following{/other_user}","gists_url":"https://api.github.com/users/aarzilli/gists{/gist_id}","starred_url":"https://api.github.com/users/aarzilli/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aarzilli/subscriptions","organizations_url":"https://api.github.com/users/aarzilli/orgs","repos_url":"https://api.github.com/users/aarzilli/repos","events_url":"https://api.github.com/users/aarzilli/events{/privacy}","received_events_url":"https://api.github.com/users/aarzilli/received_events","type":"User","site_admin":false},"html_url":"https://github.com/aarzilli/delve","description":"Delve is a debugger for the Go programming language.","fork":true,"url":"https://api.github.com/repos/aarzilli/delve","forks_url":"https://api.github.com/repos/aarzilli/delve/forks","keys_url":"https://api.github.com/repos/aarzilli/delve/keys{/key_id}","collaborators_url":"https://api.github.com/repos/aarzilli/delve/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/aarzilli/delve/teams","hooks_url":"https://api.github.com/repos/aarzilli/delve/hooks","issue_events_url":"https://api.github.com/repos/aarzilli/delve/issues/events{/number}","events_url":"https://api.github.com/repos/aarzilli/delve/events","assignees_url":"https://api.github.com/repos/aarzilli/delve/assignees{/user}","branches_url":"https://api.github.com/repos/aarzilli/delve/branches{/branch}","tags_url":"https://api.github.com/repos/aarzilli/delve/tags","blobs_url":"https://api.github.com/repos/aarzilli/delve/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/aarzilli/delve/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/aarzilli/delve/git/refs{/sha}","trees_url":"https://api.github.com/repos/aarzilli/delve/git/trees{/sha}","statuses_url":"https://api.github.com/repos/aarzilli/delve/statuses/{sha}","languages_url":"https://api.github.com/repos/aarzilli/delve/languages","stargazers_url":"https://api.github.com/repos/aarzilli/delve/stargazers","contributors_url":"https://api.github.com/repos/aarzilli/delve/contributors","subscribers_url":"https://api.github.com/repos/aarzilli/delve/subscribers","subscription_url":"https://api.github.com/repos/aarzilli/delve/subscription","commits_url":"https://api.github.com/repos/aarzilli/delve/commits{/sha}","git_commits_url":"https://api.github.com/repos/aarzilli/delve/git/commits{/sha}","comments_url":"https://api.github.com/repos/aarzilli/delve/comments{/number}","issue_comment_url":"https://api.github.com/repos/aarzilli/delve/issues/comments{/number}","contents_url":"https://api.github.com/repos/aarzilli/delve/contents/{+path}","compare_url":"https://api.github.com/repos/aarzilli/delve/compare/{base}...{head}","merges_url":"https://api.github.com/repos/aarzilli/delve/merges","archive_url":"https://api.github.com/repos/aarzilli/delve/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/aarzilli/delve/downloads","issues_url":"https://api.github.com/repos/aarzilli/delve/issues{/number}","pulls_url":"https://api.github.com/repos/aarzilli/delve/pulls{/number}","milestones_url":"https://api.github.com/repos/aarzilli/delve/milestones{/number}","notifications_url":"https://api.github.com/repos/aarzilli/delve/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/aarzilli/delve/labels{/name}","releases_url":"https://api.github.com/repos/aarzilli/delve/releases{/id}","deployments_url":"https://api.github.com/repos/aarzilli/delve/deployments","created_at":"2015-06-17T17:05:12Z","updated_at":"2018-01-01T15:30:54Z","pushed_at":"2018-11-16T09:04:46Z","git_url":"git://github.com/aarzilli/delve.git","ssh_url":"git@github.com:aarzilli/delve.git","clone_url":"https://github.com/aarzilli/delve.git","svn_url":"https://github.com/aarzilli/delve","homepage":"","size":19096,"stargazers_count":3,"watchers_count":3,"language":"Go","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":3,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":3,"open_issues":0,"watchers":3,"default_branch":"master"}},"base":{"label":"derekparker:master","ref":"master","sha":"3cfb00b2cc0edc2b32bf90b30c64724fb4acc99c","user":{"login":"derekparker","id":1314079,"node_id":"MDQ6VXNlcjEzMTQwNzk=","avatar_url":"https://avatars0.githubusercontent.com/u/1314079?v=4","gravatar_id":"","url":"https://api.github.com/users/derekparker","html_url":"https://github.com/derekparker","followers_url":"https://api.github.com/users/derekparker/followers","following_url":"https://api.github.com/users/derekparker/following{/other_user}","gists_url":"https://api.github.com/users/derekparker/gists{/gist_id}","starred_url":"https://api.github.com/users/derekparker/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/derekparker/subscriptions","organizations_url":"https://api.github.com/users/derekparker/orgs","repos_url":"https://api.github.com/users/derekparker/repos","events_url":"https://api.github.com/users/derekparker/events{/privacy}","received_events_url":"https://api.github.com/users/derekparker/received_events","type":"User","site_admin":false},"repo":{"id":19994257,"node_id":"MDEwOlJlcG9zaXRvcnkxOTk5NDI1Nw==","name":"delve","full_name":"derekparker/delve","private":false,"owner":{"login":"derekparker","id":1314079,"node_id":"MDQ6VXNlcjEzMTQwNzk=","avatar_url":"https://avatars0.githubusercontent.com/u/1314079?v=4","gravatar_id":"","url":"https://api.github.com/users/derekparker","html_url":"https://github.com/derekparker","followers_url":"https://api.github.com/users/derekparker/followers","following_url":"https://api.github.com/users/derekparker/following{/other_user}","gists_url":"https://api.github.com/users/derekparker/gists{/gist_id}","starred_url":"https://api.github.com/users/derekparker/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/derekparker/subscriptions","organizations_url":"https://api.github.com/users/derekparker/orgs","repos_url":"https://api.github.com/users/derekparker/repos","events_url":"https://api.github.com/users/derekparker/events{/privacy}","received_events_url":"https://api.github.com/users/derekparker/received_events","type":"User","site_admin":false},"html_url":"https://github.com/derekparker/delve","description":"Delve is a debugger for the Go programming language.","fork":false,"url":"https://api.github.com/repos/derekparker/delve","forks_url":"https://api.github.com/repos/derekparker/delve/forks","keys_url":"https://api.github.com/repos/derekparker/delve/keys{/key_id}","collaborators_url":"https://api.github.com/repos/derekparker/delve/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/derekparker/delve/teams","hooks_url":"https://api.github.com/repos/derekparker/delve/hooks","issue_events_url":"https://api.github.com/repos/derekparker/delve/issues/events{/number}","events_url":"https://api.github.com/repos/derekparker/delve/events","assignees_url":"https://api.github.com/repos/derekparker/delve/assignees{/user}","branches_url":"https://api.github.com/repos/derekparker/delve/branches{/branch}","tags_url":"https://api.github.com/repos/derekparker/delve/tags","blobs_url":"https://api.github.com/repos/derekparker/delve/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/derekparker/delve/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/derekparker/delve/git/refs{/sha}","trees_url":"https://api.github.com/repos/derekparker/delve/git/trees{/sha}","statuses_url":"https://api.github.com/repos/derekparker/delve/statuses/{sha}","languages_url":"https://api.github.com/repos/derekparker/delve/languages","stargazers_url":"https://api.github.com/repos/derekparker/delve/stargazers","contributors_url":"https://api.github.com/repos/derekparker/delve/contributors","subscribers_url":"https://api.github.com/repos/derekparker/delve/subscribers","subscription_url":"https://api.github.com/repos/derekparker/delve/subscription","commits_url":"https://api.github.com/repos/derekparker/delve/commits{/sha}","git_commits_url":"https://api.github.com/repos/derekparker/delve/git/commits{/sha}","comments_url":"https://api.github.com/repos/derekparker/delve/comments{/number}","issue_comment_url":"https://api.github.com/repos/derekparker/delve/issues/comments{/number}","contents_url":"https://api.github.com/repos/derekparker/delve/contents/{+path}","compare_url":"https://api.github.com/repos/derekparker/delve/compare/{base}...{head}","merges_url":"https://api.github.com/repos/derekparker/delve/merges","archive_url":"https://api.github.com/repos/derekparker/delve/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/derekparker/delve/downloads","issues_url":"https://api.github.com/repos/derekparker/delve/issues{/number}","pulls_url":"https://api.github.com/repos/derekparker/delve/pulls{/number}","milestones_url":"https://api.github.com/repos/derekparker/delve/milestones{/number}","notifications_url":"https://api.github.com/repos/derekparker/delve/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/derekparker/delve/labels{/name}","releases_url":"https://api.github.com/repos/derekparker/delve/releases{/id}","deployments_url":"https://api.github.com/repos/derekparker/delve/deployments","created_at":"2014-05-20T19:24:43Z","updated_at":"2018-11-16T03:42:51Z","pushed_at":"2018-11-16T08:28:51Z","git_url":"git://github.com/derekparker/delve.git","ssh_url":"git@github.com:derekparker/delve.git","clone_url":"https://github.com/derekparker/delve.git","svn_url":"https://github.com/derekparker/delve","homepage":"","size":19600,"stargazers_count":9741,"watchers_count":9741,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":843,"mirror_url":null,"archived":false,"open_issues_count":99,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":843,"open_issues":99,"watchers":9741,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/derekparker/delve/pulls/1414"},"html":{"href":"https://github.com/derekparker/delve/pull/1414"},"issue":{"href":"https://api.github.com/repos/derekparker/delve/issues/1414"},"comments":{"href":"https://api.github.com/repos/derekparker/delve/issues/1414/comments"},"review_comments":{"href":"https://api.github.com/repos/derekparker/delve/pulls/1414/comments"},"review_comment":{"href":"https://api.github.com/repos/derekparker/delve/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/derekparker/delve/pulls/1414/commits"},"statuses":{"href":"https://api.github.com/repos/derekparker/delve/statuses/ff9c8944c72736cf40072adb63ac23d9259e9ffd"}},"author_association":"COLLABORATOR","merged":false,"mergeable":null,"rebaseable":null,"mergeable_state":"unknown","merged_by":null,"comments":0,"review_comments":0,"maintainer_can_modify":true,"commits":6,"additions":1232,"deletions":409,"changed_files":36}}
{"actor":{"display_login":"aarzilli"}}