aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Anglin <dave.anglin@nrc.ca>2008-09-08 00:54:26 +0000
committerDave Anglin <dave.anglin@nrc.ca>2008-09-08 00:54:26 +0000
commitded49c3ea35a4068b5a78aee7487bf867fa42de8 (patch)
treeeff4fd06170ba9778b3a0363d64f82e65e8a45b7
parent449373d9d07e2e4e55fa32898630f391b90dc507 (diff)
downloadbinutils-ded49c3ea35a4068b5a78aee7487bf867fa42de8.zip
binutils-ded49c3ea35a4068b5a78aee7487bf867fa42de8.tar.gz
binutils-ded49c3ea35a4068b5a78aee7487bf867fa42de8.tar.bz2
* config/tc-hppa.h (DIFF_EXPR_OK): Define for SOM target. Revise
comment regarding use of difference expressions. (TC_FORCE_RELOCATION_SUB_LOCAL): Define to 1.
-rw-r--r--gas/ChangeLog4
-rw-r--r--gas/config/tc-hppa.h17
2 files changed, 17 insertions, 4 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 9237bed..d9610d3 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,5 +1,9 @@
2008-09-07 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
+ * config/tc-hppa.h (DIFF_EXPR_OK): Define for SOM target. Revise
+ comment regarding use of difference expressions.
+ (TC_FORCE_RELOCATION_SUB_LOCAL): Define to 1.
+
* dw2gencfi.c (CFI_DIFF_EXPR_OK): Define if not defined.
(dot_cfi_personality): Use CFI_DIFF_EXPR_OK instead of DIFF_EXPR_OK.
(dot_cfi_lsda, output_cie, output_fde): Likewise.
diff --git a/gas/config/tc-hppa.h b/gas/config/tc-hppa.h
index 3a45e08..498cb25 100644
--- a/gas/config/tc-hppa.h
+++ b/gas/config/tc-hppa.h
@@ -146,14 +146,23 @@ int hppa_fix_adjustable (struct fix *);
two symbols. This includes the difference of two symbols when
one of them is undefined (this comes up in PIC code generation).
- We don't define DIFF_EXPR_OK because it does the wrong thing if
- the add symbol is undefined and the sub symbol is a symbol in
- the same section as the relocation. We also need some way to
- specialize some code in adjust_reloc_syms. */
+ We allow the difference of two symbols when the subtract symbol is
+ local to the relocation. This is implemented using R_HPPA_COMPLEX.
+
+ This has some limitations. Difference expressions only work between
+ symbols in the same segment/quadrant of a module since the HP dynamic
+ loader relocates the text and data segments independently. Thus, a
+ difference expression can't be used between text and data symbols,
+ or between symbols in different executable modules. */
+#define DIFF_EXPR_OK 1
+#define TC_FORCE_RELOCATION_SUB_LOCAL(FIX) 1
#define UNDEFINED_DIFFERENCE_OK
#endif
#ifdef OBJ_ELF
+
+/* Difference expressions for the 64-bit HP-UX target have the same
+ limitations as those for the 32-bit SOM target. */
#define DIFF_EXPR_OK 1
/* Handle .type psuedo. Given a type string of `millicode', set the