From 593d3a34f82af7473a00711fdb1dc6af780888b5 Mon Sep 17 00:00:00 2001 From: Mumit Khan Date: Tue, 14 Sep 1999 10:06:06 +0000 Subject: [PATCH] winnt.c (i386_pe_valid_decl_attribute_p): Recognize shared as a valid attribute. * i386/winnt.c (i386_pe_valid_decl_attribute_p): Recognize shared as a valid attribute. * i386/cygwin.h (ASM_OUTPUT_SECTION): Handle shared attribute. * extend.texi: Document `shared' variable attribute. From-SVN: r29404 --- gcc/ChangeLog | 7 +++++++ gcc/config/i386/cygwin.h | 9 ++++++++- gcc/config/i386/winnt.c | 2 ++ gcc/extend.texi | 26 ++++++++++++++++++++++++++ 4 files changed, 43 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9e0f1f7e3b7..6a6f65824e0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +Tue Sep 14 04:03:44 1999 Mumit Khan + + * i386/winnt.c (i386_pe_valid_decl_attribute_p): Recognize + shared as a valid attribute. + * i386/cygwin.h (ASM_OUTPUT_SECTION): Handle shared attribute. + * extend.texi: Document `shared' variable attribute. + Tue Sep 14 04:01:46 1999 Loren Rittle * configure.in: Handle --enable-threads on FreeBSD. diff --git a/gcc/config/i386/cygwin.h b/gcc/config/i386/cygwin.h index a6e967f1525..023f4b0221b 100644 --- a/gcc/config/i386/cygwin.h +++ b/gcc/config/i386/cygwin.h @@ -405,7 +405,14 @@ do { \ else if (DECL && DECL_READONLY_SECTION (DECL, RELOC)) \ type = SECT_RO, mode = ""; \ else \ - type = SECT_RW, mode = "w"; \ + { \ + type = SECT_RW; \ + if (TREE_CODE (DECL) == VAR_DECL \ + && lookup_attribute ("shared", DECL_MACHINE_ATTRIBUTES (DECL))) \ + mode = "ws"; \ + else \ + mode = "w"; \ + } \ \ if (s == 0) \ { \ diff --git a/gcc/config/i386/winnt.c b/gcc/config/i386/winnt.c index bda9311a42a..2c2ce763359 100644 --- a/gcc/config/i386/winnt.c +++ b/gcc/config/i386/winnt.c @@ -56,6 +56,8 @@ i386_pe_valid_decl_attribute_p (decl, attributes, attr, args) return 1; if (is_attribute_p ("dllimport", attr)) return 1; + if (is_attribute_p ("shared", attr)) + return TREE_CODE (decl) == VAR_DECL; } return ix86_valid_decl_attribute_p (decl, attributes, attr, args); diff --git a/gcc/extend.texi b/gcc/extend.texi index 5b5f3b116c6..4ec451d3373 100644 --- a/gcc/extend.texi +++ b/gcc/extend.texi @@ -2015,6 +2015,32 @@ attribute is not available on all platforms. If you need to map the entire contents of a module to a particular section, consider using the facilities of the linker instead. +@item shared +@cindex @code{shared} variable attribute +On Windows NT, in addition to nputting variable definitions in a named +section, the section can also be shared among all running copies of an +executable or DLL. For example, this small program defines shared data +by putting it in a named section "shared" and marking the section +shareable: + +@smallexample +int foo __attribute__((section ("shared"), shared)) = 0; + +int +main() +@{ + /* Read and write foo. All running copies see the same value. */ + return 0; +@} +@end smallexample + +@noindent +You may only use the @code{shared} attribute along with @code{section} +attribute with a fully initialized global definition because of the way +linkers work. See @code{section} attribute for more information. + +The @code{shared} attribute is only available on Windows NT. + @item transparent_union This attribute, attached to a function parameter which is a union, means that the corresponding argument may have the type of any union member,