musl
10 years agoMerge branch 'master' of git://git.etalabs.net/musl
nsz [Mon, 19 Mar 2012 22:55:06 +0000 (23:55 +0100)]
Merge branch 'master' of git://git.etalabs.net/musl

10 years agocode cleanup of named constants
nsz [Mon, 19 Mar 2012 22:41:19 +0000 (23:41 +0100)]
code cleanup of named constants

zero, one, two, half are replaced by const literals
The policy was to use the f suffix for float consts (1.0f),
but don't use suffix for long double consts (these consts
can be exactly represented as double).

10 years agofix remainder*.c: remove useless long double cast
nsz [Mon, 19 Mar 2012 22:39:47 +0000 (23:39 +0100)]
fix remainder*.c: remove useless long double cast

10 years agodon't try to create non-standard denormalization signal
nsz [Mon, 19 Mar 2012 22:30:45 +0000 (23:30 +0100)]
don't try to create non-standard denormalization signal

Underflow exception is only raised when the result is
invalid, but fmod is always exact. x87 has a denormalization
exception, but that's nonstandard. And the superflous *1.0
will be optimized away by any compiler that does not honor
signaling nans.

10 years agoMerge remote branch 'nsz/master'
Rich Felker [Mon, 19 Mar 2012 22:30:35 +0000 (18:30 -0400)]
Merge remote branch 'nsz/master'

10 years agonew modff.c code, fix nan handling in modfl
nsz [Mon, 19 Mar 2012 22:27:45 +0000 (23:27 +0100)]
new modff.c code, fix nan handling in modfl

10 years agouse scalbn or *2.0 instead of ldexp, fix fmal
nsz [Mon, 19 Mar 2012 21:57:58 +0000 (22:57 +0100)]
use scalbn or *2.0 instead of ldexp, fix fmal

Some code assumed ldexp(x, 1) is faster than 2.0*x,
but ldexp is a wrapper around scalbn which uses
multiplications inside, so this optimization is
wrong.

This commit also fixes fmal which accidentally
used ldexp instead of ldexpl loosing precision.

There are various additional changes from the
work-in-progress const cleanups.

10 years agofix long double const workaround in cbrtl
nsz [Mon, 19 Mar 2012 21:49:03 +0000 (22:49 +0100)]
fix long double const workaround in cbrtl

10 years agodon't inline __rem_pio2l so the code size is smaller
nsz [Mon, 19 Mar 2012 18:26:31 +0000 (19:26 +0100)]
don't inline __rem_pio2l so the code size is smaller

10 years agominor fix in __tanl (get sign properly)
nsz [Mon, 19 Mar 2012 18:14:32 +0000 (19:14 +0100)]
minor fix in __tanl (get sign properly)

10 years agobug fix: wrong opcode for writing long long
Rich Felker [Mon, 19 Mar 2012 17:58:47 +0000 (13:58 -0400)]
bug fix: wrong opcode for writing long long

10 years agoremove long double const workarounds
nsz [Mon, 19 Mar 2012 17:52:17 +0000 (18:52 +0100)]
remove long double const workarounds

