mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-22 19:09:31 +08:00
Remove powerpc PE support
Plus some leftover powerpc lynxos support. bfd/ * coff-ppc.c: Delete. * pe-ppc.c: Delete. * pei-ppc.c: Delete. * Makefile.am (BFD32_BACKENDS, BFD32_BACKENDS_CFILES): Remove PE PPC. * coffcode.h (coff_set_arch_mach_hook, coff_set_flags): Remove PPCMAGIC code. (coff_write_object_contents): Remove PPC_PE code. * config.bfd: Move powerpcle-pe to removed targets. * configure.ac: Remove powerpc PE entries. * libcoff-in.h (ppc_allocate_toc_section): Delete. (ppc_process_before_allocation): Delete. * peXXigen.c: Remove POWERPC_LE_PE code and comments. * targets.c: Remove powerpc PE vectors. * po/SRC-POTFILES.in: Regenerate. * libcoff.h: Regenerate. * Makefile.in: Regenerate. * configure: Regenerate. binutils/ * dlltool.c: Remove powerpc PE support and comments. * configure.ac: Remove powerpc PE dlltool config. * configure: Regenerate. gas/ * config/obj-coff.h: Remove TE_PE support. * config/tc-ppc.c: Likewise. * config/tc-ppc.h: Likewise. * configure.tgt: Remove powerpc PE and powerpc lynxos. * testsuite/gas/cfi/cfi.exp (cfi-common-6): Remove powerpc PE condition. * testsuite/gas/macros/macros.exp: Don't xfail powerpc PE. include/ * coff/powerpc.h: Delete. ld/ * emulparams/ppcpe.sh: Delete. * scripttempl/ppcpe.sc: Delete. * emulparams/ppclynx.sh: Delete. * Makefile.am (ALL_EMULATION_SOURCES): Remove ppc PE and lynxos. * configure.tgt: Likewise. * emultempl/beos.em: Remove powerpc PE support. * emultempl/pe.em: Likewise. * po/BLD-POTFILES.in: Regenerate. * Makefile.in: Regenerate.
This commit is contained in:
@ -229,7 +229,7 @@
|
||||
= Array of { short, asciz } entries, one for each imported function.
|
||||
The `short' is the function's ordinal number.
|
||||
|
||||
.idata$7 = dll name (eg: "kernel32.dll"). (.idata$6 for ppc). */
|
||||
.idata$7 = dll name (eg: "kernel32.dll"). */
|
||||
|
||||
#include "sysdep.h"
|
||||
#include "bfd.h"
|
||||
@ -449,10 +449,6 @@ static const char *mname = "i386";
|
||||
static const char *mname = "i386:x86-64";
|
||||
#endif
|
||||
|
||||
#ifdef DLLTOOL_DEFAULT_PPC
|
||||
static const char *mname = "ppc";
|
||||
#endif
|
||||
|
||||
#ifdef DLLTOOL_DEFAULT_SH
|
||||
static const char *mname = "sh";
|
||||
#endif
|
||||
@ -563,28 +559,6 @@ static const unsigned char mcore_le_jtab[] =
|
||||
0x00, 0x00, 0x00, 0x00 /* <address> */
|
||||
};
|
||||
|
||||
/* This is the glue sequence for PowerPC PE. There is a
|
||||
tocrel16-tocdefn reloc against the first instruction.
|
||||
We also need a IMGLUE reloc against the glue function
|
||||
to restore the toc saved by the third instruction in
|
||||
the glue. */
|
||||
static const unsigned char ppc_jtab[] =
|
||||
{
|
||||
0x00, 0x00, 0x62, 0x81, /* lwz r11,0(r2) */
|
||||
/* Reloc TOCREL16 __imp_xxx */
|
||||
0x00, 0x00, 0x8B, 0x81, /* lwz r12,0(r11) */
|
||||
0x04, 0x00, 0x41, 0x90, /* stw r2,4(r1) */
|
||||
0xA6, 0x03, 0x89, 0x7D, /* mtctr r12 */
|
||||
0x04, 0x00, 0x4B, 0x80, /* lwz r2,4(r11) */
|
||||
0x20, 0x04, 0x80, 0x4E /* bctr */
|
||||
};
|
||||
|
||||
#ifdef DLLTOOL_PPC
|
||||
/* The glue instruction, picks up the toc from the stw in
|
||||
the above code: "lwz r2,4(r1)". */
|
||||
static bfd_vma ppc_glue_insn = 0x80410004;
|
||||
#endif
|
||||
|
||||
static const char i386_trampoline[] =
|
||||
"\tpushl %%ecx\n"
|
||||
"\tpushl %%edx\n"
|
||||
@ -661,16 +635,7 @@ mtable[] =
|
||||
}
|
||||
,
|
||||
{
|
||||
#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,
|
||||
0, 0, 0, 0, 0, 0
|
||||
}
|
||||
,
|
||||
{
|
||||
#define MTHUMB 3
|
||||
#define MTHUMB 2
|
||||
"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",
|
||||
@ -679,7 +644,7 @@ mtable[] =
|
||||
0, 0, 0, 0, 0, 0
|
||||
}
|
||||
,
|
||||
#define MARM_INTERWORK 4
|
||||
#define MARM_INTERWORK 3
|
||||
{
|
||||
"arm_interwork", ".byte", ".short", ".long", ".asciz", "@",
|
||||
"ldr\tip,[pc]\n\tldr\tip,[ip]\n\tbx\tip\n\t.long",
|
||||
@ -690,7 +655,7 @@ mtable[] =
|
||||
}
|
||||
,
|
||||
{
|
||||
#define MMCORE_BE 5
|
||||
#define MMCORE_BE 4
|
||||
"mcore-be", ".byte", ".short", ".long", ".asciz", "//",
|
||||
"lrw r1,[1f]\n\tld.w r1,(r1,0)\n\tjmp r1\n\tnop\n1:.long",
|
||||
".global", ".space", ".align\t2",".align\t4", "",
|
||||
@ -700,7 +665,7 @@ mtable[] =
|
||||
}
|
||||
,
|
||||
{
|
||||
#define MMCORE_LE 6
|
||||
#define MMCORE_LE 5
|
||||
"mcore-le", ".byte", ".short", ".long", ".asciz", "//",
|
||||
"lrw r1,[1f]\n\tld.w r1,(r1,0)\n\tjmp r1\n\tnop\n1:.long",
|
||||
".global", ".space", ".align\t2",".align\t4", "-EL",
|
||||
@ -710,7 +675,7 @@ mtable[] =
|
||||
}
|
||||
,
|
||||
{
|
||||
#define MMCORE_ELF 7
|
||||
#define MMCORE_ELF 6
|
||||
"mcore-elf-be", ".byte", ".short", ".long", ".asciz", "//",
|
||||
"lrw r1,[1f]\n\tld.w r1,(r1,0)\n\tjmp r1\n\tnop\n1:.long",
|
||||
".global", ".space", ".align\t2",".align\t4", "",
|
||||
@ -720,7 +685,7 @@ mtable[] =
|
||||
}
|
||||
,
|
||||
{
|
||||
#define MMCORE_ELF_LE 8
|
||||
#define MMCORE_ELF_LE 7
|
||||
"mcore-elf-le", ".byte", ".short", ".long", ".asciz", "//",
|
||||
"lrw r1,[1f]\n\tld.w r1,(r1,0)\n\tjmp r1\n\tnop\n1:.long",
|
||||
".global", ".space", ".align\t2",".align\t4", "-EL",
|
||||
@ -730,7 +695,7 @@ mtable[] =
|
||||
}
|
||||
,
|
||||
{
|
||||
#define MARM_WINCE 9
|
||||
#define MARM_WINCE 8
|
||||
"arm-wince", ".byte", ".short", ".long", ".asciz", "@",
|
||||
"ldr\tip,[pc]\n\tldr\tpc,[ip]\n\t.long",
|
||||
".global", ".space", ".align\t2",".align\t4", "-mapcs-32",
|
||||
@ -740,7 +705,7 @@ mtable[] =
|
||||
}
|
||||
,
|
||||
{
|
||||
#define MX86 10
|
||||
#define MX86 9
|
||||
"i386:x86-64", ".byte", ".short", ".long", ".asciz", "#",
|
||||
"jmp *", ".global", ".space", ".align\t2",".align\t4", "",
|
||||
"pe-x86-64",bfd_arch_i386,
|
||||
@ -888,7 +853,6 @@ rvaafter (int mach)
|
||||
case MARM:
|
||||
case M386:
|
||||
case MX86:
|
||||
case MPPC:
|
||||
case MTHUMB:
|
||||
case MARM_INTERWORK:
|
||||
case MMCORE_BE:
|
||||
@ -913,7 +877,6 @@ rvabefore (int mach)
|
||||
case MARM:
|
||||
case M386:
|
||||
case MX86:
|
||||
case MPPC:
|
||||
case MTHUMB:
|
||||
case MARM_INTERWORK:
|
||||
case MMCORE_BE:
|
||||
@ -936,7 +899,6 @@ asm_prefix (int mach, const char *name)
|
||||
switch (mach)
|
||||
{
|
||||
case MARM:
|
||||
case MPPC:
|
||||
case MTHUMB:
|
||||
case MARM_INTERWORK:
|
||||
case MMCORE_BE:
|
||||
@ -2296,8 +2258,6 @@ typedef struct
|
||||
#define INIT_SEC_DATA(id, name, flags, align) \
|
||||
{ id, name, flags, align, NULL, NULL, NULL, 0, NULL }
|
||||
|
||||
#ifndef DLLTOOL_PPC
|
||||
|
||||
#define TEXT 0
|
||||
#define DATA 1
|
||||
#define BSS 2
|
||||
@ -2324,37 +2284,6 @@ static sinfo secdata[NSECS] =
|
||||
INIT_SEC_DATA (IDATA6, ".idata$6", SEC_HAS_CONTENTS, 1)
|
||||
};
|
||||
|
||||
#else
|
||||
|
||||
/* Sections numbered to make the order the same as other PowerPC NT
|
||||
compilers. This also keeps funny alignment thingies from happening. */
|
||||
#define TEXT 0
|
||||
#define PDATA 1
|
||||
#define RDATA 2
|
||||
#define IDATA5 3
|
||||
#define IDATA4 4
|
||||
#define IDATA6 5
|
||||
#define IDATA7 6
|
||||
#define DATA 7
|
||||
#define BSS 8
|
||||
|
||||
#define NSECS 9
|
||||
|
||||
static sinfo secdata[NSECS] =
|
||||
{
|
||||
INIT_SEC_DATA (TEXT, ".text", SEC_CODE | SEC_HAS_CONTENTS, 3),
|
||||
INIT_SEC_DATA (PDATA, ".pdata", SEC_HAS_CONTENTS, 2),
|
||||
INIT_SEC_DATA (RDATA, ".reldata", SEC_HAS_CONTENTS, 2),
|
||||
INIT_SEC_DATA (IDATA5, ".idata$5", SEC_HAS_CONTENTS, 2),
|
||||
INIT_SEC_DATA (IDATA4, ".idata$4", SEC_HAS_CONTENTS, 2),
|
||||
INIT_SEC_DATA (IDATA6, ".idata$6", SEC_HAS_CONTENTS, 1),
|
||||
INIT_SEC_DATA (IDATA7, ".idata$7", SEC_HAS_CONTENTS, 2),
|
||||
INIT_SEC_DATA (DATA, ".data", SEC_DATA, 2),
|
||||
INIT_SEC_DATA (BSS, ".bss", 0, 2)
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
/* This is what we're trying to make. We generate the imp symbols with
|
||||
both single and double underscores, for compatibility.
|
||||
|
||||
@ -2376,21 +2305,7 @@ __imp_GetFileVersionInfoSizeW@8:
|
||||
# Hint/Name table
|
||||
.section .idata$6
|
||||
ID2: .short 2
|
||||
.asciz "GetFileVersionInfoSizeW"
|
||||
|
||||
|
||||
For the PowerPC, here's the variation on the above scheme:
|
||||
|
||||
# Rather than a simple "jmp *", the code to get to the dll function
|
||||
# looks like:
|
||||
.text
|
||||
lwz r11,[tocv]__imp_function_name(r2)
|
||||
# RELOC: 00000000 TOCREL16,TOCDEFN __imp_function_name
|
||||
lwz r12,0(r11)
|
||||
stw r2,4(r1)
|
||||
mtctr r12
|
||||
lwz r2,4(r11)
|
||||
bctr */
|
||||
.asciz "GetFileVersionInfoSizeW" */
|
||||
|
||||
static char *
|
||||
make_label (const char *prefix, const char *name)
|
||||
@ -2438,11 +2353,6 @@ make_one_lib_file (export_type *exp, int i, int delay)
|
||||
asymbol * iname_lab;
|
||||
asymbol ** iname_lab_pp;
|
||||
asymbol ** iname_pp;
|
||||
#ifdef DLLTOOL_PPC
|
||||
asymbol ** fn_pp;
|
||||
asymbol ** toc_pp;
|
||||
#define EXTRA 2
|
||||
#endif
|
||||
#ifndef EXTRA
|
||||
#define EXTRA 0
|
||||
#endif
|
||||
@ -2503,18 +2413,7 @@ make_one_lib_file (export_type *exp, int i, int delay)
|
||||
{
|
||||
exp_label = bfd_make_empty_symbol (abfd);
|
||||
exp_label->name = make_imp_label ("", exp->name);
|
||||
|
||||
/* On PowerPC, the function name points to a descriptor in
|
||||
the rdata section, the first element of which is a
|
||||
pointer to the code (..function_name), and the second
|
||||
points to the .toc. */
|
||||
#ifdef DLLTOOL_PPC
|
||||
if (machine == MPPC)
|
||||
exp_label->section = secdata[RDATA].sec;
|
||||
else
|
||||
#endif
|
||||
exp_label->section = secdata[TEXT].sec;
|
||||
|
||||
exp_label->section = secdata[TEXT].sec;
|
||||
exp_label->flags = BSF_GLOBAL;
|
||||
exp_label->value = 0;
|
||||
|
||||
@ -2558,36 +2457,6 @@ make_one_lib_file (export_type *exp, int i, int delay)
|
||||
iname_lab_pp = ptrs + oidx;
|
||||
ptrs[oidx++] = iname_lab;
|
||||
|
||||
#ifdef DLLTOOL_PPC
|
||||
/* The symbol referring to the code (.text). */
|
||||
{
|
||||
asymbol *function_name;
|
||||
|
||||
function_name = bfd_make_empty_symbol(abfd);
|
||||
function_name->name = make_label ("..", exp->name);
|
||||
function_name->section = secdata[TEXT].sec;
|
||||
function_name->flags = BSF_GLOBAL;
|
||||
function_name->value = 0;
|
||||
|
||||
fn_pp = ptrs + oidx;
|
||||
ptrs[oidx++] = function_name;
|
||||
}
|
||||
|
||||
/* The .toc symbol. */
|
||||
{
|
||||
asymbol *toc_symbol;
|
||||
|
||||
toc_symbol = bfd_make_empty_symbol (abfd);
|
||||
toc_symbol->name = make_label (".", "toc");
|
||||
toc_symbol->section = bfd_und_section_ptr;
|
||||
toc_symbol->flags = BSF_GLOBAL;
|
||||
toc_symbol->value = 0;
|
||||
|
||||
toc_pp = ptrs + oidx;
|
||||
ptrs[oidx++] = toc_symbol;
|
||||
}
|
||||
#endif
|
||||
|
||||
ptrs[oidx] = 0;
|
||||
|
||||
for (i = 0; i < NSECS; i++)
|
||||
@ -2629,13 +2498,7 @@ make_one_lib_file (export_type *exp, int i, int delay)
|
||||
rpp[3] = 0;
|
||||
}
|
||||
|
||||
if (machine == MPPC)
|
||||
{
|
||||
rel->howto = bfd_reloc_type_lookup (abfd,
|
||||
BFD_RELOC_16_GOTOFF);
|
||||
rel->sym_ptr_ptr = iname_pp;
|
||||
}
|
||||
else if (machine == MX86)
|
||||
if (machine == MX86)
|
||||
{
|
||||
rel->howto = bfd_reloc_type_lookup (abfd,
|
||||
BFD_RELOC_32_PCREL);
|
||||
@ -2788,114 +2651,6 @@ make_one_lib_file (export_type *exp, int i, int delay)
|
||||
sec->orelocation = rpp;
|
||||
sec->reloc_count = 1;
|
||||
break;
|
||||
|
||||
#ifdef DLLTOOL_PPC
|
||||
case PDATA:
|
||||
{
|
||||
/* The .pdata section is 5 words long.
|
||||
Think of it as:
|
||||
struct
|
||||
{
|
||||
bfd_vma BeginAddress, [0x00]
|
||||
EndAddress, [0x04]
|
||||
ExceptionHandler, [0x08]
|
||||
HandlerData, [0x0c]
|
||||
PrologEndAddress; [0x10]
|
||||
}; */
|
||||
|
||||
/* So this pdata section setups up this as a glue linkage to
|
||||
a dll routine. There are a number of house keeping things
|
||||
we need to do:
|
||||
|
||||
1. In the name of glue trickery, the ADDR32 relocs for 0,
|
||||
4, and 0x10 are set to point to the same place:
|
||||
"..function_name".
|
||||
2. There is one more reloc needed in the pdata section.
|
||||
The actual glue instruction to restore the toc on
|
||||
return is saved as the offset in an IMGLUE reloc.
|
||||
So we need a total of four relocs for this section.
|
||||
|
||||
3. Lastly, the HandlerData field is set to 0x03, to indicate
|
||||
that this is a glue routine. */
|
||||
arelent *imglue, *ba_rel, *ea_rel, *pea_rel;
|
||||
|
||||
/* Alignment must be set to 2**2 or you get extra stuff. */
|
||||
bfd_set_section_alignment (sec, 2);
|
||||
|
||||
si->size = 4 * 5;
|
||||
si->data = xmalloc (si->size);
|
||||
memset (si->data, 0, si->size);
|
||||
rpp = xmalloc (sizeof (arelent *) * 5);
|
||||
rpp[0] = imglue = xmalloc (sizeof (arelent));
|
||||
rpp[1] = ba_rel = xmalloc (sizeof (arelent));
|
||||
rpp[2] = ea_rel = xmalloc (sizeof (arelent));
|
||||
rpp[3] = pea_rel = xmalloc (sizeof (arelent));
|
||||
rpp[4] = 0;
|
||||
|
||||
/* Stick the toc reload instruction in the glue reloc. */
|
||||
bfd_put_32(abfd, ppc_glue_insn, (char *) &imglue->address);
|
||||
|
||||
imglue->addend = 0;
|
||||
imglue->howto = bfd_reloc_type_lookup (abfd,
|
||||
BFD_RELOC_32_GOTOFF);
|
||||
imglue->sym_ptr_ptr = fn_pp;
|
||||
|
||||
ba_rel->address = 0;
|
||||
ba_rel->addend = 0;
|
||||
ba_rel->howto = bfd_reloc_type_lookup (abfd, BFD_RELOC_32);
|
||||
ba_rel->sym_ptr_ptr = fn_pp;
|
||||
|
||||
bfd_put_32 (abfd, 0x18, si->data + 0x04);
|
||||
ea_rel->address = 4;
|
||||
ea_rel->addend = 0;
|
||||
ea_rel->howto = bfd_reloc_type_lookup (abfd, BFD_RELOC_32);
|
||||
ea_rel->sym_ptr_ptr = fn_pp;
|
||||
|
||||
/* Mark it as glue. */
|
||||
bfd_put_32 (abfd, 0x03, si->data + 0x0c);
|
||||
|
||||
/* Mark the prolog end address. */
|
||||
bfd_put_32 (abfd, 0x0D, si->data + 0x10);
|
||||
pea_rel->address = 0x10;
|
||||
pea_rel->addend = 0;
|
||||
pea_rel->howto = bfd_reloc_type_lookup (abfd, BFD_RELOC_32);
|
||||
pea_rel->sym_ptr_ptr = fn_pp;
|
||||
|
||||
sec->orelocation = rpp;
|
||||
sec->reloc_count = 4;
|
||||
break;
|
||||
}
|
||||
case RDATA:
|
||||
/* Each external function in a PowerPC PE file has a two word
|
||||
descriptor consisting of:
|
||||
1. The address of the code.
|
||||
2. The address of the appropriate .toc
|
||||
We use relocs to build this. */
|
||||
si->size = 8;
|
||||
si->data = xmalloc (8);
|
||||
memset (si->data, 0, si->size);
|
||||
|
||||
rpp = xmalloc (sizeof (arelent *) * 3);
|
||||
rpp[0] = rel = xmalloc (sizeof (arelent));
|
||||
rpp[1] = xmalloc (sizeof (arelent));
|
||||
rpp[2] = 0;
|
||||
|
||||
rel->address = 0;
|
||||
rel->addend = 0;
|
||||
rel->howto = bfd_reloc_type_lookup (abfd, BFD_RELOC_32);
|
||||
rel->sym_ptr_ptr = fn_pp;
|
||||
|
||||
rel = rpp[1];
|
||||
|
||||
rel->address = 4;
|
||||
rel->addend = 0;
|
||||
rel->howto = bfd_reloc_type_lookup (abfd, BFD_RELOC_32);
|
||||
rel->sym_ptr_ptr = toc_pp;
|
||||
|
||||
sec->orelocation = rpp;
|
||||
sec->reloc_count = 2;
|
||||
break;
|
||||
#endif /* DLLTOOL_PPC */
|
||||
}
|
||||
}
|
||||
|
||||
@ -3134,30 +2889,7 @@ make_tail (void)
|
||||
fprintf (f,"\t%s\t0\n", ASM_LONG); /* NULL terminating list. */
|
||||
}
|
||||
|
||||
#ifdef DLLTOOL_PPC
|
||||
/* Normally, we need to see a null descriptor built in idata$3 to
|
||||
act as the terminator for the list. The ideal way, I suppose,
|
||||
would be to mark this section as a comdat type 2 section, so
|
||||
only one would appear in the final .exe (if our linker supported
|
||||
comdat, that is) or cause it to be inserted by something else (say
|
||||
crt0). */
|
||||
|
||||
fprintf (f, "\t.section\t.idata$3\n");
|
||||
fprintf (f, "\t%s\t0\n", ASM_LONG);
|
||||
fprintf (f, "\t%s\t0\n", ASM_LONG);
|
||||
fprintf (f, "\t%s\t0\n", ASM_LONG);
|
||||
fprintf (f, "\t%s\t0\n", ASM_LONG);
|
||||
fprintf (f, "\t%s\t0\n", ASM_LONG);
|
||||
#endif
|
||||
|
||||
#ifdef DLLTOOL_PPC
|
||||
/* Other PowerPC NT compilers use idata$6 for the dllname, so I
|
||||
do too. Original, huh? */
|
||||
fprintf (f, "\t.section\t.idata$6\n");
|
||||
#else
|
||||
fprintf (f, "\t.section\t.idata$7\n");
|
||||
#endif
|
||||
|
||||
fprintf (f, "\t%s\t__%s_iname\n", ASM_GLOBAL, imp_name_lab);
|
||||
fprintf (f, "__%s_iname:\t%s\t\"%s\"\n",
|
||||
imp_name_lab, ASM_TEXT, dll_name);
|
||||
@ -3463,13 +3195,13 @@ identify_member_contains_symname (bfd * abfd,
|
||||
}
|
||||
|
||||
/* This is the main implementation for the --identify option.
|
||||
Given the name of an import library in identify_imp_name, first determine
|
||||
if the import library is a GNU binutils-style one (where the DLL name is
|
||||
stored in an .idata$7 (.idata$6 on PPC) section, or if it is a MS-style
|
||||
one (where the DLL name, along with much other data, is stored in the
|
||||
.idata$6 section). We determine the style of import library by searching
|
||||
for the DLL-structure symbol inserted by MS tools:
|
||||
__NULL_IMPORT_DESCRIPTOR.
|
||||
Given the name of an import library in identify_imp_name, first
|
||||
determine if the import library is a GNU binutils-style one (where
|
||||
the DLL name is stored in an .idata$7 section), or if it is a
|
||||
MS-style one (where the DLL name, along with much other data, is
|
||||
stored in the .idata$6 section). We determine the style of import
|
||||
library by searching for the DLL-structure symbol inserted by MS
|
||||
tools: __NULL_IMPORT_DESCRIPTOR.
|
||||
|
||||
Once we know which section to search, evaluate each section for the
|
||||
appropriate properties that indicate it may contain the name of the
|
||||
@ -3629,19 +3361,13 @@ identify_search_member (bfd *abfd,
|
||||
}
|
||||
|
||||
/* This predicate returns true if section->name matches the desired value.
|
||||
By default, this is .idata$7 (.idata$6 on PPC, or if the import
|
||||
library is ms-style). */
|
||||
By default, this is .idata$7 (.idata$6 if the import library is
|
||||
ms-style). */
|
||||
|
||||
static bfd_boolean
|
||||
identify_process_section_p (asection * section, bfd_boolean ms_style_implib)
|
||||
{
|
||||
static const char * SECTION_NAME =
|
||||
#ifdef DLLTOOL_PPC
|
||||
/* dllname is stored in idata$6 on PPC */
|
||||
".idata$6";
|
||||
#else
|
||||
".idata$7";
|
||||
#endif
|
||||
static const char * SECTION_NAME = ".idata$7";
|
||||
static const char * MS_SECTION_NAME = ".idata$6";
|
||||
|
||||
const char * section_name =
|
||||
@ -3652,7 +3378,7 @@ identify_process_section_p (asection * section, bfd_boolean ms_style_implib)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* If *section has contents and its name is .idata$7 (.data$6 on PPC or if
|
||||
/* If *section has contents and its name is .idata$7 (.idata$6 if
|
||||
import lib ms-generated) -- and it satisfies several other constraints
|
||||
-- then add the contents of the section to obj->list. */
|
||||
|
||||
@ -3938,7 +3664,7 @@ usage (FILE *file, int status)
|
||||
fprintf (file, _("Usage %s <option(s)> <object-file(s)>\n"), program_name);
|
||||
/* xgetext:c-format */
|
||||
fprintf (file, _(" -m --machine <machine> Create as DLL for <machine>. [default: %s]\n"), mname);
|
||||
fprintf (file, _(" possible <machine>: arm[_interwork], i386, mcore[-elf]{-le|-be}, ppc, thumb\n"));
|
||||
fprintf (file, _(" possible <machine>: arm[_interwork], i386, mcore[-elf]{-le|-be}, thumb\n"));
|
||||
fprintf (file, _(" -e --output-exp <outname> Generate an export file.\n"));
|
||||
fprintf (file, _(" -l --output-lib <outname> Generate an interface library.\n"));
|
||||
fprintf (file, _(" -y --output-delaylib <outname> Create a delay-import library.\n"));
|
||||
@ -4372,7 +4098,7 @@ look_for_prog (const char *prog_name, const char *prefix, int end_prefix)
|
||||
/* Deduce the name of the program we are want to invoke.
|
||||
PROG_NAME is the basic name of the program we want to run,
|
||||
eg "as" or "ld". The catch is that we might want actually
|
||||
run "i386-pe-as" or "ppc-pe-ld".
|
||||
run "i386-pe-as".
|
||||
|
||||
If argv[0] contains the full path, then try to find the program
|
||||
in the same place, with and then without a target-like prefix.
|
||||
|
Reference in New Issue
Block a user