2009-01-19 Andrew Stubbs <ams@codesourcery.com>

bfd/
	* elf-attrs.c (is_default_attr): Support defaultless attributes.
	(bfd_elf_add_obj_attr_int): Get type from _bfd_elf_obj_attrs_arg_type.
	(bfd_elf_add_obj_attr_string): Likewise.
	(bfd_elf_add_obj_attr_int_string): Likewise.
	(_bfd_elf_parse_attributes): Allow for unknown flag bits in type.
	* elf-bfd.h (struct obj_attribute): Document new flag bit.
	* elf32-arm.c (elf32_arm_obj_attrs_arg_type): Specify that
	Tag_nodefaults has no default value.
	(elf32_arm_merge_eabi_attributes): Modify the Tag_nodefaults
	comment to reflect the new state.

	gas/
	* read.c (s_vendor_attribute): Allow for unknown flag bits in type.
This commit is contained in:
Andrew Stubbs 2009-01-19 11:50:31 +00:00
parent a77e83b76e
commit 2d0bb7614b
6 changed files with 33 additions and 12 deletions

View File

@ -1,3 +1,16 @@
2009-01-19 Andrew Stubbs <ams@codesourcery.com>
* elf-attrs.c (is_default_attr): Support defaultless attributes.
(bfd_elf_add_obj_attr_int): Get type from _bfd_elf_obj_attrs_arg_type.
(bfd_elf_add_obj_attr_string): Likewise.
(bfd_elf_add_obj_attr_int_string): Likewise.
(_bfd_elf_parse_attributes): Allow for unknown flag bits in type.
* elf-bfd.h (struct obj_attribute): Document new flag bit.
* elf32-arm.c (elf32_arm_obj_attrs_arg_type): Specify that
Tag_nodefaults has no default value.
(elf32_arm_merge_eabi_attributes): Modify the Tag_nodefaults
comment to reflect the new state.
2009-01-19 Alan Modra <amodra@bigpond.net.au>
PR 9695

View File

@ -47,6 +47,8 @@ is_default_attr (obj_attribute *attr)
return FALSE;
if ((attr->type & 2) && attr->s && *attr->s)
return FALSE;
if (attr->type & 4)
return FALSE;
return TRUE;
}
@ -290,7 +292,7 @@ bfd_elf_add_obj_attr_int (bfd *abfd, int vendor, int tag, unsigned int i)
obj_attribute *attr;
attr = elf_new_obj_attr (abfd, vendor, tag);
attr->type = 1;
attr->type = _bfd_elf_obj_attrs_arg_type (abfd, vendor, tag);
attr->i = i;
}
@ -313,7 +315,7 @@ bfd_elf_add_obj_attr_string (bfd *abfd, int vendor, int tag, const char *s)
obj_attribute *attr;
attr = elf_new_obj_attr (abfd, vendor, tag);
attr->type = 2;
attr->type = _bfd_elf_obj_attrs_arg_type (abfd, vendor, tag);
attr->s = _bfd_elf_attr_strdup (abfd, s);
}
@ -325,7 +327,7 @@ bfd_elf_add_obj_attr_int_string (bfd *abfd, int vendor, int tag,
obj_attribute *attr;
attr = elf_new_obj_attr (abfd, vendor, tag);
attr->type = 3;
attr->type = _bfd_elf_obj_attrs_arg_type (abfd, vendor, tag);
attr->i = i;
attr->s = _bfd_elf_attr_strdup (abfd, s);
}
@ -487,7 +489,7 @@ _bfd_elf_parse_attributes (bfd *abfd, Elf_Internal_Shdr * hdr)
tag = read_unsigned_leb128 (abfd, p, &n);
p += n;
type = _bfd_elf_obj_attrs_arg_type (abfd, vendor, tag);
switch (type)
switch (type & 3)
{
case 3:
val = read_unsigned_leb128 (abfd, p, &n);

View File

@ -1373,7 +1373,8 @@ struct elf_find_verdep_info
/* The value of an object attribute. type & 1 indicates whether there
is an integer value; type & 2 indicates whether there is a string
value. */
value; type & 4 indicates whether the type has a default value
(i.e. is there a value that need not be written to file). */
typedef struct obj_attribute
{

View File

@ -8139,6 +8139,8 @@ elf32_arm_obj_attrs_arg_type (int tag)
{
if (tag == Tag_compatibility)
return 3;
else if (tag == Tag_nodefaults)
return 5;
else if (tag == 4 || tag == 5)
return 2;
else if (tag < 32)
@ -8675,11 +8677,10 @@ elf32_arm_merge_eabi_attributes (bfd *ibfd, bfd *obfd)
break;
case Tag_nodefaults:
/* This tag is set if it exists, but the value is unused.
Unfortunately, we don't record whether each attribute is zero
initialized, or read from the file, so the information has been
lost. In any case, we don't write attributes with zero values.
Do nothing. */
/* This tag is set if it exists, but the value is unused (and is
typically zero). We don't actually need to do anything here -
the merge happens automatically when the type flags are merged
below. */
break;
case Tag_also_compatible_with:
/* Already done in Tag_CPU_arch. */

View File

@ -1,3 +1,7 @@
2009-01-19 Andrew Stubbs <ams@codesourcery.com>
* read.c (s_vendor_attribute): Allow for unknown flag bits in type.
2009-01-16 Mark Shinwell <shinwell@codesourcery.com>
* config/te-armeabi.h (EABI_DEFAULT): Use EF_ARM_EABI_VER5.

View File

@ -2123,7 +2123,7 @@ s_vendor_attribute (int vendor)
}
i = exp.X_add_number;
}
if (type == 3
if ((type & 3) == 3
&& skip_past_comma (&input_line_pointer) == -1)
{
as_bad (_("expected comma"));
@ -2140,7 +2140,7 @@ s_vendor_attribute (int vendor)
s = demand_copy_C_string (&len);
}
switch (type)
switch (type & 3)
{
case 3:
bfd_elf_add_obj_attr_int_string (stdoutput, vendor, tag, i, s);