• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include <libunwind.h>
2 
3 unw_word_t
_ReadSLEB(unsigned char ** dpp)4 _ReadSLEB (unsigned char **dpp)
5 {
6   unsigned shift = 0;
7   unw_word_t byte, result = 0;
8   unsigned char *bp = *dpp;
9 
10   while (1)
11     {
12       byte = *bp++;
13       result |= (byte & 0x7f) << shift;
14       shift += 7;
15       if ((byte & 0x80) == 0)
16 	break;
17     }
18 
19   if (shift < 8 * sizeof (unw_word_t) && (byte & 0x40) != 0)
20     /* sign-extend negative value */
21     result |= ((unw_word_t) -1) << shift;
22 
23   *dpp = bp;
24   return result;
25 }
26