Mumit Khan <khan@xraylith.wisc.edu>
authorMumit Khan <khan@xraylith.wisc.edu>
Sat, 28 Aug 1999 22:58:42 +0000 (22:58 +0000)
committerRichard Henderson <rth@gcc.gnu.org>
Sat, 28 Aug 1999 22:58:42 +0000 (15:58 -0700)
        * 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.

From-SVN: r28944

gcc/ChangeLog
gcc/config/i386/cygwin.h
gcc/config/i386/uwin.h
gcc/config/i386/winnt.c

index 283fce6796e43e3e3100ecf8811e228f99e30c76..29cd896aa3bc214446b3b9c5ac68627819549fce 100644 (file)
@@ -1,3 +1,17 @@
+Sat Aug 28 15:58:16 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.
+
 Fri Aug 27 15:35:24 1999  Jeffrey A Law  (law@cygnus.com)
 
        * cse.c (fold_rtx): Work around bug in Sun V5.0 compilers.
index d34a963eacccbeccfe6f60ab71939feeb32286c2..f19ea50d3f99030230c9fe3595102eaa7382c859 100644 (file)
@@ -327,7 +327,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");                         \
@@ -342,7 +342,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)
 
@@ -438,7 +438,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);                                   \
@@ -509,7 +509,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 29a3f982dd4edf6ad20ffe2db47b43aa061efb19..84604fb9b00e09ac064d0c0b601190157b2da171 100644 (file)
@@ -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 de66f4ed0551acf8da7a11906da6c287d57adaad..90cae270a88d4b8f85dde6400c0563b33af9b4a0 100644 (file)
@@ -546,7 +546,16 @@ 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
@@ -555,15 +564,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
@@ -590,12 +601,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" : "");
+       }
     }
 }