Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 23 May 2023 12:55:32 GMT
From:      Christos Margiolis <christos@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: 6265da14c913 - main - libdtrace: get rid of illumos ifdefs in dt_module_update(), fix dm_file and dm_modid
Message-ID:  <202305231255.34NCtWsM066880@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by christos:

URL: https://cgit.FreeBSD.org/src/commit/?id=6265da14c913e41827aa20a096103717243a1c1b

commit 6265da14c913e41827aa20a096103717243a1c1b
Author:     Christos Margiolis <christos@FreeBSD.org>
AuthorDate: 2023-05-23 12:54:58 +0000
Commit:     Christos Margiolis <christos@FreeBSD.org>
CommitDate: 2023-05-23 12:54:58 +0000

    libdtrace: get rid of illumos ifdefs in dt_module_update(), fix dm_file and dm_modid
    
    Because dt_module_update() is highly OS-specific, the ifdefs make it
    hard to read and follow what is going on. Also handle dm_modid, and
    remove handling of the ".filename" section, since we can easily fetch
    the filename from the module's pathname (k_stat->pathname).
    
    Reviewed by:    markj
    Approved by:    markj (mentor)
    Sponsored by:   The FreeBSD Foundation
    Differential Revision:  https://reviews.freebsd.org/D39177
---
 .../opensolaris/lib/libdtrace/common/dt_module.c   | 30 +++-------------------
 1 file changed, 3 insertions(+), 27 deletions(-)

diff --git a/cddl/contrib/opensolaris/lib/libdtrace/common/dt_module.c b/cddl/contrib/opensolaris/lib/libdtrace/common/dt_module.c
index b9408944f8c5..281c787de533 100644
--- a/cddl/contrib/opensolaris/lib/libdtrace/common/dt_module.c
+++ b/cddl/contrib/opensolaris/lib/libdtrace/common/dt_module.c
@@ -1129,33 +1129,21 @@ dt_module_getctflib(dtrace_hdl_t *dtp, dt_module_t *dmp, const char *name)
  * including the path.
  */
 static void
-#ifdef illumos
-dt_module_update(dtrace_hdl_t *dtp, const char *name)
-#else
 dt_module_update(dtrace_hdl_t *dtp, struct kld_file_stat *k_stat)
-#endif
 {
 	char fname[MAXPATHLEN];
 	struct stat64 st;
 	int fd, err, bits;
-#ifdef __FreeBSD__
 	struct module_stat ms;
 	dt_kmodule_t *dkmp;
 	uint_t h;
 	int modid;
-#endif
-
 	dt_module_t *dmp;
 	const char *s;
 	size_t shstrs;
 	GElf_Shdr sh;
 	Elf_Data *dp;
 	Elf_Scn *sp;
-
-#ifdef illumos
-	(void) snprintf(fname, sizeof (fname),
-	    "%s/%s/object", OBJFS_ROOT, name);
-#else
 	GElf_Ehdr ehdr;
 	GElf_Phdr ph;
 	char name[MAXPATHLEN];
@@ -1165,7 +1153,6 @@ dt_module_update(dtrace_hdl_t *dtp, struct kld_file_stat *k_stat)
 
 	(void) strlcpy(name, k_stat->name, sizeof(name));
 	(void) strlcpy(fname, k_stat->pathname, sizeof(fname));
-#endif
 
 	if ((fd = open(fname, O_RDONLY)) == -1 || fstat64(fd, &st) == -1 ||
 	    (dmp = dt_module_create(dtp, name)) == NULL) {
@@ -1174,6 +1161,9 @@ dt_module_update(dtrace_hdl_t *dtp, struct kld_file_stat *k_stat)
 		return;
 	}
 
+	(void) strlcpy(dmp->dm_file, fname, sizeof(dmp->dm_file));
+	dmp->dm_modid = k_stat->id;
+
 	/*
 	 * Since the module can unload out from under us (and /system/object
 	 * will return ENOENT), tell libelf to cook the entire file now and
@@ -1206,7 +1196,6 @@ dt_module_update(dtrace_hdl_t *dtp, struct kld_file_stat *k_stat)
 		dt_module_destroy(dtp, dmp);
 		return;
 	}
-#if defined(__FreeBSD__)
 	mapbase = (uintptr_t)k_stat->address;
 	gelf_getehdr(dmp->dm_elf, &ehdr);
 	is_elf_obj = (ehdr.e_type == ET_REL);
@@ -1219,7 +1208,6 @@ dt_module_update(dtrace_hdl_t *dtp, struct kld_file_stat *k_stat)
 			return;
 		}
 	}
-#endif
 	/*
 	 * Iterate over the section headers locating various sections of
 	 * interest and use their attributes to flesh out the dt_module_t.
@@ -1228,7 +1216,6 @@ dt_module_update(dtrace_hdl_t *dtp, struct kld_file_stat *k_stat)
 		if (gelf_getshdr(sp, &sh) == NULL || sh.sh_type == SHT_NULL ||
 		    (s = elf_strptr(dmp->dm_elf, shstrs, sh.sh_name)) == NULL)
 			continue; /* skip any malformed sections */
-#if defined(__FreeBSD__)
 		if (sh.sh_size == 0)
 			continue;
 		if (sh.sh_type == SHT_PROGBITS || sh.sh_type == SHT_NOBITS) {
@@ -1240,7 +1227,6 @@ dt_module_update(dtrace_hdl_t *dtp, struct kld_file_stat *k_stat)
 				dmp->dm_sec_offsets[elf_ndxscn(sp)] = sh.sh_addr;
 			mapbase += sh.sh_size;
 		}
-#endif
 		if (strcmp(s, ".text") == 0) {
 			dmp->dm_text_size = sh.sh_size;
 			dmp->dm_text_va = sh.sh_addr;
@@ -1254,17 +1240,10 @@ dt_module_update(dtrace_hdl_t *dtp, struct kld_file_stat *k_stat)
 		    (dp = elf_getdata(sp, NULL)) != NULL) {
 			bcopy(dp->d_buf, &dmp->dm_info,
 			    MIN(sh.sh_size, sizeof (dmp->dm_info)));
-		} else if (strcmp(s, ".filename") == 0 &&
-		    (dp = elf_getdata(sp, NULL)) != NULL) {
-			(void) strlcpy(dmp->dm_file,
-			    dp->d_buf, sizeof (dmp->dm_file));
 		}
 	}
 
 	dmp->dm_flags |= DT_DM_KERNEL;
-#ifdef illumos
-	dmp->dm_modid = (int)OBJFS_MODID(st.st_ino);
-#else
 	/*
 	 * Include .rodata and special sections into .text.
 	 * This depends on default section layout produced by GNU ld
@@ -1285,12 +1264,10 @@ dt_module_update(dtrace_hdl_t *dtp, struct kld_file_stat *k_stat)
 		}
 	}
 #endif
-#endif /* illumos */
 
 	if (dmp->dm_info.objfs_info_primary)
 		dmp->dm_flags |= DT_DM_PRIMARY;
 
-#ifdef __FreeBSD__
 	ms.version = sizeof(ms);
 	for (modid = kldfirstmod(k_stat->id); modid > 0;
 	    modid = modnext(modid)) {
@@ -1315,7 +1292,6 @@ dt_module_update(dtrace_hdl_t *dtp, struct kld_file_stat *k_stat)
 		dkmp->dkm_module = dmp;
 		dtp->dt_kmods[h] = dkmp;
 	}
-#endif
 
 	dt_dprintf("opened %d-bit module %s (%s) [%d]\n",
 	    bits, dmp->dm_name, dmp->dm_file, dmp->dm_modid);



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