|
Description: upstream mips fix
|
|
Origin: https://github.com/nodejs/node/issues/31118
|
|
Last-Update: 2020-05-30
|
|
|
|
--- a/deps/v8/AUTHORS
|
|
+++ b/deps/v8/AUTHORS
|
|
@@ -106,6 +106,7 @@
|
|
James M Snell <jasnell@gmail.com>
|
|
Jianghua Yang <jianghua.yjh@alibaba-inc.com>
|
|
Jiawen Geng <technicalcute@gmail.com>
|
|
+Jiaxun Yang <jiaxun.yang@flygoat.com>
|
|
Joel Stanley <joel@jms.id.au>
|
|
Johan Bergström <johan@bergstroem.nu>
|
|
Jonathan Liu <net147@gmail.com>
|
|
--- a/deps/v8/src/snapshot/embedded/platform-embedded-file-writer-aix.cc
|
|
+++ b/deps/v8/src/snapshot/embedded/platform-embedded-file-writer-aix.cc
|
|
@@ -94,10 +94,6 @@
|
|
|
|
void PlatformEmbeddedFileWriterAIX::DeclareFunctionEnd(const char* name) {}
|
|
|
|
-int PlatformEmbeddedFileWriterAIX::HexLiteral(uint64_t value) {
|
|
- return fprintf(fp_, "0x%" PRIx64, value);
|
|
-}
|
|
-
|
|
void PlatformEmbeddedFileWriterAIX::FilePrologue() {}
|
|
|
|
void PlatformEmbeddedFileWriterAIX::DeclareExternalFilename(
|
|
@@ -120,12 +116,6 @@
|
|
return kLong;
|
|
}
|
|
|
|
-int PlatformEmbeddedFileWriterAIX::WriteByteChunk(const uint8_t* data) {
|
|
- DCHECK_EQ(ByteChunkDataDirective(), kLong);
|
|
- const uint32_t* long_ptr = reinterpret_cast<const uint32_t*>(data);
|
|
- return HexLiteral(*long_ptr);
|
|
-}
|
|
-
|
|
#undef SYMBOL_PREFIX
|
|
|
|
} // namespace internal
|
|
--- a/deps/v8/src/snapshot/embedded/platform-embedded-file-writer-aix.h
|
|
+++ b/deps/v8/src/snapshot/embedded/platform-embedded-file-writer-aix.h
|
|
@@ -37,8 +37,6 @@
|
|
void DeclareFunctionBegin(const char* name) override;
|
|
void DeclareFunctionEnd(const char* name) override;
|
|
|
|
- int HexLiteral(uint64_t value) override;
|
|
-
|
|
void Comment(const char* string) override;
|
|
|
|
void FilePrologue() override;
|
|
@@ -48,7 +46,6 @@
|
|
int IndentedDataDirective(DataDirective directive) override;
|
|
|
|
DataDirective ByteChunkDataDirective() const override;
|
|
- int WriteByteChunk(const uint8_t* data) override;
|
|
|
|
private:
|
|
void DeclareSymbolGlobal(const char* name);
|
|
--- a/deps/v8/src/snapshot/embedded/platform-embedded-file-writer-base.cc
|
|
+++ b/deps/v8/src/snapshot/embedded/platform-embedded-file-writer-base.cc
|
|
@@ -24,6 +24,10 @@
|
|
}
|
|
}
|
|
|
|
+int PlatformEmbeddedFileWriterBase::HexLiteral(uint64_t value) {
|
|
+ return fprintf(fp_, "0x%" PRIx64, value);
|
|
+}
|
|
+
|
|
int DataDirectiveSize(DataDirective directive) {
|
|
switch (directive) {
|
|
case kByte:
|
|
@@ -39,24 +43,37 @@
|
|
}
|
|
|
|
int PlatformEmbeddedFileWriterBase::WriteByteChunk(const uint8_t* data) {
|
|
- DCHECK_EQ(ByteChunkDataDirective(), kOcta);
|
|
-
|
|
- static constexpr size_t kSize = kInt64Size;
|
|
-
|
|
- uint64_t part1, part2;
|
|
- // Use memcpy for the reads since {data} is not guaranteed to be aligned.
|
|
+ size_t kSize = DataDirectiveSize(ByteChunkDataDirective());
|
|
+ size_t kHalfSize = kSize / 2;
|
|
+ uint64_t high = 0, low = 0;
|
|
+
|
|
+ switch (kSize) {
|
|
+ case 1:
|
|
+ low = *data;
|
|
+ break;
|
|
+ case 4:
|
|
+ low = *reinterpret_cast<const uint32_t*>(data);
|
|
+ break;
|
|
+ case 8:
|
|
+ low = *reinterpret_cast<const uint64_t*>(data);
|
|
+ break;
|
|
+ case 16:
|
|
#ifdef V8_TARGET_BIG_ENDIAN
|
|
- memcpy(&part1, data, kSize);
|
|
- memcpy(&part2, data + kSize, kSize);
|
|
+ memcpy(&high, data, kHalfSize);
|
|
+ memcpy(&low, data + kHalfSize, kHalfSize);
|
|
#else
|
|
- memcpy(&part1, data + kSize, kSize);
|
|
- memcpy(&part2, data, kSize);
|
|
+ memcpy(&high, data + kHalfSize, kHalfSize);
|
|
+ memcpy(&low, data, kHalfSize);
|
|
#endif // V8_TARGET_BIG_ENDIAN
|
|
+ break;
|
|
+ default:
|
|
+ UNREACHABLE();
|
|
+ }
|
|
|
|
- if (part1 != 0) {
|
|
- return fprintf(fp(), "0x%" PRIx64 "%016" PRIx64, part1, part2);
|
|
+ if (high != 0) {
|
|
+ return fprintf(fp(), "0x%" PRIx64 "%016" PRIx64, high, low);
|
|
} else {
|
|
- return fprintf(fp(), "0x%" PRIx64, part2);
|
|
+ return fprintf(fp(), "0x%" PRIx64, low);
|
|
}
|
|
}
|
|
|
|
--- a/deps/v8/src/snapshot/embedded/platform-embedded-file-writer-base.h
|
|
+++ b/deps/v8/src/snapshot/embedded/platform-embedded-file-writer-base.h
|
|
@@ -67,7 +67,7 @@
|
|
virtual void DeclareFunctionEnd(const char* name) = 0;
|
|
|
|
// Returns the number of printed characters.
|
|
- virtual int HexLiteral(uint64_t value) = 0;
|
|
+ virtual int HexLiteral(uint64_t value);
|
|
|
|
virtual void Comment(const char* string) = 0;
|
|
virtual void Newline() { fprintf(fp_, "\n"); }
|
|
--- a/deps/v8/src/snapshot/embedded/platform-embedded-file-writer-generic.cc
|
|
+++ b/deps/v8/src/snapshot/embedded/platform-embedded-file-writer-generic.cc
|
|
@@ -112,10 +112,6 @@
|
|
|
|
void PlatformEmbeddedFileWriterGeneric::DeclareFunctionEnd(const char* name) {}
|
|
|
|
-int PlatformEmbeddedFileWriterGeneric::HexLiteral(uint64_t value) {
|
|
- return fprintf(fp_, "0x%" PRIx64, value);
|
|
-}
|
|
-
|
|
void PlatformEmbeddedFileWriterGeneric::FilePrologue() {}
|
|
|
|
void PlatformEmbeddedFileWriterGeneric::DeclareExternalFilename(
|
|
@@ -142,6 +138,18 @@
|
|
return fprintf(fp_, " %s ", DirectiveAsString(directive));
|
|
}
|
|
|
|
+DataDirective PlatformEmbeddedFileWriterGeneric::ByteChunkDataDirective()
|
|
+ const {
|
|
+#if defined(V8_TARGET_ARCH_MIPS) || defined(V8_TARGET_ARCH_MIPS64)
|
|
+ // MIPS uses a fixed 4 byte instruction set, using .long
|
|
+ // to prevent any unnecessary padding.
|
|
+ return kLong;
|
|
+#else
|
|
+ // Other ISAs just listen to the base
|
|
+ return PlatformEmbeddedFileWriterBase::ByteChunkDataDirective();
|
|
+#endif
|
|
+}
|
|
+
|
|
#undef SYMBOL_PREFIX
|
|
|
|
} // namespace internal
|
|
--- a/deps/v8/src/snapshot/embedded/platform-embedded-file-writer-generic.h
|
|
+++ b/deps/v8/src/snapshot/embedded/platform-embedded-file-writer-generic.h
|
|
@@ -39,8 +39,6 @@
|
|
void DeclareFunctionBegin(const char* name) override;
|
|
void DeclareFunctionEnd(const char* name) override;
|
|
|
|
- int HexLiteral(uint64_t value) override;
|
|
-
|
|
void Comment(const char* string) override;
|
|
|
|
void FilePrologue() override;
|
|
@@ -49,6 +47,8 @@
|
|
|
|
int IndentedDataDirective(DataDirective directive) override;
|
|
|
|
+ DataDirective ByteChunkDataDirective() const override;
|
|
+
|
|
private:
|
|
void DeclareSymbolGlobal(const char* name);
|
|
|
|
--- a/deps/v8/src/snapshot/embedded/platform-embedded-file-writer-mac.cc
|
|
+++ b/deps/v8/src/snapshot/embedded/platform-embedded-file-writer-mac.cc
|
|
@@ -87,10 +87,6 @@
|
|
|
|
void PlatformEmbeddedFileWriterMac::DeclareFunctionEnd(const char* name) {}
|
|
|
|
-int PlatformEmbeddedFileWriterMac::HexLiteral(uint64_t value) {
|
|
- return fprintf(fp_, "0x%" PRIx64, value);
|
|
-}
|
|
-
|
|
void PlatformEmbeddedFileWriterMac::FilePrologue() {}
|
|
|
|
void PlatformEmbeddedFileWriterMac::DeclareExternalFilename(
|
|
--- a/deps/v8/src/snapshot/embedded/platform-embedded-file-writer-mac.h
|
|
+++ b/deps/v8/src/snapshot/embedded/platform-embedded-file-writer-mac.h
|
|
@@ -37,8 +37,6 @@
|
|
void DeclareFunctionBegin(const char* name) override;
|
|
void DeclareFunctionEnd(const char* name) override;
|
|
|
|
- int HexLiteral(uint64_t value) override;
|
|
-
|
|
void Comment(const char* string) override;
|
|
|
|
void FilePrologue() override;
|