History log of /freebsd-10.1-release/contrib/gcc/function.c
Revision Date Author Comments
(<<< Hide modified files)
(Show modified files >>>)
# 272461 02-Oct-2014 gjb

Copy stable/10@r272459 to releng/10.1 as part of
the 10.1-RELEASE process.

Approved by: re (implicit)
Sponsored by: The FreeBSD Foundation

# 261188 26-Jan-2014 pfg

MFC r260311, r260831:

gcc: Add support for Apple's Block extension

Block objects [1] are a C-level syntactic and runtime feature. They
are similar to standard C functions, but in addition to executable
code they may also contain variable bindings to automatic (stack)
or managed (heap) memory. A block can therefore maintain a set of
state (data) that it can use to impact behavior when executed.

This port is based on Apple's GCC 5646 with some bugfixes from
Apple GCC 5666.3. It has some small differences with the support
in clang, which remains the recommended compiler.

Perhaps the most notable difference is that in GCC __block is not
actually a keyword, but a macro. There may be workaround for this
issue in the future. Other issues can be consulted in the clang
documentation [2]

For better compatiblity with Apple's GCC and llvm-gcc, some related
fixes and features from Apple have been included. Support for the
non-standard nested functions in GCC is now off by default.

No effort was made to update the ObjC support since FreeBSD doesn't
carry ObjC in the base system but some of the code crept in and
was more difficult to remove than to adjust.

References:
[1]
https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Blocks/Articles/00_Introduction.html
[2]
http://clang.llvm.org/compatibility.html#block-variable-initialization

Obtained from: Apple GCC 4.2


# 256281 10-Oct-2013 gjb

Copy head (r256279) to stable/10 as part of the 10.0-RELEASE cycle.

Approved by: re (implicit)
Sponsored by: The FreeBSD Foundation


# 222207 22-May-2011 benl

Fix clang warnings.

Approved by: philip (mentor)


# 171836 14-Aug-2007 kan

Update locally changed files to GCC 4.2.1.

Approved by: re (kensmith)


# 169702 19-May-2007 kan

Merge local changes for -mprofiler-epilogue support.


# 163679 25-Oct-2006 bde

Fixed -mprofiler-epilogue. The garbage collector apparently doesn't
understand that non-local variables can never be collected, and when
it collected the static variable for mexitcount_libfunc, gcc aborted
on the next use of this variable.

This quick fix is to reinitialize the variable on every use and depend
on garbage collection recovering the small amount of memory wasted by
this, and not worry by the small amount of time wasted by this. It
would be better to initialize the variable together with most of the
other libfuncs in optabs.c and depend on whatever magic is there to
prevent its collection, but we initialize it here to avoid taking at
least 2 more files off the vendor branch.


# 146908 03-Jun-2005 kan

Merge conflicts for GCC 3.4.4.


# 132732 28-Jul-2004 kan

Merge FreeBSD changes into GCC 3.4.2-prerelease.
1.19 Fix -mprofiler-epilogue on i386.


# 124167 06-Jan-2004 bde

Quick fix for breakage of non-i386 arches in previous commit. Only
use TARGET_PROFILER_EPILOGUE if it is defined.


# 124160 05-Jan-2004 kan

Fix -mprofiler-epilogue on i386. This should be extended to other
architectures in future.

Submitted by: bde


# 122190 07-Nov-2003 kan

No FreeBSD-local changes in these files.


# 117404 11-Jul-2003 kan

FreeBSD uses stock versions of these GCC files.


# 110621 10-Feb-2003 kan

Update HEAD with stock GCC 3.2.2 release files.


# 107605 04-Dec-2002 obrien

Update HEAD with FSF branch 3.2.1 release files.


# 107604 04-Dec-2002 obrien

Use pure stock files.


# 107286 26-Nov-2002 obrien

Remove our custom mixed ELF/a.out support. This means the base compiler
now only produce ELF objects. It also makes us closer to stock GCC, and
simplifies the set of changes we still need from stock GCC on every import.

Applauded by: peter
Approved by: re


# 102794 01-Sep-2002 kan

