mirror of
https://github.com/JetBrains/JetBrainsRuntime.git
synced 2025-12-06 09:29:38 +01:00
8305056: Avoid unaligned access in emit_intX methods if it's unsupported
Reviewed-by: aph
This commit is contained in:
@@ -35,6 +35,11 @@
|
||||
#include "utilities/resizeableResourceHash.hpp"
|
||||
#include "utilities/macros.hpp"
|
||||
|
||||
template <typename T>
|
||||
static inline void put_native(address p, T x) {
|
||||
memcpy((void*)p, &x, sizeof x);
|
||||
}
|
||||
|
||||
class PhaseCFG;
|
||||
class Compile;
|
||||
class BufferBlob;
|
||||
@@ -218,7 +223,10 @@ class CodeSection {
|
||||
set_end(curr);
|
||||
}
|
||||
|
||||
void emit_int16(uint16_t x) { *((uint16_t*) end()) = x; set_end(end() + sizeof(uint16_t)); }
|
||||
template <typename T>
|
||||
void emit_native(T x) { put_native(end(), x); set_end(end() + sizeof x); }
|
||||
|
||||
void emit_int16(uint16_t x) { emit_native(x); }
|
||||
void emit_int16(uint8_t x1, uint8_t x2) {
|
||||
address curr = end();
|
||||
*((uint8_t*) curr++) = x1;
|
||||
@@ -234,11 +242,7 @@ class CodeSection {
|
||||
set_end(curr);
|
||||
}
|
||||
|
||||
void emit_int32(uint32_t x) {
|
||||
address curr = end();
|
||||
*((uint32_t*) curr) = x;
|
||||
set_end(curr + sizeof(uint32_t));
|
||||
}
|
||||
void emit_int32(uint32_t x) { emit_native(x); }
|
||||
void emit_int32(uint8_t x1, uint8_t x2, uint8_t x3, uint8_t x4) {
|
||||
address curr = end();
|
||||
*((uint8_t*) curr++) = x1;
|
||||
@@ -248,11 +252,10 @@ class CodeSection {
|
||||
set_end(curr);
|
||||
}
|
||||
|
||||
void emit_int64( uint64_t x) { *((uint64_t*) end()) = x; set_end(end() + sizeof(uint64_t)); }
|
||||
|
||||
void emit_float( jfloat x) { *((jfloat*) end()) = x; set_end(end() + sizeof(jfloat)); }
|
||||
void emit_double(jdouble x) { *((jdouble*) end()) = x; set_end(end() + sizeof(jdouble)); }
|
||||
void emit_address(address x) { *((address*) end()) = x; set_end(end() + sizeof(address)); }
|
||||
void emit_int64(uint64_t x) { emit_native(x); }
|
||||
void emit_float(jfloat x) { emit_native(x); }
|
||||
void emit_double(jdouble x) { emit_native(x); }
|
||||
void emit_address(address x) { emit_native(x); }
|
||||
|
||||
// Share a scratch buffer for relocinfo. (Hacky; saves a resource allocation.)
|
||||
void initialize_shared_locs(relocInfo* buf, int length);
|
||||
|
||||
Reference in New Issue
Block a user