diff mbox series

[v2,4/4] malloc: Remove memusage.h

Message ID 20211223173706.1179720-5-adhemerval.zanella@linaro.org
State Committed
Headers show
Series libmemusage code cleanup | expand

Checks

Context Check Description
dj/TryBot-apply_patch success Patch applied to master at the time it was sent

Commit Message

Adhemerval Zanella Dec. 23, 2021, 5:37 p.m. UTC
And use machine-sp.h instead.  The Linux implementation is based on
already provided CURRENT_STACK_FRAME (used on nptl code) and
STACK_GROWS_UPWARD is replaced with _STACK_GROWS_UP.
---
 malloc/memusage.c                             | 13 ++++++-----
 sysdeps/aarch64/memusage.h                    | 21 ------------------
 sysdeps/alpha/memusage.h                      | 20 -----------------
 sysdeps/arc/memusage.h                        | 21 ------------------
 sysdeps/arm/memusage.h                        | 20 -----------------
 sysdeps/csky/memusage.h                       | 21 ------------------
 sysdeps/hppa/memusage.h                       | 21 ------------------
 sysdeps/i386/htl/machine-sp.h                 |  2 +-
 sysdeps/i386/i586/memusage.h                  |  1 -
 sysdeps/i386/i686/memusage.h                  | 20 -----------------
 sysdeps/i386/memusage.h                       | 20 -----------------
 sysdeps/ia64/memusage.h                       | 22 -------------------
 sysdeps/m68k/memusage.h                       | 21 ------------------
 sysdeps/mach/hurd/i386/tls.h                  |  1 -
 sysdeps/mach/i386/machine-sp.h                |  2 +-
 sysdeps/microblaze/memusage.h                 | 21 ------------------
 sysdeps/mips/memusage.h                       | 20 -----------------
 sysdeps/nios2/memusage.h                      | 21 ------------------
 sysdeps/powerpc/memusage.h                    | 20 -----------------
 sysdeps/riscv/memusage.h                      | 21 ------------------
 sysdeps/s390/memusage.h                       | 20 -----------------
 sysdeps/sh/memusage.h                         | 20 -----------------
 sysdeps/sparc/memusage.h                      | 20 -----------------
 .../sysv/linux/machine-sp.h}                  | 18 +++++++++------
 sysdeps/x86_64/memusage.h                     | 20 -----------------
 25 files changed, 20 insertions(+), 407 deletions(-)
 delete mode 100644 sysdeps/aarch64/memusage.h
 delete mode 100644 sysdeps/alpha/memusage.h
 delete mode 100644 sysdeps/arc/memusage.h
 delete mode 100644 sysdeps/arm/memusage.h
 delete mode 100644 sysdeps/csky/memusage.h
 delete mode 100644 sysdeps/hppa/memusage.h
 delete mode 100644 sysdeps/i386/i586/memusage.h
 delete mode 100644 sysdeps/i386/i686/memusage.h
 delete mode 100644 sysdeps/i386/memusage.h
 delete mode 100644 sysdeps/ia64/memusage.h
 delete mode 100644 sysdeps/m68k/memusage.h
 delete mode 100644 sysdeps/microblaze/memusage.h
 delete mode 100644 sysdeps/mips/memusage.h
 delete mode 100644 sysdeps/nios2/memusage.h
 delete mode 100644 sysdeps/powerpc/memusage.h
 delete mode 100644 sysdeps/riscv/memusage.h
 delete mode 100644 sysdeps/s390/memusage.h
 delete mode 100644 sysdeps/sh/memusage.h
 delete mode 100644 sysdeps/sparc/memusage.h
 rename sysdeps/{generic/memusage.h => unix/sysv/linux/machine-sp.h} (68%)
 delete mode 100644 sysdeps/x86_64/memusage.h

Comments

Stafford Horne Dec. 28, 2021, 2:18 a.m. UTC | #1
This looks OK to me.  But I think it will need some testing.

See comments below.

