Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(3646)

Issue 6476057: [google] Handle incompatible cg options more generally in LIPO

Can't Edit
Can't Publish+Mail
Start Review
Created:
11 years, 8 months ago by davidxl
Modified:
11 years, 8 months ago
Reviewers:
xur
CC:
gcc-patches_gcc.gnu.org
Base URL:
svn+ssh://gcc.gnu.org/svn/gcc/branches/google/gcc-4_7/gcc/
Visibility:
Public.

Patch Set 1 #

Unified diffs Side-by-side diffs Delta from patch set Stats (+85 lines, -21 lines) Patch
M coverage.c View 7 chunks +85 lines, -21 lines 0 comments Download

Messages

Total messages: 2
davidxl
Index: coverage.c =================================================================== --- coverage.c (revision 190369) +++ coverage.c (working copy) @@ -261,6 +261,56 @@ ...
11 years, 8 months ago (2012-08-23 18:32:19 UTC) #1
davidxl
11 years, 8 months ago (2012-08-23 21:27:01 UTC) #2
The patch is needed to handle more options that will causes invalid
LIPO module grouping. The new option handled is  -fsized-delete.

David

On Thu, Aug 23, 2012 at 11:32 AM, David Li <davidxl@google.com> wrote:
> Index: coverage.c
> ===================================================================
> --- coverage.c  (revision 190369)
> +++ coverage.c  (working copy)
> @@ -261,6 +261,56 @@ str_eq (const void *p1, const void *p2)
>    return !strcmp (s1, s2);
>  }
>
> +/* Command line option descriptor.  */
> +
> +struct opt_desc
> +{
> +  const char *opt_str;
> +  const char *opt_neg_str;
> +  bool default_val;  /* TODO better handling of default  */
> +};
> +
> +static struct opt_desc force_matching_cg_opts[] =
> +  {
> +    { "-fexceptions", "-fno-exceptions", true },
> +    { "-fsized-delete", "-fno-sized-delete", false },
> +    { NULL, NULL, false }
> +  };
> +
> +/* A helper function to check if OPTION_STRING is one of the codegen
> +   options specified in FORCE_MATCHING_CG_ARGS. If yes, set the
> +   corresponding entry in CG_ARG_VAL to the value of the option specified
> +   in OPTION_STRING.  */
> +
> +static void
> +check_cg_opts (bool *cg_opt_val, const char *option_str)
> +{
> +  unsigned int i;
> +  for (i = 0; force_matching_cg_opts[i].opt_str; i++)
> +    {
> +      if (!strcmp (force_matching_cg_opts[i].opt_str, option_str))
> +        cg_opt_val[i] = true;
> +      else if (!strcmp (force_matching_cg_opts[i].opt_neg_str, option_str))
> +        cg_opt_val[i] = false;
> +    }
> +}
> +
> +/* A helper function to check if CG_OPTS1 and CG_OPTS are identical. It
returns
> +   true if yes, false otherwise.  */
> +
> +static bool
> +has_incompatible_cg_opts (bool *cg_opts1, bool *cg_opts2, unsigned
num_cg_opts)
> +{
> +  unsigned i;
> +
> +  for (i = 0; i < num_cg_opts; i++)
> +    {
> +      if (cg_opts1[i] != cg_opts2[i])
> +        return true;
> +    }
> +
> +  return false;
> +}
>
>  /* Returns true if the command-line arguments stored in the given
module-infos
>     are incompatible.  */
> @@ -276,8 +326,6 @@ incompatible_cl_args (struct gcov_module
>    unsigned int num_non_warning_opts1 = 0, num_non_warning_opts2 = 0;
>    bool warning_mismatch = false;
>    bool non_warning_mismatch = false;
> -  bool with_fexceptions1 = true;
> -  bool with_fexceptions2 = true;
>    htab_t option_tab1, option_tab2;
>    unsigned int start_index1 = mod_info1->num_quote_paths +
>      mod_info1->num_bracket_paths + mod_info1->num_cpp_defines +
> @@ -286,6 +334,22 @@ incompatible_cl_args (struct gcov_module
>      mod_info2->num_bracket_paths + mod_info2->num_cpp_defines +
>      mod_info2->num_cpp_includes;
>
> +  bool *cg_opts1, *cg_opts2, has_any_incompatible_cg_opts;
> +  unsigned int num_cg_opts = 0;
> +
> +  for (i = 0; force_matching_cg_opts[i].opt_str; i++)
> +    num_cg_opts++;
> +
> +  cg_opts1 = XCNEWVEC (bool, num_cg_opts);
> +  cg_opts2 = XCNEWVEC (bool, num_cg_opts);
> +
> +  /* Initialize the array to default value  */
> +  for (i = 0; force_matching_cg_opts[i].opt_str; i++)
> +    {
> +      cg_opts1[i] = force_matching_cg_opts[i].default_val;
> +      cg_opts2[i] = force_matching_cg_opts[i].default_val;
> +    }
> +
>    option_tab1 = htab_create (10, str_hash, str_eq, NULL);
>    option_tab2 = htab_create (10, str_hash, str_eq, NULL);
>
> @@ -297,12 +361,9 @@ incompatible_cl_args (struct gcov_module
>      else
>        {
>          void **slot;
> -        char* option_string = mod_info1->string_array[start_index1 + i];
> +        char *option_string = mod_info1->string_array[start_index1 + i];
>
> -        if (!strcmp ("-fexceptions", option_string))
> -          with_fexceptions1 = true;
> -        else if (!strcmp ("-fno-exceptions", option_string))
> -          with_fexceptions1 = false;
> +        check_cg_opts (cg_opts1, option_string);
>
>          slot = htab_find_slot (option_tab1, option_string, INSERT);
>          if (!*slot)
> @@ -319,12 +380,10 @@ incompatible_cl_args (struct gcov_module
>      else
>        {
>          void **slot;
> -        char* option_string = mod_info2->string_array[start_index2 + i];
> +        char *option_string = mod_info2->string_array[start_index2 + i];
> +
> +        check_cg_opts (cg_opts2, option_string);
>
> -        if (!strcmp ("-fexceptions", option_string))
> -          with_fexceptions2 = true;
> -        else if (!strcmp ("-fno-exceptions", option_string))
> -          with_fexceptions2 = false;
>          slot = htab_find_slot (option_tab2, option_string, INSERT);
>          if (!*slot)
>            {
> @@ -354,7 +413,7 @@ incompatible_cl_args (struct gcov_module
>      warning (OPT_Wripa_opt_mismatch, "command line arguments mismatch for %s
"
>              "and %s", mod_info1->source_filename,
mod_info2->source_filename);
>
> -   if (warn_ripa_opt_mismatch && non_warning_mismatch
> +   if (warn_ripa_opt_mismatch && non_warning_mismatch
>         && (flag_opt_info >= OPT_INFO_MED))
>       {
>         inform (UNKNOWN_LOCATION, "Options for %s",
mod_info1->source_filename);
> @@ -365,14 +424,19 @@ incompatible_cl_args (struct gcov_module
>           inform (UNKNOWN_LOCATION, non_warning_opts2[i]);
>       }
>
> -  XDELETEVEC (warning_opts1);
> -  XDELETEVEC (warning_opts2);
> -  XDELETEVEC (non_warning_opts1);
> -  XDELETEVEC (non_warning_opts2);
> -  htab_delete (option_tab1);
> -  htab_delete (option_tab2);
> -  return ((flag_ripa_disallow_opt_mismatch && non_warning_mismatch)
> -          || (with_fexceptions1 != with_fexceptions2));
> +   has_any_incompatible_cg_opts
> +       = has_incompatible_cg_opts (cg_opts1, cg_opts2, num_cg_opts);
> +
> +   XDELETEVEC (warning_opts1);
> +   XDELETEVEC (warning_opts2);
> +   XDELETEVEC (non_warning_opts1);
> +   XDELETEVEC (non_warning_opts2);
> +   XDELETEVEC (cg_opts1);
> +   XDELETEVEC (cg_opts2);
> +   htab_delete (option_tab1);
> +   htab_delete (option_tab2);
> +   return ((flag_ripa_disallow_opt_mismatch && non_warning_mismatch)
> +           || has_any_incompatible_cg_opts);
>  }
>
>  /* Read in the counts file, if available. DA_FILE_NAME is the
>
> --
> This patch is available for review at http://codereview.appspot.com/6476057
Sign in to reply to this message.

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b