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
This commit is contained in:
Jeff Law 1994-12-17 01:43:03 -07:00
parent 1c688cd786
commit 5bff1750e9
2 changed files with 16 additions and 12 deletions

View 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));

View 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; \