< prev index next > src/jdk.incubator.foreign/share/classes/jdk/internal/foreign/abi/x64/sysv/SysVVaList.java
Print this page
import jdk.incubator.foreign.GroupLayout;
import jdk.incubator.foreign.MemoryAddress;
import jdk.incubator.foreign.MemoryHandles;
import jdk.incubator.foreign.MemoryLayout;
import jdk.incubator.foreign.MemorySegment;
- import jdk.internal.foreign.AbstractMemorySegmentImpl;
import jdk.internal.foreign.NativeMemorySegmentImpl;
import jdk.internal.foreign.Utils;
import jdk.internal.foreign.abi.SharedUtils;
import java.lang.invoke.VarHandle;
import java.lang.ref.Cleaner;
import java.nio.ByteOrder;
import java.util.ArrayList;
import jdk.incubator.foreign.GroupLayout;
import jdk.incubator.foreign.MemoryAddress;
import jdk.incubator.foreign.MemoryHandles;
import jdk.incubator.foreign.MemoryLayout;
import jdk.incubator.foreign.MemorySegment;
import jdk.internal.foreign.NativeMemorySegmentImpl;
import jdk.internal.foreign.Utils;
import jdk.internal.foreign.abi.SharedUtils;
+ import jdk.internal.misc.Unsafe;
import java.lang.invoke.VarHandle;
import java.lang.ref.Cleaner;
import java.nio.ByteOrder;
import java.util.ArrayList;
import static jdk.internal.foreign.abi.SharedUtils.checkCompatibleType;
import static jdk.internal.foreign.abi.SharedUtils.vhPrimitiveOrAddress;
// See https://software.intel.com/sites/default/files/article/402129/mpx-linux64-abi.pdf "3.5.7 Variable Argument Lists"
public class SysVVaList implements VaList {
+ private static final Unsafe U = Unsafe.getUnsafe();
+
static final Class<?> CARRIER = MemoryAddress.class;
// struct typedef __va_list_tag __va_list_tag {
// unsigned int gp_offset; /* 0 4 */
// unsigned int fp_offset; /* 4 4 */
regSaveArea = regSaveArea();
slices.add(regSaveArea);
}
private static MemoryAddress emptyListAddress() {
! MemorySegment ms = MemorySegment.allocateNative(LAYOUT);
cleaner.register(SysVVaList.class, ms::close);
MemoryAddress base = ms.baseAddress();
VH_gp_offset.set(base, MAX_GP_OFFSET);
VH_fp_offset.set(base, MAX_FP_OFFSET);
VH_overflow_arg_area.set(base, MemoryAddress.NULL);
regSaveArea = regSaveArea();
slices.add(regSaveArea);
}
private static MemoryAddress emptyListAddress() {
! long ptr = U.allocateMemory(LAYOUT.byteSize());
+ MemorySegment ms = NativeMemorySegmentImpl.makeNativeSegmentUnchecked(
+ MemoryAddress.ofLong(ptr), LAYOUT.byteSize(), null, () -> U.freeMemory(ptr), null);
cleaner.register(SysVVaList.class, ms::close);
MemoryAddress base = ms.baseAddress();
VH_gp_offset.set(base, MAX_GP_OFFSET);
VH_fp_offset.set(base, MAX_FP_OFFSET);
VH_overflow_arg_area.set(base, MemoryAddress.NULL);
< prev index next >