Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

JDK-8313616: support loading library members on AIX in os::dll_load #15204

Closed
wants to merge 2 commits into from

Conversation

MBaesken
Copy link
Member

@MBaesken MBaesken commented Aug 9, 2023

AIX dlopen allows loading members of a lib; the syntax for members is libname(member-object) . However this needs an additional flag RTLD_MEMBER passed to dlopen.
Example from our OpenJDK codebase : dlopen("/usr/lib/libperfstat.a(shr_64.o)", RTLD_MEMBER | RTLD_NOW);

However, currently we do not support this in os::dll_load, so member loading would fail because of the missing RTLD_MEMBER flag.
See https://www.ibm.com/docs/en/aix/7.1?topic=d-dlopen-subroutine part about RTLD_MEMBER


Progress

  • Change must be properly reviewed (1 review required, with at least 1 Reviewer)
  • Change must not contain extraneous whitespace
  • Commit message must refer to an issue

Issue

  • JDK-8313616: support loading library members on AIX in os::dll_load (Enhancement - P4)

Reviewers

Reviewing

Using git

Checkout this PR locally:
$ git fetch https://git.openjdk.org/jdk.git pull/15204/head:pull/15204
$ git checkout pull/15204

Update a local copy of the PR:
$ git checkout pull/15204
$ git pull https://git.openjdk.org/jdk.git pull/15204/head

Using Skara CLI tools

Checkout this PR locally:
$ git pr checkout 15204

View PR using the GUI difftool:
$ git pr show -t 15204

Using diff file

Download this PR as a diff file:
https://git.openjdk.org/jdk/pull/15204.diff

Webrev

Link to Webrev Comment

@bridgekeeper
Copy link

bridgekeeper bot commented Aug 9, 2023

👋 Welcome back mbaesken! A progress list of the required criteria for merging this PR into master will be added to the body of your pull request. There are additional pull request commands available for use with this pull request.

@openjdk openjdk bot added the rfr Pull request is ready for review label Aug 9, 2023
@openjdk
Copy link

openjdk bot commented Aug 9, 2023

@MBaesken The following label will be automatically applied to this pull request:

  • hotspot-runtime

When this pull request is ready to be reviewed, an "RFR" email will be sent to the corresponding mailing list. If you would like to change these labels, use the /label pull request command.

@openjdk openjdk bot added the hotspot-runtime hotspot-runtime-dev@openjdk.org label Aug 9, 2023
@mlbridge
Copy link

mlbridge bot commented Aug 9, 2023

Webrevs

