Mercurial > hg > CbC > CbC_gcc
diff gcc/config/darwin.c @ 55:77e2b8dfacca gcc-4.4.5
update it from 4.4.3 to 4.5.0
author | ryoma <e075725@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 12 Feb 2010 23:39:51 +0900 |
parents | a06113de4d67 |
children | b7f97abdc517 |
line wrap: on
line diff
--- a/gcc/config/darwin.c Sun Feb 07 18:28:00 2010 +0900 +++ b/gcc/config/darwin.c Fri Feb 12 23:39:51 2010 +0900 @@ -1,6 +1,6 @@ /* Functions for generic Darwin as target machine for GNU C compiler. Copyright (C) 1989, 1990, 1991, 1992, 1993, 2000, 2001, 2002, 2003, 2004, - 2005, 2006, 2007, 2008 + 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Contributed by Apple Computer Inc. @@ -281,7 +281,7 @@ { /* Play games to avoid marking the function as needing pic if we are being called as part of the cost-estimation process. */ - if (current_ir_type () != IR_GIMPLE) + if (current_ir_type () != IR_GIMPLE || currently_expanding_to_rtl) crtl->uses_pic_offset_table = 1; orig = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, orig), UNSPEC_MACHOPIC_OFFSET); @@ -314,7 +314,7 @@ /* The suffix attached to stub symbols. */ #define STUB_SUFFIX "$stub" -typedef struct machopic_indirection GTY (()) +typedef struct GTY (()) machopic_indirection { /* The SYMBOL_REF for the entity referenced. */ rtx symbol; @@ -1373,6 +1373,25 @@ default_globalize_label (stream, name); } +/* This routine returns non-zero if 'name' starts with the special objective-c + anonymous file-scope static name. It accommodates c++'s mangling of such + symbols (in this case the symbols will have form _ZL{d}*_OBJC_* d=digit). */ + +int +darwin_label_is_anonymous_local_objc_name (const char *name) +{ + const unsigned char *p = (const unsigned char *) name; + if (*p != '_') + return 0; + if (p[1] == 'Z' && p[2] == 'L') + { + p += 3; + while (*p >= '0' && *p <= '9') + p++; + } + return (!strncmp ((const char *)p, "_OBJC_", 6)); +} + void darwin_asm_named_section (const char *name, unsigned int flags ATTRIBUTE_UNUSED, @@ -1407,15 +1426,15 @@ /* APPLE KEXT stuff -- only applies with pure static C++ code. */ if (! TARGET_KEXTABI) { - warning (0, "%<%s%> 2.95 vtable-compatibility attribute applies " - "only when compiling a kext", IDENTIFIER_POINTER (name)); + warning (0, "%qE 2.95 vtable-compatibility attribute applies " + "only when compiling a kext", name); *no_add_attrs = true; } else if (TREE_CODE (*node) != RECORD_TYPE) { - warning (0, "%<%s%> 2.95 vtable-compatibility attribute applies " - "only to C++ classes", IDENTIFIER_POINTER (name)); + warning (0, "%qE 2.95 vtable-compatibility attribute applies " + "only to C++ classes", name); *no_add_attrs = true; } @@ -1434,8 +1453,8 @@ { if (TREE_CODE (*node) != FUNCTION_DECL && TREE_CODE (*node) != VAR_DECL) { - warning (OPT_Wattributes, "%qs attribute ignored", - IDENTIFIER_POINTER (name)); + warning (OPT_Wattributes, "%qE attribute ignored", + name); *no_add_attrs = true; } else @@ -1692,6 +1711,22 @@ void darwin_override_options (void) { + /* Don't emit DWARF3/4 unless specifically selected. This is a + workaround for tool bugs. */ + if (dwarf_strict < 0) + dwarf_strict = 1; + + /* Disable -freorder-blocks-and-partition for darwin_emit_unwind_label. */ + if (flag_reorder_blocks_and_partition + && (targetm.asm_out.unwind_label == darwin_emit_unwind_label)) + { + inform (input_location, + "-freorder-blocks-and-partition does not work with exceptions " + "on this architecture"); + flag_reorder_blocks_and_partition = 0; + flag_reorder_blocks = 1; + } + if (flag_mkernel || flag_apple_kext) { /* -mkernel implies -fapple-kext for C++ */