Mark,

Could you take a look of the attached 0002*patch file?
Only one typo in 0001*patch was fixed and I synced with latest source.

I am going to clean up and split my previous patches for nested functions
into smaller pieces like this to make your job a little easier. Thanks.




On Tue, Sep 15, 2015 at 1:29 PM, Chih-Hung Hsieh <c...@google.com> wrote:

> Prepare to compile with clang.
>
> Signed-off-by: Chih-Hung Hsieh <c...@google.com>
> ---
>  src/ChangeLog |  5 ++++
>  src/ld.c      | 94
> ++++++++++++++++++++++++++++++-----------------------------
>  2 files changed, 53 insertions(+), 46 deletions(-)
>
> diff --git a/src/ChangeLog b/src/ChangeLog
> index 238c416..981aaeb 100644
> --- a/src/ChangeLog
> +++ b/src/ChangeLog
> @@ -1,3 +1,8 @@
> +2015-09-15  Chih-Hung Hsieh  <c...@google.com>
> +
> +       * ld.c (determine_output_format): Move recurisve nested
> +       function "try" to file scope.
> +
>  2015-09-09  Chih-Hung Hsieh  <c...@google.com>
>
>         * readelf.c (print_debug_exception_table): Initialize variable
> before
> diff --git a/src/ld.c b/src/ld.c
> index 6e96ae2..b9a4f64 100644
> --- a/src/ld.c
> +++ b/src/ld.c
> @@ -1049,6 +1049,53 @@ parse_B_option_2 (const char *arg)
>  }
>
>
> +static inline int
> +try (int fd, Elf *elf)
> +{
> +  int result = 0;
> +
> +  if (elf == NULL)
> +    return 0;
> +
> +  if (elf_kind (elf) == ELF_K_ELF)
> +    {
> +      /* We have an ELF file.  We now can find out
> +        what the output format should be.  */
> +      XElf_Ehdr_vardef(ehdr);
> +
> +      /* Get the ELF header of the object.  */
> +      xelf_getehdr (elf, ehdr);
> +      if (ehdr != NULL)
> +       ld_state.ebl =
> +         ebl_openbackend_machine (ehdr->e_machine);
> +
> +      result = 1;
> +    }
> +  else if (elf_kind (elf) == ELF_K_AR)
> +    {
> +      /* Try the archive members.  This could
> +        potentially lead to wrong results if the
> +        archive contains files for more than one
> +        architecture.  But this is the user's
> +        problem.  */
> +      Elf *subelf;
> +      Elf_Cmd cmd = ELF_C_READ_MMAP;
> +
> +      while ((subelf = elf_begin (fd, cmd, elf)) != NULL)
> +       {
> +         cmd = elf_next (subelf);
> +
> +         if (try (fd, subelf) != 0)
> +           break;
> +       }
> +    }
> +
> +  elf_end (elf);
> +
> +  return result;
> +}
> +
> +
>  static void
>  determine_output_format (void)
>  {
> @@ -1078,52 +1125,7 @@ determine_output_format (void)
>           int fd = open (runp->name, O_RDONLY);
>           if (fd != -1)
>             {
> -             int try (Elf *elf)
> -               {
> -                 int result = 0;
> -
> -                 if (elf == NULL)
> -                   return 0;
> -
> -                 if (elf_kind (elf) == ELF_K_ELF)
> -                   {
> -                     /* We have an ELF file.  We now can find out
> -                        what the output format should be.  */
> -                     XElf_Ehdr_vardef(ehdr);
> -
> -                     /* Get the ELF header of the object.  */
> -                     xelf_getehdr (elf, ehdr);
> -                     if (ehdr != NULL)
> -                       ld_state.ebl =
> -                         ebl_openbackend_machine (ehdr->e_machine);
> -
> -                     result = 1;
> -                   }
> -                 else if (elf_kind (elf) == ELF_K_AR)
> -                   {
> -                     /* Try the archive members.  This could
> -                        potentially lead to wrong results if the
> -                        archive contains files for more than one
> -                        architecture.  But this is the user's
> -                        problem.  */
> -                     Elf *subelf;
> -                     Elf_Cmd cmd = ELF_C_READ_MMAP;
> -
> -                     while ((subelf = elf_begin (fd, cmd, elf)) != NULL)
> -                       {
> -                         cmd = elf_next (subelf);
> -
> -                         if (try (subelf) != 0)
> -                           break;
> -                       }
> -                   }
> -
> -                 elf_end (elf);
> -
> -                 return result;
> -               }
> -
> -             if (try (elf_begin (fd, ELF_C_READ_MMAP, NULL)) != 0)
> +             if (try (fd, elf_begin (fd, ELF_C_READ_MMAP, NULL)) != 0)
>                 /* Found a file.  */
>                 break;
>             }
> --
> 2.6.0.rc0.131.gf624c3d
>
>

Attachment: 0002-Move-recursive-nested-function-to-file-scope.patch
Description: Binary data

Reply via email to