merge from gcc

This commit is contained in:
DJ Delorie 2010-11-17 02:03:43 +00:00
parent ab8056e082
commit f9e6589d87
8 changed files with 103 additions and 43 deletions

View file

@ -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-16 Jie Zhang <jie.zhang@analog.com>
* elf/bfin.h (EF_BFIN_CODE_IN_L1): Define.

View file

@ -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. */

View file

@ -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

View file

@ -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,

View 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 *);

View file

@ -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,

View 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,

View 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. */