diff options
author | Jeff Law <law@gcc.gnu.org> | 1994-12-17 01:43:03 -0700 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 1994-12-17 01:43:03 -0700 |
commit | 5bff1750e9a0857174c435455b6e1a01d4e60429 (patch) | |
tree | b33db73e8c51bb0ed2cdfb4aebe71c6ec45d7ac5 /gcc | |
parent | 1c688cd78600fdb05fd5bcdc897587e71ede0394 (diff) | |
download | gcc-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.c | 9 | ||||
-rw-r--r-- | gcc/config/pa/pa.h | 19 |
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; \ |