Age | Commit message (Collapse) | Author |
|
Reduces drastically the number of warnings one gets when compiling old
library with newer preprocessor.
tests and okay miod@
|
|
construct, so that it is still written in rtl statements, and part of
it can be put in a delay slot. And the way it's written now, it does not
create bogus uninitialized warnings.
|
|
the two SImode subregs of the DImode destination operand, this confuses
the register life analysis and causes gcc to emit wrong warning about
values not being initialized.
Unfortunately, the fallback logic infers a worse sequence (mov + cmp against
zero + ext of the cmp signedness bit, instead of mov + ext of the sign bit),
which wastes an instruction and a register.
This is hopefully a temporary measure until a nonconfusing flavour of the
fast expansion is devised (preferrably one which does not expose the
optimize_reg_copy_3 big-endian bug as well).
|
|
okay kettenis@, miod@, otto@
|
|
derefs in at least one case and I do not have time to debug this before the
release.
ok deraadt@
|
|
compile current libm. ok martynas@
|
|
unbreaks libm on gcc2
ok miod@ (who created almost the same diff)
|
|
|
|
on some (not in-tree) configurations.
ok espie@ kettenis@
|
|
default logic works better.
|
|
auto declarations which size are not known at compile time.
This flag will eventually be added to the kernel makefiles so that we
can rely on -Wstack-larger-than work.
ok deraadt@ mbalmer@ otto@ marco@
|
|
|
|
* cse.c (cse_end_of_basic_block): Don't return the end of a basi
block reached by a branch if we're not going to actually process
this block
|
|
|
|
clobbered list. Still not enabled by default, there are still bugs in their
usage (perl does not build), but it's much better.
No functional change yet.
|
|
functions which are too greedy in stack variables.
This is intended to be used for kernel compiles, where this warning will
be enabled for a reasonable size (after a few weeks grace period so that
people can upgrade their compiler).
Please note that this warning relies upon md code, and as such is only
available on platforms OpenBSD runs on; also, the stack size being warned
on is only the local variables size, regardless of the ABI stack usage
requirements and the callee-saved registers; which means a function may
be warning-clean yet need more stack space than meets the eye; the
actual size being checked on may change to include these extras in the
future.
|
|
generation issues.
|
|
Approved deraadt@, kettenis@
|
|
with cpp -traditional, but it should be enough for lint.
okay miod@
|
|
who is too shy to commit it.
|
|
|
|
defined in terms of long, not int on all architectures.
|
|
Based on existing bits for FreeBSD 5
|
|
miod@ checked this does not impact builds on old arches.
|
|
from miod@
|
|
gcc 2.95.
tests and okay miod@, marc@.
|
|
921215-1 gcc testsuite.
|
|
ok espie@
|
|
ok kettenis@
|
|
This makes a noticeable performance improvement on 68060, especially for
crypto operations (such as ssh), with basically no loss on 680[234]0.
ok deraadt@
|
|
to build a gcc3 sparc.
(reviewed and accepted upstream)
|
|
|
|
the machine architecture. We now output amd64 instead
of x86_64 as it should be.
ok deraadt@ pvalchev@
|
|
to find each other.
okay niklas@ (`deja-vu')
|
|
"doh! ok!" niklas@ ;-)
|
|
Spotted by espie@
|
|
|
|
|
|
inter-library function calls where the callee would change the GOT register
but not restore it when returning to its caller.
Helps immensely libpthread, as well as dynamically-linked X11 clients.
Fromm gcc 3; tested by matthieu@, nick@ and todd@; ok deraadt@
|
|
|
|
when doing bounds checking (bug revealed by mmap malloc).
Noticed by krause@, tested otto@
|
|
changes address incorrect stack usage, when optimization needs more
nameless temporary values than available registers, and has to save them
on stack.
In some (rare) circumstances, it will compute a stack address _outside_
the current function local storage space, overwriting the caller's stack.
Most of the time, this only affects the "outgoing argument area", which is
harmless if it has not been populated; this explains why it has not been
noticed earlier.
Since I see no easy way to fix this, I decided to go the simpler way of
removing this ougoing argument area. This not only reduces stack usage,
but also makes varargs/stdarg code smaller and faster; also functions which
get their first few arguments in registers, then some on the stack, then
some in registers again, will not allocate stack space for the second
set of arguments passed through registers.
This is an ABI change, we are no longer 88Open compliant (have we ever
been?).
|
|
work for code compiled at -O0...
|
|
knowing that the area we are using is correctly aligned.
Produces smaller and faster code (about 0.8% time decrease in a complete
build, which amounts to roughly 15 minutes).
|
|
for registers if at least one nameless argument is passed through registers;
instead, only allocate as many bytes as necessary.
Slightly reduces stack usage; no ABI change.
|
|
current_function_{stdarg,varargs} instead of homegrown implementation, etc.
No functional change.
|
|
fixes C++ exceptions.
this relies on an earlier libstdc++ bump
|
|
and they have different major numbers to prevent collision.
|
|
To build you must:
cd /usr/src && make obj && make includes
cd lib/libc && make depend && make && NOMAN=1 sudo make install
cd /usr/src && make build
|
|
The problem really only arises when optimize_reg_copy_3() attempts to
merge a load which fits in a register and a load which does not fit - in
the m68k case, merging an int32_t foo and (int64_t)foo two lines later.
In this case, and only if the backend provides its own expansion of the
extendsidi2 insn (usually for performance and code size reasons) as
embedded assembly statements but not rtl operations, then gcc at this
point will ``fail to realize'' that when sign-extending (or
zero-extending) the value of rN into rN and r(N+1), the value of rN is
not preserved on big-endian architectures, and the optimization will
produce bad code.
Of all the OpenBSD-supported platforms, arm and m68k are the only
affected; but further optimizations in gcc3 (on arm) apparently neuter
this bug, which I have been unable to reproduce in an arm build with
gcc3.
This commit works around the problem by preventing expansions larger
than the width of a general register, on m68k only. Other platforms are
not affected.
|