* pe-dll.c (make_one): Do not generate code thunk for DATA

exports.
(process_def_file): deduce DATA flag for auto-export sumbols.
This commit is contained in:
DJ Delorie 2000-10-10 03:28:01 +00:00
parent f3b6f7c34d
commit 23a87948dd
2 changed files with 35 additions and 21 deletions

View File

@ -1,3 +1,9 @@
2000-10-09 Paul Sokolovsky <Paul.Sokolovsky@technologist.com>
* pe-dll.c (make_one): Do not generate code thunk for DATA
exports.
(process_def_file): deduce DATA flag for auto-export sumbols.
2000-10-09 Kazu Hirata <kazu@hxi.com>
* ld.h: Fix formatting.

View File

@ -310,7 +310,12 @@ process_def_file (abfd, info)
if (*sn == '_')
sn++;
if (auto_export (pe_def_file, sn))
def_file_add_export (pe_def_file, sn, 0, -1);
{
def_file_export *p;
p=def_file_add_export (pe_def_file, sn, 0, -1);
/* Fill data flag properly, from dlltool.c */
p->flag_data = !(symbols[j]->flags & BSF_FUNCTION);
}
}
}
}
@ -1405,7 +1410,7 @@ make_one (exp, parent)
bfd *parent;
{
asection *tx, *id7, *id5, *id4, *id6;
unsigned char *td, *d7, *d5, *d4, *d6 = NULL;
unsigned char *td = NULL, *d7, *d5, *d4, *d6 = NULL;
int len;
char *oname;
bfd *abfd;
@ -1454,25 +1459,28 @@ make_one (exp, parent)
quick_symbol (abfd, U ("__imp_"), exp->internal_name, "",
id5, BSF_GLOBAL, 0);
bfd_set_section_size (abfd, tx, jmp_byte_count);
td = (unsigned char *) xmalloc (jmp_byte_count);
tx->contents = td;
memcpy (td, jmp_bytes, jmp_byte_count);
switch (pe_details->pe_arch)
{
case PE_ARCH_i386:
quick_reloc (abfd, 2, BFD_RELOC_32, 2);
break;
case PE_ARCH_sh:
quick_reloc (abfd, 8, BFD_RELOC_32, 2);
break;
case PE_ARCH_mips:
quick_reloc (abfd, 0, BFD_RELOC_HI16_S, 2);
quick_reloc (abfd, 0, BFD_RELOC_LO16, 0); /* MIPS_R_PAIR */
quick_reloc (abfd, 4, BFD_RELOC_LO16, 2);
break;
}
save_relocs (tx);
if (! exp->flag_data)
{
bfd_set_section_size (abfd, tx, jmp_byte_count);
td = (unsigned char *) xmalloc (jmp_byte_count);
tx->contents = td;
memcpy (td, jmp_bytes, jmp_byte_count);
switch (pe_details->pe_arch)
{
case PE_ARCH_i386:
quick_reloc (abfd, 2, BFD_RELOC_32, 2);
break;
case PE_ARCH_sh:
quick_reloc (abfd, 8, BFD_RELOC_32, 2);
break;
case PE_ARCH_mips:
quick_reloc (abfd, 0, BFD_RELOC_HI16_S, 2);
quick_reloc (abfd, 0, BFD_RELOC_LO16, 0); /* MIPS_R_PAIR */
quick_reloc (abfd, 4, BFD_RELOC_LO16, 2);
break;
}
save_relocs (tx);
}
bfd_set_section_size (abfd, id7, 4);
d7 = (unsigned char *) xmalloc (4);