Skip to content
  • Cary Coutant's avatar
    PR 17819: Fix --build-id=tree when using --compress-debug-sections. · 9c7fe3c5
    Cary Coutant authored
    When --build-id=tree is selected, gold would schedule a set of
    tasks to run to compute md5 hashes in parallel on chunks of the
    file. The scheduling was done before the
    Write_after_input_sections_task ran, so if we are compressing
    debug sections, the output file will change size and be remapped
    to a new address, sometimes causing the build id computation to
    crash, but even when it doesn't crash, it wouldn't include the
    debug information in the hash computation.
    
    This patch delays the scheduling of the md5 tasks until after
    Write_after_input_sections_task.
    
    gold/
            PR gold/17819
            * gold.cc (queue_final_tasks): When --build-id=tree, queue a
            separate task to schedule the build id computation.
            * layout.cc (Hash_task::Hash_task): Remove build_id_blocker,
            add Output_file and offset.
            (Hash_task::run): Get and release the input views.
            (Hash_task::is_runnable): Always return NULL (always runnable).
            (Layout::queue_build_id_tasks): Remove.
            (Layout::write_build_id): Add array_of_hashes and size_of_hashes
            parameters; use them instead of class members.
            (Build_id_task_runner::run): New function.
            (Close_task_runner::run): Pass array_of_hashes and size_of_hashes
            to write_build_id.
            * layout.h (Layout::queue_build_id_tasks): Remove.
            (Layout::write_build_id): Add array_of_hashes and size_of_hashes
            parameters.
            (Layout::array_of_hashes_): Remove.
            (Layout::size_of_array_of_hashes_): Remove.
            (Layout::input_view_): Remove.
            (Build_id_task_runner): New class.
            (Close_task_runner::Close_task_runner): Add array_of_hashes and
            size_of_hashes parameters.
            (Close_task_runner::array_of_hashes_): New data member.
            (Close_task_runner::size_of_hashes_): New data member.
            * testsuite/Makefile.am
            (flagstest_compress_debug_sections_and_build_id_tree): New test.
            * testsuite/Makefile.in: Regenerate.
    9c7fe3c5