From: Ivo Raisr Date: Tue, 23 Feb 2016 21:48:13 +0000 (+0000) Subject: Enable remote debugging for position independent executables X-Git-Tag: svn/VALGRIND_3_12_0~213 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=782d01dd783ad8041ecefff35c0df43503dc3d0e;p=thirdparty%2Fvalgrind.git Enable remote debugging for position independent executables on Solaris. With gcc 5.3, PIEs can be produced on Solaris 12. gdb on Solaris requires AT_ENTRY to correctly work with those. See very long comment before function svr4_exec_displacement(). n-i-bz git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15810 --- diff --git a/coregrind/m_initimg/initimg-solaris.c b/coregrind/m_initimg/initimg-solaris.c index df913da641..d872072148 100644 --- a/coregrind/m_initimg/initimg-solaris.c +++ b/coregrind/m_initimg/initimg-solaris.c @@ -442,6 +442,7 @@ static Addr setup_client_stack(Addr init_sp, AT_SUN_EXECNAME AT_PHDR (not for elfs with no PT_PHDR, such as ld.so.1) AT_BASE + AT_ENTRY AT_FLAGS AT_PAGESZ AT_SUN_AUXFLAFGS @@ -450,9 +451,9 @@ static Addr setup_client_stack(Addr init_sp, AT_SUN_SYSSTAT_ZONE_ADDR (if supported) AT_NULL - It would be possible to also add AT_PHENT, AT_PHNUM, AT_ENTRY, - AT_SUN_LDDATA, but they don't seem to be so important. */ - auxsize = 9 * sizeof(*auxv); + It would be possible to also add AT_PHENT, AT_PHNUM, AT_SUN_LDDATA, + but they don't seem to be so important. */ + auxsize = 10 * sizeof(*auxv); # if defined(SOLARIS_RESERVE_SYSSTAT_ADDR) auxsize += sizeof(*auxv); # endif @@ -631,6 +632,11 @@ static Addr setup_client_stack(Addr init_sp, auxv->a_un.a_val = info->interp_offset; auxv++; + /* AT_ENTRY */ + auxv->a_type = VKI_AT_ENTRY; + auxv->a_un.a_val = info->entry; + auxv++; + /* AT_FLAGS */ auxv->a_type = VKI_AT_FLAGS; # if defined(VGA_x86) || defined(VGA_amd64) diff --git a/include/vki/vki-solaris.h b/include/vki/vki-solaris.h index babc1f2dd3..76e83d4615 100644 --- a/include/vki/vki-solaris.h +++ b/include/vki/vki-solaris.h @@ -257,6 +257,7 @@ typedef struct { #define VKI_AT_PAGESZ AT_PAGESZ #define VKI_AT_BASE AT_BASE #define VKI_AT_FLAGS AT_FLAGS +#define VKI_AT_ENTRY AT_ENTRY #define VKI_AT_SUN_PLATFORM AT_SUN_PLATFORM #define VKI_AT_SUN_HWCAP AT_SUN_HWCAP #define VKI_AT_SUN_EXECNAME AT_SUN_EXECNAME