Date: Thu, 10 Feb 2011 19:13:25 +0300 From: Chagin Dmitry <dchagin@freebsd.org> To: Rui Paulo <rpaulo@freebsd.org> Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r211804 - in head/sys: amd64/amd64 i386/i386 Message-ID: <20110210161325.GA29246@dchagin.static.corbina.ru> In-Reply-To: <201008250910.o7P9AWsv005437@svn.freebsd.org> References: <201008250910.o7P9AWsv005437@svn.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
--MGYHOYXEY6WxJCY8 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Wed, Aug 25, 2010 at 09:10:32AM +0000, Rui Paulo wrote: > Author: rpaulo > Date: Wed Aug 25 09:10:32 2010 > New Revision: 211804 > URL: http://svn.freebsd.org/changeset/base/211804 >=20 > Log: > Call the necessary DTrace function pointers when we have different kinds > of traps. > =20 > Sponsored by: The FreeBSD Foundation >=20 > Modified: > head/sys/amd64/amd64/trap.c > head/sys/i386/i386/trap.c >=20 > Modified: head/sys/amd64/amd64/trap.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D > --- head/sys/amd64/amd64/trap.c Wed Aug 25 08:49:21 2010 (r211803) > +++ head/sys/amd64/amd64/trap.c Wed Aug 25 09:10:32 2010 (r211804) > @@ -109,6 +109,13 @@ dtrace_doubletrap_func_t dtrace_doubletr > * implementation opaque.=20 > */ > systrace_probe_func_t systrace_probe_func; > + > +/* > + * These hooks are necessary for the pid, usdt and fasttrap providers. > + */ > +dtrace_fasttrap_probe_ptr_t dtrace_fasttrap_probe_ptr; > +dtrace_pid_probe_ptr_t dtrace_pid_probe_ptr; > +dtrace_return_probe_ptr_t dtrace_return_probe_ptr; > #endif > =20 > extern void trap(struct trapframe *frame); > @@ -239,6 +246,55 @@ trap(struct trapframe *frame) > if (dtrace_trap_func !=3D NULL) > if ((*dtrace_trap_func)(frame, type)) > goto out; > + if (type =3D=3D T_DTRACE_PROBE || type =3D=3D T_DTRACE_RET || > + type =3D=3D T_BPTFLT) { > + struct reg regs; > + > + regs.r_r15 =3D frame->tf_r15; > + regs.r_r14 =3D frame->tf_r14; > + regs.r_r13 =3D frame->tf_r13; > + regs.r_r12 =3D frame->tf_r12; > + regs.r_r11 =3D frame->tf_r11; > + regs.r_r10 =3D frame->tf_r10; > + regs.r_r9 =3D frame->tf_r9; > + regs.r_r8 =3D frame->tf_r8; > + regs.r_rdi =3D frame->tf_rdi; > + regs.r_rsi =3D frame->tf_rsi; > + regs.r_rbp =3D frame->tf_rbp; > + regs.r_rbx =3D frame->tf_rbx; > + regs.r_rdx =3D frame->tf_rdx; > + regs.r_rcx =3D frame->tf_rcx; > + regs.r_rax =3D frame->tf_rax; > + regs.r_rip =3D frame->tf_rip; > + regs.r_cs =3D frame->tf_cs; > + regs.r_rflags =3D frame->tf_rflags; > + regs.r_rsp =3D frame->tf_rsp; > + regs.r_ss =3D frame->tf_ss; > + if (frame->tf_flags & TF_HASSEGS) { > + regs.r_ds =3D frame->tf_ds; > + regs.r_es =3D frame->tf_es; > + regs.r_fs =3D frame->tf_fs; > + regs.r_gs =3D frame->tf_gs; > + } else { > + regs.r_ds =3D 0; > + regs.r_es =3D 0; > + regs.r_fs =3D 0; > + regs.r_gs =3D 0; hi, maybe use fill_regs() would more appropriate here? --=20 Have fun! chd --MGYHOYXEY6WxJCY8 Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.16 (FreeBSD) iEYEARECAAYFAk1UDqQACgkQ0t2Tb3OO/O16swCgvH/nvHHS8kVZPJudogpdRzZf DQkAn3i3QDJpVNs3CB3+r7/TOVqCRlIX =o0c/ -----END PGP SIGNATURE----- --MGYHOYXEY6WxJCY8--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20110210161325.GA29246>