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:
parent
0c5a42a660
commit
567b3b8257
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user