upstream mips fix
authorDebian Javascript Maintainers <pkg-javascript-devel@alioth-lists.debian.net>
Sat, 8 Aug 2020 12:09:43 +0000 (13:09 +0100)
committerJérémy Lal <kapouer@melix.org>
Sat, 8 Aug 2020 12:09:43 +0000 (13:09 +0100)
Origin: https://github.com/nodejs/node/issues/31118
Last-Update: 2020-05-30

Gbp-Pq: Name mips-fix.patch

deps/v8/AUTHORS
deps/v8/src/snapshot/embedded/platform-embedded-file-writer-aix.cc
deps/v8/src/snapshot/embedded/platform-embedded-file-writer-aix.h
deps/v8/src/snapshot/embedded/platform-embedded-file-writer-base.cc
deps/v8/src/snapshot/embedded/platform-embedded-file-writer-base.h
deps/v8/src/snapshot/embedded/platform-embedded-file-writer-generic.cc
deps/v8/src/snapshot/embedded/platform-embedded-file-writer-generic.h
deps/v8/src/snapshot/embedded/platform-embedded-file-writer-mac.cc
deps/v8/src/snapshot/embedded/platform-embedded-file-writer-mac.h

index 1198de8f358fbc8449b5274ec30b78461672492c..632ec59a2c8eec36c534a81dcea2e1b8136af2b1 100644 (file)
@@ -106,6 +106,7 @@ James Pike <g00gle@chilon.net>
 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>
index 3aef77e34152d1d89cf5f3d4ad05aa402f71606b..7a068c70d820158887f4baa6f27ed2a7042f908b 100644 (file)
@@ -94,10 +94,6 @@ void PlatformEmbeddedFileWriterAIX::DeclareFunctionBegin(const char* name) {
 
 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 @@ DataDirective PlatformEmbeddedFileWriterAIX::ByteChunkDataDirective() const {
   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
index 6119d50623c090cbd4c5630e7696ef560d793c36..94a3273e8e8d784bd8768dbd1ca195178dcf3241 100644 (file)
@@ -37,8 +37,6 @@ class PlatformEmbeddedFileWriterAIX : public PlatformEmbeddedFileWriterBase {
   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 @@ class PlatformEmbeddedFileWriterAIX : public PlatformEmbeddedFileWriterBase {
   int IndentedDataDirective(DataDirective directive) override;
 
   DataDirective ByteChunkDataDirective() const override;
-  int WriteByteChunk(const uint8_t* data) override;
 
  private:
   void DeclareSymbolGlobal(const char* name);
index a17f039fa291266cc260a43ab8ed2ef0379315b3..a0d84212430a9a0e10492167dcc5b486d03c4452 100644 (file)
@@ -24,6 +24,10 @@ DataDirective PointerSizeDirective() {
   }
 }
 
+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 DataDirectiveSize(DataDirective directive) {
 }
 
 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);
   }
 }
 
index 0f1763ba244171c4e12c59394ac0128cd94d55c3..b0b5f787c045da2b751790058c6939a647258ef9 100644 (file)
@@ -67,7 +67,7 @@ class PlatformEmbeddedFileWriterBase {
   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"); }
index f4183b4b87d8693b1404e14333e597fe0f2daf77..71e278b7a17c9cb01961513772d0f2debc0a4fb4 100644 (file)
@@ -112,10 +112,6 @@ void PlatformEmbeddedFileWriterGeneric::DeclareFunctionBegin(const char* name) {
 
 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 @@ int PlatformEmbeddedFileWriterGeneric::IndentedDataDirective(
   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
index 0c76e7df88a8a78f9dd1099ecb6434df7397ee28..7c59eb9fe2820511944a0524e2613a8e1b7609ad 100644 (file)
@@ -39,8 +39,6 @@ class PlatformEmbeddedFileWriterGeneric
   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 @@ class PlatformEmbeddedFileWriterGeneric
 
   int IndentedDataDirective(DataDirective directive) override;
 
+  DataDirective ByteChunkDataDirective() const override;
+
  private:
   void DeclareSymbolGlobal(const char* name);
 
index 4be3c7ac6b67dc74199486d0ea210e579e752565..7d50617cb43f4523691c4478ccd7fa1c04f2ae63 100644 (file)
@@ -87,10 +87,6 @@ void PlatformEmbeddedFileWriterMac::DeclareFunctionBegin(const char* name) {
 
 void PlatformEmbeddedFileWriterMac::DeclareFunctionEnd(const char* name) {}
 
-int PlatformEmbeddedFileWriterMac::HexLiteral(uint64_t value) {
-  return fprintf(fp_, "0x%" PRIx64, value);
-}
-
 void PlatformEmbeddedFileWriterMac::FilePrologue() {}
 
 void PlatformEmbeddedFileWriterMac::DeclareExternalFilename(
index 4f2cd3d6ae8086debd2aec6e3b89630f3e229ca9..7bcfaaac266497a45d3fa8bdde2c5e84e058a99a 100644 (file)
@@ -37,8 +37,6 @@ class PlatformEmbeddedFileWriterMac : public PlatformEmbeddedFileWriterBase {
   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;