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
This commit is contained in:
parent
46346e0ea5
commit
593d3a34f8
|
@ -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.
|
||||
|
|
|
@ -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) \
|
||||
{ \
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Reference in New Issue