mirror of
https://github.com/intel/llvm.git
synced 2026-01-17 06:40:01 +08:00
[DataEncoder] Replace buggy versions of write functions.
This fixes a previously introduced thinko, now that I have a better idea of what's going on :) <rdar://problem/35941757> llvm-svn: 320540
This commit is contained in:
@@ -12,6 +12,7 @@
|
||||
#include "lldb/Utility/DataBuffer.h"
|
||||
#include "lldb/Utility/Endian.h"
|
||||
|
||||
#include "llvm/Support/Endian.h"
|
||||
#include "llvm/Support/ErrorHandling.h" // for llvm_unreachable
|
||||
#include "llvm/Support/MathExtras.h"
|
||||
|
||||
@@ -22,36 +23,7 @@
|
||||
|
||||
using namespace lldb;
|
||||
using namespace lldb_private;
|
||||
|
||||
static inline void WriteInt16(unsigned char *ptr, unsigned offset,
|
||||
uint16_t value) {
|
||||
*(uint16_t *)(ptr + offset) = value;
|
||||
}
|
||||
|
||||
static inline void WriteInt32(unsigned char *ptr, unsigned offset,
|
||||
uint32_t value) {
|
||||
*(uint32_t *)(ptr + offset) = value;
|
||||
}
|
||||
|
||||
static inline void WriteInt64(unsigned char *ptr, unsigned offset,
|
||||
uint64_t value) {
|
||||
*(uint64_t *)(ptr + offset) = value;
|
||||
}
|
||||
|
||||
static inline void WriteSwappedInt16(unsigned char *ptr, unsigned offset,
|
||||
uint16_t value) {
|
||||
*(uint16_t *)(ptr + offset) = llvm::ByteSwap_16(value);
|
||||
}
|
||||
|
||||
static inline void WriteSwappedInt32(unsigned char *ptr, unsigned offset,
|
||||
uint32_t value) {
|
||||
*(uint32_t *)(ptr + offset) = llvm::ByteSwap_32(value);
|
||||
}
|
||||
|
||||
static inline void WriteSwappedInt64(unsigned char *ptr, unsigned offset,
|
||||
uint64_t value) {
|
||||
*(uint64_t *)(ptr + offset) = llvm::ByteSwap_64(value);
|
||||
}
|
||||
using namespace llvm::support::endian;
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// Default constructor.
|
||||
@@ -202,9 +174,9 @@ uint32_t DataEncoder::PutU8(uint32_t offset, uint8_t value) {
|
||||
uint32_t DataEncoder::PutU16(uint32_t offset, uint16_t value) {
|
||||
if (ValidOffsetForDataOfSize(offset, sizeof(value))) {
|
||||
if (m_byte_order != endian::InlHostByteOrder())
|
||||
WriteSwappedInt16(m_start, offset, value);
|
||||
write16be(m_start + offset, value);
|
||||
else
|
||||
WriteInt16(m_start, offset, value);
|
||||
write16le(m_start + offset, value);
|
||||
|
||||
return offset + sizeof(value);
|
||||
}
|
||||
@@ -214,9 +186,9 @@ uint32_t DataEncoder::PutU16(uint32_t offset, uint16_t value) {
|
||||
uint32_t DataEncoder::PutU32(uint32_t offset, uint32_t value) {
|
||||
if (ValidOffsetForDataOfSize(offset, sizeof(value))) {
|
||||
if (m_byte_order != endian::InlHostByteOrder())
|
||||
WriteSwappedInt32(m_start, offset, value);
|
||||
write32be(m_start + offset, value);
|
||||
else
|
||||
WriteInt32(m_start, offset, value);
|
||||
write32le(m_start + offset, value);
|
||||
|
||||
return offset + sizeof(value);
|
||||
}
|
||||
@@ -226,9 +198,9 @@ uint32_t DataEncoder::PutU32(uint32_t offset, uint32_t value) {
|
||||
uint32_t DataEncoder::PutU64(uint32_t offset, uint64_t value) {
|
||||
if (ValidOffsetForDataOfSize(offset, sizeof(value))) {
|
||||
if (m_byte_order != endian::InlHostByteOrder())
|
||||
WriteSwappedInt64(m_start, offset, value);
|
||||
write64be(m_start + offset, value);
|
||||
else
|
||||
WriteInt64(m_start, offset, value);
|
||||
write64le(m_start + offset, value);
|
||||
|
||||
return offset + sizeof(value);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user