diff --git a/lib/libthr/arch/amd64/include/pthread_md.h b/lib/libthr/arch/amd64/include/pthread_md.h index 0ebea2e..4650222 100644 --- a/lib/libthr/arch/amd64/include/pthread_md.h +++ b/lib/libthr/arch/amd64/include/pthread_md.h @@ -49,6 +49,7 @@ struct tcb { struct tcb *tcb_self; /* required by rtld */ void *tcb_dtv; /* required by rtld */ struct pthread *tcb_thread; + char tcb_dtrace_scratch[64]; void *tcb_spare[1]; }; diff --git a/libexec/rtld-elf/malloc.c b/libexec/rtld-elf/malloc.c index 8e34362..f10a794 100644 --- a/libexec/rtld-elf/malloc.c +++ b/libexec/rtld-elf/malloc.c @@ -490,7 +490,7 @@ int n; offset = (long)pagepool_start - ((long)pagepool_start & ~(pagesz - 1)); if ((pagepool_start = mmap(0, n * pagesz, - PROT_READ|PROT_WRITE, + PROT_READ|PROT_WRITE|PROT_EXEC, MAP_ANON|MAP_COPY, fd, 0)) == (caddr_t)-1) { rtld_printf("Cannot map anonymous memory\n"); return 0; diff --git a/sys/cddl/contrib/opensolaris/uts/intel/dtrace/fasttrap_isa.c b/sys/cddl/contrib/opensolaris/uts/intel/dtrace/fasttrap_isa.c index 53ad33b..6c51d43 100644 --- a/sys/cddl/contrib/opensolaris/uts/intel/dtrace/fasttrap_isa.c +++ b/sys/cddl/contrib/opensolaris/uts/intel/dtrace/fasttrap_isa.c @@ -1571,9 +1571,9 @@ fasttrap_pid_probe(struct reg *rp) #ifdef __i386__ addr = USD_GETBASE(&curthread->td_pcb->pcb_gsd); #else - addr = curthread->td_pcb->pcb_gsbase; + addr = curthread->td_pcb->pcb_fsbase; + addr += sizeof (void *) * 3; #endif - addr += sizeof (void *); /* * Generic Instruction Tracing