On Thu, Dec 23, 2021 at 02:37:06PM -0300, Adhemerval Zanella via Libc-alpha wrote:
> And use machine-sp.h instead.  The Linux implementation is based on
> already provided CURRENT_STACK_FRAME (used on nptl code) and
> STACK_GROWS_UPWARD is replaced with _STACK_GROWS_UP.
> ---
>  malloc/memusage.c                             | 13 ++++++-----
>  sysdeps/aarch64/memusage.h                    | 21 ------------------
>  sysdeps/alpha/memusage.h                      | 20 -----------------
>  sysdeps/arc/memusage.h                        | 21 ------------------
>  sysdeps/arm/memusage.h                        | 20 -----------------
>  sysdeps/csky/memusage.h                       | 21 ------------------
>  sysdeps/hppa/memusage.h                       | 21 ------------------
>  sysdeps/i386/htl/machine-sp.h                 |  2 +-
>  sysdeps/i386/i586/memusage.h                  |  1 -
>  sysdeps/i386/i686/memusage.h                  | 20 -----------------
>  sysdeps/i386/memusage.h                       | 20 -----------------
>  sysdeps/ia64/memusage.h                       | 22 -------------------
>  sysdeps/m68k/memusage.h                       | 21 ------------------
>  sysdeps/mach/hurd/i386/tls.h                  |  1 -
>  sysdeps/mach/i386/machine-sp.h                |  2 +-
>  sysdeps/microblaze/memusage.h                 | 21 ------------------
>  sysdeps/mips/memusage.h                       | 20 -----------------
>  sysdeps/nios2/memusage.h                      | 21 ------------------
>  sysdeps/powerpc/memusage.h                    | 20 -----------------
>  sysdeps/riscv/memusage.h                      | 21 ------------------
>  sysdeps/s390/memusage.h                       | 20 -----------------
>  sysdeps/sh/memusage.h                         | 20 -----------------
>  sysdeps/sparc/memusage.h                      | 20 -----------------
>  .../sysv/linux/machine-sp.h}                  | 18 +++++++++------
>  sysdeps/x86_64/memusage.h                     | 20 -----------------
>  25 files changed, 20 insertions(+), 407 deletions(-)
>  delete mode 100644 sysdeps/aarch64/memusage.h
>  delete mode 100644 sysdeps/alpha/memusage.h
>  delete mode 100644 sysdeps/arc/memusage.h
>  delete mode 100644 sysdeps/arm/memusage.h
>  delete mode 100644 sysdeps/csky/memusage.h
>  delete mode 100644 sysdeps/hppa/memusage.h
>  delete mode 100644 sysdeps/i386/i586/memusage.h
>  delete mode 100644 sysdeps/i386/i686/memusage.h
>  delete mode 100644 sysdeps/i386/memusage.h
>  delete mode 100644 sysdeps/ia64/memusage.h
>  delete mode 100644 sysdeps/m68k/memusage.h
>  delete mode 100644 sysdeps/microblaze/memusage.h
>  delete mode 100644 sysdeps/mips/memusage.h
>  delete mode 100644 sysdeps/nios2/memusage.h
>  delete mode 100644 sysdeps/powerpc/memusage.h
>  delete mode 100644 sysdeps/riscv/memusage.h
>  delete mode 100644 sysdeps/s390/memusage.h
>  delete mode 100644 sysdeps/sh/memusage.h
>  delete mode 100644 sysdeps/sparc/memusage.h
>  rename sysdeps/{generic/memusage.h => unix/sysv/linux/machine-sp.h} (68%)
>  delete mode 100644 sysdeps/x86_64/memusage.h
> 
> diff --git a/malloc/memusage.c b/malloc/memusage.c
> index 179dd1c683..a1c5475fdb 100644
> --- a/malloc/memusage.c
> +++ b/malloc/memusage.c
> @@ -33,8 +33,9 @@
>  #include <sys/mman.h>
>  #include <sys/time.h>
>  
> -#include <memusage.h>
>  #include <hp-timing.h>
> +#include <machine-sp.h>
> +#include <stackinfo.h>  /* For _STACK_GROWS_UP  */
>  
>  /* Pointer to the real functions.  These are determined used `dlsym'
>     when really needed.  */
> @@ -146,10 +147,10 @@ update_data (struct header *result, size_t len, size_t old_len)
>       the main thread and it is the first call to any of these
>       functions.  */
>    if (__glibc_unlikely (!start_sp))
> -    start_sp = GETSP ();
> +    start_sp = __thread_stack_pointer ();
>  
> -  uintptr_t sp = GETSP ();
> -#ifdef STACK_GROWS_UPWARD
> +  uintptr_t sp = __thread_stack_pointer ();
> +#ifdef _STACK_GROWS_UP
>    /* This can happen in threads where we didn't catch the thread's
>       stack early enough.  */
>    if (__glibc_unlikely (sp < start_sp))
> @@ -259,7 +260,7 @@ me (void)
>        const char *outname;
>  
>        if (!start_sp)
> -        start_sp = GETSP ();
> +        start_sp = __thread_stack_pointer ();
>  
>        outname = getenv ("MEMUSAGE_OUTPUT");
>        if (outname != NULL && outname[0] != '\0'
> @@ -325,7 +326,7 @@ static void
>  __attribute__ ((constructor))
>  init (void)
>  {
> -  start_sp = GETSP ();
> +  start_sp = __thread_stack_pointer ();
>    if (!initialized)
>      me ();
>  }
> diff --git a/sysdeps/aarch64/memusage.h b/sysdeps/aarch64/memusage.h
> deleted file mode 100644
> index d29f7c7f89..0000000000
> --- a/sysdeps/aarch64/memusage.h
> +++ /dev/null
> @@ -1,21 +0,0 @@
> -/* Copyright (C) 2000-2021 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
> -   modify it under the terms of the GNU Lesser General Public License as
> -   published by the Free Software Foundation; either version 2.1 of the
> -   License, or (at your option) any later version.
> -
> -   The GNU C Library is distributed in the hope that it will be useful,
> -   but WITHOUT ANY WARRANTY; without even the implied warranty of
> -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> -   Lesser General Public License for more details.
> -
> -   You should have received a copy of the GNU Lesser General Public
> -   License along with the GNU C Library; if not, see
> -   <https://www.gnu.org/licenses/>.  */
> -
> -#define GETSP() ({ register uintptr_t stack_ptr asm ("sp"); stack_ptr; })
> -
> -#include <sysdeps/generic/memusage.h>
> diff --git a/sysdeps/alpha/memusage.h b/sysdeps/alpha/memusage.h
> deleted file mode 100644
> index bbd28302e4..0000000000
> --- a/sysdeps/alpha/memusage.h
> +++ /dev/null
> @@ -1,20 +0,0 @@
> -/* Copyright (C) 2000-2021 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
> -   modify it under the terms of the GNU Lesser General Public
> -   License as published by the Free Software Foundation; either
> -   version 2.1 of the License, or (at your option) any later version.
> -
> -   The GNU C Library is distributed in the hope that it will be useful,
> -   but WITHOUT ANY WARRANTY; without even the implied warranty of
> -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> -   Lesser General Public License for more details.
> -
> -   You should have received a copy of the GNU Lesser General Public
> -   License along with the GNU C Library.  If not, see
> -   <https://www.gnu.org/licenses/>.  */
> -
> -#define GETSP() ({ register uintptr_t stack_ptr asm ("$30"); stack_ptr; })
> -
> -#include <sysdeps/generic/memusage.h>
> diff --git a/sysdeps/arc/memusage.h b/sysdeps/arc/memusage.h
> deleted file mode 100644
> index e8a508a8ff..0000000000
> --- a/sysdeps/arc/memusage.h
> +++ /dev/null
> @@ -1,21 +0,0 @@
> -/* Machine-specific definitions for memory usage profiling, ARC version.
> -   Copyright (C) 2020-2021 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
> -   modify it under the terms of the GNU Lesser General Public
> -   License as published by the Free Software Foundation; either
> -   version 2.1 of the License, or (at your option) any later version.
> -
> -   The GNU C Library is distributed in the hope that it will be useful,
> -   but WITHOUT ANY WARRANTY; without even the implied warranty of
> -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> -   Lesser General Public License for more details.
> -
> -   You should have received a copy of the GNU Lesser General Public
> -   License along with the GNU C Library.  If not, see
> -   <https://www.gnu.org/licenses/>.  */
> -
> -#define GETSP() ({ register uintptr_t stack_ptr asm ("sp"); stack_ptr; })
> -
> -#include <sysdeps/generic/memusage.h>
> diff --git a/sysdeps/arm/memusage.h b/sysdeps/arm/memusage.h
> deleted file mode 100644
> index 2ec8de22a5..0000000000
> --- a/sysdeps/arm/memusage.h
> +++ /dev/null
> @@ -1,20 +0,0 @@
> -/* Copyright (C) 2000-2021 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
> -   modify it under the terms of the GNU Lesser General Public
> -   License as published by the Free Software Foundation; either
> -   version 2.1 of the License, or (at your option) any later version.
> -
> -   The GNU C Library is distributed in the hope that it will be useful,
> -   but WITHOUT ANY WARRANTY; without even the implied warranty of
> -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> -   Lesser General Public License for more details.
> -
> -   You should have received a copy of the GNU Lesser General Public
> -   License along with the GNU C Library.  If not, see
> -   <https://www.gnu.org/licenses/>.  */
> -
> -#define GETSP() ({ register uintptr_t stack_ptr asm ("sp"); stack_ptr; })
> -
> -#include <sysdeps/generic/memusage.h>
> diff --git a/sysdeps/csky/memusage.h b/sysdeps/csky/memusage.h
> deleted file mode 100644
> index 392682e12b..0000000000
> --- a/sysdeps/csky/memusage.h
> +++ /dev/null
> @@ -1,21 +0,0 @@
> -/* Machine-specific definitions for memory usage profiling, C-SKY version.
> -   Copyright (C) 2018-2021 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
> -   modify it under the terms of the GNU Lesser General Public
> -   License as published by the Free Software Foundation; either
> -   version 2.1 of the License, or (at your option) any later version.
> -
> -   The GNU C Library is distributed in the hope that it will be useful,
> -   but WITHOUT ANY WARRANTY; without even the implied warranty of
> -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> -   Lesser General Public License for more details.
> -
> -   You should have received a copy of the GNU Lesser General Public
> -   License along with the GNU C Library.  If not, see
> -   <https://www.gnu.org/licenses/>.  */
> -
> -#define GETSP() ({ register uintptr_t stack_ptr asm ("sp"); stack_ptr; })
> -
> -#include <sysdeps/generic/memusage.h>
> diff --git a/sysdeps/hppa/memusage.h b/sysdeps/hppa/memusage.h
> deleted file mode 100644
> index 25e8b94b3f..0000000000
> --- a/sysdeps/hppa/memusage.h
> +++ /dev/null
> @@ -1,21 +0,0 @@
> -/* Copyright (C) 2000-2021 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
> -   modify it under the terms of the GNU Lesser General Public
> -   License as published by the Free Software Foundation; either
> -   version 2.1 of the License, or (at your option) any later version.
> -
> -   The GNU C Library is distributed in the hope that it will be useful,
> -   but WITHOUT ANY WARRANTY; without even the implied warranty of
> -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> -   Lesser General Public License for more details.
> -
> -   You should have received a copy of the GNU Lesser General Public
> -   License along with the GNU C Library.  If not, see
> -   <https://www.gnu.org/licenses/>.  */
> -
> -#define GETSP() ({ register uintptr_t stack_ptr asm ("%r30"); stack_ptr; })
> -#define STACK_GROWS_UPWARD 1
> -
> -#include <sysdeps/generic/memusage.h>
> diff --git a/sysdeps/i386/htl/machine-sp.h b/sysdeps/i386/htl/machine-sp.h
> index 6b64dea385..812223d783 100644
> --- a/sysdeps/i386/htl/machine-sp.h
> +++ b/sysdeps/i386/htl/machine-sp.h
> @@ -22,7 +22,7 @@
>  /* Return the current stack pointer.  */
>  
>  #define __thread_stack_pointer() ({					      \
> -  register void *__sp__ asm("esp");					      \
> +  register uintptr_t __sp__ asm("esp");					      \
>    __sp__;								      \
>  })
>  
> diff --git a/sysdeps/i386/i586/memusage.h b/sysdeps/i386/i586/memusage.h
> deleted file mode 100644
> index c8170874d0..0000000000
> --- a/sysdeps/i386/i586/memusage.h
> +++ /dev/null
> @@ -1 +0,0 @@
> -#include "../i686/memusage.h"
> diff --git a/sysdeps/i386/i686/memusage.h b/sysdeps/i386/i686/memusage.h
> deleted file mode 100644
> index 07b241263c..0000000000
> --- a/sysdeps/i386/i686/memusage.h
> +++ /dev/null
> @@ -1,20 +0,0 @@
> -/* Copyright (C) 2000-2021 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
> -   modify it under the terms of the GNU Lesser General Public
> -   License as published by the Free Software Foundation; either
> -   version 2.1 of the License, or (at your option) any later version.
> -
> -   The GNU C Library is distributed in the hope that it will be useful,
> -   but WITHOUT ANY WARRANTY; without even the implied warranty of
> -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> -   Lesser General Public License for more details.
> -
> -   You should have received a copy of the GNU Lesser General Public
> -   License along with the GNU C Library; if not, see
> -   <https://www.gnu.org/licenses/>.  */
> -
> -#define GETSP() ({ register uintptr_t stack_ptr asm ("esp"); stack_ptr; })
> -
> -#include <sysdeps/generic/memusage.h>
> diff --git a/sysdeps/i386/memusage.h b/sysdeps/i386/memusage.h
> deleted file mode 100644
> index 07b241263c..0000000000
> --- a/sysdeps/i386/memusage.h
> +++ /dev/null
> @@ -1,20 +0,0 @@
> -/* Copyright (C) 2000-2021 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
> -   modify it under the terms of the GNU Lesser General Public
> -   License as published by the Free Software Foundation; either
> -   version 2.1 of the License, or (at your option) any later version.
> -
> -   The GNU C Library is distributed in the hope that it will be useful,
> -   but WITHOUT ANY WARRANTY; without even the implied warranty of
> -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> -   Lesser General Public License for more details.
> -
> -   You should have received a copy of the GNU Lesser General Public
> -   License along with the GNU C Library; if not, see
> -   <https://www.gnu.org/licenses/>.  */
> -
> -#define GETSP() ({ register uintptr_t stack_ptr asm ("esp"); stack_ptr; })
> -
> -#include <sysdeps/generic/memusage.h>
> diff --git a/sysdeps/ia64/memusage.h b/sysdeps/ia64/memusage.h
> deleted file mode 100644
> index 33fd6ec899..0000000000
> --- a/sysdeps/ia64/memusage.h
> +++ /dev/null
> @@ -1,22 +0,0 @@
> -/* Copyright (C) 2000-2021 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
> -   modify it under the terms of the GNU Lesser General Public
> -   License as published by the Free Software Foundation; either
> -   version 2.1 of the License, or (at your option) any later version.
> -
> -   The GNU C Library is distributed in the hope that it will be useful,
> -   but WITHOUT ANY WARRANTY; without even the implied warranty of
> -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> -   Lesser General Public License for more details.
> -
> -   You should have received a copy of the GNU Lesser General Public
> -   License along with the GNU C Library; if not, see
> -   <https://www.gnu.org/licenses/>.  */
> -
> -#include <hp-timing.h>
> -
> -#define GETSP() ({ register uintptr_t stack_ptr asm ("%r12"); stack_ptr; })
> -
> -#include <sysdeps/generic/memusage.h>
> diff --git a/sysdeps/m68k/memusage.h b/sysdeps/m68k/memusage.h
> deleted file mode 100644
> index c22d312aed..0000000000
> --- a/sysdeps/m68k/memusage.h
> +++ /dev/null
> @@ -1,21 +0,0 @@
> -/* Copyright (C) 2000-2021 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
> -   modify it under the terms of the GNU Lesser General Public
> -   License as published by the Free Software Foundation; either
> -   version 2.1 of the License, or (at your option) any later version.
> -
> -   The GNU C Library is distributed in the hope that it will be useful,
> -   but WITHOUT ANY WARRANTY; without even the implied warranty of
> -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> -   Lesser General Public License for more details.
> -
> -   You should have received a copy of the GNU Lesser General Public
> -   License along with the GNU C Library.  If not, see
> -   <https://www.gnu.org/licenses/>.  */
> -
> -
> -#define GETSP() ({ register uintptr_t stack_ptr asm ("%sp"); stack_ptr; })
> -
> -#include <sysdeps/generic/memusage.h>
> diff --git a/sysdeps/mach/hurd/i386/tls.h b/sysdeps/mach/hurd/i386/tls.h
> index c70ea73a81..c03d64c4d9 100644
> --- a/sysdeps/mach/hurd/i386/tls.h
> +++ b/sysdeps/mach/hurd/i386/tls.h
> @@ -295,7 +295,6 @@ out:
>       asm ("movl %%gs:%P1,%0" : "=q" (_dtv) : "i" (offsetof (tcbhead_t, dtv)));\
>       _dtv; })
>  
> -
>  /* Set the stack guard field in TCB head.  */
>  #define THREAD_SET_STACK_GUARD(value) \
>    THREAD_SETMEM (THREAD_SELF, stack_guard, value)
> diff --git a/sysdeps/mach/i386/machine-sp.h b/sysdeps/mach/i386/machine-sp.h
> index 280f3b7a4d..54b2a16c01 100644
> --- a/sysdeps/mach/i386/machine-sp.h
> +++ b/sysdeps/mach/i386/machine-sp.h
> @@ -22,7 +22,7 @@
>  /* Return the current stack pointer.  */
>  
>  #define __thread_stack_pointer() ({					      \
> -  void *__sp__;								      \
> +  uintptr_t __sp__;							      \
>    __asm__ ("movl %%esp, %0" : "=r" (__sp__));				      \
>    __sp__;								      \
>  })
> diff --git a/sysdeps/microblaze/memusage.h b/sysdeps/microblaze/memusage.h
> deleted file mode 100644
> index 516c0b4609..0000000000
> --- a/sysdeps/microblaze/memusage.h
> +++ /dev/null
> @@ -1,21 +0,0 @@
> -/* Copyright (C) 2000-2021 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
> -   modify it under the terms of the GNU Lesser General Public License as
> -   published by the Free Software Foundation; either version 2.1 of the
> -   License, or (at your option) any later version.
> -
> -   The GNU C Library is distributed in the hope that it will be useful,
> -   but WITHOUT ANY WARRANTY; without even the implied warranty of
> -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> -   Lesser General Public License for more details.
> -
> -   You should have received a copy of the GNU Lesser General Public
> -   License along with the GNU C Library; if not, see
> -   <https://www.gnu.org/licenses/>.  */
> -
> -#define GETSP() ({ register uintptr_t stack_ptr asm ("r1"); stack_ptr; })
> -
> -#include <sysdeps/generic/memusage.h>
> diff --git a/sysdeps/mips/memusage.h b/sysdeps/mips/memusage.h
> deleted file mode 100644
> index 64c558c81d..0000000000
> --- a/sysdeps/mips/memusage.h
> +++ /dev/null
> @@ -1,20 +0,0 @@
> -/* Copyright (C) 2000-2021 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
> -   modify it under the terms of the GNU Lesser General Public
> -   License as published by the Free Software Foundation; either
> -   version 2.1 of the License, or (at your option) any later version.
> -
> -   The GNU C Library is distributed in the hope that it will be useful,
> -   but WITHOUT ANY WARRANTY; without even the implied warranty of
> -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> -   Lesser General Public License for more details.
> -
> -   You should have received a copy of the GNU Lesser General Public
> -   License along with the GNU C Library.  If not, see
> -   <https://www.gnu.org/licenses/>.  */
> -
> -#define GETSP() ({ register uintptr_t stack_ptr asm ("$29"); stack_ptr; })
> -
> -#include <sysdeps/generic/memusage.h>
> diff --git a/sysdeps/nios2/memusage.h b/sysdeps/nios2/memusage.h
> deleted file mode 100644
> index 6f1c78812d..0000000000
> --- a/sysdeps/nios2/memusage.h
> +++ /dev/null
> @@ -1,21 +0,0 @@
> -/* Machine-specific definitions for memory usage profiling, Nios II version.
> -   Copyright (C) 2000-2021 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
> -   modify it under the terms of the GNU Lesser General Public
> -   License as published by the Free Software Foundation; either
> -   version 2.1 of the License, or (at your option) any later version.
> -
> -   The GNU C Library is distributed in the hope that it will be useful,
> -   but WITHOUT ANY WARRANTY; without even the implied warranty of
> -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> -   Lesser General Public License for more details.
> -
> -   You should have received a copy of the GNU Lesser General Public
> -   License along with the GNU C Library.  If not, see
> -   <https://www.gnu.org/licenses/>.  */
> -
> -#define GETSP() ({ register uintptr_t stack_ptr asm ("%sp"); stack_ptr; })
> -
> -#include <sysdeps/generic/memusage.h>
> diff --git a/sysdeps/powerpc/memusage.h b/sysdeps/powerpc/memusage.h
> deleted file mode 100644
> index ab21f46258..0000000000
> --- a/sysdeps/powerpc/memusage.h
> +++ /dev/null
> @@ -1,20 +0,0 @@
> -/* Copyright (C) 2000-2021 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
> -   modify it under the terms of the GNU Lesser General Public
> -   License as published by the Free Software Foundation; either
> -   version 2.1 of the License, or (at your option) any later version.
> -
> -   The GNU C Library is distributed in the hope that it will be useful,
> -   but WITHOUT ANY WARRANTY; without even the implied warranty of
> -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> -   Lesser General Public License for more details.
> -
> -   You should have received a copy of the GNU Lesser General Public
> -   License along with the GNU C Library; if not, see
> -   <https://www.gnu.org/licenses/>.  */
> -
> -#define GETSP() ({ register uintptr_t stack_ptr asm ("%r1"); stack_ptr; })
> -
> -#include <sysdeps/generic/memusage.h>
> diff --git a/sysdeps/riscv/memusage.h b/sysdeps/riscv/memusage.h
> deleted file mode 100644
> index b7b45791b9..0000000000
> --- a/sysdeps/riscv/memusage.h
> +++ /dev/null
> @@ -1,21 +0,0 @@
> -/* Machine-specific definitions for memory usage profiling, RISC-V version.
> -   Copyright (C) 2000-2021 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
> -   modify it under the terms of the GNU Lesser General Public
> -   License as published by the Free Software Foundation; either
> -   version 2.1 of the License, or (at your option) any later version.
> -
> -   The GNU C Library is distributed in the hope that it will be useful,
> -   but WITHOUT ANY WARRANTY; without even the implied warranty of
> -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> -   Lesser General Public License for more details.
> -
> -   You should have received a copy of the GNU Lesser General Public
> -   License along with the GNU C Library.  If not, see
> -   <https://www.gnu.org/licenses/>.  */
> -
> -#define GETSP() ({ register uintptr_t stack_ptr asm ("sp"); stack_ptr; })
> -
> -#include <sysdeps/generic/memusage.h>
> diff --git a/sysdeps/s390/memusage.h b/sysdeps/s390/memusage.h
> deleted file mode 100644
> index 6219d79664..0000000000
> --- a/sysdeps/s390/memusage.h
> +++ /dev/null
> @@ -1,20 +0,0 @@
> -/* Copyright (C) 2000-2021 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
> -   modify it under the terms of the GNU Lesser General Public
> -   License as published by the Free Software Foundation; either
> -   version 2.1 of the License, or (at your option) any later version.
> -
> -   The GNU C Library is distributed in the hope that it will be useful,
> -   but WITHOUT ANY WARRANTY; without even the implied warranty of
> -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> -   Lesser General Public License for more details.
> -
> -   You should have received a copy of the GNU Lesser General Public
> -   License along with the GNU C Library; if not, see
> -   <https://www.gnu.org/licenses/>.  */
> -
> -#define GETSP() ({ register uintptr_t stack_ptr __asm__ ("15"); stack_ptr; })
> -
> -#include <sysdeps/generic/memusage.h>
> diff --git a/sysdeps/sh/memusage.h b/sysdeps/sh/memusage.h
> deleted file mode 100644
> index 87c3d40fdf..0000000000
> --- a/sysdeps/sh/memusage.h
> +++ /dev/null
> @@ -1,20 +0,0 @@
> -/* Copyright (C) 2000-2021 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
> -   modify it under the terms of the GNU Lesser General Public
> -   License as published by the Free Software Foundation; either
> -   version 2.1 of the License, or (at your option) any later version.
> -
> -   The GNU C Library is distributed in the hope that it will be useful,
> -   but WITHOUT ANY WARRANTY; without even the implied warranty of
> -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> -   Lesser General Public License for more details.
> -
> -   You should have received a copy of the GNU Lesser General Public
> -   License along with the GNU C Library; if not, see
> -   <https://www.gnu.org/licenses/>.  */
> -
> -#define GETSP() ({ register uintptr_t stack_ptr asm ("r15"); stack_ptr; })
> -
> -#include <sysdeps/generic/memusage.h>
> diff --git a/sysdeps/sparc/memusage.h b/sysdeps/sparc/memusage.h
> deleted file mode 100644
> index 13741e2577..0000000000
> --- a/sysdeps/sparc/memusage.h
> +++ /dev/null
> @@ -1,20 +0,0 @@
> -/* Copyright (C) 2000-2021 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
> -   modify it under the terms of the GNU Lesser General Public
> -   License as published by the Free Software Foundation; either
> -   version 2.1 of the License, or (at your option) any later version.
> -
> -   The GNU C Library is distributed in the hope that it will be useful,
> -   but WITHOUT ANY WARRANTY; without even the implied warranty of
> -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> -   Lesser General Public License for more details.
> -
> -   You should have received a copy of the GNU Lesser General Public
> -   License along with the GNU C Library; if not, see
> -   <https://www.gnu.org/licenses/>.  */
> -
> -#define GETSP() ({ register uintptr_t stack_ptr asm ("%sp"); stack_ptr; })
> -
> -#include <sysdeps/generic/memusage.h>
> diff --git a/sysdeps/generic/memusage.h b/sysdeps/unix/sysv/linux/machine-sp.h
> similarity index 68%
> rename from sysdeps/generic/memusage.h
> rename to sysdeps/unix/sysv/linux/machine-sp.h
> index 514bd058d2..257d09e60d 100644
> --- a/sysdeps/generic/memusage.h
> +++ b/sysdeps/unix/sysv/linux/machine-sp.h
> @@ -1,4 +1,5 @@
> -/* Copyright (C) 2000-2021 Free Software Foundation, Inc.
> +/* Machine-specific function to return the stack pointer.  Linux version.
> +   Copyright (C) 2021 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
> @@ -15,11 +16,14 @@
>     License along with the GNU C Library; if not, see
>     <https://www.gnu.org/licenses/>.  */
>  
> +#ifndef _MACHINE_SP_H
> +#define _MACHINE_SP_H
>  
> -#include <limits.h>
> -#include <stdint.h>
> +/* Return the current stack pointer.  */
> +static inline uintptr_t
> +__thread_stack_pointer (void)
> +{
> +  return (uintptr_t) CURRENT_STACK_FRAME;
> +}

