home *** CD-ROM | disk | FTP | other *** search
- /* ENDLINK.C */
-
- /*+-------------------------------------------------------------------------+
- | |
- | end_linker |
- | |
- +-------------------------------------------------------------------------+*/
- void end_linker(bit_16 return_code)
- BeginDeclarations
- EndDeclarations
- BeginCode
- If statistics.val IsTrue
- Then
- linker_statistics();
- EndIf;
- exit(return_code);
- EndCode
-
- /*+-------------------------------------------------------------------------+
- | |
- | linker_statistics |
- | |
- +-------------------------------------------------------------------------+*/
- void linker_statistics()
- BeginDeclarations
- file_info_ptr file;
- #define File (*file)
- EndDeclarations
- BeginCode
- statistics_start_time = Now;
- statistics.val = False; /* Prevent recursive call. */
- /*+-------------------------------------------------------------------------+
- | |
- | Memory Usage Statistics |
- | |
- +-------------------------------------------------------------------------+*/
- If link_step Exceeds 0
- Then
- linker_message("\n"
- "Memory Usage Statistics:\n"
- "---Memory Pool--- --Size-- --Used-- --Free-- %%Free\n");
- edit_number_string(temp_string, "%lu", free_pool.pool_size);
- linker_message("%-17s %8Fs\n",
- free_pool.pool_id,
- String(temp_string));
- edit_number_string(temp_string, "%lu", static_pool.pool_size);
- linker_message("%-17s %8Fs ",
- static_pool.pool_id,
- String(temp_string));
- edit_number_string(temp_string, "%lu", static_pool.used_bytes);
- linker_message("%8Fs ",
- String(temp_string));
- edit_number_string(temp_string, "%lu",
- static_pool.pool_size - static_pool.used_bytes);
- linker_message("%8Fs %4u%%\n",
- String(temp_string),
- Bit_16((100L*(static_pool.pool_size -
- static_pool.used_bytes)) /
- static_pool.pool_size));
- EndIf;
-
- /*+-------------------------------------------------------------------------+
- | |
- | Object File Statistics |
- | |
- +-------------------------------------------------------------------------+*/
-
- If (link_step Exceeds 4) AndIf (obj_file_list.first IsNotNull)
- Then
- linker_message("\n"
- "Object File Statistics:\n");
- linker_message("--Size-- -------------Object File-------------\n");
- TraverseList(obj_file_list, file)
- BeginTraverse
- edit_number_string(temp_string, "%lu", File.file_size);
- linker_message("%8Fs %Fs\n", String(temp_string), File.filename);
- EndTraverse;
- EndIf;
-
- /*+-------------------------------------------------------------------------+
- | |
- | Library File Statistics |
- | |
- +-------------------------------------------------------------------------+*/
-
- If (link_step Exceeds 4) AndIf (lib_file_list.first IsNotNull)
- Then
- linker_message("\n"
- "Library File Statistics:\n");
- linker_message("--Size-- Modules Passes "
- "-------------Library File------------\n");
- TraverseList(lib_file_list, file)
- BeginTraverse
- edit_number_string(temp_string, "%lu", File.file_size);
- linker_message("%8Fs ",
- String(temp_string));
- edit_number_string(temp_string, "%u", File.module_count);
- linker_message("%7Fs ",
- String(temp_string));
- edit_number_string(temp_string, "%u", File.pass_count);
- linker_message("%6Fs %Fs\n",
- String(temp_string),
- File.filename);
- EndTraverse;
- EndIf;
-
- /*+-------------------------------------------------------------------------+
- | |
- | Time Usage Statistics |
- | |
- +-------------------------------------------------------------------------+*/
- total_time = 0;
- linker_message("\n"
- "Time Usage Statistics:\n");
- If link_step Exceeds 0
- Then
- total_time += user_input_start_time - linker_start_time;
- linker_message(" Primary linker initialization time:%7s\n",
- elapsed_time(linker_start_time,
- user_input_start_time));
- EndIf;
- If link_step Exceeds 1
- Then
- total_time += secondary_init_start_time - user_input_start_time;
- linker_message(" User input time:%7s\n",
- elapsed_time(user_input_start_time,
- secondary_init_start_time));
- EndIf;
- If link_step Exceeds 2
- Then
- total_time += library_directory_start_time -
- secondary_init_start_time;
- linker_message("Secondary linker initialization time:%7s\n",
- elapsed_time(secondary_init_start_time,
- library_directory_start_time));
- EndIf;
- If link_step Exceeds 3
- Then
- total_time += object_module_start_time - library_directory_start_time;
- linker_message(" Library directory processing time:%7s\n",
- elapsed_time(library_directory_start_time,
- object_module_start_time));
- EndIf;
- If link_step Exceeds 4
- Then
- total_time += library_processing_start_time - object_module_start_time;
- linker_message(" Object module processing time:%7s\n",
- elapsed_time(object_module_start_time,
- library_processing_start_time));
- EndIf;
- If link_step Exceeds 5
- Then
- total_time += order_start_time - library_processing_start_time;
- linker_message(" Library processing time:%7s\n",
- elapsed_time(library_processing_start_time,
- order_start_time));
- EndIf;
- If link_step Exceeds 6
- Then
- total_time += fixup_start_time - order_start_time;
- linker_message(" Segment ordering and aligning time:%7s\n",
- elapsed_time(order_start_time,
- fixup_start_time));
- EndIf;
- If link_step Exceeds 7
- Then
- total_time += exec_image_start_time - fixup_start_time;
- linker_message(" Fixup time:%7s\n",
- elapsed_time(fixup_start_time,
- exec_image_start_time));
- EndIf;
- If link_step Exceeds 8
- Then
- total_time += map_start_time - exec_image_start_time;
- linker_message(" Executable image write time:%7s\n",
- elapsed_time(exec_image_start_time,
- map_start_time));
- EndIf;
- If link_step Exceeds 9
- Then
- total_time += statistics_start_time - map_start_time;
- linker_message(" Map write time:%7s\n",
- elapsed_time(map_start_time,
- statistics_start_time));
- EndIf;
- linker_end_time = Now;
- total_time += linker_end_time - statistics_start_time;
- linker_message(" Statistics reporting time:%7s\n",
- elapsed_time(statistics_start_time,
- linker_end_time));
- linker_message(" ------\n"
- " Total Elaspsed Time:%7s\n",
- elapsed_time(0L, total_time));
-
- return;
- EndCode
- #undef File
-