int main(int argc, char **argv) {
int i;
if (argc<2)
- return 0;
+ return 1;
if (argc>=3)
rootfile=argv[2];
for(i=3;i<argc;i++) {
}
process_elf_binary_data(argv[1]);
daikon_preprocess_entry_array();
+ return 0;
}
// Pre-processes global dwarf_entry_array in order to place
}
int typecount=0;
-int assigntype=0;
+int assigntype=1;
int entry_is_type(dwarf_entry *entry) {
if (entry->tag_name==DW_TAG_structure_type||
entry->tag_name==DW_TAG_union_type) {
}
}
+ /* Assign names */
+ for (i = 0; i < dwarf_entry_array_size; i++)
+ {
+ cur_entry = &dwarf_entry_array[i];
+ if (entry_is_type(cur_entry))
+ {
+ collection_type* collection_ptr = (collection_type*)(cur_entry->entry_ptr);
+ int j=0;
+ int offset=0;
+ int value=0;
+
+ for(j=0;j<collection_ptr->num_members;j++) {
+ dwarf_entry *entry=collection_ptr->members[j];
+ if (entry->tag_name==DW_TAG_inheritance) {
+ value++;
+ } else {
+ member * member_ptr=(member *)entry->entry_ptr;
+ char *name=member_ptr->name;
+ dwarf_entry *type=member_ptr->type_ptr;
+ char *typestr=printname(type,GETTYPE);
+ char *poststr=printname(type,POSTNAME);
+
+ if (typestr!=NULL)
+ value++;
+ }
+ }
+ }
+ }
+
for (i = 0; i < dwarf_entry_array_size; i++)
{
cur_entry = &dwarf_entry_array[i];
int j=0;
int offset=0;
int value=0;
+
for(j=0;j<collection_ptr->num_members;j++) {
dwarf_entry *entry=collection_ptr->members[j];
if (entry->tag_name==DW_TAG_inheritance) {
value++;
}
}
+
if (collection_ptr->name!=NULL) {
struct valuepair *vp=NULL;
if (gencontains(ght,collection_ptr->name))
cur_entry = &dwarf_entry_array[i];
if (entry_is_type(cur_entry)) {
collection_type* collection_ptr = (collection_type*)(cur_entry->entry_ptr);
+
int j=0;
int offset=0;
int value=0;
{
tdef * tdef_ptr=(tdef*)type->entry_ptr;
if (op==GETTYPE||op==GETJUSTTYPE) {
- char *typename=printname(tdef_ptr->target_ptr,op);
- return typename;
+ if (tdef_ptr->target_ptr==NULL)
+ return tdef_ptr->name;
+ if (tdef_ptr->target_ptr->tag_name==DW_TAG_union_type||
+ tdef_ptr->target_ptr->tag_name==DW_TAG_structure_type) {
+ collection_type *ctype=(collection_type*)tdef_ptr->target_ptr->entry_ptr;
+ if (ctype->name!=NULL)
+ return ctype->name;
+ ctype->name=tdef_ptr->name;
+ return tdef_ptr->name;
+ }
+ char *typename=printname(tdef_ptr->target_ptr,op);
+ return typename;
}
}
break;
case DW_TAG_structure_type: {
collection_type *ctype=(collection_type*)type->entry_ptr;
if (op==GETTYPE&&ctype->name==NULL&&assigntype) {
- ctype->name=(char*)malloc(100);
- sprintf(ctype->name,"TYPE%ld",typecount++);
+ char *newb=(char *)malloc(1000);
+ int newchars=0;
+ int i;
+ ctype->name=newb;
+ newchars=sprintf(newb,"unnamed_",type->ID);
+ newb+=newchars;
+ for(i=0;i<ctype->num_members;i++) {
+ dwarf_entry * de=ctype->members[i];
+ if (de->tag_name==DW_TAG_member) {
+ member * me=(member *)de->entry_ptr;
+ newchars=sprintf(newb,"%s",me->name);
+ newb+=newchars;
+ }
+ }
}
if (op==GETTYPE)
return ctype->name;
if (op==GETJUSTTYPE&&ctype->name==NULL&&assigntype) {
- ctype->name=(char*)malloc(100);
- sprintf(ctype->name,"TYPE%ld",typecount++);
+ char *newb=(char *)malloc(1000);
+ int newchars=0;
+ int i;
+ ctype->name=newb;
+ newchars=sprintf(newb,"unnamed_",type->ID);
+ newb+=newchars;
+ for(i=0;i<ctype->num_members;i++) {
+ dwarf_entry * de=ctype->members[i];
+ if (de->tag_name==DW_TAG_member) {
+ member * me=(member *)de->entry_ptr;
+ newchars=sprintf(newb,"%s",me->name);
+ newb+=newchars;
+ }
+ }
}
if (op==GETJUSTTYPE)
return ctype->name;