51 memset(bsymbol,0,
sizeof(
struct bsymbol *));
57 RHOLD(lsymbol,bsymbol);
92 RPUT(bsymbol,bsymbol,bsymbol,retval);
97 int retval = bsymbol->
refcnt;
102 vwarn(
"cannot free (%d refs) ",retval);
107 verror(
"forced free (%d refs) ",retval);
129 fprintf(ud->
stream,
"bsymbol (");
133 fprintf(ud->
stream,
")\n");
141 void *buf,
int bufsiz,
156 fprintf(stream,
"<VOID>");
162 fprintf(stream,
"%c",
rv_c(buf));
164 fprintf(stream,
"%uc",
rv_uc(buf));
166 fprintf(stream,
"%" PRIi8,
rv_i8(buf));
168 fprintf(stream,
"%" PRIu8,
rv_u8(buf));
170 fprintf(stream,
"<BASE_%d>",bytesize);
172 else if (bytesize == 2) {
173 if (strstr(type->
name,
"char"))
174 fprintf(stream,
"%lc",
rv_wc(buf));
176 fprintf(stream,
"%" PRIi16,
rv_i16(buf));
178 fprintf(stream,
"%" PRIu16,
rv_u16(buf));
180 fprintf(stream,
"<BASE_%d>",bytesize);
182 else if (bytesize == 4) {
184 fprintf(stream,
"%" PRIi32,
rv_i32(buf));
186 fprintf(stream,
"%" PRIu32,
rv_u32(buf));
188 fprintf(stream,
"<BASE_%d>",bytesize);
190 else if (bytesize == 8) {
192 fprintf(stream,
"%" PRIi64,
rv_i64(buf));
194 fprintf(stream,
"%" PRIu64,
rv_u64(buf));
196 fprintf(stream,
"<BASE_%d>",bytesize);
199 fprintf(stream,
"<BASE_%d>",bytesize);
207 fprintf(stream,
"[ ]");
212 subrange = (int)(uintptr_t)subranges->data;
214 fprintf(stream,
"[ ]");
218 int llen = g_slist_length(subranges);
221 int *arcounts = (
int *)
malloc(
sizeof(
int) * llen);
222 uint64_t aoffset = 0;
224 ((int)(uintptr_t)g_slist_nth_data(subranges,llen - 1)) + 1;
227 for (i = 0; i < llen; ++
i) {
228 if (
likely(i < (llen - 1))) {
230 fprintf(stream,
"[ ");
232 int sri = (int)(uintptr_t)g_slist_nth_data(subranges,i);
233 total = total * (sri + 1);
237 fprintf(stream,
"[ ");
238 for (i = 0; i < rowlength; ++
i, aoffset += typebytesize) {
240 fprintf(stream,
", ");
242 (
void *)(buf+aoffset),typebytesize,
246 fprintf(stream,
" ] ");
252 int sri = (int)(uintptr_t)g_slist_nth_data(subranges,i);
253 for (i = llen - 1; i > -1; --
i) {
254 if (arcounts[i]++ < (sri + 1))
257 fprintf(stream,
"] ");
267 vwarn(
"do not enable auto_deref for unions; clearing!\n");
268 flags &= ~LOAD_FLAG_AUTO_DEREF;
272 vwarn(
"do not enable auto_string for unions; clearing!\n");
273 flags &= ~LOAD_FLAG_AUTO_STRING;
276 fprintf(stream,
"{ ");
279 flags &= ~LOAD_FLAG_AUTO_DEREF;
284 fprintf(stream,
", ");
287 fprintf(stream,
".%s = ",member->
name);
291 memset(&tloc,0,
sizeof(tloc));
298 buf + offset,bufsiz - offset,
305 fprintf(stream,
" }");
308 if ((flags & LOAD_FLAG_AUTO_DEREF) ||
309 ((flags & LOAD_FLAG_AUTO_STRING)
314 fprintf(stream,
"%s",(
char *)buf);
322 fprintf(stream,
"0x");
324 for (i = ptrsize - 1; i > -1; --
i) {
325 fprintf(stream,
"%02hhx",*(((uint8_t *)buf)+i));
329 for (i = 0; i < ptrsize; ++
i) {
330 fprintf(stream,
"%02hhx",*(((uint8_t *)buf)+i));
336 fprintf(stream,
"<FUNCTION>");
339 fprintf(stream,
"<TYPEDEF>");
342 fprintf(stream,
"<CONST>");
345 fprintf(stream,
"<VOL>");
353 void *buf,
int bufsiz,
367 vwarn(
"apparent bitfield %s is not backed by a base type!",symbol->
name);
368 fprintf(stream,
"<BADBITFIELDTYPE>");
374 "doing bitfield for symbol %s: size=%d,offset=%d\n",
379 for (i = 1; i < symbol->
size.
bits; ++
i) {
387 bitmask <<= lboffset;
390 fprintf(stream,
"%hhu",(uint8_t)(((*(uint8_t *)buf) & bitmask) \
393 fprintf(stream,
"%hu",(uint16_t)(((*(uint16_t *)buf) & bitmask) \
396 fprintf(stream,
"%u",(uint32_t)(((*(uint32_t *)buf) & bitmask) \
399 fprintf(stream,
"%"PRIu64,(uint64_t)(((*(uint64_t *)buf) & bitmask) \
402 vwarn(
"unsupported bitfield byte size %d for symbol %s\n",
404 fprintf(stream,
"<BADBITFIELDBYTESIZE>");
struct bsymbol * bsymbol_create(struct lsymbol *lsymbol, struct memregion *region)
uint16_t rv_u16(void *buf)
#define SYMBOLX_SUBRANGES(sym)
int bsymbol_is_inline(struct bsymbol *bsymbol)
struct symbol * symbol_create(symbol_type_t symtype, symbol_source_t source, char *name, int name_copy, SMOFFSET offset, load_type_t loadtype, struct scope *scope)
static uint64_t unsigned int i
#define SYMBOLX_MEMBERS(sym)
#define v_g_slist_foreach(gslhead, gslcur, elm)
void location_internal_free(struct location *location)
unsigned int size_is_bytes
uint32_t symbol_get_bytesize(struct symbol *symbol)
char * bsymbol_get_name(struct bsymbol *bsymbol)
struct bsymbol * bsymbol_create_noninline(struct bsymbol *bsymbol)
signed char rv_c(void *buf)
#define verror(format,...)
struct symbol * symbol_get_datatype(struct symbol *symbol)
loctype_t symbol_resolve_location(struct symbol *symbol, struct location_ctxt *lctxt, struct location *o_loc)
#define vwarn(format,...)
void lsymbol_dump(struct lsymbol *lsymbol, struct dump_info *ud)
int symbol_type_is_char(struct symbol *type)
#define LOCATION_OFFSET(loc)
char * lsymbol_get_name(struct lsymbol *lsymbol)
void memregion_dump(struct memregion *region, struct dump_info *ud)
struct scope * symbol_containing_scope(struct symbol *symbol)
REFCNT bsymbol_release(struct bsymbol *bsymbol)
REFCNT bsymbol_free(struct bsymbol *bsymbol, int force)
datatype_code_t datatype_code
struct symbol * lsymbol_get_symbol(struct lsymbol *lsymbol)
#define SYMBOLX_ENCODING_V(sym)
unsigned char rv_uc(void *buf)
void symbol_type_rvalue_print(FILE *stream, struct symbol *type, void *buf, int bufsiz, load_flags_t flags, struct target *target)
#define vdebug(devel, areas, flags, format,...)
int16_t rv_i16(void *buf)
uint32_t rv_u32(void *buf)
int64_t rv_i64(void *buf)
struct symbol * symbol_type_skip_ptrs(struct symbol *type)
struct lsymbol * bsymbol_get_lsymbol(struct bsymbol *bsymbol)
struct symbol * bsymbol_get_symbol(struct bsymbol *bsymbol)
uint64_t rv_u64(void *buf)
#define ERRORDUMPBSYMBOL_NL(s)
int32_t rv_i32(void *buf)
struct symbol * target_create_synthetic_type_pointer(struct target *target, struct symbol *type)
#define RPUT(x, objtype, hx, rc)
void symbol_rvalue_print(FILE *stream, struct symbol *symbol, void *buf, int bufsiz, load_flags_t flags, struct target *target)
void * malloc(size_t size)
unsigned int isinlineinstance
#define ERRORDUMPBSYMBOL(s)
struct lsymbol * lsymbol_create_noninline(struct lsymbol *lsymbol)
unsigned int size_is_bits
struct memregion * region
#define SYMBOL_IS_VAR(sym)
void bsymbol_dump(struct bsymbol *bsymbol, struct dump_info *ud)