The attached patch implements support for x86 VxWorks shared libraries. VxWorks shared libraries are somewhat different to sysv shared libraries, so I needed to make a couple of changes to common code: - The __GOTT_BASE__ and __GOTT_INDEX__ symbols are supplied by the OS loader, so we need to allow undefined references to these symbols. - The OS loader requires both the normal dynamic relocations and a copy of the original static relocations for the PLT. Both these changes will also be used by other (not yet submitted) VxWorks targets. To actually generate working executables an additional option to create dynamic sections in executables is needed. This will follow shortly. Tested on i586-wrs-vxworks and i686-pc-linux-gnu. Ok? Paul 2004-01-19 Paul Brook bfd/ * config.bfd: Use bfd_elf32_i386_vxworks_vec for i?86-*-vxworks. * configure.in: Add bfd_elf32_i386_vxworks_vec. * configure: Regenerate. * elf-bfd.h (struct elf_backend_data): Add is_vxworks. (RELOC_FOR_GLOBAL_SYMBOL): Ignore VxWorks magic GOT symbols. * elf.c (assign_section_numbers): Add special handling for VxWorks .plt.unloaded section. * elflink.c (_bfd_elf_create_dynamic_sections): Mark VxWorks PLT symbols as functions. (elf_link_adjust_relocs): Convert SHN_UNDEF relocs for PLT stubs into section relative relocs. (elf_link_output_extsym): Ignore undefined VxWorks GOTT symbols. * elfxx-target.h (elf_backend_is_vxworks): Define. (elfNN_bed): Use it. * targets.c (bfd_elf32_i386_vxworks_vec): Declare. (_bfd_target_vector): Add bfd_elf32_i386_vxworks_vec. * elf32-i386.c: Add elf32-i386-vxworks target BFD. (PLTRESOLVE_RELOCS_SHLIB, PLTRESOLVE_RELOCS): Define. (PLT_NON_JUMP_SLOT_RELOCS): Define. (elf_i386_link_hash_table): Add srelplt2, hgot, hplt, is_vxworks and plt0_pad_byte fields. (elf_i386_link_hash_table_create): Zero them. (elf_i386_create_dynamic_sections): Create static relocation section. (allocate_dynrelocs): Allocate space for static PLT relocations. (elf_i386_size_dynamic_sections): Save shortcuts to PLT and GOT symbols. Don't strip PLT sections if we have exported symbols from them. (elf_i386_finish_dynamic_symbol): Fill in VxWorks PLT static relocation section. Don't mark _GLOBAL_OFFSET_TABLE_ as absolute on VxWorks. (elf_i386_finish_dynamic_sections): Allow different pad bytes. Add relocation for GOT location. Fill in PLT static relocations. (elf_i386_vxworks_link_hash_table_create): New function. gas/ * config/tc-i386.h (ELF_TARGET_FORMAT): Define for TE_VXWORKS. gas/testsuite/ * gas/i386/i386.exp: Don't run divide test on vxworks. ld/ * Makefile.am: Add eelf_i386_vxworks. * Makefile.in: Regenerate. * configure.tgt: Make i?86-*-vxworks use targ_emul=elf_i386_vxworks. * emulparams/elf_i386_vxworks.sh: New file. * emulparams/vxworks.sh: New file. * scripttempl/elf.sc: Add DATA_END_SYMBOLS and ETEXT_NAME.