diff options
author | Christopher Faylor <me+cygwin@cgf.cx> | 2001-03-14 02:56:45 +0000 |
---|---|---|
committer | Christopher Faylor <me+cygwin@cgf.cx> | 2001-03-14 02:56:45 +0000 |
commit | 04847a4d3e1cf5c5c811f8fbbdeeca498de51dc4 (patch) | |
tree | 6771be833710d107357a8c41d08a4500c1e89211 /binutils/dlltool.c | |
parent | 120aa76a7f9e4bc20929fa7b8d81a00899c569f6 (diff) | |
download | gdb-04847a4d3e1cf5c5c811f8fbbdeeca498de51dc4.zip gdb-04847a4d3e1cf5c5c811f8fbbdeeca498de51dc4.tar.gz gdb-04847a4d3e1cf5c5c811f8fbbdeeca498de51dc4.tar.bz2 |
* defparse.y (opt_equal_name): allow "." in name.
* dlltool.c (def_exports): Added ability to generate forwarded exports.
(gen_exp_file): Likewise.
Diffstat (limited to 'binutils/dlltool.c')
-rw-r--r-- | binutils/dlltool.c | 36 |
1 files changed, 29 insertions, 7 deletions
diff --git a/binutils/dlltool.c b/binutils/dlltool.c index 9475b98..ca6199a 100644 --- a/binutils/dlltool.c +++ b/binutils/dlltool.c @@ -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) { |