predicates.md (const_call_insn_operand): Allow direct calls to locally-defined functions if TARGET_ABSOLUTE_ABICALLS.

* config/mips/predicates.md (const_call_insn_operand): Allow direct
	calls to locally-defined functions if TARGET_ABSOLUTE_ABICALLS.
	* config/mips/mips.md (jal_macro): Test TARGET_ABSOLUTE_ABICALLS.
	Use TARGET_OLDABI instead of !TARGET_NEWABI.
	(loadgp): Use mips_current_loadgp_style.
	(loadgp_noshared): New pattern.
	(sibcall_internal): Use MIPS_CALL.
	(sibcall_value_internal): Likewise.
	(sibcall_value_multiple_internal): Likewise.
	(call_internal): Likewise.
	(call_value_internal): Likewise.
	(call_value_multiple_internal): Likewise.
	(call_split): Use MIPS_CALL and add an 'S' constraint.
	(call_value_split): Likewise.
	(call_value_multiple_split): Likewise.
	* config/mips/mips.opt (-mabicalls): Tweak docstring.
	(-mshared): New option.
	* config/mips/mips-protos.h (mips_loadgp_style): New enum.
	(mips_current_loadgp_style): Declare.
	* config/mips/mips.c (mips_classify_symbol): Avoid using
	SYMBOL_GOT_LOCAL if TARGET_ABSOLUTE_ABICALLS.  Use SYMBOL_GENERAL
	rather than SYMBOL_GOT_GLOBAL for locally-binding symbols if
	TARGET_ABSOLUTE_ABICALLS.
	(override_options): Adjust comments.  Improve the warning that is
	issued when -mabicalls and -G are used together.
	(mips_file_start): Remove comment.
	(mips_current_loadgp_style): New function.
	(mips_gnu_local_gp): New variable.
	(mips_emit_loadgp): Use mips_current_loadgp_style.  Handle
	LOADGP_ABSOLUTE.
	(mips_output_function_prologue): Use mips_current_laodgp_style.
	(mips_expand_prologue): Call mips_emit_loadgp before emitting
	the cprestore instruction.
	(mips_extra_live_on_entry): Fix reversed test.  Don't make $25
	live for TARGET_ABSOLUTE_ABICALLS.
	* config/mips/mips.h (TARGET_ABSOLUTE_ABICALLS): New macro.
	(ASM_SPEC): Pass down -mshared and -mno-shared.
	(MIPS_CALL): New macro.
	* config/mips/netbsd.h (TARGET_OS_CPP_BUILTINS): Remove __ABICALLS__
	definition.
	* doc/invoke.texi (-mabicalls): Update documentation.
	(-mshared): Document.

From-SVN: r112279
This commit is contained in:
Richard Sandiford 2006-03-22 07:21:00 +00:00
parent 0c5a42a660
commit 567b3b8257

View File

@ -596,9 +596,9 @@ Objective-C and Objective-C++ Dialects}.
@gccoptlist{-EL -EB -march=@var{arch} -mtune=@var{arch} @gol
-mips1 -mips2 -mips3 -mips4 -mips32 -mips32r2 -mips64 @gol
-mips16 -mno-mips16 -mabi=@var{abi} -mabicalls -mno-abicalls @gol
-mxgot -mno-xgot -mgp32 -mgp64 -mfp32 -mfp64 @gol
-mhard-float -msoft-float -msingle-float -mdouble-float @gol
-mdsp -mpaired-single -mips3d @gol
-mshared -mno-shared -mxgot -mno-xgot -mgp32 -mgp64 @gol
-mfp32 -mfp64 -mhard-float -msoft-float @gol
-msingle-float -mdouble-float -mdsp -mpaired-single -mips3d @gol
-mlong64 -mlong32 -msym32 -mno-sym32 @gol
-G@var{num} -membedded-data -mno-embedded-data @gol
-muninit-const-in-rodata -mno-uninit-const-in-rodata @gol
@ -10464,8 +10464,29 @@ For information about the O64 ABI, see
@itemx -mno-abicalls
@opindex mabicalls
@opindex mno-abicalls
Generate (do not generate) SVR4-style position-independent code.
@option{-mabicalls} is the default for SVR4-based systems.
Generate (do not generate) code that is suitable for SVR4-style
dynamic objects. @option{-mabicalls} is the default for SVR4-based
systems.
@item -mshared
@itemx -mno-shared
Generate (do not generate) code that is fully position-independent.
This option only affects @option{-mabicalls}.
All @option{-mabicalls} code has traditionally been position-independent,
regardless of options like @option{-fPIC} and @option{-fpic}. However,
as an extension, the GNU toolchain allows executables to use absolute
accesses for locally-binding symbols. It can also use shorter GP
initialization sequences and generate direct calls to locally-defined
functions. This mode is selected by @option{-mno-shared}.
@option{-mno-shared} depends on binutils 2.16 or higher and generates
objects that can only be linked by the GNU linker. However, the option
does not affect the ABI of the final executable; it only affects the ABI
of relocatable objects. Using @option{-mno-shared} will generally make
executables both smaller and quicker.
@option{-mshared} is the default.
@item -mxgot
@itemx -mno-xgot