* elf32-spu.c (struct spu_link_hash_table): Add stack_analysis
	and emit_stack_syms bitfields.
	(get_sym_h): Read all symbols if stack analysis will be done.
	(spu_elf_create_sections): Add stack_analysis and emit_stack_syms
	params, and stash in hash table.
	(is_hint): Split off from..
	(is_branch): ..here.  Adjust callers.
	(spu_elf_size_stubs): Add stack_analysis param.  Arrange to read
	and keep all syms.
	(write_one_stub): Fix mem leak.
	(find_function_stack_adjust): New function.
	(sort_syms_syms, sort_syms_psecs): New vars.
	(sort_syms): New function.
	(struct call_info, struct function_info): New.
	(struct spu_elf_stack_info): New.
	(alloc_stack_info, maybe_insert_function, func_name): New functions.
	(is_nop, insns_at_end, check_function_ranges): Likewise.
	(find_function, insert_callee, mark_functions_via_relocs): Likewise.
	(pasted_function, interesting_section, discover_functions): Likewise.
	(mark_non_root, call_graph_traverse, build_call_tree): Likewise.
	(sum_stack, spu_elf_stack_analysis, spu_elf_final_link): Likewise.
	(bfd_elf32_bfd_final_link): Define.
	* elf32-spu.h (struct _spu_elf_section_data): Add stack_info field.
	(spu_elf_create_sections, spu_elf_size_stubs): Update prototypes.
include/
	* bfdlink.h (struct bfd_link_info): Add "info" and "minfo".
ld/
	* ldmain.c (link_callbacks): Init info and minfo fields.
	* ldmisc.c (minfo): Do nothing if no map file.
	* emultempl/spuelf.em (stack_analysis, emit_stack_syms): New vars.
	(spu_after_open): Adjust spu_elf_create_sections call.
	(spu_before_allocation): Likewise for spu_elf_size_stubs.
	(OPTION_SPU_STACK_ANALYSIS, OPTION_SPU_STACK_SYMS): Define.
	(PARSE_AND_LIST_LONGOPTS): Add new entries.
	(PARSE_AND_LIST_OPTIONS, PARSE_AND_LIST_ARGS_CASES): Likewise.
	* gen-doc.texi: Add @set for SPU and other missing targets.
	* ld.texinfo: Update man page selection to match gen-doc.texi.
	Document SPU features.
This commit is contained in:
Alan Modra 2007-04-30 14:06:40 +00:00
parent 643aff874d
commit bb57ddfeb7
2 changed files with 14 additions and 4 deletions

View File

@ -1,3 +1,7 @@
2007-04-30 Alan Modra <amodra@bigpond.net.au>
* bfdlink.h (struct bfd_link_info): Add "info" and "minfo".
2007-04-25 Mark Mitchell <mark@codesourcery.com> 2007-04-25 Mark Mitchell <mark@codesourcery.com>
* demangle.h: Change license to LGPL + exception. * demangle.h: Change license to LGPL + exception.

View File

@ -1,6 +1,6 @@
/* bfdlink.h -- header file for BFD link routines /* bfdlink.h -- header file for BFD link routines
Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
2003, 2004, 2005 Free Software Foundation, Inc. 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
Written by Steve Chamberlain and Ian Lance Taylor, Cygnus Support. Written by Steve Chamberlain and Ian Lance Taylor, Cygnus Support.
This file is part of BFD, the Binary File Descriptor library. This file is part of BFD, the Binary File Descriptor library.
@ -455,8 +455,8 @@ struct bfd_link_info
struct bfd_elf_dynamic_list *dynamic_list; struct bfd_elf_dynamic_list *dynamic_list;
}; };
/* This structures holds a set of callback functions. These are /* This structures holds a set of callback functions. These are called
called by the BFD linker routines. Except for einfo, the first by the BFD linker routines. Except for the info functions, the first
argument to each callback function is the bfd_link_info structure argument to each callback function is the bfd_link_info structure
being used and each function returns a boolean value. If the being used and each function returns a boolean value. If the
function returns FALSE, then the BFD function which called it should function returns FALSE, then the BFD function which called it should
@ -568,9 +568,15 @@ struct bfd_link_callbacks
bfd_boolean (*notice) bfd_boolean (*notice)
(struct bfd_link_info *, const char *name, (struct bfd_link_info *, const char *name,
bfd *abfd, asection *section, bfd_vma address); bfd *abfd, asection *section, bfd_vma address);
/* General link info message. */ /* Error or warning link info message. */
void (*einfo) void (*einfo)
(const char *fmt, ...); (const char *fmt, ...);
/* General link info message. */
void (*info)
(const char *fmt, ...);
/* Message to be printed in linker map file. */
void (*minfo)
(const char *fmt, ...);
/* This callback provides a chance for users of the BFD library to /* This callback provides a chance for users of the BFD library to
override its decision about whether to place two adjacent sections override its decision about whether to place two adjacent sections
into the same segment. */ into the same segment. */