Page MenuHomeFreeBSD

D7396.1785350748.diff
No OneTemporary

Size
1 KB
Referenced Files
None
Subscribers
None

D7396.1785350748.diff

Index: sys/conf/Makefile.arm
===================================================================
--- sys/conf/Makefile.arm
+++ sys/conf/Makefile.arm
@@ -46,7 +46,11 @@
CFLAGS += -mfpu=none
.endif
-.if empty(DDB_ENABLED)
+.if !empty(DDB_ENABLED) || !empty(DTR_ENABLED) || !empty(HWPMC_ENABLED)
+CFLAGS+= -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer
+.endif
+
+.if empty(DDB_ENABLED) && empty(DTR_ENABLED) && empty(HWPMC_ENABLED)
.if defined(WITHOUT_ARM_EABI) && ${COMPILER_TYPE} != "clang"
CFLAGS += -mno-apcs-frame
.endif
Index: sys/dev/hwpmc/hwpmc_arm.c
===================================================================
--- sys/dev/hwpmc/hwpmc_arm.c
+++ sys/dev/hwpmc/hwpmc_arm.c
@@ -72,6 +72,16 @@
#endif
}
+/* XXX handle runtime detection
+ */
+#ifdef __clang__
+#define PC_OFF 1
+#define FP_OFF 0
+#else
+#define PC_OFF -1
+#define FP_OFF -3
+#endif
+
int
pmc_save_kernel_callchain(uintptr_t *cc, int maxsamples,
struct trapframe *tf)
@@ -100,7 +110,7 @@
for (count = 1; count < maxsamples; count++) {
/* Use saved lr as pc. */
- r = fp - sizeof(uintptr_t);
+ r = fp + PC_OFF * sizeof(uintptr_t);
if (!PMC_IN_KERNEL_STACK(r, stackstart, stackend))
break;
pc = *(uintptr_t *)r;
@@ -110,7 +120,7 @@
*cc++ = pc;
/* Switch to next frame up */
- r = fp - 3 * sizeof(uintptr_t);
+ r = fp + FP_OFF * sizeof(uintptr_t);
if (!PMC_IN_KERNEL_STACK(r, stackstart, stackend))
break;
fp = *(uintptr_t *)r;
@@ -147,7 +157,7 @@
for (count = 1; count < maxsamples; count++) {
/* Use saved lr as pc. */
- r = fp - sizeof(uintptr_t);
+ r = fp + PC_OFF * sizeof(uintptr_t);
if (copyin((void *)r, &pc, sizeof(pc)) != 0)
break;
if (!PMC_IN_USERSPACE(pc))
@@ -157,7 +167,7 @@
/* Switch to next frame up */
oldfp = fp;
- r = fp - 3 * sizeof(uintptr_t);
+ r = fp + FP_OFF * sizeof(uintptr_t);
if (copyin((void *)r, &fp, sizeof(fp)) != 0)
break;
if (fp < oldfp || !PMC_IN_USERSPACE(fp))

File Metadata

Mime Type
text/plain
Expires
Wed, Jul 29, 6:45 PM (9 h, 46 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
29306253
Default Alt Text
D7396.1785350748.diff (1 KB)

Event Timeline