History log of /seL4-refos-master/libs/libmuslc/Makefile
Revision Date Author Comments
# bf3082a1 16-Dec-2019 Matthew <matt.phillips121@gmail.com>

Use only the C_COMPILER var to set the compiler

Since the C_COMPILER variable is passed through explicitly, musl just needs to
use this same compiler


# 28f4cac5 11-Dec-2019 Matthew <matt.phillips121@gmail.com>

Add flexible c compiler support

The C compiler will be specified in the toolchain file and set before
building musl


# 1c6350ea 23-Sep-2019 Kent McLeod <Kent.Mcleod@data61.csiro.au>

CMake: Suppress build output by default

- We set MAKEFLAGS=-s by default which suppresses build output for build
rules. If ninja is invoked with MAKEFLAGS=V=3 then this will provide
verbose output.
- Only output output from ./configure if it exits with an error.


# f1f448f8 10-Sep-2018 Kent McLeod <Kent.Mcleod@data61.csiro.au>

sed: Change "-i bak" to "-ibak" for portability

GNU sed requires there be no space while BSD sed supports no space also.


# 5a3570fa 09-Sep-2018 Ilya Yanok <ilya.yanok@gmail.com>

Makefile: add argument to sed -i option

BSD sed (the default on OS X) does not support -i without argument, so it
fails without updating ARCH setting, which results in musllibc unusable on seL4.


# 93427af1 09-Sep-2018 Ilya Yanok <ilya.yanok@gmail.com>

Makefile: fix typo, s/CROSS_COMILE/CROSS_COMPILE/


# 794351fd 02-Apr-2018 Kent McLeod <Kent.Mcleod@data61.csiro.au>

Conditionally set RISCV target


# 86d7465d 02-Apr-2018 Kent McLeod <Kent.Mcleod@data61.csiro.au>

RISC-V: Post rebase fixes


# f6a7f6be 20-Aug-2017 Saggi Mizrahi <ficoos@gmail.com>

Fix indentation

because line 23 begins with a tab make gets confused and things it's a command


# ef1db012 08-Aug-2017 Adrian Danis <Adrian.Danis@data61.csiro.au>

Use out of tree build support and clean when necessary

This Makefile wrapper was written when muslc did not support out of tree builds. As it now
does this commit updates the wrapper to take advantage of it. Additionally it avoids
continuously rerunning configure when not necessary and will perform a clean if it detects
that configuration has substantially changed


# 26c9810a 04-Aug-2017 Adrian Danis <Adrian.Danis@data61.csiro.au>

Restore makefiles after merge


# 2f2a0642 04-Aug-2017 Adrian Danis <Adrian.Danis@data61.csiro.au>

Restore original muslc Makefile prior to merge


# 037b0b44 04-Aug-2017 Adrian Danis <Adrian.Danis@data61.csiro.au>

Implement new build system wrapping

Instead of having a manually written config.mak and modifying the muslc Makefile, this
commit uses a different wrapper Makefile that calls the original muslc ./configure script
and then invokes its original Makefile. This wrapping method should provide easier merging of
changes going forward


# 63e3a166 11-May-2016 Bobby Bingham <koorogi@koorogi.info>

deduplicate __NR_* and SYS_* syscall number definitions


# b5c66eef 03-May-2016 Kent McLeod <kent.mcleod@nicta.com.au>

Add mkdir line to makefile

When built with -j sometimes, the directory isn't made yet when the
particular task is run


# 8b084f06 19-Feb-2016 Rich Felker <dalias@aerifal.cx>

generate list of crt files to install instead of hard-coding in makefile

this follows the principle of having the source tree layout define
build semantics. it also makes it possible for crt/$(ARCH) to define
additional installable files, which may be needed for midipix and
other future targets.


# 157e2849 17-Feb-2016 Rich Felker <dalias@aerifal.cx>

support clean/distclean make targets in unconfigured tree

commit 2f853dd6b9a95d5b13ee8f9df762125e0588df5d moved the error
handling for $(ARCH) not being set such that it applied to all
targets, including clean and distclean. previously these targets
worked even in an unconfigured tree. to restore the old behavior, make
most of the makefile body conditional on $(ARCH) being set/non-empty
and produce the error via a fake "all" target in the conditional
branch for the case where $(ARCH) is empty.


# 63bcda4d 17-Feb-2016 Rich Felker <dalias@aerifal.cx>

