summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilip Blundell <philb@gnu.org>2001-03-19 19:56:37 +0000
committerNick Clifton <nickc@gcc.gnu.org>2001-03-19 19:56:37 +0000
commit77af5c469cc97c0348504a67e870fdb816c58abc (patch)
tree473b6ed004019de928599251f5c26d2b515603da
parent085072bbd398e257f6fe28ff2f63dd2a1c95d435 (diff)
downloadgcc-77af5c469cc97c0348504a67e870fdb816c58abc.tar.gz
Add support for unique sections in arm-linux target.
From-SVN: r40632
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/arm/linux-elf.h38
2 files changed, 43 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 0eb39de722a..cf7f7e4c81f 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2001-03-19 Philip Blundell <philb@gnu.org>
+
+ * arm/linux-elf.h (MAKE_DECL_ONE_ONLY, UNIQUE_SECTION_P): Define.
+ (UNIQUE_SECTION): Define.
+
2001-03-19 Mark Mitchell <mark@codesourcery.com>
* cse.c (find_comparison_args): Update documentation. Fix
diff --git a/gcc/config/arm/linux-elf.h b/gcc/config/arm/linux-elf.h
index 09e4e156f72..cef9896705c 100644
--- a/gcc/config/arm/linux-elf.h
+++ b/gcc/config/arm/linux-elf.h
@@ -235,6 +235,44 @@ const_section () \
go into the const section. */
#define SELECT_RTX_SECTION(MODE,RTX) const_section ()
+#define MAKE_DECL_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 1)
+#define UNIQUE_SECTION_P(DECL) (DECL_ONE_ONLY (DECL))
+
+#define UNIQUE_SECTION(DECL, RELOC) \
+ do \
+ { \
+ int len; \
+ char *name; \
+ char *string; \
+ char *prefix; \
+ \
+ name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (DECL)); \
+ \
+ if (! DECL_ONE_ONLY (DECL)) \
+ { \
+ prefix = "."; \
+ if (TREE_CODE (DECL) == FUNCTION_DECL) \
+ prefix = ".text."; \
+ else if (DECL_READONLY_SECTION (DECL, RELOC)) \
+ prefix = ".rodata."; \
+ else \
+ prefix = ".data."; \
+ } \
+ else if (TREE_CODE (DECL) == FUNCTION_DECL) \
+ prefix = ".gnu.linkonce.t."; \
+ else if (DECL_READONLY_SECTION (DECL, RELOC)) \
+ prefix = ".gnu.linkonce.r."; \
+ else \
+ prefix = ".gnu.linkonce.d."; \
+ \
+ len = strlen (name) + strlen (prefix); \
+ string = alloca (len + 1); \
+ sprintf (string, "%s%s", prefix, name); \
+ \
+ DECL_SECTION_NAME (DECL) = build_string (len, string); \
+ } \
+ while (0)
+
/* On svr4, we *do* have support for the .init and .fini sections, and we
can put stuff in there to be executed before and after `main'. We let
crtstuff.c and other files know this by defining the following symbols.