x86-64: Ignore r_addend for R_X86_64_GLOB_DAT/R_X86_64_JUMP_SLOT
authorH.J. Lu <hjl.tools@gmail.com>
Sat, 21 May 2022 02:21:48 +0000 (19:21 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Thu, 26 May 2022 21:00:25 +0000 (14:00 -0700)
According to x86-64 psABI, r_addend should be ignored for R_X86_64_GLOB_DAT
and R_X86_64_JUMP_SLOT.  Since linkers always set their r_addends to 0, we
can ignore their r_addends.

Reviewed-by: Fangrui Song <maskray@google.com>
sysdeps/x86_64/dl-machine.h

index c70af7a..7f607f6 100644 (file)
@@ -325,11 +325,13 @@ and creates an unsatisfiable circular dependency.\n",
 #  endif
          /* Set to symbol size plus addend.  */
          value = sym->st_size;
+         *reloc_addr = value + reloc->r_addend;
+         break;
 # endif
-         /* Fall through.  */
+
        case R_X86_64_GLOB_DAT:
        case R_X86_64_JUMP_SLOT:
-         *reloc_addr = value + reloc->r_addend;
+         *reloc_addr = value;
          break;
 
        case R_X86_64_DTPMOD64: