@@ -126,7 +126,7 @@ static uintptr_t readEncodedPointer(const uint8_t **data, uint8_t encoding) {
126
126
// first get value
127
127
switch (encoding & 0x0F ) {
128
128
case DW_EH_PE_absptr :
129
- result = * (( uintptr_t * ) p );
129
+ memcpy ( & result , p , sizeof ( uintptr_t ) );
130
130
p += sizeof (uintptr_t );
131
131
break ;
132
132
case DW_EH_PE_uleb128 :
@@ -137,27 +137,51 @@ static uintptr_t readEncodedPointer(const uint8_t **data, uint8_t encoding) {
137
137
result = readSLEB128 (& p );
138
138
break ;
139
139
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
+ }
141
145
p += sizeof (uint16_t );
142
146
break ;
143
147
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
+ }
145
153
p += sizeof (uint32_t );
146
154
break ;
147
155
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
+ }
149
161
p += sizeof (uint64_t );
150
162
break ;
151
163
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
+ }
153
169
p += sizeof (int16_t );
154
170
break ;
155
171
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
+ }
157
177
p += sizeof (int32_t );
158
178
break ;
159
179
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
+ }
161
185
p += sizeof (int64_t );
162
186
break ;
163
187
default :
0 commit comments