12345678910111213141516171819202122232425 |
- #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;
- 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;
- }
|