diff options
author | Sergio Durigan Junior <sergiodj@redhat.com> | 2015-01-15 15:10:49 -0500 |
---|---|---|
committer | Sergio Durigan Junior <sergiodj@redhat.com> | 2015-01-15 15:10:49 -0500 |
commit | 8cc73a3902a68269626274e15d7c25bef0a61759 (patch) | |
tree | ac425182a79a90d9636ec4c618f64325c062c20a /gdb/linux-nat.c | |
parent | fb23d554428f1d379fd8c3e959a294108fa59f88 (diff) | |
download | gdb-8cc73a3902a68269626274e15d7c25bef0a61759.zip gdb-8cc73a3902a68269626274e15d7c25bef0a61759.tar.gz gdb-8cc73a3902a68269626274e15d7c25bef0a61759.tar.bz2 |
Move code to disable ASR to nat/
This patch moves the shared code present on
gdb/linux-nat.c:linux_nat_create_inferior and
gdb/gdbserver/linux-low.c:linux_create_inferior to
nat/linux-personality.c. This code is responsible for disabling
address space randomization based on user setting, and using
<sys/personality.h> to do that. I decided to put the prototype of the
maybe_disable_address_space_randomization on nat/linux-osdata.h
because it seemed the best place to put it.
I regression-tested this patch on Fedora 20 x86_64, and found no
regressions.
gdb/ChangeLog
2015-01-15 Sergio Durigan Junior <sergiodj@redhat.com>
* Makefile.in (HFILES_NO_SRCDIR): Add nat/linux-personality.h.
(linux-personality.o): New rule.
* common/common-defs.h: Include <stdint.h>.
* config/aarch64/linux.mh (NATDEPFILES): Include
linux-personality.o.
* config/alpha/alpha-linux.mh (NATDEPFILES): Likewise.
* config/arm/linux.mh (NATDEPFILES): Likewise.
* config/i386/linux64.mh (NATDEPFILES): Likewise.
* config/i386/linux.mh (NATDEPFILES): Likewise.
* config/ia64/linux.mh (NATDEPFILES): Likewise.
* config/m32r/linux.mh (NATDEPFILES): Likewise.
* config/m68k/linux.mh (NATDEPFILES): Likewise.
* config/mips/linux.mh (NATDEPFILES): Likewise.
* config/pa/linux.mh (NATDEPFILES): Likewise.
* config/powerpc/linux.mh (NATDEPFILES): Likewise.
* config/powerpc/ppc64-linux.mh (NATDEPFILES): Likewise.
* config/powerpc/spu-linux.mh (NATDEPFILES): Likewise.
* config/s390/linux.mh (NATDEPFILES): Likewise.
* config/sparc/linux64.mh (NATDEPFILES): Likewise.
* config/sparc/linux.mh (NATDEPFILES): Likewise.
* config/tilegx/linux.mh (NATDEPFILES): Likewise.
* config/xtensa/linux.mh (NATDEPFILES): Likewise.
* defs.h: Remove #include <stdint.h> (moved to
common/common-defs.h).
* linux-nat.c: Include nat/linux-personality.h. Remove #include
<sys/personality.h>; do not define ADDR_NO_RANDOMIZE (moved to
nat/linux-personality.c).
(linux_nat_create_inferior): Remove code to disable address space
randomization (moved to nat/linux-personality.c). Create cleanup
to disable address space randomization.
* nat/linux-personality.c: New file.
* nat/linux-personality.h: Likewise.
gdb/gdbserver/ChangeLog
2015-01-15 Sergio Durigan Junior <sergiodj@redhat.com>
* Makefile.in (SFILES): Add linux-personality.c.
(linux-personality.o): New rule.
* configure.srv (srv_linux_obj): Add linux-personality.o to the
list of objects to be built.
* linux-low.c: Include nat/linux-personality.h.
(linux_create_inferior): Remove code to disable address space
randomization (moved to ../nat/linux-personality.c). Create
cleanup to disable address space randomization.
Diffstat (limited to 'gdb/linux-nat.c')
-rw-r--r-- | gdb/linux-nat.c | 41 |
1 files changed, 4 insertions, 37 deletions
diff --git a/gdb/linux-nat.c b/gdb/linux-nat.c index a8a63cf..be52470 100644 --- a/gdb/linux-nat.c +++ b/gdb/linux-nat.c @@ -32,6 +32,7 @@ #include "linux-nat.h" #include "nat/linux-ptrace.h" #include "nat/linux-procfs.h" +#include "nat/linux-personality.h" #include "linux-fork.h" #include "gdbthread.h" #include "gdbcmd.h" @@ -70,13 +71,6 @@ #define SPUFS_MAGIC 0x23c9b64e #endif -#ifdef HAVE_PERSONALITY -# include <sys/personality.h> -# if !HAVE_DECL_ADDR_NO_RANDOMIZE -# define ADDR_NO_RANDOMIZE 0x0040000 -# endif -#endif /* HAVE_PERSONALITY */ - /* This comment documents high-level logic of this file. Waiting for events in sync mode @@ -1103,45 +1097,18 @@ linux_nat_create_inferior (struct target_ops *ops, char *exec_file, char *allargs, char **env, int from_tty) { -#ifdef HAVE_PERSONALITY - int personality_orig = 0, personality_set = 0; -#endif /* HAVE_PERSONALITY */ + struct cleanup *restore_personality + = maybe_disable_address_space_randomization (disable_randomization); /* The fork_child mechanism is synchronous and calls target_wait, so we have to mask the async mode. */ -#ifdef HAVE_PERSONALITY - if (disable_randomization) - { - errno = 0; - personality_orig = personality (0xffffffff); - if (errno == 0 && !(personality_orig & ADDR_NO_RANDOMIZE)) - { - personality_set = 1; - personality (personality_orig | ADDR_NO_RANDOMIZE); - } - if (errno != 0 || (personality_set - && !(personality (0xffffffff) & ADDR_NO_RANDOMIZE))) - warning (_("Error disabling address space randomization: %s"), - safe_strerror (errno)); - } -#endif /* HAVE_PERSONALITY */ - /* Make sure we report all signals during startup. */ linux_nat_pass_signals (ops, 0, NULL); linux_ops->to_create_inferior (ops, exec_file, allargs, env, from_tty); -#ifdef HAVE_PERSONALITY - if (personality_set) - { - errno = 0; - personality (personality_orig); - if (errno != 0) - warning (_("Error restoring address space randomization: %s"), - safe_strerror (errno)); - } -#endif /* HAVE_PERSONALITY */ + do_cleanups (restore_personality); } /* Callback for linux_proc_attach_tgid_threads. Attach to PTID if not |