History log of /freebsd-10-stable/lib/csu/ia64/
Revision Date Author Comments
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


234502 20-Apr-2012 dim

After r217375, some startup objects under lib/csu are built in a special
way: first they are compiled to assembly, then some sed'ing is done on
the assembly, and lastly the assembly is compiled to an object file.

This last step is done using ${CC}, and not ${AS}, because when the
compiler is clang, it outputs directives that are too advanced for our
old gas. So we use clang's integrated assembler instead. (When the
compiler is gcc, it just calls gas, and nothing is different, except one
extra fork.)

However, in the .s to .o rules in lib/csu/$ARCH/Makefile, I still passed
CFLAGS to the compiler, instead of ACFLAGS, which are specifically for
compiling .s files.

In case you are using '-g' for debug info anywhere in your CFLAGS, it
causes the .s files to already contain debug information in the assembly
itself. In the next step, the .s files are also compiled using '-g',
and if the compiler is clang, it complains: "error: input can't have
.file dwarf directives when -g is used to generate dwarf debug info for
assembly code".

Fix this by using ${ACFLAGS} for compiling the .s files instead.

Reported by: jasone
MFC after: 1 week


217375 13-Jan-2011 dim

Apply a workaround for a binutils issue with the .note.ABI-tag section
generated from lib/csu/common/crtbrand.c (which ultimately ends up in
executables and shared libraries, via crt1.o, gcrt1.o or Scrt1.o).

For all arches except sparc, gcc emits the section directive for the
abitag struct in crtbrand.c with a PROGBITS type. However, newer
versions of binutils (after 2.16.90) require the section to be of NOTE
type, to guarantee that the .note.ABI-tag section correctly ends up in
the first page of the final executable.

Unfortunately, there is no clean way to tell gcc to use another section
type, so crtbrand.c (or the C files that include it) must be compiled in
multiple steps:

- Compile the .c file to a .s file.
- Edit the .s file to change the 'progbits' type to 'note', for the section
directive that defines the .note.ABI-tag section.
- Compile the .s file to an object file.

These steps are done in the invididual Makefiles for each applicable arch.

Reviewed by: kib


216351 10-Dec-2010 tijl

Add a .note.ABI-tag section to ia64 startup files by linking crtbrand.c
in crt1.o. On other architectures crtbrand.c is included from crt1.c,
but that's not a C source code file on ia64. Instead it is compiled
separately and included in crt1.o using incremental linking.

Tested by: dim (previous version)
Approved by: kib (mentor)


216338 09-Dec-2010 dim

Let all .c and .S files under lib/csu consistently use the __FBSDID()
macro for identification, instead of several different hand-rolled
variants (plain .ident, .ascii, etc).


213906 15-Oct-2010 dim

Remove two .endp's without matching .proc in lib/csu/ia64/crtn.S.
This allows it to assemble with newer binutils.

Reviewed by: marcel


204757 05-Mar-2010 uqs

Use default WARNS setting (of 6) for lib/csu.

PR: bin/140089
Reviewed by: jmallett
Approved by: ed (co-mentor)


200038 02-Dec-2009 kib

Properly support -fPIE by linking PIE binaries with specially-built
Scrt1.o instead of crt1.o, since the later is built as non-PIC.

Separate i386-elf crt1.c into the pure assembler part and C code,
supplying all data extracted by assembler stub as explicit parameters [1].
Hide and localize _start1 symbol used as an interface between asm and
C code.

In collaboration with: kan
Inspired by: PR i386/127387 [1]
Prodded and tested by: rdivacky [1]
MFC after: 3 weeks


133989 18-Aug-2004 marcel

Bring ia64 back from the dead. After a call one needs to restore the
GP register, because it's clobbered for calls across load modules. The
previous commit inserted the call to _init_tls() between the call to
atexit() and the restoration of the GP register clobbered by it. Fix:
restore GP before we call _init_tls().

Pointy hat: dfr@


133754 15-Aug-2004 dfr

Add support for TLS in statically linked programs.


117606 15-Jul-2003 marcel

Fix typo: Passing the first argument to exit() in out2 does not work.
Trust me.


117537 14-Jul-2003 marcel

_start() needed to be written in assembly. See crt1.S.


117531 13-Jul-2003 marcel

