winnt.c (exports_head): New static variable.
* i386/winnt.c (exports_head): New static variable. (i386_pe_record_exported_symbol): New function. (i386_pe_asm_file_end): Use. * i386/cygwin.h (ASM_OUTPUT_COMMON): Record the exported symbols to be emitted at end of assembly. (ASM_DECLARE_OBJECT_NAME): Likewise. (ASM_DECLARE_FUNCTION_NAME): Likewise. From-SVN: r27639
This commit is contained in:
parent
6000b42b21
commit
e43f9c1092
3 changed files with 43 additions and 19 deletions
|
@ -1,5 +1,13 @@
|
|||
Mon Jun 21 05:33:15 1999 Mumit Khan <khan@xraylith.wisc.edu>
|
||||
|
||||
* i386/winnt.c (exports_head): New static variable.
|
||||
(i386_pe_record_exported_symbol): New function.
|
||||
(i386_pe_asm_file_end): Use.
|
||||
* i386/cygwin.h (ASM_OUTPUT_COMMON): Record the exported
|
||||
symbols to be emitted at end of assembly.
|
||||
(ASM_DECLARE_OBJECT_NAME): Likewise.
|
||||
(ASM_DECLARE_FUNCTION_NAME): Likewise.
|
||||
|
||||
* i386/uwin.h (CPP_SPEC): Use -idirafter instead -iprefix and
|
||||
-iwithprefix.
|
||||
|
||||
|
|
|
@ -326,11 +326,7 @@ do { \
|
|||
#define ASM_OUTPUT_COMMON(STREAM, NAME, SIZE, ROUNDED) \
|
||||
do { \
|
||||
if (i386_pe_dllexport_name_p (NAME)) \
|
||||
{ \
|
||||
drectve_section (); \
|
||||
fprintf ((STREAM), "\t.ascii \" -export:%s\"\n", \
|
||||
I386_PE_STRIP_ENCODING (NAME)); \
|
||||
} \
|
||||
i386_pe_record_exported_symbol (NAME); \
|
||||
if (! i386_pe_dllimport_name_p (NAME)) \
|
||||
{ \
|
||||
fprintf ((STREAM), "\t.comm\t"); \
|
||||
|
@ -345,13 +341,7 @@ do { \
|
|||
#define ASM_DECLARE_OBJECT_NAME(STREAM, NAME, DECL) \
|
||||
do { \
|
||||
if (i386_pe_dllexport_name_p (NAME)) \
|
||||
{ \
|
||||
enum in_section save_section = in_section; \
|
||||
drectve_section (); \
|
||||
fprintf ((STREAM), "\t.ascii \" -export:%s\"\n", \
|
||||
I386_PE_STRIP_ENCODING (NAME)); \
|
||||
switch_to_section (save_section, (DECL)); \
|
||||
} \
|
||||
i386_pe_record_exported_symbol (NAME); \
|
||||
ASM_OUTPUT_LABEL ((STREAM), (NAME)); \
|
||||
} while (0)
|
||||
|
||||
|
@ -447,12 +437,7 @@ do { \
|
|||
do \
|
||||
{ \
|
||||
if (i386_pe_dllexport_name_p (NAME)) \
|
||||
{ \
|
||||
drectve_section (); \
|
||||
fprintf ((FILE), "\t.ascii \" -export:%s\"\n", \
|
||||
I386_PE_STRIP_ENCODING (NAME)); \
|
||||
function_section (DECL); \
|
||||
} \
|
||||
i386_pe_record_exported_symbol (NAME); \
|
||||
if (write_symbols != SDB_DEBUG) \
|
||||
i386_pe_declare_function_type (FILE, NAME, TREE_PUBLIC (DECL)); \
|
||||
ASM_OUTPUT_LABEL (FILE, NAME); \
|
||||
|
@ -518,6 +503,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_asm_file_end STDIO_PROTO((FILE *));
|
||||
|
||||
/* For Win32 ABI compatibility */
|
||||
|
|
|
@ -545,8 +545,29 @@ i386_pe_record_external_function (name)
|
|||
extern_head = p;
|
||||
}
|
||||
|
||||
static struct extern_list *exports_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,
|
||||
but that causes problems with GNU ld when the sections are
|
||||
linkonce. */
|
||||
|
||||
void
|
||||
i386_pe_record_exported_symbol (name)
|
||||
char *name;
|
||||
{
|
||||
struct extern_list *p;
|
||||
|
||||
p = (struct extern_list *) permalloc (sizeof *p);
|
||||
p->next = exports_head;
|
||||
p->name = name;
|
||||
exports_head = p;
|
||||
}
|
||||
|
||||
/* This is called at the end of assembly. For each external function
|
||||
which has not been defined, we output a declaration now. */
|
||||
which has not been defined, we output a declaration now. We also
|
||||
output the .drectve section. */
|
||||
|
||||
void
|
||||
i386_pe_asm_file_end (file)
|
||||
|
@ -567,4 +588,13 @@ i386_pe_asm_file_end (file)
|
|||
i386_pe_declare_function_type (file, p->name, TREE_PUBLIC (decl));
|
||||
}
|
||||
}
|
||||
|
||||
if (exports_head)
|
||||
drectve_section ();
|
||||
for (p = exports_head; p != NULL; p = p->next)
|
||||
{
|
||||
fprintf (file, "\t.ascii \" -export:%s\"\n",
|
||||
I386_PE_STRIP_ENCODING (p->name));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue