8326891: Prefer RPATH over RUNPATH for $ORIGIN rpaths in internal JDK binaries

Reviewed-by: ihse, dholmes
This commit is contained in:
Erik Joelsson 2024-03-05 20:31:17 +00:00
parent 809995b526
commit 721bfee53a
2 changed files with 19 additions and 14 deletions

View File

@ -28,7 +28,7 @@
# Setup flags for C/C++ compiler
#
###############################################################################
################################################################################
#
# How to compile shared libraries.
#
@ -37,7 +37,10 @@ AC_DEFUN([FLAGS_SETUP_SHARED_LIBS],
if test "x$TOOLCHAIN_TYPE" = xgcc; then
# Default works for linux, might work on other platforms as well.
SHARED_LIBRARY_FLAGS='-shared'
SET_EXECUTABLE_ORIGIN='-Wl,-rpath,\$$ORIGIN[$]1'
# --disable-new-dtags forces use of RPATH instead of RUNPATH for rpaths.
# This protects internal library dependencies within the JDK from being
# overridden using LD_LIBRARY_PATH. See JDK-8326891 for more information.
SET_EXECUTABLE_ORIGIN='-Wl,-rpath,\$$ORIGIN[$]1 -Wl,--disable-new-dtags'
SET_SHARED_LIBRARY_ORIGIN="-Wl,-z,origin $SET_EXECUTABLE_ORIGIN"
SET_SHARED_LIBRARY_NAME='-Wl,-soname=[$]1'
@ -60,6 +63,9 @@ AC_DEFUN([FLAGS_SETUP_SHARED_LIBS],
# Default works for linux, might work on other platforms as well.
SHARED_LIBRARY_FLAGS='-shared'
SET_EXECUTABLE_ORIGIN='-Wl,-rpath,\$$ORIGIN[$]1'
if test "x$OPENJDK_TARGET_OS" = xlinux; then
SET_EXECUTABLE_ORIGIN="$SET_EXECUTABLE_ORIGIN -Wl,--disable-new-dtags"
fi
SET_SHARED_LIBRARY_NAME='-Wl,-soname=[$]1'
# arm specific settings

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2012, 2020, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2012, 2024, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -24,7 +24,8 @@
/*
* @test
* @bug 7190813 8022719
* @summary Check for extended RPATHs on *nixes
* @summary Check for extended RPATHs on Linux
* @requires os.family == "linux"
* @compile -XDignore.symbol.file RunpathTest.java
* @run main RunpathTest
* @author ksrini
@ -57,25 +58,23 @@ public class RunpathTest extends TestHelper {
final TestResult tr = doExec(elfreaderCmd, "-d", javacmd);
if (!tr.matches(expectedRpath)) {
System.out.println(tr);
throw new RuntimeException("FAILED: RPATH/RUNPATH strings " +
throw new RuntimeException("FAILED: RPATH strings " +
expectedRpath + " not found in " + javaCmd);
}
System.out.println(javacmd + " contains expected RPATHS/RUNPATH");
System.out.println(javacmd + " contains expected RPATHS");
}
void testRpath() {
String expectedRpath = ".*R(UN)?PATH.*\\$ORIGIN/../lib.*";
String expectedRpath = ".*RPATH.*\\$ORIGIN/../lib.*";
elfCheck(javaCmd, expectedRpath);
}
public static void main(String... args) throws Exception {
if (isLinux) {
RunpathTest rp = new RunpathTest();
if (rp.elfreaderCmd == null) {
System.err.println("Warning: test passes vacuously");
return;
}
rp.testRpath();
RunpathTest rp = new RunpathTest();
if (rp.elfreaderCmd == null) {
System.err.println("Warning: test passes vacuously");
return;
}
rp.testRpath();
}
}