aboutsummaryrefslogtreecommitdiff
path: root/gas/config/tc-hppa.c
diff options
context:
space:
mode:
Diffstat (limited to 'gas/config/tc-hppa.c')
-rw-r--r--gas/config/tc-hppa.c33
1 files changed, 17 insertions, 16 deletions
diff --git a/gas/config/tc-hppa.c b/gas/config/tc-hppa.c
index 67eb611..ab227ea 100644
--- a/gas/config/tc-hppa.c
+++ b/gas/config/tc-hppa.c
@@ -4390,7 +4390,7 @@ md_undefined_symbol (name)
return 0;
}
-#if defined (SOM) || defined (ELF_ARG_RELOC)
+#if defined (OBJ_SOM) || defined (ELF_ARG_RELOC)
#define arg_reloc_stub_needed(CALLER, CALLEE) \
((CALLEE) && (CALLER) && ((CALLEE) != (CALLER)))
#else
@@ -6715,7 +6715,7 @@ pa_type_args (symbolP, is_export)
name = input_line_pointer;
c = get_symbol_end ();
arg_reloc = pa_align_arg_reloc (temp, pa_build_arg_reloc (name));
-#if defined (SOM) || defined (ELF_ARG_RELOC)
+#if defined (OBJ_SOM) || defined (ELF_ARG_RELOC)
symbol_arg_reloc_info (symbolP) |= arg_reloc;
#endif
*input_line_pointer = c;
@@ -6729,7 +6729,7 @@ pa_type_args (symbolP, is_export)
name = input_line_pointer;
c = get_symbol_end ();
arg_reloc = pa_build_arg_reloc (name);
-#if defined (SOM) || defined (ELF_ARG_RELOC)
+#if defined (OBJ_SOM) || defined (ELF_ARG_RELOC)
symbol_arg_reloc_info (symbolP) |= arg_reloc;
#endif
*input_line_pointer = c;
@@ -8373,19 +8373,20 @@ hppa_fix_adjustable (fixp)
eg. Suppose we have
. ldil LR%foo+0,%r21
. ldw RR%foo+0(%r21),%r26
- . ldw RR%foo+10(%r21),%r25
-
- If foo is at address 4090 (decimal) in section `sect', then after
- reducing to the section symbol, we get
- . LR%sect+4090 == L%sect+0
- . RR%sect+4090 == R%sect+4090
- . RR%sect+4100 == R%sect-4092 (4100 - 8192)
- and the last address loses.
-
- Obviously, in cases where the LR% expression is identical to the
- RR% one we will never have a problem, but is so happens that gcc
- rounds addends involved in LR% field selectors to work around a
- HP linker bug. ie. We often have addresses like the last case
+ . ldw RR%foo+4(%r21),%r25
+
+ If foo is at address 4092 (decimal) in section `sect', then after
+ reducing to the section symbol we get
+ . LR%sect+4092 == (L%sect)+0
+ . RR%sect+4092 == (R%sect)+4092
+ . RR%sect+4096 == (R%sect)-4096
+ and the last address loses because rounding the addend to 8k
+ mutiples takes us up to 8192 with an offset of -4096.
+
+ In cases where the LR% expression is identical to the RR% one we
+ will never have a problem, but is so happens that gcc rounds
+ addends involved in LR% field selectors to work around a HP
+ linker bug. ie. We often have addresses like the last case
above where the LR% expression is offset from the RR% one. */
if (hppa_fix->fx_r_field == e_lrsel