All of lore.kernel.org
 help / color / mirror / Atom feed
* [Buildroot] [PATCH v1 1/2] package/gdb: fix gdb-11.1 compile for uclibc < v1.0.35 (getrandom related)
@ 2021-11-06 12:09 Peter Seiderer
  2021-11-06 12:09 ` [Buildroot] [RFC v1 2/2] package/gdb: gdb-11.1 compile for uclibc (ADDR_NO_RANDOMIZE related) Peter Seiderer
  0 siblings, 1 reply; 3+ messages in thread
From: Peter Seiderer @ 2021-11-06 12:09 UTC (permalink / raw)
  To: buildroot

- fix getrandom compile for uclibc < v1.0.35, add missing stddef.h
  include (fixed in uclibc since v1.0.35, see [1])

Fixes:

  .../host/x86_64-buildroot-linux-uclibc/sysroot/usr/include/sys/random.h:27:35: error: unknown type name ‘size_t’
     27 | extern int getrandom(void *__buf, size_t count, unsigned int flags)
        |                                   ^~~~~~

Signed-off-by: Peter Seiderer <ps.report@gmx.net>
---
 ...getrandom-compile-for-uclibc-v1.0.35.patch | 39 +++++++++++++++++++
 1 file changed, 39 insertions(+)
 create mode 100644 package/gdb/11.1/0007-Fix-getrandom-compile-for-uclibc-v1.0.35.patch

diff --git a/package/gdb/11.1/0007-Fix-getrandom-compile-for-uclibc-v1.0.35.patch b/package/gdb/11.1/0007-Fix-getrandom-compile-for-uclibc-v1.0.35.patch
new file mode 100644
index 0000000000..b02d63fc0c
--- /dev/null
+++ b/package/gdb/11.1/0007-Fix-getrandom-compile-for-uclibc-v1.0.35.patch
@@ -0,0 +1,39 @@
+From 879008ef9a48aa1363671f5c1736b49f30c5a379 Mon Sep 17 00:00:00 2001
+From: Peter Seiderer <ps.report@gmx.net>
+Date: Sat, 6 Nov 2021 10:06:25 +0100
+Subject: [PATCH] Fix getrandom compile for uclibc < v1.0.35
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+- fix getrandom compile for uclibc < v1.0.35, add missing stddef.h
+  include (fixed in uclibc since v1.0.35, see [1])
+
+Fixes:
+
+  .../host/x86_64-buildroot-linux-uclibc/sysroot/usr/include/sys/random.h:27:35: error: unknown type name ‘size_t’
+     27 | extern int getrandom(void *__buf, size_t count, unsigned int flags)
+        |                                   ^~~~~~
+
+[1] https://cgit.uclibc-ng.org/cgi/cgit/uclibc-ng.git/commit/?id=00972c02c2b6e0a95d5def4a71bdfb188e091782t
+
+Signed-off-by: Peter Seiderer <ps.report@gmx.net>
+---
+ gnulib/import/getrandom.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/gnulib/import/getrandom.c b/gnulib/import/getrandom.c
+index 41212fb..0ad3f96 100644
+--- a/gnulib/import/getrandom.c
++++ b/gnulib/import/getrandom.c
+@@ -19,6 +19,7 @@
+ 
+ #include <config.h>
+ 
++#include <stddef.h>
+ #include <sys/random.h>
+ 
+ #include <errno.h>
+-- 
+2.33.1
+
-- 
2.33.1

_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

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

* [Buildroot] [RFC v1 2/2] package/gdb: gdb-11.1 compile for uclibc (ADDR_NO_RANDOMIZE related)
  2021-11-06 12:09 [Buildroot] [PATCH v1 1/2] package/gdb: fix gdb-11.1 compile for uclibc < v1.0.35 (getrandom related) Peter Seiderer
@ 2021-11-06 12:09 ` Peter Seiderer
  2021-11-06 12:22   ` Peter Seiderer
  0 siblings, 1 reply; 3+ messages in thread
From: Peter Seiderer @ 2021-11-06 12:09 UTC (permalink / raw)
  To: buildroot

- add patch reverting upstream patch ([1]) which removed the configure
  time check

Fixes:

  ../../gdbserver/../gdb/nat/linux-personality.c: In constructor ‘maybe_disable_address_space_randomization::maybe_disable_address_space_randomization(int)’:
  ../../gdbserver/../gdb/nat/linux-personality.c:36:48: error: ‘ADDR_NO_RANDOMIZE’ was not declared in this scope
     36 |       if (errno == 0 && !(m_personality_orig & ADDR_NO_RANDOMIZE))
        |                                                ^~~~~~~~~~~~~~~~~
  ../../gdbserver/../gdb/nat/linux-personality.c:42:37: error: ‘ADDR_NO_RANDOMIZE’ was not declared in this scope
     42 |     && !(personality (0xffffffff) & ADDR_NO_RANDOMIZE)))
        |                                     ^~~~~~~~~~~~~~~~~

[1] https://sourceware.org/git/?p=binutils-gdb.git;a=commitdiff;h=4655f8509fd44e6efabefa373650d9982ff37fd6

Signed-off-by: Peter Seiderer <ps.report@gmx.net>
---
Note:

 - a quick fix, the proper fix would be (as mentioned in the upstream
   commit changelog:

    [...]
    If for some odd reason, some remotely modern system still needs a
    configure check, then we can revert this commit but drop the
    AC_RUN_IFELSE in favor of always doing the AC_LINK_IFELSE
    cross-compile fallback.
    [...]
---
 ...-personality-syscall-at-configure-ti.patch | 371 ++++++++++++++++++
 1 file changed, 371 insertions(+)
 create mode 100644 package/gdb/11.1/0008-Revert-Don-t-run-personality-syscall-at-configure-ti.patch

diff --git a/package/gdb/11.1/0008-Revert-Don-t-run-personality-syscall-at-configure-ti.patch b/package/gdb/11.1/0008-Revert-Don-t-run-personality-syscall-at-configure-ti.patch
new file mode 100644
index 0000000000..d674287b57
--- /dev/null
+++ b/package/gdb/11.1/0008-Revert-Don-t-run-personality-syscall-at-configure-ti.patch
@@ -0,0 +1,371 @@
+From c26b279aa4c7dc8a0cd9e30d2e43e6b95cefb5a0 Mon Sep 17 00:00:00 2001
+From: Peter Seiderer <ps.report@gmx.net>
+Date: Sat, 6 Nov 2021 12:54:42 +0100
+Subject: [PATCH] Revert "Don't run personality syscall at configure time;
+ don't check it at all"
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This reverts commit 4655f8509fd44e6efabefa373650d9982ff37fd6 ([1]).
+
+Fixes (with uclibc toolchain):
+
+  ../../gdbserver/../gdb/nat/linux-personality.c: In constructor ‘maybe_disable_address_space_randomization::maybe_disable_address_space_randomization(int)’:
+  ../../gdbserver/../gdb/nat/linux-personality.c:36:48: error: ‘ADDR_NO_RANDOMIZE’ was not declared in this scope
+     36 |       if (errno == 0 && !(m_personality_orig & ADDR_NO_RANDOMIZE))
+        |                                                ^~~~~~~~~~~~~~~~~
+  ../../gdbserver/../gdb/nat/linux-personality.c:42:37: error: ‘ADDR_NO_RANDOMIZE’ was not declared in this scope
+     42 |     && !(personality (0xffffffff) & ADDR_NO_RANDOMIZE)))
+        |                                     ^~~~~~~~~~~~~~~~~
+
+[1] https://sourceware.org/git/?p=binutils-gdb.git;a=commitdiff;h=4655f8509fd44e6efabefa373650d9982ff37fd6
+
+Signed-off-by: Peter Seiderer <ps.report@gmx.net>
+---
+ gdb/config.in               |  7 ++++
+ gdb/configure               | 74 +++++++++++++++++++++++++++++++++++++
+ gdb/linux-nat.c             |  4 ++
+ gdb/nat/linux-personality.c | 12 +++++-
+ gdbserver/config.in         |  7 ++++
+ gdbserver/configure         | 74 +++++++++++++++++++++++++++++++++++++
+ gdbserver/linux-low.cc      |  4 ++
+ gdbsupport/common.m4        | 23 ++++++++++++
+ 8 files changed, 204 insertions(+), 1 deletion(-)
+
+diff --git a/gdb/config.in b/gdb/config.in
+index 2c30504..eee0eaf 100644
+--- a/gdb/config.in
++++ b/gdb/config.in
+@@ -96,6 +96,10 @@
+ /* define if the compiler supports basic C++11 syntax */
+ #undef HAVE_CXX11
+ 
++/* Define to 1 if you have the declaration of `ADDR_NO_RANDOMIZE', and to 0 if
++   you don't. */
++#undef HAVE_DECL_ADDR_NO_RANDOMIZE
++
+ /* Define to 1 if you have the declaration of `asprintf', and to 0 if you
+    don't. */
+ #undef HAVE_DECL_ASPRINTF
+@@ -297,6 +301,9 @@
+ /* Define to 1 if you have the <nlist.h> header file. */
+ #undef HAVE_NLIST_H
+ 
++/* Define if you support the personality syscall. */
++#undef HAVE_PERSONALITY
++
+ /* Define to 1 if you have the `pipe' function. */
+ #undef HAVE_PIPE
+ 
+diff --git a/gdb/configure b/gdb/configure
+index 5d89635..599521a 100755
+--- a/gdb/configure
++++ b/gdb/configure
+@@ -13838,6 +13838,80 @@ fi
+ done
+ 
+ 
++      ac_fn_c_check_decl "$LINENO" "ADDR_NO_RANDOMIZE" "ac_cv_have_decl_ADDR_NO_RANDOMIZE" "#include <sys/personality.h>
++"
++if test "x$ac_cv_have_decl_ADDR_NO_RANDOMIZE" = xyes; then :
++  ac_have_decl=1
++else
++  ac_have_decl=0
++fi
++
++cat >>confdefs.h <<_ACEOF
++#define HAVE_DECL_ADDR_NO_RANDOMIZE $ac_have_decl
++_ACEOF
++
++
++  if test "$cross_compiling" = yes; then :
++  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h.  */
++#include <sys/personality.h>
++int
++main ()
++{
++
++  #      if !HAVE_DECL_ADDR_NO_RANDOMIZE
++  #       define ADDR_NO_RANDOMIZE 0x0040000
++  #      endif
++	 /* Test the flag could be set and stays set.  */
++	 personality (personality (0xffffffff) | ADDR_NO_RANDOMIZE);
++	 if (!(personality (personality (0xffffffff)) & ADDR_NO_RANDOMIZE))
++	     return 1
++  ;
++  return 0;
++}
++_ACEOF
++if ac_fn_c_try_link "$LINENO"; then :
++  have_personality=true
++else
++  have_personality=false
++fi
++rm -f core conftest.err conftest.$ac_objext \
++    conftest$ac_exeext conftest.$ac_ext
++else
++  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h.  */
++#include <sys/personality.h>
++int
++main ()
++{
++
++  #      if !HAVE_DECL_ADDR_NO_RANDOMIZE
++  #       define ADDR_NO_RANDOMIZE 0x0040000
++  #      endif
++	 /* Test the flag could be set and stays set.  */
++	 personality (personality (0xffffffff) | ADDR_NO_RANDOMIZE);
++	 if (!(personality (personality (0xffffffff)) & ADDR_NO_RANDOMIZE))
++	     return 1
++  ;
++  return 0;
++}
++_ACEOF
++if ac_fn_c_try_run "$LINENO"; then :
++  have_personality=true
++else
++  have_personality=false
++fi
++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
++  conftest.$ac_objext conftest.beam conftest.$ac_ext
++fi
++
++  if $have_personality
++  then
++
++$as_echo "#define HAVE_PERSONALITY 1" >>confdefs.h
++
++  fi
++
+   ac_fn_c_check_decl "$LINENO" "strstr" "ac_cv_have_decl_strstr" "$ac_includes_default"
+ if test "x$ac_cv_have_decl_strstr" = xyes; then :
+   ac_have_decl=1
+diff --git a/gdb/linux-nat.c b/gdb/linux-nat.c
+index f206b87..1a6bcb5 100644
+--- a/gdb/linux-nat.c
++++ b/gdb/linux-nat.c
+@@ -4195,7 +4195,11 @@ linux_nat_target::supports_multi_process ()
+ bool
+ linux_nat_target::supports_disable_randomization ()
+ {
++#ifdef HAVE_PERSONALITY
+   return true;
++#else
++  return false;
++#endif
+ }
+ 
+ /* SIGCHLD handler that serves two purposes: In non-stop/async mode,
+diff --git a/gdb/nat/linux-personality.c b/gdb/nat/linux-personality.c
+index 9ce345b..87d1921 100644
+--- a/gdb/nat/linux-personality.c
++++ b/gdb/nat/linux-personality.c
+@@ -20,7 +20,12 @@
+ #include "gdbsupport/common-defs.h"
+ #include "nat/linux-personality.h"
+ 
+-#include <sys/personality.h>
++#ifdef HAVE_PERSONALITY
++# include <sys/personality.h>
++# if !HAVE_DECL_ADDR_NO_RANDOMIZE
++#  define ADDR_NO_RANDOMIZE 0x0040000
++# endif /* ! HAVE_DECL_ADDR_NO_RANDOMIZE */
++#endif /* HAVE_PERSONALITY */
+ 
+ /* See comment on nat/linux-personality.h.  */
+ 
+@@ -29,6 +34,7 @@ maybe_disable_address_space_randomization (int disable_randomization)
+   : m_personality_set (false),
+     m_personality_orig (0)
+ {
++#ifdef HAVE_PERSONALITY
+   if (disable_randomization)
+     {
+       errno = 0;
+@@ -43,11 +49,14 @@ maybe_disable_address_space_randomization (int disable_randomization)
+ 	warning (_("Error disabling address space randomization: %s"),
+ 		 safe_strerror (errno));
+     }
++#endif /* HAVE_PERSONALITY */
+ }
+ 
+ maybe_disable_address_space_randomization::
+ ~maybe_disable_address_space_randomization ()
+ {
++#ifdef HAVE_PERSONALITY
++
+   if (m_personality_set)
+     {
+       errno = 0;
+@@ -56,4 +65,5 @@ maybe_disable_address_space_randomization::
+ 	warning (_("Error restoring address space randomization: %s"),
+ 		 safe_strerror (errno));
+     }
++#endif /* HAVE_PERSONALITY */
+ }
+diff --git a/gdbserver/config.in b/gdbserver/config.in
+index cf06c56..b55ddc1 100644
+--- a/gdbserver/config.in
++++ b/gdbserver/config.in
+@@ -31,6 +31,10 @@
+ /* define if the compiler supports basic C++11 syntax */
+ #undef HAVE_CXX11
+ 
++/* Define to 1 if you have the declaration of `ADDR_NO_RANDOMIZE', and to 0 if
++   you don't. */
++#undef HAVE_DECL_ADDR_NO_RANDOMIZE
++
+ /* Define to 1 if you have the declaration of `asprintf', and to 0 if you
+    don't. */
+ #undef HAVE_DECL_ASPRINTF
+@@ -178,6 +182,9 @@
+ /* Define to 1 if you have the <netinet/tcp.h> header file. */
+ #undef HAVE_NETINET_TCP_H
+ 
++/* Define if you support the personality syscall. */
++#undef HAVE_PERSONALITY
++
+ /* Define to 1 if you have the `pipe' function. */
+ #undef HAVE_PIPE
+ 
+diff --git a/gdbserver/configure b/gdbserver/configure
+index b227167..c566ab7 100755
+--- a/gdbserver/configure
++++ b/gdbserver/configure
+@@ -7131,6 +7131,80 @@ fi
+ done
+ 
+ 
++      ac_fn_c_check_decl "$LINENO" "ADDR_NO_RANDOMIZE" "ac_cv_have_decl_ADDR_NO_RANDOMIZE" "#include <sys/personality.h>
++"
++if test "x$ac_cv_have_decl_ADDR_NO_RANDOMIZE" = xyes; then :
++  ac_have_decl=1
++else
++  ac_have_decl=0
++fi
++
++cat >>confdefs.h <<_ACEOF
++#define HAVE_DECL_ADDR_NO_RANDOMIZE $ac_have_decl
++_ACEOF
++
++
++  if test "$cross_compiling" = yes; then :
++  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h.  */
++#include <sys/personality.h>
++int
++main ()
++{
++
++  #      if !HAVE_DECL_ADDR_NO_RANDOMIZE
++  #       define ADDR_NO_RANDOMIZE 0x0040000
++  #      endif
++	 /* Test the flag could be set and stays set.  */
++	 personality (personality (0xffffffff) | ADDR_NO_RANDOMIZE);
++	 if (!(personality (personality (0xffffffff)) & ADDR_NO_RANDOMIZE))
++	     return 1
++  ;
++  return 0;
++}
++_ACEOF
++if ac_fn_c_try_link "$LINENO"; then :
++  have_personality=true
++else
++  have_personality=false
++fi
++rm -f core conftest.err conftest.$ac_objext \
++    conftest$ac_exeext conftest.$ac_ext
++else
++  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h.  */
++#include <sys/personality.h>
++int
++main ()
++{
++
++  #      if !HAVE_DECL_ADDR_NO_RANDOMIZE
++  #       define ADDR_NO_RANDOMIZE 0x0040000
++  #      endif
++	 /* Test the flag could be set and stays set.  */
++	 personality (personality (0xffffffff) | ADDR_NO_RANDOMIZE);
++	 if (!(personality (personality (0xffffffff)) & ADDR_NO_RANDOMIZE))
++	     return 1
++  ;
++  return 0;
++}
++_ACEOF
++if ac_fn_c_try_run "$LINENO"; then :
++  have_personality=true
++else
++  have_personality=false
++fi
++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
++  conftest.$ac_objext conftest.beam conftest.$ac_ext
++fi
++
++  if $have_personality
++  then
++
++$as_echo "#define HAVE_PERSONALITY 1" >>confdefs.h
++
++  fi
++
+   ac_fn_c_check_decl "$LINENO" "strstr" "ac_cv_have_decl_strstr" "$ac_includes_default"
+ if test "x$ac_cv_have_decl_strstr" = xyes; then :
+   ac_have_decl=1
+diff --git a/gdbserver/linux-low.cc b/gdbserver/linux-low.cc
+index 5c6191d..ca0c513 100644
+--- a/gdbserver/linux-low.cc
++++ b/gdbserver/linux-low.cc
+@@ -6224,7 +6224,11 @@ linux_process_target::core_of_thread (ptid_t ptid)
+ bool
+ linux_process_target::supports_disable_randomization ()
+ {
++#ifdef HAVE_PERSONALITY
+   return true;
++#else
++  return false;
++#endif
+ }
+ 
+ bool
+diff --git a/gdbsupport/common.m4 b/gdbsupport/common.m4
+index 901c454..be925b4 100644
+--- a/gdbsupport/common.m4
++++ b/gdbsupport/common.m4
+@@ -55,6 +55,29 @@ AC_DEFUN([GDB_AC_COMMON], [
+ 		  ptrace64 sbrk setns sigaltstack sigprocmask \
+ 		  setpgid setpgrp getrusage getauxval sigtimedwait])
+ 
++  dnl Check if we can disable the virtual address space randomization.
++  dnl The functionality of setarch -R.
++  AC_CHECK_DECLS([ADDR_NO_RANDOMIZE],,, [#include <sys/personality.h>])
++  define([PERSONALITY_TEST], [AC_LANG_PROGRAM([#include <sys/personality.h>], [
++  #      if !HAVE_DECL_ADDR_NO_RANDOMIZE
++  #       define ADDR_NO_RANDOMIZE 0x0040000
++  #      endif
++	 /* Test the flag could be set and stays set.  */
++	 personality (personality (0xffffffff) | ADDR_NO_RANDOMIZE);
++	 if (!(personality (personality (0xffffffff)) & ADDR_NO_RANDOMIZE))
++	     return 1])])
++  AC_RUN_IFELSE([PERSONALITY_TEST],
++		[have_personality=true],
++		[have_personality=false],
++		[AC_LINK_IFELSE([PERSONALITY_TEST],
++				[have_personality=true],
++				[have_personality=false])])
++  if $have_personality
++  then
++      AC_DEFINE([HAVE_PERSONALITY], 1,
++		[Define if you support the personality syscall.])
++  fi
++
+   AC_CHECK_DECLS([strstr])
+ 
+   # ----------------------- #
+-- 
+2.33.1
+
-- 
2.33.1

_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

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

* Re: [Buildroot] [RFC v1 2/2] package/gdb: gdb-11.1 compile for uclibc (ADDR_NO_RANDOMIZE related)
  2021-11-06 12:09 ` [Buildroot] [RFC v1 2/2] package/gdb: gdb-11.1 compile for uclibc (ADDR_NO_RANDOMIZE related) Peter Seiderer
@ 2021-11-06 12:22   ` Peter Seiderer
  0 siblings, 0 replies; 3+ messages in thread
From: Peter Seiderer @ 2021-11-06 12:22 UTC (permalink / raw)
  To: buildroot

On Sat,  6 Nov 2021 13:09:35 +0100, Peter Seiderer <ps.report@gmx.net> wrote:

> - add patch reverting upstream patch ([1]) which removed the configure
>   time check
> 
> Fixes:
> 
>   ../../gdbserver/../gdb/nat/linux-personality.c: In constructor ‘maybe_disable_address_space_randomization::maybe_disable_address_space_randomization(int)’:
>   ../../gdbserver/../gdb/nat/linux-personality.c:36:48: error: ‘ADDR_NO_RANDOMIZE’ was not declared in this scope
>      36 |       if (errno == 0 && !(m_personality_orig & ADDR_NO_RANDOMIZE))
>         |                                                ^~~~~~~~~~~~~~~~~
>   ../../gdbserver/../gdb/nat/linux-personality.c:42:37: error: ‘ADDR_NO_RANDOMIZE’ was not declared in this scope
>      42 |     && !(personality (0xffffffff) & ADDR_NO_RANDOMIZE)))
>         |                                     ^~~~~~~~~~~~~~~~~
> 
> [1] https://sourceware.org/git/?p=binutils-gdb.git;a=commitdiff;h=4655f8509fd44e6efabefa373650d9982ff37fd6
> 
> Signed-off-by: Peter Seiderer <ps.report@gmx.net>
> ---
> Note:
> 
>  - a quick fix, the proper fix would be (as mentioned in the upstream
>    commit changelog:
> 
>     [...]
>     If for some odd reason, some remotely modern system still needs a
>     configure check, then we can revert this commit but drop the
>     AC_RUN_IFELSE in favor of always doing the AC_LINK_IFELSE
>     cross-compile fallback.
>     [...]

And reported upstream:

	https://sourceware.org/bugzilla/show_bug.cgi?id=28555

Regards,
Peter

> ---
>  ...-personality-syscall-at-configure-ti.patch | 371 ++++++++++++++++++
>  1 file changed, 371 insertions(+)
>  create mode 100644 package/gdb/11.1/0008-Revert-Don-t-run-personality-syscall-at-configure-ti.patch
> 
> diff --git a/package/gdb/11.1/0008-Revert-Don-t-run-personality-syscall-at-configure-ti.patch b/package/gdb/11.1/0008-Revert-Don-t-run-personality-syscall-at-configure-ti.patch
> new file mode 100644
> index 0000000000..d674287b57
> --- /dev/null
> +++ b/package/gdb/11.1/0008-Revert-Don-t-run-personality-syscall-at-configure-ti.patch
> @@ -0,0 +1,371 @@
> +From c26b279aa4c7dc8a0cd9e30d2e43e6b95cefb5a0 Mon Sep 17 00:00:00 2001
> +From: Peter Seiderer <ps.report@gmx.net>
> +Date: Sat, 6 Nov 2021 12:54:42 +0100
> +Subject: [PATCH] Revert "Don't run personality syscall at configure time;
> + don't check it at all"
> +MIME-Version: 1.0
> +Content-Type: text/plain; charset=UTF-8
> +Content-Transfer-Encoding: 8bit
> +
> +This reverts commit 4655f8509fd44e6efabefa373650d9982ff37fd6 ([1]).
> +
> +Fixes (with uclibc toolchain):
> +
> +  ../../gdbserver/../gdb/nat/linux-personality.c: In constructor ‘maybe_disable_address_space_randomization::maybe_disable_address_space_randomization(int)’:
> +  ../../gdbserver/../gdb/nat/linux-personality.c:36:48: error: ‘ADDR_NO_RANDOMIZE’ was not declared in this scope
> +     36 |       if (errno == 0 && !(m_personality_orig & ADDR_NO_RANDOMIZE))
> +        |                                                ^~~~~~~~~~~~~~~~~
> +  ../../gdbserver/../gdb/nat/linux-personality.c:42:37: error: ‘ADDR_NO_RANDOMIZE’ was not declared in this scope
> +     42 |     && !(personality (0xffffffff) & ADDR_NO_RANDOMIZE)))
> +        |                                     ^~~~~~~~~~~~~~~~~
> +
> +[1] https://sourceware.org/git/?p=binutils-gdb.git;a=commitdiff;h=4655f8509fd44e6efabefa373650d9982ff37fd6
> +
> +Signed-off-by: Peter Seiderer <ps.report@gmx.net>
> +---
> + gdb/config.in               |  7 ++++
> + gdb/configure               | 74 +++++++++++++++++++++++++++++++++++++
> + gdb/linux-nat.c             |  4 ++
> + gdb/nat/linux-personality.c | 12 +++++-
> + gdbserver/config.in         |  7 ++++
> + gdbserver/configure         | 74 +++++++++++++++++++++++++++++++++++++
> + gdbserver/linux-low.cc      |  4 ++
> + gdbsupport/common.m4        | 23 ++++++++++++
> + 8 files changed, 204 insertions(+), 1 deletion(-)
> +
> +diff --git a/gdb/config.in b/gdb/config.in
> +index 2c30504..eee0eaf 100644
> +--- a/gdb/config.in
> ++++ b/gdb/config.in
> +@@ -96,6 +96,10 @@
> + /* define if the compiler supports basic C++11 syntax */
> + #undef HAVE_CXX11
> + 
> ++/* Define to 1 if you have the declaration of `ADDR_NO_RANDOMIZE', and to 0 if
> ++   you don't. */
> ++#undef HAVE_DECL_ADDR_NO_RANDOMIZE
> ++
> + /* Define to 1 if you have the declaration of `asprintf', and to 0 if you
> +    don't. */
> + #undef HAVE_DECL_ASPRINTF
> +@@ -297,6 +301,9 @@
> + /* Define to 1 if you have the <nlist.h> header file. */
> + #undef HAVE_NLIST_H
> + 
> ++/* Define if you support the personality syscall. */
> ++#undef HAVE_PERSONALITY
> ++
> + /* Define to 1 if you have the `pipe' function. */
> + #undef HAVE_PIPE
> + 
> +diff --git a/gdb/configure b/gdb/configure
> +index 5d89635..599521a 100755
> +--- a/gdb/configure
> ++++ b/gdb/configure
> +@@ -13838,6 +13838,80 @@ fi
> + done
> + 
> + 
> ++      ac_fn_c_check_decl "$LINENO" "ADDR_NO_RANDOMIZE" "ac_cv_have_decl_ADDR_NO_RANDOMIZE" "#include <sys/personality.h>
> ++"
> ++if test "x$ac_cv_have_decl_ADDR_NO_RANDOMIZE" = xyes; then :
> ++  ac_have_decl=1
> ++else
> ++  ac_have_decl=0
> ++fi
> ++
> ++cat >>confdefs.h <<_ACEOF
> ++#define HAVE_DECL_ADDR_NO_RANDOMIZE $ac_have_decl
> ++_ACEOF
> ++
> ++
> ++  if test "$cross_compiling" = yes; then :
> ++  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
> ++/* end confdefs.h.  */
> ++#include <sys/personality.h>
> ++int
> ++main ()
> ++{
> ++
> ++  #      if !HAVE_DECL_ADDR_NO_RANDOMIZE
> ++  #       define ADDR_NO_RANDOMIZE 0x0040000
> ++  #      endif
> ++	 /* Test the flag could be set and stays set.  */
> ++	 personality (personality (0xffffffff) | ADDR_NO_RANDOMIZE);
> ++	 if (!(personality (personality (0xffffffff)) & ADDR_NO_RANDOMIZE))
> ++	     return 1
> ++  ;
> ++  return 0;
> ++}
> ++_ACEOF
> ++if ac_fn_c_try_link "$LINENO"; then :
> ++  have_personality=true
> ++else
> ++  have_personality=false
> ++fi
> ++rm -f core conftest.err conftest.$ac_objext \
> ++    conftest$ac_exeext conftest.$ac_ext
> ++else
> ++  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
> ++/* end confdefs.h.  */
> ++#include <sys/personality.h>
> ++int
> ++main ()
> ++{
> ++
> ++  #      if !HAVE_DECL_ADDR_NO_RANDOMIZE
> ++  #       define ADDR_NO_RANDOMIZE 0x0040000
> ++  #      endif
> ++	 /* Test the flag could be set and stays set.  */
> ++	 personality (personality (0xffffffff) | ADDR_NO_RANDOMIZE);
> ++	 if (!(personality (personality (0xffffffff)) & ADDR_NO_RANDOMIZE))
> ++	     return 1
> ++  ;
> ++  return 0;
> ++}
> ++_ACEOF
> ++if ac_fn_c_try_run "$LINENO"; then :
> ++  have_personality=true
> ++else
> ++  have_personality=false
> ++fi
> ++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
> ++  conftest.$ac_objext conftest.beam conftest.$ac_ext
> ++fi
> ++
> ++  if $have_personality
> ++  then
> ++
> ++$as_echo "#define HAVE_PERSONALITY 1" >>confdefs.h
> ++
> ++  fi
> ++
> +   ac_fn_c_check_decl "$LINENO" "strstr" "ac_cv_have_decl_strstr" "$ac_includes_default"
> + if test "x$ac_cv_have_decl_strstr" = xyes; then :
> +   ac_have_decl=1
> +diff --git a/gdb/linux-nat.c b/gdb/linux-nat.c
> +index f206b87..1a6bcb5 100644
> +--- a/gdb/linux-nat.c
> ++++ b/gdb/linux-nat.c
> +@@ -4195,7 +4195,11 @@ linux_nat_target::supports_multi_process ()
> + bool
> + linux_nat_target::supports_disable_randomization ()
> + {
> ++#ifdef HAVE_PERSONALITY
> +   return true;
> ++#else
> ++  return false;
> ++#endif
> + }
> + 
> + /* SIGCHLD handler that serves two purposes: In non-stop/async mode,
> +diff --git a/gdb/nat/linux-personality.c b/gdb/nat/linux-personality.c
> +index 9ce345b..87d1921 100644
> +--- a/gdb/nat/linux-personality.c
> ++++ b/gdb/nat/linux-personality.c
> +@@ -20,7 +20,12 @@
> + #include "gdbsupport/common-defs.h"
> + #include "nat/linux-personality.h"
> + 
> +-#include <sys/personality.h>
> ++#ifdef HAVE_PERSONALITY
> ++# include <sys/personality.h>
> ++# if !HAVE_DECL_ADDR_NO_RANDOMIZE
> ++#  define ADDR_NO_RANDOMIZE 0x0040000
> ++# endif /* ! HAVE_DECL_ADDR_NO_RANDOMIZE */
> ++#endif /* HAVE_PERSONALITY */
> + 
> + /* See comment on nat/linux-personality.h.  */
> + 
> +@@ -29,6 +34,7 @@ maybe_disable_address_space_randomization (int disable_randomization)
> +   : m_personality_set (false),
> +     m_personality_orig (0)
> + {
> ++#ifdef HAVE_PERSONALITY
> +   if (disable_randomization)
> +     {
> +       errno = 0;
> +@@ -43,11 +49,14 @@ maybe_disable_address_space_randomization (int disable_randomization)
> + 	warning (_("Error disabling address space randomization: %s"),
> + 		 safe_strerror (errno));
> +     }
> ++#endif /* HAVE_PERSONALITY */
> + }
> + 
> + maybe_disable_address_space_randomization::
> + ~maybe_disable_address_space_randomization ()
> + {
> ++#ifdef HAVE_PERSONALITY
> ++
> +   if (m_personality_set)
> +     {
> +       errno = 0;
> +@@ -56,4 +65,5 @@ maybe_disable_address_space_randomization::
> + 	warning (_("Error restoring address space randomization: %s"),
> + 		 safe_strerror (errno));
> +     }
> ++#endif /* HAVE_PERSONALITY */
> + }
> +diff --git a/gdbserver/config.in b/gdbserver/config.in
> +index cf06c56..b55ddc1 100644
> +--- a/gdbserver/config.in
> ++++ b/gdbserver/config.in
> +@@ -31,6 +31,10 @@
> + /* define if the compiler supports basic C++11 syntax */
> + #undef HAVE_CXX11
> + 
> ++/* Define to 1 if you have the declaration of `ADDR_NO_RANDOMIZE', and to 0 if
> ++   you don't. */
> ++#undef HAVE_DECL_ADDR_NO_RANDOMIZE
> ++
> + /* Define to 1 if you have the declaration of `asprintf', and to 0 if you
> +    don't. */
> + #undef HAVE_DECL_ASPRINTF
> +@@ -178,6 +182,9 @@
> + /* Define to 1 if you have the <netinet/tcp.h> header file. */
> + #undef HAVE_NETINET_TCP_H
> + 
> ++/* Define if you support the personality syscall. */
> ++#undef HAVE_PERSONALITY
> ++
> + /* Define to 1 if you have the `pipe' function. */
> + #undef HAVE_PIPE
> + 
> +diff --git a/gdbserver/configure b/gdbserver/configure
> +index b227167..c566ab7 100755
> +--- a/gdbserver/configure
> ++++ b/gdbserver/configure
> +@@ -7131,6 +7131,80 @@ fi
> + done
> + 
> + 
> ++      ac_fn_c_check_decl "$LINENO" "ADDR_NO_RANDOMIZE" "ac_cv_have_decl_ADDR_NO_RANDOMIZE" "#include <sys/personality.h>
> ++"
> ++if test "x$ac_cv_have_decl_ADDR_NO_RANDOMIZE" = xyes; then :
> ++  ac_have_decl=1
> ++else
> ++  ac_have_decl=0
> ++fi
> ++
> ++cat >>confdefs.h <<_ACEOF
> ++#define HAVE_DECL_ADDR_NO_RANDOMIZE $ac_have_decl
> ++_ACEOF
> ++
> ++
> ++  if test "$cross_compiling" = yes; then :
> ++  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
> ++/* end confdefs.h.  */
> ++#include <sys/personality.h>
> ++int
> ++main ()
> ++{
> ++
> ++  #      if !HAVE_DECL_ADDR_NO_RANDOMIZE
> ++  #       define ADDR_NO_RANDOMIZE 0x0040000
> ++  #      endif
> ++	 /* Test the flag could be set and stays set.  */
> ++	 personality (personality (0xffffffff) | ADDR_NO_RANDOMIZE);
> ++	 if (!(personality (personality (0xffffffff)) & ADDR_NO_RANDOMIZE))
> ++	     return 1
> ++  ;
> ++  return 0;
> ++}
> ++_ACEOF
> ++if ac_fn_c_try_link "$LINENO"; then :
> ++  have_personality=true
> ++else
> ++  have_personality=false
> ++fi
> ++rm -f core conftest.err conftest.$ac_objext \
> ++    conftest$ac_exeext conftest.$ac_ext
> ++else
> ++  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
> ++/* end confdefs.h.  */
> ++#include <sys/personality.h>
> ++int
> ++main ()
> ++{
> ++
> ++  #      if !HAVE_DECL_ADDR_NO_RANDOMIZE
> ++  #       define ADDR_NO_RANDOMIZE 0x0040000
> ++  #      endif
> ++	 /* Test the flag could be set and stays set.  */
> ++	 personality (personality (0xffffffff) | ADDR_NO_RANDOMIZE);
> ++	 if (!(personality (personality (0xffffffff)) & ADDR_NO_RANDOMIZE))
> ++	     return 1
> ++  ;
> ++  return 0;
> ++}
> ++_ACEOF
> ++if ac_fn_c_try_run "$LINENO"; then :
> ++  have_personality=true
> ++else
> ++  have_personality=false
> ++fi
> ++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
> ++  conftest.$ac_objext conftest.beam conftest.$ac_ext
> ++fi
> ++
> ++  if $have_personality
> ++  then
> ++
> ++$as_echo "#define HAVE_PERSONALITY 1" >>confdefs.h
> ++
> ++  fi
> ++
> +   ac_fn_c_check_decl "$LINENO" "strstr" "ac_cv_have_decl_strstr" "$ac_includes_default"
> + if test "x$ac_cv_have_decl_strstr" = xyes; then :
> +   ac_have_decl=1
> +diff --git a/gdbserver/linux-low.cc b/gdbserver/linux-low.cc
> +index 5c6191d..ca0c513 100644
> +--- a/gdbserver/linux-low.cc
> ++++ b/gdbserver/linux-low.cc
> +@@ -6224,7 +6224,11 @@ linux_process_target::core_of_thread (ptid_t ptid)
> + bool
> + linux_process_target::supports_disable_randomization ()
> + {
> ++#ifdef HAVE_PERSONALITY
> +   return true;
> ++#else
> ++  return false;
> ++#endif
> + }
> + 
> + bool
> +diff --git a/gdbsupport/common.m4 b/gdbsupport/common.m4
> +index 901c454..be925b4 100644
> +--- a/gdbsupport/common.m4
> ++++ b/gdbsupport/common.m4
> +@@ -55,6 +55,29 @@ AC_DEFUN([GDB_AC_COMMON], [
> + 		  ptrace64 sbrk setns sigaltstack sigprocmask \
> + 		  setpgid setpgrp getrusage getauxval sigtimedwait])
> + 
> ++  dnl Check if we can disable the virtual address space randomization.
> ++  dnl The functionality of setarch -R.
> ++  AC_CHECK_DECLS([ADDR_NO_RANDOMIZE],,, [#include <sys/personality.h>])
> ++  define([PERSONALITY_TEST], [AC_LANG_PROGRAM([#include <sys/personality.h>], [
> ++  #      if !HAVE_DECL_ADDR_NO_RANDOMIZE
> ++  #       define ADDR_NO_RANDOMIZE 0x0040000
> ++  #      endif
> ++	 /* Test the flag could be set and stays set.  */
> ++	 personality (personality (0xffffffff) | ADDR_NO_RANDOMIZE);
> ++	 if (!(personality (personality (0xffffffff)) & ADDR_NO_RANDOMIZE))
> ++	     return 1])])
> ++  AC_RUN_IFELSE([PERSONALITY_TEST],
> ++		[have_personality=true],
> ++		[have_personality=false],
> ++		[AC_LINK_IFELSE([PERSONALITY_TEST],
> ++				[have_personality=true],
> ++				[have_personality=false])])
> ++  if $have_personality
> ++  then
> ++      AC_DEFINE([HAVE_PERSONALITY], 1,
> ++		[Define if you support the personality syscall.])
> ++  fi
> ++
> +   AC_CHECK_DECLS([strstr])
> + 
> +   # ----------------------- #
> +-- 
> +2.33.1
> +

_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

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

end of thread, other threads:[~2021-11-06 12:22 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-11-06 12:09 [Buildroot] [PATCH v1 1/2] package/gdb: fix gdb-11.1 compile for uclibc < v1.0.35 (getrandom related) Peter Seiderer
2021-11-06 12:09 ` [Buildroot] [RFC v1 2/2] package/gdb: gdb-11.1 compile for uclibc (ADDR_NO_RANDOMIZE related) Peter Seiderer
2021-11-06 12:22   ` Peter Seiderer

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.