OSDN Git Service

* pa.h (readonly_section): During PIC code generation, put
authorlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 17 Dec 1994 08:43:03 +0000 (08:43 +0000)
committerlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 17 Dec 1994 08:43:03 +0000 (08:43 +0000)
readonly data into the standard data section.

* pa.c (pic_label_operand): Disallow SYMBOL_REFs (constant data).

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@8661 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/config/pa/pa.c
gcc/config/pa/pa.h

index f18451d..27c1d8d 100644 (file)
@@ -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));
index de602f2..1bd3bd1 100644 (file)
@@ -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;                                   \