functions.
(TARGET_CANNOT_FORCE_CONST_MEM): New macro.
+ * config/bfin/bfin.md (call_symbol, call_value_symbol, sibcall_symbol,
+ sibcall_value_symbol): Allow these patterns if
+ TARGET_LEAF_ID_SHARED_LIBRARY.
+ * config/bfin/bfin.c (bfin_expand_call): Allow them here as well.
+ (override_options): Turn on id shared library flags if -msep-data,
+ but disallow the combination of these options on the command line.
+ * config/bfin/bfin.h (TARGET_LEAF_ID_SHARED_LIBRARY, MASK_SEP_DATA
+ MASK_LEAF_ID_SHARED_LIBRARY, TARGET_SEP_DATA): New macros.
+ (DRIVER_SELF_SPECS): -mleaf-id-shared-library implies
+ -mid-shared-library.
+ (TARGET_SWITCHES): Add -mleaf-id-shared-library and -msep-data.
+ * doc/invoke.texi (Blackfin Options): Document new switches.
+
2006-11-19 Andrew Pinski <pinskia@gmail.com>
PR rtl-opt/29879
do_link (spreg, frame_size, false);
if (TARGET_ID_SHARED_LIBRARY
+ && !TARGET_SEP_DATA
&& (current_function_uses_pic_offset_table
|| !current_function_is_leaf))
bfin_load_pic_reg (pic_offset_table_rtx);
else if ((!register_no_elim_operand (callee, Pmode)
&& GET_CODE (callee) != SYMBOL_REF)
|| (GET_CODE (callee) == SYMBOL_REF
- && (flag_pic
+ && ((TARGET_ID_SHARED_LIBRARY && !TARGET_LEAF_ID_SHARED_LIBRARY)
|| bfin_longcall_p (callee, INTVAL (cookie)))))
{
callee = copy_to_mode_reg (Pmode, callee);
if (TARGET_ID_SHARED_LIBRARY && TARGET_FDPIC)
error ("ID shared libraries and FD-PIC mode can't be used together.");
+ /* Don't allow the user to specify -mid-shared-library and -msep-data
+ together, as it makes little sense from a user's point of view... */
+ if (TARGET_SEP_DATA && TARGET_ID_SHARED_LIBRARY)
+ error ("cannot specify both -msep-data and -mid-shared-library");
+ /* ... internally, however, it's nearly the same. */
+ if (TARGET_SEP_DATA)
+ target_flags |= MASK_ID_SHARED_LIBRARY | MASK_LEAF_ID_SHARED_LIBRARY;
+
/* There is no single unaligned SI op for PIC code. Sometimes we
need to use ".4byte" and sometimes we need to use ".picptr".
See bfin_assemble_integer for details. */
#endif
#define DRIVER_SELF_SPECS SUBTARGET_DRIVER_SELF_SPECS "\
+ %{mleaf-id-shared-library:%{!mid-shared-library:-mid-shared-library}} \
%{mfdpic:%{!fpic:%{!fpie:%{!fPIC:%{!fPIE:\
%{!fno-pic:%{!fno-pie:%{!fno-PIC:%{!fno-PIE:-fpie}}}}}}}}} \
"
(match_operand 1 "general_operand" "g"))
(use (match_operand 2 "" ""))]
"! SIBLING_CALL_P (insn)
- && !TARGET_ID_SHARED_LIBRARY
+ && (!TARGET_ID_SHARED_LIBRARY || TARGET_LEAF_ID_SHARED_LIBRARY)
&& GET_CODE (operands[0]) == SYMBOL_REF
&& !bfin_longcall_p (operands[0], INTVAL (operands[2]))"
"call %0;"
(use (match_operand 2 "" ""))
(return)]
"SIBLING_CALL_P (insn)
- && !TARGET_ID_SHARED_LIBRARY
+ && (!TARGET_ID_SHARED_LIBRARY || TARGET_LEAF_ID_SHARED_LIBRARY)
&& GET_CODE (operands[0]) == SYMBOL_REF
&& !bfin_longcall_p (operands[0], INTVAL (operands[2]))"
"jump.l %0;"
(match_operand 2 "general_operand" "g")))
(use (match_operand 3 "" ""))]
"! SIBLING_CALL_P (insn)
- && !TARGET_ID_SHARED_LIBRARY
+ && (!TARGET_ID_SHARED_LIBRARY || TARGET_LEAF_ID_SHARED_LIBRARY)
&& GET_CODE (operands[1]) == SYMBOL_REF
&& !bfin_longcall_p (operands[1], INTVAL (operands[3]))"
"call %1;"
(use (match_operand 3 "" ""))
(return)]
"SIBLING_CALL_P (insn)
- && !TARGET_ID_SHARED_LIBRARY
+ && (!TARGET_ID_SHARED_LIBRARY || TARGET_LEAF_ID_SHARED_LIBRARY)
&& GET_CODE (operands[1]) == SYMBOL_REF
&& !bfin_longcall_p (operands[1], INTVAL (operands[3]))"
"jump.l %1;"
Target Report Mask(ID_SHARED_LIBRARY)
Enabled ID based shared library
+mleaf-id-shared-library
+Target Report Mask(LEAF_ID_SHARED_LIBRARY)
+Generate code that won't be linked against any other ID shared libraries,
+but may be used as a shared library.
+
mshared-library-id=
Target RejectNegative Joined UInteger Var(bfin_library_id)
ID of shared library to build
+msep-data
+Target Report Mask(SEP_DATA)
+Enable separate data segment
+
mlong-calls
Target Report Mask(LONG_CALLS)
Avoid generating pc-relative calls; use indirection
CRTSTUFF_T_CFLAGS = -fpic
TARGET_LIBGCC2_CFLAGS = -fpic
-MULTILIB_OPTIONS=mid-shared-library mfdpic
+MULTILIB_OPTIONS=mid-shared-library mleaf-id-shared-library
+MULTILIB_OPTIONS+=msep-data mfdpic
MULTILIB_DEFAULTS=
MULTILIB_DIRNAMES=
-MULTILIB_EXCEPTIONS=mid-shared-library/mfdpic
+MULTILIB_EXCEPTIONS=mid-shared-library*/mfdpic mleaf-id-shared-library*
+MULTILIB_EXCEPTIONS+=*msep-data*
# Assemble startup files.
$(T)crti.o: $(srcdir)/config/bfin/crti.s $(GCC_PASSES)