aboutsummaryrefslogtreecommitdiff
path: root/libiberty/pex-unix.c
AgeCommit message (Collapse)AuthorFilesLines
2024-02-19libiberty: Fix error return value in pex_unix_exec_child [PR113957].Iain Sandoe1-0/+2
r14-5310-g879cf9ff45d940 introduced some new handling for spawning sub processes. The return value from the generic exec_child is examined and needs to be < 0 to signal an error. However, the unix flavour of this routine is returning the PID value set from the posix_spawn{p}. This latter value is undefined per the manual pages for both Darwin and Linux, and it seems Darwin, at least, sets the value to some usually positive number (presumably the PID that would have been used if the fork had succeeded). The fix proposed here is to set the pid = -1 in the relevant error paths. PR other/113957 libiberty/ChangeLog: * pex-unix.c (pex_unix_exec_child): Set pid = -1 in the error paths, since that is used to signal an erroneous outcome for the routine. Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
2024-01-03Update copyright years.Jakub Jelinek1-1/+1
2023-12-05libiberty: Fix pex_unix_wait return typeRainer Orth1-3/+3
The recent warning patches broke Solaris bootstrap: /vol/gcc/src/hg/master/local/libiberty/pex-unix.c:326:3: error: initialization of 'pid_t (*)(struct pex_obj *, pid_t, int *, struct pex_time *, int, const char **, int *)' {aka 'long int (*)(struct pex_obj *, long int, int *, struct pex_time *, int, const char **, int *)'} from incompatible pointer type 'int (*)(struct pex_obj *, pid_t, int *, struct pex_time *, int, const char **, int *)' {aka 'int (*)(struct pex_obj *, long int, int *, struct pex_time *, int, const char **, int *)'} [-Wincompatible-pointer-types] 326 | pex_unix_wait, | ^~~~~~~~~~~~~ /vol/gcc/src/hg/master/local/libiberty/pex-unix.c:326:3: note: (near initialization for 'funcs.wait') While pex_funcs.wait expects a function returning pid_t, pex_unix_wait currently returns int. However, on Solaris pid_t is long for 32-bit, but int for 64-bit. This patches fixes this by having pex_unix_wait return pid_t as expected, and like every other variant already does. Bootstrapped without regressions on i386-pc-solaris2.11, sparc-sun-solaris2.11, x86_64-pc-linux-gnu, and x86_64-apple-darwin23.1.0. 2023-12-03 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> libiberty: * pex-unix.c (pex_unix_wait): Change return type to pid_t.
2023-11-09[PATCH v3] libiberty: Use posix_spawn in pex-unix when available.Brendan Shanks1-0/+168
Hi, This patch implements pex_unix_exec_child using posix_spawn when available. This should especially benefit recent macOS (where vfork just calls fork), but should have equivalent or faster performance on all platforms. In addition, the implementation is substantially simpler than the vfork+exec code path. Tested on x86_64-linux. v2: Fix error handling (previously the function would be run twice in case of error), and don't use a macro that changes control flow. v3: Match file style for error-handling blocks, don't close in/out/errdes on error, and check close() for errors. libiberty/ * configure.ac (AC_CHECK_HEADERS): Add spawn.h. (checkfuncs): Add posix_spawn, posix_spawnp. (AC_CHECK_FUNCS): Add posix_spawn, posix_spawnp. * aclocal.m4, configure, config.in: Rebuild. * pex-unix.c [HAVE_POSIX_SPAWN] (pex_unix_exec_child): New function.
2023-01-16Update copyright years.Jakub Jelinek1-1/+1
2022-01-03Update copyright years.Jakub Jelinek1-1/+1
2021-01-04Update copyright years.Jakub Jelinek1-1/+1
2020-01-01Update copyright years.Jakub Jelinek1-1/+1
From-SVN: r279813
2019-01-01Update copyright years.Jakub Jelinek1-1/+1
From-SVN: r267494
2018-10-01[libiberty] Use pipe inside pex_runNathan Sidwell1-41/+95
https://gcc.gnu.org/ml/gcc-patches/2018-10/msg00039.html * configure.ac (checkfuncs): Add pipe2. * config.in, configure: Rebuilt. * pex-unix.c (pex_unix_exec_child): Comminicate errors from child to parent with a pipe, when possible. From-SVN: r264769
2018-08-23[libiberty patch] Fix PGO bootstrapNathan Sidwell1-80/+83
https://gcc.gnu.org/ml/gcc-patches/2018-08/msg01386.html PR driver/87056 * pex-unix.c (pex_unix_exec_child): Duplicate bad_fn into local scopes to avoid potential clobber. Co-Authored-By: Martin Liska <mliska@suse.cz> From-SVN: r263807
2018-08-21[libiberty patch] PEX-unix forkingNathan Sidwell1-86/+71
https://gcc.gnu.org/ml/gcc-patches/2018-08/msg01170.html * pex-unix.c (pex_child_error): Delete. (pex_unix_exec_child): Commonize error paths to single message & exit. From-SVN: r263679
2018-01-03Update copyright years.Jakub Jelinek1-1/+1
From-SVN: r256169
2017-01-04Update copyright years.Jakub Jelinek1-2/+1
From-SVN: r244052
2015-10-18Fix PR63758 by using the _NSGetEnviron() API on DarwinRoland McGrath1-3/+2
include/ Roland McGrath <roland@gnu.org> PR other/63758 * environ.h: New file. libiberty/ Roland McGrath <roland@gnu.org> Iain Sandoe <iain@codesourcery.com> PR other/63758 * pex-unix.c: Obtain the environment interface from settings in environ.h rather than in-line code. Update copyright date. * setenv.c: Likewise. * xmalloc.c: Likewise. Co-Authored-By: Iain Sandoe <iain@codesourcery.com> From-SVN: r228942
2014-09-26pex-common.h (struct pex_funcs): Add new parameter for open_write field.Max Ostapenko1-3/+4
libiberty/ 2014-09-26 Max Ostapenko <m.ostapenko@partner.samsung.com> * pex-common.h (struct pex_funcs): Add new parameter for open_write field. * pex-unix.c (pex_unix_open_write): Add support for new parameter. * pex-djgpp.c (pex_djgpp_open_write): Likewise. * pex-win32.c (pex_win32_open_write): Likewise. * pex-common.c (pex_run_in_environment): Likewise. include/ 2014-09-26 Max Ostapenko <m.ostapenko@partner.samsung.com> * libiberty.h (PEX_STDOUT_APPEND): New flag. (PEX_STDERR_APPEND): Likewise. From-SVN: r215632
2012-04-04pex-unix.c (to_ptr32): Fix style.Tristan Gingold1-2/+4
2012-04-04 Tristan Gingold <gingold@adacore.com> * pex-unix.c (to_ptr32): Fix style. From-SVN: r186134
2011-01-03Update Copyright years for files modified in 2010.Jakub Jelinek1-2/+2
From-SVN: r168438
2010-11-04Use spawnve on cygwin.Richard Henderson1-1/+200
* configure.ac (AC_CHECK_HEADERS): Add process.h. (checkfuncs): Add dup3, spawnve, spawnvpe; sort the list. (AC_CHECK_FUNCS): Add dup3, spawnve, spawnvpe. * configure, config.in: Rebuild. * pex-unix.c [HAVE_SPAWNVE] (pex_unix_exec_child): New function. [HAVE_SPAWNVE] (save_and_install_fd, restore_fd): New functions. From-SVN: r166339
2009-12-08* pex-unix.c (pex_unix_exec_child): Save/restore environ.Doug Evans1-1/+20
From-SVN: r155079
2009-11-23pex-unix.c (pex_child_error): Improve warning avoidance by checking the ↵Ben Elliston1-2/+4
results of write(3) and exiting with... * pex-unix.c (pex_child_error): Improve warning avoidance by checking the results of write(3) and exiting with -2 if any write returns a negative value. Co-Authored-By: Ian Lance Taylor <iant@google.com> From-SVN: r154431
2009-11-20pex-unix.c (pex_child_error): Define writeerr macro to avoid unused result ↵Ben Elliston1-1/+2
warnings from write(3) calls. * pex-unix.c (pex_child_error): Define writeerr macro to avoid unused result warnings from write(3) calls. Undefine writeerr after all uses. From-SVN: r154344
2009-07-27pex-unix.c (vfork): Remove VMS specific definition (get from header file ↵Douglas B Rupp1-7/+36
instead). * pex-unix.c (vfork): Remove VMS specific definition (get from header file instead). (to_ptr32): New function. (pex_unix_exec_child): Use it. From-SVN: r150130
2007-08-24[patch]: libiberty pex for _WIN64.Kai Tietz1-10/+10
From-SVN: r127761
2007-01-12* pex-unix.c (writeerr): Cast write result to void.Ben Elliston1-1/+1
From-SVN: r120702
2006-08-27re PR driver/27622 (gcc hang when compiling with -pipe)Ian Lance Taylor1-2/+8
PR driver/27622 * pex-common.h (struct pex_funcs): Add toclose parameter to exec_child field. * pex-common.c (pex_run_in_environment): Pass toclose to exec_child. * pex-djgpp.c (pex_djgpp_exec_child): Add toclose parameter. * pex-unix.c (pex_unix_exec_child): Likewise. * pex-msdos.c (pex_msdos_exec_child): Likewise. * pex-win32.c (pex_win32_exec_child): Likewise. From-SVN: r116494
2006-06-02pex-unix.c (pex_unix_exec_child): Insert cast when assigning to environ.Mark Shinwell1-1/+1
* pex-unix.c (pex_unix_exec_child): Insert cast when assigning to environ. From-SVN: r114326
2006-06-01Patch to provide pex_run_in_environment.Mark Shinwell1-3/+11
* include/libiberty.h: Declare pex_run_in_environment. libiberty: * pex-common.c: New function pex_run_in_environment. * pex-common.h: Add environment parameter to exec_child. * pex-msdos.c: Add environment parameter to pex_msdos_exec_child. * pex-djgpp.c: Add environment parameter to pex_djgpp_exec_child. (pex_djgpp_exec_child): Pass environment to child process. * pex-unix.c: Add environment parameter to pex_unix_exec_child. (pex_unix_exec_child): Pass environment to child process. * pex-win32.c: Add environment parameter to pex_win32_exec_child. New function env_compare for comparing VAR=VALUE pairs. (win32_spawn): Assemble environment block and pass to CreateProcess. (spawn_script): Pass environment through to win32_spawn. (pex_win32_exec_child): Pass environment through to spawn_script and win32_spawn. * functions.texi: Regenerate. * pexecute.txh: Document pex_run_in_environment. From-SVN: r114302
2006-04-12pex-common.c (pex_input_file, [...]): New functions.Jim Blandy1-0/+11
src/libiberty/ChangeLog: 2006-03-29 Jim Blandy <jimb@codesourcery.com> * pex-common.c (pex_input_file, pex_input_pipe): New functions. (pex_init_common): Initialize obj->input_file. (pex_run): Close any file opened by pex_input_file. * pexecute.txh (pex_input_file, pex_input_pipe): New docs. * pex-common.h (struct pex_obj): New field input_file. (struct pex_funcs): New function ptr fdopenw. * pex-unix.c (pex_unix_fdopenw): New function. (funcs): List it as our fdopenw function. * pex-win32.c (pex_win32_fdopenw): New function. (funcs): List it as our fdopenw function. * pex-djgpp.c (funcs): Leave fdopenw null. * pex-msdos (funcs): Same. * functions.texi: Regenerated. src/include/ChangeLog: 2006-04-10 Jim Blandy <jimb@codesourcery.com> * libiberty.h (pex_input_file, pex_input_pipe): New declarations. From-SVN: r112883
2005-05-24libiberty.h (ACONCAT): Properly cast value of alloca().Gabriel Dos Reis1-1/+1
include/ 2005-05-24 Gabriel Dos Reis <gdr@integrable-solutions.net> * libiberty.h (ACONCAT): Properly cast value of alloca(). * ansidecl.h (ATTRIBUTE_UNUSED_LABEL): Don't define if __cplusplus. libiberty/ 2005-05-24 Gabriel Dos Reis <gdr@integrable-solutions.net> * configure.ac: Check declarations for calloc(), getenv(), malloc(), realloc() and sbrk(). * config.in: Regenerate. * configure: Likewise. * alloca.c (C_alloca): Change "new" to "new_storage". Use XNEWVEC instead of xmalloc. * choose-temp.c (choose_temp_base): Use XNEWVEC instea od xmalloc. * concat.c (liiberty_concat_ptr): Surround definition with an extern "C" block, if __cplusplus. (concat): Use XNEWVEC instead of xmalloc. (reconcat): Likewise. * cp-demangle.c (struct d_print_template): Rename member "template" to "template_decl". Adjust use throughout the file. (d_print_resize): Properly cast return value of realloc(). (cplus_demangle_print): Same for malloc(). (d_demangle): Likewise. * cp-demint.c (cplus_demangle_fill_builtin_type): Rename parameter "typename" to "type_name". * cplus-dem.c (grow_vect): Use XRESIZEVEC instead of xrealloc(). (work_stuff_copy_to_from): Use XNEWVEC insteand of xmalloc(). (demangle_template_value_parm): Likewise. (demangle_template): Likewise. (recursively_demangle): Likewise. (do_hpacc_template_literal): Likewise. (do_arg): Likewise. (remember_type): Likewise. (remember_Ktype): Likewise. (register_Btype): Likewise. (string_need): Use XRESIZEVEC instead of xrealloc(). * dyn-string.c (dyn_string_init): Use XNEWVEC. (dyn_string_new): Use XNEW. (dyn_string_resize): Use XRESIZEVEC. * fnmatch.c (fnmatch): Rename local variable "not" to "negate". * getopt.c (getenv): Declare only if !__cplusplus and !getenv. Otherwise include <stdlib.h>. (exchange): Cast return value of malloc(). * hashtab.c (htab_size): Define as both macro and non-inline function. (htab_elements): Likewise. * getpwd.c (getpwd): Use XNEWVEC. (htab_create_alloc_ex): Use C90 prototype-style. * lrealpath.c (lrealpath): Appropriately cast return value of malloc(). * make-relative-prefix.c (save_string): Likewise. * make-temp-file.c (try_dir): Rename from "try". Adjust use in the file. (choose_tmpdir): Use XNEWVEC. * mkstemps.c (mkstemps): Rename parameter "template" to "pattern". * pex-common.c (pex_init_common): Use XNEW. (pex_add_remove): Use XRESIZEVEC. (pex_run): Likewise. (pex_get_status_and_time): Likewise. * pex-djgpp.c (pex_djgpp_exec_child): Likewise. * pex-msdos.c (pex_init): Use XNEW. (pex_msdos_exec_child): Likewise. (pex_msdos_exec_child): Use XRESIZEVEC. * pex-unix.c (pex_wait): Use XNEW. * pex-win32.c (fix_argv): Use XNEWVEC. * pexecute.c (pwait): Likewise. * setenv.c (setenv): Properly cast return value of malloc(). * sigsetmask.c (sigsetmask): Rename local variables "old" and "new" to "old_sig" and "new_sig". * sort.c (main): Use XNEWVEC. * spaces.c (spaces): Cast return value of malloc(). * strndup.c (strndup): Likewise. * ternary.c (ternary_insert): Use XNEW. * xmalloc.c (malloc, realloc, calloc, sbrk): Surround declaration with an extern "C" block if __cplusplus. * xstrdup.c (xstrdup): Cast return value of memcpy(). * xstrerror.c (strerror): Enclose declaration in an extern "C" block if __cplusplus. * xstrndup.c (xstrndup): Use XNEW. Cast return value of memcpy(). From-SVN: r100115
2005-05-10Update the address and phone number of the FSF organization.Nick Clifton1-2/+2
From-SVN: r99519
2005-03-29pex-common.c: New file.Ian Lance Taylor1-112/+418
libiberty: * pex-common.c: New file. * pex-one.c: New file. * pexecute.c: New file. * pex-common.h: Include <stdio.h>. (struct pex_obj): Define. (struct pex_funcs): Define. (pex_init_common): Declare. * pex-unix.c: Rewrite. * pex-win32.c: Rewrite. * pex-djgpp.c: Rewrite. * pex-msdos.c: Rewrite. * testsuite/text-pexecute.c: New file. * pexecute.txh: Rewrite. * configure.ac: Check for wait3 and wait4. Set CHECK to really-check rather than check-cplus-dem. * functions.texi: Rebuild. * Makefile.in: Rebuild dependencies. (CFILES): Add pexecute.c, pex-common.c, pex-one.c. (REQUIRED_OFILES): Add pexecute.o, pex-common.o, pex-one.o. * testsuite/Makefile.in (really-check): New target. (check-pexecute, test-pexecute): New targets. * configure: Rebuild. include: * libiberty.h: Include <stdio.h>. (PEX_RECORD_TIMES, PEX_USE_PIPES, PEX_SAVE_TEMPS): Define. (PEX_LAST, PEX_SEARCH, PEX_SUFFIX, PEX_STDERR_TO_STDOUT): Define. (PEX_BINARY_INPUT, PEX_BINARY_OUTPUT): Define. (pex_init, pex_run, pex_read_output): Declare. (pex_get_status, pex_get_times, pex_free, pex_one): Declare. (struct pex_time): Define. From-SVN: r97148
2005-03-28partition.h: Remove use of PARAMS.Gabriel Dos Reis1-13/+5
include/ 2005-03-27 Gabriel Dos Reis <gdr@integrable-solutions.net> * partition.h: Remove use of PARAMS. * obstack.h: Remove conditional prototypes __STDC__. * objalloc.h: Remove use of PARAMS. * splay-tree.h: Likewise. libiberty/ 2005-03-27 Gabriel Dos Reis <gdr@integrable-solutions.net> Convert libiberty to use ISO C prototype style 5/n. * random.c (srandom, initstate, setstate, random): Use ISO C prototypes. * putenv.c (putenv): Likewise. * physmem.c (physmem_available, physmem_total, main): Likewise. * pex-win32.c (fix_argv, pexecute, pwait): Likewise. * pex-unix.c (pexecute, pwait): Likewise. * pex-msdos.c (pexecute, pwait): Likewise. * pex-djgpp.c (pexecute, pwait): Likewise. * partition.c (partition_new, partition_delete, partition_union) (elem_compare, partition_print): Likewise. * obstack.c (_obstack_begin, _obstack_begin_1, _obstack_newchunk, _obstack_allocated_p, _obstack_free, obstack_free, _obstack_memory_used, print_and_abort, obstack_next_free, obstack_object_size, obstack_base): Likewise. Remove codes predicated on !defined(__STDC__). * objalloc.c (objalloc_create, _objalloc_alloc, objalloc_free, objalloc_free_block): Use ISO C prototypes. * mkstemps.c (mkstemps): Likewise. * memset.c (memset): Likewise. * mempcpy.c (mempcpy): Likewise. * rename.c (rename): Likewise. * rindex.c (rindex): Likewise. * setenv.c (setenv, unsetenv): Likewise. * sigsetmask.c (sigsetmask): Likewise. * snprintf.c (snprintf): Likewise. * sort.c (sort_pointers, xmalloc): Likewise. * spaces.c (spaces): Likewise. * splay-tree.c (splay_tree_delete_helper, splay_tree_splay_helper, splay_tree_splay, splay_tree_foreach_helper, splay_tree_xmalloc_allocate, splay_tree_new, splay_tree_xmalloc_allocate, splay_tree_new_with_allocator, splay_tree_delete, splay_tree_insert, splay_tree_remove, splay_tree_lookup, splay_tree_max, splay_tree_min, splay_tree_predecessor, splay_tree_successor, splay_tree_foreach, splay_tree_compare_ints, splay_tree_compare_pointers): Likewise. * stpcpy.c (stpcpy): Likewise. * stpncpy.c (stpncpy): Likewise. * strcasecmp.c (strcasecmp): Likewise. * strchr.c (strchr): Likewise. * strdup.c (strdup): Likewise. From-SVN: r97125
2004-11-30* pex-unix.c: Fix the spelling of longjmp.Matt Kraai1-1/+1
From-SVN: r91507
2004-03-18pex-unix.c (pexecute): Use vfork instead of fork, with appropriate changes ↵Ian Lance Taylor1-16/+65
to make this safe. * pex-unix.c (pexecute): Use vfork instead of fork, with appropriate changes to make this safe. * pex-common.h (STDERR_FILE_NO): Define. From-SVN: r79617
2003-01-24Makefile.in (CFILES): Add pex-*.c.Zack Weinberg1-0/+166
* Makefile.in (CFILES): Add pex-*.c. (REQUIRED_OFILES): Change pexecute.o to @pexecute@ (CONFIGURED_OFILES): Add pex-*.o. (TEXIFILES): Add pexecute.txh. (pexecute.o): Delete rule. (pex-cygwin.o, pex-djgpp.o, pex-mpw.o, pex-msdos.o, pex-os2.o, pex-unix.o, pex-win32.o): New rules. * configure.in: Change AC_INIT argument to xmalloc.c. Compute appropriate pexecute implementation and substitute it as @pexecute@. * pexecute.c: Split up into... * pex-cygwin.c, pex-djgpp.c, pex-mpw.c, pex-msdos.c, pex-os2.c, pex-unix.c, pex-win32.c, pex-common.h, pexecute.txh: ... these new files. * functions.texi: Regenerate. * configure: Regenerate. From-SVN: r61728