-
Bug
-
Resolution: Not an Issue
-
P4
-
None
-
21
-
aarch64
-
os_x
ADDITIONAL SYSTEM INFORMATION :
uname -a
Darwin Scotts-MacBook-Pro.local 21.6.0 Darwin Kernel Version 21.6.0: Thu Mar 9 20:12:18 PST 2023; root:xnu-8020.240.18.700.8~1/RELEASE_ARM64_T8110 arm64
$JAVA_HOME/bin/java --version
openjdk 21-ea 2023-09-19
OpenJDK Runtime Environment (build 21-ea+20-1677)
OpenJDK 64-Bit Server VM (build 21-ea+20-1677, mixed mode, sharing)
A DESCRIPTION OF THE PROBLEM :
A test program that calls the c library printf function with a string with an int %d format fails to handle the int argument correctly.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
1. $JAVA_HOME/bin/javac -g -d out --release 21 --enable-preview Printf.java
2. $JAVA_HOME/bin/java -cp out --enable-preview --enable-native-access=ALL-UNNAMED Printf
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
$JAVA_HOME/bin/java -cp out --enable-preview --enable-native-access=ALL-UNNAMED Printf
Java version: 21
Java FFM call to printf 21
cprintf rtn: 27
ACTUAL -
$JAVA_HOME/bin/java -cp out --enable-preview --enable-native-access=ALL-UNNAMED Printf
Java version: 21
Java FFM call to printf 1874110304
cprintf rtn: 35
---------- BEGIN SOURCE ----------
import java.lang.foreign.*;
import java.lang.invoke.MethodHandle;
import java.util.Optional;
import static java.lang.foreign.ValueLayout.ADDRESS;
import static java.lang.foreign.ValueLayout.JAVA_INT;
public class Printf {
public static void main(String[] args) throws Throwable {
Linker linker = Linker.nativeLinker();
Optional<MemorySegment> optPrintfMS = linker.defaultLookup().find("printf");
MemorySegment printfMS = optPrintfMS.orElseThrow();
MethodHandle printf = linker.downcallHandle(printfMS, FunctionDescriptor.of(JAVA_INT, ADDRESS, JAVA_INT));
int version = Integer.getInteger("java.specification.version");
System.out.printf("Java version: %d\n", version);
try(Arena offHeap = Arena.openConfined()) {
MemorySegment formatStr = offHeap.allocateUtf8String("Java FFM call to printf %d\n");
int rtn = (int) printf.invoke(formatStr, version);
System.out.printf("cprintf rtn: %d\n", rtn);
}
}
}
---------- END SOURCE ----------
FREQUENCY : always
uname -a
Darwin Scotts-MacBook-Pro.local 21.6.0 Darwin Kernel Version 21.6.0: Thu Mar 9 20:12:18 PST 2023; root:xnu-8020.240.18.700.8~1/RELEASE_ARM64_T8110 arm64
$JAVA_HOME/bin/java --version
openjdk 21-ea 2023-09-19
OpenJDK Runtime Environment (build 21-ea+20-1677)
OpenJDK 64-Bit Server VM (build 21-ea+20-1677, mixed mode, sharing)
A DESCRIPTION OF THE PROBLEM :
A test program that calls the c library printf function with a string with an int %d format fails to handle the int argument correctly.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
1. $JAVA_HOME/bin/javac -g -d out --release 21 --enable-preview Printf.java
2. $JAVA_HOME/bin/java -cp out --enable-preview --enable-native-access=ALL-UNNAMED Printf
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
$JAVA_HOME/bin/java -cp out --enable-preview --enable-native-access=ALL-UNNAMED Printf
Java version: 21
Java FFM call to printf 21
cprintf rtn: 27
ACTUAL -
$JAVA_HOME/bin/java -cp out --enable-preview --enable-native-access=ALL-UNNAMED Printf
Java version: 21
Java FFM call to printf 1874110304
cprintf rtn: 35
---------- BEGIN SOURCE ----------
import java.lang.foreign.*;
import java.lang.invoke.MethodHandle;
import java.util.Optional;
import static java.lang.foreign.ValueLayout.ADDRESS;
import static java.lang.foreign.ValueLayout.JAVA_INT;
public class Printf {
public static void main(String[] args) throws Throwable {
Linker linker = Linker.nativeLinker();
Optional<MemorySegment> optPrintfMS = linker.defaultLookup().find("printf");
MemorySegment printfMS = optPrintfMS.orElseThrow();
MethodHandle printf = linker.downcallHandle(printfMS, FunctionDescriptor.of(JAVA_INT, ADDRESS, JAVA_INT));
int version = Integer.getInteger("java.specification.version");
System.out.printf("Java version: %d\n", version);
try(Arena offHeap = Arena.openConfined()) {
MemorySegment formatStr = offHeap.allocateUtf8String("Java FFM call to printf %d\n");
int rtn = (int) printf.invoke(formatStr, version);
System.out.printf("cprintf rtn: %d\n", rtn);
}
}
}
---------- END SOURCE ----------
FREQUENCY : always
- links to
-
Review openjdk/jdk/14088