* defparse.y (opt_equal_name): allow "." in name.

* dlltool.c (def_exports): Added ability to generate forwarded exports.
(gen_exp_file): Likewise.
This commit is contained in:
Christopher Faylor 2001-03-14 02:56:45 +00:00
parent 120aa76a7f
commit 04847a4d3e
3 changed files with 41 additions and 7 deletions

View file

@ -1,3 +1,9 @@
2001-03-13 Eric Kohl <ekohl@rz-online.de>
* defparse.y (opt_equal_name): allow "." in name.
* dlltool.c (def_exports): Added ability to generate forwarded exports.
(gen_exp_file): Likewise.
2001-03-12 Stefan Geuken <mail@stefan-geuken.de>
* NEWS: Document addition of -B switch to objcopy.

View file

@ -149,6 +149,12 @@ opt_ordinal:
opt_equal_name:
'=' ID { $$ = $2; }
| '=' ID '.' ID
{
char *name = xmalloc (strlen ($2) + 1 + strlen ($4) + 1);
sprintf (name, "%s.%s", $2, $4);
$$ = name;
}
| { $$ = 0; }
;

View file

@ -48,9 +48,13 @@
LIBRARY <name> [ , <base> ]
The result is going to be <name>.DLL
EXPORTS ( <name1> [ = <name2> ] [ @ <integer> ] [ NONAME ] [CONSTANT] [DATA] ) *
EXPORTS ( ( ( <name1> [ = <name2> ] )
| ( <name1> = <module-name> . <external-name>))
[ @ <integer> ] [ NONAME ] [CONSTANT] [DATA] ) *
Declares name1 as an exported symbol from the
DLL, with optional ordinal number <integer>
DLL, with optional ordinal number <integer>.
Or declares name1 as an alias (forward) of the function <external-name>
in the DLL <module-name>.
IMPORTS ( ( <internal-name> = <module-name> . <integer> )
| ( [ <internal-name> = ] <module-name> . <external-name> )) *
@ -636,6 +640,7 @@ typedef struct export
int noname;
int data;
int hint;
int forward; /* number of forward label, 0 means no forward */
struct export *next;
}
export_type;
@ -848,6 +853,7 @@ static export_type *d_exports; /*list of exported functions */
static export_type **d_exports_lexically; /* vector of exported functions in alpha order */
static dlist_type *d_list; /* Descriptions */
static dlist_type *a_list; /* Stuff to go in directives */
static int d_nforwards = 0; /* Number of forwarded exports */
static int d_is_dll;
static int d_is_exe;
@ -882,6 +888,12 @@ def_exports (name, internal_name, ordinal, noname, constant, data)
p->next = d_exports;
d_exports = p;
d_nfuncs++;
if ((internal_name != NULL)
&& (strchr (internal_name, '.') != NULL))
p->forward = ++d_nforwards;
else
p->forward = 0; /* no forward */
}
void
@ -1819,9 +1831,14 @@ gen_exp_file ()
i++;
}
}
fprintf (f, "\t%s%s%s%s\t%s %d\n", ASM_RVA_BEFORE,
ASM_PREFIX,
exp->internal_name, ASM_RVA_AFTER, ASM_C, exp->ordinal);
if (exp->forward == 0)
fprintf (f, "\t%s%s%s%s\t%s %d\n", ASM_RVA_BEFORE,
ASM_PREFIX,
exp->internal_name, ASM_RVA_AFTER, ASM_C, exp->ordinal);
else
fprintf (f, "\t%sf%d%s\t%s %d\n", ASM_RVA_BEFORE,
exp->forward, ASM_RVA_AFTER, ASM_C, exp->ordinal);
i++;
}
@ -1846,8 +1863,13 @@ gen_exp_file ()
fprintf(f,"%s Export Name Table\n", ASM_C);
for (i = 0; (exp = d_exports_lexically[i]); i++)
if (!exp->noname || show_allnames)
fprintf (f, "n%d: %s \"%s\"\n",
exp->ordinal, ASM_TEXT, exp->name);
{
fprintf (f, "n%d: %s \"%s\"\n",
exp->ordinal, ASM_TEXT, exp->name);
if (exp->forward != 0)
fprintf (f, "f%d: %s \"%s\"\n",
exp->forward, ASM_TEXT, exp->internal_name);
}
if (a_list)
{