Project

General

Profile

Bug #789 » fix-unaligned-babeltrace.patch

Mathieu Desnoyers, 07/16/2014 11:02 AM

View differences:

formats/ctf/types/integer.c
{
uint8_t v;
v = *(const uint8_t *) ctf_get_pos_addr(pos);
memcpy(&v, ctf_get_pos_addr(pos), sizeof(v));
integer_definition->value._unsigned = v;
break;
}
......
{
uint16_t v;
v = *(const uint16_t *) ctf_get_pos_addr(pos);
memcpy(&v, ctf_get_pos_addr(pos), sizeof(v));
integer_definition->value._unsigned =
rbo ? GUINT16_SWAP_LE_BE(v) : v;
break;
......
{
uint32_t v;
v = *(const uint32_t *) ctf_get_pos_addr(pos);
memcpy(&v, ctf_get_pos_addr(pos), sizeof(v));
integer_definition->value._unsigned =
rbo ? GUINT32_SWAP_LE_BE(v) : v;
break;
......
{
uint64_t v;
v = *(const uint64_t *) ctf_get_pos_addr(pos);
memcpy(&v, ctf_get_pos_addr(pos), sizeof(v));
integer_definition->value._unsigned =
rbo ? GUINT64_SWAP_LE_BE(v) : v;
break;
......
{
int8_t v;
v = *(const int8_t *) ctf_get_pos_addr(pos);
memcpy(&v, ctf_get_pos_addr(pos), sizeof(v));
integer_definition->value._signed = v;
break;
}
......
{
int16_t v;
v = *(const int16_t *) ctf_get_pos_addr(pos);
memcpy(&v, ctf_get_pos_addr(pos), sizeof(v));
integer_definition->value._signed =
rbo ? (int16_t) GUINT16_SWAP_LE_BE(v) : v;
break;
......
{
int32_t v;
v = *(const int32_t *) ctf_get_pos_addr(pos);
memcpy(&v, ctf_get_pos_addr(pos), sizeof(v));
integer_definition->value._signed =
rbo ? (int32_t) GUINT32_SWAP_LE_BE(v) : v;
break;
......
{
int64_t v;
v = *(const int64_t *) ctf_get_pos_addr(pos);
memcpy(&v, ctf_get_pos_addr(pos), sizeof(v));
integer_definition->value._signed =
rbo ? (int64_t) GUINT64_SWAP_LE_BE(v) : v;
break;
......
if (pos->dummy)
goto end;
if (!integer_declaration->signedness) {
uint64_t v = integer_definition->value._unsigned;
switch (integer_declaration->len) {
case 8: *(uint8_t *) ctf_get_pos_addr(pos) = (uint8_t) v;
case 8:
{
uint8_t v = integer_definition->value._unsigned;
memcpy(ctf_get_pos_addr(pos), &v, sizeof(v));
break;
}
case 16:
*(uint16_t *) ctf_get_pos_addr(pos) = rbo ?
GUINT16_SWAP_LE_BE((uint16_t) v) :
(uint16_t) v;
{
uint16_t v = integer_definition->value._unsigned;
if (rbo)
v = GUINT16_SWAP_LE_BE(v);
memcpy(ctf_get_pos_addr(pos), &v, sizeof(v));
break;
}
case 32:
*(uint32_t *) ctf_get_pos_addr(pos) = rbo ?
GUINT32_SWAP_LE_BE((uint32_t) v) :
(uint32_t) v;
{
uint32_t v = integer_definition->value._unsigned;
if (rbo)
v = GUINT32_SWAP_LE_BE(v);
memcpy(ctf_get_pos_addr(pos), &v, sizeof(v));
break;
}
case 64:
*(uint64_t *) ctf_get_pos_addr(pos) = rbo ?
GUINT64_SWAP_LE_BE(v) : v;
{
uint64_t v = integer_definition->value._unsigned;
if (rbo)
v = GUINT64_SWAP_LE_BE(v);
memcpy(ctf_get_pos_addr(pos), &v, sizeof(v));
break;
}
default:
assert(0);
}
} else {
int64_t v = integer_definition->value._signed;
switch (integer_declaration->len) {
case 8: *(int8_t *) ctf_get_pos_addr(pos) = (int8_t) v;
case 8:
{
uint8_t v = integer_definition->value._signed;
memcpy(ctf_get_pos_addr(pos), &v, sizeof(v));
break;
}
case 16:
*(int16_t *) ctf_get_pos_addr(pos) = rbo ?
(int16_t) GUINT16_SWAP_LE_BE((int16_t) v) :
(int16_t) v;
{
int16_t v = integer_definition->value._signed;
if (rbo)
v = GUINT16_SWAP_LE_BE(v);
memcpy(ctf_get_pos_addr(pos), &v, sizeof(v));
break;
}
case 32:
*(int32_t *) ctf_get_pos_addr(pos) = rbo ?
(int32_t) GUINT32_SWAP_LE_BE((int32_t) v) :
(int32_t) v;
{
int32_t v = integer_definition->value._signed;
if (rbo)
v = GUINT32_SWAP_LE_BE(v);
memcpy(ctf_get_pos_addr(pos), &v, sizeof(v));
break;
}
case 64:
*(int64_t *) ctf_get_pos_addr(pos) = rbo ?
GUINT64_SWAP_LE_BE(v) : v;
{
int64_t v = integer_definition->value._signed;
if (rbo)
v = GUINT64_SWAP_LE_BE(v);
memcpy(ctf_get_pos_addr(pos), &v, sizeof(v));
break;
}
default:
assert(0);
}
......
if (!integer_declaration->signedness) {
if (integer_declaration->byte_order == LITTLE_ENDIAN)
bt_bitfield_read_le(mmap_align_addr(pos->base_mma) +
pos->mmap_base_offset, unsigned long,
pos->mmap_base_offset, unsigned char,
pos->offset, integer_declaration->len,
&integer_definition->value._unsigned);
else
bt_bitfield_read_be(mmap_align_addr(pos->base_mma) +
pos->mmap_base_offset, unsigned long,
pos->mmap_base_offset, unsigned char,
pos->offset, integer_declaration->len,
&integer_definition->value._unsigned);
} else {
if (integer_declaration->byte_order == LITTLE_ENDIAN)
bt_bitfield_read_le(mmap_align_addr(pos->base_mma) +
pos->mmap_base_offset, unsigned long,
pos->mmap_base_offset, unsigned char,
pos->offset, integer_declaration->len,
&integer_definition->value._signed);
else
bt_bitfield_read_be(mmap_align_addr(pos->base_mma) +
pos->mmap_base_offset, unsigned long,
pos->mmap_base_offset, unsigned char,
pos->offset, integer_declaration->len,
&integer_definition->value._signed);
}
......
if (!integer_declaration->signedness) {
if (integer_declaration->byte_order == LITTLE_ENDIAN)
bt_bitfield_write_le(mmap_align_addr(pos->base_mma) +
pos->mmap_base_offset, unsigned long,
pos->mmap_base_offset, unsigned char,
pos->offset, integer_declaration->len,
integer_definition->value._unsigned);
else
bt_bitfield_write_be(mmap_align_addr(pos->base_mma) +
pos->mmap_base_offset, unsigned long,
pos->mmap_base_offset, unsigned char,
pos->offset, integer_declaration->len,
integer_definition->value._unsigned);
} else {
if (integer_declaration->byte_order == LITTLE_ENDIAN)
bt_bitfield_write_le(mmap_align_addr(pos->base_mma) +
pos->mmap_base_offset, unsigned long,
pos->mmap_base_offset, unsigned char,
pos->offset, integer_declaration->len,
integer_definition->value._signed);
else
bt_bitfield_write_be(mmap_align_addr(pos->base_mma) +
pos->mmap_base_offset, unsigned long,
pos->mmap_base_offset, unsigned char,
pos->offset, integer_declaration->len,
integer_definition->value._signed);
}
(5-5/5)