void MyTraversal::visit(SgNode* astNode) { SgAsmElfFileHeader *fhdr = isSgAsmElfFileHeader(astNode); if (fhdr) { size_t oldsize = fhdr->get_word_size(); if (8==oldsize) { size_t newsize = 4; printf("*** Changing ELF word size from %zu bits to %zu bits\n", 8*oldsize, 8*newsize); fhdr->get_exec_format()->set_word_size(newsize); } else if (4==oldsize) { size_t newsize = 8; printf("*** Changing ELF word size from %zu bits to %zu bits\n", 8*oldsize, 8*newsize); fhdr->get_exec_format()->set_word_size(newsize); } } }
/* This binary loader can handle ELF object files. */ bool BinaryLoaderElfObj::can_load(SgAsmGenericHeader *hdr) const { return isSgAsmElfFileHeader(hdr) && hdr->get_exec_format()->get_purpose()==SgAsmExecutableFileFormat::PURPOSE_LIBRARY; }