diff options
author | Andrew Pinski <apinski@apple.com> | 2003-03-11 01:41:11 +0000 |
---|---|---|
committer | Geoffrey Keating <geoffk@gcc.gnu.org> | 2003-03-11 01:41:11 +0000 |
commit | ab82a49f4ec8969f3c43ac6c1616fcd6a346fd9d (patch) | |
tree | 0f526257c8b54faa7d71bb0a217a93ddc14bd8e0 /gcc | |
parent | 8c124730401c786b80a9a5027afe1eeb7fd2a968 (diff) | |
download | gcc-ab82a49f4ec8969f3c43ac6c1616fcd6a346fd9d.zip gcc-ab82a49f4ec8969f3c43ac6c1616fcd6a346fd9d.tar.gz gcc-ab82a49f4ec8969f3c43ac6c1616fcd6a346fd9d.tar.bz2 |
darwin.c (machopic_function_base_name): If dynamic-no-pic is on should not get here.
2003-03-10 Andrew Pinski <apinski@apple.com>
* config/darwin.c (machopic_function_base_name): If dynamic-no-pic
is on should not get here.
(machopic_indirect_data_reference): If dynamic-no-pic is on just
generate high/low parts of the address.
(machopic_legitimize_pic_address): Change MACHOPIC_PURE to
MACHOPIC_INDIRECT. Dynamic-no-pic uses 0 as the pic base. Generate
symbol and labels with a new reg. Dynamic-no-pic does not have a
pic_offset_table_rtx.
(machopic_select_section): Change references of flag_pic to
MACHOPIC_INDIRECT.
(machopic_asm_out_destructor): Likewise.
* config/darwin.h (ASM_DECLARE_UNRESOLVED_REFERENCE): Change
reference of flag_pic to MACHOPIC_INDIRECT.
(MACHO_DYNAMIC_NO_PIC_P): Define as TARGET_DYNAMIC_NO_PIC.
(MACHOPIC_INDIRECT): Is also true when dynamic-no-pic is on.
(MACHOPIC_JUST_INDIRECT): Is also true when dynamic-no-pic is on.
(MACHOPIC_PURE): Is not pure when dynamic-no-pic is on.
* config/i386/darwin.h (MASK_MACHO_DYNAMIC_NO_PIC): Define as
0 for right now as dynamic-no-pic is not implemented on Darwin/ia32.
* config/rs6000/darwin.h (MASK_MACHO_DYNAMIC_NO_PIC): Define.
(TARGET_DYNAMIC_NO_PIC): Define.
(SUBTARGET_SWITCHES): Define, have sub-target switches for
dynamic-no-pic.
(SUBTARGET_OVERRIDE_OPTIONS): Move check for -fpic from
rs6000_override_options to here. Dynamic-no-pic overrides
pic.
(CC1_SPEC): Change from not static then pic to not static and not
dynamic-no-pic then pic.
* config/rs6000/rs6000.c (rs6000_override_options): Move the
check for -fpic and DARWIN_ABI to config/rs6000/darwin.h
(rs6000_legitimize_reload_address): Add case for loading floating in
dynamic-no-pic.
(rs6000_emit_move): Add case for dynamic-no-pic. Change reference
of flag_pic to MACHOPIC_INDIRECT.
(secondary_reload_class): Conditional change the reference of
flag_pic to MACHOPIC_INDIRECT.
(rs6000_output_mi_thunk): Change reference of flag_pic to
MACHOPIC_INDIRECT.
(output_profile_hook): Likewise.
(machopic_output_stub): Non-pure (dynamic-no-pic) is now supported.
* config/rs6000/rs6000.md (movdf_low): Add the case for
MACHO_DYNAMIC_NO_PIC_P.
(call): Change references for flag_pic in TARGET_MACHO to
MACHOPIC_INDIRECT.
(SUBTARGET_OVERRIDE_OPTIONS): Add case where -fpic is on and
-mdynamic-no-pic is on. Also move case for -fpic from rs6000.c.
* doc/invoke.texi (-mdynamic-no-pic): Document.
From-SVN: r64157
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 50 | ||||
-rw-r--r-- | gcc/config/darwin.c | 69 | ||||
-rw-r--r-- | gcc/config/darwin.h | 9 | ||||
-rw-r--r-- | gcc/config/i386/darwin.h | 5 | ||||
-rw-r--r-- | gcc/config/rs6000/darwin.h | 46 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.c | 52 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.md | 13 | ||||
-rw-r--r-- | gcc/doc/invoke.texi | 8 |
8 files changed, 218 insertions, 34 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index fab6a90..c0cadc5 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,52 @@ +2003-03-10 Andrew Pinski <apinski@apple.com> + + * config/darwin.c (machopic_function_base_name): If dynamic-no-pic + is on should not get here. + (machopic_indirect_data_reference): If dynamic-no-pic is on just + generate high/low parts of the address. + (machopic_legitimize_pic_address): Change MACHOPIC_PURE to + MACHOPIC_INDIRECT. Dynamic-no-pic uses 0 as the pic base. Generate + symbol and labels with a new reg. Dynamic-no-pic does not have a + pic_offset_table_rtx. + (machopic_select_section): Change references of flag_pic to + MACHOPIC_INDIRECT. + (machopic_asm_out_destructor): Likewise. + * config/darwin.h (ASM_DECLARE_UNRESOLVED_REFERENCE): Change + reference of flag_pic to MACHOPIC_INDIRECT. + (MACHO_DYNAMIC_NO_PIC_P): Define as TARGET_DYNAMIC_NO_PIC. + (MACHOPIC_INDIRECT): Is also true when dynamic-no-pic is on. + (MACHOPIC_JUST_INDIRECT): Is also true when dynamic-no-pic is on. + (MACHOPIC_PURE): Is not pure when dynamic-no-pic is on. + * config/i386/darwin.h (MASK_MACHO_DYNAMIC_NO_PIC): Define as + 0 for right now as dynamic-no-pic is not implemented on Darwin/ia32. + * config/rs6000/darwin.h (MASK_MACHO_DYNAMIC_NO_PIC): Define. + (TARGET_DYNAMIC_NO_PIC): Define. + (SUBTARGET_SWITCHES): Define, have sub-target switches for + dynamic-no-pic. + (SUBTARGET_OVERRIDE_OPTIONS): Move check for -fpic from + rs6000_override_options to here. Dynamic-no-pic overrides + pic. + (CC1_SPEC): Change from not static then pic to not static and not + dynamic-no-pic then pic. + * config/rs6000/rs6000.c (rs6000_override_options): Move the + check for -fpic and DARWIN_ABI to config/rs6000/darwin.h + (rs6000_legitimize_reload_address): Add case for loading floating in + dynamic-no-pic. + (rs6000_emit_move): Add case for dynamic-no-pic. Change reference + of flag_pic to MACHOPIC_INDIRECT. + (secondary_reload_class): Conditional change the reference of + flag_pic to MACHOPIC_INDIRECT. + (rs6000_output_mi_thunk): Change reference of flag_pic to + MACHOPIC_INDIRECT. + (output_profile_hook): Likewise. + (machopic_output_stub): Non-pure (dynamic-no-pic) is now supported. + * config/rs6000/rs6000.md (movdf_low): Add the case for + MACHO_DYNAMIC_NO_PIC_P. + (call): Change references for flag_pic in TARGET_MACHO to + MACHOPIC_INDIRECT. + (SUBTARGET_OVERRIDE_OPTIONS): Add case where -fpic is on and + -mdynamic-no-pic is on. Also move case for -fpic from rs6000.c. + * doc/invoke.texi (-mdynamic-no-pic): Document. 2003-03-10 Devang Patel <dpatel@apple.com> @@ -16,7 +65,6 @@ check_function_return_warnings up to just after delete_unreachable_blocks. - 2003-03-10 Stephane Carrez <stcarrez@nerim.fr> * config/m68hc11/m68hc11.h (HARD_REGNO_RENAME_OK): Define. diff --git a/gcc/config/darwin.c b/gcc/config/darwin.c index 376f1fb..86b3425 100644 --- a/gcc/config/darwin.c +++ b/gcc/config/darwin.c @@ -231,6 +231,9 @@ machopic_function_base_name () static const char *name = NULL; static const char *current_name; + /* if dynamic-no-pic is on, we should not get here */ + if (MACHO_DYNAMIC_NO_PIC_P) + abort (); current_name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (current_function_decl)); if (name != current_name) @@ -426,7 +429,20 @@ machopic_indirect_data_reference (orig, reg) { const char *name = XSTR (orig, 0); - if (machopic_data_defined_p (name)) + int defined = machopic_data_defined_p (name); + + if (defined && MACHO_DYNAMIC_NO_PIC_P) + { +#if defined (TARGET_TOC) + emit_insn (gen_macho_high (reg, orig)); + emit_insn (gen_macho_low (reg, reg, orig)); +#else + /* some other cpu -- writeme! */ + abort (); +#endif + return reg; + } + else if (defined) { #if defined (TARGET_TOC) || defined (HAVE_lo_sum) rtx pic_base = gen_rtx (SYMBOL_REF, Pmode, @@ -569,7 +585,7 @@ machopic_legitimize_pic_address (orig, mode, reg) { rtx pic_ref = orig; - if (! MACHOPIC_PURE) + if (! MACHOPIC_INDIRECT) return orig; /* First handle a simple SYMBOL_REF or LABEL_REF */ @@ -592,6 +608,10 @@ machopic_legitimize_pic_address (orig, mode, reg) return reg; } + /* if dynamic-no-pic then use 0 as the pic base */ + if (MACHO_DYNAMIC_NO_PIC_P) + pic_base = CONST0_RTX (Pmode); + else pic_base = gen_rtx (SYMBOL_REF, Pmode, machopic_function_base_name ()); if (GET_CODE (orig) == MEM) @@ -605,6 +625,27 @@ machopic_legitimize_pic_address (orig, mode, reg) } #ifdef HAVE_lo_sum + if (MACHO_DYNAMIC_NO_PIC_P + && (GET_CODE (XEXP (orig, 0)) == SYMBOL_REF + || GET_CODE (XEXP (orig, 0)) == LABEL_REF)) + { +#if defined (TARGET_TOC) /* ppc */ + rtx temp_reg = (no_new_pseudos) ? reg : gen_reg_rtx (Pmode); + rtx asym = XEXP (orig, 0); + rtx mem; + + emit_insn (gen_macho_high (temp_reg, asym)); + mem = gen_rtx_MEM (GET_MODE (orig), + gen_rtx (LO_SUM, Pmode, temp_reg, asym)); + RTX_UNCHANGING_P (mem) = 1; + emit_insn (gen_rtx (SET, VOIDmode, reg, mem)); +#else + /* Some other CPU -- WriteMe! but right now there are no other platform that can use dynamic-no-pic */ + abort (); +#endif + pic_ref = reg; + } + else if (GET_CODE (XEXP (orig, 0)) == SYMBOL_REF || GET_CODE (XEXP (orig, 0)) == LABEL_REF) { @@ -692,7 +733,9 @@ machopic_legitimize_pic_address (orig, mode, reg) hi_sum_reg = reg; emit_insn (gen_rtx (SET, Pmode, hi_sum_reg, - gen_rtx (PLUS, Pmode, + (MACHO_DYNAMIC_NO_PIC_P) + ? gen_rtx (HIGH, Pmode, offset) + : gen_rtx (PLUS, Pmode, pic_offset_table_rtx, gen_rtx (HIGH, Pmode, offset)))); emit_insn (gen_rtx (SET, VOIDmode, reg, @@ -1137,7 +1180,8 @@ machopic_select_section (exp, reloc, align) objc_string_object_section (); else if (TREE_READONLY (exp) || TREE_CONSTANT (exp)) { - if (TREE_SIDE_EFFECTS (exp) || (flag_pic && reloc)) + + if (TREE_SIDE_EFFECTS (exp) || (MACHOPIC_INDIRECT && reloc)) const_data_section (); else readonly_data_section (); @@ -1200,7 +1244,8 @@ machopic_select_section (exp, reloc, align) else if ((TREE_READONLY (exp) || TREE_CONSTANT (exp)) && !TREE_SIDE_EFFECTS (exp)) { - if (flag_pic && reloc) + + if (MACHOPIC_INDIRECT && reloc) const_data_section (); else readonly_data_section (); @@ -1210,7 +1255,8 @@ machopic_select_section (exp, reloc, align) } else if (TREE_READONLY (exp) || TREE_CONSTANT (exp)) { - if (TREE_SIDE_EFFECTS (exp) || (flag_pic && reloc)) + + if (TREE_SIDE_EFFECTS (exp) || (MACHOPIC_INDIRECT && reloc)) const_data_section (); else readonly_data_section (); @@ -1243,14 +1289,16 @@ machopic_asm_out_constructor (symbol, priority) rtx symbol; int priority ATTRIBUTE_UNUSED; { - if (flag_pic) + + if (MACHOPIC_INDIRECT) mod_init_section (); else constructor_section (); assemble_align (POINTER_SIZE); assemble_integer (symbol, POINTER_SIZE / BITS_PER_UNIT, POINTER_SIZE, 1); - if (!flag_pic) + + if (! MACHOPIC_INDIRECT) fprintf (asm_out_file, ".reference .constructors_used\n"); } @@ -1259,14 +1307,15 @@ machopic_asm_out_destructor (symbol, priority) rtx symbol; int priority ATTRIBUTE_UNUSED; { - if (flag_pic) + + if (MACHOPIC_INDIRECT) mod_term_section (); else destructor_section (); assemble_align (POINTER_SIZE); assemble_integer (symbol, POINTER_SIZE / BITS_PER_UNIT, POINTER_SIZE, 1); - if (!flag_pic) + if (! MACHOPIC_INDIRECT) fprintf (asm_out_file, ".reference .destructors_used\n"); } diff --git a/gcc/config/darwin.h b/gcc/config/darwin.h index c043c0c..8826a7d 100644 --- a/gcc/config/darwin.h +++ b/gcc/config/darwin.h @@ -676,7 +676,7 @@ objc_section_init () \ #define ASM_DECLARE_UNRESOLVED_REFERENCE(FILE,NAME) \ do { \ if (FILE) { \ - if (flag_pic) \ + if (MACHOPIC_INDIRECT) \ fprintf (FILE, "\t.lazy_reference "); \ else \ fprintf (FILE, "\t.reference "); \ @@ -722,9 +722,10 @@ enum machopic_addr_class { /* Macros defining the various PIC cases. */ -#define MACHOPIC_INDIRECT (flag_pic) -#define MACHOPIC_JUST_INDIRECT (flag_pic == 1) -#define MACHOPIC_PURE (flag_pic == 2) +#define MACHO_DYNAMIC_NO_PIC_P (TARGET_DYNAMIC_NO_PIC) +#define MACHOPIC_INDIRECT (flag_pic || MACHO_DYNAMIC_NO_PIC_P) +#define MACHOPIC_JUST_INDIRECT (flag_pic == 1 || MACHO_DYNAMIC_NO_PIC_P) +#define MACHOPIC_PURE (flag_pic == 2 && ! MACHO_DYNAMIC_NO_PIC_P) #undef TARGET_ENCODE_SECTION_INFO #define TARGET_ENCODE_SECTION_INFO darwin_encode_section_info diff --git a/gcc/config/i386/darwin.h b/gcc/config/i386/darwin.h index 55c29fd..4388189 100644 --- a/gcc/config/i386/darwin.h +++ b/gcc/config/i386/darwin.h @@ -68,6 +68,11 @@ Boston, MA 02111-1307, USA. */ #undef TARGET_DEEP_BRANCH_PREDICTION #define TARGET_DEEP_BRANCH_PREDICTION 0 +/* For now, disable dynamic-no-pic. We'll need to go through i386.c + with a fine-tooth comb looking for refs to flag_pic! */ +#define MASK_MACHO_DYNAMIC_NO_PIC 0 +#define TARGET_DYNAMIC_NO_PIC (target_flags & MASK_MACHO_DYNAMIC_NO_PIC) + /* Define the syntax of pseudo-ops, labels and comments. */ #define LPREFIX "L" diff --git a/gcc/config/rs6000/darwin.h b/gcc/config/rs6000/darwin.h index 9fceb6a..e6324af 100644 --- a/gcc/config/rs6000/darwin.h +++ b/gcc/config/rs6000/darwin.h @@ -35,14 +35,15 @@ Boston, MA 02111-1307, USA. */ #define TARGET_TOC 0 #define TARGET_NO_TOC 1 +/* Darwin switches. */ +/* Use dynamic-no-pic codegen (no picbase reg; not suitable for shlibs.) */ +#define MASK_MACHO_DYNAMIC_NO_PIC 0x00800000 + +#define TARGET_DYNAMIC_NO_PIC (target_flags & MASK_MACHO_DYNAMIC_NO_PIC) + /* Handle #pragma weak and #pragma pack. */ #define HANDLE_SYSV_PRAGMA 1 -/* The Darwin ABI always includes AltiVec, can't be (validly) turned - off. */ - -#define SUBTARGET_OVERRIDE_OPTIONS \ - rs6000_altivec_abi = 1; #define TARGET_OS_CPP_BUILTINS() \ do \ @@ -55,12 +56,45 @@ Boston, MA 02111-1307, USA. */ } \ while (0) + +/* */ +#undef SUBTARGET_SWITCHES +#define SUBTARGET_SWITCHES \ + {"dynamic-no-pic", MASK_MACHO_DYNAMIC_NO_PIC, \ + N_("Generate code suitable for executables (NOT shared libs)")}, \ + {"no-dynamic-no-pic", -MASK_MACHO_DYNAMIC_NO_PIC, ""}, + + +/* The Darwin ABI always includes AltiVec, can't be (validly) turned + off. */ + +#define SUBTARGET_OVERRIDE_OPTIONS \ +do { \ + rs6000_altivec_abi = 1; \ + if (DEFAULT_ABI == ABI_DARWIN) \ + { \ + if (MACHO_DYNAMIC_NO_PIC_P) \ + { \ + if (flag_pic) \ + warning ("-mdynamic-no-pic overrides -fpic or -fPIC"); \ + flag_pic = 0; \ + } \ + else if (flag_pic == 1) \ + { \ + /* Darwin doesn't support -fpic. */ \ + warning ("-fpic is not supported; -fPIC assumed"); \ + flag_pic = 2; \ + } \ + } \ +}while(0) + /* We want -fPIC by default, unless we're using -static to compile for the kernel or some such. */ + #define CC1_SPEC "\ %{static: %{Zdynamic: %e conflicting code gen style switches are used}}\ -%{!static:-fPIC}" +%{!static:%{!mdynamic-no-pic:-fPIC}}" /* Make both r2 and r3 available for allocation. */ #define FIXED_R2 0 diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index ec9008d..c1ed476 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -643,10 +643,6 @@ rs6000_override_options (default_cpu) flag_pic = 0; } - /* For Darwin, always silently make -fpic and -fPIC identical. */ - if (flag_pic == 1 && DEFAULT_ABI == ABI_DARWIN) - flag_pic = 2; - /* Set debug flags */ if (rs6000_debug_name) { @@ -2228,6 +2224,9 @@ rs6000_legitimize_address (x, oldx, mode) } else if (TARGET_MACHO && TARGET_32BIT && TARGET_NO_TOC && ! flag_pic +#if TARGET_MACHO + && ! MACHO_DYNAMIC_NO_PIC_P +#endif && GET_CODE (x) != CONST_INT && GET_CODE (x) != CONST_DOUBLE && CONSTANT_P (x) @@ -2367,6 +2366,20 @@ rs6000_legitimize_reload_address (x, mode, opnum, type, ind_levels, win) *win = 1; return x; } + if (GET_CODE (x) == SYMBOL_REF + && DEFAULT_ABI == ABI_DARWIN + && !ALTIVEC_VECTOR_MODE (mode) + && MACHO_DYNAMIC_NO_PIC_P) + { + /* Darwin load of floating point constant. */ + x = gen_rtx (LO_SUM, GET_MODE (x), + gen_rtx (HIGH, Pmode, x), x); + push_reload (XEXP (x, 0), NULL_RTX, &XEXP (x, 0), NULL, + BASE_REG_CLASS, Pmode, VOIDmode, 0, 0, + opnum, (enum reload_type)type); + *win = 1; + return x; + } #endif if (TARGET_TOC && CONSTANT_POOL_EXPR_P (x) @@ -2780,6 +2793,18 @@ rs6000_emit_move (dest, source, mode) if (DEFAULT_ABI == ABI_DARWIN) { +#if TARGET_MACHO + if (MACHO_DYNAMIC_NO_PIC_P) + { + /* Take care of any required data indirection. */ + operands[1] = rs6000_machopic_legitimize_pic_address ( + operands[1], mode, operands[0]); + if (operands[0] != operands[1]) + emit_insn (gen_rtx_SET (VOIDmode, + operands[0], operands[1])); + return; + } +#endif emit_insn (gen_macho_high (target, operands[1])); emit_insn (gen_macho_low (operands[0], target, operands[1])); return; @@ -2824,7 +2849,7 @@ rs6000_emit_move (dest, source, mode) #if TARGET_MACHO /* Darwin uses a special PIC legitimizer. */ - if (DEFAULT_ABI == ABI_DARWIN && flag_pic) + if (DEFAULT_ABI == ABI_DARWIN && MACHOPIC_INDIRECT) { operands[1] = rs6000_machopic_legitimize_pic_address (operands[1], mode, @@ -7213,7 +7238,11 @@ secondary_reload_class (class, mode, in) { int regno; - if (TARGET_ELF || (DEFAULT_ABI == ABI_DARWIN && flag_pic)) + if (TARGET_ELF || (DEFAULT_ABI == ABI_DARWIN +#if TARGET_MACHO + && MACHOPIC_INDIRECT +#endif + )) { /* We cannot copy a symbolic operand directly into anything other than BASE_REGS for TARGET_ELF. So indicate that a @@ -11567,7 +11596,7 @@ rs6000_output_mi_thunk (file, thunk_fndecl, delta, vcall_offset, function) funexp = gen_rtx_MEM (FUNCTION_MODE, funexp); #if TARGET_MACHO - if (flag_pic) + if (MACHOPIC_INDIRECT) funexp = machopic_indirect_call_target (funexp); #endif @@ -12218,7 +12247,7 @@ output_profile_hook (labelno) #if TARGET_MACHO /* For PIC code, set up a stub and collect the caller's address from r0, which is where the prologue puts it. */ - if (flag_pic) + if (MACHOPIC_INDIRECT) { mcount_name = machopic_stub_name (mcount_name); if (current_function_uses_pic_offset_table) @@ -13106,7 +13135,12 @@ machopic_output_stub (file, symb, stub) fprintf (file, "\tbctr\n"); } else - fprintf (file, "non-pure not supported\n"); + { + fprintf (file, "\tlis r11,ha16(%s)\n", lazy_ptr_name); + fprintf (file, "\tlwzu r12,lo16(%s)(r11)\n", lazy_ptr_name); + fprintf (file, "\tmtctr r12\n"); + fprintf (file, "\tbctr\n"); + } machopic_lazy_symbol_ptr_section (); fprintf (file, "%s:\n", lazy_ptr_name); diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md index d734bdb..ae4c65d 100644 --- a/gcc/config/rs6000/rs6000.md +++ b/gcc/config/rs6000/rs6000.md @@ -7531,9 +7531,14 @@ operands2[2] = operands[2]; operands2[3] = gen_rtx_REG (SImode, RS6000_PIC_OFFSET_TABLE_REGNUM); output_asm_insn (\"{l|lwz} %0,lo16(%2)(%1)\", operands); +#if TARGET_MACHO + if (MACHO_DYNAMIC_NO_PIC_P) + output_asm_insn (\"{liu|lis} %L0,ha16(%2+4)\", operands); + else /* We cannot rely on ha16(low half)==ha16(high half), alas, although in practice it almost always is. */ output_asm_insn (\"{cau|addis} %L0,%3,ha16(%2+4)\", operands2); +#endif return (\"{l|lwz} %L0,lo16(%2+4)(%L0)\"); } default: @@ -9986,7 +9991,7 @@ " { #if TARGET_MACHO - if (flag_pic) + if (MACHOPIC_INDIRECT) operands[0] = machopic_indirect_call_target (operands[0]); #endif @@ -10034,7 +10039,7 @@ " { #if TARGET_MACHO - if (flag_pic) + if (MACHOPIC_INDIRECT) operands[1] = machopic_indirect_call_target (operands[1]); #endif @@ -10399,7 +10404,7 @@ " { #if TARGET_MACHO - if (flag_pic) + if (MACHOPIC_INDIRECT) operands[0] = machopic_indirect_call_target (operands[0]); #endif @@ -10586,7 +10591,7 @@ " { #if TARGET_MACHO - if (flag_pic) + if (MACHOPIC_INDIRECT) operands[1] = machopic_indirect_call_target (operands[1]); #endif diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index c779bfb..f26de77 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -441,6 +441,7 @@ in the following sections. -mstrict-align -mno-strict-align -mrelocatable @gol -mno-relocatable -mrelocatable-lib -mno-relocatable-lib @gol -mtoc -mno-toc -mlittle -mlittle-endian -mbig -mbig-endian @gol +-mdynamic-no-pic @gol -mcall-aix -mcall-sysv -mcall-netbsd @gol -maix-struct-return -msvr4-struct-return @gol -mabi=altivec -mabi=no-altivec @gol @@ -7225,6 +7226,13 @@ On System V.4 and embedded PowerPC systems compile code for the processor in big endian mode. The @option{-mbig-endian} option is the same as @option{-mbig}. +@item -mdynamic-no-pic +@opindex mdynamic-no-pic +On Darwin and Mac OS X systems, compile code so that it is not +relocatable, but that its external references are relocatable. The +resulting code is suitable for applications, but not shared +libraries. + @item -mcall-sysv @opindex mcall-sysv On System V.4 and embedded PowerPC systems compile code using calling |