Commit e6da2eeb authored by Igor Sheludko's avatar Igor Sheludko Committed by V8 LUCI CQ

[ext-code-space] Fix verification of code object slots

... which could contain a smi value during CodeDataContainer setup.

Bug: v8:11880
Change-Id: Ibc67818411e9b824843bc5a20d249335c88d5f57
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3264291
Commit-Queue: Igor Sheludko <ishell@chromium.org>
Auto-Submit: Igor Sheludko <ishell@chromium.org>
Reviewed-by: 's avatarMichael Lippautz <mlippautz@chromium.org>
Cr-Commit-Position: refs/heads/main@{#77758}
parent 32af9c04
...@@ -6848,6 +6848,7 @@ void VerifyPointersVisitor::VisitCodePointer(HeapObject host, ...@@ -6848,6 +6848,7 @@ void VerifyPointersVisitor::VisitCodePointer(HeapObject host,
CHECK(V8_EXTERNAL_CODE_SPACE_BOOL); CHECK(V8_EXTERNAL_CODE_SPACE_BOOL);
Object maybe_code = slot.load(code_cage_base()); Object maybe_code = slot.load(code_cage_base());
HeapObject code; HeapObject code;
// The slot might contain smi during CodeDataContainer creation.
if (maybe_code.GetHeapObject(&code)) { if (maybe_code.GetHeapObject(&code)) {
VerifyCodeObjectImpl(code); VerifyCodeObjectImpl(code);
} else { } else {
......
...@@ -240,6 +240,7 @@ class FullMarkingVerifier : public MarkingVerifier { ...@@ -240,6 +240,7 @@ class FullMarkingVerifier : public MarkingVerifier {
CHECK(V8_EXTERNAL_CODE_SPACE_BOOL); CHECK(V8_EXTERNAL_CODE_SPACE_BOOL);
Object maybe_code = slot.load(code_cage_base()); Object maybe_code = slot.load(code_cage_base());
HeapObject code; HeapObject code;
// The slot might contain smi during CodeDataContainer creation, so skip it.
if (maybe_code.GetHeapObject(&code)) { if (maybe_code.GetHeapObject(&code)) {
VerifyHeapObjectImpl(code); VerifyHeapObjectImpl(code);
} }
...@@ -419,6 +420,7 @@ class FullEvacuationVerifier : public EvacuationVerifier { ...@@ -419,6 +420,7 @@ class FullEvacuationVerifier : public EvacuationVerifier {
CHECK(V8_EXTERNAL_CODE_SPACE_BOOL); CHECK(V8_EXTERNAL_CODE_SPACE_BOOL);
Object maybe_code = slot.load(code_cage_base()); Object maybe_code = slot.load(code_cage_base());
HeapObject code; HeapObject code;
// The slot might contain smi during CodeDataContainer creation, so skip it.
if (maybe_code.GetHeapObject(&code)) { if (maybe_code.GetHeapObject(&code)) {
VerifyHeapObjectImpl(code); VerifyHeapObjectImpl(code);
} }
...@@ -4554,8 +4556,12 @@ class YoungGenerationEvacuationVerifier : public EvacuationVerifier { ...@@ -4554,8 +4556,12 @@ class YoungGenerationEvacuationVerifier : public EvacuationVerifier {
} }
void VerifyCodePointer(CodeObjectSlot slot) override { void VerifyCodePointer(CodeObjectSlot slot) override {
CHECK(V8_EXTERNAL_CODE_SPACE_BOOL); CHECK(V8_EXTERNAL_CODE_SPACE_BOOL);
Code code = Code::unchecked_cast(slot.load(code_cage_base())); Object maybe_code = slot.load(code_cage_base());
VerifyHeapObjectImpl(code); HeapObject code;
// The slot might contain smi during CodeDataContainer creation, so skip it.
if (maybe_code.GetHeapObject(&code)) {
VerifyHeapObjectImpl(code);
}
} }
void VisitCodeTarget(Code host, RelocInfo* rinfo) override { void VisitCodeTarget(Code host, RelocInfo* rinfo) override {
Code target = Code::GetCodeFromTargetAddress(rinfo->target_address()); Code target = Code::GetCodeFromTargetAddress(rinfo->target_address());
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment