[POWERPC] Fix ppc64 makecontext() parameter overflow handling.

On ELFv2, the overflow parameters in the stack frame are at a different offset
from sp than ELFv1. Adjust code to use the correct offset in all cases.

This had resulted in argv[8] and up being copied to the incorrect address
in the new context's initial stack frame.

This is not necessarily the only bug in this function, I need to do a full
review still and ensure the rest of the math is sane for ELFv2 stack frames.

Reported by:	pherde (Probably. My notes are a bit unclear.)
Reviewed by:	jhibbits (in irc)
Sponsored by:	Tag1 Consulting, Inc.
This commit is contained in:
Brandon Bergren 2020-08-06 17:49:19 +00:00
parent 9f9cc3f989
commit e039e3d1d2
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=363972

View File

@ -102,7 +102,11 @@ __makecontext(ucontext_t *ucp, void (*start)(void), int argc, ...)
uint64_t *argp;
/* Skip past frame pointer and saved LR */
#if !defined(_CALL_ELF) || _CALL_ELF == 1
argp = (uint64_t *)sp + 6;
#else
argp = (uint64_t *)sp + 4;
#endif
for (i = 0; i < stackargs; i++)
*argp++ = va_arg(ap, uint64_t);