* PATCH: PR lto/50568: [4.7 Regression] Massive LTO failures
@ 2011-09-30 4:10 H.J. Lu
2011-09-30 6:18 ` Andi Kleen
2011-09-30 7:04 ` Diego Novillo
0 siblings, 2 replies; 5+ messages in thread
From: H.J. Lu @ 2011-09-30 4:10 UTC (permalink / raw)
To: gcc-patches; +Cc: Andi Kleen
Hi,
On 32bit hosts, like Linux/ia32, HOST_WIDE_INT is 64bit. But lto and
lto-plugin still uses 32bit int in symbol ID handling. As the result,
LTO is totally broken on Linux/ia32. This patch switches symbol ID
to HOST_WIDE_INT in lto.c and long long in lto-plugin.c. Since
symbol ID is generated by lto.c, long long >= HOST_WIDE_INT and
lto-plugin.c only scans/prints symbol ID as numbers, it isn't a problem.
Tested on Linux/ia32 and Linux/x86-64. OK for trunk?
Thanks.
H.J.
---
gcc/lto
2011-09-29 H.J. Lu <hongjiu.lu@intel.com>
Andi Kleen <ak@linux.intel.com>
PR lto/50568
* lto.c (lto_splay_tree_delete_id): New.
(lto_splay_tree_compare_ids): Likewise.
(lto_splay_tree_lookup): Likewise.
(lto_splay_tree_id_equal_p): Likewise.
(lto_splay_tree_insert): Likewise.
(lto_splay_tree_new): Likewise.
(lto_resolution_read): Change id to unsigned HOST_WIDE_INT.
Use lto_splay_tree_id_equal_p and lto_splay_tree_lookup.
(create_subid_section_table): Use lto_splay_tree_lookup and
lto_splay_tree_insert.
(lto_file_read): Use lto_splay_tree_new.
lto-plugin/
2011-09-29 H.J. Lu <hongjiu.lu@intel.com>
Andi Kleen <ak@linux.intel.com>
PR lto/50568
* lto-plugin.c (sym_aux): Change id to unsigned long long.
(plugin_symtab): Likewise.
(dump_symtab): Likewise.
(resolve_conflicts): Likewise.
(process_symtab): Likewise.
diff --git a/gcc/lto/lto.c b/gcc/lto/lto.c
index 77eb1a1..9c6770a 100644
--- a/gcc/lto/lto.c
+++ b/gcc/lto/lto.c
@@ -93,6 +93,93 @@ lto_obj_create_section_hash_table (void)
return htab_create (37, hash_name, eq_name, free_with_string);
}
+/* Delete a allocated integer key in the splay tree. */
+
+static void
+lto_splay_tree_delete_id (splay_tree_key key)
+{
+ free ((void *) key);
+}
+
+/* Compare two splay tree node ids. */
+
+static int
+lto_splay_tree_compare_ids (splay_tree_key a, splay_tree_key b)
+{
+ unsigned HOST_WIDE_INT ai;
+ unsigned HOST_WIDE_INT bi;
+
+ if (sizeof (splay_tree_key) == sizeof (unsigned HOST_WIDE_INT))
+ {
+ ai = (unsigned HOST_WIDE_INT) a;
+ bi = (unsigned HOST_WIDE_INT) b;
+ }
+ else
+ {
+ ai = *(unsigned HOST_WIDE_INT *) a;
+ bi = *(unsigned HOST_WIDE_INT *) b;
+ }
+
+ if (ai < bi)
+ return -1;
+ else if (ai > bi)
+ return 1;
+ return 0;
+}
+
+/* Look up splay tree node by ID. */
+
+static splay_tree_node
+lto_splay_tree_lookup (splay_tree t, unsigned HOST_WIDE_INT id)
+{
+ if (sizeof (splay_tree_key) == sizeof (unsigned HOST_WIDE_INT))
+ return splay_tree_lookup (t, (splay_tree_key) id);
+ else
+ return splay_tree_lookup (t, (splay_tree_key) &id);
+}
+
+/* Check if KEY has ID. */
+
+static bool
+lto_splay_tree_id_equal_p (splay_tree_key key, unsigned HOST_WIDE_INT id)
+{
+ if (sizeof (splay_tree_key) == sizeof (unsigned HOST_WIDE_INT))
+ return (unsigned HOST_WIDE_INT) key == id;
+ else
+ return *(unsigned HOST_WIDE_INT *) key == id;
+}
+
+/* Insert a splay tree node with ID as key and FILE_DATA as value. */
+
+static void
+lto_splay_tree_insert (splay_tree t, unsigned HOST_WIDE_INT id,
+ struct lto_file_decl_data * file_data)
+{
+ if (sizeof (splay_tree_key) == sizeof (unsigned HOST_WIDE_INT))
+ splay_tree_insert (t, (splay_tree_key) id,
+ (splay_tree_value) file_data);
+ else
+ {
+ unsigned HOST_WIDE_INT *idp = XCNEW (unsigned HOST_WIDE_INT);
+ *idp = id;
+ splay_tree_insert (t, (splay_tree_key) idp,
+ (splay_tree_value) file_data);
+ }
+}
+
+/* Create a splay tree. */
+
+static splay_tree
+lto_splay_tree_new (void)
+{
+ if (sizeof (splay_tree_key) == sizeof (unsigned HOST_WIDE_INT))
+ return splay_tree_new (lto_splay_tree_compare_ids, NULL, NULL);
+ else
+ return splay_tree_new (lto_splay_tree_compare_ids,
+ lto_splay_tree_delete_id,
+ NULL);
+}
+
/* Read the constructors and inits. */
static void
@@ -944,14 +1031,16 @@ lto_resolution_read (splay_tree file_ids, FILE *resolution, lto_file *file)
for (i = 0; i < num_symbols; i++)
{
int t;
- unsigned index, id;
+ unsigned index;
+ unsigned HOST_WIDE_INT id;
char r_str[27];
enum ld_plugin_symbol_resolution r = (enum ld_plugin_symbol_resolution) 0;
unsigned int j;
unsigned int lto_resolution_str_len =
sizeof (lto_resolution_str) / sizeof (char *);
- t = fscanf (resolution, "%u %x %26s %*[^\n]\n", &index, &id, r_str);
+ t = fscanf (resolution, "%u " HOST_WIDE_INT_PRINT_HEX_PURE " %26s %*[^\n]\n",
+ &index, &id, r_str);
if (t != 3)
internal_error ("invalid line in the resolution file");
if (index > max_index)
@@ -968,11 +1057,12 @@ lto_resolution_read (splay_tree file_ids, FILE *resolution, lto_file *file)
if (j == lto_resolution_str_len)
internal_error ("invalid resolution in the resolution file");
- if (!(nd && nd->key == id))
+ if (!(nd && lto_splay_tree_id_equal_p (nd->key, id)))
{
- nd = splay_tree_lookup (file_ids, id);
+ nd = lto_splay_tree_lookup (file_ids, id);
if (nd == NULL)
- internal_error ("resolution sub id %x not in object file", id);
+ internal_error ("resolution sub id " HOST_WIDE_INT_PRINT_HEX_PURE
+ " not in object file", id);
}
file_data = (struct lto_file_decl_data *)nd->value;
@@ -1015,7 +1105,7 @@ create_subid_section_table (void **slot, void *data)
return 1;
/* Find hash table of sub module id */
- nd = splay_tree_lookup (file_ids, id);
+ nd = lto_splay_tree_lookup (file_ids, id);
if (nd != NULL)
{
file_data = (struct lto_file_decl_data *)nd->value;
@@ -1026,7 +1116,7 @@ create_subid_section_table (void **slot, void *data)
memset(file_data, 0, sizeof (struct lto_file_decl_data));
file_data->id = id;
file_data->section_hash_table = lto_obj_create_section_hash_table ();;
- splay_tree_insert (file_ids, id, (splay_tree_value)file_data);
+ lto_splay_tree_insert (file_ids, id, file_data);
}
/* Copy section into sub module hash table */
@@ -1104,7 +1194,7 @@ lto_file_read (lto_file *file, FILE *resolution_file, int *count)
/* Find all sub modules in the object and put their sections into new hash
tables in a splay tree. */
- file_ids = splay_tree_new (splay_tree_compare_ints, NULL, NULL);
+ file_ids = lto_splay_tree_new ();
htab_traverse (section_hash_table, create_subid_section_table, file_ids);
/* Add resolutions to file ids */
diff --git a/lto-plugin/lto-plugin.c b/lto-plugin/lto-plugin.c
index 4b5828b..5a56887 100644
--- a/lto-plugin/lto-plugin.c
+++ b/lto-plugin/lto-plugin.c
@@ -85,7 +85,7 @@ along with this program; see the file COPYING3. If not see
struct sym_aux
{
uint32_t slot;
- unsigned id;
+ unsigned long long id;
unsigned next_conflict;
};
@@ -94,7 +94,7 @@ struct plugin_symtab
int nsyms;
struct sym_aux *aux;
struct ld_plugin_symbol *syms;
- unsigned id;
+ unsigned long long id;
};
/* Encapsulates object file data during symbol scan. */
@@ -359,7 +359,8 @@ dump_symtab (FILE *f, struct plugin_symtab *symtab)
assert (resolution != LDPR_UNKNOWN);
- fprintf (f, "%u %x %s %s\n", (unsigned int) slot, symtab->aux[j].id,
+ fprintf (f, "%u %llx %s %s\n",
+ (unsigned int) slot, symtab->aux[j].id,
lto_resolution_str[resolution],
symtab->syms[j].name);
}
@@ -759,7 +760,7 @@ resolve_conflicts (struct plugin_symtab *t, struct plugin_symtab *conflicts)
{
SWAP (struct ld_plugin_symbol, *orig, *s);
SWAP (uint32_t, orig_aux->slot, aux->slot);
- SWAP (unsigned, orig_aux->id, aux->id);
+ SWAP (unsigned long long, orig_aux->id, aux->id);
/* Don't swap conflict chain pointer */
}
@@ -809,7 +810,7 @@ process_symtab (void *data, const char *name, off_t offset, off_t length)
s = strrchr (name, '.');
if (s)
- sscanf (s, ".%x", &obj->out->id);
+ sscanf (s, ".%llx", &obj->out->id);
secdata = xmalloc (length);
offset += obj->file->offset;
if (offset != lseek (obj->file->fd, offset, SEEK_SET)
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: PATCH: PR lto/50568: [4.7 Regression] Massive LTO failures
2011-09-30 4:10 PATCH: PR lto/50568: [4.7 Regression] Massive LTO failures H.J. Lu
@ 2011-09-30 6:18 ` Andi Kleen
2011-09-30 7:04 ` Diego Novillo
1 sibling, 0 replies; 5+ messages in thread
From: Andi Kleen @ 2011-09-30 6:18 UTC (permalink / raw)
To: H.J. Lu; +Cc: gcc-patches
"H.J. Lu" <hongjiu.lu@intel.com> writes:
> Hi,
>
> On 32bit hosts, like Linux/ia32, HOST_WIDE_INT is 64bit. But lto and
> lto-plugin still uses 32bit int in symbol ID handling. As the result,
> LTO is totally broken on Linux/ia32. This patch switches symbol ID
> to HOST_WIDE_INT in lto.c and long long in lto-plugin.c. Since
> symbol ID is generated by lto.c, long long >= HOST_WIDE_INT and
> lto-plugin.c only scans/prints symbol ID as numbers, it isn't a problem.
> Tested on Linux/ia32 and Linux/x86-64. OK for trunk?
Thanks for fixing. Looks good to me.
-Andi
--
ak@linux.intel.com -- Speaking for myself only
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: PATCH: PR lto/50568: [4.7 Regression] Massive LTO failures
2011-09-30 4:10 PATCH: PR lto/50568: [4.7 Regression] Massive LTO failures H.J. Lu
2011-09-30 6:18 ` Andi Kleen
@ 2011-09-30 7:04 ` Diego Novillo
2011-09-30 8:00 ` Andi Kleen
1 sibling, 1 reply; 5+ messages in thread
From: Diego Novillo @ 2011-09-30 7:04 UTC (permalink / raw)
To: H.J. Lu; +Cc: H.J. Lu, gcc-patches, Andi Kleen
On 11-09-29 20:57 , H.J. Lu wrote:
>
> diff --git a/gcc/lto/lto.c b/gcc/lto/lto.c
> index 77eb1a1..9c6770a 100644
> --- a/gcc/lto/lto.c
> +++ b/gcc/lto/lto.c
> @@ -93,6 +93,93 @@ lto_obj_create_section_hash_table (void)
> return htab_create (37, hash_name, eq_name, free_with_string);
> }
>
> +/* Delete a allocated integer key in the splay tree. */
> +
s/a allocated/an allocated/
Please document KEY.
> +static void
> +lto_splay_tree_delete_id (splay_tree_key key)
> +{
> + free ((void *) key);
> +}
> +
> +/* Compare two splay tree node ids. */
> +
Likewise A and B. Other functions have similar issues.
> +/* Insert a splay tree node with ID as key and FILE_DATA as value. */
> +
> +static void
> +lto_splay_tree_insert (splay_tree t, unsigned HOST_WIDE_INT id,
> + struct lto_file_decl_data * file_data)
s/* file_data/*file_data/
> +/* Create a splay tree. */
> +
> +static splay_tree
> +lto_splay_tree_new (void)
> +{
> + if (sizeof (splay_tree_key) == sizeof (unsigned HOST_WIDE_INT))
> + return splay_tree_new (lto_splay_tree_compare_ids, NULL, NULL);
> + else
> + return splay_tree_new (lto_splay_tree_compare_ids,
> + lto_splay_tree_delete_id,
> + NULL);
> +}
Why not always do the option where we allocate the IDs? I don't think
it would be a huge performance hit and it would make the code easier to
understand.
Could you document here and in lto-plugin why we need to play with this
checking of splay_tree_key? And why both need to kept in sync.
Thanks. Diego.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: PATCH: PR lto/50568: [4.7 Regression] Massive LTO failures
2011-09-30 7:04 ` Diego Novillo
@ 2011-09-30 8:00 ` Andi Kleen
2011-09-30 11:55 ` Diego Novillo
0 siblings, 1 reply; 5+ messages in thread
From: Andi Kleen @ 2011-09-30 8:00 UTC (permalink / raw)
To: Diego Novillo; +Cc: H.J. Lu, H.J. Lu, gcc-patches
I updated the patch according to your comments. Ok now?
-Andi
gcc/lto/:
2011-09-29 H.J. Lu <hongjiu.lu@intel.com>
Andi Kleen <ak@linux.intel.com>
PR lto/50568
* lto.c (lto_splay_tree_delete_id): New.
(lto_splay_tree_compare_ids): Likewise.
(lto_splay_tree_lookup): Likewise.
(lto_splay_tree_id_equal_p): Likewise.
(lto_splay_tree_insert): Likewise.
(lto_splay_tree_new): Likewise.
(lto_resolution_read): Change id to unsigned HOST_WIDE_INT.
Use lto_splay_tree_id_equal_p and lto_splay_tree_lookup.
(create_subid_section_table): Use lto_splay_tree_lookup and
lto_splay_tree_insert.
(lto_file_read): Use lto_splay_tree_new.
lto-plugin/:
2011-09-29 H.J. Lu <hongjiu.lu@intel.com>
Andi Kleen <ak@linux.intel.com>
PR lto/50568
* lto-plugin.c (sym_aux): Change id to unsigned long long.
(plugin_symtab): Likewise.
(dump_symtab): Likewise.
(resolve_conflicts): Likewise.
(process_symtab): Likewise.
---
gcc/lto/lto.c | 84 ++++++++++++++++++++++++++++++++++++++++++----
lto-plugin/lto-plugin.c | 14 ++++---
2 files changed, 84 insertions(+), 14 deletions(-)
diff --git a/gcc/lto/lto.c b/gcc/lto/lto.c
index 77eb1a1..778e33e 100644
--- a/gcc/lto/lto.c
+++ b/gcc/lto/lto.c
@@ -93,6 +93,71 @@ lto_obj_create_section_hash_table (void)
return htab_create (37, hash_name, eq_name, free_with_string);
}
+/* Delete an allocated integer KEY in the splay tree. */
+
+static void
+lto_splay_tree_delete_id (splay_tree_key key)
+{
+ free ((void *) key);
+}
+
+/* Compare splay tree node ids A and B. */
+
+static int
+lto_splay_tree_compare_ids (splay_tree_key a, splay_tree_key b)
+{
+ unsigned HOST_WIDE_INT ai;
+ unsigned HOST_WIDE_INT bi;
+
+ ai = *(unsigned HOST_WIDE_INT *) a;
+ bi = *(unsigned HOST_WIDE_INT *) b;
+
+ if (ai < bi)
+ return -1;
+ else if (ai > bi)
+ return 1;
+ return 0;
+}
+
+/* Look up splay tree node by ID in splay tree T. */
+
+static splay_tree_node
+lto_splay_tree_lookup (splay_tree t, unsigned HOST_WIDE_INT id)
+{
+ return splay_tree_lookup (t, (splay_tree_key) &id);
+}
+
+/* Check if KEY has ID. */
+
+static bool
+lto_splay_tree_id_equal_p (splay_tree_key key, unsigned HOST_WIDE_INT id)
+{
+ return *(unsigned HOST_WIDE_INT *) key == id;
+}
+
+/* Insert a splay tree node into tree T with ID as key and FILE_DATA as value.
+ The ID is allocated separately because we need HOST_WIDE_INTs which may
+ be wider than a splay_tree_key. */
+
+static void
+lto_splay_tree_insert (splay_tree t, unsigned HOST_WIDE_INT id,
+ struct lto_file_decl_data *file_data)
+{
+ unsigned HOST_WIDE_INT *idp = XCNEW (unsigned HOST_WIDE_INT);
+ *idp = id;
+ splay_tree_insert (t, (splay_tree_key) idp, (splay_tree_value) file_data);
+}
+
+/* Create a splay tree. */
+
+static splay_tree
+lto_splay_tree_new (void)
+{
+ return splay_tree_new (lto_splay_tree_compare_ids,
+ lto_splay_tree_delete_id,
+ NULL);
+}
+
/* Read the constructors and inits. */
static void
@@ -944,14 +1009,16 @@ lto_resolution_read (splay_tree file_ids, FILE *resolution, lto_file *file)
for (i = 0; i < num_symbols; i++)
{
int t;
- unsigned index, id;
+ unsigned index;
+ unsigned HOST_WIDE_INT id;
char r_str[27];
enum ld_plugin_symbol_resolution r = (enum ld_plugin_symbol_resolution) 0;
unsigned int j;
unsigned int lto_resolution_str_len =
sizeof (lto_resolution_str) / sizeof (char *);
- t = fscanf (resolution, "%u %x %26s %*[^\n]\n", &index, &id, r_str);
+ t = fscanf (resolution, "%u " HOST_WIDE_INT_PRINT_HEX_PURE " %26s %*[^\n]\n",
+ &index, &id, r_str);
if (t != 3)
internal_error ("invalid line in the resolution file");
if (index > max_index)
@@ -968,11 +1035,12 @@ lto_resolution_read (splay_tree file_ids, FILE *resolution, lto_file *file)
if (j == lto_resolution_str_len)
internal_error ("invalid resolution in the resolution file");
- if (!(nd && nd->key == id))
+ if (!(nd && lto_splay_tree_id_equal_p (nd->key, id)))
{
- nd = splay_tree_lookup (file_ids, id);
+ nd = lto_splay_tree_lookup (file_ids, id);
if (nd == NULL)
- internal_error ("resolution sub id %x not in object file", id);
+ internal_error ("resolution sub id " HOST_WIDE_INT_PRINT_HEX_PURE
+ " not in object file", id);
}
file_data = (struct lto_file_decl_data *)nd->value;
@@ -1015,7 +1083,7 @@ create_subid_section_table (void **slot, void *data)
return 1;
/* Find hash table of sub module id */
- nd = splay_tree_lookup (file_ids, id);
+ nd = lto_splay_tree_lookup (file_ids, id);
if (nd != NULL)
{
file_data = (struct lto_file_decl_data *)nd->value;
@@ -1026,7 +1094,7 @@ create_subid_section_table (void **slot, void *data)
memset(file_data, 0, sizeof (struct lto_file_decl_data));
file_data->id = id;
file_data->section_hash_table = lto_obj_create_section_hash_table ();;
- splay_tree_insert (file_ids, id, (splay_tree_value)file_data);
+ lto_splay_tree_insert (file_ids, id, file_data);
}
/* Copy section into sub module hash table */
@@ -1104,7 +1172,7 @@ lto_file_read (lto_file *file, FILE *resolution_file, int *count)
/* Find all sub modules in the object and put their sections into new hash
tables in a splay tree. */
- file_ids = splay_tree_new (splay_tree_compare_ints, NULL, NULL);
+ file_ids = lto_splay_tree_new ();
htab_traverse (section_hash_table, create_subid_section_table, file_ids);
/* Add resolutions to file ids */
diff --git a/lto-plugin/lto-plugin.c b/lto-plugin/lto-plugin.c
index 4b5828b..9323bd2 100644
--- a/lto-plugin/lto-plugin.c
+++ b/lto-plugin/lto-plugin.c
@@ -80,12 +80,13 @@ along with this program; see the file COPYING3. If not see
/* The part of the symbol table the plugin has to keep track of. Note that we
must keep SYMS until all_symbols_read is called to give the linker time to
- copy the symbol information. */
+ copy the symbol information.
+ The id must be 64bit to minimze collisions. */
struct sym_aux
{
uint32_t slot;
- unsigned id;
+ unsigned long long id;
unsigned next_conflict;
};
@@ -94,7 +95,7 @@ struct plugin_symtab
int nsyms;
struct sym_aux *aux;
struct ld_plugin_symbol *syms;
- unsigned id;
+ unsigned long long id;
};
/* Encapsulates object file data during symbol scan. */
@@ -359,7 +360,8 @@ dump_symtab (FILE *f, struct plugin_symtab *symtab)
assert (resolution != LDPR_UNKNOWN);
- fprintf (f, "%u %x %s %s\n", (unsigned int) slot, symtab->aux[j].id,
+ fprintf (f, "%u %llx %s %s\n",
+ (unsigned int) slot, symtab->aux[j].id,
lto_resolution_str[resolution],
symtab->syms[j].name);
}
@@ -759,7 +761,7 @@ resolve_conflicts (struct plugin_symtab *t, struct plugin_symtab *conflicts)
{
SWAP (struct ld_plugin_symbol, *orig, *s);
SWAP (uint32_t, orig_aux->slot, aux->slot);
- SWAP (unsigned, orig_aux->id, aux->id);
+ SWAP (unsigned long long, orig_aux->id, aux->id);
/* Don't swap conflict chain pointer */
}
@@ -809,7 +811,7 @@ process_symtab (void *data, const char *name, off_t offset, off_t length)
s = strrchr (name, '.');
if (s)
- sscanf (s, ".%x", &obj->out->id);
+ sscanf (s, ".%llx", &obj->out->id);
secdata = xmalloc (length);
offset += obj->file->offset;
if (offset != lseek (obj->file->fd, offset, SEEK_SET)
--
1.7.5.4
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: PATCH: PR lto/50568: [4.7 Regression] Massive LTO failures
2011-09-30 8:00 ` Andi Kleen
@ 2011-09-30 11:55 ` Diego Novillo
0 siblings, 0 replies; 5+ messages in thread
From: Diego Novillo @ 2011-09-30 11:55 UTC (permalink / raw)
To: Andi Kleen; +Cc: H.J. Lu, H.J. Lu, gcc-patches
On Fri, Sep 30, 2011 at 00:09, Andi Kleen <ak@linux.intel.com> wrote:
> gcc/lto/:
>
> 2011-09-29 H.J. Lu <hongjiu.lu@intel.com>
> Andi Kleen <ak@linux.intel.com>
>
> PR lto/50568
> * lto.c (lto_splay_tree_delete_id): New.
> (lto_splay_tree_compare_ids): Likewise.
> (lto_splay_tree_lookup): Likewise.
> (lto_splay_tree_id_equal_p): Likewise.
> (lto_splay_tree_insert): Likewise.
> (lto_splay_tree_new): Likewise.
> (lto_resolution_read): Change id to unsigned HOST_WIDE_INT.
> Use lto_splay_tree_id_equal_p and lto_splay_tree_lookup.
> (create_subid_section_table): Use lto_splay_tree_lookup and
> lto_splay_tree_insert.
> (lto_file_read): Use lto_splay_tree_new.
>
> lto-plugin/:
>
> 2011-09-29 H.J. Lu <hongjiu.lu@intel.com>
> Andi Kleen <ak@linux.intel.com>
>
> PR lto/50568
> * lto-plugin.c (sym_aux): Change id to unsigned long long.
> (plugin_symtab): Likewise.
> (dump_symtab): Likewise.
> (resolve_conflicts): Likewise.
> (process_symtab): Likewise.
OK.
Diego.
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2011-09-30 11:03 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-09-30 4:10 PATCH: PR lto/50568: [4.7 Regression] Massive LTO failures H.J. Lu
2011-09-30 6:18 ` Andi Kleen
2011-09-30 7:04 ` Diego Novillo
2011-09-30 8:00 ` Andi Kleen
2011-09-30 11:55 ` Diego Novillo
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).