Add support for importing data from ILF images.
* peicode.h (pe_ILF_build_a_bfd): Create an import symbol for both CODE and DATA.
This commit is contained in:
parent
ac0d427f4b
commit
655ed9ea17
2 changed files with 20 additions and 14 deletions
|
@ -1,3 +1,8 @@
|
|||
2016-02-01 Nathaniel Smith <njs@pobox.com>
|
||||
|
||||
* peicode.h (pe_ILF_build_a_bfd): Create an import symbol for both
|
||||
CODE and DATA.
|
||||
|
||||
2016-02-01 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* elf64-x86-64.c (elf_x86_64_get_plt_sym_val): Don't abort on
|
||||
|
|
|
@ -959,13 +959,19 @@ pe_ILF_build_a_bfd (bfd * abfd,
|
|||
pe_ILF_save_relocs (&vars, id5);
|
||||
}
|
||||
|
||||
/* Create an import symbol. */
|
||||
pe_ILF_make_a_symbol (& vars, "__imp_", symbol_name, id5, 0);
|
||||
imp_sym = vars.sym_ptr_ptr - 1;
|
||||
imp_index = vars.sym_index - 1;
|
||||
|
||||
/* Create extra sections depending upon the type of import we are dealing with. */
|
||||
switch (import_type)
|
||||
{
|
||||
int i;
|
||||
|
||||
case IMPORT_CODE:
|
||||
/* Create a .text section.
|
||||
/* CODE functions are special, in that they get a trampoline that
|
||||
jumps to the main import symbol. Create a .text section to hold it.
|
||||
First we need to look up its contents in the jump table. */
|
||||
for (i = NUM_ENTRIES (jtab); i--;)
|
||||
{
|
||||
|
@ -986,11 +992,6 @@ pe_ILF_build_a_bfd (bfd * abfd,
|
|||
/* Copy in the jump code. */
|
||||
memcpy (text->contents, jtab[i].data, jtab[i].size);
|
||||
|
||||
/* Create an import symbol. */
|
||||
pe_ILF_make_a_symbol (& vars, "__imp_", symbol_name, id5, 0);
|
||||
imp_sym = vars.sym_ptr_ptr - 1;
|
||||
imp_index = vars.sym_index - 1;
|
||||
|
||||
/* Create a reloc for the data in the text section. */
|
||||
#ifdef MIPS_ARCH_MAGIC_WINCE
|
||||
if (magic == MIPS_ARCH_MAGIC_WINCE)
|
||||
|
@ -1068,14 +1069,6 @@ pe_ILF_build_a_bfd (bfd * abfd,
|
|||
pe_ILF_make_a_symbol (& vars, "", symbol_name, text,
|
||||
BSF_NOT_AT_END | BSF_FUNCTION);
|
||||
|
||||
/* Create an import symbol for the DLL, without the
|
||||
.dll suffix. */
|
||||
ptr = (bfd_byte *) strrchr (source_dll, '.');
|
||||
if (ptr)
|
||||
* ptr = 0;
|
||||
pe_ILF_make_a_symbol (& vars, "__IMPORT_DESCRIPTOR_", source_dll, NULL, 0);
|
||||
if (ptr)
|
||||
* ptr = '.';
|
||||
break;
|
||||
|
||||
case IMPORT_DATA:
|
||||
|
@ -1087,6 +1080,14 @@ pe_ILF_build_a_bfd (bfd * abfd,
|
|||
abort ();
|
||||
}
|
||||
|
||||
/* Create an import symbol for the DLL, without the .dll suffix. */
|
||||
ptr = (bfd_byte *) strrchr (source_dll, '.');
|
||||
if (ptr)
|
||||
* ptr = 0;
|
||||
pe_ILF_make_a_symbol (& vars, "__IMPORT_DESCRIPTOR_", source_dll, NULL, 0);
|
||||
if (ptr)
|
||||
* ptr = '.';
|
||||
|
||||
/* Point the bfd at the symbol table. */
|
||||
obj_symbols (abfd) = vars.sym_cache;
|
||||
bfd_get_symcount (abfd) = vars.sym_index;
|
||||
|
|
Loading…
Reference in a new issue