* dllwrap.c: Replace 'program_name' with 'prog_name' to avoid conflicts with
exported global defined in bucomm.h. (deduce_name): Rename parameter 'program_name' to 'name' to avoid shadowing the global defined in bucomm.h.
This commit is contained in:
parent
982de27abe
commit
61513dc1cb
|
@ -1,3 +1,10 @@
|
||||||
|
2004-07-13 Nick Clifton <nickc@redhat.com>
|
||||||
|
|
||||||
|
* dllwrap.c: Replace 'program_name' with 'prog_name' to avoid
|
||||||
|
conflicts with exported global defined in bucomm.h.
|
||||||
|
(deduce_name): Rename parameter 'program_name' to 'name' to avoid
|
||||||
|
shadowing the global defined in bucomm.h.
|
||||||
|
|
||||||
2004-07-12 Aaron W. LaFramboise <aaron98wiridge9@aaronwl.com>
|
2004-07-12 Aaron W. LaFramboise <aaron98wiridge9@aaronwl.com>
|
||||||
|
|
||||||
* dlltool.c (ext_prefix_alias): New global variable.
|
* dlltool.c (ext_prefix_alias): New global variable.
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* dllwrap.c -- wrapper for DLLTOOL and GCC to generate PE style DLLs
|
/* dllwrap.c -- wrapper for DLLTOOL and GCC to generate PE style DLLs
|
||||||
Copyright 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
|
Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
|
||||||
Contributed by Mumit Khan (khan@xraylith.wisc.edu).
|
Contributed by Mumit Khan (khan@xraylith.wisc.edu).
|
||||||
|
|
||||||
This file is part of GNU Binutils.
|
This file is part of GNU Binutils.
|
||||||
|
@ -101,7 +101,7 @@ static target_type which_target = UNKNOWN_TARGET;
|
||||||
static int dontdeltemps = 0;
|
static int dontdeltemps = 0;
|
||||||
static int dry_run = 0;
|
static int dry_run = 0;
|
||||||
|
|
||||||
static char *program_name;
|
static char *prog_name;
|
||||||
|
|
||||||
static int verbose = 0;
|
static int verbose = 0;
|
||||||
|
|
||||||
|
@ -139,8 +139,8 @@ static void cleanup_and_exit (int);
|
||||||
static void
|
static void
|
||||||
display (const char * message, va_list args)
|
display (const char * message, va_list args)
|
||||||
{
|
{
|
||||||
if (program_name != NULL)
|
if (prog_name != NULL)
|
||||||
fprintf (stderr, "%s: ", program_name);
|
fprintf (stderr, "%s: ", prog_name);
|
||||||
|
|
||||||
vfprintf (stderr, message, args);
|
vfprintf (stderr, message, args);
|
||||||
fputc ('\n', stderr);
|
fputc ('\n', stderr);
|
||||||
|
@ -244,17 +244,20 @@ look_for_prog (const char *prog_name, const char *prefix, int end_prefix)
|
||||||
Returns a dynamically allocated string. */
|
Returns a dynamically allocated string. */
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
deduce_name (const char *prog_name)
|
deduce_name (const char * name)
|
||||||
{
|
{
|
||||||
char *cmd;
|
char *cmd;
|
||||||
char *dash, *slash, *cp;
|
const char *dash;
|
||||||
|
const char *slash;
|
||||||
|
const char *cp;
|
||||||
|
|
||||||
dash = NULL;
|
dash = NULL;
|
||||||
slash = NULL;
|
slash = NULL;
|
||||||
for (cp = program_name; *cp != '\0'; ++cp)
|
for (cp = name; *cp != '\0'; ++cp)
|
||||||
{
|
{
|
||||||
if (*cp == '-')
|
if (*cp == '-')
|
||||||
dash = cp;
|
dash = cp;
|
||||||
|
|
||||||
if (
|
if (
|
||||||
#if defined(__DJGPP__) || defined (__CYGWIN__) || defined(__WIN32__)
|
#if defined(__DJGPP__) || defined (__CYGWIN__) || defined(__WIN32__)
|
||||||
*cp == ':' || *cp == '\\' ||
|
*cp == ':' || *cp == '\\' ||
|
||||||
|
@ -269,24 +272,18 @@ deduce_name (const char *prog_name)
|
||||||
cmd = NULL;
|
cmd = NULL;
|
||||||
|
|
||||||
if (dash != NULL)
|
if (dash != NULL)
|
||||||
{
|
/* First, try looking for a prefixed PROG_NAME in the
|
||||||
/* First, try looking for a prefixed PROG_NAME in the
|
PROGRAM_NAME directory, with the same prefix as PROGRAM_NAME. */
|
||||||
PROGRAM_NAME directory, with the same prefix as PROGRAM_NAME. */
|
cmd = look_for_prog (name, name, dash - name + 1);
|
||||||
cmd = look_for_prog (prog_name, program_name, dash - program_name + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (slash != NULL && cmd == NULL)
|
if (slash != NULL && cmd == NULL)
|
||||||
{
|
/* Next, try looking for a PROG_NAME in the same directory as
|
||||||
/* Next, try looking for a PROG_NAME in the same directory as
|
that of this program. */
|
||||||
that of this program. */
|
cmd = look_for_prog (name, name, slash - name + 1);
|
||||||
cmd = look_for_prog (prog_name, program_name, slash - program_name + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cmd == NULL)
|
if (cmd == NULL)
|
||||||
{
|
/* Just return PROG_NAME as is. */
|
||||||
/* Just return PROG_NAME as is. */
|
cmd = xstrdup (name);
|
||||||
cmd = xstrdup (prog_name);
|
|
||||||
}
|
|
||||||
|
|
||||||
return cmd;
|
return cmd;
|
||||||
}
|
}
|
||||||
|
@ -396,14 +393,14 @@ run (const char *what, char *args)
|
||||||
if (dry_run)
|
if (dry_run)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
pid = pexecute (argv[0], (char * const *) argv, program_name, temp_base,
|
pid = pexecute (argv[0], (char * const *) argv, prog_name, temp_base,
|
||||||
&errmsg_fmt, &errmsg_arg, PEXECUTE_ONE | PEXECUTE_SEARCH);
|
&errmsg_fmt, &errmsg_arg, PEXECUTE_ONE | PEXECUTE_SEARCH);
|
||||||
|
|
||||||
if (pid == -1)
|
if (pid == -1)
|
||||||
{
|
{
|
||||||
int errno_val = errno;
|
int errno_val = errno;
|
||||||
|
|
||||||
fprintf (stderr, "%s: ", program_name);
|
fprintf (stderr, "%s: ", prog_name);
|
||||||
fprintf (stderr, errmsg_fmt, errmsg_arg);
|
fprintf (stderr, errmsg_fmt, errmsg_arg);
|
||||||
fprintf (stderr, ": %s\n", strerror (errno_val));
|
fprintf (stderr, ": %s\n", strerror (errno_val));
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -479,13 +476,13 @@ strhash (const char *str)
|
||||||
static void
|
static void
|
||||||
usage (FILE *file, int status)
|
usage (FILE *file, int status)
|
||||||
{
|
{
|
||||||
fprintf (file, _("Usage %s <option(s)> <object-file(s)>\n"), program_name);
|
fprintf (file, _("Usage %s <option(s)> <object-file(s)>\n"), prog_name);
|
||||||
fprintf (file, _(" Generic options:\n"));
|
fprintf (file, _(" Generic options:\n"));
|
||||||
fprintf (file, _(" --quiet, -q Work quietly\n"));
|
fprintf (file, _(" --quiet, -q Work quietly\n"));
|
||||||
fprintf (file, _(" --verbose, -v Verbose\n"));
|
fprintf (file, _(" --verbose, -v Verbose\n"));
|
||||||
fprintf (file, _(" --version Print dllwrap version\n"));
|
fprintf (file, _(" --version Print dllwrap version\n"));
|
||||||
fprintf (file, _(" --implib <outname> Synonym for --output-lib\n"));
|
fprintf (file, _(" --implib <outname> Synonym for --output-lib\n"));
|
||||||
fprintf (file, _(" Options for %s:\n"), program_name);
|
fprintf (file, _(" Options for %s:\n"), prog_name);
|
||||||
fprintf (file, _(" --driver-name <driver> Defaults to \"gcc\"\n"));
|
fprintf (file, _(" --driver-name <driver> Defaults to \"gcc\"\n"));
|
||||||
fprintf (file, _(" --driver-flags <flags> Override default ld flags\n"));
|
fprintf (file, _(" --driver-flags <flags> Override default ld flags\n"));
|
||||||
fprintf (file, _(" --dlltool-name <dlltool> Defaults to \"dlltool\"\n"));
|
fprintf (file, _(" --dlltool-name <dlltool> Defaults to \"dlltool\"\n"));
|
||||||
|
@ -624,7 +621,7 @@ main (int argc, char **argv)
|
||||||
|
|
||||||
char *image_base_str = 0;
|
char *image_base_str = 0;
|
||||||
|
|
||||||
program_name = argv[0];
|
prog_name = argv[0];
|
||||||
|
|
||||||
#if defined (HAVE_SETLOCALE) && defined (HAVE_LC_MESSAGES)
|
#if defined (HAVE_SETLOCALE) && defined (HAVE_LC_MESSAGES)
|
||||||
setlocale (LC_MESSAGES, "");
|
setlocale (LC_MESSAGES, "");
|
||||||
|
@ -688,7 +685,7 @@ main (int argc, char **argv)
|
||||||
verbose = 1;
|
verbose = 1;
|
||||||
break;
|
break;
|
||||||
case OPTION_VERSION:
|
case OPTION_VERSION:
|
||||||
print_version (program_name);
|
print_version (prog_name);
|
||||||
break;
|
break;
|
||||||
case 'e':
|
case 'e':
|
||||||
entry_point = optarg;
|
entry_point = optarg;
|
||||||
|
@ -781,7 +778,7 @@ main (int argc, char **argv)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* sanity checks. */
|
/* Sanity checks. */
|
||||||
if (! dll_name && ! dll_file_name)
|
if (! dll_name && ! dll_file_name)
|
||||||
{
|
{
|
||||||
warn (_("Must provide at least one of -o or --dllname options"));
|
warn (_("Must provide at least one of -o or --dllname options"));
|
||||||
|
@ -806,6 +803,7 @@ main (int argc, char **argv)
|
||||||
if (! def_file_seen)
|
if (! def_file_seen)
|
||||||
{
|
{
|
||||||
char *fileprefix = choose_temp_base ();
|
char *fileprefix = choose_temp_base ();
|
||||||
|
|
||||||
def_file_name = (char *) xmalloc (strlen (fileprefix) + 5);
|
def_file_name = (char *) xmalloc (strlen (fileprefix) + 5);
|
||||||
sprintf (def_file_name, "%s.def",
|
sprintf (def_file_name, "%s.def",
|
||||||
(dontdeltemps) ? mybasename (fileprefix) : fileprefix);
|
(dontdeltemps) ? mybasename (fileprefix) : fileprefix);
|
||||||
|
@ -816,7 +814,7 @@ main (int argc, char **argv)
|
||||||
Creating one, but that may not be what you want"));
|
Creating one, but that may not be what you want"));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* set the target platform. */
|
/* Set the target platform. */
|
||||||
if (strstr (target, "cygwin"))
|
if (strstr (target, "cygwin"))
|
||||||
which_target = CYGWIN_TARGET;
|
which_target = CYGWIN_TARGET;
|
||||||
else if (strstr (target, "mingw"))
|
else if (strstr (target, "mingw"))
|
||||||
|
@ -824,12 +822,11 @@ Creating one, but that may not be what you want"));
|
||||||
else
|
else
|
||||||
which_target = UNKNOWN_TARGET;
|
which_target = UNKNOWN_TARGET;
|
||||||
|
|
||||||
/* re-create the command lines as a string, taking care to quote stuff. */
|
/* Re-create the command lines as a string, taking care to quote stuff. */
|
||||||
dlltool_cmdline = dyn_string_new (cmdline_len);
|
dlltool_cmdline = dyn_string_new (cmdline_len);
|
||||||
if (verbose)
|
if (verbose)
|
||||||
{
|
dyn_string_append_cstr (dlltool_cmdline, " -v");
|
||||||
dyn_string_append_cstr (dlltool_cmdline, " -v");
|
|
||||||
}
|
|
||||||
dyn_string_append_cstr (dlltool_cmdline, " --dllname ");
|
dyn_string_append_cstr (dlltool_cmdline, " --dllname ");
|
||||||
dyn_string_append_cstr (dlltool_cmdline, dll_name);
|
dyn_string_append_cstr (dlltool_cmdline, dll_name);
|
||||||
|
|
||||||
|
@ -922,10 +919,8 @@ Creating one, but that may not be what you want"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/* Step pre-1. If no --def <EXPORT_DEF> is specified,
|
||||||
* Step pre-1. If no --def <EXPORT_DEF> is specified, then create it
|
then create it and then pass it on. */
|
||||||
* and then pass it on.
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (! def_file_seen)
|
if (! def_file_seen)
|
||||||
{
|
{
|
||||||
|
@ -980,16 +975,13 @@ Creating one, but that may not be what you want"));
|
||||||
fprintf (stderr, _("DRIVER options : %s\n"), driver_cmdline->s);
|
fprintf (stderr, _("DRIVER options : %s\n"), driver_cmdline->s);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/* Step 1. Call GCC/LD to create base relocation file. If using GCC, the
|
||||||
* Step 1. Call GCC/LD to create base relocation file. If using GCC, the
|
driver command line will look like the following:
|
||||||
* driver command line will look like the following:
|
|
||||||
*
|
% gcc -Wl,--dll --Wl,--base-file,foo.base [rest of command line]
|
||||||
* % 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
|
||||||
* If the user does not specify a base name, create temporary one that
|
is deleted at exit. */
|
||||||
* is deleted at exit.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (! base_file_name)
|
if (! base_file_name)
|
||||||
{
|
{
|
||||||
|
@ -1027,23 +1019,19 @@ Creating one, but that may not be what you want"));
|
||||||
dyn_string_delete (step1);
|
dyn_string_delete (step1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Step 2. generate the exp file by running dlltool.
|
||||||
|
dlltool command line will look like the following:
|
||||||
/*
|
|
||||||
* Step 2. generate the exp file by running dlltool.
|
% dlltool -Wl,--dll --Wl,--base-file,foo.base [rest of command line]
|
||||||
* dlltool command line will look like the following:
|
|
||||||
*
|
If the user does not specify a base name, create temporary one that
|
||||||
* % dlltool -Wl,--dll --Wl,--base-file,foo.base [rest of command line]
|
is deleted at exit. */
|
||||||
*
|
|
||||||
* If the user does not specify a base name, create temporary one that
|
|
||||||
* is deleted at exit.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (! exp_file_name)
|
if (! exp_file_name)
|
||||||
{
|
{
|
||||||
char *p = strrchr (dll_name, '.');
|
char *p = strrchr (dll_name, '.');
|
||||||
size_t prefix_len = (p) ? p - dll_name : strlen (dll_name);
|
size_t prefix_len = (p) ? (size_t) (p - dll_name) : strlen (dll_name);
|
||||||
|
|
||||||
exp_file_name = (char *) xmalloc (prefix_len + 4 + 1);
|
exp_file_name = (char *) xmalloc (prefix_len + 4 + 1);
|
||||||
strncpy (exp_file_name, dll_name, prefix_len);
|
strncpy (exp_file_name, dll_name, prefix_len);
|
||||||
exp_file_name[prefix_len] = '\0';
|
exp_file_name[prefix_len] = '\0';
|
||||||
|
@ -1053,6 +1041,7 @@ Creating one, but that may not be what you want"));
|
||||||
|
|
||||||
{
|
{
|
||||||
int quote;
|
int quote;
|
||||||
|
|
||||||
dyn_string_t step2 = dyn_string_new (dlltool_cmdline->length
|
dyn_string_t step2 = dyn_string_new (dlltool_cmdline->length
|
||||||
+ strlen (base_file_name)
|
+ strlen (base_file_name)
|
||||||
+ strlen (exp_file_name)
|
+ strlen (exp_file_name)
|
||||||
|
|
Loading…
Reference in New Issue