Spec-Zone.ru › OpenJDK 21

Интерфейс Linker.Option

Вложенный интерфейс:
LinkerPREVIEW
public static sealed interface Linker.Option
Option — это предварительный API платформы Java.
Программы могут использовать Option только при включенных предварительных функциях.
Предварительные функции могут быть удалены в будущих релизах или обновлены до постоянных функций платформы Java.
Опция линковщика используется для предоставления дополнительных параметров запросу линковки.
С:
20

Краткое описание методов

Модификатор и тип Метод Описание
static Linker.OptionPREVIEW captureCallState(String... capturedState)
Возвращает опцию линковщика, используемую для сохранения частей состояния выполнения сразу после вызова внешней функции, связанной с обработчиком метода вызова вниз, прежде чем оно может быть перезаписано платформой Java или считано обычными средствами.
static StructLayoutPREVIEW captureStateLayout()
Возвращает макет структуры, представляющий макет сегмента состояния захвата, который передается обработчику вызова вниз, связанному с captureCallState(String...).
static Linker.OptionPREVIEW firstVariadicArg(int index)
Возвращает опцию линковщика, используемую для обозначения индекса, указывающего начало аргументов с переменным числом, переданных функции, описанной функцией-описателем, связанной с запросом линковки вызова вниз.
static Linker.OptionPREVIEW isTrivial()
Возвращает опцию линковщика, используемую для обозначения внешней функции как тривиальной.

Подробное описание методов

firstVariadicArg

static Linker.OptionPREVIEW firstVariadicArg(int index)
Возвращает опцию линковщика, используемую для обозначения индекса, указывающего начало аргументов с переменным числом, переданных функции, описанной функцией-описателем, связанной с запросом линковки вызова вниз.

Значение index должно соответствовать 0 <= index <= N, где N — количество макетов аргументов функции-описателя, используемых совместно с этой опцией линковщика. Когда index:

  • 0, все аргументы, передаваемые функции, передаются как аргументы с переменным числом
  • N, ни один из аргументов, передаваемых функции, не передаётся как аргументы с переменным числом
  • n, где 0 < m < N, аргументы m..N передаются как аргументы с переменным числом
Важно всегда использовать эту опцию линковщика при линковке функции с переменным числом аргументов, даже если не передаётся ни один аргумент с переменным числом (второй случай в списке выше), так как это может повлиять на соглашение о вызове на определённых платформах.
Примечание реализации:
Значение индекса проверяется при выполнении запроса линковки, когда доступна функция-описатель, относительно которой проверяется индекс.
Параметры:
index — индекс макета первого аргумента с переменным числом в функции-описателе, связанной с запросом линковки вызова вниз.
Возвращает:
опцию линковщика, используемую для обозначения индекса, указывающего начало аргументов с переменным числом, переданных функции, описанной функцией-описателем, связанной с запросом линковки вызова вниз

captureCallState

static Linker.OptionPREVIEW captureCallState(String... capturedState)
Возвращает опцию линковщика, используемую для сохранения частей состояния выполнения сразу после вызова внешней функции, связанной с обработчиком метода вызова вниз, прежде чем оно может быть перезаписано платформой Java или считано обычными средствами.

Состояние выполнения захватывается обработчиком метода вызова вниз при вызове, записывая его в нативный сегмент, предоставленный пользователем обработчику метода вызова вниз. В этих целях обработчик метода вызова вниз, связанный с этой опцией, будет содержать дополнительный параметр MemorySegmentПРЕДПРОСМОТР непосредственно после целевого адреса и необязательные параметры SegmentAllocatorПРЕДПРОСМОТР. Этот параметр, сегмент состояния захвата, представляет собой нативный сегмент, в который записывается захваченное состояние.

Сегмент состояния захвата должен иметь размер и выравнивание, совместимые с макетом, возвращаемым captureStateLayout(). Этот макет — это макет структуры, имеющий именованное поле для каждого захваченного значения.

Захваченное состояние можно извлечь из сегмента состояния захвата, создав обработчики переменных из макета состояния захвата.

Следующий пример демонстрирует использование этой опции линковщика:

MemorySegment targetAddress = ...
Linker.Option ccs = Linker.Option.captureCallState("errno");
MethodHandle handle = Linker.nativeLinker().downcallHandle(targetAddress, FunctionDescriptor.ofVoid(), ccs);

StructLayout capturedStateLayout = Linker.Option.captureStateLayout();
VarHandle errnoHandle = capturedStateLayout.varHandle(PathElement.groupElement("errno"));
try (Arena arena = Arena.ofConfined()) {
    MemorySegment capturedState = arena.allocate(capturedStateLayout);
    handle.invoke(capturedState);
    int errno = (int) errnoHandle.get(capturedState);
    // use errno
}
Параметры:
capturedState — имена значений для сохранения.
Возвращает:
опцию линковщика, используемую для сохранения частей состояния выполнения сразу после вызова внешней функции, связанной с обработчиком метода вызова вниз, прежде чем оно может быть перезаписано платформой Java или считано обычными средствами
Исключение:
IllegalArgumentException — если хотя бы одно из предоставленных capturedState имён не поддерживается на текущей платформе.
См. также:
  • captureStateLayout()

captureStateLayout

static StructLayoutPREVIEW captureStateLayout()
Возвращает макет структуры, представляющий макет сегмента состояния захвата, который передается обработчику вызова вниз, связанному с captureCallState(String...).

Макет состояния захвата зависит от платформы, но гарантированно является макетом структурыПРЕДПРОСМОТР, содержащим только макеты значенийПРЕДПРОСМОТР и, возможно, макеты заполненияПРЕДПРОСМОТР. Например, на Windows возвращаемый макет может содержать три макета значений с именами:

  • GetLastError
  • WSAGetLastError
  • errno

Клиенты могут получить имена поддерживаемых макетов захваченных значений следующим образом:

   List<String> capturedNames = Linker.Option.captureStateLayout().memberLayouts().stream()
       .map(MemoryLayout::name)
       .flatMap(Optional::stream)
       .toList();
Возвращает:
макет структуры, представляющий макет сегмента состояния захвата, который передается обработчику вызова вниз, связанному с captureCallState(String...)
См. также:
  • captureCallState(String...)

isTrivial

static Linker.OptionPREVIEW isTrivial()
Возвращает опцию линковщика, используемую для обозначения внешней функции как тривиальной.

Тривиальная функция — это функция, время выполнения которой очень короткое во всех случаях (аналогично вызову пустой функции) и которая не вызывает обратный вызов в Java (например, используя заглушку обратного вызова).

Использование этой опции линковщика — это подсказка, которую некоторые реализации могут использовать для применения оптимизаций, которые допустимы только для тривиальных функций.

Использование этой опции линковщика при линковке нетривиальных функций, вероятно, приведёт к нежелательным последствиям, таким как снижение производительности или сбой JVM.

Возвращает:
опцию линковщика, используемую для обозначения внешней функции как тривиальной

© 1993, 2023, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/foreign/Linker.Option.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API