Some long double consts were stored in two doubles as a workaround
for x86_64 and i386 with the following comment:
/* Long double constants are slow on these arches, and broken on i386. */
This is most likely old gcc bug related to the default x87 fpu
precision setting (it's double instead of double extended on BSD).

10 years agofix erfl wrapper for long double==double case
nsz [Mon, 19 Mar 2012 17:06:06 +0000 (18:06 +0100)]
fix erfl wrapper for long double==double case

10 years agoasm for log1p
Rich Felker [Mon, 19 Mar 2012 14:59:41 +0000 (10:59 -0400)]
asm for log1p

10 years agoasm for log2
Rich Felker [Mon, 19 Mar 2012 14:43:28 +0000 (10:43 -0400)]
asm for log2

10 years agoasm for remquo
Rich Felker [Mon, 19 Mar 2012 13:42:51 +0000 (09:42 -0400)]
asm for remquo

this could perhaps use some additional testing for corner cases, but
it seems to be correct.

10 years agooptimize exponential asm for i386
Rich Felker [Mon, 19 Mar 2012 13:00:30 +0000 (09:00 -0400)]
optimize exponential asm for i386

up to 30% faster exp2 by avoiding slow frndint and fscale functions.
expm1 also takes a much more direct path for small arguments (the
expected usage case).

10 years agoMerge remote branch 'nsz/master'
Rich Felker [Mon, 19 Mar 2012 10:28:22 +0000 (06:28 -0400)]
Merge remote branch 'nsz/master'

10 years agofix broken modf family functions
Rich Felker [Mon, 19 Mar 2012 10:22:54 +0000 (06:22 -0400)]
fix broken modf family functions

10 years agoasm for modf functions
Rich Felker [Mon, 19 Mar 2012 09:56:41 +0000 (05:56 -0400)]
asm for modf functions

10 years agosimplify scalbn*.c implementations
nsz [Mon, 19 Mar 2012 09:54:07 +0000 (10:54 +0100)]
simplify scalbn*.c implementations

The old scalbn.c was wrong and slow, the new one is just slow.
(scalbn(0x1p+1023,-2097) should give 0x1p-1074, but the old code gave 0)

10 years agoMerge branch 'master' of git://git.etalabs.net/musl
nsz [Mon, 19 Mar 2012 09:50:42 +0000 (10:50 +0100)]
Merge branch 'master' of git://git.etalabs.net/musl

10 years agoasm for floor/ceil/trunc
Rich Felker [Mon, 19 Mar 2012 09:42:04 +0000 (05:42 -0400)]
asm for floor/ceil/trunc

10 years agoMerge branch 'master' of git://git.etalabs.net/musl
nsz [Mon, 19 Mar 2012 09:20:24 +0000 (10:20 +0100)]
Merge branch 'master' of git://git.etalabs.net/musl

10 years agoasm for scalbn family
Rich Felker [Mon, 19 Mar 2012 09:15:30 +0000 (05:15 -0400)]
asm for scalbn family

unlike some implementations, these functions perform the equivalent of
gcc's -ffloat-store on the result before returning. this is necessary
to raise underflow/overflow/inexact exceptions, perform the correct
rounding with denormals, etc.

10 years agoasm for inverse trig functions
Rich Felker [Mon, 19 Mar 2012 08:56:07 +0000 (04:56 -0400)]
asm for inverse trig functions

unlike trig functions, these are easy to do in asm because they do not
involve (arbitrary-precision) argument reduction. fpatan automatically
takes care of domain issues, and in asin and acos, fsqrt takes care of
them for us.

10 years agoMerge branch 'master' of git://git.etalabs.net/musl
nsz [Mon, 19 Mar 2012 07:01:21 +0000 (08:01 +0100)]
Merge branch 'master' of git://git.etalabs.net/musl

10 years agoasm for log functions
Rich Felker [Mon, 19 Mar 2012 03:50:54 +0000 (23:50 -0400)]
asm for log functions

10 years agofix broken exponential asm
Rich Felker [Mon, 19 Mar 2012 03:17:28 +0000 (23:17 -0400)]
fix broken exponential asm

infinities were getting converted into nans. the new code simply tests
for infinity and replaces it with a large magnitude value of the same
sign.

also, the fcomi instruction is apparently not part of the i387
instruction set, so avoid using it.

10 years agoasm for lrint family on i386
Rich Felker [Mon, 19 Mar 2012 02:05:20 +0000 (22:05 -0400)]
asm for lrint family on i386

10 years agoMerge branch 'master' of git://git.etalabs.net/musl
nsz [Mon, 19 Mar 2012 01:55:31 +0000 (02:55 +0100)]
Merge branch 'master' of git://git.etalabs.net/musl

10 years agoasm exponential functions for i386
Rich Felker [Mon, 19 Mar 2012 01:43:43 +0000 (21:43 -0400)]
asm exponential functions for i386

10 years agoremove unnecessary TODO comments from fma.c
nsz [Mon, 19 Mar 2012 01:05:57 +0000 (02:05 +0100)]
remove unnecessary TODO comments from fma.c

10 years agofmal bug fix: nan input should not raise exception
nsz [Sun, 18 Mar 2012 23:59:16 +0000 (00:59 +0100)]
fmal bug fix: nan input should not raise exception

10 years agoadd fma implementation for x86
nsz [Sun, 18 Mar 2012 23:36:55 +0000 (00:36 +0100)]
add fma implementation for x86

correctly rounded double precision fma using extended
precision arithmetics for ld80 systems (x87)

10 years agoassembly optimizations for fmod/remainder functions
Rich Felker [Sun, 18 Mar 2012 21:09:34 +0000 (17:09 -0400)]
assembly optimizations for fmod/remainder functions

10 years agoasm versions of some simple math functions for i386 and x86_64
Rich Felker [Sun, 18 Mar 2012 20:43:54 +0000 (16:43 -0400)]
asm versions of some simple math functions for i386 and x86_64

these are functions that have direct fpu approaches to implementation
without problematic exception or rounding issues. x86_64 lacks
float/double versions because i'm unfamiliar with the necessary sse
code for performing these operations.

10 years agosimplify lround and llround functions
nsz [Sun, 18 Mar 2012 19:52:33 +0000 (20:52 +0100)]
simplify lround and llround functions

Simple wrappers around round is enough because
spurious inexact exception is allowed.

10 years agomake lrint and llrint functions work without fenv support
nsz [Sun, 18 Mar 2012 19:40:43 +0000 (20:40 +0100)]
make lrint and llrint functions work without fenv support

10 years agofaster lrint and llrint functions
nsz [Sun, 18 Mar 2012 18:27:39 +0000 (19:27 +0100)]
faster lrint and llrint functions

A faster workaround for spurious inexact exceptions
when the result cannot be represented. The old code
actually could be wrong, because gcc reordered the
integer conversion and the exception check.

10 years agofix loads of missing const in new libm, and some global vars (?!) in powl
Rich Felker [Sun, 18 Mar 2012 05:58:28 +0000 (01:58 -0400)]
fix loads of missing const in new libm, and some global vars (?!) in powl

10 years agomove nonstandard gamma() etc. to _GNU_SOURCE only
Rich Felker [Sun, 18 Mar 2012 01:48:48 +0000 (21:48 -0400)]
move nonstandard gamma() etc. to _GNU_SOURCE only

it's not even provided in the library at the moment, but could easily
be provided with weak aliases if desired.

10 years agoc++ seems to want some casts in the float representation-access macros
Rich Felker [Sun, 18 Mar 2012 01:40:10 +0000 (21:40 -0400)]
c++ seems to want some casts in the float representation-access macros

10 years agorelease notes for 0.8.7
Rich Felker [Sun, 18 Mar 2012 00:35:25 +0000 (20:35 -0400)]
release notes for 0.8.7

10 years agotry fixing/optimizing x86_64 fenv exception code
Rich Felker [Sun, 18 Mar 2012 00:10:02 +0000 (20:10 -0400)]
try fixing/optimizing x86_64 fenv exception code

untested; may need followup-fixes.

10 years agooptimize x86 feclearexcept
Rich Felker [Sat, 17 Mar 2012 23:29:00 +0000 (19:29 -0400)]
optimize x86 feclearexcept

if all exception flags will be cleared, we can avoid the expensive
store/reload of the environment and just use the fnclex instruction.

10 years agofix x86_64 fe[gs]etround, analogous to nsz's x86 changes
Rich Felker [Sat, 17 Mar 2012 22:02:20 +0000 (18:02 -0400)]
fix x86_64 fe[gs]etround, analogous to nsz's x86 changes

10 years agominor 387 fenv optimizations
Rich Felker [Sat, 17 Mar 2012 21:49:10 +0000 (17:49 -0400)]
minor 387 fenv optimizations

10 years agoMerge remote branch 'nsz/master'
Rich Felker [Sat, 17 Mar 2012 21:34:30 +0000 (17:34 -0400)]
Merge remote branch 'nsz/master'

10 years agofix i386 fegetround and make fesetround faster
nsz [Sat, 17 Mar 2012 12:46:15 +0000 (13:46 +0100)]
fix i386 fegetround and make fesetround faster

Note that the new fesetround has slightly different semantics:

Storing the floating-point environment with fnstenv makes the
next fldenv (or fldcw) "non-signaling", so unmasked and pending
exceptions does not invoke the exception handler.
(These are rare since exceptions are handled immediately and by
default all exceptions are masked anyway. But if one manually
unmasks an exception in the control word then either sets the
corresponding exception flag in the status word or the execution
of an exception raising floating-point operation gets interrupted
then it may happen).
So the old implementation did not trap in some rare cases
where the new implementation traps.

However POSIX does not specify anything like the x87 exception
handling traps and the fnstenv/fldenv pair is significantly slower
than the fnstcw/fldcw pair (new code is about 5x faster here and
it's dominated by the function call overhead).

10 years agodon't fail on inability to install dynamic linker (e.g. if not root)
Rich Felker [Sat, 17 Mar 2012 04:48:55 +0000 (00:48 -0400)]
don't fail on inability to install dynamic linker (e.g. if not root)

10 years agoone more fenv availability issue: lround
Rich Felker [Sat, 17 Mar 2012 04:02:36 +0000 (00:02 -0400)]
one more fenv availability issue: lround

10 years agomake fma and lrint functions build without full fenv support
Rich Felker [Sat, 17 Mar 2012 03:58:49 +0000 (23:58 -0400)]
make fma and lrint functions build without full fenv support

this is necessary to support archs where fenv is incomplete or
unavailable (presently arm). fma, fmal, and the lrint family should
work perfectly fine with this change; fmaf is slightly broken with
respect to rounding as it depends on non-default rounding modes to do
its work.

10 years agoother side of the signgam namespace fix: use the internal name
Rich Felker [Sat, 17 Mar 2012 01:20:53 +0000 (21:20 -0400)]
other side of the signgam namespace fix: use the internal name

10 years agomake signgam a weak alias for an internal symbol
Rich Felker [Sat, 17 Mar 2012 01:18:48 +0000 (21:18 -0400)]
make signgam a weak alias for an internal symbol

otherwise, the standard C lgamma function will clobber a symbol in the
namespace reserved for the application.

10 years agofix namespace issues for lgamma, etc.
Rich Felker [Sat, 17 Mar 2012 01:16:32 +0000 (21:16 -0400)]
fix namespace issues for lgamma, etc.

standard functions cannot depend on nonstandard symbols

10 years agoMerge remote branch 'nsz/master'
Rich Felker [Sat, 17 Mar 2012 01:01:34 +0000 (21:01 -0400)]
Merge remote branch 'nsz/master'

10 years agoremove junk sincos implementations in preparation to merge nsz's real ones
Rich Felker [Sat, 17 Mar 2012 00:53:05 +0000 (20:53 -0400)]
remove junk sincos implementations in preparation to merge nsz's real ones

10 years agorevert COPYRIGHT file changes in preparation to merge nsz's math branch
Rich Felker [Sat, 17 Mar 2012 00:52:00 +0000 (20:52 -0400)]
revert COPYRIGHT file changes in preparation to merge nsz's math branch

10 years agoupdate copyright status (math library and new year)
Rich Felker [Fri, 16 Mar 2012 23:18:00 +0000 (19:18 -0400)]
update copyright status (math library and new year)

10 years agoremove special nan handling from x86 sqrt asm
Rich Felker [Thu, 15 Mar 2012 23:56:36 +0000 (19:56 -0400)]
remove special nan handling from x86 sqrt asm

a double precision nan, when converted to extended (80-bit) precision,
will never end in 0x400, since the corresponding bits do not exist in
the original double precision value. thus there's no need to waste
time and code size on this check.

10 years agosimplify nan check in sqrt (x86 asm); result of sqrt is never negative
Rich Felker [Thu, 15 Mar 2012 16:16:51 +0000 (12:16 -0400)]
simplify nan check in sqrt (x86 asm); result of sqrt is never negative

10 years agoin math.h make lgamma_r and non-double bessel _GNU_SOURCE only
nsz [Thu, 15 Mar 2012 08:29:53 +0000 (09:29 +0100)]
in math.h make lgamma_r and non-double bessel _GNU_SOURCE only
long double and float bessel functions are no longer xsi extensions

10 years agoefficient sincos based on sin and cos
nsz [Thu, 15 Mar 2012 07:17:28 +0000 (08:17 +0100)]
efficient sincos based on sin and cos

10 years agoimplement sincosf and sincosl functions; add prototypes
Rich Felker [Thu, 15 Mar 2012 06:38:42 +0000 (02:38 -0400)]
implement sincosf and sincosl functions; add prototypes

presumably broken gcc may generate calls to these, and it's said that
ffmpeg makes use of sincosf.

10 years agoavoid changing NaNs in sqrt (x86 asm) to satisfy c99 f.9 recommendation
Rich Felker [Thu, 15 Mar 2012 05:55:54 +0000 (01:55 -0400)]
avoid changing NaNs in sqrt (x86 asm) to satisfy c99 f.9 recommendation

10 years agocorrectly rounded sqrt() asm for x86 (i387)
Rich Felker [Thu, 15 Mar 2012 05:29:03 +0000 (01:29 -0400)]
correctly rounded sqrt() asm for x86 (i387)

the fsqrt opcode is correctly rounded, but only in the fpu's selected
precision mode, which is 80-bit extended precision. to get a correctly
rounded double precision output, we check for the only corner cases
where two-step rounding could give different results than one-step
(extended-precision mantissa ending in 0x400) and adjust the mantissa
slightly in the opposite direction of the rounding which the fpu
already did (reported in the c1 flag of the fpu status word).

this should have near-zero cost in the non-corner cases and at worst
very low cost.

note that in order for sqrt() to get used when compiling with gcc, the
broken, non-conformant builtin sqrt must be disabled.

10 years agocorrect rounding for i387 sqrtf function
Rich Felker [Wed, 14 Mar 2012 02:15:52 +0000 (22:15 -0400)]
correct rounding for i387 sqrtf function

10 years agomath cleanup: use 1.0f instead of 1.0F
nsz [Tue, 13 Mar 2012 20:11:46 +0000 (21:11 +0100)]
math cleanup: use 1.0f instead of 1.0F

10 years agomath cleanup: use 1.0f instead of (float)1.0
nsz [Tue, 13 Mar 2012 19:24:23 +0000 (20:24 +0100)]
math cleanup: use 1.0f instead of (float)1.0

10 years agoremove libm.h includes when math.h and float.h are enough
nsz [Tue, 13 Mar 2012 18:51:14 +0000 (19:51 +0100)]
remove libm.h includes when math.h and float.h are enough

10 years agofix scanf handling of "0" (followed by immediate EOF) with "%x"
Rich Felker [Tue, 13 Mar 2012 16:37:51 +0000 (12:37 -0400)]
fix scanf handling of "0" (followed by immediate EOF) with "%x"

other cases with %x were probably broken too.

I would actually like to go ahead and replace this code in scanf with
calls to the new __intparse framework, but for now this calls for a
quick and unobtrusive fix without the risk of breaking other things.

10 years agoclean up __expo2.c, use a slightly better k constant
nsz [Tue, 13 Mar 2012 15:38:22 +0000 (16:38 +0100)]
clean up __expo2.c, use a slightly better k constant

10 years agofix copyright notice for the math lib
nsz [Tue, 13 Mar 2012 15:06:43 +0000 (16:06 +0100)]
fix copyright notice for the math lib

10 years agoimplement nan, nanf, nanl
Rich Felker [Tue, 13 Mar 2012 05:55:25 +0000 (01:55 -0400)]
implement nan, nanf, nanl

10 years agofirst commit of the new libm!
Rich Felker [Tue, 13 Mar 2012 05:17:53 +0000 (01:17 -0400)]
first commit of the new libm!

thanks to the hard work of Szabolcs Nagy (nsz), identifying the best
(from correctness and license standpoint) implementations from freebsd
and openbsd and cleaning them up! musl should now fully support c99
float and long double math functions, and has near-complete complex
math support. tgmath should also work (fully on gcc-compatible
compilers, and mostly on any c99 compiler).

based largely on commit 0376d44a890fea261506f1fc63833e7a686dca19 from
nsz's libm git repo, with some additions (dummy versions of a few
missing long double complex functions, etc.) by me.

various cleanups still need to be made, including re-adding (if
they're correct) some asm functions that were dropped.

10 years agoadd .gitignore file
Rich Felker [Fri, 9 Mar 2012 08:39:28 +0000 (03:39 -0500)]
add .gitignore file

I've had this around for a long time but somehow it never got
committed.

10 years agofix nan/infinity macros in math.h, etc.
Rich Felker [Sat, 3 Mar 2012 03:35:37 +0000 (22:35 -0500)]
fix nan/infinity macros in math.h, etc.

the previous version not only failed to work in c++, but also failed
to produce constant expressions, making the macros useless as
initializers for objects of static storage duration.

gcc 3.3 and later have builtins for these, which sadly seem to be the
most "portable" solution. the alternative definitions produce
exceptions (for NAN) and compiler warnings (for INFINITY) on newer
versions of gcc.

10 years agofix obscure bug in strtoull reading the highest 16 possible values
Rich Felker [Fri, 2 Mar 2012 17:48:17 +0000 (12:48 -0500)]
fix obscure bug in strtoull reading the highest 16 possible values

10 years agotypo in math.h c version check
Rich Felker [Fri, 2 Mar 2012 16:38:39 +0000 (11:38 -0500)]
typo in math.h c version check

10 years agomake math.h compatibe with c89
Rich Felker [Fri, 2 Mar 2012 05:36:26 +0000 (00:36 -0500)]
make math.h compatibe with c89

10 years agoremove debug cruft that was left in getdate
Rich Felker [Fri, 2 Mar 2012 05:24:49 +0000 (00:24 -0500)]
remove debug cruft that was left in getdate

10 years agofirst try at implementing getdate function
Rich Felker [Fri, 2 Mar 2012 05:24:17 +0000 (00:24 -0500)]
first try at implementing getdate function

10 years agofix bugs in strptime handling of string day/month names, literals
Rich Felker [Fri, 2 Mar 2012 05:23:43 +0000 (00:23 -0500)]
fix bugs in strptime handling of string day/month names, literals

10 years agoimplement a64l and l64a (legacy xsi stuff)
Rich Felker [Fri, 2 Mar 2012 04:43:31 +0000 (23:43 -0500)]
implement a64l and l64a (legacy xsi stuff)

10 years agoadd all missing wchar functions except floating point parsers
Rich Felker [Fri, 2 Mar 2012 04:24:45 +0000 (23:24 -0500)]
add all missing wchar functions except floating point parsers

these are mostly untested and adapted directly from corresponding byte
string functions and similar.

10 years agosupport null buffer argument to getcwd, auto-allocating behavior
Rich Felker [Fri, 2 Mar 2012 03:08:05 +0000 (22:08 -0500)]
support null buffer argument to getcwd, auto-allocating behavior

this is a popular extension some programs depend on, and by using a
temporary buffer and strdup rather than malloc prior to the syscall,
i've avoided the dependency on free and thus minimized the bloat cost
of supporting this feature.

10 years agoadd memory.h, bogus legacy alias for string.h
Rich Felker [Thu, 1 Mar 2012 06:34:58 +0000 (01:34 -0500)]
add memory.h, bogus legacy alias for string.h

10 years agosearch internal headers first
Rich Felker [Thu, 1 Mar 2012 05:21:20 +0000 (00:21 -0500)]
search internal headers first

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

10 years agouse c++-friendly initializers for pthread initializer definitions
Rich Felker [Thu, 1 Mar 2012 03:55:08 +0000 (22:55 -0500)]
use c++-friendly initializers for pthread initializer definitions

these will also avoid obnoxious warnings with gcc -Wbraces.

10 years agoadd <syscall.h> as an alias for <sys/syscall.h>
Rich Felker [Thu, 1 Mar 2012 03:36:06 +0000 (22:36 -0500)]
add <syscall.h> as an alias for <sys/syscall.h>

apparently some broken stuff (libstdc++) needs this.

10 years agoimplement wcsftime function
Rich Felker [Tue, 28 Feb 2012 20:59:01 +0000 (15:59 -0500)]
implement wcsftime function

10 years agorelease notes for 0.8.6
Rich Felker [Tue, 28 Feb 2012 16:56:13 +0000 (11:56 -0500)]
release notes for 0.8.6

10 years agofix pthread_cleanup_pop(1) crash in non-thread-capable, static-linked programs
Rich Felker [Tue, 28 Feb 2012 15:13:35 +0000 (10:13 -0500)]
fix pthread_cleanup_pop(1) crash in non-thread-capable, static-linked programs

10 years agoupdate release notes for 0.8.5
Rich Felker [Tue, 28 Feb 2012 01:12:06 +0000 (20:12 -0500)]
update release notes for 0.8.5

10 years agowork around "signal loses thread pointer" issue with "approach 2"
Rich Felker [Mon, 27 Feb 2012 23:51:02 +0000 (18:51 -0500)]
work around "signal loses thread pointer" issue with "approach 2"

this was discussed on the mailing list and no consensus on the
preferred solution was reached, so in anticipation of a release, i'm
just committing a minimally-invasive solution that avoids the problem
by ensuring that multi-threaded-capable programs will always have
initialized the thread pointer before any signal handler can run.

in the long term we may switch to initializing the thread pointer at
program start time whenever the program has the potential to access
any per-thread data.

10 years agouse __attribute__((const)) on arm __pthread_self function
Rich Felker [Sat, 25 Feb 2012 07:52:18 +0000 (02:52 -0500)]
use __attribute__((const)) on arm __pthread_self function

10 years agoreplace prototype for basename in string.h with non-prototype declaration
Rich Felker [Sat, 25 Feb 2012 04:23:47 +0000 (23:23 -0500)]
replace prototype for basename in string.h with non-prototype declaration

GNU programs may expect the GNU version of basename, which has a
different prototype (argument is const-qualified) and prototype it
themselves too. of course if they're expecting the GNU behavior for
the function, they'll still run into problems, but at least this
eliminates some compile-time failures.

10 years agonew attempt at working around the gcc 3 visibility bug
Rich Felker [Sat, 25 Feb 2012 01:07:21 +0000 (20:07 -0500)]
new attempt at working around the gcc 3 visibility bug

since gcc is failing to generate the necessary ".hidden" directive in
the output asm, generate it explicitly with an __asm__ statement...

10 years agoremove useless attribute visibility from definitions
Rich Felker [Sat, 25 Feb 2012 01:02:42 +0000 (20:02 -0500)]
remove useless attribute visibility from definitions

this was a failed attempt at working around the gcc 3 visibility bug
affecting x86_64. subsequent patch will address it with an ugly but
working hack.