Commit d82f74d3 by Ian Lance Taylor Committed by Ian Lance Taylor

simple-object.h (simple_object_attributes_merge): Declare, replacing…

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
parent 354d8ce1
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;
}
......
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. */
......
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;
if (attrs1->ei_data != attrs2->ei_data
|| attrs1->ei_class != attrs2->ei_class
|| attrs1->machine != attrs2->machine)
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 (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;
if (attrs1->magic != attrs2->magic
|| attrs1->is_big_endian != attrs2->is_big_endian
|| attrs1->cputype != attrs2->cputype)
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 (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. */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment