This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: [PATCH] GOLD/DWP: avoid segmentation fault for binaries without debug fission
- From: Sriraman Tallam <tmsriram at google dot com>
- To: Yunlian Jiang <yunlian at google dot com>
- Cc: binutils <binutils at sourceware dot org>, Cary Coutant <ccoutant at gmail dot com>
- Date: Tue, 17 May 2016 11:57:59 -0700
- Subject: Re: [PATCH] GOLD/DWP: avoid segmentation fault for binaries without debug fission
- Authentication-results: sourceware.org; auth=none
- References: <CAMsPy2uPy1NcZxF_a03izT_xz4YBkJo=ECcMmXp_2sa7MMqzhQ at mail dot gmail dot com> <CAAs8Hmy3gEN7YurGz6E3es9Gd2P1XOYPtbmc0z3La-b8=JBwtQ at mail dot gmail dot com> <CAMsPy2tji70XVDCnNdg82t8LqN5gV1C3gqAL3kNaU9BiDF_PXQ at mail dot gmail dot com>
On Tue, May 17, 2016 at 11:51 AM, Yunlian Jiang <yunlian@google.com> wrote:
> Thanks, updated the patch as follows.
>
> diff --git a/binutils-2.25/gold/dwp.cc b/binutils-2.25/gold/dwp.cc
> index 121f37b..9eef68a 100644
> --- a/binutils-2.25/gold/dwp.cc
> +++ b/binutils-2.25/gold/dwp.cc
> @@ -2427,6 +2427,10 @@ main(int argc, char** argv)
> if (exe_filename == NULL && files.empty())
> gold_fatal(_("no input files and no executable specified"));
>
> + // If there are no DWO files, there is nothing to do.
> + if (files.empty())
> + return EXIT_SUCCESS;
> +
> if (verify_only)
> {
> // Get list of DWO files in the DWP file and compare with
Sorry, I take this back. I see this line
if (exe_filename == NULL && files.empty())
gold_fatal(_("no input files and no executable specified"))
So, do you want to just do :
if (files.empty())
gold_fatal(_("no input files specified"))
>
> On Tue, May 17, 2016 at 10:02 AM, Sriraman Tallam <tmsriram@google.com> wrote:
>> On Mon, May 16, 2016 at 4:56 PM, Yunlian Jiang <yunlian@google.com> wrote:
>>> If run dwp command on a binary built without debug fission, it will
>>> cause segmentation
>>> fault. This patch fixes that by exit early if no DWO files information
>>> found inside the
>>> input binary.
>>>
>>> gold/
>>> * dwp.cc: (main): exit early when no DWO files information found
>>> in the input binary.
>>>
>>> diff --git a/gold/dwp.cc b/gold/dwp.cc
>>> index d8c39c6..c26f969 100644
>>> --- a/gold/dwp.cc
>>> +++ b/gold/dwp.cc
>>> @@ -2436,6 +2436,11 @@ main(int argc, char** argv)
>>> return ok ? EXIT_SUCCESS : EXIT_FAILURE;
>>> }
>>>
>>> + // If there is no DWO files information found in the input binary,
>>> + // return early to avoid segmentation fault.
>>
>> Change the comment to maybe "If there are no DWO files, there is
>> nothing to do."
>>
>>> + if (files.size() == 0)
>>> + return EXIT_SUCCESS;
>>> +
>>
>> This looks fine to me but I do not have permissions to approve.
>>
>> Thanks
>> Sri
>>
>>> // Process each file, adding its contents to the output file.
>>> Dwp_output_file output_file(output_filename.c_str());
>>> for (File_list::const_iterator f = files.begin(); f != files.end(); ++f)