We replace GETSP with __thread_stack_pointer which is essentially
CURRENT_STACK_FRAME.  This seems different than GETSP.

As defined on some architectures it uses some extra math rather than
just getting the SP register.

    glibc/sysdeps/arc/nptl/pthreaddef.h:#define CURRENT_STACK_FRAME __builtin_frame_address (0)
    glibc/sysdeps/sparc/sparc64/pthreaddef.h:#define CURRENT_STACK_FRAME  (stack_pointer + (2 * 128))
    glibc/sysdeps/sparc/sparc32/pthreaddef.h:#define CURRENT_STACK_FRAME  (stack_pointer + (2 * 64))
    glibc/sysdeps/alpha/nptl/pthreaddef.h:#define CURRENT_STACK_FRAME       __builtin_frame_address (0)
    glibc/sysdeps/m68k/nptl/pthreaddef.h:#define CURRENT_STACK_FRAME        __builtin_frame_address (0)

However, for the purposes of memusage I think it is sufficient.

Have you tested?

-Stafford

> -#ifndef GETSP
> -# warning "GETSP is not defined for this architecture."
> -# define GETSP 0
> -#endif
> +#endif	/* machine-sp.h */
> diff --git a/sysdeps/x86_64/memusage.h b/sysdeps/x86_64/memusage.h
> deleted file mode 100644
> index 6652fc5da1..0000000000
> --- a/sysdeps/x86_64/memusage.h
> +++ /dev/null
> @@ -1,20 +0,0 @@
> -/* Copyright (C) 2001-2021 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
> -   modify it under the terms of the GNU Lesser General Public
> -   License as published by the Free Software Foundation; either
> -   version 2.1 of the License, or (at your option) any later version.
> -
> -   The GNU C Library is distributed in the hope that it will be useful,
> -   but WITHOUT ANY WARRANTY; without even the implied warranty of
> -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> -   Lesser General Public License for more details.
> -
> -   You should have received a copy of the GNU Lesser General Public
> -   License along with the GNU C Library; if not, see
> -   <https://www.gnu.org/licenses/>.  */
> -
> -#define GETSP() ({ register uintptr_t stack_ptr asm ("rsp"); stack_ptr; })
> -
> -#include <sysdeps/generic/memusage.h>
> -- 
> 2.32.0
>
diff mbox series

