OSDN Git Service

2007-11-05 Paul Brook <paul@codesourcery.com>
authorpbrook <pbrook@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 5 Nov 2007 17:13:46 +0000 (17:13 +0000)
committerpbrook <pbrook@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 5 Nov 2007 17:13:46 +0000 (17:13 +0000)
gcc/
* config.gcc (arm*-*-*): Set c_target_objs and cxx_target_objs.
* config/arm/arm.c (arm_lang_output_object_attributes_hook): New.
(arm_file_start): Don't set Tag_ABI_PCS_wchar_t.  Call
arm_lang_output_object_attributes_hook.
* config/arm/arm.h (arm_lang_output_object_attributes_hook): Declare.
(REGISTER_TARGET_PRAGMAS): Call arm_lang_object_attributes_init.
* config/arm/arm-protos.h (arm_lang_object_attributes_init): Add
prototype.
* config/arm/t-arm.c (arm.o): New rule.
* config/arm/arm-c.c: New file.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@129904 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config.gcc
gcc/config/arm/arm-c.c [new file with mode: 0644]
gcc/config/arm/arm-protos.h
gcc/config/arm/arm.c
gcc/config/arm/arm.h
gcc/config/arm/t-arm

index 0a5f2d8..5c27131 100644 (file)
@@ -1,3 +1,20 @@
+2007-11-05  Paul Brook  <paul@codesourcery.com>
+
+       * Makefile.target: Add ssd0303.o, pl022.o and ssd0323.o.
+       * vl.c (register_machines): Add lm3s6965evb_machine.
+       * vl.h (armv7m_init): Add.
+       (lm3s6965evb_machine): Declare.
+       (pl022_init): New prototype.
+       (ssd0323_xfer_ssi, ssd0323_init): New prototype.
+       * hw/ssd0323.c: New file.
+       * hw/armv7m.c (armv7m_init): Remove board init code.
+       (lm3s811evb_machine): Remove.
+       * hw/osram_oled.c: Rename...
+       * hw/ssd0303.c: ... to this.
+       * hw/pl022.c: New file.
+       * hw/stellaris.c: Define and use stellaris_boards.
+       (lm3s811evb_machine, lm3s6965evb_machine): New.
+
 2007-11-05  Nick Clifton  <nickc@redhat.com>
            Sebastian Pop  <sebastian.pop@amd.com>
 
index 3c23c25..a46dbd6 100644 (file)
@@ -259,6 +259,8 @@ strongarm*-*-*)
 arm*-*-*)
        cpu_type=arm
        extra_headers="mmintrin.h arm_neon.h"
+       c_target_objs="arm-c.o"
+       cxx_target_objs="arm-c.o"
        ;;
 bfin*-*)
        cpu_type=bfin
diff --git a/gcc/config/arm/arm-c.c b/gcc/config/arm/arm-c.c
new file mode 100644 (file)
index 0000000..60cf5a9
--- /dev/null
@@ -0,0 +1,27 @@
+#include "config.h"
+#include "system.h"
+#include "coretypes.h"
+#include "tm.h"
+#include "tm_p.h"
+#include "tree.h"
+#include "output.h"
+#include "c-common.h"
+
+
+/* Output C specific EABI object attributes.  These can not be done in
+   arm.c because they require information from the C frontend.  */
+
+static void arm_output_c_attributes(void)
+{
+  /* Tag_ABI_PCS_wchar_t.  */
+  asm_fprintf (asm_out_file, "\t.eabi_attribute 18, %d\n",
+              (int)(TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT));
+}
+
+
+/* Setup so that common code calls arm_output_c_attributes.  */
+
+void arm_lang_object_attributes_init(void)
+{
+  arm_lang_output_object_attributes_hook = arm_output_c_attributes;
+}
index a13b82a..3a71744 100644 (file)
@@ -207,6 +207,8 @@ extern void arm_pr_long_calls (struct cpp_reader *);
 extern void arm_pr_no_long_calls (struct cpp_reader *);
 extern void arm_pr_long_calls_off (struct cpp_reader *);
 
+extern void arm_lang_object_attributes_init(void);
+
 extern const char *arm_mangle_type (const_tree);
 
 #endif /* ! GCC_ARM_PROTOS_H */
index e4b30b3..f09606c 100644 (file)
@@ -59,6 +59,8 @@ typedef struct minipool_fixup   Mfix;
 
 const struct attribute_spec arm_attribute_table[];
 
+void (*arm_lang_output_object_attributes_hook)(void);
+
 /* Forward function declarations.  */
 static arm_stack_offsets *arm_get_frame_offsets (void);
 static void arm_add_gc_roots (void);
@@ -17508,10 +17510,6 @@ arm_file_start (void)
          are used.  However we don't have any easy way of figuring this out.
         Conservatively record the setting that would have been used.  */
 
-      /* Tag_ABI_PCS_wchar_t.  */
-      asm_fprintf (asm_out_file, "\t.eabi_attribute 18, %d\n",
-                  (int)WCHAR_TYPE_SIZE / BITS_PER_UNIT);
-
       /* Tag_ABI_FP_rounding.  */
       if (flag_rounding_math)
        asm_fprintf (asm_out_file, "\t.eabi_attribute 19, 1\n");
@@ -17547,6 +17545,9 @@ arm_file_start (void)
       else
        val = 6;
       asm_fprintf (asm_out_file, "\t.eabi_attribute 30, %d\n", val);
+
+      if (arm_lang_output_object_attributes_hook)
+       arm_lang_output_object_attributes_hook();
     }
   default_file_start();
 }
index 9c8534c..2b83335 100644 (file)
@@ -132,6 +132,8 @@ extern rtx pool_vector_label;
 /* Set to 1 when a return insn is output, this means that the epilogue
    is not needed.  */
 extern int return_used_this_function;
+/* Callback to output language specific object attributes.  */
+extern void (*arm_lang_output_object_attributes_hook)(void);
 \f
 /* Just in case configure has failed to define anything.  */
 #ifndef TARGET_CPU_DEFAULT
@@ -2287,10 +2289,12 @@ extern unsigned arm_pic_register;
 extern int making_const_table;
 \f
 /* Handle pragmas for compatibility with Intel's compilers.  */
+/* Also abuse this to register additional C specific EABI attributes.  */
 #define REGISTER_TARGET_PRAGMAS() do {                                 \
   c_register_pragma (0, "long_calls", arm_pr_long_calls);              \
   c_register_pragma (0, "no_long_calls", arm_pr_no_long_calls);                \
   c_register_pragma (0, "long_calls_off", arm_pr_long_calls_off);      \
+  arm_lang_object_attributes_init(); \
 } while (0)
 
 /* Condition code information.  */
index cde00ee..96e4e49 100644 (file)
@@ -23,3 +23,8 @@ $(srcdir)/config/arm/arm-tune.md: $(srcdir)/config/arm/gentune.sh \
        $(SHELL) $(srcdir)/config/arm/gentune.sh \
                $(srcdir)/config/arm/arm-cores.def > \
                $(srcdir)/config/arm/arm-tune.md
+
+arm-c.o: $(srcdir)/config/arm/arm-c.c $(CONFIG_H) $(SYSTEM_H) \
+    coretypes.h $(TM_H) $(TREE_H) output.h $(C_COMMON_H)
+       $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(srcdir)/config/arm/arm-c.c
+