* ARM EABI wchar_t annotations
@ 2007-11-05 16:46 Paul Brook
0 siblings, 0 replies; only message in thread
From: Paul Brook @ 2007-11-05 16:46 UTC (permalink / raw)
To: gcc-patches
[-- Attachment #1: Type: text/plain, Size: 816 bytes --]
The attached patch fixes ARM EABI object file annotations for the size of
wchar_t. I posted this a while ago, but trunk was frozen at the time and I
have only just got round to applying it.
Tested on arm-none-eabi.
Applied to trunk.
Paul
2007-11-05 Paul Brook <paul@codesourcery.com>
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.
[-- Attachment #2: patch.wchar_size_head --]
[-- Type: text/x-diff, Size: 4708 bytes --]
Index: gcc/config.gcc
===================================================================
--- gcc/config.gcc (revision 129603)
+++ gcc/config.gcc (working copy)
@@ -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
Index: gcc/config/arm/arm.c
===================================================================
--- gcc/config/arm/arm.c (revision 129603)
+++ gcc/config/arm/arm.c (working copy)
@@ -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: gcc/config/arm/arm.h
===================================================================
--- gcc/config/arm/arm.h (revision 129603)
+++ gcc/config/arm/arm.h (working copy)
@@ -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: gcc/config/arm/arm-protos.h
===================================================================
--- gcc/config/arm/arm-protos.h (revision 129603)
+++ gcc/config/arm/arm-protos.h (working copy)
@@ -207,6 +207,8 @@ extern void arm_pr_long_calls (struct cp
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: gcc/config/arm/t-arm
===================================================================
--- gcc/config/arm/t-arm (revision 129603)
+++ gcc/config/arm/t-arm (working copy)
@@ -23,3 +23,8 @@ $(srcdir)/config/arm/arm-tune.md: $(srcd
$(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
+
Index: gcc/config/arm/arm-c.c
===================================================================
--- gcc/config/arm/arm-c.c (revision 0)
+++ gcc/config/arm/arm-c.c (revision 0)
@@ -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;
+}
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2007-11-05 16:46 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-11-05 16:46 ARM EABI wchar_t annotations Paul Brook
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).