Patch

diff --git a/malloc/memusage.c b/malloc/memusage.c
index 179dd1c683..a1c5475fdb 100644
--- a/malloc/memusage.c
+++ b/malloc/memusage.c
@@ -33,8 +33,9 @@ 
 #include <sys/mman.h>
 #include <sys/time.h>
 
-#include <memusage.h>
 #include <hp-timing.h>
+#include <machine-sp.h>
+#include <stackinfo.h>  /* For _STACK_GROWS_UP  */
 
 /* Pointer to the real functions.  These are determined used `dlsym'
    when really needed.  */
@@ -146,10 +147,10 @@  update_data (struct header *result, size_t len, size_t old_len)
      the main thread and it is the first call to any of these
      functions.  */
   if (__glibc_unlikely (!start_sp))
-    start_sp = GETSP ();
+    start_sp = __thread_stack_pointer ();
 
-  uintptr_t sp = GETSP ();
-#ifdef STACK_GROWS_UPWARD
+  uintptr_t sp = __thread_stack_pointer ();
+#ifdef _STACK_GROWS_UP
   /* This can happen in threads where we didn't catch the thread's
      stack early enough.  */
   if (__glibc_unlikely (sp < start_sp))
@@ -259,7 +260,7 @@  me (void)
       const char *outname;
 
       if (!start_sp)
