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
This commit is contained in:
Ivo Raisr 2016-02-23 21:48:13 +00:00
parent f7cce36efe
commit 782d01dd78
2 changed files with 10 additions and 3 deletions

View File

@ -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)

View File

@ -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