tech-toolchain archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[PATCH] 2/2: toolchain/52427: VAX text relocations



Hi all,

This is the second part of the change to address toolchain/52427 (https://mail-index.netbsd.org/netbsd-bugs/2017/07/25/msg052924.html). This change to NetBSD 10.99.6 updates the GNU assembler in binutils.old, altering the behaviour of tc-vax.c:md_create_long_jump() to emit a jump to an address relative to the PC instead of a jump to an absolute address.

many thanks

kalvis


---
 .../gpl3/binutils.old/dist/gas/config/tc-vax.c  | 17 +++++++++--------
 1 file changed, 9 insertions(+), 8 deletions(-)

diff --git a/external/gpl3/binutils.old/dist/gas/config/tc-vax.c b/external/gpl3/binutils.old/dist/gas/config/tc-vax.c
index 6a2ef16b1760..57863a55e882 100644
--- a/external/gpl3/binutils.old/dist/gas/config/tc-vax.c
+++ b/external/gpl3/binutils.old/dist/gas/config/tc-vax.c
@@ -2332,18 +2332,19 @@ md_create_short_jump (char *ptr,

 void
 md_create_long_jump (char *ptr,
-                    addressT from_addr ATTRIBUTE_UNUSED,
-                    addressT to_addr,
-                    fragS *frag,
-                    symbolS *to_symbol)
+                     addressT from_addr,
+                     addressT to_addr,
+                     fragS *frag ATTRIBUTE_UNUSED,
+                     symbolS *to_symbol ATTRIBUTE_UNUSED)
 {
   valueT offset;

-  offset = to_addr - S_GET_VALUE (to_symbol);
-  *ptr++ = VAX_JMP;            /* Arbitrary jump.  */
-  *ptr++ = VAX_ABSOLUTE_MODE;
+  /* account for 1 byte instruction, 1 byte of address specifier and
+     4 bytes of offset from PC */
+  offset = to_addr - (from_addr + 1 + 1 + 4);
+  *ptr++ = VAX_JMP;             /* long jump */
+  *ptr++ = VAX_PC_RELATIVE_MODE;
   md_number_to_chars (ptr, offset, 4);
-  fix_new (frag, ptr - frag->fr_literal, 4, to_symbol, (long) 0, 0, NO_RELOC);
 }
 ^L
 #ifdef OBJ_VMS
--
2.20.1




Home | Main Index | Thread Index | Old Index