diff options
author | Michael Meissner <meissner@cygnus.com> | 1998-03-16 15:35:24 +0000 |
---|---|---|
committer | Michael Meissner <meissner@gcc.gnu.org> | 1998-03-16 15:35:24 +0000 |
commit | dbf55e5349e10486b12221c9dad95e6bcfbca0ed (patch) | |
tree | b0da91d7b2ad7db01fe32552fbf20f3df30f1b98 /gcc | |
parent | e29ef9202e54f4572c345540e4de17b2b9ff19e1 (diff) | |
download | gcc-dbf55e5349e10486b12221c9dad95e6bcfbca0ed.zip gcc-dbf55e5349e10486b12221c9dad95e6bcfbca0ed.tar.gz gcc-dbf55e5349e10486b12221c9dad95e6bcfbca0ed.tar.bz2 |
Ensure sum from SDA is 16-bit
From-SVN: r18631
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.c | 13 |
2 files changed, 16 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7017ba0..4ffc5e4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -3,6 +3,10 @@ Mon Mar 16 15:57:17 1998 Michael Meissner <meissner@cygnus.com> * gcc.c (default_arg): Don't wander off the end of allocated memory. + (From Geoffrey Keating <geoffk@ozemail.com.au>) + * rs6000.c (small_data_operand): Ensure that any address + referenced relative to the small data area is inside the SDA. + Mon Mar 16 12:55:15 1998 Jim Wilson <wilson@cygnus.com> * config/m68k/netbsd.h (ASM_SPEC): Add %{m68060}. diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 8b7f340..aa80812 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -1080,7 +1080,18 @@ small_data_operand (op, mode) return 0; else - sym_ref = XEXP (XEXP (op, 0), 0); + { + rtx sum = XEXP (op, 0); + HOST_WIDE_INT summand; + + /* We have to be careful here, because it is the referenced address + that must be 32k from _SDA_BASE_, not just the symbol. */ + summand = INTVAL (XEXP (sum, 1)); + if (summand < 0 || summand > g_switch_value) + return 0; + + sym_ref = XEXP (sum, 0); + } if (*XSTR (sym_ref, 0) != '@') return 0; |