2013-04-26 Geoff Pike <gpike@chromium.org>

gold/
	* gold.cc (queue_final_tasks): invoke layout->queue_build_id_tasks().
	* layout.cc (Hash_task): New class.
	(Layout::queue_build_id_tasks): New function.
	(Layout::write_build_id): Handle single-thread portion of build ID
	computation.  (In some cases, all of it is single-threaded.)  Replace
	{sha1,md5}_process_bytes with {sha1,md5}_buffer to get the same
	functionality in fewer lines of code.
	* layout.h (Layout::queue_build_id_tasks): New function declaration.
	* options.h (General_options): make "--build-id" default to tree
	rather than sha1.  Add two new options related to --build-id=tree:
	--build-id-chunk-size-for-treehash and
	--build-id-min-file-size-for-treehash.
	* Makefile.am: add testing of --build-id=tree and related new options
	(these tests will be invoked by "make check").
	* Makefile.in: Regenerate.
This commit is contained in:
Cary Coutant
2013-04-26 21:38:57 +00:00
parent ee441d9a9a
commit e7c5ea405f
7 changed files with 310 additions and 35 deletions

View File

@@ -892,6 +892,13 @@ class Layout
const Output_data_reloc_generic* dyn_rel,
bool add_debug, bool dynrel_includes_plt);
// If a treehash is necessary to compute the build ID, then queue
// the necessary tasks and return a blocker that will unblock when
// they finish. Otherwise return BUILD_ID_BLOCKER.
Task_token*
queue_build_id_tasks(Workqueue* workqueue, Task_token* build_id_blocker,
Output_file* of);
// Compute and write out the build ID if needed.
void
write_build_id(Output_file*) const;
@@ -1354,6 +1361,12 @@ class Layout
Gdb_index* gdb_index_data_;
// The space for the build ID checksum if there is one.
Output_section_data* build_id_note_;
// Temporary storage for tree hash of build ID.
unsigned char* array_of_hashes_;
// Size of array_of_hashes_ (in bytes).
size_t size_of_array_of_hashes_;
// Input view for computing tree hash of build ID. Freed in write_build_id().
const unsigned char* input_view_;
// The output section containing dwarf abbreviations
Output_reduced_debug_abbrev_section* debug_abbrev_;
// The output section containing the dwarf debug info tree