< prev index next >

src/jdk.incubator.foreign/share/classes/jdk/internal/foreign/abi/x64/sysv/SysVVaList.java

Print this page

122     private final MemorySegment segment;
123     private final List<MemorySegment> slices = new ArrayList<>();
124     private final MemorySegment regSaveArea;
125 
126     SysVVaList(MemorySegment segment) {
127         this.segment = segment;
128         regSaveArea = regSaveArea();
129         slices.add(regSaveArea);
130     }
131 
132     private static MemoryAddress emptyListAddress() {
133         long ptr = U.allocateMemory(LAYOUT.byteSize());
134         MemorySegment ms = NativeMemorySegmentImpl.makeNativeSegmentUnchecked(
135                 MemoryAddress.ofLong(ptr), LAYOUT.byteSize(), null, () -> U.freeMemory(ptr), null);
136         cleaner.register(SysVVaList.class, ms::close);
137         MemoryAddress base = ms.baseAddress();
138         VH_gp_offset.set(base, MAX_GP_OFFSET);
139         VH_fp_offset.set(base, MAX_FP_OFFSET);
140         VH_overflow_arg_area.set(base, MemoryAddress.NULL);
141         VH_reg_save_area.set(base, MemoryAddress.NULL);
142         MemorySegment unconfined = NativeMemorySegmentImpl.makeNativeSegmentUnchecked(
143                 base, ms.byteSize(), null, null, null).withAccessModes(0);
144         return unconfined.baseAddress();
145     }
146 
147     public static CSupport.VaList empty() {
148         return EMPTY;
149     }
150 
151     private int currentGPOffset() {
152         return (int) VH_gp_offset.get(segment.baseAddress());
153     }
154 
155     private void currentGPOffset(int i) {
156         VH_gp_offset.set(segment.baseAddress(), i);
157     }
158 
159     private int currentFPOffset() {
160         return (int) VH_fp_offset.get(segment.baseAddress());
161     }
162 
163     private void currentFPOffset(int i) {
164         VH_fp_offset.set(segment.baseAddress(), i);

122     private final MemorySegment segment;
123     private final List<MemorySegment> slices = new ArrayList<>();
124     private final MemorySegment regSaveArea;
125 
126     SysVVaList(MemorySegment segment) {
127         this.segment = segment;
128         regSaveArea = regSaveArea();
129         slices.add(regSaveArea);
130     }
131 
132     private static MemoryAddress emptyListAddress() {
133         long ptr = U.allocateMemory(LAYOUT.byteSize());
134         MemorySegment ms = NativeMemorySegmentImpl.makeNativeSegmentUnchecked(
135                 MemoryAddress.ofLong(ptr), LAYOUT.byteSize(), null, () -> U.freeMemory(ptr), null);
136         cleaner.register(SysVVaList.class, ms::close);
137         MemoryAddress base = ms.baseAddress();
138         VH_gp_offset.set(base, MAX_GP_OFFSET);
139         VH_fp_offset.set(base, MAX_FP_OFFSET);
140         VH_overflow_arg_area.set(base, MemoryAddress.NULL);
141         VH_reg_save_area.set(base, MemoryAddress.NULL);
142         return ms.withAccessModes(0).baseAddress();


143     }
144 
145     public static CSupport.VaList empty() {
146         return EMPTY;
147     }
148 
149     private int currentGPOffset() {
150         return (int) VH_gp_offset.get(segment.baseAddress());
151     }
152 
153     private void currentGPOffset(int i) {
154         VH_gp_offset.set(segment.baseAddress(), i);
155     }
156 
157     private int currentFPOffset() {
158         return (int) VH_fp_offset.get(segment.baseAddress());
159     }
160 
161     private void currentFPOffset(int i) {
162         VH_fp_offset.set(segment.baseAddress(), i);
< prev index next >