[DTrace-devel] [PATCH 2/7] Make dt_cg_ctf_offsetof() available outside of dt_cg.c

eugene.loh at oracle.com eugene.loh at oracle.com
Tue Aug 22 21:51:09 UTC 2023


From: Eugene Loh <eugene.loh at oracle.com>

Signed-off-by: Eugene Loh <eugene.loh at oracle.com>
---
 libdtrace/dt_cg.c | 12 ++++++------
 libdtrace/dt_cg.h |  3 ++-
 2 files changed, 8 insertions(+), 7 deletions(-)

diff --git a/libdtrace/dt_cg.c b/libdtrace/dt_cg.c
index a8f5077b..ea7fb6d5 100644
--- a/libdtrace/dt_cg.c
+++ b/libdtrace/dt_cg.c
@@ -4187,10 +4187,10 @@ dt_cg_asgn_op(dt_node_t *dnp, dt_irlist_t *dlp, dt_regset_t *drp)
  * Get offsetof(structname, membername) information from CTF.
  * Optionally, also get member size.
  */
-static int
-dt_cg_ctf_offsetof(const char *structname, const char *membername, size_t *sizep)
+int
+dt_cg_ctf_offsetof(dtrace_hdl_t *dtp, const char *structname, const char *membername, size_t *sizep)
 {
-	ctf_file_t *cfp = yypcb->pcb_hdl->dt_shared_ctf;
+	ctf_file_t *cfp = dtp->dt_shared_ctf;
 	ctf_id_t type;
 	ctf_membinfo_t ctm;
 
@@ -4228,10 +4228,10 @@ dt_cg_uregs(unsigned int idx, dt_node_t *dnp, dt_irlist_t *dlp, dt_regset_t *drp
 			char *memnames[] = { "ds", "es", "fsbase", "gsbase", "trap_nr" };
 
 			/* Look up task->thread offset. */
-			offset = dt_cg_ctf_offsetof("struct task_struct", "thread", NULL);
+			offset = dt_cg_ctf_offsetof(dtp, "struct task_struct", "thread", NULL);
 
 			/* Add the thread->member offset. */
-			offset += dt_cg_ctf_offsetof("struct thread_struct",
+			offset += dt_cg_ctf_offsetof(dtp, "struct thread_struct",
 						     memnames[idx - 21], &size);
 
 			/* Get task. */
@@ -4302,7 +4302,7 @@ dt_cg_uregs(unsigned int idx, dt_node_t *dnp, dt_irlist_t *dlp, dt_regset_t *drp
 		/* Copy contents at task->stack to %fp+DT_STK_SP (scratch space). */
 		emit(dlp, BPF_MOV_REG(BPF_REG_3, BPF_REG_0));
 		emit(dlp, BPF_ALU64_IMM(BPF_ADD, BPF_REG_3,
-		    dt_cg_ctf_offsetof("struct task_struct", "stack", NULL)));
+		    dt_cg_ctf_offsetof(dtp, "struct task_struct", "stack", NULL)));
 		emit(dlp, BPF_MOV_IMM(BPF_REG_2, sizeof(uint64_t)));
 		emit(dlp, BPF_LOAD(BPF_DW, BPF_REG_1, BPF_REG_FP, DT_STK_SP));
 		emit(dlp, BPF_CALL_HELPER(dtp->dt_bpfhelper[BPF_FUNC_probe_read_kernel]));
diff --git a/libdtrace/dt_cg.h b/libdtrace/dt_cg.h
index 95bf507f..0ced6dd2 100644
--- a/libdtrace/dt_cg.h
+++ b/libdtrace/dt_cg.h
@@ -37,7 +37,8 @@ extern void dt_cg_tramp_epilogue_advance(dt_pcb_t *pcb, dt_activity_t act);
 extern void dt_cg_tramp_error(dt_pcb_t *pcb);
 extern uint_t dt_cg_ldsize(dt_node_t *dnp, ctf_file_t *ctfp, ctf_id_t type,
 			 ssize_t *ret_size);
-
+extern int dt_cg_ctf_offsetof(dtrace_hdl_t *dtp, const char *structname,
+			      const char *membername, size_t *sizep);
 #ifdef	__cplusplus
 }
 #endif
-- 
2.18.4




More information about the DTrace-devel mailing list