[foreign-memaccess+abi] RFR: 8294970: Add linker option for saving thread-locals that the VM can overwrite

Jorn Vernee jvernee at openjdk.org
Tue Oct 25 15:23:06 UTC 2022


This patch adds a new linker option, called `preserveValue`, that can be used to save thread-local values such as `errno` and `GetLastError` that the VM might overwrite. It takes a list of names of the values to save. Values are saved into a MemorySegment passed by the user, that is allocated according to the layout associated with the returned `PreserveValue` instance.

The API for this is somewhat convoluted, as we have to account for:
 1. a different JVM implementation might not overwrite the same thread-locals, or non at all. Such JVM implementations should be free to support a different set of names to save, or none at all.
 2. it should be possible to save multiple values during a single call.

But, this API is also flexible enough for an implementation to choose any layout it wants for the MemorySegment into which the values are saved. In the current implementation it's just a set of ints, but this could be changed as well.

---------
### Progress
- [x] Change must not contain extraneous whitespace
- [ ] Change must be properly reviewed (1 review required, with at least 1 [Committer](https://openjdk.org/bylaws#committer))



### Reviewing
<details><summary>Using <code>git</code></summary>

Checkout this PR locally: \
`$ git fetch https://git.openjdk.org/panama-foreign pull/742/head:pull/742` \
`$ git checkout pull/742`

Update a local copy of the PR: \
`$ git checkout pull/742` \
`$ git pull https://git.openjdk.org/panama-foreign pull/742/head`

</details>
<details><summary>Using Skara CLI tools</summary>

Checkout this PR locally: \
`$ git pr checkout 742`

View PR using the GUI difftool: \
`$ git pr show -t 742`

</details>
<details><summary>Using diff file</summary>

Download this PR as a diff file: \
<a href="https://git.openjdk.org/panama-foreign/pull/742.diff">https://git.openjdk.org/panama-foreign/pull/742.diff</a>

</details>

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

Commit messages:
 - polish pt2
 - plish javadoc
 - rename rest as well
 - rename save_thread_local -> preserve_value
 - aarch64 support
 - PreserveValue

Changes: https://git.openjdk.org/panama-foreign/pull/742/files
 Webrev: https://webrevs.openjdk.org/?repo=panama-foreign&pr=742&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8294970
  Stats: 579 lines in 26 files changed: 533 ins; 3 del; 43 mod
  Patch: https://git.openjdk.org/panama-foreign/pull/742.diff
  Fetch: git fetch https://git.openjdk.org/panama-foreign pull/742/head:pull/742

PR: https://git.openjdk.org/panama-foreign/pull/742


More information about the panama-dev mailing list