/* dllwrap.c -- wrapper for DLLTOOL and GCC to generate PE style DLLs
- Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2009,
- 2011 Free Software Foundation, Inc.
+ Copyright (C) 1998-2023 Free Software Foundation, Inc.
Contributed by Mumit Khan (khan@xraylith.wisc.edu).
This file is part of GNU Binutils.
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
02110-1301, USA. */
-/* AIX requires this to be the first thing in the file. */
-#ifndef __GNUC__
-# ifdef _AIX
- #pragma alloca
-#endif
-#endif
-
#include "sysdep.h"
#include "bfd.h"
#include "libiberty.h"
#include "bucomm.h"
#include <time.h>
-#include <sys/stat.h>
#ifdef HAVE_SYS_WAIT_H
#include <sys/wait.h>
static void
-inform VPARAMS ((const char *message, ...))
+inform (const char *message, ...)
{
- VA_OPEN (args, message);
- VA_FIXEDARG (args, const char *, message);
+ va_list args;
+
+ va_start (args, message);
if (!verbose)
return;
display (message, args);
- VA_CLOSE (args);
+ va_end (args);
}
static void
-warn VPARAMS ((const char *format, ...))
+warn (const char *format, ...)
{
- VA_OPEN (args, format);
- VA_FIXEDARG (args, const char *, format);
+ va_list args;
+
+ va_start (args, format);
display (format, args);
- VA_CLOSE (args);
+ va_end (args);
}
/* Look for the program formed by concatenating PROG_NAME and the
int pid, wait_status, retcode;
int i;
const char **argv;
- char *errmsg_fmt, *errmsg_arg;
- char *temp_base = choose_temp_base ();
+ char *errmsg_fmt = NULL, *errmsg_arg = NULL;
+ char *temp_base = make_temp_file (NULL);
int in_quote;
char sep;
if (*s == ' ')
i++;
i++;
- argv = alloca (sizeof (char *) * (i + 3));
+ argv = xmalloc (sizeof (char *) * (i + 3));
i = 0;
argv[i++] = what;
s = args;
pid = pexecute (argv[0], (char * const *) argv, prog_name, temp_base,
&errmsg_fmt, &errmsg_arg, PEXECUTE_ONE | PEXECUTE_SEARCH);
+ free (argv);
if (pid == -1)
{
{
fprintf (file, _("Usage %s <option(s)> <object-file(s)>\n"), prog_name);
fprintf (file, _(" Generic options:\n"));
- fprintf (file, _(" @<file> Read options from <file>\n"));
+ fprintf (file, _(" @<file> Read options from <file>\n"));
fprintf (file, _(" --quiet, -q Work quietly\n"));
fprintf (file, _(" --verbose, -v Verbose\n"));
fprintf (file, _(" --version Print dllwrap version\n"));
prog_name = argv[0];
-#if defined (HAVE_SETLOCALE) && defined (HAVE_LC_MESSAGES)
+#ifdef HAVE_LC_MESSAGES
setlocale (LC_MESSAGES, "");
#endif
-#if defined (HAVE_SETLOCALE)
setlocale (LC_CTYPE, "");
-#endif
bindtextdomain (PACKAGE, LOCALEDIR);
textdomain (PACKAGE);
+ warn (_("WARNING: %s is deprecated, use gcc -shared or ld -shared instead\n"),
+ prog_name);
+
expandargv (&argc, &argv);
saved_argv = (char **) xmalloc (argc * sizeof (char*));
if (! def_file_seen)
{
- char *fileprefix = choose_temp_base ();
+ char *fileprefix = make_temp_file (NULL);
def_file_name = (char *) xmalloc (strlen (fileprefix) + 5);
sprintf (def_file_name, "%s.def",
else
which_target = UNKNOWN_TARGET;
- if (! strncmp (target, "arm", 3))
+ if (startswith (target, "arm"))
which_cpu = ARM_CPU;
- else if (!strncmp (target, "x86_64", 6)
- || !strncmp (target, "athlon64", 8)
- || !strncmp (target, "amd64", 5))
+ else if (startswith (target, "x86_64")
+ || startswith (target, "athlon64")
+ || startswith (target, "amd64"))
which_cpu = X64_CPU;
else if (target[0] == 'i' && (target[1] >= '3' && target[1] <= '6')
&& target[2] == '8' && target[3] == '6')
/* Step 1. Call GCC/LD to create base relocation file. If using GCC, the
driver command line will look like the following:
-
+
% gcc -Wl,--dll --Wl,--base-file,foo.base [rest of command line]
-
+
If the user does not specify a base name, create temporary one that
is deleted at exit. */
if (! base_file_name)
{
- char *fileprefix = choose_temp_base ();
+ char *fileprefix = make_temp_file (NULL);
base_file_name = (char *) xmalloc (strlen (fileprefix) + 6);
sprintf (base_file_name, "%s.base",
(dontdeltemps) ? mybasename (fileprefix) : fileprefix);
/* Step 2. generate the exp file by running dlltool.
dlltool command line will look like the following:
-
+
% dlltool -Wl,--dll --Wl,--base-file,foo.base [rest of command line]
-
+
If the user does not specify a base name, create temporary one that
is deleted at exit. */