aboutsummaryrefslogtreecommitdiff
path: root/gas
diff options
context:
space:
mode:
Diffstat (limited to 'gas')
-rw-r--r--gas/ChangeLog7
-rw-r--r--gas/config/tc-hppa.c37
2 files changed, 33 insertions, 11 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 47ee337..72fc95e 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -38,6 +38,13 @@ Thu Feb 2 15:21:24 1995 Ken Raeburn <raeburn@cujo.cygnus.com>
(VMS_RSYM_Parse): move S_GET_VALUE() inside switch to avoid
calling it for uninteresting cases.
+Wed Feb 1 23:52:45 1995 Jeff Law (law@snake.cs.utah.edu)
+
+ * config/tc-hppa.c (md_apply_fix): Go ahead and call
+ hppa_field_adjust to get a new value for R_DATA_ONE_SYMBOL
+ relocations in SOM.
+ (hppa_fix_adjustable): Refine somewhat.
+
Fri Jan 27 21:29:53 1995 Michael Meissner <meissner@tiktok.cygnus.com>
* config/tc-ppc.h (NO_STRING_ESCAPES): Don't define if we are
diff --git a/gas/config/tc-hppa.c b/gas/config/tc-hppa.c
index d0806fb..2b79428 100644
--- a/gas/config/tc-hppa.c
+++ b/gas/config/tc-hppa.c
@@ -2215,7 +2215,7 @@ pa_ip (str)
num = pa_get_absolute_expression (&the_insn, &s);
s = expr_end;
CHECK_FIELD (num, 671108864, 0, 0);
- INSERT_FIELD_AND_CONTINUE (opcode, num, 1);
+ INSERT_FIELD_AND_CONTINUE (opcode, num, 0);
/* Handle a 3 bit SFU identifier at 25. */
case 'f':
@@ -2855,8 +2855,18 @@ md_apply_fix (fixP, valp)
which will need a SOM relocation (except for some PC-relative relocs).
In such cases we should treat the "val" or "addend" as zero since it
will be added in as needed from fx_offset in tc_gen_reloc. */
- if (fixP->fx_addsy != NULL
- || fixP->fx_r_type == R_HPPA_NONE)
+ if ((fixP->fx_addsy != NULL
+ || fixP->fx_r_type == R_HPPA_NONE)
+#ifdef OBJ_SOM
+ && fmt != 32
+ || hppa_fixP->fx_r_field == e_psel
+ || hppa_fixP->fx_r_field == e_rpsel
+ || hppa_fixP->fx_r_field == e_lpsel
+ || hppa_fixP->fx_r_field == e_tsel
+ || hppa_fixP->fx_r_field == e_rtsel
+ || hppa_fixP->fx_r_field == e_ltsel
+#endif
+ )
new_val = ((fmt == 12 || fmt == 17) ? 8 : 0);
else
new_val = hppa_field_adjust (*valp, 0, hppa_fixP->fx_r_field);
@@ -5379,6 +5389,9 @@ pa_subspace (unused)
else
section = subseg_new (ss_name, 0);
+ if (zero)
+ seg_info (section)->bss = 1;
+
/* Now set the flags. */
bfd_set_section_flags (stdoutput, section, applicable);
@@ -6123,13 +6136,11 @@ pa_text (unused)
selectors).
Reject reductions involving symbols with external scope; such
- reductions make life a living hell for object file editors.
+ reductions make life a living hell for object file editors.
- FIXME. Also reject R_HPPA relocations which are 32 bits
- wide. Helps with code lables in arrays for SOM. (SOM BFD code
- needs to generate relocations to push the addend and symbol value
- onto the stack, add them, then pop the value off the stack and
- use it in a relocation -- yuk. */
+ FIXME. Also reject R_HPPA relocations which are 32bits wide in
+ the code space. The SOM BFD backend doesn't know how to pull the
+ right bits out of an instruction. */
int
hppa_fix_adjustable (fixp)
@@ -6145,10 +6156,14 @@ hppa_fix_adjustable (fixp)
return 0;
#endif
- /* Reject reductions of symbols in DLT relative relocs. */
+ /* Reject reductions of symbols in DLT relative relocs,
+ relocations with plabels. */
if (hppa_fix->fx_r_field == e_tsel
|| hppa_fix->fx_r_field == e_ltsel
- || hppa_fix->fx_r_field == e_rtsel)
+ || hppa_fix->fx_r_field == e_rtsel
+ || hppa_fix->fx_r_field == e_psel
+ || hppa_fix->fx_r_field == e_rpsel
+ || hppa_fix->fx_r_field == e_lpsel)
return 0;
if (fixp->fx_addsy && fixp->fx_addsy->bsym->flags & BSF_GLOBAL)