Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 13 Jan 2008 00:03:02 GMT
From:      John Birrell <jb@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 133144 for review
Message-ID:  <200801130003.m0D032L3053611@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=133144

Change 133144 by jb@jb_freebsd1 on 2008/01/13 00:02:57

	Build the DTrace runtime initialisation object which gets linked to
	the object generated by "dtrace -G".

Affected files ...

.. //depot/projects/dtrace/src/cddl/lib/Makefile#11 edit
.. //depot/projects/dtrace/src/cddl/lib/drti/Makefile#1 add
.. //depot/projects/dtrace/src/contrib/opensolaris/lib/libdtrace/common/drti.c#7 edit

Differences ...

==== //depot/projects/dtrace/src/cddl/lib/Makefile#11 (text+ko) ====

@@ -2,7 +2,8 @@
 
 .include <bsd.own.mk>
 
-SUBDIR=	libavl \
+SUBDIR=	drti \
+	libavl \
 	libctf \
 	libdtrace \
 	libnvpair \

==== //depot/projects/dtrace/src/contrib/opensolaris/lib/libdtrace/common/drti.c#7 (text) ====

@@ -85,7 +85,11 @@
 	va_end(ap);
 }
 
+#if defined(sun)
 #pragma init(dtrace_dof_init)
+#else
+static void dtrace_dof_init(void) __attribute__ ((constructor));
+#endif
 
 static void
 dtrace_dof_init(void)
@@ -97,8 +101,13 @@
 	Elf32_Ehdr *elf;
 #endif
 	dof_helper_t dh;
+#if defined(sun)
 	Link_map *lmp;
 	Lmid_t lmid;
+#else
+	struct link_map *lmp;
+	u_long lmid = 0;
+#endif
 	int fd;
 	const char *p;
 
@@ -110,10 +119,12 @@
 		return;
 	}
 
+#if defined(sun)
 	if (dlinfo(RTLD_SELF, RTLD_DI_LMID, &lmid) == -1) {
 		dprintf(1, "couldn't discover link map ID\n");
 		return;
 	}
+#endif
 
 	if ((modname = strrchr(lmp->l_name, '/')) == NULL)
 		modname = lmp->l_name;
@@ -131,7 +142,7 @@
 	elf = (void *)lmp->l_addr;
 
 	dh.dofhp_dof = (uintptr_t)dof;
-	dh.dofhp_addr = elf->e_type == ET_DYN ? lmp->l_addr : 0;
+	dh.dofhp_addr = elf->e_type == ET_DYN ? (uintptr_t) lmp->l_addr : 0;
 
 	if (lmid == 0) {
 		(void) snprintf(dh.dofhp_mod, sizeof (dh.dofhp_mod),
@@ -170,7 +181,12 @@
 	(void) close(fd);
 }
 
+#if defined(sun)
 #pragma fini(dtrace_dof_fini)
+#else
+static void dtrace_dof_fini(void) __attribute__ ((destructor));
+#endif
+
 static void
 dtrace_dof_fini(void)
 {



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200801130003.m0D032L3053611>