OSDN Git Service

* gcc.target/powerpc/ppc-sdata-1.c: Require nonpic.
[pf3gnuchains/gcc-fork.git] / gcc / langhooks.c
index 092a323..37baa27 100644 (file)
@@ -1,5 +1,5 @@
 /* Default language-specific hooks.
-   Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+   Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
    Free Software Foundation, Inc.
    Contributed by Alexandre Oliva  <aoliva@redhat.com>
 
@@ -37,7 +37,9 @@ along with GCC; see the file COPYING3.  If not see
 #include "langhooks-def.h"
 #include "ggc.h"
 #include "diagnostic.h"
+#include "tree-diagnostic.h"
 #include "cgraph.h"
+#include "output.h"
 
 /* Do nothing; in many cases the default hook.  */
 
@@ -161,7 +163,7 @@ lhd_set_decl_assembler_name (tree decl)
                  && (TREE_STATIC (decl)
                      || DECL_EXTERNAL (decl)
                      || TREE_PUBLIC (decl))));
-  
+
   /* By default, assume the name to use in assembly code is the same
      as that used in the source language.  (That's correct for C, and
      GCC used to set DECL_ASSEMBLER_NAME to the same value as
@@ -169,7 +171,7 @@ lhd_set_decl_assembler_name (tree decl)
      compatibility with existing front-ends.  This assumption is wrapped
      in a target hook, to allow for target-specific modification of the
      identifier.
+
      Can't use just the variable's own name for a variable whose scope
      is less than the whole compilation.  Concatenate a distinguishing
      number - we use the DECL_UID.  */
@@ -180,7 +182,7 @@ lhd_set_decl_assembler_name (tree decl)
     {
       const char *name = IDENTIFIER_POINTER (DECL_NAME (decl));
       char *label;
-      
+
       ASM_FORMAT_PRIVATE_NAME (label, name, DECL_UID (decl));
       id = get_identifier (label);
     }
@@ -344,7 +346,7 @@ lhd_print_error_function (diagnostic_context *context, const char *file,
   if (diagnostic_last_function_changed (context, diagnostic))
     {
       const char *old_prefix = context->printer->prefix;
-      tree abstract_origin = diagnostic->abstract_origin;
+      tree abstract_origin = diagnostic_abstract_origin (diagnostic);
       char *new_prefix = (file && abstract_origin == NULL)
                         ? file_name_as_prefix (file) : NULL;
 
@@ -584,3 +586,56 @@ lhd_builtin_function (tree decl)
   lang_hooks.decls.pushdecl (decl);
   return decl;
 }
+
+/* LTO hooks.  */
+
+/* Used to save and restore any previously active section.  */
+static section *saved_section;
+
+
+/* Begin a new LTO output section named NAME.  This default implementation
+   saves the old section and emits assembly code to switch to the new
+   section.  */
+
+void
+lhd_begin_section (const char *name)
+{
+  section *section;
+
+  /* Save the old section so we can restore it in lto_end_asm_section.  */
+  gcc_assert (!saved_section);
+  saved_section = in_section;
+  if (!saved_section)
+    saved_section = text_section;
+
+  /* Create a new section and switch to it.  */
+  section = get_section (name, SECTION_DEBUG, NULL);
+  switch_to_section (section);
+}
+
+
+/* Write DATA of length LEN to the current LTO output section.  This default
+   implementation just calls assemble_string and frees BLOCK.  */
+
+void
+lhd_append_data (const void *data, size_t len, void *block)
+{
+  if (data)
+    assemble_string ((const char *)data, len);
+  free (block);
+}
+
+
+/* Finish the current LTO output section.  This default implementation emits
+   assembly code to switch to any section previously saved by
+   lhd_begin_section.  */
+
+void
+lhd_end_section (void)
+{
+  if (saved_section)
+    {
+      switch_to_section (saved_section);
+      saved_section = NULL;
+    }
+}