Page MenuHomeFreeBSD

D34416.diff
No OneTemporary

D34416.diff

diff --git a/lib/libpmcstat/libpmcstat_image.c b/lib/libpmcstat/libpmcstat_image.c
--- a/lib/libpmcstat/libpmcstat_image.c
+++ b/lib/libpmcstat/libpmcstat_image.c
@@ -119,13 +119,23 @@
if ((fnname = elf_strptr(e, sh->sh_link, sym.st_name))
== NULL)
continue;
-#ifdef __arm__
- /* Remove spurious ARM function name. */
+
+#if defined(__aarch64__) || defined(__arm__)
+ /* Ignore ARM mapping symbols. */
if (fnname[0] == '$' &&
(fnname[1] == 'a' || fnname[1] == 't' ||
- fnname[1] == 'd') &&
- fnname[2] == '\0')
+ fnname[1] == 'd' || fnname[1] == 'x'))
continue;
+
+ /*
+ * Clear LSB from starting addresses for functions
+ * which execute in Thumb mode. We should perhaps
+ * only do this for functions in a $t mapping symbol
+ * range, but parsing mapping symbols would be a lot
+ * of work and function addresses shouldn't have the
+ * LSB set otherwise.
+ */
+ sym.st_value &= ~1;
#endif
symptr->ps_name = pmcstat_string_intern(fnname);

File Metadata

Mime Type
text/plain
Expires
Fri, Oct 4, 4:37 AM (22 h, 14 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
13512786
Default Alt Text
D34416.diff (1010 B)

Event Timeline