Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 10 Jan 2021 23:00:02 GMT
From:      Mark Johnston <markj@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: d00431a7bd0c - main - libdtrace: Format USDT symbols correctly based on symbol binding
Message-ID:  <202101102300.10AN027R027814@gitrepo.freebsd.org>

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

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

commit d00431a7bd0c4b4607943baed588e58ad5ae6150
Author:     Mark Johnston <markj@FreeBSD.org>
AuthorDate: 2021-01-10 22:46:32 +0000
Commit:     Mark Johnston <markj@FreeBSD.org>
CommitDate: 2021-01-10 22:58:38 +0000

    libdtrace: Format USDT symbols correctly based on symbol binding
    
    Before we did not handle weak symbols correctly, sometimes resulting in
    link errors from dtrace -G when processing object files where functions
    with weak aliases contain USDT probes.
    
    Reported by:    rlibby
    Tested by:      rlibby
    MFC after:      1 week
    Sponsored by:   The FreeBSD Foundation
---
 cddl/contrib/opensolaris/lib/libdtrace/common/dt_link.c | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/cddl/contrib/opensolaris/lib/libdtrace/common/dt_link.c b/cddl/contrib/opensolaris/lib/libdtrace/common/dt_link.c
index 8f32890057f0..0b3dac0224f9 100644
--- a/cddl/contrib/opensolaris/lib/libdtrace/common/dt_link.c
+++ b/cddl/contrib/opensolaris/lib/libdtrace/common/dt_link.c
@@ -1344,18 +1344,24 @@ process_obj(dtrace_hdl_t *dtp, const char *obj, int *eprobesp)
 			/*
 			 * Aliases of weak symbols don't get a uniquifier.
 			 */
-			if (GELF_ST_BIND(fsym.st_info) == STB_WEAK)
+			if (GELF_ST_BIND(fsym.st_info) == STB_WEAK) {
 				len = snprintf(NULL, 0, dt_weaksymfmt,
 				    dt_symprefix, s) + 1;
-			else
+			} else {
 				len = snprintf(NULL, 0, dt_symfmt, dt_symprefix,
 				    objkey, s) + 1;
+			}
 			if ((p = dt_alloc(dtp, len)) == NULL) {
 				dt_strtab_destroy(strtab);
 				goto err;
 			}
-			(void) snprintf(p, len, dt_symfmt, dt_symprefix,
-			    objkey, s);
+			if (GELF_ST_BIND(fsym.st_info) == STB_WEAK) {
+				(void) snprintf(p, len, dt_weaksymfmt,
+				    dt_symprefix, s);
+			} else {
+				(void) snprintf(p, len, dt_symfmt, dt_symprefix,
+				    objkey, s);
+			}
 
 			if (dt_strtab_index(strtab, p) == -1) {
 				/*



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