diff options
author | Mumit Khan <khan@xraylith.wisc.edu> | 1999-09-14 10:06:06 +0000 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 1999-09-14 04:06:06 -0600 |
commit | 593d3a34f82af7473a00711fdb1dc6af780888b5 (patch) | |
tree | 57505e7ed2d5d0654b0aca22d1aaf499047fd4d1 /gcc | |
parent | 46346e0ea5267987ca3f3f451e0fe48b04b4270e (diff) | |
download | gcc-593d3a34f82af7473a00711fdb1dc6af780888b5.zip gcc-593d3a34f82af7473a00711fdb1dc6af780888b5.tar.gz gcc-593d3a34f82af7473a00711fdb1dc6af780888b5.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/config/i386/cygwin.h | 9 | ||||
-rw-r--r-- | gcc/config/i386/winnt.c | 2 | ||||
-rw-r--r-- | gcc/extend.texi | 26 |
4 files changed, 43 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9e0f1f7..6a6f658 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +Tue Sep 14 04:03:44 1999 Mumit Khan <khan@xraylith.wisc.edu> + + * 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 <ljrittle@acm.org> * configure.in: Handle --enable-threads on FreeBSD. diff --git a/gcc/config/i386/cygwin.h b/gcc/config/i386/cygwin.h index a6e967f..023f4b0 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 bda9311..2c2ce76 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 5b5f3b1..4ec451d 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, |