The branch main has been updated by christos:

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

commit 6265da14c913e41827aa20a096103717243a1c1b
Author:     Christos Margiolis <[email protected]>
AuthorDate: 2023-05-23 12:54:58 +0000
Commit:     Christos Margiolis <[email protected]>
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);

Reply via email to