public inbox for glibc-cvs@sourceware.org
help / color / mirror / Atom feed
* [glibc/azanella/clang] aarch64: Fix gmon profiling with clang
@ 2024-04-17 20:14 Adhemerval Zanella
  0 siblings, 0 replies; 4+ messages in thread
From: Adhemerval Zanella @ 2024-04-17 20:14 UTC (permalink / raw)
  To: glibc-cvs

https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=0efd2ddf2a599ab191c98fb86febbfc31cb93a57

commit 0efd2ddf2a599ab191c98fb86febbfc31cb93a57
Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Date:   Wed Jan 31 17:26:59 2024 +0000

    aarch64: Fix gmon profiling with clang
    
    Different than gcc, clang does not pass the LR value as the first
    argument.  To avoid requiring change clang generated code (since same
    ABI is used on other OS, like FreeBSD), use a similar strategy as x86_64
    to obtain both the frompc and the selfpc from the stack frame.
    
    Checked on aarch64-linux-gnu.

Diff:
---
 sysdeps/aarch64/Makefile                 |  3 +++
 sysdeps/aarch64/{mcount.c => __mcount.S} | 20 +++++++++++++++++---
 sysdeps/aarch64/machine-gmon.h           | 12 +++---------
 3 files changed, 23 insertions(+), 12 deletions(-)

diff --git a/sysdeps/aarch64/Makefile b/sysdeps/aarch64/Makefile
index 141d7d9cc2..bac84c6144 100644
--- a/sysdeps/aarch64/Makefile
+++ b/sysdeps/aarch64/Makefile
@@ -54,6 +54,9 @@ gen-as-const-headers += \
 endif
 
 ifeq ($(subdir),gmon)
+sysdep_routines += \
+  __mcount \
+  # sysdep_routines
 CFLAGS-mcount.c += -mgeneral-regs-only
 endif
 
diff --git a/sysdeps/aarch64/mcount.c b/sysdeps/aarch64/__mcount.S
similarity index 72%
rename from sysdeps/aarch64/mcount.c
rename to sysdeps/aarch64/__mcount.S
index 1651ab9c8f..9688c41459 100644
--- a/sysdeps/aarch64/mcount.c
+++ b/sysdeps/aarch64/__mcount.S
@@ -1,5 +1,5 @@
-/* Copyright (C) 2013-2024 Free Software Foundation, Inc.
-
+/* AArch64 definitions for profiling support.
+   Copyright (C) 2024 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -16,9 +16,23 @@
    License along with the GNU C Library.  If not, see
    <https://www.gnu.org/licenses/>.  */
 
+#include <sysdep.h>
 #include <shlib-compat.h>
 
