/* pack probe */
PACK_COMMON_BEGIN(MSG_PROBE_SCREENSHOT, API_ID_captureScreen, "", 0);
- PACK_COMMON_END('d', 0, 0, 0);
+ PACK_COMMON_END_THOUGH('d', 0, 0, 0);
PACK_SCREENSHOT(dstpath, getOrientation());
SET_MSG_LEN();
log.length = GET_MSG_LEN() + MSG_HDR_LEN + strlen(dstpath) + 1;
#define BUF_PTR p
#define RET_PTR ret_p
+#define CALLER_PTR caller_p
+#define CALL_TYPE_PTR call_type_p
#define PACK_INT32(val) \
BUF_PTR = pack_int32(BUF_PTR, val);
#define PACK_INT64(val) \
do { /* PACK_COMMON_END */ \
BUF_PTR = pack_ret(RET_PTR, ret_type, (uintptr_t)ret); /* return val */ \
BUF_PTR = pack_int64(BUF_PTR, (uint64_t)errn); /* errno */ \
- BUF_PTR = pack_int32(BUF_PTR, (uint32_t)CALL_TYPE); /* internal call*/ \
- BUF_PTR = pack_int64(BUF_PTR, (uintptr_t)CALLER_ADDRESS); /*caller addr*/\
+ CALL_TYPE_PTR = BUF_PTR; \
+ BUF_PTR = pack_int32(BUF_PTR, (uint32_t)0); /* internal call*/ \
+ CALLER_PTR = BUF_PTR; \
+ BUF_PTR = pack_int64(BUF_PTR, (uintptr_t)0); /*caller addr*/ \
+ BUF_PTR = pack_int32(BUF_PTR, 0); /* reserved */ \
+ BUF_PTR = pack_int32(BUF_PTR, 0); /* reserved */ \
+ } while (0)
+
+#define PACK_COMMON_END_THOUGH(ret_type, ret, errn, intern_call) \
+ do { /* PACK_COMMON_END */ \
+ BUF_PTR = pack_ret(RET_PTR, ret_type, (uintptr_t)ret); /* return val */ \
+ BUF_PTR = pack_int64(BUF_PTR, (uint64_t)errn); /* errno */ \
+ BUF_PTR = pack_int32(BUF_PTR, (uint32_t)0); /* internal call*/ \
+ BUF_PTR = pack_int64(BUF_PTR, (uintptr_t)0); /*caller addr*/\
BUF_PTR = pack_int32(BUF_PTR, 0); /* reserved */ \
BUF_PTR = pack_int32(BUF_PTR, 0); /* reserved */ \
} while (0)
#define PREPARE_LOCAL_BUF() \
char *LOCAL_BUF = (char *)(*real_malloc)(MAX_LOCAL_BUF_SIZE); \
char *BUF_PTR = LOCAL_BUF; \
- char *RET_PTR = NULL
+ char *RET_PTR = NULL; \
+ char *CALL_TYPE_PTR = NULL; \
+ char *CALLER_PTR = NULL
#define PREPARE_LOCAL_BUF_THOUGH(BUFF) \
char *LOCAL_BUF = BUFF; \
#define FLUSH_LOCAL_BUF() \
SET_MSG_LEN(); \
- send(gTraceInfo.socket.daemonSock, msg_buf, (p - msg_buf), 0); \
+ WRITE_MSG(msg_buf, (p - msg_buf), CALL_TYPE_PTR, CALLER_PTR); \
free(LOCAL_BUF); \
LOCAL_BUF = NULL
unsigned long get_caller_addr(unsigned long caller_addr);
unsigned char get_call_type(unsigned char call_type);
+void write_msg(unsigned long msg_buf, size_t len, unsigned long call_type_p,
+ unsigned long caller_p);
#define CALLER_ADDRESS \
((void*) get_caller_addr(0xbadbeef))
#define CALL_TYPE \
((uint32_t) get_call_type(0xff))
+#define WRITE_MSG(msg_buf, len, call_type_p, caller_p) \
+ (write_msg((unsigned long)msg_buf, (size_t)len, \
+ (unsigned long)call_type_p, (unsigned long)caller_p))
+
#define BACKTRACE_SYMBOLS cached_backtrace_symbols
typedef enum
print "WARNING: <get_call_type> address is not found!"
return
+ write_msg_addr = __get_addr_by_funcname_handler(probe_lib, "write_msg")
+ if write_msg_addr is None:
+ print "WARNING: <write_msg> address is not found!"
+ return
+
file.write("static const char *probe_lib = \"" + da_inst_dir + "/" + da_lib + "\";\n")
file.write("static unsigned long get_caller_addr = 0x" + get_caller_addr + ";\n")
file.write("static unsigned long get_call_type_addr = 0x" + get_call_type_addr + ";\n")
+ file.write("static unsigned long write_msg_addr = 0x" + write_msg_addr + ";\n")
def generate_headers(dict, da_inst_dir, da_lib, probe_lib):