Home | History | Annotate | Download | only in jdwpspy
      1 /*
      2  * Copyright 2006 The Android Open Source Project
      3  *
      4  * jdwpspy common stuff.
      5  */
      6 #ifndef ART_JDWPSPY_COMMON_H_
      7 #define ART_JDWPSPY_COMMON_H_
      8 
      9 #include <stdint.h>
     10 #include <stdio.h>
     11 #include <sys/types.h>
     12 
     13 typedef uint8_t u1;
     14 typedef uint16_t u2;
     15 typedef uint32_t u4;
     16 typedef uint64_t u8;
     17 
     18 #define NELEM(x) (sizeof(x) / sizeof((x)[0]))
     19 
     20 #ifndef _JDWP_MISC_INLINE
     21 # define INLINE extern inline
     22 #else
     23 # define INLINE
     24 #endif
     25 
     26 /*
     27  * Get 1 byte.  (Included to make the code more legible.)
     28  */
     29 INLINE u1 get1(unsigned const char* pSrc) {
     30     return *pSrc;
     31 }
     32 
     33 /*
     34  * Get 2 big-endian bytes.
     35  */
     36 INLINE u2 get2BE(unsigned char const* pSrc) {
     37     u2 result;
     38 
     39     result = *pSrc++ << 8;
     40     result |= *pSrc++;
     41 
     42     return result;
     43 }
     44 
     45 /*
     46  * Get 4 big-endian bytes.
     47  */
     48 INLINE u4 get4BE(unsigned char const* pSrc) {
     49     u4 result;
     50 
     51     result = *pSrc++ << 24;
     52     result |= *pSrc++ << 16;
     53     result |= *pSrc++ << 8;
     54     result |= *pSrc++;
     55 
     56     return result;
     57 }
     58 
     59 /*
     60  * Get 8 big-endian bytes.
     61  */
     62 INLINE u8 get8BE(unsigned char const* pSrc) {
     63     u8 result;
     64 
     65     result = (u8) *pSrc++ << 56;
     66     result |= (u8) *pSrc++ << 48;
     67     result |= (u8) *pSrc++ << 40;
     68     result |= (u8) *pSrc++ << 32;
     69     result |= (u8) *pSrc++ << 24;
     70     result |= (u8) *pSrc++ << 16;
     71     result |= (u8) *pSrc++ << 8;
     72     result |= (u8) *pSrc++;
     73 
     74     return result;
     75 }
     76 
     77 
     78 /*
     79  * Start here.
     80  */
     81 int run(const char* connectHost, int connectPort, int listenPort);
     82 
     83 /*
     84  * Print a hex dump to the specified file pointer.
     85  *
     86  * "local" mode prints a hex dump starting from offset 0 (roughly equivalent
     87  * to "xxd -g1").
     88  *
     89  * "mem" mode shows the actual memory address, and will offset the start
     90  * so that the low nibble of the address is always zero.
     91  */
     92 enum HexDumpMode { kHexDumpLocal, kHexDumpMem };
     93 void printHexDump(const void* vaddr, size_t length);
     94 void printHexDump2(const void* vaddr, size_t length, const char* prefix);
     95 void printHexDumpEx(FILE* fp, const void* vaddr, size_t length,
     96     HexDumpMode mode, const char* prefix);
     97 
     98 #endif  // ART_JDWPSPY_COMMON_H_
     99