about summary refs log tree commit diff
path: root/scripts
Commit message (Collapse)AuthorAgeFilesLines
* Fix armv7-a compiler option nameAdhemerval Zanella2017-10-171-2/+2
| | | | | This patch fixes the wrong -march name option used to define the ARMv7-A glibc variant pushed on commit 3d26560.
* Add build-many-glibcs.py arm-linux-gnueabihf-v7{-disable-multiarch}Adhemerval Zanella2017-10-171-1/+6
| | | | | | | | | | | | | | | This patch adds two extra configuration for arm-linux-gnueabihf to cover for multiarch support: 1. arm-linux-gnueabihf-v7a: enables multiarch support by using -march=armv7a. 2. Same as 1. but with --disable-multiarch. Check with build-many-glibcs.py for both options. * scripts/build-many-glibcs.py (Context.add_all_configs): Add arm-linux-gnueabihf multiarch extra_glibcs.
* Remove add-ons mechanism.Joseph Myers2017-10-053-33/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | glibc has an add-ons mechanism to allow additional software to be integrated into the glibc build. Such add-ons may be within the glibc source tree, or outside it at a path passed to the --enable-add-ons configure option. localedata and crypt were once add-ons, distributed in separate release tarballs, but long since stopped using that mechanism. Linuxthreads was always an add-on. Ports spent some time as an add-on with separate release tarballs, then was first moved into the glibc source tree, then had its sysdeps files moved into the main sysdeps hierarchy so the add-ons mechanism was no longer used. NPTL spent some time as an add-on in the main glibc tree before stopping using the add-on mechanism. libidn used to have separate release tarballs but no longer does so, but still uses the add-ons mechanism within the glibc source tree. Various other software has supported building with the add-ons mechanism at times in the past, but I don't think any is still widely used. Add-ons involve significant, little-used complexity in the glibc build system, and make it hard to understand what the space of possible glibc configurations is. This patch removes the add-ons mechanism. libidn is now built via the Subdirs mechanism to cause any configuration using sysdeps/unix/inet to build libidn; HAVE_LIBIDN (which effectively means shared libraries are available) is now defined via sysdeps/unix/inet/configure. Various references to add-ons around the source tree are removed (in the case of maint.texi, the example list of sysdeps directories is still very out of date). Externally maintained ports should now put their files in the normal sysdeps directory structure rather than being arranged as add-ons; they probably need to change e.g. elf.h anyway, rather than actually being able to work just as a drop-in subtree. Hurd libpthread should be arranged similarly to NPTL, so some files might go in a hurd-pthreads (or similar) top-level directory in glibc, while sysdeps files should go in the normal sysdeps directory structure (possibly in hurd or hurd-pthreads subdirectories, just as there are nptl subdirectories in the sysdeps tree). Tested for x86_64, and with build-many-glibcs.py. * configure.ac (--enable-add-ons): Remove option. (machine): Do not mention add-ons in comment. (LIBC_PRECONFIGURE): Likewise. (add_ons): Remove variable and sanity checks and logic to locate add-ons. (add_ons_automatic): Remove variable. (configured_add_ons): Likewise. (add_ons_sfx): Likewise. (add_ons_pfx): Likewise. (add_on_subdirs): Likewise. (sysnames_add_ons): Likewise. Remove loop over add-ons and consideration of add-ons in Implies handling. (sysdeps_add_ons): Likewise. * configure: Regenerated. * libidn/configure.ac: Remove. * libidn/configure: Likewise. * sysdeps/unix/inet/configure.ac: New file. * sysdeps/unix/inet/configure: New generated file. * sysdeps/unix/inet/Subdirs: Add libidn. * Makeconfig (sysdeps-srcdirs): Remove variable. (+sysdep_dirs): Do not include $(sysdeps-srcdirs). ($(common-objpfx)config.status): Do not depend on add-on files. ($(common-objpfx)shlib-versions.v.i): Do not mention add-ons in comment. (all-subdirs): Do not include $(add-on-subdirs). * Makefile (dist-prepare): Do not use $(sysdeps-add-ons). * config.make.in (add-ons): Remove variable. (add-on-subdirs): Likewise. (sysdeps-add-ons): Likewise. * manual/Makefile (add-chapters): Remove. ($(objpfx)texis): Do not depend on $(add-chapters). (nonexamples): Do not handle $(add-chapters). (examples): Do not handle $(add-ons). (chapters.% top-menu.%): Do not pass '$(add-chapters)' to libc-texinfo.sh. * manual/install.texi (Installation): Do not mention add-ons. (--enable-add-ons): Do not document configure option. * INSTALL: Regenerated. * manual/libc-texinfo.sh: Do not handle $2 add-ons argument. * manual/maint.texi (Hierarchy Conventions): Do not mention add-ons. * scripts/build-many-glibcs.py (Glibc.build_glibc): Do not use --enable-add-ons. * scripts/gen-sorted.awk: Do not handle Subdirs files from add-ons. * scripts/test-installation.pl: Do not handle glibc-compat add-on. * sysdeps/nptl/Makeconfig: Do not mention add-ons in comment.
* crypt: Adjust check-local-headers.sh for nspr4 include directory [BZ #17956]Florian Weimer2017-10-041-1/+1
|
* crypt: Use NSPR header files in addition to NSS header files [BZ #17956]Guido Trentalancia2017-10-041-1/+1
| | | | | | | | | When configuring and building GNU libc using the Mozilla NSS library for cryptography (--enable-nss-crypt option), also include the NSPR header files along with the Mozilla NSS library header files. Finally, when running the check-local-headers test, ignore the Mozilla NSPR library header files (used by the Mozilla NSS library).
* Fix range check in do_tunable_update_valAlexey Makhalov2017-09-271-2/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Current implementation of tunables does not set arena_max and arena_test values. Any value provided by glibc.malloc.arena_max and glibc.malloc.arena_test parameters is ignored. These tunables have minval value set to 1 (see elf/dl-tunables.list file) and undefined maxval value. In that case default value (which is 0. see scripts/gen-tunables.awk) is being used to set maxval. For instance, generated tunable_list[] entry for arena_max is: (gdb) p *cur $1 = {name = 0x7ffff7df6217 "glibc.malloc.arena_max", type = {type_code = TUNABLE_TYPE_SIZE_T, min = 1, max = 0}, val = {numval = 0, strval = 0x0}, initialized = false, security_level = TUNABLE_SECLEVEL_SXID_IGNORE, env_alias = 0x7ffff7df622e "MALLOC_ARENA_MAX"} As a result, any value of glibc.malloc.arena_max is ignored by TUNABLE_SET_VAL_IF_VALID_RANGE macro __type min = (__cur)->type.min; <- initialized to 1 __type max = (__cur)->type.max; <- initialized to 0! if (min == max) <- false { min = __default_min; max = __default_max; } if ((__type) (__val) >= min && (__type) (val) <= max) <- false { (__cur)->val.numval = val; (__cur)->initialized = true; } Assigning correct min/max values at a build time fixes a problem. Plus, a bit of optimization: Setting of default min/max values for the given type at a run time might be eliminated. * elf/dl-tunables.c (do_tunable_update_val): Range checking fix. * scripts/gen-tunables.awk: Set unspecified minval and/or maxval values to correct default value for given type.
* Use MPFR 3.1.6 in build-many-glibcs.py.Joseph Myers2017-09-071-1/+1
| | | | | * scripts/build-many-glibcs.py (Context.checkout): Default MPFR version to 3.1.6.
* Use Linux 4.13 in build-many-glibcs.py.Joseph Myers2017-09-041-1/+1
| | | | | * scripts/build-many-glibcs.py (Context.checkout): Default Linux kernel version to 4.13.
* build-many-glibcs.py: also build profiled objectsAndreas Schwab2017-07-081-0/+1
|
* Update versions in build-many-glibcs.py.Joseph Myers2017-07-041-3/+3
| | | | | | | | | This patch updates build-many-glibcs.py to use the current release branch of binutils and current releases of GMP and the Linux kernel. * scripts/build-many-glibcs.py (Context.checkout): Default binutils version to 2.29 branch, GMP version to 6.1.2 and Linux kernel version to 4.12.
* Fix gen-tunables.awk to work with older awkAdhemerval Zanella2017-06-191-34/+34
| | | | | | | Awk 3.1.x does not support multi-dimensional arrays, so fix up to make sure that gen-tunables.awk works on it. * scripts/gen-tunables.awk: Avoid multi-dimensional arrays.
* tunables: Add LD_HWCAP_MASK to tunablesSiddhesh Poyarekar2017-06-071-0/+1
| | | | | | | | | | | | | | | | Add LD_HWCAP_MASK to tunables in preparation of it being removed from rtld.c. This allows us to read LD_HWCAP_MASK much earlier so that it can influence IFUNC resolution in aarch64. This patch does not actually do anything other than read the LD_HWCAP_MASK variable and add the tunables way to set the LD_HWCAP_MASK, i.e. via the glibc.tune.hwcap_mask tunable. In a follow-up patch, the _dl_hwcap_mask will be replaced with glibc.tune.hwcap_mask to complete the transition. * elf/dl-tunables.list: Add glibc.tune.hwcap_mask. * scripts/gen-tunables.awk: Include dl-procinfo.h. * manual/tunables.texi: Document glibc.tune.hwcap_mask.
* Also create and use ldbl-compat-choose.h.Joseph Myers2017-05-191-0/+19
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch makes the glibc build generate an additional header ldbl-compat-choose.h that defines LONG_DOUBLE_COMPAT_CHOOSE_* macros for each libc and libm symbol, which select one or the other of their arguments based on whether the symbol was added before a change to long double != double. The effect of this is that it is then possible to define a macro maybe_long_double_symbol that automatically acts as either long_double_symbol or weak_alias depending on when the symbol being defined was added. This can be used when building long double functions from type-generic templates. Thus, with this patch ldbl-opt no longer needs special long double implementations of each new libm function added using such a template, and the existing such implementations are removed. This is a step towards being able more generally to use common macros to create all the aliases needed for a libm function, so reducing the amount of special-case code needed in ldbl-opt and ldbl-64-128, and facilitating subsequently adding *f32 / *f64 / *f128 / *f32x / *f64x aliases to existing functions (where the set of aliases that a function should have may depend on the architecture in various ways). Tested with build-many-glibcs.py. Except for on powerpc64le-linux-gnu, installed stripped shared libraries are unchanged by the patch. powerpc64le-linux-gnu is the unique configuration which used ldbl-opt from the start rather than adding a new long double choice after originally only having had long double = double. The effect of the patch there is that various cases that previously used long_double_symbol unconditionally now use weak_alias instead, so .os files contain e.g. a symbol cabsl instead of cabsl@@GLIBC_2.17. The final dynamic symbols and versions in the resulting shared libraries are unchanged (ABI tests pass), as is the disassembly of the shared libraries, but the differences in the .os files still result in different .gnu_hash contents in libm.so; the differences are of no significance and logically using weak_alias is what's most appropriate in those cases. * scripts/versions.awk: Generate ldbl-compat-choose.h. * sysdeps/ieee754/ldbl-opt/math-type-macros-ldouble.h: Include <ldbl-compat-choose.h>. (maybe_long_double_symbol): New macro. [!declare_mgen_alias] (declare_mgen_alias): Use maybe_long_double_symbol. * sysdeps/ieee754/ldbl-opt/s_canonicalizel.c: Remove. * sysdeps/ieee754/ldbl-opt/s_fmaxmagl.c: Likewise. * sysdeps/ieee754/ldbl-opt/s_fminmagl.c: Likewise. * sysdeps/ieee754/ldbl-opt/s_nextdownl.c: Likewise. * sysdeps/ieee754/ldbl-opt/w_llogbl.c: Likewise. * Makerules [$(build-shared) = yes && !avoid-generated] (before-compile): Add $(common-objpfx)ldbl-compat-choose.h. [$(build-shared) = yes && !avoid-generated] ($(common-objpfx)ldbl-compat-choose.h): New target.
* Create and use first-versions.h with macros for function symbol versions.Joseph Myers2017-05-191-0/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch arranges for the glibc build to generate a header first-versions.h that defines macros for the earliest symbol version in which each public symbol (GLIBC_[0-9]* symbol version, name only uses C identifier characters) is available. This is used in sysdeps/ieee754/ldbl-opt/math-type-macros-double.h to replace the manually defined LDOUBLE_*_libm_version macros for various functions defined using type-generic templates, the purpose of which is to use in LONG_DOUBLE_COMPAT tests "was this function originally added before glibc supported long double != double on this platform?". As discussed in <https://sourceware.org/ml/libc-alpha/2016-12/msg00246.html>, I expect this to be useful more generally in reducing the amount of special-case code needed in ldbl-opt and ldbl-64-128. Tested with build-many-glibcs.py that installed stripped shared libraries are unchanged by this patch. * scripts/versions.awk: Generate first-versions.h. * sysdeps/ieee754/ldbl-opt/math-type-macros-double.h: Include <first-versions.h>. (LDOUBLE_cabsl_libm_version): Remove macro. (LDOUBLE_cargl_libm_version): Likewise. (LDOUBLE_cimagl_libm_version): Likewise. (LDOUBLE_conjl_libm_version): Likewise. (LDOUBLE_creall_libm_version): Likewise. (LDOUBLE_cacosl_libm_version): Likewise. (LDOUBLE_cacoshl_libm_version): Likewise. (LDOUBLE_ccosl_libm_version): Likewise. (LDOUBLE_ccoshl_libm_version): Likewise. (LDOUBLE_casinl_libm_version): Likewise. (LDOUBLE_csinl_libm_version): Likewise. (LDOUBLE_casinhl_libm_version): Likewise. (LDOUBLE_csinhl_libm_version): Likewise. (LDOUBLE_catanl_libm_version): Likewise. (LDOUBLE_catanhl_libm_version): Likewise. (LDOUBLE_ctanl_libm_version): Likewise. (LDOUBLE_ctanhl_libm_version): Likewise. (LDOUBLE_cexpl_libm_version): Likewise. (LDOUBLE_clogl_libm_version): Likewise. (LDOUBLE_cprojl_libm_version): Likewise. (LDOUBLE_csqrtl_libm_version): Likewise. (LDOUBLE_cpowl_libm_version): Likewise. (LDOUBLE_clog10l_libm_version): Likewise. (LDOUBLE___clog10l_libm_version): Likewise. (LDOUBLE_fdiml_libm_version): Likewise. (LDOUBLE_fmaxl_libm_version): Likewise. (LDOUBLE_fminl_libm_version): Likewise. (LDOUBLE_ilogbl_libm_version): Likewise. (LDOUBLE_nanl_libm_version): Likewise. [!M_LIBM_NEED_COMPAT] (M_LIBM_NEED_COMPAT): Use FIRST_VERSION_libm_* macros. [!declare_mgen_libm_compat] (declare_mgen_libm_compat): Likewise. * Makerules [$(build-shared) = yes && !avoid-generated] (before-compile): Add $(common-objpfx)first-versions.h. [$(build-shared) = yes && !avoid-generated] ($(common-objpfx)first-versions.h): New target. ($(common-objpfx)sysd-versions): Depend on and change to rule for building $(common-objpfx)versions.stmp.
* tunables: Specify a default value for tunablesSiddhesh Poyarekar2017-05-171-2/+10
| | | | | | | | | Enhance dl-tunables.list to allow specifying a default value for a tunable that it would be initialized to. * scripts/gen-tunables.awk: Recognize 'default' keyword in dl-tunables.list. * README.tunables: Document it.
* tunables: Make tunable_list relroSiddhesh Poyarekar2017-05-111-1/+1
| | | | | | | | | | | | | | | | | As of now we don't need tunables to be writable after they have been set initially, so there is no point in having them writable. Put tunable_list in .data.rel.ro so that it is set as read-only after relocation. This also allows us to move some of the dl_* variables that are tunables controlled into the tunables infrastructure instead of having two copies. In future if we ever need specific tunables to be writable at runtime, we can split the tunable_list into two. Regression tested on x86_64 to verify that tests continue to pass. * scripts/gen-tunables.awk: Add attribute_relro to tunable_list.
* Default Linux kernel version in build-many-glibcs.py to 4.11.Joseph Myers2017-05-011-1/+1
| | | | | * scripts/build-many-glibcs.py (Context.checkout): Default Linux kernel version to 4.11.
* Default build-many-glibcs.py to GCC 7 branch.Joseph Myers2017-04-261-1/+1
| | | | | | | | | | | | | Now there is a GCC 7 release branch, this patch makes build-many-glibcs.py default to using it instead of GCC 6. Relative to GCC 6, this fixes the MicroBlaze build but introduces ICEs building glibc testcases for SH (GCC PRs 78459, 78460; the latter is an out-of-memory issue so you may want to set memory limits when running build-many-glibcs.py). * scripts/build-many-glibcs.py (Context.checkout): Default gcc version to 7 branch.
* Update old tunables framework document/script.Sunyeop Lee2017-03-241-6/+6
| | | | | | | | | | | Since commit 8b9e9c3c0bae497ad5e2d0ae2f333f62feddcc12, security_level replaces is_secure. There were some old files need to be updated. 2017-03-23 Sunyeop Lee <sunyeop97@gmail.com> * README.tunables: Updated descriptions. * elf/dl-tunables.list: Fixed typo: SXID_NONE -> NONE. * scripts/gen-tunables.awk: Updated the code related to the commit.
* Remove C++ namespace handling from glibc headers.Joseph Myers2017-03-161-47/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | glibc headers include some code (not particularly consistent or systematic) to put various declarations in C++ namespaces std and __c99, if _GLIBCPP_USE_NAMESPACES is defined. As noted in <https://gcc.gnu.org/ml/libstdc++/2017-03/msg00025.html>, this macro was removed from libstdc++ in 2000. I don't expect compilation with such old versions of libstdc++ to work with current glibc headers anyway (whereas old *binaries* are expected to stay working with current glibc); this patch (which should be a no-op with any libstdc++ version postdating that removal) removes all this code from the glibc headers. The begin-end-check.pl test, whose comments say it is about checking these namespace macro calls, is also removed. The code in that test would have covered __BEGIN_DECLS / __END_DECLS as well, but if those weren't properly matched it would show up with the check-installed-headers-cxx tests, so I don't think there is an actual use for keeping begin-end-check.pl with the namespace code removed. Tested for x86_64 and x86 (testsuite, and that installed stripped shared libraries are unchanged by the patch). * misc/sys/cdefs.h (__BEGIN_NAMESPACE_STD): Remove macro. (__END_NAMESPACE_STD): Likewise. (__USING_NAMESPACE_STD): Likewise. (__BEGIN_NAMESPACE_C99): Likewise. (__END_NAMESPACE_C99): Likewise. (__USING_NAMESPACE_C99): Likewise. * math/math.h (_Mdouble_BEGIN_NAMESPACE): Do not define and undefine macro. (_Mdouble_END_NAMESPACE): Likewise. * ctype/ctype.h: Do not handle C++ namespaces. * libio/bits/stdio-ldbl.h: Likewise. * libio/stdio.h: Likewise. * locale/locale.h: Likewise. * math/bits/mathcalls.h: Likewise. * setjmp/setjmp.h: Likewise. * signal/signal.h: Likewise. * stdlib/bits/stdlib-float.h: Likewise. * stdlib/bits/stdlib-ldbl.h: Likewise. * stdlib/stdlib.h: Likewise. * string/string.h: Likewise. * sysdeps/x86/fpu/bits/mathinline.h: Likewise. * time/bits/types/clock_t.h: Likewise. * time/bits/types/struct_tm.h: Likewise. * time/bits/types/time_t.h: Likewise. * time/time.h: Likewise. * wcsmbs/bits/wchar-ldbl.h: Likewise. * wcsmbs/uchar.h: Likewise. * wcsmbs/wchar.h: Likewise. [_GLIBCPP_USE_NAMESPACES] (wint_t): Remove conditional definition. * wctype/wctype.h: Do not handle C++ namespaces. * scripts/begin-end-check.pl: Remove. * Makefile (installed-headers): Likewise. (tests-special): Do not add $(objpfx)begin-end-check.out. ($(objpfx)begin-end-check.out): Remove.
* build-many-glibcs: Remove no_isolate from SH configAdhemerval Zanella2017-03-131-19/+6
| | | | | | | | | | | | | Now with d40dbe7 SH build does not require more the no_isolate gcc options to correct build glibc (since SH build now does not generate a trap anymore). This patch removes the unrequired options from SH config. Checked with a build for sh3-linux-gnu, sh3eb-linux-gnu, sh4-linux-gnu, and sh4eb-linux-gnu. * scripts/build-many-glibcs.py (Context.add_all_configs): Remove no_isolate usage for SH.
* Add scripts/backport-support.shFlorian Weimer2017-02-281-0/+110
| | | | | This script is intended for maintaining the stable branches and distribution backports.
* Use Linux 4.10 in build-many-glibcs.py.Joseph Myers2017-02-221-1/+1
| | | | | * scripts/build-many-glibcs.py (Context.checkout): Default Linux kernel version to 4.10.
* build-many-glibcs: don't crash if email is not configuredZack Weinberg2017-02-161-0/+10
| | | | | | | | | | | The 'bot-cycle' action for build-many-glibcs is a convenient way to not have to remember all the steps in keeping a many-glibcs tree up to date ... or it would be, if the script could send mail _optionally_. Make it so by skipping the mail step if mail isn't configured. * scripts/build-many-glibcs.py (bot_build_mail): If the bot_config does not contain all of the necessary email- related settings, just print a warning and continue.
* tunables: Fix environment variable processing for setuid binaries (bz #21073)Siddhesh Poyarekar2017-02-021-4/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Florian Weimer pointed out that we have three different kinds of environment variables (and hence tunables): 1. Variables that are removed for setxid processes 2. Variables that are ignored in setxid processes but is passed on to child processes 3. Variables that are passed on to child processes all the time Tunables currently only does (2) and (3) when it should be doing (1) for MALLOC_CHECK_. This patch enhances the is_secure flag in tunables to an enum value that can specify which of the above three categories the tunable (and its envvar alias) belongs to. The default is for tunables to be in (1). Hence, all of the malloc tunables barring MALLOC_CHECK_ are explicitly specified to belong to category (2). There were discussions around abolishing category (2) completely but we can do that as a separate exercise in 2.26. Tested on x86_64 to verify that there are no regressions. [BZ #21073] * elf/dl-tunable-types.h (tunable_seclevel_t): New enum. * elf/dl-tunables.c (tunables_strdup): Remove. (get_next_env): Also return the previous envp. (parse_tunables): Erase tunables of category TUNABLES_SECLEVEL_SXID_ERASE. (maybe_enable_malloc_check): Make MALLOC_CHECK_ TUNABLE_SECLEVEL_NONE if /etc/setuid-debug is accessible. (__tunables_init)[TUNABLES_FRONTEND == TUNABLES_FRONTEND_valstring]: Update GLIBC_TUNABLES envvar after parsing. [TUNABLES_FRONTEND != TUNABLES_FRONTEND_valstring]: Erase tunable envvars of category TUNABLES_SECLEVEL_SXID_ERASE. * elf/dl-tunables.h (struct _tunable): Change member is_secure to security_level. * elf/dl-tunables.list: Add security_level annotations for all tunables. * scripts/gen-tunables.awk: Recognize and generate enum values for security_level. * elf/tst-env-setuid.c: New test case. * elf/tst-env-setuid-tunables: new test case. * elf/Makefile (tests-static): Add them.
* Avoid parallel GCC install in build-many-glibcs.py.Joseph Myers2017-01-181-1/+11
| | | | | | | | | | | | | | | | | | A recent build-many-glibcs.py build <https://sourceware.org/ml/libc-testresults/2017-q1/msg00067.html> ran into what proves to be an old known bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=42980> with parallel install of GCC (one which as discussed there might require automake changes to fix). This patch makes build-many-glibcs.py avoid such intermittent failures from parallel install by using -j1 for GCC make install (the code in question also applies to binutils make install, but it doesn't seem worth trying to avoid -j1 there; the builds and installs of different toolchains are still fully parallel with each other, this is only about the case when there are few enough of those that multiple jobs can get used within a single make install). * scripts/build-many-glibcs.py (Config.build_cross_tool): Use -j1 for make install.
* Make build-many-glibcs.py work on python3.2Szabolcs Nagy2017-01-111-0/+37
| | | | | | | | | | | | | | | | | I used this patch to run the new build script with python3.2, it may be worth adding this hack if python3.5 is not widespread (might work with older python, i haven't tested that). This patch make build-many-glibcs.py work with python 3.2 by adding fallback implementation to python 3.5 facilities if they are not present. Checked building a x86_64-linux-gnu toolchain with python 3.2. 2016-11-22 Szabolcs Nagy <szabolcs.nagy@arm.com> * scripts/build-many-glibcs.py (os.cpu_count): Add compatibility definition. (re.fullmatch, subprocess.run): Likewise.
* Add build-many-glibcs.py powerpc-linux-gnu-power4 build.Joseph Myers2017-01-021-1/+4
| | | | | | | | | | | | The 32-bit powerpc configurations in build-many-glibcs.py were failing to cover the powerpc32 multiarch code at all, because that code is only built for power4 and above configurations. This patch adds a 32-bit power4 configuration so that at least some of that multiarch code gets build-tested. (This is preparation for reviewing the w_* file renaming, which affects such powerpc32 multiarch files.) * scripts/build-many-glibcs.py (Context.add_all_configs): Add power4 glibc for powerpc-linux-gnu.
* Make build-many-glibcs.py use binutils 2.28 branch by default.Joseph Myers2017-01-021-1/+1
| | | | | | | | Now that a release branch exists for binutils 2.28, this patch makes build-many-glibcs.py use that by default in place of 2.27. * scripts/build-many-glibcs.py (Context.checkout): Default binutils version to 2.28 branch.
* Update config.guess and config.sub to current versions.Joseph Myers2017-01-012-7/+7
| | | | | * scripts/config.guess: Update to version 2017-01-01. * scripts/config.sub: Update to version 2017-01-01.
* Update copyright dates not handled by scripts/update-copyrights.Joseph Myers2017-01-011-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | I've updated copyright dates in glibc for 2017. This is the patch for the changes not generated by scripts/update-copyrights and subsequent build / regeneration of generated files. Please remember to include 2017 in the dates for any new files added in future (which means updating any existing uncommitted patches you have that add new files to use the new copyright dates in them). * NEWS: Update copyright dates. * catgets/gencat.c (print_version): Likewise. * csu/version.c (banner): Likewise. * debug/catchsegv.sh: Likewise. * debug/pcprofiledump.c (print_version): Likewise. * debug/xtrace.sh (do_version): Likewise. * elf/ldconfig.c (print_version): Likewise. * elf/ldd.bash.in: Likewise. * elf/pldd.c (print_version): Likewise. * elf/sotruss.sh: Likewise. * elf/sprof.c (print_version): Likewise. * iconv/iconv_prog.c (print_version): Likewise. * iconv/iconvconfig.c (print_version): Likewise. * locale/programs/locale.c (print_version): Likewise. * locale/programs/localedef.c (print_version): Likewise. * login/programs/pt_chown.c (print_version): Likewise. * malloc/memusage.sh (do_version): Likewise. * malloc/memusagestat.c (print_version): Likewise. * malloc/mtrace.pl: Likewise. * manual/libc.texinfo: Likewise. * nptl/version.c (banner): Likewise. * nscd/nscd.c (print_version): Likewise. * nss/getent.c (print_version): Likewise. * nss/makedb.c (print_version): Likewise. * posix/getconf.c (main): Likewise. * scripts/test-installation.pl: Likewise. * sysdeps/unix/sysv/linux/lddlibc4.c (main): Likewise.
* Update copyright dates with scripts/update-copyrights.Joseph Myers2017-01-0119-19/+19
|
* Update DNS RR type definitions [BZ #20593]Florian Weimer2016-12-311-0/+68
| | | | | This commit includes a new script which allows generating parts of the header files from IANA DNS parameters protocol registry.
* Add framework for tunablesSiddhesh Poyarekar2016-12-311-0/+157
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The tunables framework allows us to uniformly manage and expose global variables inside glibc as switches to users. tunables/README has instructions for glibc developers to add new tunables. Tunables support can be enabled by passing the --enable-tunables configure flag to the configure script. This patch only adds a framework and does not pose any limitations on how tunable values are read from the user. It also adds environment variables used in malloc behaviour tweaking to the tunables framework as a PoC of the compatibility interface. * manual/install.texi: Add --enable-tunables option. * INSTALL: Regenerate. * README.tunables: New file. * Makeconfig (CPPFLAGS): Define TOP_NAMESPACE. (before-compile): Generate dl-tunable-list.h early. * config.h.in: Add HAVE_TUNABLES. * config.make.in: Add have-tunables. * configure.ac: Add --enable-tunables option. * configure: Regenerate. * csu/init-first.c (__libc_init_first): Move __libc_init_secure earlier... * csu/init-first.c (LIBC_START_MAIN):... to here. Include dl-tunables.h, libc-internal.h. (LIBC_START_MAIN) [!SHARED]: Initialize tunables for static binaries. * elf/Makefile (dl-routines): Add dl-tunables. * elf/Versions (ld): Add __tunable_set_val to GLIBC_PRIVATE namespace. * elf/dl-support (_dl_nondynamic_init): Unset MALLOC_CHECK_ only when !HAVE_TUNABLES. * elf/rtld.c (process_envvars): Likewise. * elf/dl-sysdep.c [HAVE_TUNABLES]: Include dl-tunables.h (_dl_sysdep_start): Call __tunables_init. * elf/dl-tunable-types.h: New file. * elf/dl-tunables.c: New file. * elf/dl-tunables.h: New file. * elf/dl-tunables.list: New file. * malloc/tst-malloc-usable-static.c: New test case. * malloc/Makefile (tests-static): Add it. * malloc/arena.c [HAVE_TUNABLES]: Include dl-tunables.h. Define TUNABLE_NAMESPACE. (DL_TUNABLE_CALLBACK (set_mallopt_check)): New function. (DL_TUNABLE_CALLBACK_FNDECL): New macro. Use it to define callback functions. (ptmalloc_init): Set tunable values. * scripts/gen-tunables.awk: New file. * sysdeps/mach/hurd/dl-sysdep.c: Include dl-tunables.h. (_dl_sysdep_start): Call __tunables_init.
* Add comments to check-c++-types.sh.Steve Ellcey2016-12-271-0/+8
| | | | * scripts/check-c++-types.sh: Add comments.
* scripts/test_printers_common.py: Log GDB error messageFlorian Weimer2016-12-231-0/+1
| | | | | | If GDB prints an error message for a "python" command, include that error message in the test log output, to simplify diagnosing GDB/Python detection issues.
* Update miscellaneous files from upstream sources.Joseph Myers2016-12-215-66/+96
| | | | | | | | | | | | | | | | | This patch updates texinfo.tex and various miscellaneous scripts to their latest upstream versions. (There may be another update in early January to bring in 2017 copyright dates, if the upstream versions get updated with such dates promptly.) Tested for x86_64. * manual/texinfo.tex: Update to version 2016-09-18.18 with trailing whitespace removed. * scripts/config.guess: Update to version 2016-10-02. * scripts/config.sub: Update to version 2016-11-19. * scripts/install-sh: Update to version 2016-01-11.22. * scripts/mkinstalldirs: Update to version 2016-01-11.22. * scripts/move-if-change: Update to version 2016-01-11 22:04.
* Make build-many-glibcs.py flush stdout before execv.Joseph Myers2016-12-161-0/+1
| | | | | | | | | | | | When build-many-glibcs.py re-execs itself with execv, any buffered output on stdout may be lost (in particular, messages intended to go to a bot's log about the re-exec taking place). This patch makes it flush stdout before execv, similar to the flush before running a subprocess from the bot that is done to ensure output appears in the right order. * scripts/build-many-glibcs.py (Context.exec_self): Flush stdout before calling execv.
* Use Linux 4.9 (headers) in build-many-glibcs.py.Joseph Myers2016-12-141-1/+1
| | | | | | | | | | | | This patch updates build-many-glibcs.py to use Linux 4.9 for kernel headers unless another version is explicitly specified. Note that when a version changes like this you'll need to use --replace-sources when updating an existing checkout to tell build-many-glibcs.py it's OK to delete and replace the sources of a component for which the version used has changed. * scripts/build-many-glibcs.py (Context.checkout): Default Linux kernel version to 4.9.
* Make _REENTRANT and _THREAD_SAFE aliases for _POSIX_C_SOURCE=199506L.Zack Weinberg2016-12-081-1/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | For many years, the only effect of these macros has been to make unistd.h declare getlogin_r. _POSIX_C_SOURCE >= 199506L also causes this function to be declared. However, people who don't carefully read all the headers might be confused into thinking they need to define _REENTRANT for any threaded code (as was indeed the case a long time ago). Therefore, remove __USE_REENTRANT, and make _REENTRANT and _THREAD_SAFE into synonyms for _POSIX_C_SOURCE=199506L. This will only affect programs that don't select a higher conformance level some other way. For instance, -std=c89 -D_REENTRANT will see a change in visible declarations, but -std=c99 -D_POSIX_C_SOURCE=200809L -D_REENTRANT won't, and -D_REENTRANT all by itself also won't, because _DEFAULT_SOURCE implies _POSIX_C_SOURCE > 199506. * include/features.h: Remove __USE_REENTRANT. Treat _REENTRANT and _THREAD_SAFE the same as _POSIX_C_SOURCE=199506L, if a higher POSIX conformance level has not been selected by other macros. * NEWS, manual/creature.texi: Document this change. * posix/unistd.h, posix/bits/unistd.h: Don't check __USE_REENTRANT. * include/libc-symbols.h: Don't define _REENTRANT. * scripts/check-installed-headers.sh: Don't undefine _REENTRANT.
* Add pretty printers for the NPTL lock typesMartin Galvan2016-12-083-0/+543
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch adds pretty printers for the following NPTL types: - pthread_mutex_t - pthread_mutexattr_t - pthread_cond_t - pthread_condattr_t - pthread_rwlock_t - pthread_rwlockattr_t To load the pretty printers into your gdb session, do the following: python import sys sys.path.insert(0, '/path/to/glibc/build/nptl/pretty-printers') end source /path/to/glibc/source/pretty-printers/nptl-printers.py You can check which printers are registered and enabled by issuing the 'info pretty-printer' gdb command. Printers should trigger automatically when trying to print a variable of one of the types mentioned above. The printers are architecture-independent, and were tested on an AMD64 running Ubuntu 14.04 and an x86 VM running Fedora 24. In order to work, the printers need to know the values of various flags that are scattered throughout pthread.h and pthreadP.h as enums and #defines. Since replicating these constants in the printers file itself would create a maintenance burden, I wrote a script called gen-py-const.awk that Makerules uses to extract the constants. This script is pretty much the same as gen-as-const.awk, except it doesn't cast the constant values to 'long' and is thorougly documented. The constants need only to be enumerated in a .pysym file, which is then referenced by a Make variable called gen-py-const-headers. As for the install directory, I discussed this with Mike Frysinger and Siddhesh Poyarekar, and we agreed that it can be handled in a separate patch, and shouldn't block merging of this one. In addition, I've written a series of test cases for the pretty printers. Each lock type (mutex, condvar and rwlock) has two test programs, one for itself and other for its related 'attributes' object. Each test program in turn has a PExpect-based Python script that drives gdb and compares its output to the expected printer's. The tests run on the glibc host, which is assumed to have both gdb and PExpect; if either is absent the tests will fail with code 77 (UNSUPPORTED). For cross-testing you should use cross-test-ssh.sh as test-wrapper. I've tested the printers on both native builds and a cross build using a Beaglebone Black running Debian, with the build system's filesystem shared with the board through NFS. Finally, I've written a README that explains all this and more. * INSTALL: Regenerated. * Makeconfig: Add comments and whitespace to make the control flow clearer. (+link-printers-tests, +link-pie-printers-tests, CFLAGS-printers-tests, installed-rtld-LDFLAGS, built-rtld-LDFLAGS, link-libc-rpath, link-libc-tests-after-rpath-link, link-libc-printers-tests): New. (rtld-LDFLAGS, rtld-tests-LDFLAGS, link-libc-tests-rpath-link, link-libc-tests): Use the new variables as required. * Makerules ($(py-const)): New rule. generated: Add $(py-const). * README.pretty-printers: New file. * Rules (tests-printers-programs, tests-printers-out, py-env): New. (others): Depend on $(py-const). (tests): Depend on $(tests-printers-programs) or $(tests-printers-out), as required. Pass $(tests-printers) to merge-test-results.sh. * manual/install.texi: Add requirements for testing the pretty printers. * nptl/Makefile (gen-py-const-headers, pretty-printers, tests-printers, CFLAGS-test-mutexattr-printers.c CFLAGS-test-mutex-printers.c, CFLAGS-test-condattr-printers.c, CFLAGS-test-cond-printers.c, CFLAGS-test-rwlockattr-printers.c CFLAGS-test-rwlock-printers.c, tests-printers-libs): Define. * nptl/nptl-printers.py: New file. * nptl/nptl_lock_constants.pysym: Likewise. * nptl/test-cond-printers.c: Likewise. * nptl/test-cond-printers.py: Likewise. * nptl/test-condattr-printers.c: Likewise. * nptl/test-condattr-printers.py: Likewise. * nptl/test-mutex-printers.c: Likewise. * nptl/test-mutex-printers.py: Likewise. * nptl/test-mutexattr-printers.c: Likewise. * nptl/test-mutexattr-printers.py: Likewise. * nptl/test-rwlock-printers.c: Likewise. * nptl/test-rwlock-printers.py: Likewise. * nptl/test-rwlockattr-printers.c: Likewise. * nptl/test-rwlockattr-printers.py: Likewise. * scripts/gen-py-const.awk: Likewise. * scripts/test_printers_common.py: Likewise. * scripts/test_printers_exceptions.py: Likewise.
* Add build-many-glibcs.py option to strip installed shared libraries.Joseph Myers2016-12-071-2/+11
| | | | | | | | | | | | | | | | | | | | | | | | | This patch adds a --strip option to build-many-glibcs.py, to make it strip the installed shared libraries after installation. This is for convenience if you want to compare installed stripped shared libraries before and after a patch that was not meant to result in any code changes: you can run with this option, copy the install/glibcs directory, run again with the patch and compare the */lib* subdirectory contents. (It might make sense for the option to strip libraries in other directories, including stripping debug information from static libraries, with a view to making it possible for a no-generated-code-changes patch to result in completely identical install/glibcs directories, so simplifying comparison, though that may need other build determinism changes, e.g. to build deterministic .a files.) * scripts/build-many-glibcs.py (Context.__init__): Take strip argument. (Glibc.build_glibc): Strip installed shared libraries if requested. (get_parser): Add --strip option. (main): Update Context call.
* Make build-many-glibcs.py support running as a bot.Joseph Myers2016-12-011-11/+41
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch makes build-many-glibcs.py support a "bot" action, for repeatedly running a checkout and build cycle. Two new configuration variables are used in bot-config.json. "delay" indicates the time to sleep after each bot-cycle round (regardless of whether that round actually ran any builds); "run" is a boolean, which is false if the bot should just exit (the point of this is that you can edit bot-config.json to set this to false to cause a running bot to exit cleanly between builds) and true if the bot should run. The bot does not exit if the bot-cycle process exits with error status (that can occur when sourceware's load limiting means anonymous version control access fails, for example), just sleeps until it's time to try again. The script is changed to flush stdout before running a subprocess in bot-cycle, so that when output is redirected (as expected for a bot) the status messages from bot-cycle appear in their proper position in its redirected output relative to the output from the subprocesses run, and to copy the logs directory before running builds in bot-cycle so that the logs from at least one complete build are always available for looking at how something failed, even while the next build is running. * scripts/build-many-glibcs.py: Add bot to usage message. Import time module. (Context.__init__): Initialize self.logsdir_old. (Context.run_builds): Handle bot action. (Context.bot_cycle): Copy logs directory before running builds. (Context.bot_run_self): Take argument for whether to check subprocess result. Flush stdout before running subprocess. (Context.bot): New function. (get_parser): Allow bot action.
* Add build-many-glibcs.py bot-cycle action.Joseph Myers2016-11-301-9/+161
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch continues the process of setting up build-many-glibcs.py to run as a bot monitoring for and reporting on build issues by adding a bot-cycle action to the script. When this action is used, it will run the checkout action (re-execing itself if it was changed by that action), then rebuild whichever of host-libraries, compilers, glibcs should be rebuilt based on changed versions, time elapsed and state of previous builds. Email is sent with the results of the build (for each build action done). The rebuild logic is: if previous build time or versions aren't recorded, rebuild that component. If the script has changed, rebuild everything. If any relevant component version has changed, rebuild, except for not rebuilding compilers if the time indicated in the bot configuration has not passed since the last build of the compilers. If one piece is rebuilt then rebuild subsequent pieces as well. Using bot-cycle requires a configuration file bot-config.json in the toplevel directory used by build-many-glibcs.py. It might contain e.g. { "compilers-rebuild-delay": 604800, "email-from": "Example Name <user@example.org>", "email-server": "localhost", "email-subject": "GCC 6 %(action)s %(build-time)s build results", "email-to": "libc-testresults@sourceware.org" } My next intended step is adding a further action "bot" which loops running bot-cycle then sleeping for an amount of time given in bot-config.json. Then I'll set up a bot using that action (building with GCC 6 branch; a bot using GCC mainline may wait until the SH out-of-memory issues <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78460> are fixed; I expect the bot to mail to me until it seems ready to switch to mailing to gcc-testresults). * scripts/build-many-glibcs.py: Add bot-cycle to usage message. Import email.mime.text, email.utils and smtplib modules. (Context.__init__): Initialize self.bot_config_json. (Context.run_builds): Handle bot-cycle action. (Context.load_bot_config_json): New function. (Context.part_build_old): Likewise. (Context.bot_cycle): Likewise. (Context.bot_build_mail): Likewise. (Context.bot_run_self): Likewise. (get_parser): Allow bot-cycle action.
* Make build-many-glibcs.py store more information about builds.Joseph Myers2016-11-261-4/+111
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch makes build-many-glibcs.py store information about builds in JSON format. This is part of preparing it for use in a bot checking for regressions. The information stored is: time of last build (of host-libraries, compilers or glibcs); versions of components used in the last build (for compilers, host library versions are properly copied from those used for the previous host-libraries build, and for glibcs, component versions other than that of glibc are similarly copied from the last compilers build); PASS/FAIL/UNRESOLVED results of the individual build steps; a list of changed results; a list of tests (that are still run at all) that have ever been recorded to PASS. The first pieces of information are intended to be used by a bot to decide whether a rebuild is appropriate (based on some combination of elapsed time and changes to versions; a bot might want to rebuild glibcs if there had been any change but only rebuild compilers after enough time had elapsed, for example). All the information is intended to be used in generating mails with results information. This state is specifically for full builds (no individual configs for building compilers or glibcs specified). If individual configs are specified, build-time and build-versions information is cleared (since it will no longer accurately reflect the install directory contents), while the other information is left unchanged. This reflects the motivation of providing information for a bot checking for regressions; the contents of build-state.json in a tree used for manual builds that may be only for some configurations are not particularly important. * scripts/build-many-glibcs.py: Import datetime module. (Context.__init__): Load JSON build state. Initialize list of status logs. (Context.run_builds): Update saved build state. (Context.add_makefile_cmdlist): Update list of status logs. (Context.load_build_state_json): New function. (Context.store_build_state_json): Likewise. (Context.clear_last_build_state): Likewise. (Context.update_build_state): Likewise. (CommandList.status_logs): Likewise.
* Make build-many-glibcs.py re-exec itself if changed by checkout.Joseph Myers2016-11-251-0/+14
| | | | | | | | | | | | | | | | | | | Updating build-many-glibcs.py may result in changes to the default versions of components, or to the set of components (if e.g. Hurd support is added and that requires a new component). It's desirable for the checkout process to leave a source tree that is ready to use. If the checkout updated the script itself, that means it needs to be rerun to cause any new versions or components referenced by the new script version to be properly checked out. This patch makes the script check if it was modified by the checkout process, and re-exec itself (with the same arguments) if so. * scripts/build-many-glibcs.py (Context.__init__): Save text of script being executed. (Context.get_script_text): New function. (Context.exec_self): Likewise. (Context.checkout): Re-exec script if changed by checkout process.
* Make build-many-glibcs.py track component versions requested and used.Joseph Myers2016-11-241-10/+73
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch makes build-many-glibcs.py record the component versions checked out, and whether those versions were explicitly requested or defaults, in a file versions.json in the source directory. The preferred version of a component is the first of: one explicitly specified on the command line; one explicitly specified on the command line in a previous run of build-many-glibcs.py; a default version for that component. Thus, once you've run build-many-glibcs.py checkout once with the updated script (making sure to specify the right versions of any components previously checked out with a non-default version), in future you can just run it without version specifiers and it will know when a default-version component has changed its default version and so should be checked out again. Because you might have local changes and not want a default-version component checkout replaced, you need to pass the --replace-sources option to allow the script to delete and replace a component source directory automatically; otherwise, it will give an error if a version has changed. The script does not try to change branches of git or SVN checkouts without checking out from scratch; if the version number requested has changed and --replace-sources is used, the relevant source directory will be removed completely and a new one checked out from scratch. Apart from allowing automatic updates of components with default versions, this also facilitates bots reporting on the versions used in a given build. versions.json contains not just information on the version number and whether that was requested explicitly, but also git or SVN revision information intended to be used in email reports from bots. * scripts/build-many-glibcs.py: Import json module. (Context.__init__): Take replace_sources argument. Load versions.json. (Context.load_versions_json): New function. (Context.store_json): Likewise. (Context.store_versions_json): Likewise. (Context.set_component_version): Likewise. (Context.checkout): Update versions.json. Check for and handle changes of version. Prefer previously explicitly specified version to default version. (Context.checkout_vcs): Return a revision identifier. (Context.git_checkout): Likewise. (Context.gcc_checkout): Likewise. (get_parser): Add --replace-sources option. (main): Pass replace_sources argument to Context call.
* build-many-glibcs: Revert -fno-isolate-erroneous-paths options for tileproChris Metcalf2016-11-231-2/+1
| | | | TILEPro now has a __builtin_trap instruction in gcc tip and gcc 6.
* Make build-many-glibcs.py use -fno-isolate-erroneous-paths options for tilepro.Joseph Myers2016-11-221-5/+7
| | | | | | | | | | | | | | | | | | My most recent build-many-glibcs.py build with GCC mainline showed build failures for tilepro with the symptoms (multiple definitions of symbols building ld.so, see the build log referenced in the GCC bug referenced in the comment for an example) that correspond to the isolate-erroneous-paths optimization not being suitable for building glibc unless the GCC port provides a trap pattern (so __builtin_trap expands to an inline instruction rather than a call to abort). Since tilepro indeed lacks such as pattern in GCC, this patch duly arranges for this optimization to be disabled when building for tilepro, as it is for sh. Tested (compilation only) for tilepro. * scripts/build-many-glibcs.py (Context.add_all_configs): Also use -fno-isolate-erroneous-paths options for tilepro.
* Quote shell commands in logs from build-many-glibcs.py.Joseph Myers2016-11-181-1/+11
| | | | | | | | | | | | | | As requested in <https://sourceware.org/ml/libc-alpha/2016-11/msg00664.html>, this patch makes the commands recorded in build-many-glibcs.py quote words so they can be cut-and-pasted back into a shell. (Note that these logs are generated by the wrapper script generated to run commands with logs, hence the needs for quoting logic to be implemented in that shell script.) * scripts/build-many-glibcs.py (Context.write_files): Make wrapper script quote words in command output to log suitably for input to the shell.