diff options
author | Philip Blundell <philb@gnu.org> | 2001-03-19 19:56:37 +0000 |
---|---|---|
committer | Nick Clifton <nickc@gcc.gnu.org> | 2001-03-19 19:56:37 +0000 |
commit | 77af5c469cc97c0348504a67e870fdb816c58abc (patch) | |
tree | 473b6ed004019de928599251f5c26d2b515603da | |
parent | 085072bbd398e257f6fe28ff2f63dd2a1c95d435 (diff) | |
download | gcc-77af5c469cc97c0348504a67e870fdb816c58abc.tar.gz |
Add support for unique sections in arm-linux target.
From-SVN: r40632
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/arm/linux-elf.h | 38 |
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. |