-        start_sp = GETSP ();
+        start_sp = __thread_stack_pointer ();
 
       outname = getenv ("MEMUSAGE_OUTPUT");
       if (outname != NULL && outname[0] != '\0'
@@ -325,7 +326,7 @@  static void
 __attribute__ ((constructor))
 init (void)
 {
-  start_sp = GETSP ();
+  start_sp = __thread_stack_pointer ();
   if (!initialized)
     me ();
 }
diff --git a/sysdeps/aarch64/memusage.h b/sysdeps/aarch64/memusage.h
deleted file mode 100644
index d29f7c7f89..0000000000
--- a/sysdeps/aarch64/memusage.h
+++ /dev/null
@@ -1,21 +0,0 @@ 
-/* Copyright (C) 2000-2021 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
-   modify it under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of the
-   License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#define GETSP() ({ register uintptr_t stack_ptr asm ("sp"); stack_ptr; })
-
-#include <sysdeps/generic/memusage.h>
diff --git a/sysdeps/alpha/memusage.h b/sysdeps/alpha/memusage.h
deleted file mode 100644
index bbd28302e4..0000000000
--- a/sysdeps/alpha/memusage.h
+++ /dev/null
@@ -1,20 +0,0 @@ 
-/* Copyright (C) 2000-2021 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
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library.  If not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#define GETSP() ({ register uintptr_t stack_ptr asm ("$30"); stack_ptr; })
-
-#include <sysdeps/generic/memusage.h>
diff --git a/sysdeps/arc/memusage.h b/sysdeps/arc/memusage.h
deleted file mode 100644
index e8a508a8ff..0000000000
--- a/sysdeps/arc/memusage.h
+++ /dev/null
@@ -1,21 +0,0 @@ 
-/* Machine-specific definitions for memory usage profiling, ARC version.
-   Copyright (C) 2020-2021 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
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library.  If not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#define GETSP() ({ register uintptr_t stack_ptr asm ("sp"); stack_ptr; })
-
-#include <sysdeps/generic/memusage.h>
diff --git a/sysdeps/arm/memusage.h b/sysdeps/arm/memusage.h
deleted file mode 100644
index 2ec8de22a5..0000000000
--- a/sysdeps/arm/memusage.h
+++ /dev/null
@@ -1,20 +0,0 @@ 
-/* Copyright (C) 2000-2021 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
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library.  If not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#define GETSP() ({ register uintptr_t stack_ptr asm ("sp"); stack_ptr; })
-
-#include <sysdeps/generic/memusage.h>
diff --git a/sysdeps/csky/memusage.h b/sysdeps/csky/memusage.h
deleted file mode 100644
index 392682e12b..0000000000
--- a/sysdeps/csky/memusage.h
+++ /dev/null
@@ -1,21 +0,0 @@ 
-/* Machine-specific definitions for memory usage profiling, C-SKY version.
-   Copyright (C) 2018-2021 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
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library.  If not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#define GETSP() ({ register uintptr_t stack_ptr asm ("sp"); stack_ptr; })
-
-#include <sysdeps/generic/memusage.h>
diff --git a/sysdeps/hppa/memusage.h b/sysdeps/hppa/memusage.h
deleted file mode 100644
index 25e8b94b3f..0000000000
--- a/sysdeps/hppa/memusage.h
+++ /dev/null
@@ -1,21 +0,0 @@ 
-/* Copyright (C) 2000-2021 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
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library.  If not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#define GETSP() ({ register uintptr_t stack_ptr asm ("%r30"); stack_ptr; })
-#define STACK_GROWS_UPWARD 1
-
-#include <sysdeps/generic/memusage.h>
diff --git a/sysdeps/i386/htl/machine-sp.h b/sysdeps/i386/htl/machine-sp.h
index 6b64dea385..812223d783 100644
--- a/sysdeps/i386/htl/machine-sp.h
+++ b/sysdeps/i386/htl/machine-sp.h
@@ -22,7 +22,7 @@ 
 /* Return the current stack pointer.  */
 
 #define __thread_stack_pointer() ({					      \
-  register void *__sp__ asm("esp");					      \
+  register uintptr_t __sp__ asm("esp");					      \
   __sp__;								      \
 })
 
