Bobby Bingham
40d07758a5
ppc32/64: correct signature of function parameter to makecontext
...
Because makecontext can pass a set of integer arguments to the provided
function, it is incorrect to require that this function accept no
parameters.
2019-04-05 14:18:20 -05:00
Bobby Bingham
a00a05ce29
ppc64: fix incorrect position of parameters within stack frame
...
On PPC64, there are 4 register-sized stack slots below the parameter save
area, which is different from the 2 stack slots on PPC32.
2019-04-05 14:18:20 -05:00
Bobby Bingham
8ea5f548b9
ppc64: fix makecontext with more than 8 parameters
...
The ELFv2 ABI used on PPC64 differs from the ELFv1 ABI used on PPC32 here.
On PPC64, once there are any parameters that need to be passed on the
stack, space needs to be reserved on the stack to pass all parameters.
Parameters 0-7 are still only passed by register, but if the callee needs
to spill them, it can use the stack space reserved for the corresponding
parameter to do so.
2019-04-05 14:18:20 -05:00
Bobby Bingham
55168fcb18
ppc32/64: simplify storage of stack parameters
...
The switch statement is simpler as an if/else, and removing the argp
variable makes the code more symmetric between the register and stack
parameter cases.
2019-04-05 14:18:20 -05:00
Bobby Bingham
b500b054c7
ppc32/64: don't store uc_link on the stack
...
This was previously stored either in the CR (ppc64) or LR (ppc32) save
area of the stack, or to one of the parameter save slots.
In either case, the saved value was unused. This value is also passed
to __start_context via r31, so there's no need to pass it on the stack.
2019-04-05 14:15:49 -05:00
Bobby Bingham
b9bd4045fb
ppc32/64: fix back chain pointer
...
The ABI states that sp[0] should point to the previous stack frame, or be
zero if there is no previous stack frame. makecontext previously set this
slot to point to the __start_context function, rather than to a valid
stack frame.
2019-04-05 14:15:49 -05:00
Bobby Bingham
b6a9b5e279
ppc32: fix stack alignment
...
The stack should be 16-byte aligned, not 8 mod 16.
2019-04-05 14:15:44 -05:00
Bobby Bingham
cb59e7ee95
test calls to getcontext without makecontext
2019-04-05 13:28:36 -05:00
Bobby Bingham
94216c60c4
test ability to pass 10 args through makecontext
2019-04-05 13:28:36 -05:00
A. Wilcox
6046eb47e4
Reorder registers in other x86_64 assembler files
...
This fixes the previous commit which changed the register order in
swapcontext only, which caused setcontext to subtly corrupt the stack.
2018-07-19 17:18:19 -05:00
William Pitcock
4f190cc561
Merge pull request #10 from fabled/master
...
fix x86_64 register order for swapcontext
2018-07-19 00:33:12 -05:00
Timo Teräs
790ed28aff
fix x86_64 register order for swapcontext
...
rbp and rsi were reversed causing argument passing to fail since
rsi is used to pass 2nd argument.
fixes #9
2018-07-18 15:47:27 +03:00
William Pitcock
7b1a302ed4
README: we support s390x now
2018-02-15 05:55:26 +00:00
William Pitcock
a76df6b81a
arch: add s390x port
2018-02-15 05:54:17 +00:00
William Pitcock
f0741bc7a0
build: use -lucontext instead of libucontext.so in linker flags for test program
2018-02-15 04:41:22 +00:00
William Pitcock
f370b25ffc
ppc64: trampoline: cleanups
2018-02-15 04:36:47 +00:00
William Pitcock
f4d92bb7bd
ppc: trampoline: cleanups
2018-02-15 04:36:36 +00:00
William Pitcock
0622245f06
x86_64: trampoline: do same cleanups as in x86
2018-02-15 04:34:37 +00:00
William Pitcock
ef2fa49912
x86: trampoline: fix GOT clobbering, pointed out by fabled
2018-02-15 04:32:16 +00:00
William Pitcock
556da6ce99
x86/x86_64: getcontext: no need to restore %ecx or %rcx
2018-02-14 05:12:09 +00:00
William Pitcock
0143bbac98
x86: trampoline: kill textrel
2018-02-14 03:37:25 +00:00
William Pitcock
70089a405c
build: use absolute path for LD_LIBRARY_PATH when testing
2018-02-14 03:30:50 +00:00
William Pitcock
79415db5a8
README: update for 0.1.0
2018-02-14 03:06:01 +00:00
William Pitcock
0188f29771
build: remove test_libucontext on make clean
2018-02-14 03:01:35 +00:00
William Pitcock
71979e9cf6
arch: ppc64: now working
2018-02-06 08:05:53 +00:00
William Pitcock
9e5aba6b48
arch: add ppc64 port does not work yet
2018-02-06 06:19:44 +00:00
William Pitcock
8ff8bb3280
README: note that ppc implementation uses kernel assistance
2018-02-02 18:51:55 +00:00
William Pitcock
f3fe8ea781
arch: ppc: new port
2018-02-02 18:46:21 +00:00
William Pitcock
66919bb222
README: x86 now supported
2018-02-01 01:28:19 +00:00
William Pitcock
c28af0399e
build: rebuild test program if it is modified
2018-02-01 01:27:13 +00:00
William Pitcock
ee1526c903
arch: add x86 port
2018-02-01 01:26:34 +00:00
William Pitcock
54a31e566d
test_libucontext: explain the stack poisoning part
2018-01-31 23:23:45 +00:00
William Pitcock
13283f5eba
arch: add aarch64 port
2018-01-31 21:23:18 +00:00
William Pitcock
3f63152bbc
build: add -Iarch/${ARCH} to CFLAGS
2018-01-31 20:37:00 +00:00
William Pitcock
b686d707b2
build: fix arch detection
2018-01-31 05:58:26 +00:00
William Pitcock
e43fc2698a
README: we support ARM
2018-01-31 04:13:42 +00:00
William Pitcock
a6dfb59ef2
build: default ARCH to $(uname -m)
2018-01-31 04:13:32 +00:00
William Pitcock
f17103b6f4
build: build testsuite with -ggdb3
2018-01-31 04:12:09 +00:00
William Pitcock
247f30400c
arch: arm: add armv6+ port
2018-01-31 04:11:46 +00:00
William Pitcock
0e437d3fc7
add README
2018-01-30 03:56:01 +00:00
William Pitcock
29225e0974
build: add libucontext test program
2018-01-30 03:53:04 +00:00
William Pitcock
da10e5a66d
implement ucontext functions on x86_64
2018-01-30 03:41:02 +00:00
William Pitcock
6062fc83b1
don't bother with glibc stuff afterall, kernel defines ABI to use
2018-01-29 21:50:49 +00:00
William Pitcock
f1d1976e7a
add symbols.h
2018-01-29 17:05:35 +00:00
William Pitcock
816d0fdb91
Initial commit
2018-01-29 10:23:18 -06:00