Commit Graph

17 Commits

Author SHA1 Message Date
Rich Felker e678fc6f32 replace system's install command with a shell script
the historical (non-standardized) install command is really
inappropriate for installing binaries/libraries on a system that
utilizes memory-mapped executable files. rather than replacing an
existing file atomically, it overwrites the existing file. this can
cause running programs to see a partially-modified version of the
file, resulting in unpredictable behavior, or SIGBUS. a MAP_COPY mode
for mmap would get around this problem, but Linux lacks MAP_COPY.

the shell script added with this commit works around the problem by
writing temporary files and moving them into place. unlike the
historical install utility, it also support a -l option for installing
a symbolic link atomically, via the same method.
2013-08-17 22:21:11 -04:00
Rich Felker 9448b0513e refactor headers, especially alltypes.h, and improve C++ ABI compat
the arch-specific bits/alltypes.h.sh has been replaced with a generic
alltypes.h.in and minimal arch-specific bits/alltypes.h.in.

this commit is intended to have no functional changes except:
- exposing additional symbols that POSIX allows but does not require
- changing the C++ name mangling for some types
- fixing the signedness of blksize_t on powerpc (POSIX requires signed)
- fixing the limit macros for sig_atomic_t on x86_64
- making dev_t an unsigned type (ABI matching goal, and more logical)

in addition, some types that were wrongly defined with long on 32-bit
archs were changed to int, and vice versa; this change is
non-functional except for the possibility of making pointer types
mismatch, and only affects programs that were using them incorrectly,
and only at build-time, not runtime.

the following changes were made in the interest of moving
non-arch-specific types out of the alltypes system and into the
headers they're associated with, and also will tend to improve
application compatibility:
- netdb.h now includes netinet/in.h (for socklen_t and uint32_t)
- netinet/in.h now includes sys/socket.h and inttypes.h
- sys/resource.h now includes sys/time.h (for struct timeval)
- sys/wait.h now includes signal.h (for siginfo_t)
- langinfo.h now includes nl_types.h (for nl_item)

for the types in stdint.h:
- types which are of no interest to other headers were moved out of
  the alltypes system.
- fast types for 8- and 64-bit are hard-coded (at least for now); only
  the 16- and 32-bit ones have reason to vary by arch.

and the following types have been changed for C++ ABI purposes;
- mbstate_t now has a struct tag, __mbstate_t
- FILE's struct tag has been changed to _IO_FILE
- DIR's struct tag has been changed to __dirstream
- locale_t's struct tag has been changed to __locale_struct
- pthread_t is defined as unsigned long in C++ mode only
- fpos_t now has a struct tag, _G_fpos64_t
- fsid_t's struct tag has been changed to __fsid_t
- idtype_t has been made an enum type (also required by POSIX)
- nl_catd has been changed from long to void *
- siginfo_t's struct tag has been removed
- sigset_t's has been given a struct tag, __sigset_t
- stack_t has been given a struct tag, sigaltstack
- suseconds_t has been changed to long on 32-bit archs
- [u]intptr_t have been changed from long to int rank on 32-bit archs
- dev_t has been made unsigned

summary of tests that have been performed against these changes:
- nsz's libc-test (diff -u before and after)
- C++ ABI check symbol dump (diff -u before, after, glibc)
- grepped for __NEED, made sure types needed are still in alltypes
- built gcc 3.4.6
2013-07-22 11:22:36 -04:00
Rich Felker fd1d7be35f fix mixup in previous change to gcc wrapper 2013-06-07 10:18:07 -04:00
Rich Felker c161356002 make gcc-specific headers (intrinsics, etc.) available with wrapper
they are intentionally listed after the libc include directory so that
the gcc float.h, etc. don't get used in place of the libc ones.
2013-06-07 10:13:07 -04:00
Rich Felker 5d26d5d15b gcc wrapper improvement: leave libgcc dir in the library path
this is needed in case -lgcc is passed explicitly on the link command
line, for example if the wrapper is being used to build musl itself.
2012-07-23 23:29:03 -04:00
Rich Felker 6e0ad2277a make gcc wrapper rewrite link options rather than just extending them
this is not tested yet, but should work to get rid of unwanted
--hash-style=gnu hacks present in some distro-patched gcc versions.
2012-06-06 15:48:06 -04:00
Rich Felker ed6717277c fix musl-gcc wrapper to work with -pie
linking the wrong crt1.o resulted in textrels and thus crashing
2012-05-30 21:19:32 -04:00
Rich Felker 58f430c1e0 new gcc wrapper, entirely specfile based
the _concept_ of this wrapper has been tested extensively, but the
integration with the build/install system, and using a persistent
specfile rather than one generated at build-time, have not been
heavily tested and may need minor tweaks.

this approach should be a lot more robust (and easier to improve) than
writing a shell script that's responsible for trying to mimic gcc's
logic about whether it's compiling or linking, building shared libs or
executable files, etc. it's also lighter weight and should result in
mildly faster builds when using the wrapper.
2012-04-22 14:32:49 -04:00
Rich Felker 61c2cf877b remove -std=gnu99 from musl-gcc wrapper
while probably desirable, changing the default language variant is
outside the scope of the wrapper's responsibility.
2012-02-17 23:51:23 -05:00
Rich Felker 4f4d6ae985 improve gcc wrapper to support -nostdlib, -nostartfiles 2012-02-02 23:54:46 -05:00
Rich Felker b768c7bc63 make gcc wrapper support -shared correctly
it was previously attempting to link start files as part of shared
objects. this is definitely wrong and depending on the platform and
linker could range from just adding extraneous junk to introducing
textrels to making linking fail entirely.
2012-01-24 00:22:27 -05:00
Rich Felker d30c331d1f new gcc wrapper now supports pre-4.4 gcc versions and is more robust 2011-09-21 19:40:55 -04:00
Rich Felker 207c45d7ab cleanup shared library build system to be more $HOME-local-install friendly
the path for the dynamic linker is now configurable, and failure to
install the symlink for it will not stop the build.
2011-06-27 21:38:11 -04:00
Rich Felker 1a3ff4f909 fix dynamic linker issue in musl-gcc wrapper 2011-06-25 18:57:17 -04:00
Rich Felker ec05a0b08f adapt build/install/gcc-wrapper systems for dynamic linking support 2011-06-23 22:13:47 -04:00
Rich Felker 71df8b2760 use -L/...../ -lgcc instead of /...../libgcc.a in musl-gcc wrapper
this should avoid warnings about unused libs when not linking, and
might fix some other obscure issues too. i might replace this approach
with a completely different one soon though.
2011-03-01 12:04:36 -05:00
Rich Felker 0b44a0315b initial check-in, version 0.5.0 2011-02-12 00:22:29 -05:00