version 1.1.1.5, 2016/10/26 17:29:51 |
version 1.1.1.6, 2018/04/14 22:17:04 |
|
|
/* dlltool.c -- tool to generate stuff for PE style DLLs |
/* dlltool.c -- tool to generate stuff for PE style DLLs |
Copyright (C) 1995-2016 Free Software Foundation, Inc. |
Copyright (C) 1995-2018 Free Software Foundation, Inc. |
|
|
This file is part of GNU Binutils. |
This file is part of GNU Binutils. |
|
|
Line 780 typedef struct export |
|
Line 780 typedef struct export |
|
int ordinal; |
int ordinal; |
int constant; |
int constant; |
int noname; /* Don't put name in image file. */ |
int noname; /* Don't put name in image file. */ |
int private; /* Don't put reference in import lib. */ |
int private; /* Don't put reference in import lib. */ |
int data; |
int data; |
int hint; |
int forward; /* Number of forward label, 0 means no forward. */ |
int forward; /* Number of forward label, 0 means no forward. */ |
|
struct export *next; |
struct export *next; |
} |
} |
export_type; |
export_type; |
Line 2708 make_one_lib_file (export_type *exp, int |
|
Line 2707 make_one_lib_file (export_type *exp, int |
|
sec->orelocation = rpp; |
sec->orelocation = rpp; |
break; |
break; |
} |
} |
/* else fall through */ |
/* Fall through. */ |
|
|
case IDATA4: |
case IDATA4: |
/* An idata$4 or idata$5 is one word long, and has an |
/* An idata$4 or idata$5 is one word long, and has an |
rva to idata$6. */ |
rva to idata$6. */ |
Line 2775 make_one_lib_file (export_type *exp, int |
|
Line 2775 make_one_lib_file (export_type *exp, int |
|
case IDATA6: |
case IDATA6: |
if (!exp->noname) |
if (!exp->noname) |
{ |
{ |
/* This used to add 1 to exp->hint. I don't know |
int idx = exp->ordinal; |
why it did that, and it does not match what I see |
|
in programs compiled with the MS tools. */ |
|
int idx = exp->hint; |
|
if (exp->its_name) |
if (exp->its_name) |
si->size = strlen (exp->its_name) + 3; |
si->size = strlen (exp->its_name) + 3; |
else |
else |
Line 3262 gen_lib_file (int delay) |
|
Line 3260 gen_lib_file (int delay) |
|
alias_exp.noname = exp->noname; |
alias_exp.noname = exp->noname; |
alias_exp.private = exp->private; |
alias_exp.private = exp->private; |
alias_exp.data = exp->data; |
alias_exp.data = exp->data; |
alias_exp.hint = exp->hint; |
|
alias_exp.forward = exp->forward; |
alias_exp.forward = exp->forward; |
alias_exp.next = exp->next; |
alias_exp.next = exp->next; |
n = make_one_lib_file (&alias_exp, i + PREFIX_ALIAS_BASE, delay); |
n = make_one_lib_file (&alias_exp, i + PREFIX_ALIAS_BASE, delay); |
Line 3926 mangle_defs (void) |
|
Line 3923 mangle_defs (void) |
|
{ |
{ |
/* First work out the minimum ordinal chosen. */ |
/* First work out the minimum ordinal chosen. */ |
export_type *exp; |
export_type *exp; |
|
|
int i; |
|
int hint = 0; |
|
export_type **d_export_vec = xmalloc (sizeof (export_type *) * d_nfuncs); |
export_type **d_export_vec = xmalloc (sizeof (export_type *) * d_nfuncs); |
|
int i; |
|
|
inform (_("Processing definitions")); |
inform (_("Processing definitions")); |
|
|
Line 3958 mangle_defs (void) |
|
Line 3953 mangle_defs (void) |
|
|
|
qsort (d_exports_lexically, i, sizeof (export_type *), nfunc); |
qsort (d_exports_lexically, i, sizeof (export_type *), nfunc); |
|
|
/* Fill exp entries with their hint values. */ |
|
for (i = 0; i < d_nfuncs; i++) |
|
if (!d_exports_lexically[i]->noname || show_allnames) |
|
d_exports_lexically[i]->hint = hint++; |
|
|
|
inform (_("Processed definitions")); |
inform (_("Processed definitions")); |
} |
} |
|
|