diff options
author | David Edelsohn <edelsohn@gnu.org> | 2002-09-04 18:11:18 +0000 |
---|---|---|
committer | David Edelsohn <dje@gcc.gnu.org> | 2002-09-04 14:11:18 -0400 |
commit | 275b6d80edeb5c40e217f75de3c50956ba5c8019 (patch) | |
tree | 14249a66a863f3cb90c2a01b57d8301ed45902dc | |
parent | 015b1ad1dfa8fbd7323691515a5c1c38c4c1541d (diff) | |
download | gcc-275b6d80edeb5c40e217f75de3c50956ba5c8019.zip gcc-275b6d80edeb5c40e217f75de3c50956ba5c8019.tar.gz gcc-275b6d80edeb5c40e217f75de3c50956ba5c8019.tar.bz2 |
target-def.h (TARGET_HAVE_SRODATA_SECTION): New macro.
* target-def.h (TARGET_HAVE_SRODATA_SECTION): New macro.
* target.h (gcc_target): Add have_srodata_section member.
* varasm.c (section_category): Add SECCAT_SRODATA.
(categorize_decl_for_section): Return SECCAT_SRODATA for sdata if
READONLY_SDATA_SECTION defined.
(decl_readonly_section_1): True for SECCAT_SRODATA also.
(default_elf_select_section_1): Map SECCAT_SRODATA to .sdata2.
(default_unique_section_1): Likewise.
From-SVN: r56806
-rw-r--r-- | gcc/ChangeLog | 11 | ||||
-rw-r--r-- | gcc/target-def.h | 10 | ||||
-rw-r--r-- | gcc/target.h | 3 | ||||
-rw-r--r-- | gcc/varasm.c | 10 |
4 files changed, 33 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e7d7646..3713dd0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,14 @@ +2002-09-04 David Edelsohn <edelsohn@gnu.org> + + * target-def.h (TARGET_HAVE_SRODATA_SECTION): New macro. + * target.h (gcc_target): Add have_srodata_section member. + * varasm.c (section_category): Add SECCAT_SRODATA. + (categorize_decl_for_section): Return SECCAT_SRODATA for sdata if + READONLY_SDATA_SECTION defined. + (decl_readonly_section_1): True for SECCAT_SRODATA also. + (default_elf_select_section_1): Map SECCAT_SRODATA to .sdata2. + (default_unique_section_1): Likewise. + 2002-09-04 John David Anglin <dave@hiauly1.hia.nrc.ca> * expr.c (emit_group_load): Revise to allow splitting TCmode source diff --git a/gcc/target-def.h b/gcc/target-def.h index b2bf074..897ad54 100644 --- a/gcc/target-def.h +++ b/gcc/target-def.h @@ -118,6 +118,10 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #define TARGET_HAVE_TLS false #endif +#ifndef TARGET_HAVE_SRODATA_SECTION +#define TARGET_HAVE_SRODATA_SECTION false +#endif + #ifndef TARGET_ASM_EXCEPTION_SECTION #define TARGET_ASM_EXCEPTION_SECTION default_exception_section #endif @@ -224,7 +228,10 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. /* In hook.c. */ #define TARGET_CANNOT_MODIFY_JUMPS_P hook_void_bool_false + +#ifndef TARGET_IN_SMALL_DATA_P #define TARGET_IN_SMALL_DATA_P hook_tree_bool_false +#endif #ifndef TARGET_ENCODE_SECTION_INFO #define TARGET_ENCODE_SECTION_INFO hook_tree_int_void @@ -253,7 +260,8 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. TARGET_STRIP_NAME_ENCODING, \ TARGET_HAVE_NAMED_SECTIONS, \ TARGET_HAVE_CTORS_DTORS, \ - TARGET_HAVE_TLS \ + TARGET_HAVE_TLS, \ + TARGET_HAVE_SRODATA_SECTION \ } #include "hooks.h" diff --git a/gcc/target.h b/gcc/target.h index b63fc0f..6bb1bb0 100644 --- a/gcc/target.h +++ b/gcc/target.h @@ -262,6 +262,9 @@ struct gcc_target /* True if thread-local storage is supported. */ bool have_tls; + + /* True if a small readonly data section is supported. */ + bool have_srodata_section; }; extern struct gcc_target targetm; diff --git a/gcc/varasm.c b/gcc/varasm.c index e84a289..02078a3 100644 --- a/gcc/varasm.c +++ b/gcc/varasm.c @@ -4898,6 +4898,7 @@ enum section_category SECCAT_RODATA_MERGE_STR, SECCAT_RODATA_MERGE_STR_INIT, SECCAT_RODATA_MERGE_CONST, + SECCAT_SRODATA, SECCAT_DATA, @@ -4999,6 +5000,8 @@ categorize_decl_for_section (decl, reloc, shlib) { if (ret == SECCAT_BSS) ret = SECCAT_SBSS; + else if (targetm.have_srodata_section && ret == SECCAT_RODATA) + ret = SECCAT_SRODATA; else ret = SECCAT_SDATA; } @@ -5026,6 +5029,7 @@ decl_readonly_section_1 (decl, reloc, shlib) case SECCAT_RODATA_MERGE_STR: case SECCAT_RODATA_MERGE_STR_INIT: case SECCAT_RODATA_MERGE_CONST: + case SECCAT_SRODATA: return true; break; default: @@ -5069,6 +5073,9 @@ default_elf_select_section_1 (decl, reloc, align, shlib) case SECCAT_RODATA_MERGE_CONST: mergeable_constant_section (DECL_MODE (decl), align, 0); break; + case SECCAT_SRODATA: + named_section (NULL_TREE, ".sdata2", reloc); + break; case SECCAT_DATA: data_section (); break; @@ -5141,6 +5148,9 @@ default_unique_section_1 (decl, reloc, shlib) case SECCAT_RODATA_MERGE_CONST: prefix = one_only ? ".gnu.linkonce.r." : ".rodata."; break; + case SECCAT_SRODATA: + prefix = one_only ? ".gnu.linkonce.s2." : ".sdata2."; + break; case SECCAT_DATA: case SECCAT_DATA_REL: case SECCAT_DATA_REL_LOCAL: |