History

Implemented basic native shell - takes compiled Command modules Defined shell Command module - should be implemented to pass modules to native shell Updated intrinsic type descriptors so they are not allocated on VM load

arr committed 10 years ago

Commit 330522f1 parent 8506dc611 files · +251 −139Browse files

Showing the changes to src/vm/stack.cpp (1 of 11 files). Show all

Unified · Split

src/vm/stack.cpp+15−11
@@ -19,7 +19,7 @@ namespace · 18 unmodified lines
1919 struct vm_stack_page
2020 {
2121 vm_stack_page *prev_page;
22− uintptr_t page_limit_addr;
22+ std::uintptr_t page_limit_addr;
2323 vm_frame_t *page_top_frame; // Do not free. This is used as a tracking pointer.
2424
2525 void *stack_data() const
@@ -30,7 +30,7 @@ namespace · 4 unmodified lines
3030
3131 bool contains_frame(const vm_frame_t *frame) const
3232 {
33− return reinterpret_cast<uintptr_t>(stack_data()) <= reinterpret_cast<uintptr_t>(frame) && reinterpret_cast<uintptr_t>(frame) < page_limit_addr;
33+ return reinterpret_cast<std::uintptr_t>(stack_data()) <= reinterpret_cast<std::uintptr_t>(frame) && reinterpret_cast<std::uintptr_t>(frame) < page_limit_addr;
3434 }
3535 };
3636
@@ -66,16 +66,17 @@ namespace · 29 unmodified lines
6666 void *new_page()
6767 {
6868 auto current_stack_page = top_page;
69− top_page = alloc_memory<vm_stack_page>(sizeof(vm_stack_page) + stack_page_size);
69+ top_page = calloc_memory<vm_stack_page>(sizeof(vm_stack_page) + stack_page_size);
7070
7171 // Initialize the stack allocation.
7272 top_page->prev_page = current_stack_page;
7373
7474 // The top frame member is only for tracking and so is initialized to null.
7575 top_page->page_top_frame = nullptr;
76− top_page->page_limit_addr = reinterpret_cast<uintptr_t>(top_page)+stack_page_size;
76+ top_page->page_limit_addr = reinterpret_cast<std::uintptr_t>(top_page)+stack_page_size;
7777
78− debug::log_msg(debug::component_trace_t::memory, debug::log_level_t::debug, "alloc: vm stack alloc: %#" PRIxPTR " %#" PRIxPTR "\n", top_page, top_page->page_limit_addr);
78+ if (debug::is_component_tracing_enabled<debug::component_trace_t::memory>())
79+ debug::log_msg(debug::component_trace_t::memory, debug::log_level_t::debug, "alloc: vm stack alloc: %#" PRIxPTR " %#" PRIxPTR "\n", top_page, top_page->page_limit_addr);
7980
8081 return top_page->stack_data();
8182 }
@@ -87,7 +88,9 @@ namespace · 5 unmodified lines
8788 assert(current_stack_page != nullptr);
8889
8990 free_memory(top_page);
90− debug::log_msg(debug::component_trace_t::memory, debug::log_level_t::debug, "free: vm stack alloc\n");
91+
92+ if (debug::is_component_tracing_enabled<debug::component_trace_t::memory>())
93+ debug::log_msg(debug::component_trace_t::memory, debug::log_level_t::debug, "free: vm stack alloc\n");
9194
9295 // Set the top page
9396 top_page = current_stack_page;
@@ -158,7 +161,7 @@ vm_module_ref_t *&vm_frame_t::prev_module_ref() const · 64 unmodified lines
158161
159162 pointer_t vm_frame_t::fixed_point_register_1() const
160163 {
161− const auto offset = runtime_constants::fixed_point_register_1_frame_offset;
164+ const auto offset = vm_frame_constants::fixed_point_register_1_frame_offset;
162165 assert(offset < frame_type->size_in_bytes);
163166
164167 auto p = reinterpret_cast<uint8_t *>(base()) + offset;
@@ -167,7 +170,7 @@ pointer_t vm_frame_t::fixed_point_register_1() const · 2 unmodified lines
167170
168171 pointer_t vm_frame_t::fixed_point_register_2() const
169172 {
170− const auto offset = runtime_constants::fixed_point_register_2_frame_offset;
173+ const auto offset = vm_frame_constants::fixed_point_register_2_frame_offset;
171174 assert(offset < frame_type->size_in_bytes);
172175
173176 auto p = reinterpret_cast<uint8_t *>(base()) + offset;
@@ -210,16 +213,17 @@ vm_frame_t *vm_stack_t::alloc_frame(std::shared_ptr<const type_descriptor_t> fra · 36 unmodified lines
210213 vm_frame_t *new_frame;
211214 if (page_top_frame == nullptr)
212215 {
213− new_frame = ::new(layout->top_page->stack_data())vm_frame_t{ frame_type };
216+ auto new_frame_addr = layout->top_page->stack_data();
217+ new_frame = ::new(new_frame_addr)vm_frame_t{ frame_type };
214218 }
215219 else
216220 {
217− auto current_page_top_frame_addr = reinterpret_cast<std::size_t>(page_top_frame);
221+ auto current_page_top_frame_addr = reinterpret_cast<std::uintptr_t>(page_top_frame);
218222 auto new_frame_addr_maybe = current_page_top_frame_addr + (sizeof(vm_frame_t) + page_top_frame->frame_type->size_in_bytes);
219223
220224 // If the new frame is not going to fit on the current page, create a new page.
221225 if ((new_frame_addr_maybe + new_frame_size) >= layout->top_page->page_limit_addr)
222− new_frame_addr_maybe = reinterpret_cast<uintptr_t>(layout->new_page());
226+ new_frame_addr_maybe = reinterpret_cast<std::uintptr_t>(layout->new_page());
223227
224228 new_frame = ::new(reinterpret_cast<void *>(new_frame_addr_maybe))vm_frame_t{ frame_type };
225229 }