mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2025-01-19 07:24:48 +00:00
2009-11-05 Kai Tietz <kai.tietz@onevision.com>
* dllwrap.c (is_leading_underscore): New variable. (cpu_type): New enum type. (which_cpu): New variable. (usage): Add new options --no-leading-underscore and --leading-underscore. (long_options): Likewise. (OPTION_NO_LEADING_UNDERSCORE): New define. (OPTION_LEADING_UNDERSCORE): Likewise. (main): Initialize which_host, pass new options to dlltool, do underscoring dependent on is_leading_underscore, and do '@12' decoration only for x86.
This commit is contained in:
parent
594c8e5ede
commit
fa0d16bebf
@ -1,3 +1,18 @@
|
||||
2009-11-05 Kai Tietz <kai.tietz@onevision.com>
|
||||
|
||||
* dllwrap.c (is_leading_underscore): New variable.
|
||||
(cpu_type): New enum type.
|
||||
(which_cpu): New variable.
|
||||
(usage): Add new options --no-leading-underscore
|
||||
and --leading-underscore.
|
||||
(long_options): Likewise.
|
||||
(OPTION_NO_LEADING_UNDERSCORE): New define.
|
||||
(OPTION_LEADING_UNDERSCORE): Likewise.
|
||||
(main): Initialize which_host, pass new options
|
||||
to dlltool, do underscoring dependent on
|
||||
is_leading_underscore, and do '@12' decoration
|
||||
only for x86.
|
||||
|
||||
2009-11-02 Paul Brook <paul@codesourcery.com>
|
||||
|
||||
* readelf.c (arm_attr_tag_VFP_arch): Add VFPv4 and VFPv4-D16.
|
||||
|
@ -81,6 +81,9 @@ static char *dlltool_name = NULL;
|
||||
|
||||
static char *target = TARGET;
|
||||
|
||||
/* -1: use default, 0: no underscoring, 1: underscore. */
|
||||
static int is_leading_underscore = -1;
|
||||
|
||||
typedef enum {
|
||||
UNKNOWN_TARGET,
|
||||
CYGWIN_TARGET,
|
||||
@ -88,7 +91,16 @@ typedef enum {
|
||||
}
|
||||
target_type;
|
||||
|
||||
typedef enum {
|
||||
UNKNOWN_CPU,
|
||||
X86_CPU,
|
||||
X64_CPU,
|
||||
ARM_CPU
|
||||
}
|
||||
target_cpu;
|
||||
|
||||
static target_type which_target = UNKNOWN_TARGET;
|
||||
static target_cpu which_cpu = UNKNOWN_CPU;
|
||||
|
||||
static int dontdeltemps = 0;
|
||||
static int dry_run = 0;
|
||||
@ -504,6 +516,8 @@ usage (FILE *file, int status)
|
||||
fprintf (file, _(" --add-stdcall-alias Add aliases without @<n>\n"));
|
||||
fprintf (file, _(" --as <name> Use <name> for assembler\n"));
|
||||
fprintf (file, _(" --nodelete Keep temp files.\n"));
|
||||
fprintf (file, _(" --no-leading-underscore Entrypoint without underscore\n"));
|
||||
fprintf (file, _(" --leading-underscore Entrypoint with underscore.\n"));
|
||||
fprintf (file, _(" Rest are passed unmodified to the language driver\n"));
|
||||
fprintf (file, "\n\n");
|
||||
if (REPORT_BUGS_TO[0] && status == 0)
|
||||
@ -527,9 +541,11 @@ usage (FILE *file, int status)
|
||||
#define OPTION_IMAGE_BASE (OPTION_ENTRY + 1)
|
||||
#define OPTION_TARGET (OPTION_IMAGE_BASE + 1)
|
||||
#define OPTION_MNO_CYGWIN (OPTION_TARGET + 1)
|
||||
#define OPTION_NO_LEADING_UNDERSCORE (OPTION_MNO_CYGWIN + 1)
|
||||
#define OPTION_LEADING_UNDERSCORE (OPTION_NO_LEADING_UNDERSCORE + 1)
|
||||
|
||||
/* DLLTOOL options. */
|
||||
#define OPTION_NODELETE (OPTION_MNO_CYGWIN + 1)
|
||||
#define OPTION_NODELETE (OPTION_LEADING_UNDERSCORE + 1)
|
||||
#define OPTION_DLLNAME (OPTION_NODELETE + 1)
|
||||
#define OPTION_NO_IDATA4 (OPTION_DLLNAME + 1)
|
||||
#define OPTION_NO_IDATA5 (OPTION_NO_IDATA4 + 1)
|
||||
@ -565,6 +581,8 @@ static const struct option long_options[] =
|
||||
{"entry", required_argument, NULL, 'e'},
|
||||
{"image-base", required_argument, NULL, OPTION_IMAGE_BASE},
|
||||
{"target", required_argument, NULL, OPTION_TARGET},
|
||||
{"no-leading-underscore", no_argument, NULL, OPTION_NO_LEADING_UNDERSCORE},
|
||||
{"leading-underscore", no_argument, NULL, OPTION_NO_LEADING_UNDERSCORE},
|
||||
|
||||
/* dlltool options. */
|
||||
{"no-delete", no_argument, NULL, 'n'},
|
||||
@ -728,6 +746,12 @@ main (int argc, char **argv)
|
||||
case OPTION_MNO_CYGWIN:
|
||||
target = "i386-mingw32";
|
||||
break;
|
||||
case OPTION_NO_LEADING_UNDERSCORE:
|
||||
is_leading_underscore = 0;
|
||||
break;
|
||||
case OPTION_LEADING_UNDERSCORE:
|
||||
is_leading_underscore = 1;
|
||||
break;
|
||||
case OPTION_BASE_FILE:
|
||||
base_file_name = optarg;
|
||||
delete_base_file = 0;
|
||||
@ -819,6 +843,18 @@ Creating one, but that may not be what you want"));
|
||||
else
|
||||
which_target = UNKNOWN_TARGET;
|
||||
|
||||
if (! strncmp (target, "arm", 3))
|
||||
which_cpu = ARM_CPU;
|
||||
else if (!strncmp (target, "x86_64", 6)
|
||||
|| !strncmp (target, "athlon64", 8)
|
||||
|| !strncmp (target, "amd64", 5))
|
||||
which_cpu = X64_CPU;
|
||||
else if (target[0] == 'i' && (target[1] >= '3' && target[1] <= '6')
|
||||
&& target[2] == '8' && target[3] == '6')
|
||||
which_cpu = X86_CPU;
|
||||
else
|
||||
which_cpu = UNKNOWN_CPU;
|
||||
|
||||
/* Re-create the command lines as a string, taking care to quote stuff. */
|
||||
dlltool_cmdline = dyn_string_new (cmdline_len);
|
||||
if (verbose)
|
||||
@ -863,22 +899,38 @@ Creating one, but that may not be what you want"));
|
||||
dyn_string_append_cstr (driver_cmdline, " -o ");
|
||||
dyn_string_append_cstr (driver_cmdline, dll_file_name);
|
||||
|
||||
if (is_leading_underscore == 0)
|
||||
dyn_string_append_cstr (driver_cmdline, " --no-leading-underscore");
|
||||
else if (is_leading_underscore == 1)
|
||||
dyn_string_append_cstr (driver_cmdline, " --leading-underscore");
|
||||
|
||||
if (! entry_point || strlen (entry_point) == 0)
|
||||
{
|
||||
const char *prefix = (is_leading_underscore != 0 ? "_" : "");
|
||||
const char *postfix = "";
|
||||
const char *name_entry;
|
||||
|
||||
if (which_cpu == X86_CPU || which_cpu == UNKNOWN_CPU)
|
||||
postfix = "@12";
|
||||
|
||||
switch (which_target)
|
||||
{
|
||||
case CYGWIN_TARGET:
|
||||
entry_point = "__cygwin_dll_entry@12";
|
||||
name_entry = "_cygwin_dll_entry";
|
||||
break;
|
||||
|
||||
case MINGW_TARGET:
|
||||
entry_point = "_DllMainCRTStartup@12";
|
||||
name_entry = "DllMainCRTStartup";
|
||||
break;
|
||||
|
||||
default:
|
||||
entry_point = "_DllMain@12";
|
||||
name_entry = "DllMain";
|
||||
break;
|
||||
}
|
||||
entry_point =
|
||||
(char *) malloc (strlen (name_entry) + strlen (prefix)
|
||||
+ strlen (postfix) + 1);
|
||||
sprintf (entry_point, "%s%s%s", prefix, name_entry, postfix);
|
||||
}
|
||||
dyn_string_append_cstr (driver_cmdline, " -Wl,-e,");
|
||||
dyn_string_append_cstr (driver_cmdline, entry_point);
|
||||
|
Loading…
x
Reference in New Issue
Block a user