Skip to content

src: find .text section using dl_iterate_phdr - #32244

Closed
gabrielschulhof wants to merge 6 commits into
nodejs:masterfrom
gabrielschulhof:large-pages-use-dl_iterate_phdr
Closed

src: find .text section using dl_iterate_phdr#32244
gabrielschulhof wants to merge 6 commits into
nodejs:masterfrom
gabrielschulhof:large-pages-use-dl_iterate_phdr

Conversation

@gabrielschulhof

Copy link
Copy Markdown
Contributor

Use dl_iterate_phdr(3) to find the mapping containing
__node_text_start instead of parsing /proc/self/maps.

Signed-off-by: @gabrielschulhof

Checklist
  • make -j4 test (UNIX), or vcbuild test (Windows) passes
  • commit message follows commit guidelines

@nodejs-github-botnodejs-github-bot added the c++ Issues and PRs that require attention from people who are familiar with C++. label Mar 13, 2020
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@gabrielschulhof
gabrielschulhofforce-pushed the large-pages-use-dl_iterate_phdr branch from efd3932 to b53d3cdCompareMarch 13, 2020 07:01
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@bnoordhuisbnoordhuis left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM % some minor (mostly style) issues.

Comment threadsrc/large_pages/node_large_page.cc Outdated
Comment threadsrc/large_pages/node_large_page.cc Outdated
Comment threadsrc/large_pages/node_large_page.cc Outdated
Comment threadsrc/large_pages/node_large_page.cc Outdated

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just checking, is end inclusive or exclusive?

Aside: it looks like there's no real need for the dl_params->reference_sym field. This also works, wouldn't it?

auto reference_sym = reinterpret_cast<uintptr_t>(&__node_text_start);
if (reference_sym >= start && reference_sym <= end) {
// ...
}

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@bnoordhuis the reference_sym field is being used both inside the dl_iterate_phdr callback and outside of it. I thought it best not to assign reinterpret_cast<uintptr_t>(&__node_text_start); to two different variables because, if the symbol changes in the future, they might get out of sync.

Comment threadsrc/large_pages/node_large_page.cc Outdated

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For legibility, it'd be better to hoist the lambda out of the function call:

auto callback = [](dl_phdr_info* info, size_t, void* data) -> int {
// ...
};
if (1 == dl_iterate_phdr(callback, &dl_params)) {
// ...
}

Comment threadsrc/large_pages/node_large_page.cc Outdated
Comment threadsrc/large_pages/node_large_page.cc Outdated
Comment on lines 157 to 171

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@bnoordhuis I added some more sanity checks to ensure that we create a region that has proper offsets and > 0 page count.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

... or rather, that we consider the region to have been found only if it has proper offsets and >0 page count.

@gabrielschulhof

Copy link
Copy Markdown
ContributorAuthor

@bnoordhuis I addressed your review comments and added some sanity checks wrt. your comment regarding inclusive/exclusive comparison.

@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Gabriel Schulhofand others added 6 commits March 13, 2020 14:46
Use `dl_iterate_phdr(3)` to find the mapping containing
`__node_text_start` instead of parsing `/proc/self/maps`.
Signed-off-by: Gabriel Schulhof <gabriel.schulhof@intel.com>
Co-Authored-By: Ben Noordhuis <info@bnoordhuis.nl>
Co-Authored-By: Ben Noordhuis <info@bnoordhuis.nl>
@gabrielschulhof
gabrielschulhofforce-pushed the large-pages-use-dl_iterate_phdr branch from af31134 to 2d6be5eCompareMarch 13, 2020 21:46
@gabrielschulhof

Copy link
Copy Markdown
ContributorAuthor

Rebased in the hope that if fixes the "node ASAN" test.

@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@gabrielschulhof

Copy link
Copy Markdown
ContributorAuthor

@nodejs/collaborators sorry about the spam! Can this land without the "node ASAN" test? AFAICT it's failing for a lot of PRs.