adjust makefile to make crt/ and ldso/ sources arch-replaceable

prior to commit 2f853dd6b9a95d5b13ee8f9df762125e0588df5d which
overhauled the makefile for out-of-tree builds, crt/*.c files were
replaceable by crt/$(ARCH)/*.s, and top-level ldso/ did not exist (its
files were under src/ldso). since then, crti.o and crtn.o have been
hard-coded as arch-specific, but none of the other files in crt/ or
ldso/ were replaceable at all.

in preparation for easy integration with midipix, which has a port of
musl to windows, it needs to be possible to override the ELF-specific
code in these files. making the same arch-replacements system work
throughout the whole source tree also improves consistency and removes
the need for some file-specific rules (crti.o and crtn.o) in the
makefile.


# 65498f28 30-Jan-2016 Rich Felker <dalias@aerifal.cx>

don't suppress shared libc when linker lacks -Bsymbolic-functions

previous work overhauling the dynamic linker made it so that linking
libc with -Bsymbolic-functions was no longer mandatory, but the
configure logic that forced --disable-shared when ld failed to accept
the option was left in place.

this commit removes the hard-coded -Bsymbolic-functions from the
Makefile and changes the configure test to one that simply adds it to
the auto-detected LDFLAGS on success.


# efdf04cf 27-Jan-2016 Rich Felker <dalias@aerifal.cx>

add arch/generic include fallback to build rules

this sets the stage for the first phase of the bits deduplication.
bits headers which are identical for "most" archs will be moved to
arch/generic/bits.


# f9b8df46 25-Jan-2016 Rich Felker <dalias@aerifal.cx>

add ssp suppression to some arch-override files that may need it

these were not covered by the parent-level rules with the new build
system. in the old build system, the equivalent files were often in
arch/$(ARCH)/src and likewise lacked the suppression. this could lead
to early crashing (before thread pointer init) when libc itself was
built with stack protector enabled.


# 1619127c 25-Jan-2016 Rich Felker <dalias@aerifal.cx>

use same object files for libc.a and libc.so if compiler produces PIC

now that .lo and .o files differ only by whether -fPIC is passed (and
no longer at the source level based on the SHARED macro), it's
possible to use the same object files for both static and shared libc
when the compiler would produce PIC for the static files anyway. this
happens if the user has included -fPIC in their CFLAGS or if the
compiler has been configured to produce PIE by default.

we use the .lo files for both, and still append -fPIC to the CFLAGS,
rather than using the .o files so that libc.so does not break
catastrophically if the user later removes -fPIC from CFLAGS in
config.mak or on the make command line. this also ensures that we get
full -fPIC in case -fpic, -fPIE, or some other lesser-PIC option was
passed in CFLAGS.


# 5552ce52 25-Jan-2016 Rich Felker <dalias@aerifal.cx>

move dynamic linker to its own top-level directory, ldso

this eliminates the last need for the SHARED macro to control how
files in the src tree are compiled. the same code is used for both
libc.a and libc.so, with additional code for the dynamic linker (from
the new ldso tree) being added to libc.so but not libc.a. separate .o
and .lo object files still exist for the src tree, but the only
difference is that the .lo files are built as PIC.

in the future, if/when we add dlopen support for static-linked
programs, much of the code in dynlink.c may be moved back into the src
tree, but properly factored into separate source files. in that case,
the code in the ldso tree will be reduced to just the dynamic linker
entry point, self-relocation, and loading of libraries needed by the
main application.


# 5a2e8825 21-Jan-2016 Rich Felker <dalias@aerifal.cx>

remove arch/$(ARCH)/src from the build system

the files that used to come from extra src dirs under the arch dir
have all been removed or moved to appropriate places under the main
src tree.


# 4fcc7eb5 19-Jan-2016 Rich Felker <dalias@aerifal.cx>

simplify "make clean" and remove unneeded lib dir from tree

the lib dir is automatically created if needed by the out-of-tree
build logic, and now that all generated files are in obj and lib,
deleting them is much simpler. using "rm -rf" is also more thorough,
as it picks up object files that were left around from source files
that no longer exist or which are no longer to be used because an
arch-specific replacement file was added or removed.


# ada4798d 19-Jan-2016 Rich Felker <dalias@aerifal.cx>

deduplicate compiler invocation command line in makefile

also clean up duplication of CFLAGS passing to assembler.


# 80de11bc 19-Jan-2016 Rich Felker <dalias@aerifal.cx>

remove outdated/incorrect comment about AS_CMD from makefile


# 0f814a4e 19-Jan-2016 Rich Felker <dalias@aerifal.cx>

remove support for subarch .sub files from the makefile

as of commit af21a82ccc8687aa16e85def7db95efeae4cf72e, .sub files are
no longer in use. removing the makefile machinery to handle them not
only cleans up and simplifies the makefile, but also significantly
reduces make's startup time.


# b6363bb7 19-Jan-2016 Rich Felker <dalias@aerifal.cx>

fix build regression for arm pre-v7 from out-of-tree build patch

commit 2f853dd6b9a95d5b13ee8f9df762125e0588df5d failed to replicate
the old makefile logic that caused arch/arm/src/arm/atomics.s to be
built. since this was the only .s file under arch/*/src, rather than
trying to reproduce the old logic, I'm just moving it up a level and
adjusting the glob pattern in the makefile to catch it. eventually
arch/*/src will probably be removed in favor of moving all these files
to appropriate src/*/$(ARCH) locations.


