1*9a0e4156SSadaf Ebrahimi //===- llvm/Support/LEB128.h - [SU]LEB128 utility functions -----*- C++ -*-===// 2*9a0e4156SSadaf Ebrahimi // 3*9a0e4156SSadaf Ebrahimi // The LLVM Compiler Infrastructure 4*9a0e4156SSadaf Ebrahimi // 5*9a0e4156SSadaf Ebrahimi // This file is distributed under the University of Illinois Open Source 6*9a0e4156SSadaf Ebrahimi // License. See LICENSE.TXT for details. 7*9a0e4156SSadaf Ebrahimi // 8*9a0e4156SSadaf Ebrahimi //===----------------------------------------------------------------------===// 9*9a0e4156SSadaf Ebrahimi // 10*9a0e4156SSadaf Ebrahimi // This file declares some utility functions for encoding SLEB128 and 11*9a0e4156SSadaf Ebrahimi // ULEB128 values. 12*9a0e4156SSadaf Ebrahimi // 13*9a0e4156SSadaf Ebrahimi //===----------------------------------------------------------------------===// 14*9a0e4156SSadaf Ebrahimi 15*9a0e4156SSadaf Ebrahimi /* Capstone Disassembly Engine */ 16*9a0e4156SSadaf Ebrahimi /* By Nguyen Anh Quynh <[email protected]>, 2013-2015 */ 17*9a0e4156SSadaf Ebrahimi 18*9a0e4156SSadaf Ebrahimi #ifndef CS_LLVM_SUPPORT_LEB128_H 19*9a0e4156SSadaf Ebrahimi #define CS_LLVM_SUPPORT_LEB128_H 20*9a0e4156SSadaf Ebrahimi 21*9a0e4156SSadaf Ebrahimi #include "include/capstone/capstone.h" 22*9a0e4156SSadaf Ebrahimi 23*9a0e4156SSadaf Ebrahimi /// Utility function to decode a ULEB128 value. decodeULEB128(const uint8_t * p,unsigned * n)24*9a0e4156SSadaf Ebrahimistatic inline uint64_t decodeULEB128(const uint8_t *p, unsigned *n) 25*9a0e4156SSadaf Ebrahimi { 26*9a0e4156SSadaf Ebrahimi const uint8_t *orig_p = p; 27*9a0e4156SSadaf Ebrahimi uint64_t Value = 0; 28*9a0e4156SSadaf Ebrahimi unsigned Shift = 0; 29*9a0e4156SSadaf Ebrahimi do { 30*9a0e4156SSadaf Ebrahimi Value += (uint64_t)(*p & 0x7f) << Shift; 31*9a0e4156SSadaf Ebrahimi Shift += 7; 32*9a0e4156SSadaf Ebrahimi } while (*p++ >= 128); 33*9a0e4156SSadaf Ebrahimi if (n) 34*9a0e4156SSadaf Ebrahimi *n = (unsigned)(p - orig_p); 35*9a0e4156SSadaf Ebrahimi return Value; 36*9a0e4156SSadaf Ebrahimi } 37*9a0e4156SSadaf Ebrahimi 38*9a0e4156SSadaf Ebrahimi #endif // LLVM_SYSTEM_LEB128_H 39