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
Sat, Feb 8, 6:52 PM (20 h, 30 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
16530522
Default Alt Text
D34416.diff (1010 B)

Event Timeline