# 9514e70c 19-Jan-2016 Rich Felker <dalias@aerifal.cx>

eliminate separate static/shared CFLAGS vars in makefile

this allows the rules for .o and .lo files to be identical, with -fPIC
and -DSHARED added for .lo files via target-specific variable append.
this is arguably cleaner now and will allow more cleanup and removal
of redundant rule bodies after other prerequisite changes are made.


# 9f5eb779 19-Jan-2016 Rich Felker <dalias@aerifal.cx>

add support for arch-provided replacement files as .c or .S

previously, replacement files provided in $(ARCH) dirs under src/ had
to be .s files. in order to replace a file with C source, an empty .s
file was needed there to suppress the original file, and a separate .c
file was needed in arch/$(ARCH)/src/.

support for .S is new and is aimed at short-term use eliminating .sub
files. asm source files are still expected not to make any heavy
preprocessor use, just simple conditionals on subarch. eventually most
affected files may be replaced with C source files with minimal inline
asm instead of asm source files.


# 2f853dd6 18-Nov-2015 Petr Hosek <phosek@chromium.org>

support out-of-tree build

this change adds support for building musl outside of the source
tree. the implementation is similar to autotools where running
configure in a different directory creates config.mak in the current
working directory and symlinks the makefile, which contains the
logic for creating all necessary directories and resolving paths
relative to the source directory.

to support both in-tree and out-of-tree builds with implicit make
rules, all object files are now placed into a separate directory.


# 4f3a9288 18-Nov-2015 Rich Felker <dalias@aerifal.cx>

fix build regression from removal of #ifdef SHARED


# 4cd8b472 02-Nov-2015 Rich Felker <dalias@aerifal.cx>

keep user-provided CFLAGS/LDFLAGS separate from those added by configure

this way, overriding these variables on the make command line (or just
re-passing the originally-passed values when invoking make) won't
suppress use of the flags added by configure.


# be76cdcf 22-Oct-2015 Rich Felker <dalias@aerifal.cx>

fix breakage when user overrides CFLAGS on the make command line

these per-target CFLAGS adjustments are mandatory additions to the
command line for building the affected targets, not part of the
user-provided CFLAGS for tuning. my intent was always that the
variable append operations would take place after user settings, but
when a variable is set on the command line, it overrides all
definitions in the makefile, including target-specific ones.

based on patch by Szabolcs Nagy.


# 0650a059 02-Oct-2015 Alex Dowad <alexinbeijing@gmail.com>

factor common awk functions for CFI generation scripts into new file

There is a lot which could be common between i386 and x86_64, but none
of it will be useful for any other arch. These should be useful for
all archs, however.


# d18cf76d 30-Aug-2015 Rich Felker <dalias@aerifal.cx>

remove use of buggy .SECONDARY special target in makefile

this functionality is affected by GNU make bug #30653, "intermediate
files incorrectly pruned in parallel builds". on affected versions of
make, parallel builds attempt to compile source files before
alltypes.h is generated.

as noted with commit a91ebdcfac6804714a1fe39f4375e2b4ebab085b, which
added the use of .SECONDARY, suppression of removal of "intermediate"
files does not seem to be needed at present. if it is needed in the
future, it should be achievable by explicitly mentioning their names
as targets or prerequisites.


