Skip to content

Commit

Permalink
Remove the HAS_MOVED_GIVTBL bit
Browse files Browse the repository at this point in the history
We no longer use the HAS_MOVED_GIVTBL bit in the hidden header.  Now
when we try to get the givtbl of a potentially moved object, we first
look up the global general_iv_tbl_ and, if not found, look up the
RubyBinding::moved_givtbl table in the Rust part of the binding.
  • Loading branch information
wks committed Feb 11, 2025
1 parent a38a525 commit 9bb8f4b
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 4 deletions.
4 changes: 2 additions & 2 deletions internal/mmtk.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,6 @@ typedef uint32_t MMTk_AllocationSemantics;

#define MMTK_GC_THREAD_KIND_WORKER 1

#define MMTK_HAS_MOVED_GIVTBL 9223372036854775808ull

#define MMTK_HIDDEN_SIZE_MASK 281474976710655

typedef struct st_table st_table;
Expand Down Expand Up @@ -271,4 +269,6 @@ void mmtk_object_reference_write_post(MMTk_Mutator *mutator, MMTk_ObjectReferenc
*/
void mmtk_enumerate_objects(void (*callback)(MMTk_ObjectReference, void*), void *data);

bool mmtk_hidden_header_is_sane(const struct MMTk_HiddenHeader *hidden_header);

#endif /* MMTK_H */
9 changes: 7 additions & 2 deletions mmtk_support.c
Original file line number Diff line number Diff line change
Expand Up @@ -404,6 +404,10 @@ rb_mmtk_init_hidden_header(VALUE object, size_t payload_size)

struct MMTk_HiddenHeader *hidden_header = (struct MMTk_HiddenHeader*)(object - MMTK_OBJREF_OFFSET);
hidden_header->prefix = payload_size;

RUBY_ASSERT(mmtk_hidden_header_is_sane(hidden_header),
"Hidden header is not sane on construction. Object: %p, prefix: %zx",
(void*) object, hidden_header->prefix);
}

size_t
Expand All @@ -412,8 +416,9 @@ rb_mmtk_get_payload_size(VALUE object)
struct MMTk_HiddenHeader *hidden_header = (struct MMTk_HiddenHeader*)(object - MMTK_OBJREF_OFFSET);
size_t prefix = hidden_header->prefix;

RUBY_ASSERT((prefix & ~(MMTK_HIDDEN_SIZE_MASK | MMTK_HAS_MOVED_GIVTBL)) == 0,
"Hidden field is corrupted. Object: %p, prefix: %zx", (void*) object, prefix);
RUBY_ASSERT(mmtk_hidden_header_is_sane(hidden_header),
"Hidden header is corrupted. Object: %p, prefix: %zx",
(void*) object, prefix);

return prefix & MMTK_HIDDEN_SIZE_MASK;
}
Expand Down

0 comments on commit 9bb8f4b

Please sign in to comment.