Skip to content

Commit

Permalink
Merge pull request #1642 from matthiasblaesing/android-fix-16k
Browse files Browse the repository at this point in the history
Fix calls to jnidispatch on Android with 16KB page size
  • Loading branch information
matthiasblaesing authored Dec 16, 2024
2 parents 3befd7f + e62279f commit d1bef49
Show file tree
Hide file tree
Showing 11 changed files with 29 additions and 13 deletions.
1 change: 1 addition & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ Features

Bug Fixes
---------
* [#1618](https://github.com/java-native-access/jna/issues/1618): Fix calls to jnidispatch on Android with 16KB page size - [@Thomyrock](https://github.com/Thomyrock)

Release 5.15.0
==============
Expand Down
2 changes: 1 addition & 1 deletion common.xml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
<!-- jnidispatch library release version -->
<property name="jni.major" value="7"/>
<property name="jni.minor" value="0"/>
<property name="jni.revision" value="2"/>
<property name="jni.revision" value="3"/>
<property name="jni.build" value="0"/> <!--${build.number}-->
<property name="jni.version" value="${jni.major}.${jni.minor}.${jni.revision}"/>
<property name="jni.md5" value="5fb98531302accd485c534c452dd952a"/>
Expand Down
35 changes: 25 additions & 10 deletions contrib/platform/test/com/sun/jna/platform/linux/UdevTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@
import com.sun.jna.platform.linux.Udev.UdevDevice;
import com.sun.jna.platform.linux.Udev.UdevEnumerate;
import com.sun.jna.platform.linux.Udev.UdevListEntry;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import junit.framework.TestCase;

Expand All @@ -37,6 +39,8 @@
*/
public class UdevTest extends TestCase {

private static final Pattern SCSI_DISK_PATTERN = Pattern.compile(".*/sd[a-z](\\d+)$");

@Test
public void testEnumerateDevices() {
// Start with the context object
Expand Down Expand Up @@ -74,29 +78,40 @@ public void testEnumerateDevices() {
// No additional reference is acquired from getParent
if (parent != null && parent2 != null) {
// Devnode should match same parent without restricting to block and disk
assertEquals("Partition parent should match with and without filter",
assertEquals(String.format(
"Partition parent should match with and without filter (%s)",
devnode
),
parent.getDevnode(), parent2.getDevnode());
// Save the size and major
parentSize = parent.getSysattrValue("size");
parentMajor = parent.getPropertyValue("MAJOR");
}
}
String size = device.getSysattrValue("size");
assertTrue("Size must be nonnegative", 0 <= Long.parseLong(size));
assertTrue(String.format("Size must be nonnegative (%s)", devnode), 0 <= Long.parseLong(size));
if (parentSize != null) {
assertTrue("Partition can't be bigger than its disk",
assertTrue(String.format("Partition can't be bigger than its disk (%s)", devnode),
Long.parseLong(size) <= Long.parseLong(parentSize));
}
String major = device.getPropertyValue("MAJOR");
assertTrue("Major value must be nonnegative", 0 <= Long.parseLong(major));
assertTrue(String.format("Major value must be nonnegative (%s)", devnode), 0 <= Long.parseLong(major));
if (parentMajor != null) {
assertEquals("Partition and its parent disk should have same major number", major,
parentMajor);
// For scsi disks only the first 15 Partitions have the
// same major as their disk
Matcher scsiMatcher = SCSI_DISK_PATTERN.matcher(devnode);
boolean scsiDiskDynamicMinor = scsiMatcher.matches() && Integer.parseInt(scsiMatcher.group(1)) > 15;
if(! scsiDiskDynamicMinor) {
assertEquals(
String.format("Partition and its parent disk should have same major number (%s)", devnode),
major, parentMajor
);
}
}
assertEquals("DevType mismatch", devType, device.getDevtype());
assertEquals("Subsystem mismatch", "block", device.getSubsystem());
assertEquals("Syspath mismatch", syspath, device.getSyspath());
assertTrue("Syspath should end with name", syspath.endsWith(device.getSysname()));
assertEquals(String.format("DevType mismatch (%s)", devnode), devType, device.getDevtype());
assertEquals(String.format("Subsystem mismatch (%s)", devnode), "block", device.getSubsystem());
assertEquals(String.format("Syspath mismatch (%s)", devnode), syspath, device.getSyspath());
assertTrue(String.format("Syspath should end with name (%s)", devnode), syspath.endsWith(device.getSysname()));
}
} finally {
// Release the reference and iterate to the next device
Expand Down
Binary file modified lib/native/android-aarch64.jar
Binary file not shown.
Binary file modified lib/native/android-arm.jar
Binary file not shown.
Binary file modified lib/native/android-armv7.jar
Binary file not shown.
Binary file modified lib/native/android-mips.jar
Binary file not shown.
Binary file modified lib/native/android-mips64.jar
Binary file not shown.
Binary file modified lib/native/android-x86-64.jar
Binary file not shown.
Binary file modified lib/native/android-x86.jar
Binary file not shown.
4 changes: 2 additions & 2 deletions native/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -176,12 +176,12 @@ CPP=$(PREFIX)cpp
LD=$(CC)
RANLIB=$(PREFIX)ranlib
STRIP=$(PREFIX)strip -x
CDEFINES=-DFFI_STATIC_BUILD -DNO_JAWT -DNO_WEAK_GLOBALS -DFFI_MMAP_EXEC_WRIT=1 -DFFI_MMAP_EXEC_SELINUX=0
CDEFINES=-DFFI_STATIC_BUILD -DNO_JAWT -DNO_WEAK_GLOBALS -DFFI_MMAP_EXEC_WRIT=1 -DFFI_MMAP_EXEC_SELINUX=0 -Dmalloc_getpagesize='getpagesize()'
COPT+=-fpic -ffunction-sections -funwind-tables -fno-short-enums
JAVA_INCLUDES=
CINCLUDES+=-I"$(NDK_PLATFORM)/arch-$(AARCH)/usr/include" # -I/usr/include
LIBS=-nostdlib -L"$(NDK_PLATFORM)/arch-$(AARCH)$(ALIBDIR)/" -lgcc -lc -ldl -lm
LDFLAGS+=-Wl,-shared,-Bsymbolic -Wl,--build-id=sha1
LDFLAGS+=-Wl,-shared,-Bsymbolic -Wl,--build-id=sha1 -Wl,-z,max-page-size=16384
FFI_ENV=CPP="$(CPP)" CC="$(CC)" CFLAGS="$(COPT) $(CDEBUG) $(CINCLUDES)" CPPFLAGS="$(CDEFINES) $(CINCLUDES)" LIBS="$(LIBS)" RANLIB="$(RANLIB)"
FFI_CONFIG=--enable-static --disable-shared --with-pic=yes --host=$(HOST)
endif
Expand Down

0 comments on commit d1bef49

Please sign in to comment.