# a91ebdcf 27-Aug-2015 Rich Felker <dalias@aerifal.cx>

fix makefile suppression of intermediate file removal

at one point, GNU make was removing crt/*.o after producing the copies
in lib/ due to an arcane misfeature for handling "intermediate" files.
the circumstances that caused this are no longer present in our
makefile, but the previous workaround using .PRECIOUS was wrong and
could result in corrupt/partial files being left behind during an
interrupted build. using .SECONDARY is the correct, documented fix
that will prevent deletion of "intermediate" files from ever
resurfacing.


# 35b3312b 10-Jul-2015 Alex Dowad <alexinbeijing@gmail.com>

Build process uses script to add CFI directives to x86 asm

Some functions implemented in asm need to use EBP for purposes other
than acting as a frame pointer. (Notably, it is used for the 6th
argument to syscalls with 6 arguments.) Without frame pointers, GDB
can only show backtraces if it gets CFI information from a
.debug_frame or .eh_frame ELF section.

Rather than littering our asm with ugly .cfi directives, use an awk
script to insert them in the right places during the build process, so
GDB can keep track of where the current stack frame is relative to the
stack pointer. This means GDB can produce beautiful stack traces at
any given point when single-stepping through asm functions.

Additionally, when registers are saved on the stack and later
overwritten, emit ..cfi directives so GDB will know where they were
saved relative to the stack pointer. This way, when you look back up
the stack from within an asm function, you can still reliably print
the values of local variables in the caller.

If this awk script were to understand every possible wild and crazy
contortion that an asm programmer can do with the stack and registers,
and always emit the exact ..cfi directives needed for GDB to know what
the register values were in the preceding stack frame, it would
necessarily be as complex as a full x86 emulator. That way lies
madness.

Hence, we assume that the stack pointer will _only_ ever be adjusted
using push/pop or else add/sub with a constant. We do not attempt to
detect every possible way that a register value could be saved for
later use, just the simple and common ways.

Thanks to Szabolcs Nagy for suggesting numerous improvements to this
code.


# fb58545f 28-Jun-2015 Shiz <hi@shiz.me>

add musl-clang, a wrapper for system clang installs

musl-clang allows the user to compile musl-powered programs using their
already existent clang install, without the need of a special cross compiler.
it achieves this by wrapping around both the system clang install and the
linker and passing them special flags to re-target musl at runtime.
it does only affect invocations done through the special musl-clang wrapper
script, so that the user setup remains fully intact otherwise.

the clang wrapper consists of the compiler frontend wrapper script,
musl-clang, and the linker wrapper script, ld.musl-clang.
musl-clang makes sure clang invokes ld.musl-clang to link objects; neither
script needs to be in PATH for the wrapper to work.


# b3cd7d13 28-Jun-2015 Shiz <hi@shiz.me>

build: overhaul wrapper script system for multiple wrapper support

this overhauls part of the build system in order to support multiple
toolchain wrapper scripts, as opposed to solely the musl-gcc wrapper as
before. it thereby replaces --enable-gcc-wrapper with --enable-wrapper=...,
which has the options 'auto' (the default, detect whether to use wrappers),
'all' (build and install all wrappers), 'no' (don't build any) and finally
the options named after the individual compiler scripts (currently only
'gcc' is available) to build and install only that wrapper.
the old --enable-gcc-wrapper is removed from --help, but still available.

it also modifies the wrappers to use the C compiler specified to the build
system as 'inner' compiler, when applicable. as wrapper detection works by
probing this compiler, it may not work with any other.


# 585ba14d 03-Jun-2015 Rich Felker <dalias@aerifal.cx>

add additional Makefile dependency rules for rcrt1.o PIE start file


# dc031ee0 26-May-2015 Rich Felker <dalias@aerifal.cx>

add rcrt1 start file for fully static-linked PIE

static-linked PIE files need startup code to relocate themselves, much
like the dynamic linker does. rcrt1.c reuses the code in dlstart.c,
stage 1 of the dynamic linker, which in turn reuses crt_arch.h, to
achieve static PIE with no new code. only relative relocations are
supported.

existing toolchains that don't yet support static PIE directly can be
repurposed by passing "-shared -Wl,-Bstatic -Wl,-Bsymbolic" instead of
"-static -pie" and substituting rcrt1.o in place of crt1.o.

all libraries being linked must be built as PIC/PIE; TEXTRELs are not
supported at this time.


# ed0c8249 26-May-2015 Rich Felker <dalias@aerifal.cx>

fix incorrect application of visibility to Scrt1.o

commit de2b67f8d41e08caa56bf6540277f6561edb647f attempted to avoid
having vis.h affect crt files, but the Makefile variable used,
CRT_LIBS, refers to the final output copies in the lib directory, not
the copies in the crt build directory, and thus the -DCRT was not
applied.

while unlikely to be noticed, this regression probably broke
production of PIE executables whose main functions are not in the
executable but rather a shared library.


# f109781c 23-Apr-2015 Rich Felker <dalias@aerifal.cx>

add dependency of dlstart.lo on crt_arch.h to Makefile


# de2b67f8 19-Apr-2015 Rich Felker <dalias@aerifal.cx>

add optional global visibility override

this is implemented via the build system and does not affect source
files. the idea is to use protected or hidden visibility to prevent
the compiler from pessimizing function calls within a shared (or
position-independent static) libc in the form of overhead setting up
for a call through the PLT. the ld-time symbol binding via the
-Bsymbolic-functions option already optimized out the PLT itself, but
not the code in the caller needed to support a call through the PLT.
on some archs this overhead can be substantial; on others it's
trivial.


# 1ef849c6 13-Apr-2015 Rich Felker <dalias@aerifal.cx>

allow libc itself to be built with stack protector enabled

this was already essentially possible as a result of the previous
commits changing the dynamic linker/thread pointer bootstrap process.
this commit mainly adds build system infrastructure:

configure no longer attempts to disable stack protector. instead it
simply determines how so the makefile can disable stack protector for
a few translation units used during early startup.

stack protector is also disabled for memcpy and memset since compilers
(incorrectly) generate calls to them on some archs to implement
struct initialization and assignment, and such calls may creep into
early initialization.

no explicit attempt to enable stack protector is made by configure at
this time; any stack protector option supported by the compiler can be
passed to configure in CFLAGS, and if the compiler uses stack
protector by default, this default is respected.


# f3ddd173 13-Apr-2015 Rich Felker <dalias@aerifal.cx>

dynamic linker bootstrap overhaul

this overhaul further reduces the amount of arch-specific code needed
by the dynamic linker and removes a number of assumptions, including:

- that symbolic function references inside libc are bound at link time
via the linker option -Bsymbolic-functions.

- that libc functions used by the dynamic linker do not require
access to data symbols.

- that static/internal function calls and data accesses can be made
without performing any relocations, or that arch-specific startup
code handled any such relocations needed.

removing these assumptions paves the way for allowing libc.so itself
to be built with stack protector (among other things), and is achieved
by a three-stage bootstrap process:

1. relative relocations are processed with a flat function.
2. symbolic relocations are processed with no external calls/data.
3. main program and dependency libs are processed with a
fully-functional libc/ldso.

reduction in arch-specific code is achived through the following:

- crt_arch.h, used for generating crt1.o, now provides the entry point
for the dynamic linker too.

- asm is no longer responsible for skipping the beginning of argv[]
when ldso is invoked as a command.

- the functionality previously provided by __reloc_self for heavily
GOT-dependent RISC archs is now the arch-agnostic stage-1.

- arch-specific relocation type codes are mapped directly as macros
rather than via an inline translation function/switch statement.


# 048a4e72 26-Aug-2014 Adrian Danis <Adrian.Danis@nicta.com.au>

Port muslc to seL4 build system and environment. Defines custom 'seL4' architectures for ARM and i386


# f8071071 25-Jun-2014 Rich Felker <dalias@aerifal.cx>

add tarball-producing targets to Makefile for ease of release

my old, out-of-tree release script that performed a clone rather than
using git archive checked the VERSION file to make sure that it
matched before doing a release. I believe there should be a way to do
the same with git commands (without resorting to checking out the
desired tag) but I have not yet found a way, so care should be taken
when using these targets that the correctness of the VERSION file is
not overlooked.


# 3fa2eb2a 19-Jun-2014 Rich Felker <dalias@aerifal.cx>

rename dynamic linker entry point from _start to _dlstart

the main motivation for this change is to aid in debugging. since the
main program's entry point is also named _start, it was difficult to
set breakpoints or quickly identify which _start execution stopped in.


# ae71a43b 04-Dec-2013 Rich Felker <dalias@aerifal.cx>

remove dependency of version.h on .git/* to avoid errors

the wildcard function in GNU make includes dangling symlinks; if any
exist under the .git directory, they would get added as dependencies,
causing make to exit with an error due to lacking a rule to build the
missing file.

as far as I can tell, git operations which should force version.h to
be rebuilt must all touch the mtime of the top-level .git directory.


# 179ab5a5 01-Dec-2013 Rich Felker <dalias@aerifal.cx>

add infrastructure to record and report the version of libc.so

this is still experimental and subject to change. for git checkouts,
an attempt is made to record the exact revision to aid in bug reports
and debugging. no version information is recorded in the static libc.a
or binaries it's linked into.


# 9ff8ed46 31-Aug-2013 Rich Felker <dalias@aerifal.cx>

fix regression in creation of ldso symlink

DESTDIR was wrongly included in the symlink contents.


# 4681aae2 18-Aug-2013 Rich Felker <dalias@aerifal.cx>

re-add logic for ignoring failure of ld.so symlink installation

this was inadvertently removed when switching to the new install.sh.


# e678fc6f 17-Aug-2013 Rich Felker <dalias@aerifal.cx>

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.


# 82fa6b43 16-Aug-2013 Rich Felker <dalias@aerifal.cx>

fix atomicity and other issues installing dynamic linker symlink

ln -sf is non-atomic; it unlinks the destination first. instead, make
a temporary link and rename it into place.

this commit also fixes some of the dependency tracking behavior for
the link. depending on the directory it's to be installed in is not
reasonable; it causes a new link to be attempted if the library
directory has been modified, but does not attempt to make a new link
just because libc has been updated. instead, depend on the target to
be linked to. this will ensure that, if prefix has changed but
syslibdir has not, the link will be updated to point to the new
prefix.


# fb72a97d 14-Aug-2013 Rich Felker <dalias@aerifal.cx>

rework makefile subarch logic to allow shared files

instead of subarchs getting their own .s files which are used directly
by the makefile to replace the .c file, they now must provide a .sub
file whose contents are a pathname, relative to the location of the
.sub file, which will substitute for the .c file. essentially these
files are acting as symbolic links, but implemented as text files.


# 804e9940 11-Aug-2013 Rich Felker <dalias@aerifal.cx>

add subarch asm support for PIC objects/shared libc

this rule was omitted in previous subarch asm commit


# 90d77722 11-Aug-2013 Rich Felker <dalias@aerifal.cx>

allow subarch-specific asm, including asm specific to the default

the default subarch is the one whose full name is just the base arch
name, with no suffixes. normally, either the asm in the default
subarch is suitable for all subarch variants, or separate asm is
mandatory for each variant. however, in the case of asm which is
purely for optimization purposes, it's possible to have asm that only
works (or only performs well) on the default subarch, and not any othe
the other variants. thus, I have added a mechanism to give a name to
the default variant, for example "armel" for the default,
little-endian arm. further such default-subarch names can be added in
the future as needed.


# 4a1f55e9 01-Aug-2013 Rich Felker <dalias@aerifal.cx>

work around gcc 4.8's generation of self-referential mem* functions at -O3


# c5e34dab 25-Jul-2013 Rich Felker <dalias@aerifal.cx>

new mostly-C crt1 implementation

the only immediate effect of this commit is enabling PIE support on
some archs that did not previously have any Scrt1.s, since the
existing asm files for crt1 override this C code. so some of the
crt_arch.h files committed are only there for the sake of documenting
what their archs "would do" if they used the new C-based crt1.

the expectation is that new archs should use this new system rather
than using heavy asm for crt1. aside from being easier and less
error-prone, it also ensures that PIE support is available immediately
(since Scrt1.o is generated from the same C source, using -fPIC)
rather than having to be added as an afterthought in the porting
process.


# a80847d8 22-Jul-2013 Rich Felker <dalias@aerifal.cx>

enhance build process to allow selective -O3 optimization

the motivation for this patch is that the vast majority of libc is
code that does not benefit at all from optimizations, but that certain
components like string/memory operations can be major performance
bottlenecks.

at the same time, the old -falign-*=1 options are removed, since they
were only beneficial for avoiding bloat when global -O3 was used, and
in that case, they may have prevented some of the performance gains.

to be the most useful, this patch will need further tuning. in
particular, research is needed to determine which components should be
built with -O3 by default, and it may be desirable to remove the
hard-coded -O3 and instead allow more customization of the
optimization level used for selected modules.


# 9448b051 22-Jul-2013 Rich Felker <dalias@aerifal.cx>

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


# 3e7f186e 18-Jul-2013 Rich Felker <dalias@aerifal.cx>

add build system support for arch endian & float abi variants


# d66ab4f1 01-Jul-2013 Rich Felker <dalias@aerifal.cx>

fix Makefile so "make install" works before include/bits symlink exists

previously, determination of the list of header files for installation
depended on the include/bits symlink (to the arch-specific files)
already having been created. in other words, running "make install"
immediately after configure without first running "make" caused the
bits headers not to be installed.

the solution I have applied is to pull the list of headers directly
from arch/$(ARCH)/bits rather than include/bits, and likewise to
install directly from arch/$(ARCH)/bits rather than via the symlink.

at this point, the only purpose served by keeping the symlink around
is that it enables use of the in-tree headers and libs directly via -I
and -L, which can be useful when testing against a new version of the
library before installing it. on the other hand, removing the bits
symlink would be beneficial if we ever want to support building
multiple archs in the same source tree.


# dfdc337b 09-Mar-2013 Rich Felker <dalias@aerifal.cx>

remove soname from libc.so/ld-musl

it serves no purpose (binaries linked against musl as -lc/libc.so
automatically get the right DT_NEEDED value of libc.so) and causes
ldconfig to misbehave (making a symlink to ld-musl named libc.so in
/lib). ldconfig is not used on pure musl systems, but if ld-musl is
installed on a system where it's not the primary libc, this will
pollute the system /lib with a symlink to musl named libc.so, which
should NOT exist and could cause problems linking native apps. also,
the existence of the soname caused spurious warnings from ldconfig
when /lib and /usr/lib were the same physical directory.


# 158f721a 05-Feb-2013 rofl0r <retnyg@gmx.net>

Makefile: make it possible to build arch specific C files


# 0b3e2257 21-Sep-2012 Rich Felker <dalias@aerifal.cx>

offer REALGCC variable to configure musl-gcc wrapper at runtime

this is useful when the underlying gcc is already a wrapper, which is
the case at least on some uclibc-based system images. it's also useful
for running an older/newer/nondefault version of gcc.


# 9f74574f 14-Sep-2012 Rich Felker <dalias@aerifal.cx>

remove forced -O3 from shared library CFLAGS

I originally added -O3 for shared libraries to counteract very bad
behavior by GCC when building PIC code: it insists on reloading the
GOT register in static functions that need it, even if the address of
the function is never leaked from the translation unit and all local
callers of the function have already loaded the GOT register. this
measurably degrades performance in a few key areas like malloc. the
inlining done at -O3 avoids the issue, but that's really not a good
reason for overriding the user's choice of optimization level.


# 07809363 17-Aug-2012 Rich Felker <dalias@aerifal.cx>

split up installation target

patch by Luca Barbato (lu_zero)


# d0437801 04-Aug-2012 Rich Felker <dalias@aerifal.cx>

make dynlink.lo depend on reloc.h in makefile

this is mainly a development convenience but will also ensure users
building from latest git always get up-to-date arch-specific dynamic
linker code without having to "make clean".


# 1b23145e 02-Aug-2012 Rich Felker <dalias@aerifal.cx>

abstract out compiler runtime library for linking libc.so

this allows config.mak to override the default -lgcc for building with
other compilers such as pcc/clang/etc.


# fcaec912 11-Jul-2012 Rich Felker <dalias@aerifal.cx>

changes to kernel sigaction struct handling in preparation for mips port


# f8e054f9 04-May-2012 Rich Felker <dalias@aerifal.cx>

improve the build rules for installing /lib/ld-musl-$ARCH.so

these new rules should avoid spurious error messages when the
directory (usually /lib) and the dynamic linker symlink already exist,
and minimize the spam when they can't be created.


# e765239f 03-May-2012 Rich Felker <dalias@aerifal.cx>

make all .o files depend on *_impl.h and libc.h

hopefully the annoyance of this will be minimal. these files all
define internal interfaces which can change at any time; if different
modules are using different versions of the interfaces, the library
will badly break. ideally we would scan and add the dependency only
for C files that actually reference the affected interfaces, but for
now, err on the side of caution and force a rebuild of everything if
any of them have changed.

this commit is in preparation for the upcoming ssp overhaul commit,
which will change internals of the pthread struct.


# 83023d1b 02-May-2012 Rich Felker <dalias@aerifal.cx>

PIE support for i386


# d76eafcb 01-May-2012 Rich Felker <dalias@aerifal.cx>

reorganize Makefile to support "least surprise" config/make semantics

the major change here is that CFLAGS is now a variable that can be
changed entirely under user control, without causing essential flags
to be lost. previously, "CFLAGS += ..." was valid in config.mak, but
using "CFLAGS = ..." in config.mak would have badly broken the build
process unless the user took care to copy the necessary flags out of
the main Makefile.

I have also added a distclean target that removes config.mak.


# d86d2829 01-May-2012 Rich Felker <dalias@aerifal.cx>

remove objcopy --weaken from the makefile

as far as I can tell, it's not useful and never way. I wrote it way
back under the assumption that non-weak symbols in the POSIX or
extension namespace could conflict with legitimate uses of the same
symbol name in the main program or other libraries, but that does not
seem to be the case.


# 58f430c1 22-Apr-2012 Rich Felker <dalias@aerifal.cx>

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.


# 523a3ab1 16-Mar-2012 Rich Felker <dalias@aerifal.cx>

don't fail on inability to install dynamic linker (e.g. if not root)


# 15d143b5 29-Feb-2012 Rich Felker <dalias@aerifal.cx>

search internal headers first

this is necessitated by the ugly <syscall.h> just added


# 3c870263 17-Feb-2012 Rich Felker <dalias@aerifal.cx>

two fixes for "make install" handling of shared libs

1. don't try to install (and thus build) shared libs when they were
disabled in config.mak

2. ensure that the path for the dynamic linker exists before
attempting to install it.


# 8d54681f 28-Jun-2011 Rich Felker <dalias@aerifal.cx>

fix a few bugs from last dynamic linking build system commit

some cruft was left and DESTDIR was not being used correctly.


# 207c45d7 27-Jun-2011 Rich Felker <dalias@aerifal.cx>

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.


# e0b0ff15 24-Jun-2011 Rich Felker <dalias@aerifal.cx>

use soname in ld-musl.so to prevent filename appearing in DT_NEEDEDs


# a654b024 24-Jun-2011 Rich Felker <dalias@aerifal.cx>

use symlink rather than bogus linker script for libc.so

the linker script caused a bogus DT_NEEDED entry


# ec05a0b0 23-Jun-2011 Rich Felker <dalias@aerifal.cx>

adapt build/install/gcc-wrapper systems for dynamic linking support


# 41d51836 24-Feb-2011 Rich Felker <dalias@aerifal.cx>

various changes in preparation for dynamic linking support

prefer using visibility=hidden for __libc internal data, rather than
an accessor function, if the compiler has visibility.

optimize with -O3 for PIC targets (shared library). without heavy
inlining, reloading the GOT register in small functions kills
performance. 20-30% size increase for a single libc.so is not a big
deal, compared to comparaible size increase in every static binaries.

use -Bsymbolic-functions, not -Bsymbolic. global variables are subject
to COPY relocations, and thus binding their addresses in the library
at link time will cause library functions to read the wrong (original)
copies instead of the copies made in the main program's bss section.

add entry point, _start, for dynamic linker.


# 127ab575 17-Feb-2011 Rich Felker <dalias@aerifal.cx>

avoid deleting the lib/empty file


# 4fd15956 17-Feb-2011 Rich Felker <dalias@aerifal.cx>

new solution for empty lib dir (old one had some problems)


# a36164c4 17-Feb-2011 Rich Felker <dalias@aerifal.cx>

improve Makefile handling of git checkouts with missing lib/ and config.mak


# 7b2dd223 15-Feb-2011 Rich Felker <dalias@aerifal.cx>

finish unifying thread register handling in preparation for porting


# 1355fdca 14-Feb-2011 Rich Felker <dalias@aerifal.cx>

preparing build system to handle ports - step 1


# 6027201e 13-Feb-2011 Rich Felker <dalias@aerifal.cx>

ensure that musl is compiled as C99 code & XSI option is available in headers


# 0b44a031 11-Feb-2011 Rich Felker <dalias@aerifal.cx>

initial check-in, version 0.5.0