//-------------------------------------------------------------------------- void sys_clock::swap(void) { secs = swap32(secs); nanosecs = swap32(nanosecs); }; //-------------------------------------------------------------------------- void header::swap(void) { system_id= swap16(system_id); a_magic= swap16(a_magic); file_time.swap(); version_id= swap32(version_id); entry_space= swap32(entry_space); entry_subspace= swap32(entry_subspace); entry_offset= swap32(entry_offset); aux_header_location= swap32(aux_header_location); aux_header_size= swap32(aux_header_size); som_length= swap32(som_length); presumed_dp= swap32(presumed_dp); space_location= swap32(space_location); space_total= swap32(space_total); subspace_location= swap32(subspace_location); subspace_total= swap32(subspace_total); loader_fixup_location= swap32(loader_fixup_location); loader_fixup_total= swap32(loader_fixup_total); space_strings_location= swap32(space_strings_location); space_strings_size= swap32(space_strings_size); init_array_location= swap32(init_array_location); init_array_total= swap32(init_array_total); compiler_location= swap32(compiler_location); compiler_total= swap32(compiler_total); symbol_location= swap32(symbol_location); symbol_total= swap32(symbol_total); fixup_request_location= swap32(fixup_request_location); fixup_request_total= swap32(fixup_request_total); symbol_strings_location= swap32(symbol_strings_location); symbol_strings_size= swap32(symbol_strings_size); unloadable_sp_location= swap32(unloadable_sp_location); unloadable_sp_size= swap32(unloadable_sp_size); checksum= swap32(checksum); } //-------------------------------------------------------------------------- void aux_id::swap(void) { type = swap16(type); length = swap32(length); } //-------------------------------------------------------------------------- void som_exec_auxhdr::swap(void) { header_id.swap(); exec_tsize = swap32(exec_tsize); /* text size */ exec_tmem = swap32(exec_tmem); /* start address of text */ exec_tfile = swap32(exec_tfile); /* file ptr to text */ exec_dsize = swap32(exec_dsize); /* data size */ exec_dmem = swap32(exec_dmem); /* start address of data */ exec_dfile = swap32(exec_dfile); /* file ptr to data */ exec_bsize = swap32(exec_bsize); /* bss size */ exec_entry = swap32(exec_entry); /* address of entry point */ exec_flags = swap32(exec_flags); /* loader flags */ exec_bfill = swap32(exec_bfill); /* bss initialization value */ } //-------------------------------------------------------------------------- void user_string_aux_hdr::swap(void) /* Version string auxiliary header */ { header_id.swap(); string_length = swap32(string_length); /* strlen(user_string) */ } //-------------------------------------------------------------------------- void copyright_aux_hdr::swap(void) { header_id.swap(); string_length = swap32(string_length); /* strlen(user_string) */ } //-------------------------------------------------------------------------- void shlib_version_aux_hdr::swap(void) { header_id.swap(); version = swap16(version); /* version number */ } //-------------------------------------------------------------------------- void space_dictionary_record::swap(void) { name.n_strx = swap32(name.n_strx); space_number = swap32(space_number); subspace_index = swap32(subspace_index); subspace_quantity = swap32(subspace_quantity); loader_fix_index = swap32(loader_fix_index); loader_fix_quantity = swap32(loader_fix_quantity); init_pointer_index = swap32(init_pointer_index); init_pointer_quantity = swap32(init_pointer_quantity); }; //-------------------------------------------------------------------------- void subspace_dictionary_record::swap(void) { space_index = swap32(space_index); file_loc_init_value = swap32(file_loc_init_value); initialization_length = swap32(initialization_length); subspace_start = swap32(subspace_start); subspace_length = swap32(subspace_length); reserved2 = swap16(reserved2); alignment = swap16(alignment); name.n_strx = swap32(name.n_strx); fixup_request_index = swap32(fixup_request_index); fixup_request_quantity = swap32(fixup_request_quantity); } //-------------------------------------------------------------------------- void symbol_dictionary_record::swap(void) { name.n_strx = swap32(name.n_strx); qualifier_name.n_strx = swap32(qualifier_name.n_strx); symbol_info = swap32(symbol_info); symbol_value = swap32(symbol_value); } //-------------------------------------------------------------------------- void dl_header::swap(void) { hdr_version = swap32(hdr_version); ltptr_value = swap32(ltptr_value); shlib_list_loc = swap32(shlib_list_loc); shlib_list_count = swap32(shlib_list_count); import_list_loc = swap32(import_list_loc); import_list_count = swap32(import_list_count); hash_table_loc = swap32(hash_table_loc); hash_table_size = swap32(hash_table_size); export_list_loc = swap32(export_list_loc); export_list_count = swap32(export_list_count); string_table_loc = swap32(string_table_loc); string_table_size = swap32(string_table_size); dreloc_loc = swap32(dreloc_loc); dreloc_count = swap32(dreloc_count); dlt_loc = swap32(dlt_loc); plt_loc = swap32(plt_loc); dlt_count = swap32(dlt_count); plt_count = swap32(plt_count); highwater_mark = swap16(highwater_mark); flags = swap16(flags); export_ext_loc = swap32(export_ext_loc); module_loc = swap32(module_loc); module_count = swap32(module_count); elaborator = swap32(elaborator); initializer = swap32(initializer); embedded_path = swap32(embedded_path); initializer_count = swap32(initializer_count); tdsize = swap32(tdsize); fastbind_list_loc = swap32(fastbind_list_loc); } //-------------------------------------------------------------------------- void import_entry::swap(void) { name = swap32(name); } //-------------------------------------------------------------------------- void misc_info::swap(void) { version = swap16(version); flags = swap16(flags); } //-------------------------------------------------------------------------- void export_entry::swap(void) { next = swap32(next); name = swap32(name); value = swap32(value); if ( type == ST_STORAGE ) info.size = swap32(info.size); else info.misc.swap(); module_index = swap16(module_index); } //-------------------------------------------------------------------------- static ulong compute_som_checksum(void *p) { int n = sizeof(header) / sizeof(ulong); ulong *ptr = (ulong *)p; ulong sum = 0; for ( int i=0; i < n; i++ ) sum ^= *ptr++; return sum; }