* config/tc-hppa.h (DIFF_EXPR_OK): Define for SOM target. Revise
authorDave Anglin <dave.anglin@nrc.ca>
Mon, 8 Sep 2008 00:54:26 +0000 (00:54 +0000)
committerDave Anglin <dave.anglin@nrc.ca>
Mon, 8 Sep 2008 00:54:26 +0000 (00:54 +0000)
comment regarding use of difference expressions.
(TC_FORCE_RELOCATION_SUB_LOCAL): Define to 1.

gas/ChangeLog
gas/config/tc-hppa.h

index 9237bedf6f72862afa40ce5af29d55c78225eed3..d9610d369160696c37fb3e14d2df9a704adc0bdc 100644 (file)
@@ -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.
index 3a45e082e81a0f98f430958510d5590dd75c8350..498cb25bae783fc6eed1d6dd0e51ffaa6afc06ca 100644 (file)
@@ -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