#include <varargs.h>
#endif
+#include <assert.h>
+
#ifdef DLLTOOL_ARM
#include "coff/arm.h"
#include "coff/internal.h"
#define DRECTVE_SECTION_NAME ".drectve"
#endif
-#define PATHMAX 250 /* What's the right name for this ? */
+/* What's the right name for this ? */
+#define PATHMAX 250
+
+/* External name alias numbering starts here. */
+#define PREFIX_ALIAS_BASE 20000
char *tmp_asm_buf;
char *tmp_head_s_buf;
{
const char *name;
const char *internal_name;
+ const char *import_name;
int ordinal;
int constant;
int noname; /* Don't put name in image file. */
p->name = name;
p->internal_name = internal_name ? internal_name : name;
+ p->import_name = name;
p->ordinal = ordinal;
p->constant = constant;
p->noname = noname;
asymbol * exp_label;
asymbol * iname = 0;
asymbol * iname2;
- asymbol * iname2_pre = 0;
asymbol * iname_lab;
asymbol ** iname_lab_pp;
asymbol ** iname_pp;
bfd_coff_set_symbol_class (abfd, exp_label, C_THUMBEXTFUNC);
#endif
ptrs[oidx++] = exp_label;
-
- if (ext_prefix_alias)
- {
- asymbol * exp_label_pre;
-
- exp_label_pre = bfd_make_empty_symbol (abfd);
- exp_label_pre->name
- = make_imp_label (ext_prefix_alias, exp->name);
- exp_label_pre->section = exp_label->section;
- exp_label_pre->flags = exp_label->flags;
- exp_label_pre->value = exp_label->value;
-#ifdef DLLTOOL_ARM
- if (machine == MTHUMB)
- bfd_coff_set_symbol_class (abfd, exp_label, C_THUMBEXTFUNC);
-#endif
- ptrs[oidx++] = exp_label_pre;
- }
}
/* Generate imp symbols with one underscore for Microsoft
iname2->flags = BSF_GLOBAL;
iname2->value = 0;
- if (ext_prefix_alias)
- {
- char *pre_name;
-
- iname2_pre = bfd_make_empty_symbol (abfd);
- pre_name = xmalloc (strlen (ext_prefix_alias) + 7);
- sprintf(pre_name, "__imp_%s", ext_prefix_alias);
- iname2_pre->name = make_imp_label (pre_name, exp->name);
- iname2_pre->section = iname2->section;
- iname2_pre->flags = iname2->flags;
- iname2_pre->value = iname2->value;
- }
-
iname_lab = bfd_make_empty_symbol (abfd);
iname_lab->name = head_label;
if (create_compat_implib)
ptrs[oidx++] = iname;
ptrs[oidx++] = iname2;
- if (ext_prefix_alias)
- ptrs[oidx++] = iname2_pre;
iname_lab_pp = ptrs + oidx;
ptrs[oidx++] = iname_lab;
why it did that, and it does not match what I see
in programs compiled with the MS tools. */
int idx = exp->hint;
- si->size = strlen (xlate (exp->name)) + 3;
+ si->size = strlen (xlate (exp->import_name)) + 3;
si->data = xmalloc (si->size);
si->data[0] = idx & 0xff;
si->data[1] = idx >> 8;
- strcpy (si->data + 2, xlate (exp->name));
+ strcpy (si->data + 2, xlate (exp->import_name));
}
break;
case IDATA7:
n = make_one_lib_file (exp, i);
n->next = head;
head = n;
+ if (ext_prefix_alias)
+ {
+ export_type alias_exp;
+
+ assert (i < PREFIX_ALIAS_BASE);
+ alias_exp.name = make_imp_label (ext_prefix_alias, exp->name);
+ alias_exp.internal_name = exp->internal_name;
+ alias_exp.import_name = exp->name;
+ alias_exp.ordinal = exp->ordinal;
+ alias_exp.constant = exp->constant;
+ alias_exp.noname = exp->noname;
+ alias_exp.private = exp->private;
+ alias_exp.data = exp->data;
+ alias_exp.hint = exp->hint;
+ alias_exp.forward = exp->forward;
+ alias_exp.next = exp->next;
+ n = make_one_lib_file (&alias_exp, i + PREFIX_ALIAS_BASE);
+ n->next = head;
+ head = n;
+ }
}
/* Now stick them all into the archive. */
if (unlink (name) < 0)
/* xgettext:c-format */
non_fatal (_("cannot delete %s: %s"), name, strerror (errno));
+ if (ext_prefix_alias)
+ {
+ sprintf (name, "%s%05d.o", TMP_STUB, i + PREFIX_ALIAS_BASE);
+ if (unlink (name) < 0)
+ /* xgettext:c-format */
+ non_fatal (_("cannot delete %s: %s"), name, strerror (errno));
+ }
}
}