commit 8b87bd584dcadb3713eaf6d0c9b540b4f54124bf gpg: Signature made Mon 11 Nov 2024 11:48:03 AM EST gpg: using RSA key D8F2E95271BA794E222FBEE0DB83606EC7DAAB26 gpg: Can't check signature: No public key Author: Martin Cermak Date: Mon Nov 11 17:41:53 2024 +0100 PR32302: Emit forward decls within tracepoint_derived_probe_group() too Forward decls added in commit 069def0ae9184 need to actually be emitted in 2 locations, roughtly corresponding to where tracepoint_extra_decls() is used. It would be ideal to put them directly to tracepoint_extra_decls() but that gives significantly less recognized tracepoints. The plan is toreview this again though and try to merge the tracepoint_forward_decls() body into tracepoint_extra_decls() if possible. diff --git a/tapsets.cxx b/tapsets.cxx index b4ad7e14e..06540cafc 100644 --- a/tapsets.cxx +++ b/tapsets.cxx @@ -11729,6 +11729,89 @@ static bool header_exists(systemtap_session& s, const string& header) return false; } +static vector tracepoint_forward_decls () +{ + vector retval; + // Kernel 6.12 + retval.push_back("enum cachefiles_content;"); + retval.push_back("enum extent_type;"); + retval.push_back("struct bch_fs;"); + retval.push_back("struct bch_move_stats;"); + retval.push_back("struct bpos;"); + retval.push_back("struct btree_bkey_cached_common;"); + retval.push_back("struct btree_insert_entry;"); + retval.push_back("struct btree_path;"); + retval.push_back("struct btree_trans;"); + retval.push_back("struct cachefiles_msg;"); + retval.push_back("struct cachefiles_open;"); + retval.push_back("struct cachefiles_read;"); + retval.push_back("struct cachefiles_volume;"); + retval.push_back("struct clk_rate_request;"); + retval.push_back("struct compact_control;"); + retval.push_back("struct fsi_device;"); + retval.push_back("struct fsi_msg;"); + retval.push_back("struct fsi_slave;"); + retval.push_back("struct fuse_req;"); + retval.push_back("struct get_locks_fail;"); + retval.push_back("struct gss_cred;"); + retval.push_back("struct handshake_req;"); + retval.push_back("struct i2c_client;"); + retval.push_back("struct ib_mad_agent_private;"); + retval.push_back("struct ib_mad_qp_info;"); + retval.push_back("struct ib_mad_send_wr_private;"); + retval.push_back("struct ib_smp;"); + retval.push_back("struct iomap;"); + retval.push_back("struct iomap_iter;"); + retval.push_back("struct mctp_sk_key;"); + retval.push_back("struct mptcp_ext;"); + retval.push_back("struct mptcp_subflow_context;"); + retval.push_back("struct nbd_request;"); + retval.push_back("struct netfs_io_request;"); + retval.push_back("struct netfs_io_stream;"); + retval.push_back("struct netfs_io_subrequest;"); + retval.push_back("struct nfs42_clone_args;"); + retval.push_back("struct nfs42_copy_args;"); + retval.push_back("struct nfs42_copy_notify_args;"); + retval.push_back("struct nfs42_copy_notify_res;"); + retval.push_back("struct nfs42_copy_res;"); + retval.push_back("struct nfs42_falloc_args;"); + retval.push_back("struct nfs42_offload_status_args;"); + retval.push_back("struct nfs42_seek_args;"); + retval.push_back("struct nfs42_seek_res;"); + retval.push_back("struct nfs_direct_req;"); + retval.push_back("struct nfs_page;"); + retval.push_back("struct opa_smp;"); + retval.push_back("struct p9_fid;"); + retval.push_back("struct pwc_device;"); + retval.push_back("struct request;"); + retval.push_back("struct rpc_auth;"); + retval.push_back("struct rpc_gss_wire_cred;"); + retval.push_back("struct rpcrdma_ep;"); + retval.push_back("struct rpcrdma_mr;"); + retval.push_back("struct rpcrdma_notification;"); + retval.push_back("struct rpcrdma_rep;"); + retval.push_back("struct rpcrdma_req;"); + retval.push_back("struct rpcrdma_xprt;"); + retval.push_back("struct rpc_rqst;"); + retval.push_back("struct rpc_task;"); + retval.push_back("struct selinux_audit_data;"); + retval.push_back("struct spi_device;"); + retval.push_back("struct svc_rdma_chunk;"); + retval.push_back("struct svc_rdma_recv_ctxt;"); + retval.push_back("struct svc_rdma_segment;"); + retval.push_back("struct svc_rdma_send_ctxt;"); + retval.push_back("struct svc_rqst;"); + retval.push_back("struct svcxprt_rdma;"); + retval.push_back("struct tmigr_cpu;"); + retval.push_back("struct tmigr_group;"); + retval.push_back("struct virtio_gpu_ctrl_hdr;"); + retval.push_back("struct virtqueue;"); + retval.push_back("struct somenonexistentstruct_123;"); + retval.push_back("union ifs_sbaf;"); + retval.push_back("union ifs_sbaf_status;"); + retval.push_back("union tmigr_state;"); + return retval; +} static vector tracepoint_extra_decls (systemtap_session& s, const string& header, @@ -12187,6 +12270,8 @@ tracepoint_derived_probe_group::emit_module_decls (systemtap_session& s) s.op->newline(); + + // We create a MODULE_aux_N.c file for each tracepoint header, to allow them // to be separately compiled. That's because kernel tracepoint headers sometimes // conflict. PR13155. @@ -12207,6 +12292,11 @@ tracepoint_derived_probe_group::emit_module_decls (systemtap_session& s) tpop = s.op_create_auxiliary(); per_header_aux[header] = tpop; + // add needed forward decls/#includes + static vector forward_decls = tracepoint_forward_decls(); + for (unsigned z=0; znewline()<< forward_decls[z] << "\n"; + // PR9993: Add extra headers to work around undeclared types in individual // include/trace/foo.h files const vector& extra_decls = tracepoint_extra_decls (s, header, @@ -12773,83 +12863,10 @@ tracepoint_builder::get_tracequery_modules(systemtap_session& s, osrc << "#ifdef CONFIG_TRACEPOINTS" << endl; osrc << "#include " << endl; - osrc << "enum cachefiles_content;" << endl; - osrc << "enum extent_type;" << endl; - osrc << "struct bch_fs;" << endl; - osrc << "struct bch_move_stats;" << endl; - osrc << "struct bpos;" << endl; - osrc << "struct btree_bkey_cached_common;" << endl; - osrc << "struct btree_insert_entry;" << endl; - osrc << "struct btree_path;" << endl; - osrc << "struct btree_trans;" << endl; - osrc << "struct cachefiles_msg;" << endl; - osrc << "struct cachefiles_open;" << endl; - osrc << "struct cachefiles_read;" << endl; - osrc << "struct cachefiles_volume;" << endl; - osrc << "struct clk_rate_request;" << endl; - osrc << "struct compact_control;" << endl; - osrc << "struct fsi_device;" << endl; - osrc << "struct fsi_msg;" << endl; - osrc << "struct fsi_slave;" << endl; - osrc << "struct fuse_req;" << endl; - osrc << "struct get_locks_fail;" << endl; - osrc << "struct gss_cred;" << endl; - osrc << "struct handshake_req;" << endl; - osrc << "struct i2c_client;" << endl; - osrc << "struct ib_mad_agent_private;" << endl; - osrc << "struct ib_mad_qp_info;" << endl; - osrc << "struct ib_mad_send_wr_private;" << endl; - osrc << "struct ib_smp;" << endl; - osrc << "struct iomap;" << endl; - osrc << "struct iomap_iter;" << endl; - osrc << "struct mctp_sk_key;" << endl; - osrc << "struct mptcp_ext;" << endl; - osrc << "struct mptcp_subflow_context;" << endl; - osrc << "struct nbd_request;" << endl; - osrc << "struct netfs_io_request;" << endl; - osrc << "struct netfs_io_stream;" << endl; - osrc << "struct netfs_io_subrequest;" << endl; - osrc << "struct nfs42_clone_args;" << endl; - osrc << "struct nfs42_copy_args;" << endl; - osrc << "struct nfs42_copy_notify_args;" << endl; - osrc << "struct nfs42_copy_notify_res;" << endl; - osrc << "struct nfs42_copy_res;" << endl; - osrc << "struct nfs42_falloc_args;" << endl; - osrc << "struct nfs42_offload_status_args;" << endl; - osrc << "struct nfs42_seek_args;" << endl; - osrc << "struct nfs42_seek_res;" << endl; - osrc << "struct nfs_direct_req;" << endl; - osrc << "struct nfs_page;" << endl; - osrc << "struct opa_smp;" << endl; - osrc << "struct p9_fid;" << endl; - osrc << "struct pwc_device;" << endl; - osrc << "struct request;" << endl; - osrc << "struct rpc_auth;" << endl; - osrc << "struct rpc_gss_wire_cred;" << endl; - osrc << "struct rpcrdma_ep;" << endl; - osrc << "struct rpcrdma_mr;" << endl; - osrc << "struct rpcrdma_notification;" << endl; - osrc << "struct rpcrdma_rep;" << endl; - osrc << "struct rpcrdma_req;" << endl; - osrc << "struct rpcrdma_xprt;" << endl; - osrc << "struct rpc_rqst;" << endl; - osrc << "struct rpc_task;" << endl; - osrc << "struct selinux_audit_data;" << endl; - osrc << "struct spi_device;" << endl; - osrc << "struct svc_rdma_chunk;" << endl; - osrc << "struct svc_rdma_recv_ctxt;" << endl; - osrc << "struct svc_rdma_segment;" << endl; - osrc << "struct svc_rdma_send_ctxt;" << endl; - osrc << "struct svc_rqst;" << endl; - osrc << "struct svcxprt_rdma;" << endl; - osrc << "struct tmigr_cpu;" << endl; - osrc << "struct tmigr_group;" << endl; - osrc << "struct virtio_gpu_ctrl_hdr;" << endl; - osrc << "struct virtqueue;" << endl; - osrc << "struct somenonexistentstruct_123;" << endl; - osrc << "union ifs_sbaf;" << endl; - osrc << "union ifs_sbaf_status;" << endl; - osrc << "union tmigr_state;" << endl; + // add needed forward decls/#includes + static vector forward_decls = tracepoint_forward_decls(); + for (unsigned z=0; z