summaryrefslogtreecommitdiff
path: root/gnu/egcs
AgeCommit message (Collapse)Author
2004-08-08Make sure that format variable is not a variable sized array correctlyAnil Madhavapeddy
when doing bounds checking (bug revealed by mmap malloc). Noticed by krause@, tested otto@
2004-07-28In the never-ending saga of getting gcc to work reliably on m88k, today'sMiod Vallat
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?).
2004-07-25Always build a stack frame when profiling. Otherwise profiling would onlyMiod Vallat
work for code compiled at -O0...
2004-07-21In builtin_saveregs(), try to save registers with double store instructions,Miod Vallat
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).
2004-07-19In builtin_saveregs(), do not systematically allocate 8 words on the stackMiod Vallat
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.
2004-07-17Minor cleanups (remove duplicated extern lines, useMiod Vallat
current_function_{stdarg,varargs} instead of homegrown implementation, etc. No functional change.
2004-07-13switch sparc to setjmp/longjmp exceptions as DWARF2 handling is not present.Peter Valchev
fixes C++ exceptions. this relies on an earlier libstdc++ bump
2004-07-13bump these again, depending on gcc2/gcc3 a different library is installedDale Rahn
and they have different major numbers to prevent collision.
2004-07-13errno changes, lib major version bumps, and general flag dayMarco S Hyman
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
2004-07-13A better fix for the m68k optimize_reg_copy_3() problem.Miod Vallat
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.
2004-07-12Oops, adjust for __va_list size increase.Miod Vallat
2004-07-04Disable optimize_reg_copy_3() on m68k platforms.Miod Vallat
This is a workaround for lines 1055-1057 of tcp_input.c being miscompiled, though the problem looks like missing use/clobber qualifiers in the extendplussidi insn, rather than a specific optimize_reg_copy_3() issue. A proper fix may be devised in the future, in the meantime this allows m68k platforms to be back in track.
2004-06-15Use gen_rtx_REG and gen_rtx_MEM instead of gen_rtx(REG,..) and gen_rtx(MEM,..).Miod Vallat
No functional change, it's just faster.
2004-06-12Revert 1.10 - there are still bad interactions between block_move_no_loop()Miod Vallat
and the reload phase when compiling complex code, and the fix is non-trivial.
2004-06-10Typos in option descriptions; fixed in gcc 3.Miod Vallat
2004-06-09The GO_IF_LEGITIMATE_ADDRESS fix in m88k.h, as well as all the FUNCTION_ARGMiod Vallat
and FUNCTION_ARG_ADVANCE fixes in m88k.c, allow the optimized bcopy sequences to be reliable again, so enable them back.
2004-06-09In FUNCTION_ARG_ADVANCE(), do not pad the register position counter if theMiod Vallat
parameter is going to hit the stack.
2004-06-09More meaningful formulation of the __va_stk initialization inMiod Vallat
__builtin_saveregs(); no functional change.
2004-06-03Make sure libobjc is self-contained on vax, so that .m programs can link.Miod Vallat
ok deraadt@
2004-05-19When passing a variable of 32 bytes or larger, as argument to a function,Miod Vallat
pass all the subsequent arguments on the stack. This is necessary for proper varargs operation, if used.
2004-05-19In __builtin_saveregs(), initialize __va_stk to a correct value.Miod Vallat
2004-05-17Make FUNCTION_ARG_ADVANCE() really match FUNCTION_ARG() register usage.Miod Vallat
2004-05-04Do not disable -fcaller-saves anymore.Miod Vallat
2004-05-04Backport a fix from gcc 3 (revision 1.32):Miod Vallat
* caller-save.c (mark_referenced_regs): Mark partially-overwritten multi-word registers. This problem apparently only affected m88k, as far as OpenBSD is concerned.
2004-04-21Add luna88k related directories and information to the build infrastructure.Miod Vallat
ok deraadt@, millert@, krw@ - mdoc ok jmc@
2004-04-19fix mysql bug: http://bugs.mysql.com/bug.php?id=1442Hiroaki Etoh
changed the order of array relocation with the depth first order of variable sco pe. ok pvalchev@
2004-04-08In GO_IF_LREGITIMATE_ADDRESS(), use RTX_OK_FOR_BASE_P() to check for aMiod Vallat
valid base register for indexed addressing, rather than providing an incomplete inline version. This allows constructs such as (plus:SI (reg:SI (subreg:SI (reg:DI 1)))) to properly pass through the reload phase if optimization is enabled. Such a construct can be generated with buf[index + index2] = value; if either index or index2 are long long. Fixes the ICE in zsh Src/Zle/computil.c.
2004-04-06When optimizing a logical arithmetic operation, which operands are bothMiod Vallat
comparisons using different operators, make sure to generate an insn with the correct mode. This means that constructs like if (c != -1 & i < 9999) and if ((i<=7) | (value != 0)) as found in transfig and teTeX, respectively, will now compile with optimization. Note the single & or | in these constructs - this kind is rare enough for this bug to have remained unnoticed until now...
2004-03-19Disable caller-save (which is enabled at -O2 or -Os) as it suffers from aMiod Vallat
few bugs in the 2.95 codebase, one of them being fatal to m88k. A real fix will come after 3.5. ok deraadt@
2004-02-27Teach gcc the proper "set" syntax for __attribute__ ((alias)) to workMiod Vallat
on mvme88k. ok deraadt@ espie@
2004-02-21kill old copies of gcc-localMarc Espie
2004-02-21zap cccp.1, install phantom info.Marc Espie
ok theo
2004-01-23USE_GCC3 switch, now that propolice is in.Marc Espie
2004-01-22to fix the issue "missing return at end of function and ProPolice", ↵Hiroaki Etoh
calculate_can_reach_end skips the NOTE_INSN_FUNCTION_END with _ssp_ label to the original NOTE_INSN_FUNCTION_END. ok otto
2004-01-15extra target to make sure tconfig.h is rebuilt, to use with libobjc.Marc Espie
2004-01-12don't add -lm -lstdc++ if -shared, consistent with gcc -shared which doesn'tMarc Espie
link libc.
2004-01-04rename BUGS section to CAVEATS more appropriately; ok avsm & othersPeter Valchev
2003-12-28Document kprintf %: removal here too; anilMiod Vallat
2003-12-21Kill non-standard kernel printf %: braindead extension for good.Miod Vallat
ok markus@ drahn@
2003-12-03HOST_CFLAGS need to find libiberty too, even on vax!Marc Espie
ok deraadt@
2003-11-25Protect against ARRAY_SIZE redefinitionMarc Espie
2003-11-24bye, bye, they moved.Marc Espie
(all these changes were okay'ed millert@, btw)
2003-11-24Switch to using libiberty in new location.Marc Espie
Disable building of cxxfilt in gcc, build it from its own directory.
2003-10-31add pegasos to config.guess matchesDale Rahn
2003-10-07toplev.c, flags.h: add -fstack-protector-all option to generate protection ↵Hiroaki Etoh
instruments for every functions. ok pvalchev@
2003-10-07flag_stack_protection enables to genereate protecting instruments for every ↵Hiroaki Etoh
functions. ok pvalchev@
2003-10-07rtl_epilogue: fix pp warning message trouble at -Wmissing-noreturn.Hiroaki Etoh
ok pvalchev@
2003-10-07copy_args_for_protection: fix the problem that move_arg_location may corrupt ↵Hiroaki Etoh
the contents of DECL_RTL (parms). ok pvalchev@
2003-10-06This is one of these eerie moments when you realize that a significant partMiod Vallat
of your beliefs are wrong. In this case, trust in gcc. When computing the address of a field in a structure on stack, and: - the offset of the structure relative to the stack pointer and - the offset of the field relative to the structure have no _bits_ in common (for example, accessing field at structure(8) with the structure at sp(64)), triggers a gcc optimization in the following improvement: (plus (plus (frame_pointer offset_for_structure) offset_for_field)) changing into (plus (frame_pointer direct_offset_for_field)) In the aforementioned "no bits in common" case, gcc will use (or (plus frame_pointer offset_for_structure) offset_for_field) which is not necessarily correct, depending on the value of the frame pointer... Checking generated assembly code for a kernel compilation pointed out that ALL architectures were affected by this bug (some, such as m88k, alpha and sparc64, being much more affected than others, such as vax and m68k). Our first move was to backport a fix for this found in the gcc 3.x branch, however it relies upon several microbugfixes scattered around, and produced a misbehaving kernel on one particular machine. So what goes in with this commit is just a conservative fix which disables this particular "bitwise or is fun" optimization. Problem discovery and analysis by yours truly. Fix by etoh@ and I. Tested on all supported architectures by various people, including deraadt@, henning@, mickey@, naddy@ and I.
2003-10-01Introduce a new target switch, -mmemcpy (and -mno-memcpy).Miod Vallat
This switch forces block copy operations to always fallback to memcpy() when it is not done by inline load and stores, rather than using the m88k movstr* functions found in libgcc. The name of this option has been choosen after the mips back end, which has a similar option. Right now, this is a no-op since these functions are disabled due to (yet) another gcc bug; but this will help building standalone code, such as the kernel and boot blocks, without having to link against libgcc.