From: Philip Blundell Date: Mon, 19 Mar 2001 19:56:37 +0000 (+0000) Subject: Add support for unique sections in arm-linux target. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=77af5c469cc97c0348504a67e870fdb816c58abc;p=gcc.git Add support for unique sections in arm-linux target. From-SVN: r40632 --- 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 + + * arm/linux-elf.h (MAKE_DECL_ONE_ONLY, UNIQUE_SECTION_P): Define. + (UNIQUE_SECTION): Define. + 2001-03-19 Mark Mitchell * 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.