summaryrefslogtreecommitdiff
path: root/misc
diff options
context:
space:
mode:
authorPeter Zhu <peter@peterzhu.ca>2021-08-24 13:14:23 -0400
committerPeter Zhu <peter@peterzhu.ca>2021-08-25 09:28:21 -0400
commit62bc4a9420fa5786d49391a713bd38b09b8db0ff (patch)
tree8becda3ba7ebd4dce1c1da662272088413c99a5b /misc
parentc08d4067be83d03a6fcd173ffd2d206a01d09c90 (diff)
[Feature #18045] Implement size classes for GC
This commits implements size classes in the GC for the Variable Width Allocation feature. Unless `USE_RVARGC` compile flag is set, only a single size class is created, maintaining current behaviour. See the redmine ticket for more details. Co-authored-by: Aaron Patterson <tenderlove@ruby-lang.org>
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/4773
Diffstat (limited to 'misc')
-rwxr-xr-xmisc/lldb_cruby.py7
1 files changed, 4 insertions, 3 deletions
diff --git a/misc/lldb_cruby.py b/misc/lldb_cruby.py
index 1dbdc03eee..8461eea8b3 100755
--- a/misc/lldb_cruby.py
+++ b/misc/lldb_cruby.py
@@ -533,14 +533,15 @@ class HeapPageIter:
self.target = target
self.start = page.GetChildMemberWithName('start').GetValueAsUnsigned();
self.num_slots = page.GetChildMemberWithName('total_slots').unsigned
+ self.slot_size = page.GetChildMemberWithName('size_pool').GetChildMemberWithName('slot_size').unsigned
self.counter = 0
self.tRBasic = target.FindFirstType("struct RBasic")
self.tRValue = target.FindFirstType("struct RVALUE")
def is_valid(self):
heap_page_header_size = self.target.FindFirstType("struct heap_page_header").GetByteSize()
- rvalue_size = self.tRValue.GetByteSize()
- heap_page_obj_limit = int((HEAP_PAGE_SIZE - heap_page_header_size) / rvalue_size)
+ rvalue_size = self.slot_size
+ heap_page_obj_limit = int((HEAP_PAGE_SIZE - heap_page_header_size) / self.slot_size)
return (heap_page_obj_limit - 1) <= self.num_slots <= heap_page_obj_limit
@@ -549,7 +550,7 @@ class HeapPageIter:
def __next__(self):
if self.counter < self.num_slots:
- obj_addr_i = self.start + (self.counter * self.tRValue.GetByteSize())
+ obj_addr_i = self.start + (self.counter * self.slot_size)
obj_addr = lldb.SBAddress(obj_addr_i, self.target)
slot_info = (self.counter, obj_addr_i, self.target.CreateValueFromAddress("object", obj_addr, self.tRBasic))
self.counter += 1