Add default assembler switchhes on a per machine basis.
Use machine target type when opening output bfd files.
This commit is contained in:
parent
d9fd985254
commit
49c245078a
2 changed files with 80 additions and 62 deletions
|
@ -1,3 +1,26 @@
|
|||
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.
|
||||
|
||||
1999-10-15 Ian Lance Taylor <ian@zembu.com>
|
||||
|
||||
* ar.c (normalize): Fix full_pathname code.
|
||||
|
|
|
@ -497,6 +497,7 @@ struct mac
|
|||
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;
|
||||
|
@ -511,27 +512,33 @@ mtable[] =
|
|||
#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,
|
||||
".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
|
||||
"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
|
||||
"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,
|
||||
".global", ".space", ".align\t2",".align\t4", "=mthumb-interwork",
|
||||
"pe-arm-little", bfd_arch_arm,
|
||||
thumb_jtab, sizeof (thumb_jtab), 12
|
||||
}
|
||||
,
|
||||
|
@ -539,7 +546,8 @@ mtable[] =
|
|||
{
|
||||
"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,
|
||||
".global", ".space", ".align\t2",".align\t4", "-mthumb-interwork",
|
||||
"pe-arm-little", bfd_arch_arm,
|
||||
arm_interwork_jtab, sizeof (arm_interwork_jtab), 12
|
||||
}
|
||||
,
|
||||
|
@ -547,7 +555,8 @@ mtable[] =
|
|||
#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,
|
||||
".global", ".space", ".align\t2",".align\t4", "",
|
||||
"pe-mcore-big", bfd_arch_mcore,
|
||||
mcore_be_jtab, sizeof (mcore_be_jtab), 8
|
||||
}
|
||||
,
|
||||
|
@ -555,7 +564,8 @@ mtable[] =
|
|||
#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,
|
||||
".global", ".space", ".align\t2",".align\t4", "-EL",
|
||||
"pe-mcore-little", bfd_arch_mcore,
|
||||
mcore_le_jtab, sizeof (mcore_le_jtab), 8
|
||||
}
|
||||
,
|
||||
|
@ -563,7 +573,8 @@ mtable[] =
|
|||
#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,
|
||||
".global", ".space", ".align\t2",".align\t4", "",
|
||||
"elf32-mcore-big", bfd_arch_mcore,
|
||||
mcore_be_jtab, sizeof (mcore_be_jtab), 8
|
||||
}
|
||||
,
|
||||
|
@ -571,11 +582,12 @@ mtable[] =
|
|||
#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,
|
||||
".global", ".space", ".align\t2",".align\t4", "-EL",
|
||||
"elf32-mcore-little", bfd_arch_mcore,
|
||||
mcore_le_jtab, sizeof (mcore_le_jtab), 8
|
||||
}
|
||||
,
|
||||
{ 0}
|
||||
{ 0 }
|
||||
};
|
||||
|
||||
typedef struct dlist
|
||||
|
@ -798,11 +810,14 @@ asm_prefix (machine)
|
|||
#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_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
|
||||
|
@ -1716,6 +1731,23 @@ generate_idata_ofile (filvar)
|
|||
}
|
||||
}
|
||||
|
||||
/* 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 ()
|
||||
{
|
||||
|
@ -1723,7 +1755,6 @@ gen_exp_file ()
|
|||
int i;
|
||||
export_type *exp;
|
||||
dlist_type *dl;
|
||||
char *cmd;
|
||||
|
||||
/* xgettext:c-format */
|
||||
inform (_("Generating export file: %s\n"), exp_name);
|
||||
|
@ -1941,16 +1972,7 @@ gen_exp_file ()
|
|||
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);
|
||||
assemble_file (TMP_ASM, exp_name);
|
||||
|
||||
if (dontdeltemps == 0)
|
||||
unlink (TMP_ASM);
|
||||
|
@ -2134,7 +2156,7 @@ make_one_lib_file (exp, i)
|
|||
char *name;
|
||||
FILE *f;
|
||||
const char *prefix = "d";
|
||||
char *cmd;
|
||||
char *dest;
|
||||
|
||||
name = (char *) alloca (strlen (prefix) + 10);
|
||||
sprintf (name, "%ss%05d.s", prefix, i);
|
||||
|
@ -2173,16 +2195,9 @@ make_one_lib_file (exp, i)
|
|||
|
||||
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);
|
||||
dest = (char *) alloca (strlen (prefix) + 10);
|
||||
sprintf (dest, "%ss%05d.o", prefix, i);
|
||||
assemble_file (name, dest);
|
||||
}
|
||||
#else /* if 0 */
|
||||
{
|
||||
|
@ -2209,7 +2224,7 @@ make_one_lib_file (exp, i)
|
|||
|
||||
sprintf (outname, "%s%05d.o", TMP_STUB, i);
|
||||
|
||||
abfd = bfd_openw (outname, HOW_BFD_TARGET);
|
||||
abfd = bfd_openw (outname, HOW_BFD_WRITE_TARGET);
|
||||
|
||||
if (!abfd)
|
||||
/* xgettext:c-format */
|
||||
|
@ -2586,7 +2601,7 @@ make_one_lib_file (exp, i)
|
|||
|
||||
bfd_set_symtab (abfd, ptrs, oidx);
|
||||
bfd_close (abfd);
|
||||
abfd = bfd_openr (outname, HOW_BFD_TARGET);
|
||||
abfd = bfd_openr (outname, HOW_BFD_READ_TARGET);
|
||||
return abfd;
|
||||
}
|
||||
#endif
|
||||
|
@ -2596,7 +2611,6 @@ static bfd *
|
|||
make_head ()
|
||||
{
|
||||
FILE *f = fopen (TMP_HEAD_S, FOPEN_WT);
|
||||
char *cmd;
|
||||
|
||||
if (f == NULL)
|
||||
{
|
||||
|
@ -2647,25 +2661,15 @@ make_head ()
|
|||
|
||||
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);
|
||||
assemble_file (TMP_HEAD_S, TMP_HEAD_O);
|
||||
|
||||
return bfd_openr (TMP_HEAD_O, HOW_BFD_TARGET);
|
||||
return bfd_openr (TMP_HEAD_O, HOW_BFD_READ_TARGET);
|
||||
}
|
||||
|
||||
static bfd *
|
||||
make_tail ()
|
||||
{
|
||||
FILE *f = fopen (TMP_TAIL_S, FOPEN_WT);
|
||||
char *cmd;
|
||||
|
||||
if (f == NULL)
|
||||
{
|
||||
|
@ -2716,18 +2720,9 @@ make_tail ()
|
|||
|
||||
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);
|
||||
assemble_file (TMP_TAIL_S, TMP_TAIL_O);
|
||||
|
||||
#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);
|
||||
return bfd_openr (TMP_TAIL_O, HOW_BFD_READ_TARGET);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -2742,7 +2737,7 @@ gen_lib_file ()
|
|||
|
||||
unlink (imp_name);
|
||||
|
||||
outarch = bfd_openw (imp_name, HOW_BFD_TARGET);
|
||||
outarch = bfd_openw (imp_name, HOW_BFD_WRITE_TARGET);
|
||||
|
||||
if (!outarch)
|
||||
/* xgettext:c-format */
|
||||
|
|
Loading…
Add table
Reference in a new issue