[foreign-memaccess] RFR: 8249879: Split MemorySegment and MemoryAddress

Maurizio Cimadamore mcimadamore at openjdk.java.net
Wed Jul 22 16:41:30 UTC 2020


This patch splits, as the title suggests, the memory segment abstraction from the memory address abstraction, as
described in this email:

https://mail.openjdk.java.net/pipermail/panama-dev/2020-July/009928.html

Aside from the obvious updates to the two interfaces (and their implementation), this patch greatly simplifies the way
memory access var handles are generated; instead of spinning them on the fly (see `MemoryAccessVarHandleGenerator`,
which is now removed) now all var handles can be derived from a primitive from which takes a segment and a byte offset.
This caused the removal of several methods in the `JavaLangInvokeAccess` interface.

The new memory segment interface has some more methods to perform slicing - which can basically be used to give a new
base to an existing segment and can therefore be used in a lot of cases as a replacement for `MemoryAddress::addOffset`.

The memory address interface is simplified, and features an additional `segmentOffset` method, which returns the byte
offset of an address relative to the given segment (this is similar to the old `MemorySegment::rebase` method, which is
now removed).

The `MemoryAccess` class needed a lot of tweaks in the various signatures, to take a segment instead of a base address.

I tried to update the documentation as best as I could, but it's possible I missed some references to the old
relationship between segment and addresses, please double check.

Of course integrating this patch is gonna cause issues in foreign-abi and foreign-jextract, as these branches make
(heavy) use of memory access var handles. I suspect that integration will trigger a merge failure, so we can fix
followup issues as part of the merge process, so that we can guarantee that all the branches remain buildable.

-------------

Commit messages:
 - Revert changes to Utils
 - Fix javadoc in MemoryAccess and MemoryLayout
 - Initial push

Changes: https://git.openjdk.java.net/panama-foreign/pull/260/files
 Webrev: https://webrevs.openjdk.java.net/panama-foreign/260/webrev.00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8249879
  Stats: 2653 lines in 42 files changed: 221 ins; 1004 del; 1428 mod
  Patch: https://git.openjdk.java.net/panama-foreign/pull/260.diff
  Fetch: git fetch https://git.openjdk.java.net/panama-foreign pull/260/head:pull/260

PR: https://git.openjdk.java.net/panama-foreign/pull/260


More information about the panama-dev mailing list