diff options
author | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-03-10 00:53:09 +0000 |
---|---|---|
committer | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-03-10 00:53:09 +0000 |
commit | 4e151b05f8a87e819f4c0f74fb6dbccc1c6e3f4d (patch) | |
tree | ddb930f60eed9d2395dd9b4695e612928d440a18 /gcc/config/ia64 | |
parent | 7f0837e316732b8b186f2e2e4b0ef3d58c862894 (diff) | |
download | gcc-4e151b05f8a87e819f4c0f74fb6dbccc1c6e3f4d.tar.gz |
PR target/26090
* target.h (targetm.asm.out.reloc_rw_mask): New.
* target-def.h (TARGET_ASM_RELOC_RW_MASK): New.
(TARGET_ASM_OUT): Use it.
* targhooks.c, targhooks.h (default_reloc_rw_mask): New.
* varasm.c (categorize_decl_for_section): Remove shlib argument;
use the new reloc_rw_mask target hook instead.
(default_section_type_flags_1): Merge into...
(default_section_type_flags): ... here.
(decl_readonly_section_1): Merge into...
(decl_readonly_section): ... here.
(default_elf_select_section_1): Merge into...
(default_elf_select_section): ... here.
(default_unique_section_1): Merge into...
(default_unique_section): ... here.
(compute_reloc_for_rtx_1, compute_reloc_for_rtx): New.
(default_select_rtx_section): Use it.
(default_elf_select_rtx_section): Likewise.
* output.h: Update to match.
* doc/tm.texi (TARGET_ASM_RELOC_RW_MASK): New.
* config/alpha/alpha.c (alpha_elf_reloc_rw_mask): New.
(TARGET_ASM_RELOC_RW_MASK): New.
* config/i386/i386.c (x86_64_elf_select_section): Adjust call
to categorize_decl_for_section.
(x86_64_elf_unique_section): Likewise.
* config/ia64/hpux.h (TARGET_ASM_SELECT_SECTION,
TARGET_ASM_UNIQUE_SECTION, TARGET_ASM_SELECT_RTX_SECTION): Remove.
(TARGET_ASM_RELOC_RW_MASK): New.
* config/ia64/ia64.c (ia64_rwreloc_select_section,
ia64_rwreloc_unique_section, ia64_rwreloc_select_rtx_section): Remove.
(ia64_hpux_reloc_rw_mask, ia64_reloc_rw_mask): New.
(TARGET_RWRELOC): Remove.
(ia64_section_type_flags): Adjust call to default_section_type_flags.
* config/ia64/sysv4.h (TARGET_ASM_RELOC_RW_MASK): New.
* config/rs6000/rs6000.c (rs6000_elf_section_type_flags): Remove.
(rs6000_elf_select_section, rs6000_elf_unique_section): Remove.
(rs6000_elf_reloc_rw_mask, rs6000_xcoff_reloc_rw_mask): New.
(rs6000_xcoff_select_section): Use decl_readonly_section.
(rs6000_xcoff_section_type_flags): Use default_section_type_flags.
* config/rs6000/sysv4.h (TARGET_ASM_RELOC_RW_MASK): New.
(TARGET_ASM_SELECT_SECTION, TARGET_ASM_UNIQUE_SECTION): Remove.
(TARGET_SECTION_TYPE_FLAGS): Remove.
* config/rs6000/xcoff.h (TARGET_ASM_RELOC_RW_MASK): New.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@122781 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/ia64')
-rw-r--r-- | gcc/config/ia64/hpux.h | 11 | ||||
-rw-r--r-- | gcc/config/ia64/ia64.c | 62 | ||||
-rw-r--r-- | gcc/config/ia64/sysv4.h | 2 |
3 files changed, 27 insertions, 48 deletions
diff --git a/gcc/config/ia64/hpux.h b/gcc/config/ia64/hpux.h index 186f339147b..bdf3968e95c 100644 --- a/gcc/config/ia64/hpux.h +++ b/gcc/config/ia64/hpux.h @@ -1,5 +1,5 @@ /* Definitions of target machine GNU compiler. IA-64 version. - Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 + Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007 Free Software Foundation, Inc. Contributed by Steve Ellcey <sje@cup.hp.com> and Reva Cuthbertson <reva@cup.hp.com> @@ -174,13 +174,8 @@ do { \ /* It is illegal to have relocations in shared segments on HPUX. Pretend flag_pic is always set. */ -#undef TARGET_ASM_SELECT_SECTION -#define TARGET_ASM_SELECT_SECTION ia64_rwreloc_select_section -#undef TARGET_ASM_UNIQUE_SECTION -#define TARGET_ASM_UNIQUE_SECTION ia64_rwreloc_unique_section -#undef TARGET_ASM_SELECT_RTX_SECTION -#define TARGET_ASM_SELECT_RTX_SECTION ia64_rwreloc_select_rtx_section -#define TARGET_RWRELOC true +#undef TARGET_ASM_RELOC_RW_MASK +#define TARGET_ASM_RELOC_RW_MASK ia64_hpux_reloc_rw_mask /* ia64 HPUX has the float and long double forms of math functions. */ #undef TARGET_C99_FUNCTIONS diff --git a/gcc/config/ia64/ia64.c b/gcc/config/ia64/ia64.c index f1dbfc35a73..dc10abb3dcd 100644 --- a/gcc/config/ia64/ia64.c +++ b/gcc/config/ia64/ia64.c @@ -1,5 +1,5 @@ /* Definitions of target machine for GNU compiler. - Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 + Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. Contributed by James E. Wilson <wilson@cygnus.com> and David Mosberger <davidm@hpl.hp.com>. @@ -244,17 +244,12 @@ static void ia64_output_mi_thunk (FILE *, tree, HOST_WIDE_INT, static void ia64_file_start (void); static void ia64_globalize_decl_name (FILE *, tree); +static int ia64_hpux_reloc_rw_mask (void) ATTRIBUTE_UNUSED; +static int ia64_reloc_rw_mask (void) ATTRIBUTE_UNUSED; static section *ia64_select_rtx_section (enum machine_mode, rtx, unsigned HOST_WIDE_INT); static void ia64_output_dwarf_dtprel (FILE *, int, rtx) ATTRIBUTE_UNUSED; -static section *ia64_rwreloc_select_section (tree, int, unsigned HOST_WIDE_INT) - ATTRIBUTE_UNUSED; -static void ia64_rwreloc_unique_section (tree, int) - ATTRIBUTE_UNUSED; -static section *ia64_rwreloc_select_rtx_section (enum machine_mode, rtx, - unsigned HOST_WIDE_INT) - ATTRIBUTE_UNUSED; static unsigned int ia64_section_type_flags (tree, const char *, int); static void ia64_init_libfuncs (void) ATTRIBUTE_UNUSED; @@ -9374,6 +9369,24 @@ ia64_sysv4_init_libfuncs (void) glibc doesn't have them. */ } +/* For HPUX, it is illegal to have relocations in shared segments. */ + +static int +ia64_hpux_reloc_rw_mask (void) +{ + return 3; +} + +/* For others, relax this so that relocations to local data goes in + read-only segments, but we still cannot allow global relocations + in read-only segments. */ + +static int +ia64_reloc_rw_mask (void) +{ + return flag_pic ? 3 : 2; +} + /* Return the section to use for X. The only special thing we do here is to honor small data. */ @@ -9389,37 +9402,6 @@ ia64_select_rtx_section (enum machine_mode mode, rtx x, return default_elf_select_rtx_section (mode, x, align); } -/* It is illegal to have relocations in shared segments on AIX and HPUX. - Pretend flag_pic is always set. */ - -static section * -ia64_rwreloc_select_section (tree exp, int reloc, unsigned HOST_WIDE_INT align) -{ - return default_elf_select_section_1 (exp, reloc, align, true); -} - -static void -ia64_rwreloc_unique_section (tree decl, int reloc) -{ - default_unique_section_1 (decl, reloc, true); -} - -static section * -ia64_rwreloc_select_rtx_section (enum machine_mode mode, rtx x, - unsigned HOST_WIDE_INT align) -{ - section *sect; - int save_pic = flag_pic; - flag_pic = 1; - sect = ia64_select_rtx_section (mode, x, align); - flag_pic = save_pic; - return sect; -} - -#ifndef TARGET_RWRELOC -#define TARGET_RWRELOC flag_pic -#endif - static unsigned int ia64_section_type_flags (tree decl, const char *name, int reloc) { @@ -9435,7 +9417,7 @@ ia64_section_type_flags (tree decl, const char *name, int reloc) || strncmp (name, ".gnu.linkonce.sb.", 17) == 0) flags = SECTION_SMALL; - flags |= default_section_type_flags_1 (decl, name, reloc, TARGET_RWRELOC); + flags |= default_section_type_flags (decl, name, reloc); return flags; } diff --git a/gcc/config/ia64/sysv4.h b/gcc/config/ia64/sysv4.h index 5e93d4cd2d9..0e03e7d6107 100644 --- a/gcc/config/ia64/sysv4.h +++ b/gcc/config/ia64/sysv4.h @@ -121,6 +121,8 @@ do { \ } while (0) /* Override default elf definition. */ +#undef TARGET_ASM_RELOC_RW_MASK +#define TARGET_ASM_RELOC_RW_MASK ia64_reloc_rw_mask #undef TARGET_ASM_SELECT_RTX_SECTION #define TARGET_ASM_SELECT_RTX_SECTION ia64_select_rtx_section |