Line 982... |
Line 982... |
|
|
beg = demand_copy_C_string (&dummy);
|
beg = demand_copy_C_string (&dummy);
|
if (beg == NULL)
|
if (beg == NULL)
|
{
|
{
|
ignore_rest_of_line ();
|
ignore_rest_of_line ();
|
xfree (name);
|
|
return;
|
return;
|
}
|
}
|
attr |= obj_elf_parse_section_letters (beg, strlen (beg), &clone);
|
attr |= obj_elf_parse_section_letters (beg, strlen (beg), &clone);
|
|
|
SKIP_WHITESPACE ();
|
SKIP_WHITESPACE ();
|
Line 1002... |
Line 1001... |
{
|
{
|
beg = demand_copy_C_string (&dummy);
|
beg = demand_copy_C_string (&dummy);
|
if (beg == NULL)
|
if (beg == NULL)
|
{
|
{
|
ignore_rest_of_line ();
|
ignore_rest_of_line ();
|
xfree (name);
|
|
return;
|
return;
|
}
|
}
|
type = obj_elf_section_type (beg, strlen (beg), TRUE);
|
type = obj_elf_section_type (beg, strlen (beg), TRUE);
|
}
|
}
|
else if (c == '@' || c == '%')
|
else if (c == '@' || c == '%')
|
Line 1084... |
Line 1082... |
SKIP_WHITESPACE ();
|
SKIP_WHITESPACE ();
|
if (*input_line_pointer != '#')
|
if (*input_line_pointer != '#')
|
{
|
{
|
as_bad (_("character following name is not '#'"));
|
as_bad (_("character following name is not '#'"));
|
ignore_rest_of_line ();
|
ignore_rest_of_line ();
|
xfree (name);
|
|
return;
|
return;
|
}
|
}
|
beg = ++input_line_pointer;
|
beg = ++input_line_pointer;
|
c = get_symbol_end ();
|
c = get_symbol_end ();
|
*input_line_pointer = c;
|
*input_line_pointer = c;
|
Line 1702... |
Line 1699... |
|| strcmp (type_name, "STT_GNU_IFUNC") == 0)
|
|| strcmp (type_name, "STT_GNU_IFUNC") == 0)
|
{
|
{
|
const struct elf_backend_data *bed;
|
const struct elf_backend_data *bed;
|
|
|
bed = get_elf_backend_data (stdoutput);
|
bed = get_elf_backend_data (stdoutput);
|
if (!(bed->elf_osabi == ELFOSABI_LINUX
|
if (!(bed->elf_osabi == ELFOSABI_GNU
|
/* GNU/Linux is still using the default value 0. */
|
/* GNU is still using the default value 0. */
|
|| bed->elf_osabi == ELFOSABI_NONE))
|
|| bed->elf_osabi == ELFOSABI_NONE))
|
as_bad (_("symbol type \"%s\" is supported only by GNU targets"),
|
as_bad (_("symbol type \"%s\" is supported only by GNU targets"),
|
type_name);
|
type_name);
|
type = BSF_FUNCTION | BSF_GNU_INDIRECT_FUNCTION;
|
type = BSF_FUNCTION | BSF_GNU_INDIRECT_FUNCTION;
|
}
|
}
|
else if (strcmp (type_name, "gnu_unique_object") == 0)
|
else if (strcmp (type_name, "gnu_unique_object") == 0)
|
{
|
{
|
struct elf_backend_data *bed;
|
struct elf_backend_data *bed;
|
|
|
bed = (struct elf_backend_data *) get_elf_backend_data (stdoutput);
|
bed = (struct elf_backend_data *) get_elf_backend_data (stdoutput);
|
if (!(bed->elf_osabi == ELFOSABI_LINUX
|
if (!(bed->elf_osabi == ELFOSABI_GNU
|
/* GNU/Linux is still using the default value 0. */
|
/* GNU is still using the default value 0. */
|
|| bed->elf_osabi == ELFOSABI_NONE))
|
|| bed->elf_osabi == ELFOSABI_NONE))
|
as_bad (_("symbol type \"%s\" is supported only by GNU targets"),
|
as_bad (_("symbol type \"%s\" is supported only by GNU targets"),
|
type_name);
|
type_name);
|
type = BSF_OBJECT | BSF_GNU_UNIQUE;
|
type = BSF_OBJECT | BSF_GNU_UNIQUE;
|
/* PR 10549: Always set OSABI field to LINUX for objects containing unique symbols. */
|
/* PR 10549: Always set OSABI field to GNU for objects containing unique symbols. */
|
bed->elf_osabi = ELFOSABI_LINUX;
|
bed->elf_osabi = ELFOSABI_GNU;
|
}
|
}
|
#ifdef md_elf_symbol_type
|
#ifdef md_elf_symbol_type
|
else if ((type = md_elf_symbol_type (type_name, sym, elfsym)) != -1)
|
else if ((type = md_elf_symbol_type (type_name, sym, elfsym)) != -1)
|
;
|
;
|
#endif
|
#endif
|