utils.c, [...]: Add support for pragma Thread_Local_Storage
authorTristan Gingold <gingold@adacore.com>
Wed, 8 Apr 2009 13:46:35 +0000 (13:46 +0000)
committerArnaud Charlet <charlet@gcc.gnu.org>
Wed, 8 Apr 2009 13:46:35 +0000 (15:46 +0200)
2009-04-08  Tristan Gingold  <gingold@adacore.com>

* gcc-interface/utils.c, gcc-interface/decl.c, gcc-interface/gigi.h:
Add support for pragma Thread_Local_Storage

From-SVN: r145730

gcc/ada/ChangeLog
gcc/ada/gcc-interface/decl.c
gcc/ada/gcc-interface/gigi.h
gcc/ada/gcc-interface/utils.c

index 0231903067f469933c2ba53eab183ff7bf8d17cc..c73aa0a349782ada8d3d43e1bcf3b96bd820aff1 100644 (file)
@@ -1,3 +1,8 @@
+2009-04-08  Tristan Gingold  <gingold@adacore.com>
+
+       * gcc-interface/utils.c, gcc-interface/decl.c, gcc-interface/gigi.h:
+       Add support for pragma Thread_Local_Storage
+       
 2009-04-08  Ed Schonberg  <schonberg@adacore.com>
 
        * inline.adb (Back_End_Cannot_Inline): Do not mark a body as inlineable
index 5984027e96498d5cf2ff07c84e27783419be13f4..291bc2bcc52d2a3257167656ed9bc2c4c636bf02 100644 (file)
@@ -5435,6 +5435,10 @@ prepend_attributes (Entity_Id gnat_entity, struct attrib ** attr_list)
            etype = ATTR_WEAK_EXTERNAL;
            break;
 
+         case Pragma_Thread_Local_Storage:
+           etype = ATTR_THREAD_LOCAL_STORAGE;
+           break;
+
          default:
            continue;
          }
index ffd1767c12daa70bb13a634f28fd8db70620c214..42b5d17dad490f4726d5448a0305191c7e778d69 100644 (file)
@@ -345,6 +345,7 @@ enum attr_type
   ATTR_LINK_SECTION,
   ATTR_LINK_CONSTRUCTOR,
   ATTR_LINK_DESTRUCTOR,
+  ATTR_THREAD_LOCAL_STORAGE,
   ATTR_WEAK_EXTERNAL
 };
 
index 78080b1909c430c4f347c453a9fcf8b817f37437..62ffb1b1b31a08b79c4cd04cc422a521ee62e91a 100644 (file)
@@ -1631,6 +1631,14 @@ process_attributes (tree decl, struct attrib *attr_list)
        DECL_STATIC_DESTRUCTOR (decl) = 1;
        TREE_USED (decl) = 1;
        break;
+
+      case ATTR_THREAD_LOCAL_STORAGE:
+       if (targetm.have_tls)
+         DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
+       else
+         post_error ("thread-local storage not supported for this target",
+                     attr_list->error_point);
+       break;
       }
 }
 \f