-#include <gmon/mcount.c>
+ENTRY (__mcount)
+	stp     x29, x30, [sp, -16]!
+	/* Note: xpaclri is needed for frompc because of gcc PR target/94791.  */
+	hint	7
+	mov	x1, x30
+	/* Load the caller return address as frompc.  */
+	ldr	x0, [x29, #8]
+	mov	x30, x0
+	mov	x0, x30
+	/* Use the return address as selfpc.  */
+	mov	x0, x30
+	ldp     x29, x30, [sp], 16
+	b	__mcount_internal
+END (__mcount)
 
 /* We forgot to add _mcount in glibc 2.17.  We added it in 2.18
    therefore we want it to be added with version GLIBC_2_18.  However,
diff --git a/sysdeps/aarch64/machine-gmon.h b/sysdeps/aarch64/machine-gmon.h
index 6890b9912b..a703f5ca4d 100644
--- a/sysdeps/aarch64/machine-gmon.h
+++ b/sysdeps/aarch64/machine-gmon.h
@@ -22,14 +22,8 @@
 
 #include <sysdep.h>
 
-static void mcount_internal (u_long frompc, u_long selfpc);
-
 #define _MCOUNT_DECL(frompc, selfpc) \
-static inline void mcount_internal (u_long frompc, u_long selfpc)
+void __mcount_internal (u_long frompc, u_long selfpc)
 
-/* Note: strip_pac is needed for frompc because of gcc PR target/94791.  */
-#define MCOUNT                                                    \
-void __mcount (void *frompc)                                      \
-{                                                                 \
-  mcount_internal ((u_long) strip_pac (frompc), (u_long) RETURN_ADDRESS (0)); \
-}
+/* Implemented by __mcount.S.  */
+#define MCOUNT

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [glibc/azanella/clang] aarch64: Fix gmon profiling with clang
@ 2024-04-02 16:01 Adhemerval Zanella
  0 siblings, 0 replies; 4+ messages in thread
From: Adhemerval Zanella @ 2024-04-02 16:01 UTC (permalink / raw)
  To: glibc-cvs

https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=0739d050cb8a6990d7ee1716bbfbf3421dbfaced

commit 0739d050cb8a6990d7ee1716bbfbf3421dbfaced
Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Date:   Wed Jan 31 17:26:59 2024 +0000

    aarch64: Fix gmon profiling with clang
    
    Different than gcc, clang does not pass the LR value as the first
    argument.  To avoid requiring change clang generated code (since same
    ABI is used on other OS, like FreeBSD), use a similar strategy as x86_64
    to obtain both the frompc and the selfpc from the stack frame.
    
    Checked on aarch64-linux-gnu.

Diff:
---
 sysdeps/aarch64/Makefile                 |  3 +++
 sysdeps/aarch64/{mcount.c => __mcount.S} | 20 +++++++++++++++++---
 sysdeps/aarch64/machine-gmon.h           | 12 +++---------
 3 files changed, 23 insertions(+), 12 deletions(-)

diff --git a/sysdeps/aarch64/Makefile b/sysdeps/aarch64/Makefile
index 141d7d9cc2..bac84c6144 100644
--- a/sysdeps/aarch64/Makefile
+++ b/sysdeps/aarch64/Makefile
@@ -54,6 +54,9 @@ gen-as-const-headers += \
 endif
 
 ifeq ($(subdir),gmon)
+sysdep_routines += \
+  __mcount \
+  # sysdep_routines
 CFLAGS-mcount.c += -mgeneral-regs-only
 endif
 
diff --git a/sysdeps/aarch64/mcount.c b/sysdeps/aarch64/__mcount.S
similarity index 72%
rename from sysdeps/aarch64/mcount.c
rename to sysdeps/aarch64/__mcount.S
index 1651ab9c8f..9688c41459 100644
--- a/sysdeps/aarch64/mcount.c
+++ b/sysdeps/aarch64/__mcount.S
@@ -1,5 +1,5 @@
-/* Copyright (C) 2013-2024 Free Software Foundation, Inc.
-
+/* AArch64 definitions for profiling support.
+   Copyright (C) 2024 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -16,9 +16,23 @@
    License along with the GNU C Library.  If not, see
    <https://www.gnu.org/licenses/>.  */
 
+#include <sysdep.h>
 #include <shlib-compat.h>
 
-#include <gmon/mcount.c>
+ENTRY (__mcount)
+	stp     x29, x30, [sp, -16]!
+	/* Note: xpaclri is needed for frompc because of gcc PR target/94791.  */
+	hint	7
+	mov	x1, x30
+	/* Load the caller return address as frompc.  */
+	ldr	x0, [x29, #8]
+	mov	x30, x0
+	mov	x0, x30
+	/* Use the return address as selfpc.  */
+	mov	x0, x30
+	ldp     x29, x30, [sp], 16
+	b	__mcount_internal
+END (__mcount)
 
 /* We forgot to add _mcount in glibc 2.17.  We added it in 2.18
    therefore we want it to be added with version GLIBC_2_18.  However,
diff --git a/sysdeps/aarch64/machine-gmon.h b/sysdeps/aarch64/machine-gmon.h
index 6890b9912b..a703f5ca4d 100644
--- a/sysdeps/aarch64/machine-gmon.h
+++ b/sysdeps/aarch64/machine-gmon.h
@@ -22,14 +22,8 @@
 
 #include <sysdep.h>
 
-static void mcount_internal (u_long frompc, u_long selfpc);
-
 #define _MCOUNT_DECL(frompc, selfpc) \
-static inline void mcount_internal (u_long frompc, u_long selfpc)
+void __mcount_internal (u_long frompc, u_long selfpc)
 
-/* Note: strip_pac is needed for frompc because of gcc PR target/94791.  */
-#define MCOUNT                                                    \
-void __mcount (void *frompc)                                      \
-{                                                                 \
-  mcount_internal ((u_long) strip_pac (frompc), (u_long) RETURN_ADDRESS (0)); \
-}
+/* Implemented by __mcount.S.  */
+#define MCOUNT

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [glibc/azanella/clang] aarch64: Fix gmon profiling with clang
@ 2024-02-09 17:39 Adhemerval Zanella
  0 siblings, 0 replies; 4+ messages in thread
From: Adhemerval Zanella @ 2024-02-09 17:39 UTC (permalink / raw)
  To: glibc-cvs

https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=80adf8399949f1890632e572d756ebf81bea94a6

commit 80adf8399949f1890632e572d756ebf81bea94a6
Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Date:   Wed Jan 31 17:26:59 2024 +0000

    aarch64: Fix gmon profiling with clang
    
    Different than gcc, clang does not pass the LR value as the first
    argument.  To avoid requiring change clang generated code (since same
    ABI is used on other OS, like FreeBSD), use a similar strategy as x86_64
    to obtain both the frompc and the selfpc from the stack frame.
    
    Checked on aarch64-linux-gnu.

Diff:
---
 sysdeps/aarch64/Makefile                 |  3 +++
 sysdeps/aarch64/{mcount.c => __mcount.S} | 20 +++++++++++++++++---
 sysdeps/aarch64/machine-gmon.h           | 12 +++---------
 3 files changed, 23 insertions(+), 12 deletions(-)

diff --git a/sysdeps/aarch64/Makefile b/sysdeps/aarch64/Makefile
index 141d7d9cc2..bac84c6144 100644
--- a/sysdeps/aarch64/Makefile
+++ b/sysdeps/aarch64/Makefile
@@ -54,6 +54,9 @@ gen-as-const-headers += \
 endif
 
 ifeq ($(subdir),gmon)
+sysdep_routines += \
+  __mcount \
+  # sysdep_routines
 CFLAGS-mcount.c += -mgeneral-regs-only
 endif
 
diff --git a/sysdeps/aarch64/mcount.c b/sysdeps/aarch64/__mcount.S
similarity index 72%
rename from sysdeps/aarch64/mcount.c
rename to sysdeps/aarch64/__mcount.S
index 1651ab9c8f..9688c41459 100644
--- a/sysdeps/aarch64/mcount.c
+++ b/sysdeps/aarch64/__mcount.S
@@ -1,5 +1,5 @@
-/* Copyright (C) 2013-2024 Free Software Foundation, Inc.
-
+/* AArch64 definitions for profiling support.
+   Copyright (C) 2024 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -16,9 +16,23 @@
    License along with the GNU C Library.  If not, see
    <https://www.gnu.org/licenses/>.  */
 
+#include <sysdep.h>
 #include <shlib-compat.h>
 
-#include <gmon/mcount.c>
+ENTRY (__mcount)
+	stp     x29, x30, [sp, -16]!
+	/* Note: xpaclri is needed for frompc because of gcc PR target/94791.  */
+	hint	7
+	mov	x1, x30
+	/* Load the caller return address as frompc.  */
+	ldr	x0, [x29, #8]
+	mov	x30, x0
+	mov	x0, x30
+	/* Use the return address as selfpc.  */
+	mov	x0, x30
+	ldp     x29, x30, [sp], 16
+	b	__mcount_internal
+END (__mcount)
 
 /* We forgot to add _mcount in glibc 2.17.  We added it in 2.18
    therefore we want it to be added with version GLIBC_2_18.  However,
diff --git a/sysdeps/aarch64/machine-gmon.h b/sysdeps/aarch64/machine-gmon.h
index 6890b9912b..a703f5ca4d 100644
--- a/sysdeps/aarch64/machine-gmon.h
+++ b/sysdeps/aarch64/machine-gmon.h
@@ -22,14 +22,8 @@
 
 #include <sysdep.h>
 
-static void mcount_internal (u_long frompc, u_long selfpc);
-
 #define _MCOUNT_DECL(frompc, selfpc) \
-static inline void mcount_internal (u_long frompc, u_long selfpc)
+void __mcount_internal (u_long frompc, u_long selfpc)
 
-/* Note: strip_pac is needed for frompc because of gcc PR target/94791.  */
-#define MCOUNT                                                    \
-void __mcount (void *frompc)                                      \
-{                                                                 \
-  mcount_internal ((u_long) strip_pac (frompc), (u_long) RETURN_ADDRESS (0)); \
-}
+/* Implemented by __mcount.S.  */
+#define MCOUNT

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [glibc/azanella/clang] aarch64: Fix gmon profiling with clang
@ 2024-02-07 14:14 Adhemerval Zanella
  0 siblings, 0 replies; 4+ messages in thread
From: Adhemerval Zanella @ 2024-02-07 14:14 UTC (permalink / raw)
  To: glibc-cvs

https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=1c101ff9501d378360d29e41bbfa8caaf046bb5e

commit 1c101ff9501d378360d29e41bbfa8caaf046bb5e
Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Date:   Wed Jan 31 17:26:59 2024 +0000

    aarch64: Fix gmon profiling with clang
    
    Different than gcc, clang does not pass the LR value as the first
    argument.  To avoid requiring change clang generated code (since same
    ABI is used on other OS, like FreeBSD), use a similar strategy as x86_64
    to obtain both the frompc and the selfpc from the stack frame.
    
    Checked on aarch64-linux-gnu.

Diff:
---
 sysdeps/aarch64/Makefile                 |  3 +++
 sysdeps/aarch64/{mcount.c => __mcount.S} | 20 +++++++++++++++++---
 sysdeps/aarch64/machine-gmon.h           | 12 +++---------
 3 files changed, 23 insertions(+), 12 deletions(-)

diff --git a/sysdeps/aarch64/Makefile b/sysdeps/aarch64/Makefile
index 141d7d9cc2..bac84c6144 100644
--- a/sysdeps/aarch64/Makefile
+++ b/sysdeps/aarch64/Makefile
@@ -54,6 +54,9 @@ gen-as-const-headers += \
 endif
 
 ifeq ($(subdir),gmon)
+sysdep_routines += \
+  __mcount \
+  # sysdep_routines
 CFLAGS-mcount.c += -mgeneral-regs-only
 endif
 
diff --git a/sysdeps/aarch64/mcount.c b/sysdeps/aarch64/__mcount.S
similarity index 72%
rename from sysdeps/aarch64/mcount.c
rename to sysdeps/aarch64/__mcount.S
index 1651ab9c8f..9688c41459 100644
--- a/sysdeps/aarch64/mcount.c
+++ b/sysdeps/aarch64/__mcount.S
@@ -1,5 +1,5 @@
-/* Copyright (C) 2013-2024 Free Software Foundation, Inc.
-
+/* AArch64 definitions for profiling support.
+   Copyright (C) 2024 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -16,9 +16,23 @@
    License along with the GNU C Library.  If not, see
    <https://www.gnu.org/licenses/>.  */
 
+#include <sysdep.h>
 #include <shlib-compat.h>
 
-#include <gmon/mcount.c>
+ENTRY (__mcount)
+	stp     x29, x30, [sp, -16]!
+	/* Note: xpaclri is needed for frompc because of gcc PR target/94791.  */
+	hint	7
+	mov	x1, x30
+	/* Load the caller return address as frompc.  */
+	ldr	x0, [x29, #8]
+	mov	x30, x0
+	mov	x0, x30
+	/* Use the return address as selfpc.  */
+	mov	x0, x30
+	ldp     x29, x30, [sp], 16
+	b	__mcount_internal
+END (__mcount)
 
 /* We forgot to add _mcount in glibc 2.17.  We added it in 2.18
    therefore we want it to be added with version GLIBC_2_18.  However,
diff --git a/sysdeps/aarch64/machine-gmon.h b/sysdeps/aarch64/machine-gmon.h
index 6890b9912b..a703f5ca4d 100644
--- a/sysdeps/aarch64/machine-gmon.h
+++ b/sysdeps/aarch64/machine-gmon.h
@@ -22,14 +22,8 @@
 
 #include <sysdep.h>
 
-static void mcount_internal (u_long frompc, u_long selfpc);
-
 #define _MCOUNT_DECL(frompc, selfpc) \
-static inline void mcount_internal (u_long frompc, u_long selfpc)
+void __mcount_internal (u_long frompc, u_long selfpc)
 
-/* Note: strip_pac is needed for frompc because of gcc PR target/94791.  */
-#define MCOUNT                                                    \
-void __mcount (void *frompc)                                      \
-{                                                                 \
-  mcount_internal ((u_long) strip_pac (frompc), (u_long) RETURN_ADDRESS (0)); \
-}
+/* Implemented by __mcount.S.  */
+#define MCOUNT

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2024-04-17 20:14 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-04-17 20:14 [glibc/azanella/clang] aarch64: Fix gmon profiling with clang Adhemerval Zanella
  -- strict thread matches above, loose matches on Subject: below --
2024-04-02 16:01 Adhemerval Zanella
2024-02-09 17:39 Adhemerval Zanella
2024-02-07 14:14 Adhemerval Zanella

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).