From fe61a7aa53e68e8a17b5eb8d502e6fa314139ced Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Mon, 10 Sep 2018 16:13:29 -0400 Subject: rework mechanism for posix_spawnp calling posix_spawn previously, a common __posix_spawnx backend was used that accepted an additional argument for the execve variant to call in the child. this moderately bloated up the posix_spawn function, shuffling arguments between stack and/or registers to call a 7-argument function from a 6-argument one. instead, tuck the exec function pointer in an unused part of the (large) pthread_spawnattr_t structure, and have posix_spawnp duplicate the attributes and fill in a pointer to __execvpe. the net code size change is minimal, but the weight is shifted to the "heavier" function which already pulls in more dependencies. as a bonus, we get rid of an external symbol (__posix_spawnx) that had no really good place for a declaration because it shouldn't have existed to begin with. --- include/spawn.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'include/spawn.h') diff --git a/include/spawn.h b/include/spawn.h index bba57ce4..c9bd1939 100644 --- a/include/spawn.h +++ b/include/spawn.h @@ -28,7 +28,9 @@ typedef struct { int __flags; pid_t __pgrp; sigset_t __def, __mask; - int __prio, __pol, __pad[16]; + int __prio, __pol; + void *__fn; + char __pad[64-sizeof(void *)]; } posix_spawnattr_t; typedef struct { -- cgit 1.4.1