diff --git a/sysdeps/i386/i586/memusage.h b/sysdeps/i386/i586/memusage.h
deleted file mode 100644
index c8170874d0..0000000000
--- a/sysdeps/i386/i586/memusage.h
+++ /dev/null
@@ -1 +0,0 @@ 
-#include "../i686/memusage.h"
diff --git a/sysdeps/i386/i686/memusage.h b/sysdeps/i386/i686/memusage.h
deleted file mode 100644
index 07b241263c..0000000000
--- a/sysdeps/i386/i686/memusage.h
+++ /dev/null
@@ -1,20 +0,0 @@ 
-/* Copyright (C) 2000-2021 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
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#define GETSP() ({ register uintptr_t stack_ptr asm ("esp"); stack_ptr; })
-
-#include <sysdeps/generic/memusage.h>
diff --git a/sysdeps/i386/memusage.h b/sysdeps/i386/memusage.h
deleted file mode 100644
index 07b241263c..0000000000
--- a/sysdeps/i386/memusage.h
+++ /dev/null
@@ -1,20 +0,0 @@ 
-/* Copyright (C) 2000-2021 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
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#define GETSP() ({ register uintptr_t stack_ptr asm ("esp"); stack_ptr; })
-
-#include <sysdeps/generic/memusage.h>
diff --git a/sysdeps/ia64/memusage.h b/sysdeps/ia64/memusage.h
deleted file mode 100644
index 33fd6ec899..0000000000
--- a/sysdeps/ia64/memusage.h
+++ /dev/null
@@ -1,22 +0,0 @@ 
-/* Copyright (C) 2000-2021 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
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#include <hp-timing.h>
-
-#define GETSP() ({ register uintptr_t stack_ptr asm ("%r12"); stack_ptr; })
-
-#include <sysdeps/generic/memusage.h>
diff --git a/sysdeps/m68k/memusage.h b/sysdeps/m68k/memusage.h
deleted file mode 100644
index c22d312aed..0000000000
--- a/sysdeps/m68k/memusage.h
+++ /dev/null
@@ -1,21 +0,0 @@ 
-/* Copyright (C) 2000-2021 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
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library.  If not, see
-   <https://www.gnu.org/licenses/>.  */
-
-
-#define GETSP() ({ register uintptr_t stack_ptr asm ("%sp"); stack_ptr; })
-
-#include <sysdeps/generic/memusage.h>
diff --git a/sysdeps/mach/hurd/i386/tls.h b/sysdeps/mach/hurd/i386/tls.h
index c70ea73a81..c03d64c4d9 100644
--- a/sysdeps/mach/hurd/i386/tls.h
+++ b/sysdeps/mach/hurd/i386/tls.h
@@ -295,7 +295,6 @@  out:
      asm ("movl %%gs:%P1,%0" : "=q" (_dtv) : "i" (offsetof (tcbhead_t, dtv)));\
      _dtv; })
 
