Sat Aug 28 17:16:08 1999  Mumit Khan  <khan@xraylith.wisc.edu>

	* i386/winnt.c (export_list): New type.
	(exports_head): Rename to
	(export_head):  this.
	(i386_pe_record_exported_symbol): Add is_data flag.
	(i386_pe_asm_file_end): Emit directive for exported variables.
	* i386/cygwin.h (i386_pe_record_exported_symbol): Update
	prototype.
	* i386/cygwin.h (ASM_OUTPUT_COMMON): Specify symbol type.
	(ASM_DECLARE_OBJECT_NAME): Likewise.
	(ASM_DECLARE_FUNCTION_NAME): Likewise.
	* i386/uwin.h (ASM_DECLARE_FUNCTION_NAME): Likewise.

Index: gcc-2.95.2/gcc/config/i386/cygwin.h
===================================================================
RCS file: /homes/khan/src/CVSROOT/gcc-2.95.2/gcc/config/i386/cygwin.h,v
retrieving revision 1.4
diff -u -3 -p -r1.4 cygwin.h
--- gcc-2.95.2/gcc/config/i386/cygwin.h	1999/11/05 08:13:18	1.4
+++ gcc-2.95.2/gcc/config/i386/cygwin.h	1999/11/05 08:20:18
@@ -326,7 +326,7 @@ do {									\
 #define ASM_OUTPUT_COMMON(STREAM, NAME, SIZE, ROUNDED)	\
 do {							\
   if (i386_pe_dllexport_name_p (NAME))			\
-    i386_pe_record_exported_symbol (NAME);		\
+    i386_pe_record_exported_symbol (NAME, 1);		\
   if (! i386_pe_dllimport_name_p (NAME))		\
     {							\
       fprintf ((STREAM), "\t.comm\t"); 			\
@@ -341,7 +341,7 @@ do {							\
 #define ASM_DECLARE_OBJECT_NAME(STREAM, NAME, DECL) 	\
 do {							\
   if (i386_pe_dllexport_name_p (NAME))			\
-    i386_pe_record_exported_symbol (NAME);		\
+    i386_pe_record_exported_symbol (NAME, 1);		\
   ASM_OUTPUT_LABEL ((STREAM), (NAME));			\
 } while (0)
 
@@ -444,7 +444,7 @@ do {									\
   do									\
     {									\
       if (i386_pe_dllexport_name_p (NAME))				\
-	i386_pe_record_exported_symbol (NAME);				\
+	i386_pe_record_exported_symbol (NAME, 0);			\
       if (write_symbols != SDB_DEBUG)					\
 	i386_pe_declare_function_type (FILE, NAME, TREE_PUBLIC (DECL));	\
       ASM_OUTPUT_LABEL (FILE, NAME);					\
@@ -515,7 +515,7 @@ do {									\
 
 extern void i386_pe_record_external_function PROTO((char *));
 extern void i386_pe_declare_function_type STDIO_PROTO((FILE *, char *, int));
-extern void i386_pe_record_exported_symbol PROTO((char *));
+extern void i386_pe_record_exported_symbol PROTO((char *, int));
 extern void i386_pe_asm_file_end STDIO_PROTO((FILE *));
 
 /* For Win32 ABI compatibility */
Index: gcc-2.95.2/gcc/config/i386/uwin.h
===================================================================
RCS file: /homes/khan/src/CVSROOT/gcc-2.95.2/gcc/config/i386/uwin.h,v
retrieving revision 1.3
diff -u -3 -p -r1.3 uwin.h
--- gcc-2.95.2/gcc/config/i386/uwin.h	1999/11/05 08:19:24	1.3
+++ gcc-2.95.2/gcc/config/i386/uwin.h	1999/11/05 08:20:18
@@ -79,7 +79,7 @@ Boston, MA 02111-1307, USA. */
   do									\
     {									\
       if (i386_pe_dllexport_name_p (NAME))				\
-	i386_pe_record_exported_symbol (NAME);				\
+	i386_pe_record_exported_symbol (NAME, 0);			\
       /* UWIN binutils bug workaround. */				\
       if (0 && write_symbols != SDB_DEBUG)				\
 	i386_pe_declare_function_type (FILE, NAME, TREE_PUBLIC (DECL));	\
Index: gcc-2.95.2/gcc/config/i386/winnt.c
===================================================================
RCS file: /homes/khan/src/CVSROOT/gcc-2.95.2/gcc/config/i386/winnt.c,v
retrieving revision 1.3
diff -u -3 -p -r1.3 winnt.c
--- gcc-2.95.2/gcc/config/i386/winnt.c	1999/11/05 08:13:18	1.3
+++ gcc-2.95.2/gcc/config/i386/winnt.c	1999/11/05 08:20:18
@@ -561,8 +561,17 @@ i386_pe_record_external_function (name)
   extern_head = p;
 }
 
-static struct extern_list *exports_head;
+/* Keep a list of exported symbols.  */
 
+struct export_list
+{
+  struct export_list *next;
+  char *name;
+  int is_data;		/* used to type tag exported symbols. */
+};
+
+static struct export_list *export_head;
+
 /* Assemble an export symbol entry.  We need to keep a list of
    these, so that we can output the export list at the end of the
    assembly.  We used to output these export symbols in each function,
@@ -570,15 +579,17 @@ static struct extern_list *exports_head;
    linkonce.  */
 
 void
-i386_pe_record_exported_symbol (name)
+i386_pe_record_exported_symbol (name, is_data)
      char *name;
+     int is_data;
 {
-  struct extern_list *p;
+  struct export_list *p;
 
-  p = (struct extern_list *) permalloc (sizeof *p);
-  p->next = exports_head;
+  p = (struct export_list *) permalloc (sizeof *p);
+  p->next = export_head;
   p->name = name;
-  exports_head = p;
+  p->is_data = is_data;
+  export_head = p;
 }
 
 /* This is called at the end of assembly.  For each external function
@@ -605,12 +616,16 @@ i386_pe_asm_file_end (file)
 	}
     }
 
-  if (exports_head)
-    drectve_section ();
-  for (p = exports_head; p != NULL; p = p->next)
+  if (export_head)
     {
-      fprintf (file, "\t.ascii \" -export:%s\"\n",
-               I386_PE_STRIP_ENCODING (p->name));
+      struct export_list *q;
+      drectve_section ();
+      for (q = export_head; q != NULL; q = q->next)
+	{
+	  fprintf (file, "\t.ascii \" -export:%s%s\"\n",
+		   I386_PE_STRIP_ENCODING (q->name),
+		   (q->is_data) ? ",data" : "");
+	}
     }
 }
 
