about summary refs log tree commit diff
path: root/arch/microblaze/bits
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2013-05-23 14:31:02 -0400
committerRich Felker <dalias@aerifal.cx>2013-05-23 14:31:02 -0400
commit05453b37fc0343e53bc7f332047e901b3e1abb84 (patch)
tree46aec81077cc8062cb3a63e7a6504d9498bb1d25 /arch/microblaze/bits
parent1e5eb73545ca6cfe8b918798835aaf6e07af5beb (diff)
downloadmusl-05453b37fc0343e53bc7f332047e901b3e1abb84.tar.gz
musl-05453b37fc0343e53bc7f332047e901b3e1abb84.tar.xz
musl-05453b37fc0343e53bc7f332047e901b3e1abb84.zip
fix overflow behavior of clock() function
per Austin Group interpretation for issue #686, which cites the
requirements of ISO C, clock() cannot wrap. if the result is not
representable, it must return (clock_t)-1. in addition, the old code
was performing wrapping via signed overflow and thus invoking
undefined behavior.

since it seems impossible to accurately check for overflow with the
old times()-based fallback code, I have simply dropped the fallback
code for now, thus always returning -1 on ancient systems. if there's
a demand for making it work and somebody comes up with a way, it could
be reinstated, but the clock() function is essentially useless on
32-bit system anyway (it overflows in less than an hour).

it should be noted that I used LONG_MAX rather than ULONG_MAX, despite
32-bit archs using an unsigned type for clock_t. this discrepency with
the glibc/LSB type definitions will be fixed now; since wrapping of
clock_t is no longer supported, there's no use in it being unsigned.
Diffstat (limited to 'arch/microblaze/bits')
0 files changed, 0 insertions, 0 deletions