-
 /* Set the stack guard field in TCB head.  */
 #define THREAD_SET_STACK_GUARD(value) \
   THREAD_SETMEM (THREAD_SELF, stack_guard, value)
diff --git a/sysdeps/mach/i386/machine-sp.h b/sysdeps/mach/i386/machine-sp.h
index 280f3b7a4d..54b2a16c01 100644
--- a/sysdeps/mach/i386/machine-sp.h
+++ b/sysdeps/mach/i386/machine-sp.h
@@ -22,7 +22,7 @@ 
 /* Return the current stack pointer.  */
 
 #define __thread_stack_pointer() ({					      \
-  void *__sp__;								      \
+  uintptr_t __sp__;							      \
   __asm__ ("movl %%esp, %0" : "=r" (__sp__));				      \
   __sp__;								      \
 })
diff --git a/sysdeps/microblaze/memusage.h b/sysdeps/microblaze/memusage.h
deleted file mode 100644
index 516c0b4609..0000000000
--- a/sysdeps/microblaze/memusage.h
+++ /dev/null
@@ -1,21 +0,0 @@ 
-/* Copyright (C) 2000-2021 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
-   modify it under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of the
-   License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#define GETSP() ({ register uintptr_t stack_ptr asm ("r1"); stack_ptr; })
-
-#include <sysdeps/generic/memusage.h>
diff --git a/sysdeps/mips/memusage.h b/sysdeps/mips/memusage.h
deleted file mode 100644
index 64c558c81d..0000000000
--- a/sysdeps/mips/memusage.h
+++ /dev/null
@@ -1,20 +0,0 @@ 
-/* Copyright (C) 2000-2021 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
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library.  If not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#define GETSP() ({ register uintptr_t stack_ptr asm ("$29"); stack_ptr; })
-
-#include <sysdeps/generic/memusage.h>
diff --git a/sysdeps/nios2/memusage.h b/sysdeps/nios2/memusage.h
deleted file mode 100644
index 6f1c78812d..0000000000
--- a/sysdeps/nios2/memusage.h
+++ /dev/null
@@ -1,21 +0,0 @@ 
-/* Machine-specific definitions for memory usage profiling, Nios II version.
-   Copyright (C) 2000-2021 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
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library.  If not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#define GETSP() ({ register uintptr_t stack_ptr asm ("%sp"); stack_ptr; })
-
-#include <sysdeps/generic/memusage.h>
diff --git a/sysdeps/powerpc/memusage.h b/sysdeps/powerpc/memusage.h
deleted file mode 100644
index ab21f46258..0000000000
--- a/sysdeps/powerpc/memusage.h
+++ /dev/null
@@ -1,20 +0,0 @@ 
-/* Copyright (C) 2000-2021 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
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#define GETSP() ({ register uintptr_t stack_ptr asm ("%r1"); stack_ptr; })
-
-#include <sysdeps/generic/memusage.h>
diff --git a/sysdeps/riscv/memusage.h b/sysdeps/riscv/memusage.h
deleted file mode 100644
index b7b45791b9..0000000000
--- a/sysdeps/riscv/memusage.h
+++ /dev/null
@@ -1,21 +0,0 @@ 
-/* Machine-specific definitions for memory usage profiling, RISC-V version.
-   Copyright (C) 2000-2021 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
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library.  If not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#define GETSP() ({ register uintptr_t stack_ptr asm ("sp"); stack_ptr; })
-
-#include <sysdeps/generic/memusage.h>
diff --git a/sysdeps/s390/memusage.h b/sysdeps/s390/memusage.h
deleted file mode 100644
index 6219d79664..0000000000
--- a/sysdeps/s390/memusage.h
+++ /dev/null
@@ -1,20 +0,0 @@ 
-/* Copyright (C) 2000-2021 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
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#define GETSP() ({ register uintptr_t stack_ptr __asm__ ("15"); stack_ptr; })
-
-#include <sysdeps/generic/memusage.h>
diff --git a/sysdeps/sh/memusage.h b/sysdeps/sh/memusage.h
deleted file mode 100644
index 87c3d40fdf..0000000000
--- a/sysdeps/sh/memusage.h
+++ /dev/null
@@ -1,20 +0,0 @@ 
-/* Copyright (C) 2000-2021 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
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#define GETSP() ({ register uintptr_t stack_ptr asm ("r15"); stack_ptr; })
-
-#include <sysdeps/generic/memusage.h>
diff --git a/sysdeps/sparc/memusage.h b/sysdeps/sparc/memusage.h
deleted file mode 100644
index 13741e2577..0000000000
--- a/sysdeps/sparc/memusage.h
+++ /dev/null
@@ -1,20 +0,0 @@ 
-/* Copyright (C) 2000-2021 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
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#define GETSP() ({ register uintptr_t stack_ptr asm ("%sp"); stack_ptr; })
-
-#include <sysdeps/generic/memusage.h>
diff --git a/sysdeps/generic/memusage.h b/sysdeps/unix/sysv/linux/machine-sp.h
similarity index 68%
rename from sysdeps/generic/memusage.h
rename to sysdeps/unix/sysv/linux/machine-sp.h
index 514bd058d2..257d09e60d 100644
--- a/sysdeps/generic/memusage.h
+++ b/sysdeps/unix/sysv/linux/machine-sp.h
@@ -1,4 +1,5 @@ 
-/* Copyright (C) 2000-2021 Free Software Foundation, Inc.
+/* Machine-specific function to return the stack pointer.  Linux version.
+   Copyright (C) 2021 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
@@ -15,11 +16,14 @@ 
    License along with the GNU C Library; if not, see
    <https://www.gnu.org/licenses/>.  */
 
+#ifndef _MACHINE_SP_H
+#define _MACHINE_SP_H
 
-#include <limits.h>
-#include <stdint.h>
+/* Return the current stack pointer.  */
+static inline uintptr_t
+__thread_stack_pointer (void)
+{
+  return (uintptr_t) CURRENT_STACK_FRAME;
+}
 
-#ifndef GETSP
-# warning "GETSP is not defined for this architecture."
-# define GETSP 0
-#endif
+#endif	/* machine-sp.h */
diff --git a/sysdeps/x86_64/memusage.h b/sysdeps/x86_64/memusage.h
deleted file mode 100644
index 6652fc5da1..0000000000
--- a/sysdeps/x86_64/memusage.h
+++ /dev/null
@@ -1,20 +0,0 @@ 
-/* Copyright (C) 2001-2021 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
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#define GETSP() ({ register uintptr_t stack_ptr asm ("rsp"); stack_ptr; })
-
-#include <sysdeps/generic/memusage.h>