From: Nick Clifton <nickc@cygnus.com>
To: binutils@sourceware.cygnus.com
Subject: Fixes to dlltool
Date: Fri, 22 Oct 1999 08:54:00 -0000 [thread overview]
Message-ID: <199910221554.QAA13123@pathia.cygnus.co.uk> (raw)
Hi Guys,
I have applied the patch below to dlltool. It fixes a bug whereby
if the --machine command line switch was used to select a target
other than the default target, the tool would still create output
files in the default target format.
The patch also adds an extra field to the mac structure to allow
target machine formats to specify default switches to be passed to
the assembler when creating files for that format. This is then
used by the little endian mcore target to pass the -EL switch on to
the asembler and by the thumb target to pass on
-mthumb-interworking. These switches can still be overridden by the
--as-flags command line switch, if necessary.
Cheers
Nick
1999-10-22 Nick Clifton <nickc@cygnus.com>
* dlltool.c (struct mac): Add new field 'how_default_as_switches'.
(mtable): Initialise new field. Some machines have a non empty
string for this field.
(HOW_BFD_TARGET): Undefine and replace with...
(HOW_BFD_READ_TARGET): New macro: bfd target to use when opening a
file for reading. This is set to 0 so that any recognisable bfd
format can be read.
(HOW_BFD_WRITE_TARGET): New macro: bfd target to use when opening
a file for writing. This is set to the target machine type.
(ASM_SWITCHES): New macro: default switches to use when assembling
a file.
(assemble_file): New function: Assemble a source file into a
destination object file.
(gen_exp_file): Use assemble_file to create the exp file.
(make_one_lib_file): Use assemble_file to create the lib file.
Open output file use HOW_BFD_WRITE_TARGET and input files using
HOW_BFD_READ_TARGET.
(make_head): Use assemble_file to create the head file.
(make_tail): Use assemble_file to create the tail file.
(gen_lib_file): Open output file use HOW_BFD_WRITE_TARGET.
Index: dlltool.c
===================================================================
RCS file: /cvs/binutils/binutils/binutils/dlltool.c,v
retrieving revision 1.12
diff -p -r1.12 dlltool.c
*** dlltool.c 1999/09/28 20:08:37 1.12
--- dlltool.c 1999/10/22 15:42:07
*************** struct mac
*** 497,502 ****
--- 497,503 ----
const char *how_space;
const char *how_align_short;
const char *how_align_long;
+ const char *how_default_as_switches;
const char *how_bfd_target;
enum bfd_architecture how_bfd_arch;
const unsigned char *how_jtab;
*************** mtable[] =
*** 511,537 ****
#define MARM 0
"arm", ".byte", ".short", ".long", ".asciz", "@",
"ldr\tip,[pc]\n\tldr\tpc,[ip]\n\t.long",
! ".global", ".space", ".align\t2",".align\t4","pe-arm-little", bfd_arch_arm,
arm_jtab, sizeof (arm_jtab), 8
}
,
{
#define M386 1
! "i386", ".byte", ".short", ".long", ".asciz", "#", "jmp *", ".global", ".space", ".align\t2",".align\t4","pe-i386",bfd_arch_i386,
! i386_jtab, sizeof (i386_jtab), 2
}
,
{
#define MPPC 2
! "ppc", ".byte", ".short", ".long", ".asciz", "#", "jmp *", ".global", ".space", ".align\t2",".align\t4","pe-powerpcle",bfd_arch_powerpc,
! ppc_jtab, sizeof (ppc_jtab), 0
}
,
{
#define MTHUMB 3
"thumb", ".byte", ".short", ".long", ".asciz", "@",
"push\t{r6}\n\tldr\tr6, [pc, #8]\n\tldr\tr6, [r6]\n\tmov\tip, r6\n\tpop\t{r6}\n\tbx\tip",
! ".global", ".space", ".align\t2",".align\t4","pe-arm-little", bfd_arch_arm,
thumb_jtab, sizeof (thumb_jtab), 12
}
,
--- 512,544 ----
#define MARM 0
"arm", ".byte", ".short", ".long", ".asciz", "@",
"ldr\tip,[pc]\n\tldr\tpc,[ip]\n\t.long",
! ".global", ".space", ".align\t2",".align\t4", "",
! "pe-arm-little", bfd_arch_arm,
arm_jtab, sizeof (arm_jtab), 8
}
,
{
#define M386 1
! "i386", ".byte", ".short", ".long", ".asciz", "#",
! "jmp *", ".global", ".space", ".align\t2",".align\t4", "",
! "pe-i386",bfd_arch_i386,
! i386_jtab, sizeof (i386_jtab), 2
}
,
{
#define MPPC 2
! "ppc", ".byte", ".short", ".long", ".asciz", "#",
! "jmp *", ".global", ".space", ".align\t2",".align\t4", "",
! "pe-powerpcle",bfd_arch_powerpc,
! ppc_jtab, sizeof (ppc_jtab), 0
}
,
{
#define MTHUMB 3
"thumb", ".byte", ".short", ".long", ".asciz", "@",
"push\t{r6}\n\tldr\tr6, [pc, #8]\n\tldr\tr6, [r6]\n\tmov\tip, r6\n\tpop\t{r6}\n\tbx\tip",
! ".global", ".space", ".align\t2",".align\t4", "=mthumb-interwork",
! "pe-arm-little", bfd_arch_arm,
thumb_jtab, sizeof (thumb_jtab), 12
}
,
*************** mtable[] =
*** 539,545 ****
{
"arm_interwork", ".byte", ".short", ".long", ".asciz", "@",
"ldr\tip,[pc]\n\tldr\tip,[ip]\n\tbx\tip\n\t.long",
! ".global", ".space", ".align\t2",".align\t4","pe-arm-little", bfd_arch_arm,
arm_interwork_jtab, sizeof (arm_interwork_jtab), 12
}
,
--- 546,553 ----
{
"arm_interwork", ".byte", ".short", ".long", ".asciz", "@",
"ldr\tip,[pc]\n\tldr\tip,[ip]\n\tbx\tip\n\t.long",
! ".global", ".space", ".align\t2",".align\t4", "-mthumb-interwork",
! "pe-arm-little", bfd_arch_arm,
arm_interwork_jtab, sizeof (arm_interwork_jtab), 12
}
,
*************** mtable[] =
*** 547,553 ****
#define MMCORE_BE 5
"mcore", ".byte", ".short", ".long", ".asciz", "//",
"jmpi\t1\n\tnop\n\t.long",
! ".global", ".space", ".align\t2",".align\t4","pe-mcore-big", bfd_arch_mcore,
mcore_be_jtab, sizeof (mcore_be_jtab), 8
}
,
--- 555,562 ----
#define MMCORE_BE 5
"mcore", ".byte", ".short", ".long", ".asciz", "//",
"jmpi\t1\n\tnop\n\t.long",
! ".global", ".space", ".align\t2",".align\t4", "",
! "pe-mcore-big", bfd_arch_mcore,
mcore_be_jtab, sizeof (mcore_be_jtab), 8
}
,
*************** mtable[] =
*** 555,561 ****
#define MMCORE_LE 6
"mcore-le", ".byte", ".short", ".long", ".asciz", "//",
"jmpi\t1\n\tnop\n\t.long",
! ".global", ".space", ".align\t2",".align\t4","pe-mcore-little", bfd_arch_mcore,
mcore_le_jtab, sizeof (mcore_le_jtab), 8
}
,
--- 564,571 ----
#define MMCORE_LE 6
"mcore-le", ".byte", ".short", ".long", ".asciz", "//",
"jmpi\t1\n\tnop\n\t.long",
! ".global", ".space", ".align\t2",".align\t4", "-EL",
! "pe-mcore-little", bfd_arch_mcore,
mcore_le_jtab, sizeof (mcore_le_jtab), 8
}
,
*************** mtable[] =
*** 563,569 ****
#define MMCORE_ELF 7
"mcore-elf", ".byte", ".short", ".long", ".asciz", "//",
"jmpi\t1\n\tnop\n\t.long",
! ".global", ".space", ".align\t2",".align\t4","elf32-mcore-big", bfd_arch_mcore,
mcore_be_jtab, sizeof (mcore_be_jtab), 8
}
,
--- 573,580 ----
#define MMCORE_ELF 7
"mcore-elf", ".byte", ".short", ".long", ".asciz", "//",
"jmpi\t1\n\tnop\n\t.long",
! ".global", ".space", ".align\t2",".align\t4", "",
! "elf32-mcore-big", bfd_arch_mcore,
mcore_be_jtab, sizeof (mcore_be_jtab), 8
}
,
*************** mtable[] =
*** 571,581 ****
#define MMCORE_ELF_LE 8
"mcore-elf-le", ".byte", ".short", ".long", ".asciz", "//",
"jmpi\t1\n\tnop\n\t.long",
! ".global", ".space", ".align\t2",".align\t4","elf32-mcore-little", bfd_arch_mcore,
mcore_le_jtab, sizeof (mcore_le_jtab), 8
}
,
! { 0}
};
typedef struct dlist
--- 582,593 ----
#define MMCORE_ELF_LE 8
"mcore-elf-le", ".byte", ".short", ".long", ".asciz", "//",
"jmpi\t1\n\tnop\n\t.long",
! ".global", ".space", ".align\t2",".align\t4", "-EL",
! "elf32-mcore-little", bfd_arch_mcore,
mcore_le_jtab, sizeof (mcore_le_jtab), 8
}
,
! { 0 }
};
typedef struct dlist
*************** asm_prefix (machine)
*** 798,808 ****
#define ASM_RVA_AFTER rvaafter(machine)
#define ASM_PREFIX asm_prefix(machine)
#define ASM_ALIGN_LONG mtable[machine].how_align_long
! #define HOW_BFD_TARGET 0 /* always default*/
#define HOW_BFD_ARCH mtable[machine].how_bfd_arch
#define HOW_JTAB mtable[machine].how_jtab
#define HOW_JTAB_SIZE mtable[machine].how_jtab_size
#define HOW_JTAB_ROFF mtable[machine].how_jtab_roff
static char **oav;
void
--- 810,823 ----
#define ASM_RVA_AFTER rvaafter(machine)
#define ASM_PREFIX asm_prefix(machine)
#define ASM_ALIGN_LONG mtable[machine].how_align_long
! #define HOW_BFD_READ_TARGET 0 /* always default*/
! #define HOW_BFD_WRITE_TARGET mtable[machine].how_bfd_target
#define HOW_BFD_ARCH mtable[machine].how_bfd_arch
#define HOW_JTAB mtable[machine].how_jtab
#define HOW_JTAB_SIZE mtable[machine].how_jtab_size
#define HOW_JTAB_ROFF mtable[machine].how_jtab_roff
+ #define ASM_SWITCHES mtable[machine].how_default_as_switches
+
static char **oav;
void
*************** generate_idata_ofile (filvar)
*** 1716,1729 ****
}
}
static void
gen_exp_file ()
{
FILE *f;
int i;
export_type *exp;
dlist_type *dl;
- char *cmd;
/* xgettext:c-format */
inform (_("Generating export file: %s\n"), exp_name);
--- 1731,1760 ----
}
}
+ /* Assemble the specified file. */
static void
+ assemble_file (source, dest)
+ const char * source;
+ const char * dest;
+ {
+ char * cmd;
+
+ cmd = (char *) alloca (strlen (ASM_SWITCHES) + strlen (as_flags)
+ + strlen (exp_name) + strlen (source)
+ + strlen (dest) + 50);
+
+ sprintf (cmd, "%s %s -o %s %s", ASM_SWITCHES, as_flags, dest, source);
+
+ run (as_name, cmd);
+ }
+
+ static void
gen_exp_file ()
{
FILE *f;
int i;
export_type *exp;
dlist_type *dl;
/* xgettext:c-format */
inform (_("Generating export file: %s\n"), exp_name);
*************** gen_exp_file ()
*** 1941,1957 ****
fclose (f);
/* assemble the file */
! cmd = (char *) alloca (strlen (as_flags) + strlen (exp_name)
! + sizeof TMP_ASM + 50);
! sprintf (cmd, "%s -o %s %s", as_flags, exp_name, TMP_ASM);
!
! #ifdef DLLTOOL_ARM
! if (machine == MARM_INTERWORK || machine == MTHUMB)
! strcat (cmd, " -mthumb-interwork");
! #endif
- run (as_name, cmd);
-
if (dontdeltemps == 0)
unlink (TMP_ASM);
--- 1972,1979 ----
fclose (f);
/* assemble the file */
! assemble_file (TMP_ASM, exp_name);
if (dontdeltemps == 0)
unlink (TMP_ASM);
*************** make_one_lib_file (exp, i)
*** 2134,2140 ****
char *name;
FILE *f;
const char *prefix = "d";
! char *cmd;
name = (char *) alloca (strlen (prefix) + 10);
sprintf (name, "%ss%05d.s", prefix, i);
--- 2156,2162 ----
char *name;
FILE *f;
const char *prefix = "d";
! char *dest;
name = (char *) alloca (strlen (prefix) + 10);
sprintf (name, "%ss%05d.s", prefix, i);
*************** make_one_lib_file (exp, i)
*** 2172,2188 ****
}
fclose (f);
-
- cmd = (char *) alloca (strlen (as_flags) + 2 * strlen (prefix) + 50);
- sprintf (cmd, "%s -o %ss%05d.o %ss%d.s",
- as_flags, prefix, i, prefix, i);
! #ifdef DLLTOOL_ARM
! if (machine == MARM_INTERWORK || machine == MTHUMB)
! strcat (cmd, " -mthumb-interwork");
! #endif
!
! run (as_name, cmd);
}
#else /* if 0 */
{
--- 2194,2203 ----
}
fclose (f);
! dest = (char *) alloca (strlen (prefix) + 10);
! sprintf (dest, "%ss%05d.o", prefix, i);
! assemble_file (name, dest);
}
#else /* if 0 */
{
*************** make_one_lib_file (exp, i)
*** 2209,2215 ****
sprintf (outname, "%s%05d.o", TMP_STUB, i);
! abfd = bfd_openw (outname, HOW_BFD_TARGET);
if (!abfd)
/* xgettext:c-format */
--- 2224,2230 ----
sprintf (outname, "%s%05d.o", TMP_STUB, i);
! abfd = bfd_openw (outname, HOW_BFD_WRITE_TARGET);
if (!abfd)
/* xgettext:c-format */
*************** make_one_lib_file (exp, i)
*** 2586,2592 ****
bfd_set_symtab (abfd, ptrs, oidx);
bfd_close (abfd);
! abfd = bfd_openr (outname, HOW_BFD_TARGET);
return abfd;
}
#endif
--- 2601,2607 ----
bfd_set_symtab (abfd, ptrs, oidx);
bfd_close (abfd);
! abfd = bfd_openr (outname, HOW_BFD_READ_TARGET);
return abfd;
}
#endif
*************** static bfd *
*** 2596,2602 ****
make_head ()
{
FILE *f = fopen (TMP_HEAD_S, FOPEN_WT);
- char *cmd;
if (f == NULL)
{
--- 2611,2616 ----
*************** make_head ()
*** 2647,2671 ****
fclose (f);
! cmd = (char *) alloca (strlen (as_flags) + sizeof TMP_HEAD_O
! + sizeof TMP_HEAD_S + 50);
! sprintf (cmd, "%s -o %s %s", as_flags, TMP_HEAD_O, TMP_HEAD_S);
!
! #ifdef DLLTOOL_ARM
! if (machine == MARM_INTERWORK || machine == MTHUMB)
! strcat (cmd, " -mthumb-interwork");
! #endif
!
! run (as_name, cmd);
! return bfd_openr (TMP_HEAD_O, HOW_BFD_TARGET);
}
static bfd *
make_tail ()
{
FILE *f = fopen (TMP_TAIL_S, FOPEN_WT);
- char *cmd;
if (f == NULL)
{
--- 2661,2675 ----
fclose (f);
! assemble_file (TMP_HEAD_S, TMP_HEAD_O);
! return bfd_openr (TMP_HEAD_O, HOW_BFD_READ_TARGET);
}
static bfd *
make_tail ()
{
FILE *f = fopen (TMP_TAIL_S, FOPEN_WT);
if (f == NULL)
{
*************** make_tail ()
*** 2716,2733 ****
fclose (f);
! cmd = (char *) alloca (strlen (as_flags) + sizeof TMP_TAIL_O
! + sizeof TMP_TAIL_S + 50);
! sprintf (cmd, "%s -o %s %s", as_flags, TMP_TAIL_O, TMP_TAIL_S);
!
! #ifdef DLLTOOL_ARM
! if (machine == MARM_INTERWORK || machine == MTHUMB)
! strcat (cmd, " -mthumb-interwork");
! #endif
!
! run (as_name, cmd);
! return bfd_openr (TMP_TAIL_O, HOW_BFD_TARGET);
}
static void
--- 2720,2728 ----
fclose (f);
! assemble_file (TMP_TAIL_S, TMP_TAIL_O);
! return bfd_openr (TMP_TAIL_O, HOW_BFD_READ_TARGET);
}
static void
*************** gen_lib_file ()
*** 2742,2748 ****
unlink (imp_name);
! outarch = bfd_openw (imp_name, HOW_BFD_TARGET);
if (!outarch)
/* xgettext:c-format */
--- 2737,2743 ----
unlink (imp_name);
! outarch = bfd_openw (imp_name, HOW_BFD_WRITE_TARGET);
if (!outarch)
/* xgettext:c-format */
reply other threads:[~1999-10-22 8:54 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=199910221554.QAA13123@pathia.cygnus.co.uk \
--to=nickc@cygnus.com \
--cc=binutils@sourceware.cygnus.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).