Rewite _start(). We cannot use a C function due to the fact that we
don't call it according to the runtime specification and especially
WRT to gp this can cause trouble. The gcc 3.3.1 import broke the
ia64 runtime because the compiler saved gp prior to us being able
to set it properly. Restoring gp after the calls would then invalidate
gp and cause segmentation faults later on.
By rewriting _start() as an assembly function, we also avoided even
more gcc dependences, by trying to use gcc specific features to work
around the problem.
This version of _start() does not reference _DYNAMIC. We register the
cleanup function when it's a non-NULL pointer. The kernel will always
pass a NULL pointer and dynamic linkers may pass a non-NULL pointer.

The machine independent code to set __progname now unfortunately is
written in assembly. So be it.


109905 26-Jan-2003 markm

make these more useful for lint(1). Minor diff-reductions while I'm
about it.


100872 29-Jul-2002 ru

Drop support for COPY, -c has been the default mode of install(1)
for a long time now.

Approved by: bde


100167 16-Jul-2002 markm

The main reason for this is to reduce diffs between all the crt1.c's.

Assembler macros are tidied up and made as similar as sanely possible.
The macros are translated into C (__inline static) functions for lint.

Declaration orders are made the same.
Declarations are all ISOfied and tidied up.

Comment contents have gratuitous diffs removed.

The net result is a bunch of crt1.c's that are 90% the same.
It may be possible to now encapsulate the differences in one
MD header, and have only one MI crt1.c file (although the macros
to do this may be ugly).

Helpful comments by: obrien, bde
Alpha tested by: des
i386-elf tested by: markm


96530 13-May-2002 ru

Fixed CLEANFILES after bsd.lib.mk sweep.


96516 13-May-2002 ru

SOBJS are not used here for a long time, and were just
pessimising the `install'.


96512 13-May-2002 ru

Major cleanup of bsd.lib.mk.

Get rid of the INTERNALSTATICLIB knob and just use plain INTERNALLIB.
INTERNALLIB now means to build static library only and don't install
anything. Added a NOINSTALLLIB knob for libpam/modules. To not
build any library at all, just do not set LIB.


96463 12-May-2002 ru

Revert the last change. The corresponding bsd.lib.mk changes were
already backed out.


96411 11-May-2002 obrien

Use the simpler NOMAN rather than NOMAN, NOPIC, NOPROFILE, INTERNALLIB.


93399 29-Mar-2002 markm

Do not use __progname directly (except in [gs]etprogname(3)).
Also, make an internal _getprogname() that is used only inside
libc. For libc, getprogname(3) is a weak symbol in case a
function of the same name is defined in userland.


93037 23-Mar-2002 obrien

Style nit.


85952 03-Nov-2001 peter

Put in an attempt at stack trace/unwind records.


85679 29-Oct-2001 peter

Mostly cosmetic. Use indentation that is reasonably close to other
ia64 *.S files in our tree (eg: locore.s). Put the rest of the args
in the .section lines.

Reviewed by: dfr


85678 29-Oct-2001 peter

Update for the new toolchain. ld doesn't provide _GLOBAL_OFFSET_TABLE_
in 2.11.2, so use a relocatable method of calculating gp.

Reviewed by: dfr


85597 27-Oct-2001 peter

Add missing crti.S and crtn.S files. I have tested these with -static
linking only. They may require some gp relative tweaks for dynamic use.


85593 27-Oct-2001 obrien

Update for reality and syncing with other FreeBSD platforms.


84799 11-Oct-2001 dfr

Change to track the new calling convention for execve. This version only
needs one line of assembler to initialise gp.


82074 21-Aug-2001 dfr

Make sure stack is aligned to 16 bytes.


67811 28-Oct-2000 obrien

* Bring back the guts of crt{i,n}.S. This allows C++ exceptions to work
when using the egcs and gcc-devel ports, along with GCC built from stock
public FSF sources. With out this change, FreeBSD will be removed from
the list of systems GCC 3.0 must be evaluated on before release. With
the effort some of us put into getting FreeBSD on this list, we should
not turn this effort into a waste, else we might not be worth fighting
for in the future. (note that Alpha and IA-64 versions of crt{i,n}.S
are needed)

* Switch from our own crt{begin,in} to those created from GCC's crtstuff.c.
This will allow us to switch to DWARF2 exceptions in the future, along with
staying in sync with any future GCC requirements.

* Break out our ELF branding bits into a seperate file. Currently this
is now included by our crt1.c files (since this functionality was part of
our native crtbegin.c). Later crtbrand.o will be merged in the creation
of crti.o.


67116 14-Oct-2000 dfr

CSU code for ia64.


60844 24-May-2000 obrien

Use the new machine-independent versions of crtbegin and crtend
from the "common" directory.


59407 19-Apr-2000 obrien

CSU source for IA-64. Current we use the ../Alpha sources.