aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJeff Law <law@gcc.gnu.org>1994-12-17 01:43:03 -0700
committerJeff Law <law@gcc.gnu.org>1994-12-17 01:43:03 -0700
commit5bff1750e9a0857174c435455b6e1a01d4e60429 (patch)
treeb33db73e8c51bb0ed2cdfb4aebe71c6ec45d7ac5 /gcc
parent1c688cd78600fdb05fd5bcdc897587e71ede0394 (diff)
downloadgcc-5bff1750e9a0857174c435455b6e1a01d4e60429.zip
gcc-5bff1750e9a0857174c435455b6e1a01d4e60429.tar.gz
gcc-5bff1750e9a0857174c435455b6e1a01d4e60429.tar.bz2
pa.h (readonly_section): During PIC code generation, put readonly data into the standard data section.
* pa.h (readonly_section): During PIC code generation, put readonly data into the standard data section. * pa.c (pic_label_operand): Disallow SYMBOL_REFs (constant data). From-SVN: r8661
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/pa/pa.c9
-rw-r--r--gcc/config/pa/pa.h19
2 files changed, 16 insertions, 12 deletions
diff --git a/gcc/config/pa/pa.c b/gcc/config/pa/pa.c
index f18451d..27c1d8d 100644
--- a/gcc/config/pa/pa.c
+++ b/gcc/config/pa/pa.c
@@ -235,14 +235,9 @@ pic_label_operand (op, mode)
{
case LABEL_REF:
return 1;
- case SYMBOL_REF:
- return (read_only_operand (op) && !FUNCTION_NAME_P (XSTR (op, 0)));
case CONST:
op = XEXP (op, 0);
- return (((GET_CODE (XEXP (op, 0)) == SYMBOL_REF
- && read_only_operand (XEXP (op, 0))
- && !FUNCTION_NAME_P (XSTR (XEXP (op, 0), 0)))
- || GET_CODE (XEXP (op, 0)) == LABEL_REF)
+ return (GET_CODE (XEXP (op, 0)) == LABEL_REF
&& GET_CODE (XEXP (op, 1)) == CONST_INT);
default:
return 0;
@@ -477,7 +472,7 @@ legitimize_pic_address (orig, mode, reg)
{
rtx pic_ref = orig;
- /* Lables and read-only data need special handling. */
+ /* Lables need special handling. */
if (pic_label_operand (orig))
{
emit_insn (gen_pic_load_label (reg, orig));
diff --git a/gcc/config/pa/pa.h b/gcc/config/pa/pa.h
index de602f2..1bd3bd1 100644
--- a/gcc/config/pa/pa.h
+++ b/gcc/config/pa/pa.h
@@ -1728,10 +1728,19 @@ do { fprintf (FILE, "\t.SPACE $PRIVATE$\n\
#define EXTRA_SECTIONS in_bss, in_readonly_data
-/* FIXME: GAS doesn't grok expressions involving two symbols in different
- segments (aka subspaces). Two avoid creating such expressions, we place
- readonly data into the $CODE$ subspace when generating PIC code. If
- GAS ever handles such expressions, this hack can disappear. */
+/* FIXME: HPUX ld generates incorrect GOT entries for "T" fixups
+ which reference data within the $TEXT$ space (for example constant
+ strings in the $LIT$ subspace).
+
+ The assemblers (GAS and HP as) both have problems with handling
+ the difference of two symbols which is the other correct way to
+ reference constant data during PIC code generation.
+
+ So, there's no way to reference constant data which is in the
+ $TEXT$ space during PIC generation. Instead place all constant
+ data into the $PRIVATE$ subspace (this reduces sharing, but it
+ works correctly). */
+
#define EXTRA_SECTION_FUNCTIONS \
void \
bss_section () \
@@ -1748,7 +1757,7 @@ readonly_data () \
if (in_section != in_readonly_data) \
{ \
if (flag_pic) \
- fprintf (asm_out_file, "%s\n", TEXT_SECTION_ASM_OP); \
+ fprintf (asm_out_file, "%s\n", DATA_SECTION_ASM_OP); \
else \
fprintf (asm_out_file, "%s\n", READONLY_DATA_ASM_OP); \
in_section = in_readonly_data; \