1
0
Fork 0
mirror of https://github.com/tobast/libunwind-eh_elf.git synced 2024-11-28 18:07:37 +01:00
libunwind-eh_elf/src/mi/_ReadSLEB.c

26 lines
465 B
C
Raw Normal View History

2004-04-20 18:53:44 +02:00
#include <libunwind.h>
unw_word_t
_ReadSLEB (unsigned char **dpp)
{
unsigned shift = 0;
unw_word_t byte, result = 0;
unsigned char *bp = *dpp;
while (1)
{
byte = *bp++;
result |= (byte & 0x7f) << shift;
shift += 7;
2004-04-20 18:53:44 +02:00
if ((byte & 0x80) == 0)
break;
}
if (shift < 8 * sizeof (unw_word_t) && (byte & 0x40) != 0)
/* sign-extend negative value */
result |= ((unw_word_t) -1) << shift;
*dpp = bp;
return result;
}