Please review: dtrace usdt

Prashanth Kumar pra_udupi at yahoo.co.in
Sun Dec 15 11:32:45 UTC 2013


Dtrace doesn't properly process object file of relocation type SHT_REL, which is type
in FreeBSD i386. The following patch checks for both relocation types SHT_REL and SHT_RELA, and
calls matching update function.Tested usdt example program from (https://wiki.freebsd.org/DTrace/userland)
in FreeBSD -10BETA1 - i386 and it works.
--------------------------------------------------
--- dt_link.c	2013-12-15 14:24:37.000000000 +0400
+++ /usr/src/cddl/contrib/opensolaris/lib/libdtrace/common/dt_link.c	2013-12-15 14:22:21.000000000 +0400
@@ -1542,7 +1542,10 @@
 			rela.r_offset = 0;
 			rela.r_info  = 0;
 			rela.r_addend = 0;
-			(void) gelf_update_rela(data_rel, i, &rela);
+			if (shdr_rel.sh_type == SHT_RELA)
+				(void) gelf_update_rela(data_rel, i, &rela);
+			else 
+				(void) gelf_update_rel(data_rel, i, (GElf_Rel *)&rela);
 #endif
 
 			mod = 1;
-----------------------------------------------------------

prashanth
--------------------------------------------
On Wed, 4/12/13, Michael Harsch <michaelharsch at hotmail.com> wrote:

 Subject: Re: dtrace usdt
 To: "Prashanth Kumar" <pra_udupi at yahoo.co.in>
 Cc: freebsd-dtrace at freebsd.org
 Date: Wednesday, 4 December, 2013, 11:13 PM
 
 Hi Prashanth,
 
 I've reproduced this on 10.0BETA4.  It appears to be
 specific to i386;
 the same test works fine on amd64.
 
 On Wed, Dec 4, 2013 at 3:29 AM, Prashanth Kumar <pra_udupi at yahoo.co.in>
 wrote:
 > Hi
 > Tried running the dtrace usdt example code from freebsd
 dtrace userland wiki page.
 > (https://wiki.freebsd.org/DTrace/userland).
 >
 > If run standalone the program segfaults.
 >  # ./db
 > Bus error (core dumped)
 >
 > If run with dtrace
 >
 >   # dtrace -s db.d -c ./db
 > dtrace: script 'db.d' matched 2 probes
 > CPU     ID     
              
 FUNCTION:NAME
 >   0  43245     
        
    main:query-start Query: SELECT * FROM
 apples
 >
 > the program hungs after printing the first probe.
 >
 > Had to use the following command
 >   # env WITH_DTRACE=1 make
 >
 > to build the program. Is there any other steps that i
 have missed to make the program work?.
 > This was tested on FreeBSD 10BETA1 - i386.
 >
 > regards
 > Prashanth
 > _______________________________________________
 > freebsd-dtrace at freebsd.org
 mailing list
 > https://lists.freebsd.org/mailman/listinfo/freebsd-dtrace
 > To unsubscribe, send any mail to "freebsd-dtrace-unsubscribe at freebsd.org"
 >
 


More information about the freebsd-dtrace mailing list