@gabrielschulhof

Copy link
Copy Markdown
ContributorAuthor

@addaleax

Copy link
Copy Markdown
Member

sorry about the spam! Can this land without the "node ASAN" test? AFAICT it's failing for a lot of PRs.

Yes. 👍

@addaleaxaddaleax added the author ready PRs that have at least one approval, no pending requests for changes, and a CI started. label Mar 15, 2020
@gengjiawen

Copy link
Copy Markdown
Member

@nodejs/collaborators sorry about the spam! Can this land without the "node ASAN" test? AFAICT it's failing for a lot of PRs.

We dealt with Node ASAN fail in #32116. Not sure we should cherrypick the commit to master, since the PR is pretty ready to launch.

Also +1 for this PR to launch.

gabrielschulhof pushed a commit that referenced this pull request Mar 16, 2020
Use `dl_iterate_phdr(3)` to find the mapping containing
`__node_text_start` instead of parsing `/proc/self/maps`.
Signed-off-by: Gabriel Schulhof <gabriel.schulhof@intel.com>
Co-Authored-By: Ben Noordhuis <info@bnoordhuis.nl>
PR-URL: #32244
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: David Carlier <devnexen@gmail.com>
@gabrielschulhof

Copy link
Copy Markdown
ContributorAuthor

Landed in 25cb855.

@gabrielschulhof
gabrielschulhof deleted the large-pages-use-dl_iterate_phdr branch March 16, 2020 05:43
BridgeAR pushed a commit that referenced this pull request Mar 17, 2020
Use `dl_iterate_phdr(3)` to find the mapping containing
`__node_text_start` instead of parsing `/proc/self/maps`.
Signed-off-by: Gabriel Schulhof <gabriel.schulhof@intel.com>
Co-Authored-By: Ben Noordhuis <info@bnoordhuis.nl>
PR-URL: #32244
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: David Carlier <devnexen@gmail.com>
@MylesBorinsMylesBorins mentioned this pull request Mar 19, 2020
MylesBorins pushed a commit that referenced this pull request Mar 24, 2020
Use `dl_iterate_phdr(3)` to find the mapping containing
`__node_text_start` instead of parsing `/proc/self/maps`.
Signed-off-by: Gabriel Schulhof <gabriel.schulhof@intel.com>
Co-Authored-By: Ben Noordhuis <info@bnoordhuis.nl>
PR-URL: #32244
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: David Carlier <devnexen@gmail.com>
@targos

Copy link
Copy Markdown
Member

Depends on the large pages change to land on v12.x

@targostargos removed author ready PRs that have at least one approval, no pending requests for changes, and a CI started. backport-blocked-v12.x labels Apr 25, 2020
targos pushed a commit to targos/node that referenced this pull request Apr 25, 2020
Use `dl_iterate_phdr(3)` to find the mapping containing
`__node_text_start` instead of parsing `/proc/self/maps`.
Signed-off-by: Gabriel Schulhof <gabriel.schulhof@intel.com>
Co-Authored-By: Ben Noordhuis <info@bnoordhuis.nl>
PR-URL: nodejs#32244
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: David Carlier <devnexen@gmail.com>
targos pushed a commit that referenced this pull request Apr 28, 2020
Use `dl_iterate_phdr(3)` to find the mapping containing
`__node_text_start` instead of parsing `/proc/self/maps`.
Signed-off-by: Gabriel Schulhof <gabriel.schulhof@intel.com>
Co-Authored-By: Ben Noordhuis <info@bnoordhuis.nl>
PR-URL: #32244
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: David Carlier <devnexen@gmail.com>
@targostargos mentioned this pull request May 2, 2020
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

c++Issues and PRs that require attention from people who are familiar with C++.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants

@gabrielschulhof@nodejs-github-bot@addaleax@gengjiawen@targos@bnoordhuis@devnexen