136c7442db32c9c9d37fc4bb5999623a2fd443a0bhp.com!davidm#include <libunwind.h> 236c7442db32c9c9d37fc4bb5999623a2fd443a0bhp.com!davidm 336c7442db32c9c9d37fc4bb5999623a2fd443a0bhp.com!davidmunw_word_t 436c7442db32c9c9d37fc4bb5999623a2fd443a0bhp.com!davidm_ReadSLEB (unsigned char **dpp) 536c7442db32c9c9d37fc4bb5999623a2fd443a0bhp.com!davidm{ 636c7442db32c9c9d37fc4bb5999623a2fd443a0bhp.com!davidm unsigned shift = 0; 736c7442db32c9c9d37fc4bb5999623a2fd443a0bhp.com!davidm unw_word_t byte, result = 0; 836c7442db32c9c9d37fc4bb5999623a2fd443a0bhp.com!davidm unsigned char *bp = *dpp; 936c7442db32c9c9d37fc4bb5999623a2fd443a0bhp.com!davidm 1036c7442db32c9c9d37fc4bb5999623a2fd443a0bhp.com!davidm while (1) 1136c7442db32c9c9d37fc4bb5999623a2fd443a0bhp.com!davidm { 1236c7442db32c9c9d37fc4bb5999623a2fd443a0bhp.com!davidm byte = *bp++; 1336c7442db32c9c9d37fc4bb5999623a2fd443a0bhp.com!davidm result |= (byte & 0x7f) << shift; 1415df8b804c7931389fc255e1953a43e32f9698c2hp.com!davidm shift += 7; 1536c7442db32c9c9d37fc4bb5999623a2fd443a0bhp.com!davidm if ((byte & 0x80) == 0) 1636c7442db32c9c9d37fc4bb5999623a2fd443a0bhp.com!davidm break; 1736c7442db32c9c9d37fc4bb5999623a2fd443a0bhp.com!davidm } 1836c7442db32c9c9d37fc4bb5999623a2fd443a0bhp.com!davidm 1936c7442db32c9c9d37fc4bb5999623a2fd443a0bhp.com!davidm if (shift < 8 * sizeof (unw_word_t) && (byte & 0x40) != 0) 2036c7442db32c9c9d37fc4bb5999623a2fd443a0bhp.com!davidm /* sign-extend negative value */ 2136c7442db32c9c9d37fc4bb5999623a2fd443a0bhp.com!davidm result |= ((unw_word_t) -1) << shift; 2236c7442db32c9c9d37fc4bb5999623a2fd443a0bhp.com!davidm 2336c7442db32c9c9d37fc4bb5999623a2fd443a0bhp.com!davidm *dpp = bp; 2436c7442db32c9c9d37fc4bb5999623a2fd443a0bhp.com!davidm return result; 2536c7442db32c9c9d37fc4bb5999623a2fd443a0bhp.com!davidm} 26