38 value->
buf = offset_ptr;
54 if (addr < parent_value->res.addr
59 value->
buf = parent_value->
buf + (addr - parent_value->
res.
addr);
82 if (!(value =
malloc(
sizeof(
struct value))))
84 memset(value,0,
sizeof(
struct value));
113 if (!(value =
malloc(
sizeof(
struct value))))
115 memset(value,0,
sizeof(
struct value));
122 vwarn(
"value without thread being created; BUG!\n");
146 RHOLD(lsymbol,value);
170 if (!(value =
malloc(
sizeof(
struct value))))
172 memset(value,0,
sizeof(
struct value));
186 RHOLD(lsymbol,value);
270 (
unsigned char *)out->
buf);
334 vwarn(
"value no longer associated with a thread!\n");
335 errno = EADDRNOTAVAIL;
339 vwarn(
"value thread no longer associated with a target!\n");
340 errno = EADDRNOTAVAIL;
344 vwarn(
"value has a parent and you did not force recursive!\n");
358 verror(
"could not read reg %d in target %s!\n",
362 memcpy(value->
buf,®val,value->
bufsiz);
366 (
unsigned char *)value->
buf)) {
379 char **old_buf,
int *old_bufsiz,
value_hash_t *old_vhash) {
380 verror(
"not supported yet!\n");
385 signed char v_c(
struct value *v) {
return *((
signed char *)v->
buf); }
386 unsigned char v_uc(
struct value *v) {
return *((
unsigned char *)v->
buf); }
397 if (v->
bufsiz == (
signed)
sizeof(int64_t))
399 else if (v->
bufsiz == (
signed)
sizeof(int32_t))
401 else if (v->
bufsiz == (
signed)
sizeof(int16_t))
403 else if (v->
bufsiz == (
signed)
sizeof(int8_t))
412 if (v->
bufsiz == (
signed)
sizeof(uint64_t))
414 else if (v->
bufsiz == (
signed)
sizeof(uint32_t))
416 else if (v->
bufsiz == (
signed)
sizeof(uint16_t))
418 else if (v->
bufsiz == (
signed)
sizeof(uint8_t))
437 else if (bufsiz > value->
bufsiz) {
442 memcpy(value->
buf,buf,bufsiz);
452 else if (bufsiz > value->
bufsiz) {
457 memcpy(value->
buf,buf,bufsiz);
459 if (bufsiz < value->bufsiz)
460 memset(value->
buf + bufsiz,0,value->
bufsiz - bufsiz);
466 if ((
signed)
sizeof(
signed char) > value->
bufsiz) {
470 memcpy(value->
buf,&v,
sizeof(
signed char));
474 if ((
signed)
sizeof(
signed char) > value->
bufsiz) {
478 memcpy(value->
buf,&v,
sizeof(
signed char));
482 if ((
signed)
sizeof(
signed char) > value->
bufsiz) {
486 memcpy(value->
buf,&v,
sizeof(
signed char));
490 if ((
signed)
sizeof(uint8_t) > value->
bufsiz) {
494 memcpy(value->
buf,&v,
sizeof(uint8_t));
498 if ((
signed)
sizeof(uint16_t) > value->
bufsiz) {
502 memcpy(value->
buf,&v,
sizeof(uint16_t));
506 if ((
signed)
sizeof(uint32_t) > value->
bufsiz) {
510 memcpy(value->
buf,&v,
sizeof(uint32_t));
514 if ((
signed)
sizeof(uint64_t) > value->
bufsiz) {
518 memcpy(value->
buf,&v,
sizeof(uint64_t));
522 if ((
signed)
sizeof(int8_t) > value->
bufsiz) {
526 memcpy(value->
buf,&v,
sizeof(int8_t));
530 if ((
signed)
sizeof(int16_t) > value->
bufsiz) {
534 memcpy(value->
buf,&v,
sizeof(int16_t));
538 if ((
signed)
sizeof(int32_t) > value->
bufsiz) {
542 memcpy(value->
buf,&v,
sizeof(int32_t));
546 if ((
signed)
sizeof(int64_t) > value->
bufsiz) {
550 memcpy(value->
buf,&v,
sizeof(int64_t));
554 if ((
signed)
sizeof(
float) > value->
bufsiz) {
558 memcpy(value->
buf,&v,
sizeof(
float));
562 if ((
signed)
sizeof(
double) > value->
bufsiz) {
566 memcpy(value->
buf,&v,
sizeof(
double));
570 if ((
signed)
sizeof(
long double) > value->
bufsiz) {
574 memcpy(value->
buf,&v,
sizeof(
long double));
582 memcpy(value->
buf,&v,
sizeof(
ADDR));
587 if (value->
bufsiz == (
signed)
sizeof(int64_t))
589 else if (value->
bufsiz == (
signed)
sizeof(int32_t))
591 else if (value->
bufsiz == (
signed)
sizeof(int16_t))
593 else if (value->
bufsiz == (
signed)
sizeof(int8_t))
602 if (value->
bufsiz == (
signed)
sizeof(uint64_t))
604 else if (value->
bufsiz == (
signed)
sizeof(uint32_t))
606 else if (value->
bufsiz == (
signed)
sizeof(uint16_t))
608 else if (value->
bufsiz == (
signed)
sizeof(uint8_t))
617 static inline int __d2hs(
char *buf,
unsigned int len,
char *str) {
624 hi = (buf[
i] >> 4) & 0xf;
626 if (lo <= 9) str[i*2+1] =
'0' + lo;
627 else str[i*2+1] =
'a' + (lo - 10);
629 if (hi <= 9) str[i*2] =
'0' + hi;
630 else str[i*2] =
'a' + (hi - 10);
642 struct value fake_value;
656 void *decoder_data = NULL;
661 if ((buf == NULL && buflen != 0) || (buf != NULL && buflen == 0)) {
662 verror(
"programming bug: buf/buflen must both be NULL, or non-NULL!\n");
667 memset(&fake_value,0,
sizeof(fake_value));
674 #define Lsnprintf(...) \
675 snprintf((buf != NULL) ? buf + nrc : NULL,(buflen != 0) ? buflen - nrc : 0, \
681 _trc = snprintf((buf != NULL) ? buf + nrc : NULL, \
682 (buflen != 0) ? buflen - nrc : 0, \
687 _trc = ((value->bufsiz * 2) > (buflen - nrc - 1)) \
688 ? (buflen - nrc - 1) / 2 : value->bufsiz; \
689 __d2hs(value->buf,_trc,buf + nrc); \
691 if (nrc < (buflen - 1)) { \
695 else if (nrc < buflen) \
698 buf[buflen - 1] = '\0'; \
701 #define VSBPA(msg,...) \
704 _trc = snprintf((buf != NULL) ? buf + nrc : NULL, \
705 (buflen != 0) ? buflen - nrc : 0, \
706 "<"msg"::", ## __VA_ARGS__); \
710 _trc = ((value->bufsiz * 2) > (buflen - nrc - 1)) \
711 ? (buflen - nrc - 1) / 2 : value->bufsiz; \
712 __d2hs(value->buf,_trc,buf + nrc); \
714 if (nrc < (buflen - 1)) { \
718 else if (nrc < buflen) \
721 buf[buflen - 1] = '\0'; \
728 for (j = 0; j < value->
bufsiz && value->
buf[j] !=
'\0'; ++j) {
729 if (!isgraph(value->
buf[j]) && !isspace(value->
buf[j])) {
735 VSBP(
"BINARY_STRING");
753 int _trc = decoder(target,decoder_data,value,buf + nrc,buflen - nrc);
767 else if (tbytesize == 2)
769 else if (tbytesize == 4)
771 else if (tbytesize == 8)
774 VSBPA(
"UNSUP_ENC_%d",enc);
780 else if (tbytesize == 2)
782 else if (tbytesize == 4)
784 else if (tbytesize == 8)
787 VSBPA(
"UNSUP_ENC_%d",enc);
792 else if (tbytesize == 2)
794 else if (tbytesize == 4)
796 else if (tbytesize == 8)
799 VSBPA(
"UNSUP_ENC_%d",enc);
804 else if (tbytesize == 8)
806 else if (tbytesize == 16)
809 VSBPA(
"UNSUP_ENC_%d",enc);
815 else if (tbytesize == 2)
818 VSBPA(
"UNSUP_ENC_%d",enc);
821 VSBPA(
"UNSUP_ENC_%d",enc);
824 VSBPA(
"UNSUP_ENC_%d",enc);
827 VSBPA(
"UNSUP_ENC_%d",enc);
830 VSBPA(
"UNSUP_ENC_%d",enc);
833 VSBPA(
"UNSUP_ENC_%d",enc);
836 VSBPA(
"UNSUP_ENC_%d",enc);
839 VSBPA(
"UNSUP_ENC_%d",enc);
842 VSBPA(
"UNSUP_ENC_%d",enc);
848 else if (tbytesize == 8)
864 llen = g_slist_length(subranges);
865 subrange_first = (int)(uintptr_t)g_slist_nth_data(subranges,0);
879 indicies =
malloc(
sizeof(
int)*llen);
880 for (i = 0; i < llen; ++
i) {
885 fake_value.
buf = value->
buf;
886 fake_value.
type = datatype2;
890 nrc +=
value_snprintf(&fake_value,(buf != NULL) ? buf + nrc : NULL,(buflen != 0) ? buflen - nrc : 0);
897 for (j = llen - 1; j > -1; --j) {
899 subrange = (int)(uintptr_t)g_slist_nth_data(subranges,j);
901 if (indicies[j] >= subrange) {
913 if (indicies[0] >= subrange_first)
916 for ( ; j < llen; ++j)
932 memset(&tloc,0,
sizeof(tloc));
939 fake_value.
buf = value->
buf + offset;
942 nrc +=
value_snprintf(&fake_value,(buf != NULL) ? buf + nrc : NULL,(buflen != 0) ? buflen - nrc : 0);
957 if (strncmp((
char *)constval,value->
buf,
994 struct value fake_value;
1002 struct symbol *datatype2;
1007 void *decoder_data = NULL;
1009 char *decstrbuf = NULL;
1010 int decstrbuflen = 0;
1014 fprintf(ud->
stream,
"\"%s\"",value->
buf);
1018 memset(&fake_value,0,
sizeof(fake_value));
1029 decstrbuflen = 4096;
1030 decstrbuf = (
char *)
malloc(decstrbuflen);
1031 int _trc = decoder(target,decoder_data,value,decstrbuf,decstrbuflen);
1033 if (_trc < decstrbuflen) {
1035 fputs(decstrbuf,ud->
stream);
1041 decstrbuflen = _trc + 1;
1042 decstrbuf = (
char *)
malloc(decstrbuflen);
1043 decoder(target,decoder_data,value,decstrbuf,decstrbuflen);
1045 fputs(decstrbuf,ud->
stream);
1063 else if (tbytesize == 2)
1065 else if (tbytesize == 4)
1067 else if (tbytesize == 8)
1070 fprintf(ud->
stream,
"<UNSUPPORTED_BYTESIZE_%d>",tbytesize);
1076 else if (tbytesize == 2)
1078 else if (tbytesize == 4)
1080 else if (tbytesize == 8)
1083 fprintf(ud->
stream,
"<UNSUPPORTED_BYTESIZE_%d>",tbytesize);
1088 else if (tbytesize == 2)
1090 else if (tbytesize == 4)
1092 else if (tbytesize == 8)
1095 fprintf(ud->
stream,
"<UNSUPPORTED_BYTESIZE_%d>",tbytesize);
1099 fprintf(ud->
stream,
"%f",(
double)
v_f(value));
1100 else if (tbytesize == 8)
1102 else if (tbytesize == 16)
1105 fprintf(ud->
stream,
"<UNSUPPORTED_BYTESIZE_%d>",tbytesize);
1110 fprintf(ud->
stream,
"%c",(
int)
v_c(value));
1111 else if (tbytesize == 2)
1112 fprintf(ud->
stream,
"%lc",(wint_t)
v_wc(value));
1114 fprintf(ud->
stream,
"<UNSUPPORTED_BYTESIZE_%d>",tbytesize);
1117 fprintf(ud->
stream,
"<UNSUPPORTED_COMPLEX_FLOAT_%d>",
1121 fprintf(ud->
stream,
"<UNSUPPORTED_IMAGINARY_FLOAT_%d>",
1125 fprintf(ud->
stream,
"<UNSUPPORTED_PACKED_DECIMAL_%d>",
1129 fprintf(ud->
stream,
"<UNSUPPORTED_NUMERIC_STRING_%d>",
1133 fprintf(ud->
stream,
"<UNSUPPORTED_EDITED_%d>",
1137 fprintf(ud->
stream,
"<UNSUPPORTED_SIGNED_FIXED_%d>",
1141 fprintf(ud->
stream,
"<UNSUPPORTED_UNSIGNED_FIXED_%d>",
1148 else if (tbytesize == 8)
1151 fprintf(ud->
stream,
"<UNSUPPORTED_PTR_%d>",tbytesize);
1160 fprintf(ud->
stream,
"[ ]");
1164 subrange_first = (int)(uintptr_t)g_slist_nth_data(subranges,0);
1165 llen = g_slist_length(subranges);
1173 fprintf(ud->
stream,
"\"%.*s\"",subrange_first,value->
buf);
1178 indicies =
malloc(
sizeof(
int)*llen);
1179 for (i = 0; i < llen; ++
i) {
1181 fprintf(ud->
stream,
"[ ");
1184 fake_value.
buf = value->
buf;
1185 fake_value.
type = datatype2;
1189 fprintf(ud->
stream,
", ");
1195 for (j = llen - 1; j > -1; --j) {
1198 subrange = (int)(uintptr_t)g_slist_nth_data(subranges,j);
1199 if (indicies[j] >= subrange) {
1200 fprintf(ud->
stream,
" ],");
1211 if (indicies[0] >= subrange_first)
1214 for ( ; j < llen; ++j)
1215 fprintf(ud->
stream,
" [ ");
1229 memset(&tloc,0,
sizeof(tloc));
1236 fake_value.
buf = value->
buf + offset;
1244 fprintf(ud->
stream,
" }");
1253 if (strncmp((
char *)constval,value->
buf,
1271 fprintf(ud->
stream,
"<UNSUPPORTED_TYPEDEF_%s>",
1275 fprintf(ud->
stream,
"<UNSUPPORTED_FUNCTION_%s>",
1279 fprintf(ud->
stream,
"NULL");
1304 np =
malloc(strlen(p) + 1 + 2);
1305 sprintf(np,
"%s%s",p,
" ");
1317 for (i = 0; i < alen; ++
i) {
1336 signed char rv_c(
void *buf) {
return *((
signed char *)buf); }
1337 unsigned char rv_uc(
void *buf) {
return *((
unsigned char *)buf); }
1338 wchar_t rv_wc(
void *buf) {
return *((
wchar_t *)buf); }
1339 uint8_t
rv_u8(
void *buf) {
return *((uint8_t *)buf); }
1340 uint16_t
rv_u16(
void *buf) {
return *((uint16_t *)buf); }
1341 uint32_t
rv_u32(
void *buf) {
return *((uint32_t *)buf); }
1342 uint64_t
rv_u64(
void *buf) {
return *((uint64_t *)buf); }
1343 int8_t
rv_i8(
void *buf) {
return *((int8_t *)buf); }
1344 int16_t
rv_i16(
void *buf) {
return *((int16_t *)buf); }
1345 int32_t
rv_i32(
void *buf) {
return *((int32_t *)buf); }
1346 int64_t
rv_i64(
void *buf) {
return *((int64_t *)buf); }
1347 float rv_f(
void *buf) {
return *((
float *)buf); }
1348 double rv_d(
void *buf) {
return *((
double *)buf); }
1349 long double rv_dd(
void *buf) {
return *((
long double *)buf); }
unum_t v_unum(struct value *v)
void value_dump_simple(struct value *value, struct dump_info *ud)
int32_t rv_i32(void *buf)
uint8_t v_u8(struct value *v)
int value_update_wc(struct value *value, wchar_t v)
struct value * value_clone(struct value *in)
int16_t rv_i16(void *buf)
num_t v_num(struct value *v)
#define SYMBOLX_SUBRANGES(sym)
struct value * value_create_raw(struct target *target, struct target_thread *tthread, struct memrange *range, int len)
void value_set_const(struct value *value)
signed char rv_c(void *buf)
uint64_t rv_u64(void *buf)
static uint64_t unsigned int i
void value_dump(struct value *value, struct dump_info *ud)
#define SYMBOLX_MEMBERS(sym)
int value_update_f(struct value *value, float v)
#define v_g_slist_foreach(gslhead, gslcur, elm)
void location_internal_free(struct location *location)
int value_update_zero(struct value *value, const char *buf, int bufsiz)
void __value_dump(struct value *value, struct dump_info *ud)
struct value * value_create_noalloc(struct target_thread *thread, struct memrange *range, struct lsymbol *lsymbol, struct symbol *type)
long double rv_dd(void *buf)
void value_free(struct value *value)
int value_set_reg(struct value *value, REG reg)
uint32_t v_u32(struct value *v)
struct target_thread * global_thread
double v_d(struct value *v)
int8_t v_i8(struct value *v)
uint32_t symbol_get_bytesize(struct symbol *symbol)
struct target_thread * thread
#define verror(format,...)
uint16_t rv_u16(void *buf)
int target_decoder_lookup(struct target *target, struct value *value, target_decoder_t *decoder, void **decoder_data)
unsigned char * target_read_addr(struct target *target, ADDR addr, unsigned long length, unsigned char *buf)
struct symbol * symbol_get_datatype(struct symbol *symbol)
signed char v_c(struct value *v)
int value_snprintf(struct value *value, char *buf, int buflen)
int32_t v_i32(struct value *v)
loctype_t symbol_resolve_location(struct symbol *symbol, struct location_ctxt *lctxt, struct location *o_loc)
int value_update_addr(struct value *value, ADDR v)
#define vwarn(format,...)
struct value * value_create(struct target_thread *thread, struct memrange *range, struct lsymbol *lsymbol, struct symbol *type)
int value_update_i16(struct value *value, int16_t v)
int symbol_type_is_char(struct symbol *type)
REGVAL target_read_reg(struct target *target, tid_t tid, REG reg)
#define LOCATION_OFFSET(loc)
int64_t rv_i64(void *buf)
int value_refresh_diff(struct value *value, int recurse, value_diff_t *vdiff, char **old_buf, int *old_bufsiz, value_hash_t *old_vhash)
int value_refresh(struct value *value, int recursive)
int value_update_u64(struct value *value, uint64_t v)
char * v_string(struct value *v)
datatype_code_t datatype_code
uint16_t v_u16(struct value *v)
unsigned char v_uc(struct value *v)
#define SYMBOLX_ENCODING_V(sym)
unsigned char rv_uc(void *buf)
struct value * parent_value
int value_set_mmap(struct value *value, ADDR addr, struct memcache_mmap_entry *mme, char *offset_ptr)
int(* target_decoder_t)(struct target *target, void *data, struct value *value, char *buf, int buflen)
int value_update_d(struct value *value, double v)
wchar_t v_wc(struct value *v)
REGVAL target_read_creg(struct target *target, tid_t tid, common_reg_t reg)
struct value * value_reload_as_type(struct value *in, struct symbol *type, int force)
int value_update_i32(struct value *value, int32_t v)
struct value * value_create_type(struct target_thread *thread, struct memrange *range, struct symbol *type)
struct symbol * symbol_type_skip_qualifiers(struct symbol *type)
uint32_t rv_u32(void *buf)
int value_update_u16(struct value *value, uint16_t v)
int value_update_num(struct value *value, num_t v)
struct memregion * region
ADDR value_addr(struct value *value)
void * calloc(size_t nmemb, size_t size)
int value_update_u32(struct value *value, uint32_t v)
int value_set_addr(struct value *value, ADDR addr)
int value_update_u8(struct value *value, uint8_t v)
int16_t v_i16(struct value *v)
unsigned int symbol_type_full_bytesize(struct symbol *type)
int value_set_child(struct value *value, struct value *parent_value, ADDR addr)
#define SYMBOLX_VAR_CONSTVAL(sym)
int value_update_c(struct value *value, signed char v)
char * symbol_get_name(struct symbol *symbol)
#define RPUT(x, objtype, hx, rc)
int64_t v_i64(struct value *v)
void * malloc(size_t size)
int value_update_i64(struct value *value, int64_t v)
struct array_list * chain
int value_update_uc(struct value *value, unsigned char v)
int value_update_dd(struct value *value, long double v)
int value_update_unum(struct value *value, unum_t v)
ADDR v_addr(struct value *v)
long double v_dd(struct value *v)
int value_update(struct value *value, const char *buf, int bufsiz)
float v_f(struct value *v)
void value_set_strlen(struct value *value, int len)
uint64_t v_u64(struct value *v)
int value_update_i8(struct value *value, int8_t v)