*** 1,7 *** /* ! * Copyright (c) 2019, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. --- 1,7 --- /* ! * Copyright (c) 2019, 2026, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation.
*** 267,11 *** // | frame::java_abi | // Where f is the frame to be relocated on the heap. | (metadata_words_at_top)|<- SP == unext. SP of new frame // See also StackChunkFrameStream::frame_size(). ========================== // template<typename FKind> ! frame FreezeBase::new_heap_frame(frame& f, frame& caller) { assert(FKind::is_instance(f), ""); intptr_t *sp, *fp; if (FKind::interpreted) { intptr_t locals_offset = *f.addr_at(ijava_idx(locals)); --- 267,11 --- // | frame::java_abi | // Where f is the frame to be relocated on the heap. | (metadata_words_at_top)|<- SP == unext. SP of new frame // See also StackChunkFrameStream::frame_size(). ========================== // template<typename FKind> ! frame FreezeBase::new_heap_frame(frame& f, frame& caller, int size_adjust) { assert(FKind::is_instance(f), ""); intptr_t *sp, *fp; if (FKind::interpreted) { intptr_t locals_offset = *f.addr_at(ijava_idx(locals));
*** 315,11 *** return frame(sp, sp, fp, f.pc(), nullptr, nullptr, true /* on_heap */); } } ! inline void FreezeBase::patch_pd(frame& hf, const frame& caller) { if (caller.is_interpreted_frame()) { assert(!caller.is_empty(), ""); patch_callee_link_relative(caller, caller.fp()); } #ifdef ASSERT --- 315,11 --- return frame(sp, sp, fp, f.pc(), nullptr, nullptr, true /* on_heap */); } } ! inline void FreezeBase::patch_pd(frame& hf, const frame& caller, bool is_bottom_frame) { if (caller.is_interpreted_frame()) { assert(!caller.is_empty(), ""); patch_callee_link_relative(caller, caller.fp()); } #ifdef ASSERT
*** 501,11 *** // If the new frame is at the bottom just above the ContinuationEntry frame then the stackargs // don't overlap the caller either even though it is compiled because the size is not // limited/known. In contrast to the interpreted caller case the abi overlaps with the caller // if there are no stackargs. This is to comply with shared code (see e.g. StackChunkFrameStream::frame_size()) // ! template<typename FKind> frame ThawBase::new_stack_frame(const frame& hf, frame& caller, bool bottom) { assert(FKind::is_instance(hf), ""); assert(is_aligned(caller.fp(), frame::frame_alignment), PTR_FORMAT, p2i(caller.fp())); // caller.sp() can be unaligned. This is fixed below. if (FKind::interpreted) { --- 501,11 --- // If the new frame is at the bottom just above the ContinuationEntry frame then the stackargs // don't overlap the caller either even though it is compiled because the size is not // limited/known. In contrast to the interpreted caller case the abi overlaps with the caller // if there are no stackargs. This is to comply with shared code (see e.g. StackChunkFrameStream::frame_size()) // ! template<typename FKind> frame ThawBase::new_stack_frame(const frame& hf, frame& caller, bool bottom, int size_adjust) { assert(FKind::is_instance(hf), ""); assert(is_aligned(caller.fp(), frame::frame_alignment), PTR_FORMAT, p2i(caller.fp())); // caller.sp() can be unaligned. This is fixed below. if (FKind::interpreted) {