Merge pull request #11353 from kvuorine/fwknop-fixes
[feed/packages.git] / lang / node / patches / 999-mips-fix.patch
1 Description: upstream mips fix
2 Origin: https://github.com/nodejs/node/issues/31118
3 Last-Update: 2020-05-30
4
5 --- a/deps/v8/AUTHORS
6 +++ b/deps/v8/AUTHORS
7 @@ -106,6 +106,7 @@
8 James M Snell <jasnell@gmail.com>
9 Jianghua Yang <jianghua.yjh@alibaba-inc.com>
10 Jiawen Geng <technicalcute@gmail.com>
11 +Jiaxun Yang <jiaxun.yang@flygoat.com>
12 Joel Stanley <joel@jms.id.au>
13 Johan Bergström <johan@bergstroem.nu>
14 Jonathan Liu <net147@gmail.com>
15 --- a/deps/v8/src/snapshot/embedded/platform-embedded-file-writer-aix.cc
16 +++ b/deps/v8/src/snapshot/embedded/platform-embedded-file-writer-aix.cc
17 @@ -94,10 +94,6 @@
18
19 void PlatformEmbeddedFileWriterAIX::DeclareFunctionEnd(const char* name) {}
20
21 -int PlatformEmbeddedFileWriterAIX::HexLiteral(uint64_t value) {
22 - return fprintf(fp_, "0x%" PRIx64, value);
23 -}
24 -
25 void PlatformEmbeddedFileWriterAIX::FilePrologue() {}
26
27 void PlatformEmbeddedFileWriterAIX::DeclareExternalFilename(
28 @@ -120,12 +116,6 @@
29 return kLong;
30 }
31
32 -int PlatformEmbeddedFileWriterAIX::WriteByteChunk(const uint8_t* data) {
33 - DCHECK_EQ(ByteChunkDataDirective(), kLong);
34 - const uint32_t* long_ptr = reinterpret_cast<const uint32_t*>(data);
35 - return HexLiteral(*long_ptr);
36 -}
37 -
38 #undef SYMBOL_PREFIX
39
40 } // namespace internal
41 --- a/deps/v8/src/snapshot/embedded/platform-embedded-file-writer-aix.h
42 +++ b/deps/v8/src/snapshot/embedded/platform-embedded-file-writer-aix.h
43 @@ -37,8 +37,6 @@
44 void DeclareFunctionBegin(const char* name) override;
45 void DeclareFunctionEnd(const char* name) override;
46
47 - int HexLiteral(uint64_t value) override;
48 -
49 void Comment(const char* string) override;
50
51 void FilePrologue() override;
52 @@ -48,7 +46,6 @@
53 int IndentedDataDirective(DataDirective directive) override;
54
55 DataDirective ByteChunkDataDirective() const override;
56 - int WriteByteChunk(const uint8_t* data) override;
57
58 private:
59 void DeclareSymbolGlobal(const char* name);
60 --- a/deps/v8/src/snapshot/embedded/platform-embedded-file-writer-base.cc
61 +++ b/deps/v8/src/snapshot/embedded/platform-embedded-file-writer-base.cc
62 @@ -24,6 +24,10 @@
63 }
64 }
65
66 +int PlatformEmbeddedFileWriterBase::HexLiteral(uint64_t value) {
67 + return fprintf(fp_, "0x%" PRIx64, value);
68 +}
69 +
70 int DataDirectiveSize(DataDirective directive) {
71 switch (directive) {
72 case kByte:
73 @@ -39,24 +43,37 @@
74 }
75
76 int PlatformEmbeddedFileWriterBase::WriteByteChunk(const uint8_t* data) {
77 - DCHECK_EQ(ByteChunkDataDirective(), kOcta);
78 -
79 - static constexpr size_t kSize = kInt64Size;
80 -
81 - uint64_t part1, part2;
82 - // Use memcpy for the reads since {data} is not guaranteed to be aligned.
83 + size_t kSize = DataDirectiveSize(ByteChunkDataDirective());
84 + size_t kHalfSize = kSize / 2;
85 + uint64_t high = 0, low = 0;
86 +
87 + switch (kSize) {
88 + case 1:
89 + low = *data;
90 + break;
91 + case 4:
92 + low = *reinterpret_cast<const uint32_t*>(data);
93 + break;
94 + case 8:
95 + low = *reinterpret_cast<const uint64_t*>(data);
96 + break;
97 + case 16:
98 #ifdef V8_TARGET_BIG_ENDIAN
99 - memcpy(&part1, data, kSize);
100 - memcpy(&part2, data + kSize, kSize);
101 + memcpy(&high, data, kHalfSize);
102 + memcpy(&low, data + kHalfSize, kHalfSize);
103 #else
104 - memcpy(&part1, data + kSize, kSize);
105 - memcpy(&part2, data, kSize);
106 + memcpy(&high, data + kHalfSize, kHalfSize);
107 + memcpy(&low, data, kHalfSize);
108 #endif // V8_TARGET_BIG_ENDIAN
109 + break;
110 + default:
111 + UNREACHABLE();
112 + }
113
114 - if (part1 != 0) {
115 - return fprintf(fp(), "0x%" PRIx64 "%016" PRIx64, part1, part2);
116 + if (high != 0) {
117 + return fprintf(fp(), "0x%" PRIx64 "%016" PRIx64, high, low);
118 } else {
119 - return fprintf(fp(), "0x%" PRIx64, part2);
120 + return fprintf(fp(), "0x%" PRIx64, low);
121 }
122 }
123
124 --- a/deps/v8/src/snapshot/embedded/platform-embedded-file-writer-base.h
125 +++ b/deps/v8/src/snapshot/embedded/platform-embedded-file-writer-base.h
126 @@ -67,7 +67,7 @@
127 virtual void DeclareFunctionEnd(const char* name) = 0;
128
129 // Returns the number of printed characters.
130 - virtual int HexLiteral(uint64_t value) = 0;
131 + virtual int HexLiteral(uint64_t value);
132
133 virtual void Comment(const char* string) = 0;
134 virtual void Newline() { fprintf(fp_, "\n"); }
135 --- a/deps/v8/src/snapshot/embedded/platform-embedded-file-writer-generic.cc
136 +++ b/deps/v8/src/snapshot/embedded/platform-embedded-file-writer-generic.cc
137 @@ -112,10 +112,6 @@
138
139 void PlatformEmbeddedFileWriterGeneric::DeclareFunctionEnd(const char* name) {}
140
141 -int PlatformEmbeddedFileWriterGeneric::HexLiteral(uint64_t value) {
142 - return fprintf(fp_, "0x%" PRIx64, value);
143 -}
144 -
145 void PlatformEmbeddedFileWriterGeneric::FilePrologue() {}
146
147 void PlatformEmbeddedFileWriterGeneric::DeclareExternalFilename(
148 @@ -142,6 +138,18 @@
149 return fprintf(fp_, " %s ", DirectiveAsString(directive));
150 }
151
152 +DataDirective PlatformEmbeddedFileWriterGeneric::ByteChunkDataDirective()
153 + const {
154 +#if defined(V8_TARGET_ARCH_MIPS) || defined(V8_TARGET_ARCH_MIPS64)
155 + // MIPS uses a fixed 4 byte instruction set, using .long
156 + // to prevent any unnecessary padding.
157 + return kLong;
158 +#else
159 + // Other ISAs just listen to the base
160 + return PlatformEmbeddedFileWriterBase::ByteChunkDataDirective();
161 +#endif
162 +}
163 +
164 #undef SYMBOL_PREFIX
165
166 } // namespace internal
167 --- a/deps/v8/src/snapshot/embedded/platform-embedded-file-writer-generic.h
168 +++ b/deps/v8/src/snapshot/embedded/platform-embedded-file-writer-generic.h
169 @@ -39,8 +39,6 @@
170 void DeclareFunctionBegin(const char* name) override;
171 void DeclareFunctionEnd(const char* name) override;
172
173 - int HexLiteral(uint64_t value) override;
174 -
175 void Comment(const char* string) override;
176
177 void FilePrologue() override;
178 @@ -49,6 +47,8 @@
179
180 int IndentedDataDirective(DataDirective directive) override;
181
182 + DataDirective ByteChunkDataDirective() const override;
183 +
184 private:
185 void DeclareSymbolGlobal(const char* name);
186
187 --- a/deps/v8/src/snapshot/embedded/platform-embedded-file-writer-mac.cc
188 +++ b/deps/v8/src/snapshot/embedded/platform-embedded-file-writer-mac.cc
189 @@ -87,10 +87,6 @@
190
191 void PlatformEmbeddedFileWriterMac::DeclareFunctionEnd(const char* name) {}
192
193 -int PlatformEmbeddedFileWriterMac::HexLiteral(uint64_t value) {
194 - return fprintf(fp_, "0x%" PRIx64, value);
195 -}
196 -
197 void PlatformEmbeddedFileWriterMac::FilePrologue() {}
198
199 void PlatformEmbeddedFileWriterMac::DeclareExternalFilename(
200 --- a/deps/v8/src/snapshot/embedded/platform-embedded-file-writer-mac.h
201 +++ b/deps/v8/src/snapshot/embedded/platform-embedded-file-writer-mac.h
202 @@ -37,8 +37,6 @@
203 void DeclareFunctionBegin(const char* name) override;
204 void DeclareFunctionEnd(const char* name) override;
205
206 - int HexLiteral(uint64_t value) override;
207 -
208 void Comment(const char* string) override;
209
210 void FilePrologue() override;