// a MEMBER module that is a member of an archive.
int flen = strlen(filename);
if (flen > 0 && filename[flen - 1] == ')') {
dflags = RTLD_LAZY | RTLD_MEMBER;
Copy link
Contributor

Choose a reason for hiding this comment

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

Better: dflags |= RTLD_MEMBER;

Copy link
Member Author

Choose a reason for hiding this comment

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

Hi Martin, I adjusted this coding.

void * result= ::dlopen(filename, RTLD_LAZY);
// RTLD_LAZY has currently the same behavior as RTLD_NOW
// The dl is loaded immediately with all its dependants.
int dflags = RTLD_LAZY;
Copy link
Contributor

Choose a reason for hiding this comment

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

Looks ok. Maybe it would be safer to use RTLD_NOW in case the implementation changes at some point of time.

Copy link
Member Author

Choose a reason for hiding this comment

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

Hi martin, I spoke to our local AIX experts and they said better to use RTLD_LAZY because this is used more across platforms. Additionally it is very unlikely that in the near future, on AIX, RTLD_LAZY and RTLD_NOW would differ.

Copy link
Contributor

Choose a reason for hiding this comment

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

Ok.

@openjdk
Copy link

openjdk bot commented Aug 9, 2023

@MBaesken This change now passes all automated pre-integration checks.

ℹ️ This project also has non-automated pre-integration requirements. Please see the file CONTRIBUTING.md for details.

After integration, the commit message for the final commit will be:

8313616: support loading library members on AIX in os::dll_load

Reviewed-by: mdoerr

You can use pull request commands such as /summary, /contributor and /issue to adjust it as needed.

At the time when this comment was updated there had been 61 new commits pushed to the master branch:

  • 028b3ae: 8313874: JNI NewWeakGlobalRef throws exception for null arg
  • 83adaf5: 8313421: [JVMCI] avoid locking class loader in CompilerToVM.lookupType
  • 35b60f9: 8298095: Refine implSpec for SegmentAllocator
  • 6dba202: 8313670: Simplify shared lib name handling code in some tests
  • 8f28809: 8299790: os::print_hex_dump is racy
  • e080a0b: 8311508: ZGC: RAII use of IntelJccErratumAlignment
  • 242a2e6: 8308843: Generational ZGC: Remove gc/z/TestHighUsage.java
  • c822183: 8313768: Reduce interaction with volatile field in j.u.l.StreamHandler
  • cd16158: 8314075: Update JCov version for JDK 22
  • c307391: 8307184: Incorrect/inconsistent specification and implementation for Elements.getDocComment
  • ... and 51 more: https://git.openjdk.org/jdk/compare/e8a37b90db8dca4dc3653970b2d66d2faf8ef452...master

As there are no conflicts, your changes will automatically be rebased on top of these commits when integrating. If you prefer to avoid this automatic rebasing, please check the documentation for the /integrate command for further details.

➡️ To integrate this PR with the above commit message to the master branch, type /integrate in a new comment.

@openjdk openjdk bot added the ready Pull request is ready to be integrated label Aug 9, 2023
Copy link
Contributor

@JoKern65 JoKern65 left a comment

Choose a reason for hiding this comment

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

Looks OK. I also would use RTLD_LAZY, that's fine.

@MBaesken
Copy link
Member Author

Hi Martin and Joachim, thanks for the reviews !

/integrate

@openjdk
Copy link

openjdk bot commented Aug 10, 2023

Going to push as commit 23fe2ec.
Since your change was applied there have been 63 commits pushed to the master branch:

  • f47767f: 8313882: Fix -Wconversion warnings in runtime code
  • 0cb9ab0: 8313239: InetAddress.getCanonicalHostName may return ip address if reverse lookup fails
  • 028b3ae: 8313874: JNI NewWeakGlobalRef throws exception for null arg
  • 83adaf5: 8313421: [JVMCI] avoid locking class loader in CompilerToVM.lookupType
  • 35b60f9: 8298095: Refine implSpec for SegmentAllocator
  • 6dba202: 8313670: Simplify shared lib name handling code in some tests
  • 8f28809: 8299790: os::print_hex_dump is racy
  • e080a0b: 8311508: ZGC: RAII use of IntelJccErratumAlignment
  • 242a2e6: 8308843: Generational ZGC: Remove gc/z/TestHighUsage.java
  • c822183: 8313768: Reduce interaction with volatile field in j.u.l.StreamHandler
  • ... and 53 more: https://git.openjdk.org/jdk/compare/e8a37b90db8dca4dc3653970b2d66d2faf8ef452...master

Your commit was automatically rebased without conflicts.

@openjdk openjdk bot added the integrated Pull request has been integrated label Aug 10, 2023
@openjdk openjdk bot closed this Aug 10, 2023
@openjdk openjdk bot removed ready Pull request is ready to be integrated rfr Pull request is ready for review labels Aug 10, 2023
@openjdk
Copy link

openjdk bot commented Aug 10, 2023

@MBaesken Pushed as commit 23fe2ec.

💡 You may see a message that your pull request was closed with unmerged commits. This can be safely ignored.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
hotspot-runtime hotspot-runtime-dev@openjdk.org integrated Pull request has been integrated
3 participants