Skip to content

Commit cd294e2

Browse files
author
whitequark
committedAug 2, 2015
artiq_personality: avoid unaligned loads.
1 parent 697b78d commit cd294e2

File tree

1 file changed

+31
-7
lines changed

1 file changed

+31
-7
lines changed
 

Diff for: ‎soc/runtime/artiq_personality.c

+31-7
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ static uintptr_t readEncodedPointer(const uint8_t **data, uint8_t encoding) {
126126
// first get value
127127
switch (encoding & 0x0F) {
128128
case DW_EH_PE_absptr:
129-
result = *((uintptr_t*)p);
129+
memcpy(&result, p, sizeof(uintptr_t));
130130
p += sizeof(uintptr_t);
131131
break;
132132
case DW_EH_PE_uleb128:
@@ -137,27 +137,51 @@ static uintptr_t readEncodedPointer(const uint8_t **data, uint8_t encoding) {
137137
result = readSLEB128(&p);
138138
break;
139139
case DW_EH_PE_udata2:
140-
result = *((uint16_t*)p);
140+
{
141+
uint16_t valu16;
142+
memcpy(&valu16, p, sizeof(uint16_t));
143+
result = valu16;
144+
}
141145
p += sizeof(uint16_t);
142146
break;
143147
case DW_EH_PE_udata4:
144-
result = *((uint32_t*)p);
148+
{
149+
uint32_t valu32;
150+
memcpy(&valu32, p, sizeof(uint32_t));
151+
result = valu32;
152+
}
145153
p += sizeof(uint32_t);
146154
break;
147155
case DW_EH_PE_udata8:
148-
result = *((uint64_t*)p);
156+
{
157+
uint64_t valu64;
158+
memcpy(&valu64, p, sizeof(uint64_t));
159+
result = valu64;
160+
}
149161
p += sizeof(uint64_t);
150162
break;
151163
case DW_EH_PE_sdata2:
152-
result = *((int16_t*)p);
164+
{
165+
int16_t val16;
166+
memcpy(&val16, p, sizeof(int16_t));
167+
result = val16;
168+
}
153169
p += sizeof(int16_t);
154170
break;
155171
case DW_EH_PE_sdata4:
156-
result = *((int32_t*)p);
172+
{
173+
int32_t val32;
174+
memcpy(&val32, p, sizeof(int32_t));
175+
result = val32;
176+
}
157177
p += sizeof(int32_t);
158178
break;
159179
case DW_EH_PE_sdata8:
160-
result = *((int64_t*)p);
180+
{
181+
int64_t val64;
182+
memcpy(&val64, p, sizeof(int64_t));
183+
result = val64;
184+
}
161185
p += sizeof(int64_t);
162186
break;
163187
default:

0 commit comments

Comments
 (0)
Please sign in to comment.