cd4a7468c9
* elf32-spu.c (struct spu_link_hash_table): Add init, line_size_log2, num_lines_log2. (struct got_entry): Add br_addr. (struct call_info): Add priority. (struct function_info): Add lr_store and sp_adjust. (spu_elf_setup): Init line_size_log2 and num_lines_log2. (spu_elf_find_overlays): For soft-icache, mark any section within cache area as an overlay, and check that no other overlays exist. Look up icache overlay manager entry sym. (BRA_STUBS, BRA, BRASL): Define. (enum _stub_type): Replace ovl_stub with call_ovl_stub and br*_ovl_stub. (needs_ovl_stub): Adjust for soft-icache. Return priority encoded in branch insn. (count_stub, build_stub): Support soft-icache. (build_spuear_stubs, process_stubs): Adjust build_stub call. (spu_elf_size_stubs): Size soft-icache stubs. (overlay_index): New function. (spu_elf_build_stubs): Make static. Support soft-icache. (spu_elf_check_vma): Don't turn off auto_overlay if soft-icache. (find_function_stack_adjust): Save lr store and stack adjust insn offsets. (maybe_insert_function): Adjust find_function_stack_adjust call. (mark_functions_via_relocs): Retrieve priority. (remove_cycles): Only warn about pruned arcs when stack_analysis. (sort_calls): Sort by priority first. (mark_overlay_section): Ignore .ovl.init. (sum_stack): Only print when stack_analysis. (print_one_overlay_section): New function, extracted from.. (spu_elf_auto_overlay): ..here. Support soft-icache overlays. (spu_elf_stack_analysis): Only print when htab->stack_analysis. (spu_elf_final_link): Call spu_elf_stack_analysis for lrlive analysis. Call spu_elf_build_stubs. (spu_elf_relocate_section): For soft-icache encode overlay index into addresses. (spu_elf_output_symbol_hook): Support soft-icache. (spu_elf_modify_program_headers: Likewise. * elf32-spu.h (struct spu_elf_params): Add lrlive_analysis. Rename num_regions to num_lines. Add line_size and max_branch. (enum _ovly_flavour): Add ovly_soft_icache. (spu_elf_build_stubs): Delete. gas/ * config/tc-spu.c (md_pseudo_table): Add "brinfo". (brinfo): New var. (md_assemble): Poke brinfo into branch instructions. (spu_brinfo): New function. (md_apply_fix): Don't assume insn fields start off at zero, mask them to remove possible brinfo. ld/ * emultempl/spuelf.em (params): Init new fields. (num_lines_set, line_size_set, icache_mgr, icache_mgr_stream): New vars. (spu_place_special_section): Adjust placement for soft-icache. Pad soft-icache section to a fixed size. Clear addr_tree. (spu_elf_load_ovl_mgr): Support soft-icache. Map overlay manager sections a little more intelligently. (gld${EMULATION_NAME}_finish): Don't call spu_elf_build_stubs. (OPTION_SPU_NUM_LINES): Rename from OPTION_SPU_NUM_REGIONS. (OPTION_SPU_SOFT_ICACHE, OPTION_SPU_LINE_SIZE): Define. (OPTION_SPU_LRLIVE): Define. (PARSE_AND_LIST_LONGOPTS): Add new soft-icache options. (PARSE_AND_LIST_OPTIONS): Likewise. (PARSE_AND_LIST_ARGS_CASES): Handle them. * emultempl/spu_icache.S: Dummy file. * emultempl/spu_icache.o_c: Regenerate. * Makefile.am (eelf32_spu.c): Depend on spu_icache.o_c. (spu_icache.o_c): Add rule to build. (CLEANFILES): Zap temp files. (EXTRA_DIST): Add spu_icache.o_c. * Makefile.in: Regenerate. ld/testsuite/ * ld-spu/ovl.d: Allow for absolute branches in stubs. * ld-spu/ovl2.d: Likewise. |
||
---|---|---|
.. | ||
emulparams | ||
emultempl | ||
po | ||
scripttempl | ||
testsuite | ||
aclocal.m4 | ||
ChangeLog | ||
ChangeLog-0001 | ||
ChangeLog-0203 | ||
ChangeLog-2004 | ||
ChangeLog-2005 | ||
ChangeLog-2006 | ||
ChangeLog-2007 | ||
ChangeLog-2008 | ||
ChangeLog-9197 | ||
ChangeLog-9899 | ||
config.in | ||
configure | ||
configure.host | ||
configure.in | ||
configure.tgt | ||
deffile.h | ||
deffilep.y | ||
dep-in.sed | ||
elf-hints-local.h | ||
fdl.texi | ||
gen-doc.texi | ||
genscrba.sh | ||
genscripts.sh | ||
h8-doc.texi | ||
ld.h | ||
ld.texinfo | ||
ldcref.c | ||
ldctor.c | ||
ldctor.h | ||
ldemul.c | ||
ldemul.h | ||
ldexp.c | ||
ldexp.h | ||
ldfile.c | ||
ldfile.h | ||
ldgram.y | ||
ldint.texinfo | ||
ldlang.c | ||
ldlang.h | ||
ldlex.h | ||
ldlex.l | ||
ldmain.c | ||
ldmain.h | ||
ldmisc.c | ||
ldmisc.h | ||
ldver.c | ||
ldver.h | ||
ldwrite.c | ||
ldwrite.h | ||
lexsup.c | ||
MAINTAINERS | ||
Makefile.am | ||
Makefile.in | ||
mri.c | ||
mri.h | ||
NEWS | ||
pe-dll.c | ||
pe-dll.h | ||
pep-dll.c | ||
pep-dll.h | ||
README | ||
stamp-h.in | ||
sysdep.h | ||
TODO |
README for LD This is the GNU linker. It is distributed with other "binary utilities" which should be in ../binutils. See ../binutils/README for more general notes, including where to send bug reports. There are many features of the linker: * The linker uses a Binary File Descriptor library (../bfd) that it uses to read and write object files. This helps insulate the linker itself from the format of object files. * The linker supports a number of different object file formats. It can even handle multiple formats at once: Read two input formats and write a third. * The linker can be configured for cross-linking. * The linker supports a control language. * There is a user manual (ld.texinfo), as well as the beginnings of an internals manual (ldint.texinfo). Installation ============ See ../binutils/README. If you want to make a cross-linker, you may want to specify a different search path of -lfoo libraries than the default. You can do this by setting the LIB_PATH variable in ./Makefile or using the --with-lib-path configure switch. To build just the linker, make the target all-ld from the top level directory (one directory above this one). Porting to a new target ======================= See the ldint.texinfo manual. Reporting bugs etc =========================== See ../binutils/README. Known problems ============== The Solaris linker normally exports all dynamic symbols from an executable. The GNU linker does not do this by default. This is because the GNU linker tries to present the same interface for all similar targets (in this case, all native ELF targets). This does not matter for normal programs, but it can make a difference for programs which try to dlopen an executable, such as PERL or Tcl. You can make the GNU linker export all dynamic symbols with the -E or --export-dynamic command line option. HP/UX 9.01 has a shell bug that causes the linker scripts to be generated incorrectly. The symptom of this appears to be "fatal error - scanner input buffer overflow" error messages. There are various workarounds to this: * Build and install bash, and build with "make SHELL=bash". * Update to a version of HP/UX with a working shell (e.g., 9.05). * Replace "(. ${srcdir}/scripttempl/${SCRIPT_NAME}.sc)" in genscripts.sh with "sh ${srcdir}..." (no parens) and make sure the emulparams script used exports any shell variables it sets.