aboutsummaryrefslogtreecommitdiff
path: root/binutils
diff options
context:
space:
mode:
Diffstat (limited to 'binutils')
-rw-r--r--binutils/ChangeLog5
-rw-r--r--binutils/dlltool.c20
2 files changed, 22 insertions, 3 deletions
diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index ff25db2..8e31f14 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -1,3 +1,8 @@
+2022-01-11 Martin Storsjö <martin@martin.st>
+
+ * dlltool.c (main): If a prefix has not been provided, attempt to
+ use a deterministic one based upon the dll name.
+
2022-01-07 Pavel Mayorov <pmayorov@cloudlinux.com>
PR 28718
diff --git a/binutils/dlltool.c b/binutils/dlltool.c
index 8c1ddd6..a1e2b48 100644
--- a/binutils/dlltool.c
+++ b/binutils/dlltool.c
@@ -348,7 +348,7 @@ typedef struct iheadt
static iheadtype *import_list = NULL;
static char *as_name = NULL;
static char * as_flags = "";
-static char *tmp_prefix;
+static char *tmp_prefix = NULL;
static int no_idata4;
static int no_idata5;
static char *exp_name;
@@ -3930,8 +3930,22 @@ main (int ac, char **av)
}
}
- if (!tmp_prefix)
- tmp_prefix = prefix_encode ("d", getpid ());
+ if (tmp_prefix == NULL)
+ {
+ /* If possible use a deterministic prefix. */
+ if (dll_name)
+ {
+ tmp_prefix = xmalloc (strlen (dll_name) + 2);
+ sprintf (tmp_prefix, "%s_", dll_name);
+ for (i = 0; tmp_prefix[i]; i++)
+ if (!ISALNUM (tmp_prefix[i]))
+ tmp_prefix[i] = '_';
+ }
+ else
+ {
+ tmp_prefix = prefix_encode ("d", getpid ());
+ }
+ }
for (i = 0; mtable[i].type; i++)
if (strcmp (mtable[i].type, mname) == 0)