Correct spelling of "relocatable".
[deliverable/binutils-gdb.git] / gas / config / obj-elf.c
index 7976704de2117daabb9210fbe649415123455930..18cf50d4f8430b583ca3d0430505b710759f237f 100644 (file)
@@ -25,6 +25,7 @@
 #include "subsegs.h"
 #include "obstack.h"
 #include "struc-symbol.h"
+#include "dwarf2dbg.h"
 
 #ifndef ECOFF_DEBUGGING
 #define ECOFF_DEBUGGING 0
@@ -126,6 +127,9 @@ static const pseudo_typeS elf_pseudo_table[] =
   {"2byte", cons, 2},
   {"4byte", cons, 4},
   {"8byte", cons, 8},
+  /* These are used for dwarf2.  */
+  { "file", (void (*) PARAMS ((int))) dwarf2_directive_file, 0 },
+  { "loc",  dwarf2_directive_loc,  0 },
 
   /* We need to trap the section changing calls to handle .previous.  */
   {"data", obj_elf_data, 0},
@@ -755,11 +759,12 @@ obj_elf_change_section (name, type, attr, entsize, group_name, linkonce, push)
       if (type == SHT_NOBITS)
         seg_info (sec)->bss = 1;
 
+      if (linkonce)
+       flags |= SEC_LINK_ONCE | SEC_LINK_DUPLICATES_DISCARD;
       bfd_set_section_flags (stdoutput, sec, flags);
       if (flags & SEC_MERGE)
        sec->entsize = entsize;
       elf_group_name (sec) = group_name;
-      elf_linkonce_p (sec) = linkonce;
 
       /* Add a symbol for this section to the symbol table.  */
       secsym = symbol_find (name);
@@ -776,8 +781,8 @@ obj_elf_change_section (name, type, attr, entsize, group_name, linkonce, push)
       if (((old_sec->flags ^ flags)
           & (SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_CODE
              | SEC_EXCLUDE | SEC_SORT_ENTRIES | SEC_MERGE | SEC_STRINGS
-             | SEC_THREAD_LOCAL))
-         || linkonce != elf_linkonce_p (sec))
+             | SEC_LINK_ONCE | SEC_LINK_DUPLICATES_DISCARD
+             | SEC_THREAD_LOCAL)))
        as_warn (_("ignoring changed section attributes for %s"), name);
       if ((flags & SEC_MERGE) && old_sec->entsize != (unsigned) entsize)
        as_warn (_("ignoring changed section entity size for %s"), name);
@@ -844,10 +849,7 @@ obj_elf_parse_section_letters (str, len)
              attr |= md_attr;
            else
 #endif
-             {
-               as_warn ("%s", bad_msg);
-               attr = -1;
-             }
+             as_fatal ("%s", bad_msg);
          }
          break;
        }
@@ -868,6 +870,8 @@ obj_elf_section_word (str, len)
     return SHF_ALLOC;
   if (len == 9 && strncmp (str, "execinstr", 9) == 0)
     return SHF_EXECINSTR;
+  if (len == 3 && strncmp (str, "tls", 3) == 0)
+    return SHF_TLS;
 
 #ifdef md_elf_section_word
   {
@@ -937,6 +941,9 @@ obj_elf_section_name ()
       name = xmalloc (end - input_line_pointer + 1);
       memcpy (name, input_line_pointer, end - input_line_pointer);
       name[end - input_line_pointer] = '\0';
+#ifdef tc_canonicalize_section_name
+      name = tc_canonicalize_section_name (name);
+#endif
       input_line_pointer = end;
     }
   SKIP_WHITESPACE ();
@@ -1266,6 +1273,7 @@ obj_elf_symver (ignore)
     }
 
   ++input_line_pointer;
+  SKIP_WHITESPACE ();
   name = input_line_pointer;
 
   /* Temporarily include '@' in symbol names.  */
@@ -1638,6 +1646,12 @@ obj_elf_type (ignore)
   else if (strcmp (typename, "object") == 0
           || strcmp (typename, "STT_OBJECT") == 0)
     type = BSF_OBJECT;
+  else if (strcmp (typename, "tls_object") == 0
+          || strcmp (typename, "STT_TLS") == 0)
+    type = BSF_OBJECT | BSF_THREAD_LOCAL;
+  else if (strcmp (typename, "notype") == 0
+          || strcmp (typename, "STT_NOTYPE") == 0)
+    ;
 #ifdef md_elf_symbol_type
   else if ((type = md_elf_symbol_type (typename, sym, elfsym)) != -1)
     ;
@@ -2032,7 +2046,7 @@ elf_frob_file ()
 
       flags = SEC_READONLY | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_GROUP;
       for (s = list.head[i]; s != NULL; s = elf_next_in_group (s))
-       if (elf_linkonce_p (s) != ((flags & SEC_LINK_ONCE) != 0))
+       if ((s->flags ^ flags) & SEC_LINK_ONCE)
          {
            flags |= SEC_LINK_ONCE | SEC_LINK_DUPLICATES_DISCARD;
            if (s != list.head[i])
This page took 0.024053 seconds and 4 git commands to generate.