simple-object.h (simple_object_attributes_merge): Declare, replacing simple_object_attributes_compare.
include/: * simple-object.h (simple_object_attributes_merge): Declare, replacing simple_object_attributes_compare. libiberty/: * simple-object.c (simple_object_attributes_merge): Rename from simple_object_attributes_compare. Call merge field. * simple-object-common.h (struct simple_object_functions): Rename attributes_compare field to attribute_merge. * simple-object-elf.c (EM_SPARC): Define. (EM_SPARC32PLUS): Define. (simple_object_elf_attributes_merge): Renamed from simple_object_elf_attributes_compare. Permit EM_SPARC and EM_SPARC32PLUS objects to be merged. (simple_object_elf_functions): Update function name. * simple-object-coff.c (simple_object_coff_attributes_merge): Rename from simple_object_coff_attributes_compare. (simple_object_coff_functions): Update function name. * simple-object-mach-o.c (simple_object_mach_o_attributes_merge): Renamed from simple_object_mach_o_attributes_compare. (simple_object_mach_o_functions): Update function name. gcc/lto/: * lto-object.c (lto_obj_file_open): Call simple_object_attributes_merge rather than simple_object_attributes_compare. From-SVN: r166848
This commit is contained in:
parent
354d8ce108
commit
d82f74d3ab
@ -1,3 +1,9 @@
|
||||
2010-11-16 Ian Lance Taylor <iant@google.com>
|
||||
|
||||
* lto-object.c (lto_obj_file_open): Call
|
||||
simple_object_attributes_merge rather than
|
||||
simple_object_attributes_compare.
|
||||
|
||||
2010-11-12 Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
* Make-lang.in (lto/lto.o): Use $(OPTS_H).
|
||||
|
@ -138,8 +138,8 @@ lto_obj_file_open (const char *filename, bool writable)
|
||||
saved_attributes = attrs;
|
||||
else
|
||||
{
|
||||
errmsg = simple_object_attributes_compare (saved_attributes, attrs,
|
||||
&err);
|
||||
errmsg = simple_object_attributes_merge (saved_attributes, attrs,
|
||||
&err);
|
||||
if (errmsg != NULL)
|
||||
goto fail_errmsg;
|
||||
}
|
||||
|
@ -1,3 +1,8 @@
|
||||
2010-11-16 Ian Lance Taylor <iant@google.com>
|
||||
|
||||
* simple-object.h (simple_object_attributes_merge): Declare,
|
||||
replacing simple_object_attributes_compare.
|
||||
|
||||
2010-11-04 Ian Lance Taylor <iant@google.com>
|
||||
|
||||
* dwarf2.h (enum dwarf_source_language): Add DW_LANG_Go.
|
||||
|
@ -117,14 +117,15 @@ extern simple_object_attributes *
|
||||
simple_object_fetch_attributes (simple_object_read *simple_object,
|
||||
const char **errmsg, int *err);
|
||||
|
||||
/* Compare ATTRS1 and ATTRS2. If they could be linked together
|
||||
without error, return NULL. Otherwise, return an error message,
|
||||
set *ERR to an errno value or 0 if there isn't one. */
|
||||
/* Merge the FROM attributes into TO. If two objects with these
|
||||
attributes could be linked together without error, returns NULL.
|
||||
Otherwise, returns an error message, and sets *ERR to an errno
|
||||
value or 0 if there isn't one. */
|
||||
|
||||
extern const char *
|
||||
simple_object_attributes_compare (simple_object_attributes *attrs1,
|
||||
simple_object_attributes *attrs2,
|
||||
int *err);
|
||||
simple_object_attributes_merge (simple_object_attributes *to,
|
||||
simple_object_attributes *from,
|
||||
int *err);
|
||||
|
||||
/* Release all resources associated with ATTRS. */
|
||||
|
||||
|
@ -1,3 +1,22 @@
|
||||
2010-11-16 Ian Lance Taylor <iant@google.com>
|
||||
|
||||
* simple-object.c (simple_object_attributes_merge): Rename from
|
||||
simple_object_attributes_compare. Call merge field.
|
||||
* simple-object-common.h (struct simple_object_functions): Rename
|
||||
attributes_compare field to attribute_merge.
|
||||
* simple-object-elf.c (EM_SPARC): Define.
|
||||
(EM_SPARC32PLUS): Define.
|
||||
(simple_object_elf_attributes_merge): Renamed from
|
||||
simple_object_elf_attributes_compare. Permit EM_SPARC and
|
||||
EM_SPARC32PLUS objects to be merged.
|
||||
(simple_object_elf_functions): Update function name.
|
||||
* simple-object-coff.c (simple_object_coff_attributes_merge):
|
||||
Rename from simple_object_coff_attributes_compare.
|
||||
(simple_object_coff_functions): Update function name.
|
||||
* simple-object-mach-o.c (simple_object_mach_o_attributes_merge):
|
||||
Renamed from simple_object_mach_o_attributes_compare.
|
||||
(simple_object_mach_o_functions): Update function name.
|
||||
|
||||
2010-11-16 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR other/42670
|
||||
|
@ -457,15 +457,14 @@ simple_object_coff_release_read (void *data)
|
||||
/* Compare two attributes structures. */
|
||||
|
||||
static const char *
|
||||
simple_object_coff_attributes_compare (void *data1, void *data2, int *err)
|
||||
simple_object_coff_attributes_merge (void *todata, void *fromdata, int *err)
|
||||
{
|
||||
struct simple_object_coff_attributes *attrs1 =
|
||||
(struct simple_object_coff_attributes *) data1;
|
||||
struct simple_object_coff_attributes *attrs2 =
|
||||
(struct simple_object_coff_attributes *) data2;
|
||||
struct simple_object_coff_attributes *to =
|
||||
(struct simple_object_coff_attributes *) todata;
|
||||
struct simple_object_coff_attributes *from =
|
||||
(struct simple_object_coff_attributes *) fromdata;
|
||||
|
||||
if (attrs1->magic != attrs2->magic
|
||||
|| attrs1->is_big_endian != attrs2->is_big_endian)
|
||||
if (to->magic != from->magic || to->is_big_endian != from->is_big_endian)
|
||||
{
|
||||
*err = 0;
|
||||
return "COFF object format mismatch";
|
||||
@ -797,7 +796,7 @@ const struct simple_object_functions simple_object_coff_functions =
|
||||
simple_object_coff_find_sections,
|
||||
simple_object_coff_fetch_attributes,
|
||||
simple_object_coff_release_read,
|
||||
simple_object_coff_attributes_compare,
|
||||
simple_object_coff_attributes_merge,
|
||||
simple_object_coff_release_attributes,
|
||||
simple_object_coff_start_write,
|
||||
simple_object_coff_write_to_file,
|
||||
|
@ -123,10 +123,10 @@ struct simple_object_functions
|
||||
/* Release the private data for an simple_object_read. */
|
||||
void (*release_read) (void *);
|
||||
|
||||
/* Compare the private data for the attributes of two files. If
|
||||
they are the same, in the sense that they could be linked
|
||||
together, return NULL. Otherwise return an error message. */
|
||||
const char *(*attributes_compare) (void *, void *, int *err);
|
||||
/* Merge the private data for the attributes of two files. If they
|
||||
could be linked together, return NULL. Otherwise return an error
|
||||
message. */
|
||||
const char *(*attributes_merge) (void *, void *, int *err);
|
||||
|
||||
/* Release the private data for an simple_object_attributes. */
|
||||
void (*release_attributes) (void *);
|
||||
|
@ -115,6 +115,11 @@ typedef struct {
|
||||
|
||||
#define ET_REL 1 /* Relocatable file */
|
||||
|
||||
/* Values for e_machine field of Ehdr. */
|
||||
|
||||
#define EM_SPARC 2 /* SUN SPARC */
|
||||
#define EM_SPARC32PLUS 18 /* Sun's "v8plus" */
|
||||
|
||||
/* Special section index values. */
|
||||
|
||||
#define SHN_LORESERVE 0xFF00 /* Begin range of reserved indices */
|
||||
@ -604,20 +609,52 @@ simple_object_elf_release_read (void *data)
|
||||
/* Compare two attributes structures. */
|
||||
|
||||
static const char *
|
||||
simple_object_elf_attributes_compare (void *data1, void *data2, int *err)
|
||||
simple_object_elf_attributes_merge (void *todata, void *fromdata, int *err)
|
||||
{
|
||||
struct simple_object_elf_attributes *attrs1 =
|
||||
(struct simple_object_elf_attributes *) data1;
|
||||
struct simple_object_elf_attributes *attrs2 =
|
||||
(struct simple_object_elf_attributes *) data2;
|
||||
struct simple_object_elf_attributes *to =
|
||||
(struct simple_object_elf_attributes *) todata;
|
||||
struct simple_object_elf_attributes *from =
|
||||
(struct simple_object_elf_attributes *) fromdata;
|
||||
|
||||
if (attrs1->ei_data != attrs2->ei_data
|
||||
|| attrs1->ei_class != attrs2->ei_class
|
||||
|| attrs1->machine != attrs2->machine)
|
||||
if (to->ei_data != from->ei_data || to->ei_class != from->ei_class)
|
||||
{
|
||||
*err = 0;
|
||||
return "ELF object format mismatch";
|
||||
}
|
||||
|
||||
if (to->machine != from->machine)
|
||||
{
|
||||
int ok;
|
||||
|
||||
/* EM_SPARC and EM_SPARC32PLUS are compatible and force an
|
||||
output of EM_SPARC32PLUS. */
|
||||
ok = 0;
|
||||
switch (to->machine)
|
||||
{
|
||||
case EM_SPARC:
|
||||
if (from->machine == EM_SPARC32PLUS)
|
||||
{
|
||||
to->machine = from->machine;
|
||||
ok = 1;
|
||||
}
|
||||
break;
|
||||
|
||||
case EM_SPARC32PLUS:
|
||||
if (from->machine == EM_SPARC)
|
||||
ok = 1;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (!ok)
|
||||
{
|
||||
*err = 0;
|
||||
return "ELF machine number mismatch";
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -908,7 +945,7 @@ const struct simple_object_functions simple_object_elf_functions =
|
||||
simple_object_elf_find_sections,
|
||||
simple_object_elf_fetch_attributes,
|
||||
simple_object_elf_release_read,
|
||||
simple_object_elf_attributes_compare,
|
||||
simple_object_elf_attributes_merge,
|
||||
simple_object_elf_release_attributes,
|
||||
simple_object_elf_start_write,
|
||||
simple_object_elf_write_to_file,
|
||||
|
@ -624,16 +624,16 @@ simple_object_mach_o_release_read (void *data)
|
||||
/* Compare two attributes structures. */
|
||||
|
||||
static const char *
|
||||
simple_object_mach_o_attributes_compare (void *data1, void *data2, int *err)
|
||||
simple_object_mach_o_attributes_merge (void *todata, void *fromdata, int *err)
|
||||
{
|
||||
struct simple_object_mach_o_attributes *attrs1 =
|
||||
(struct simple_object_mach_o_attributes *) data1;
|
||||
struct simple_object_mach_o_attributes *attrs2 =
|
||||
(struct simple_object_mach_o_attributes *) data2;
|
||||
struct simple_object_mach_o_attributes *to =
|
||||
(struct simple_object_mach_o_attributes *) todata;
|
||||
struct simple_object_mach_o_attributes *from =
|
||||
(struct simple_object_mach_o_attributes *) fromdata;
|
||||
|
||||
if (attrs1->magic != attrs2->magic
|
||||
|| attrs1->is_big_endian != attrs2->is_big_endian
|
||||
|| attrs1->cputype != attrs2->cputype)
|
||||
if (to->magic != from->magic
|
||||
|| to->is_big_endian != from->is_big_endian
|
||||
|| to->cputype != from->cputype)
|
||||
{
|
||||
*err = 0;
|
||||
return "Mach-O object format mismatch";
|
||||
@ -1014,7 +1014,7 @@ const struct simple_object_functions simple_object_mach_o_functions =
|
||||
simple_object_mach_o_find_sections,
|
||||
simple_object_mach_o_fetch_attributes,
|
||||
simple_object_mach_o_release_read,
|
||||
simple_object_mach_o_attributes_compare,
|
||||
simple_object_mach_o_attributes_merge,
|
||||
simple_object_mach_o_release_attributes,
|
||||
simple_object_mach_o_start_write,
|
||||
simple_object_mach_o_write_to_file,
|
||||
|
@ -257,20 +257,19 @@ simple_object_release_read (simple_object_read *sobj)
|
||||
XDELETE (sobj);
|
||||
}
|
||||
|
||||
/* Compare attributes. */
|
||||
/* Merge attributes. */
|
||||
|
||||
const char *
|
||||
simple_object_attributes_compare (simple_object_attributes *attrs1,
|
||||
simple_object_attributes *attrs2,
|
||||
int *err)
|
||||
simple_object_attributes_merge (simple_object_attributes *to,
|
||||
simple_object_attributes *from,
|
||||
int *err)
|
||||
{
|
||||
if (attrs1->functions != attrs2->functions)
|
||||
if (to->functions != from->functions)
|
||||
{
|
||||
*err = 0;
|
||||
return "different object file format";
|
||||
}
|
||||
return attrs1->functions->attributes_compare (attrs1->data, attrs2->data,
|
||||
err);
|
||||
return to->functions->attributes_merge (to->data, from->data, err);
|
||||
}
|
||||
|
||||
/* Release an attributes structure. */
|
||||
|
Loading…
Reference in New Issue
Block a user