Merge FreeBSD modifications into gcc 3.2.1-prerelease:
1.2 a.out support

Approved by: obrien


# 96283 09-May-2002 obrien

Merge rev 1.2 (a.out support) into the GCC 3.1 prerelease.


# 90091 01-Feb-2002 obrien

Merge rev 1.2 (a.out support) into GCC 3.1-snap.


# 72564 17-Feb-2001 obrien

Merge gcc-2.95.3-test3 changes onto mainline. Bump FreeBSD cc version.


# 70639 03-Jan-2001 obrien

Merge gcc.2.95.3-test1 changes onto mainline


# 60970 27-May-2000 obrien

Fix conflicts.


# 52763 01-Nov-1999 obrien

Merge rev 1.2 (a.out support) into GCC 2.95.2.


# 52518 26-Oct-1999 obrien

Merge rev 1.2 (a.out support) into GCC 2.95.1.


# 52272 15-Oct-1999 obrien

Grrrrr. Put the $FreeBSD$ in a Bad Place.


# 52268 15-Oct-1999 obrien

Merge rev 1.2 (a.out support) into EGCS 1.1.2.


# 34229 08-Mar-1998 peter

First round of changes to support generation of assembler for the old
a.out gas and the binutils gas (elf or a.out) with a single compiler.

This uses other infrastructure not yet committed, in order to support
both a.out and elf it needs to be able to get to both a.out and elf
gas, ld, libs, crt* etc. So for now, the support is pretty much dormant.

The new freebsd.h file is based on the old freebsd-elf.h file (which has a
long lineage, right back through linux and svr4 files). The change is
pretty dramatic from a gcc internals standpoint as it overrides a lot of
definitions in order to generate different output based on target mode.
There is potential for screw-ups, so please be on the lookout - gcc's
configuration mechanism wasn't really meant for this kind of thing.
It's believed to compile world etc just fine under both a.out and elf, can
handle global constructors and destructors, handles the differences in
a.out and elf stabs, and what sections things like exceptions go in.

The initial idea came from i386/osfrose.h which is a dual rose/elf format
target. These two are not as diverse as a.out and elf it would seem.

The cc front-end uses external configuration to determine default object
format (still being thrashed out, so read the source if you want to see
it so far), and has a '-aout' and '-elf' override command line switch.
There are some other internal switches that can be accessed, namely -maout,
-mno-aout, -munderscores and -mnounderscores. The underscore and local
symbol prefixing rules are controllable seperately to the output format.
(ie: it's possible to generate a.out without the _ prefixes on symbols and
also to generate elf with the _ prefixes. This isn't quite optimal, but
does seem to work pretty well, except the linkers don't always recognise
the local symbols without their normal names)

The default format is a.out (still), nobody should see any major changes.

With both elf and a.out tools and libraries installed:

[1:26pm]/tmp-223> cc -elf -o hello hello.c
peter@beast[1:27pm]/tmp-224> file hello
hello: ELF 32-bit LSB executable, Intel 80386, version 1 (FreeBSD), dynamically linked, not stripped
[1:27pm]/tmp-225> ./hello
hello world!

[1:27pm]/tmp-226> cc -aout -o hello hello.c
[1:27pm]/tmp-227> file hello
hello: FreeBSD/i386 compact demand paged dynamically linked executable not stripped
1:27pm]/tmp-228> ./hello
hello world!

Since my co-conspirators put a lot of effort into this too, I'll add them
so they can share the blame^H^H^H^H^Hglory. :-)

Reviewed by: sos, jdp


# 18335 18-Sep-1996 peter

This commit was generated by cvs2svn to compensate for changes in r18334,
which included commits to RCS files with non-trunk default branches.


# 18334 18-Sep-1996 peter

Import of unmodified (but trimmed) gcc-2.7.2. The bigger parts of the
non-i386, non-unix, and generatable files have been trimmed, but can easily
be added in later if needed.

gcc-2.7.2.1 will follow shortly, it's a very small delta to this and it's
handy to have both available for reference for such little cost.

The freebsd-specific changes will then be committed, and once the dust has
settled, the bmakefiles will be committed to use this code.