[DTrace-devel] [PATCH] Fix relocations of 64-bit values
Kris Van Hees
kris.van.hees at oracle.com
Tue Jun 15 10:58:41 PDT 2021
The R_BPF_64_64 relocation in the final linking was truncating 64-bit
values to 32-bits.
Signed-off-by: Kris Van Hees <kris.van.hees at oracle.com>
---
libdtrace/dt_cc.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/libdtrace/dt_cc.c b/libdtrace/dt_cc.c
index 9bf6ba09..a39c701b 100644
--- a/libdtrace/dt_cc.c
+++ b/libdtrace/dt_cc.c
@@ -2395,7 +2395,7 @@ dt_link_resolve(dtrace_hdl_t *dtp, dtrace_difo_t *dp)
dt_ident_t *idp = dt_dlib_get_sym(dtp, name);
uint_t ioff = rp->dofr_offset /
sizeof(struct bpf_insn);
- uint32_t val;
+ uint64_t val;
if (idp == NULL) /* not found */
continue;
@@ -2418,10 +2418,10 @@ dt_link_resolve(dtrace_hdl_t *dtp, dtrace_difo_t *dp)
}
if (rp->dofr_type == R_BPF_64_64) {
- buf[ioff].imm = val;
- buf[ioff + 1].imm = 0;
+ buf[ioff].imm = val & 0xffffffff;
+ buf[ioff + 1].imm = val >> 32;
} else if (rp->dofr_type == R_BPF_64_32)
- buf[ioff].imm = val;
+ buf[ioff].imm = (uint32_t)val;
}
}
--
2.31.1
More information about the DTrace-devel
mailing list