Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 13 additions & 56 deletions src/llv8-constants.cc
Original file line number Diff line number Diff line change
Expand Up @@ -81,14 +81,8 @@ void HeapObject::Load() {

void Map::Load() {
Error err;
kInstanceAttrsOffset = LoadConstant({"class_Map__instance_attributes__int",
"class_Map__instance_type__uint16_t"});
if (kInstanceAttrsOffset.name() ==
"v8dbg_class_Map__instance_type__uint16_t") {
kMapTypeMask = 0xffff;
} else {
kMapTypeMask = 0xff;
}
kInstanceAttrsOffset = LoadConstant({"class_Map__instance_type__uint16_t"});
kMapTypeMask = 0xffff;

kMaybeConstructorOffset =
LoadConstant("class_Map__constructor_or_backpointer__Object",
Expand Down Expand Up @@ -150,9 +144,6 @@ void JSObject::Load() {
LoadConstant("class_JSReceiver__raw_properties_or_hash__Object",
"class_JSReceiver__properties__FixedArray");

if (kPropertiesOffset == -1)
kPropertiesOffset = LoadConstant("class_JSObject__properties__FixedArray");

kElementsOffset = LoadConstant("class_JSObject__elements__Object");
kInternalFieldsOffset =
LoadConstant("class_JSObject__internal_fields__uintptr_t");
Expand Down Expand Up @@ -210,7 +201,6 @@ void SharedInfo::Load() {
kInferredNameOffset =
LoadConstant("class_SharedFunctionInfo__inferred_name__String",
"class_SharedFunctionInfo__function_identifier__Object");
kScriptOffset = LoadConstant("class_SharedFunctionInfo__script__Object");
kScriptOrDebugInfoOffset = LoadConstant(
{"class_SharedFunctionInfo__script_or_debug_info__Object",
"class_SharedFunctionInfo__script_or_debug_info__HeapObject"});
Expand All @@ -230,18 +220,9 @@ void SharedInfo::Load() {
"class_SharedFunctionInfo__formal_parameter_count__SMI");
}

// NOTE: Could potentially be -1 on v4 and v5 node, should check in llv8
kScopeInfoOffset =
LoadConstant("class_SharedFunctionInfo__scope_info__ScopeInfo");

kStartPositionMask = LoadConstant("sharedfunctioninfo_start_position_mask");
kStartPositionShift = LoadConstant("sharedfunctioninfo_start_position_shift");

if (kStartPositionShift == -1) {
// TODO(indutny): check version?
kStartPositionShift = 2;
kStartPositionMask = ~((1 << kStartPositionShift) - 1);
}
// TODO: this should use postmortem data.
kStartPositionShift = 2;
kStartPositionMask = ~((1 << kStartPositionShift) - 1);

if (LoadConstant("class_SharedFunctionInfo__compiler_hints__int") == -1 &&
kNameOrScopeInfoOffset == -1)
Expand Down Expand Up @@ -269,8 +250,6 @@ void Code::Load() {

void ScopeInfo::Load() {
kParameterCountOffset = LoadConstant("scopeinfo_idx_nparams");
kStackLocalCountOffset = LoadConstant("scopeinfo_idx_nstacklocals");
kEmbeddedParamAndStackLocals = kStackLocalCountOffset != -1;
kContextLocalCountOffset = LoadConstant("scopeinfo_idx_ncontextlocals");
kVariablePartIndex = LoadConstant("scopeinfo_idx_first_vars");
// Prior to Node.js v16, ScopeInfo inherited from FixedArray. In release
Expand All @@ -289,9 +268,6 @@ void Context::Load() {
// of constants or a fallback list).
kNativeIndex =
LoadConstant("class_Context__native_index__int", "context_idx_native");
if (kNativeIndex == -1) {
kNativeIndex = LoadConstant("class_Context__native_context_index__int");
}
kEmbedderDataIndex = LoadConstant("context_idx_embedder_data", (int)5);

kMinContextSlots = LoadConstant("class_Context__min_context_slots__int",
Expand Down Expand Up @@ -319,12 +295,7 @@ void String::Load() {
kExternalStringTag = LoadConstant("ExternalStringTag");
kThinStringTag = LoadConstant("ThinStringTag");

kLengthIsSmi = true;
kLengthOffset = LoadConstant("class_String__length__SMI");
if (kLengthOffset == -1) {
kLengthIsSmi = false;
kLengthOffset = LoadConstant("class_String__length__int32_t");
}
kLengthOffset = LoadConstant("class_String__length__int32_t");
}


Expand All @@ -341,22 +312,18 @@ void TwoByteString::Load() {


void ConsString::Load() {
kFirstOffset = LoadConstant({"class_ConsString__first__String",
"class_ConsString__first_offset__int"});
kSecondOffset = LoadConstant({"class_ConsString__second__String",
"class_ConsString__second_offset__int"});
kFirstOffset = LoadConstant({"class_ConsString__first__String"});
kSecondOffset = LoadConstant({"class_ConsString__second__String"});
}


void SlicedString::Load() {
kParentOffset = LoadConstant("class_SlicedString__parent__String");
kOffsetOffset = LoadConstant({"class_SlicedString__offset__SMI",
"class_SlicedString__offset_offset__int"});
kOffsetOffset = LoadConstant({"class_SlicedString__offset__SMI"});
}

void ThinString::Load() {
kActualOffset = LoadConstant({"class_ThinString__actual__String",
"class_ThinString__actual_offset__int"});
kActualOffset = LoadConstant({"class_ThinString__actual__String"});
}

void FixedArrayBase::Load() {
Expand Down Expand Up @@ -412,17 +379,9 @@ void JSArrayBuffer::Load() {
LoadConstant({"class_JSArrayBuffer__byte_length__Object",
"class_JSArrayBuffer__byte_length__size_t"});

if (kBackingStoreOffset.Check()) {
}

kWasNeuteredMask = LoadConstant("jsarray_buffer_was_neutered_mask");
kWasNeuteredShift = LoadConstant("jsarray_buffer_was_neutered_shift");

if (kWasNeuteredMask == -1) {
// TODO(indutny): check V8 version?
kWasNeuteredMask = 1 << 3;
kWasNeuteredShift = 3;
}
// TODO: This should use postmortem data.
kWasNeuteredMask = 1 << 3;
kWasNeuteredShift = 3;
}


Expand Down Expand Up @@ -560,8 +519,6 @@ void Frame::Load() {
kExitFrame = LoadConstant("frametype_ExitFrame");
kInternalFrame = LoadConstant("frametype_InternalFrame");
kConstructFrame = LoadConstant("frametype_ConstructFrame");
// NOTE: The JavaScript frame type was removed in V8 6.3.158.
kJSFrame = LoadConstant("frametype_JavaScriptFrame");
kOptimizedFrame = LoadConstant("frametype_OptimizedFrame");
kStubFrame = LoadConstant("frametype_StubFrame");
}
Expand Down
6 changes: 0 additions & 6 deletions src/llv8-constants.h
Original file line number Diff line number Diff line change
Expand Up @@ -159,12 +159,10 @@ class SharedInfo : public Module {
int64_t kNameOrScopeInfoOffset;
int64_t kNameOffset;
int64_t kInferredNameOffset;
int64_t kScriptOffset;
Constant<int64_t> kScriptOrDebugInfoOffset;
int64_t kStartPositionOffset;
int64_t kEndPositionOffset;
int64_t kParameterCountOffset;
int64_t kScopeInfoOffset;
int64_t kFunctionDataOffset;

int64_t kStartPositionMask;
Expand Down Expand Up @@ -203,9 +201,7 @@ class ScopeInfo : public Module {
CONSTANTS_DEFAULT_METHODS(ScopeInfo);

int64_t kParameterCountOffset;
int64_t kStackLocalCountOffset;
int64_t kContextLocalCountOffset;
bool kEmbeddedParamAndStackLocals;
int64_t kVariablePartIndex;
bool kIsFixedArray;

Expand Down Expand Up @@ -270,7 +266,6 @@ class String : public Module {
int64_t kThinStringTag;

int64_t kLengthOffset;
bool kLengthIsSmi;

protected:
void Load();
Expand Down Expand Up @@ -500,7 +495,6 @@ class Frame : public Module {
int64_t kExitFrame;
int64_t kInternalFrame;
int64_t kConstructFrame;
int64_t kJSFrame;
int64_t kOptimizedFrame;
int64_t kStubFrame;

Expand Down
38 changes: 0 additions & 38 deletions src/llv8-inl.h
Original file line number Diff line number Diff line change
Expand Up @@ -470,13 +470,6 @@ inline int64_t String::Encoding(Error& err) {
inline CheckedType<int32_t> String::Length(Error& err) {
RETURN_IF_INVALID((*this), CheckedType<int32_t>());

if (v8()->string()->kLengthIsSmi) {
Smi len = LoadFieldValue<Smi>(v8()->string()->kLengthOffset, err);
RETURN_IF_INVALID(len, CheckedType<int32_t>());

return CheckedType<int32_t>(len.GetValue());
}

CheckedType<int32_t> len = v8()->LoadValue<CheckedType<int32_t>>(
LeaField(v8()->string()->kLengthOffset));
RETURN_IF_INVALID(len, CheckedType<int32_t>());
Expand All @@ -495,11 +488,8 @@ ACCESSOR(SharedFunctionInfo, function_data, shared_info()->kFunctionDataOffset,
ACCESSOR(SharedFunctionInfo, name, shared_info()->kNameOffset, String)
ACCESSOR(SharedFunctionInfo, inferred_name, shared_info()->kInferredNameOffset,
Value)
ACCESSOR(SharedFunctionInfo, script, shared_info()->kScriptOffset, Script)
SAFE_ACCESSOR(SharedFunctionInfo, script_or_debug_info,
shared_info()->kScriptOrDebugInfoOffset, HeapObject)
ACCESSOR(SharedFunctionInfo, scope_info, shared_info()->kScopeInfoOffset,
HeapObject)
ACCESSOR(SharedFunctionInfo, name_or_scope_info,
shared_info()->kNameOrScopeInfoOffset, HeapObject)

Expand Down Expand Up @@ -535,8 +525,6 @@ Value SharedFunctionInfo::GetInferredName(Error& err) {
}

HeapObject SharedFunctionInfo::GetScopeInfo(Error& err) {
if (v8()->shared_info()->kNameOrScopeInfoOffset == -1) return scope_info(err);

HeapObject maybe_scope_info = name_or_scope_info(err);
if (!String::IsString(v8(), maybe_scope_info, err)) return maybe_scope_info;

Expand All @@ -545,10 +533,6 @@ HeapObject SharedFunctionInfo::GetScopeInfo(Error& err) {
}

Script SharedFunctionInfo::GetScript(Error& err) {
if (!v8()->shared_info()->kScriptOrDebugInfoOffset.Loaded()) {
return script(err);
}

HeapObject maybe_script = script_or_debug_info(err);
if (maybe_script.IsScript(err)) return maybe_script;

Expand Down Expand Up @@ -1110,18 +1094,6 @@ inline Smi ScopeInfo::ParameterCount(Error& err) {
err);
}

inline Smi ScopeInfo::StackLocalCount(Error& err) {
if (v8()->scope_info()->kStackLocalCountOffset == -1) {
return Smi(v8(), 0);
}
int64_t data_offset =
v8()->scope_info()->kIsFixedArray ? v8()->fixed_array()->kDataOffset : 0;
return HeapObject::LoadFieldValue<Smi>(
data_offset + v8()->scope_info()->kStackLocalCountOffset *
v8()->common()->kPointerSize,
err);
}

inline Smi ScopeInfo::ContextLocalCount(Error& err) {
int64_t data_offset = v8()->scope_info()->kIsFixedArray
? v8()->fixed_array()->kDataOffset
Expand All @@ -1134,16 +1106,6 @@ inline Smi ScopeInfo::ContextLocalCount(Error& err) {

inline int ScopeInfo::ContextLocalIndex(Error& err) {
int context_local_index = v8()->scope_info()->kVariablePartIndex;

if (v8()->scope_info()->kEmbeddedParamAndStackLocals) {
Smi param_count = ParameterCount(err);
if (err.Fail()) return -1;
context_local_index += param_count.GetValue() + 1;

Smi stack_local = StackLocalCount(err);
if (err.Fail()) return -1;
context_local_index += stack_local.GetValue();
}
return context_local_index;
}

Expand Down
3 changes: 0 additions & 3 deletions src/llv8.h
Original file line number Diff line number Diff line change
Expand Up @@ -217,11 +217,9 @@ class SharedFunctionInfo : public HeapObject {

private:
inline String name(Error& err);
inline Script script(Error& err);
inline HeapObject script_or_debug_info(Error& err);
inline Value inferred_name(Error& err);
inline Value function_data(Error& err);
inline HeapObject scope_info(Error& err);
inline HeapObject name_or_scope_info(Error& err);
};

Expand Down Expand Up @@ -520,7 +518,6 @@ class ScopeInfo : public HeapObject {
};

inline Smi ParameterCount(Error& err);
inline Smi StackLocalCount(Error& err);
inline Smi ContextLocalCount(Error& err);
inline int ContextLocalIndex(Error& err);
inline PositionInfo MaybePositionInfo(Error& err);
Expand Down
8 changes: 1 addition & 7 deletions src/printer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,7 @@ std::string Printer::Stringify(v8::JSFrame js_frame, Error& err) {
return "<constructor>";
} else if (value == llv8_->frame()->kStubFrame) {
return "<stub>";
} else if (value != llv8_->frame()->kJSFrame &&
value != llv8_->frame()->kOptimizedFrame) {
} else if (value != llv8_->frame()->kOptimizedFrame) {
err = Error::Failure("Unknown frame marker %" PRId64, value);
return std::string();
}
Expand Down Expand Up @@ -203,11 +202,6 @@ std::string Printer::Stringify(v8::FixedArray fixed_array, Error& err) {

template <>
std::string Printer::Stringify(v8::Context ctx, Error& err) {
// Not enough postmortem information, return bare minimum
if (llv8_->shared_info()->kScopeInfoOffset == -1 &&
llv8_->shared_info()->kNameOrScopeInfoOffset == -1)
return std::string();

std::string res = "<Context";

if (!options_.detailed) {
Expand Down