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.
This commit is contained in:
parent
fb23d55442
commit
8cc73a3902
29 changed files with 213 additions and 84 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue