Commit Graph

273 Commits

Author SHA1 Message Date
Marcel Moolenaar
db7ffe67c6 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.
2003-07-13 23:11:37 +00:00
Ruslan Ermilov
6de4623bfe MFi386: revision 1.19. 2003-06-30 12:53:39 +00:00
Bruce Evans
c749b4f6dd Removed garbage:
- -elf in CFLAGS had no effect except to reduce portability.
- -elf in LDFLAGS had even less effect, since LDFLAGS is not used.
- -Wall in CFLAGS had no effect except to reduce portability and break
  overriding of WARNS, since the setting of WARNS implies -Wall.
2003-06-04 11:21:18 +00:00
David E. O'Brien
1628730478 This is now Gcc 3.3 WARNS 6 clean. 2003-05-04 18:34:00 +00:00
David E. O'Brien
bbe4999bd1 Set abitag __unused. 2003-05-04 18:33:26 +00:00
Peter Wemm
1b376078fd Update for AMD64. repocopied from i386-elf/crt1.c. Deal with regparm
argument passing rather than stack based args.  The kernel passes the
base of the argument/env vector in %rdi (arg1).
2003-04-30 19:27:07 +00:00
Mark Murray
7c55188ab2 Very minor EOL whitespace diff-reducer. 2003-01-26 23:34:47 +00:00
Mark Murray
aa4e3f3e5a Missed a bit of cleanup. 2003-01-26 23:29:22 +00:00
Mark Murray
818c8b696b make these more useful for lint(1). Minor diff-reductions while I'm
about it.
2003-01-26 23:14:47 +00:00
Mark Murray
34893fe49b Remove the get_term() function. It pretty much can't work for
FreeBSD, and makes ugly diffs with the other crt1.c's. Leave
behind a comment (words supplied by Thomas Moestl) that explain
the issue.

OK'ed by:	tmm
2003-01-26 23:01:36 +00:00
Bruce Evans
4ce32d5dee Backed out previous commit (alignment suitable for RELENG_4) as planned
since it has been MFC'ed.  See the log message for the previous commit
for more details.  The alignment bug in gcc-3 has not been fixed, but
it is not very serious and the previous commit just moved it (as intended).

Approved by:	re (murray)
2002-12-01 17:36:18 +00:00
Bruce Evans
fb0be37ded Align the stack suitably for the version of gcc in FreeBSD-4 (provided
-fomit-frame-pointer is not used).  This is mostly moot for -current
because gcc-3 does the alignment (slightly incorrectly) in main().

This patch is intended for easy MFC'ing and should be backed out in
-current soon since it causes compiler warnings and better fixes are
possible in -current.  The best fix is to do nothing here and wait for
gcc to do stack alignment right.  gcc-3 aligns the stack in main(), but
does it too late for main()'s local variables and too late for anything
called before main().  A misaligned stack is now more than an efficiency
problem, since some SSE instructions in some or all (hardware)
implementations trap on misaligned operands even if alignment checking
is not enabled.

PR:		41528:
Submitted by:	NIIMI Satoshi <sa2c@sa2c.net> (original version)
MFC after:	3 days
2002-09-29 13:42:27 +00:00
Mark Murray
7ec538840c Remove a prototype for a function that is no longer called. 2002-09-20 22:23:32 +00:00
Jake Burkholder
aa41a4bc92 Don't need to install the signal trampoline here anymore. 2002-09-03 14:59:41 +00:00
Ruslan Ermilov
d2893b161b Drop support for COPY, -c has been the default mode of install(1)
for a long time now.

Approved by:	bde
2002-07-29 09:40:17 +00:00
Mark Murray
828191256b 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
2002-07-16 12:28:50 +00:00
Mark Murray
ccece3d626 Whitespace diffs only; this brings this file into the same whitespace
convention as src/lib/csu/*/crt1.c.

This will make the follow up diffs easier to see and extract.
2002-07-03 14:42:39 +00:00
David E. O'Brien
c02ba8a8d2 WARNS=6'ify.
Style nits.
2002-06-25 18:05:16 +00:00
David E. O'Brien
ad275bd760 Prototype _start.
Submitted by:	markm

Mark some _start formal parameters __unused.
2002-06-25 18:01:12 +00:00
David E. O'Brien
d03f581f32 Use .rodata section for $FreeBSD$. 2002-05-15 04:19:49 +00:00
Ruslan Ermilov
2020063860 Fixed CLEANFILES after bsd.lib.mk sweep. 2002-05-13 15:28:00 +00:00
Ruslan Ermilov
7893b524b9 SOBJS are not used here for a long time, and were just
pessimising the `install'.
2002-05-13 11:51:11 +00:00
Ruslan Ermilov
2a53f3fb35 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.
2002-05-13 10:53:24 +00:00
Ruslan Ermilov
5b8f41af39 Revert the last change. The corresponding bsd.lib.mk changes were
already backed out.
2002-05-12 16:21:23 +00:00
David E. O'Brien
785b36d40f Use the simpler NOMAN rather than NOMAN, NOPIC, NOPROFILE, INTERNALLIB. 2002-05-11 17:45:03 +00:00
David E. O'Brien
471b107936 Use the compiler's crt{begin,end}. 2002-05-10 01:36:29 +00:00
David E. O'Brien
3222c45089 Fix the copyright dates. 2002-05-07 18:07:43 +00:00
Jake Burkholder
dbba4c62ce Install the libc signal trampoline on startup. 2002-04-29 20:25:29 +00:00
Bruce Evans
ccc4300e95 Removed "-fkeep-inline-functions" from CFLAGS, since it now has no effect
except to generate spurious warnings about a system header <sys/param.h>
having some inline functions (the bswap family).  This backs out the main
part of rev.1.5 (which was the only part left).  The problem fixed by
rev.1.5 of the Makefile went away in rev.1.5 of ../common/crtbegin.c
when the references to do_ctors() and do_dtors() in the latter were moved
from inline asm to C code.

This leaves the problem that implementation details cause warnings.

Discussed with:	jdp
2002-04-29 13:07:20 +00:00
David E. O'Brien
88727b7db9 Style nit and modernize SCM ID. 2002-04-13 21:54:09 +00:00
David E. O'Brien
f01730b279 For now we are using our old crt{begin,end}. 2002-04-08 20:31:20 +00:00
Mark Murray
4cd0119367 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.
2002-03-29 22:43:43 +00:00
David E. O'Brien
327e1e773f Style nit. 2002-03-23 18:14:20 +00:00
David E. O'Brien
a378c419fe Remove prototype, no other crt1.c has or needs it. 2002-03-23 18:14:04 +00:00
David E. O'Brien
674c351892 Remove __P() usage. 2002-03-22 09:16:59 +00:00
David E. O'Brien
4d826ecfbc Remove __P() usage. 2002-03-21 23:43:04 +00:00
David E. O'Brien
917356f5f6 Revert part of rev 1.3 -- we need the calls to _init and _fini. 2002-03-16 20:38:46 +00:00
David E. O'Brien
8d72757aba Sync with csu/alpha/Makefile: build crt{i,n}.o.
Leave crtbegin* to the compiler vendor.
2002-03-10 23:33:49 +00:00
David E. O'Brien
2e6f61b9bc Minor style(9) nit + utilize ELF features for the FreeBSD ID. 2002-02-28 19:45:34 +00:00
David E. O'Brien
1e23f97e5c Minor style(9) nit + utilize ELF features for the FreeBSD ID. 2002-02-27 22:13:02 +00:00
David E. O'Brien
7f524f1fe9 We do not support the sparc platform. 2002-02-27 21:59:16 +00:00
David E. O'Brien
fc6e9db154 Minor WS change to improve readability. 2002-02-27 21:53:27 +00:00
Thomas Moestl
30d514918a Initialize the libc user trap handlers before passing control non-startup
code, so that the userland fp emulator will work.
2002-02-23 21:47:20 +00:00
David E. O'Brien
2040953a71 GC code that moved to crtbrand.c. 2002-01-28 19:02:34 +00:00
Jake Burkholder
f2602cd538 Comment out the retrieval of a termination function from %g1. It is
doubtful this will ever be used by anything and rtld uses %g1.
Comment out references to _init and _fini for now too.
2002-01-13 06:17:19 +00:00
Jake Burkholder
be5fa99a1e Fix typo (unclosed comment). 2001-12-28 17:55:15 +00:00
David E. O'Brien
2f67a9b3cd Embelish CFLAGS. 2001-12-15 21:41:11 +00:00
David E. O'Brien
07e70b12fc The instructions on doing something with src/lib/csu/sparc64. 2001-12-15 21:36:30 +00:00
David E. O'Brien
ee425bffeb Sparc64 ELF version of the C runtime support.
It tries to comply with the SCD 2.4.1 (and thus Sparc 64-bit psABI).

This is an amalgamation of the FreeBSD Alpha crt1.c and the BSD/OS Sparc
crt0.c (which the copyright reflects).
2001-12-15 18:54:06 +00:00
Peter Wemm
4250f47ada Put in an attempt at stack trace/unwind records. 2001-11-03 06:31:27 +00:00
Peter Wemm
b3cd898e58 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
2001-10-29 10:18:58 +00:00
Peter Wemm
16ef3f735a 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
2001-10-29 10:14:51 +00:00
David E. O'Brien
db5eede7cc sparc64 verions of the crt initialization and finalization files required
by the ELF ABI.
2001-10-28 00:20:34 +00:00
Peter Wemm
c91cd68318 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.
2001-10-27 10:10:45 +00:00
David E. O'Brien
60ed6ae069 Sync with other platforms. 2001-10-27 08:32:07 +00:00
David E. O'Brien
41513796e8 minor style updating 2001-10-27 08:30:36 +00:00
David E. O'Brien
255cdd9376 Update for reality and syncing with other FreeBSD platforms. 2001-10-27 08:29:03 +00:00
David E. O'Brien
9ac8182513 Feh, it helps to include a file other than yourself... wonder how
GCC cpp liked that.

Properly include the branding info.
2001-10-27 08:25:32 +00:00
David E. O'Brien
7424ae80fc Fix nit in copyright. 2001-10-26 06:45:10 +00:00
David E. O'Brien
9ebf4cc891 Use the new machine-independent versions of crtbegin and crtend
from the "common" directory.
2001-10-26 06:39:54 +00:00
Doug Rabson
3749c9e54d Change to track the new calling convention for execve. This version only
needs one line of assembler to initialise gp.
2001-10-11 12:33:05 +00:00
Doug Rabson
d2cb5f3137 Make sure stack is aligned to 16 bytes. 2001-08-21 16:53:23 +00:00
Ruslan Ermilov
8af1452cf8 Removed duplicate VCS ID tags, as per style(9). 2001-08-13 14:06:34 +00:00
Mark Peek
4f1fda9595 Fix compilation errors by adding forward declarations and fix typo. 2001-07-31 16:10:51 +00:00
David E. O'Brien
7c6e689224 Add rcsid's. 2001-01-04 10:37:25 +00:00
David E. O'Brien
6e88ecec2c The instructions on doing something with src/lib/csu/powerpc. 2001-01-04 10:27:04 +00:00
David E. O'Brien
38b909640e PowerPC version of the C runtime support.
This is an amalgamation of the NetBSD macppc crt0.c (which the copyright
reflects) and the FreeBSD/Alpha crt1.c.
2001-01-04 10:25:59 +00:00
David E. O'Brien
de7c457799 PowerPC verions of the crt initialization and finalization files required
by the ELF ABI.
2001-01-04 10:05:42 +00:00
David E. O'Brien
6f880b49b7 Alpha verions of the crt initialization and finalization files required
by the ELF ABI.
2000-10-30 05:21:08 +00:00
David E. O'Brien
ae7c8a2bb8 * 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.
2000-10-28 21:26:48 +00:00
Doug Rabson
ac5096139b CSU code for ia64. 2000-10-14 16:38:08 +00:00
David E. O'Brien
a62f273fbe Use the new machine-independent versions of crtbegin and crtend
from the "common" directory.
2000-05-24 02:17:12 +00:00
John Polstra
d1db20032f Use the new machine-independent versions of crtbegin and crtend
from the "common" directory.

As a side-effect, this also fixes a bug in the ordering of global
constructors and destructors on the Alpha.  See revision 1.3 of
"../common/crtbegin.c" for details.
2000-05-23 04:53:24 +00:00
John Polstra
bb63c9d3b4 Take crtbegin.c and crtend.c from the new machine-independent
"common" sister directory.
2000-05-20 17:47:29 +00:00
John Polstra
f6d15b87f8 This is step 1 in an effort to unify the start-up files for the
various architectures.  Now all the work is done in crtbegin.c.
It doesn't contain any assembly language code, so it should work
fine on all architectures.  (I have tested it on the i386 and the
alpha.) The old assembly language files crt[in].S are now empty
shells that generate no code or data.  They should not be removed
any time soon, because the various versions of gcc in src and ports
expect them to exist.

Next I will move crtbegin.c into a new common machine-independent
directory, and adjust the i386-elf Makefile to use that version.
After that I will adjust the alpha Makefile to use the common
version too.

Requested by:	obrien
2000-05-19 04:32:17 +00:00
David E. O'Brien
d7ff52ec79 CSU source for IA-64. Current we use the ../Alpha sources. 2000-04-19 23:46:21 +00:00
David E. O'Brien
d497785133 Use ${.ALLSRC} in Makefile so that it is a better candidate for copying.
Also allows the soruce to live somewhere else.
2000-04-19 23:45:43 +00:00
Steve Price
15ee5562d6 CSU source for the Sparc copied over from the FreeBSD/Alpha sources. 2000-04-19 22:53:04 +00:00
David E. O'Brien
c815a20cb2 Change our ELF binary branding to something more acceptable to the Binutils
maintainers.

After we established our branding method of writing upto 8 characters of
the OS name into the ELF header in the padding; the Binutils maintainers
and/or SCO (as USL) decided that instead the ELF header should grow two new
fields -- EI_OSABI and EI_ABIVERSION.  Each of these are an 8-bit unsigned
integer.  SCO has assigned official values for the EI_OSABI field.  In
addition to this, the Binutils maintainers and NetBSD decided that a better
ELF branding method was to include ABI information in a ".note" ELF
section.

With this set of changes, we will now create ELF binaries branded using
both "official" methods.  Due to the complexity of adding a section to a
binary, binaries branded with ``brandelf'' will only brand using the
EI_OSABI method.  Also due to the complexity of pulling a section out of an
ELF file vs. poking around in the ELF header, our image activator only
looks at the EI_OSABI header field.

Note that a new kernel can still properly load old binaries except for
Linux static binaries branded in our old method.

  *
  * For a short period of time, ``ld'' will also brand ELF binaries
  * using our old method.  This is so people can still use kernel.old
  * with a new world.  This support will be removed before 5.0-RELEASE,
  * and may not last anywhere upto the actual release.  My expiration
  * time for this is about 6mo.
  *
2000-04-18 02:39:26 +00:00
Peter Wemm
7f3dea244c $Id$ -> $FreeBSD$ 1999-08-28 00:22:10 +00:00
Hidetoshi Shimokawa
480d03cbdd Enable gcrt1.o. 1999-07-16 06:59:27 +00:00
John Polstra
5ae2733874 Call do_ctors() and do_dtors() using indirect calls through function
pointers.  The calls are in different sections from the functions
being called, and they can potentially be far away.  On a very large
program, the 21-bit displacement field of the BSR instruction
overflowed at link time.
1999-06-06 15:59:08 +00:00
John Polstra
4e54ad63db Remove some left-over stuff from NetBSD that we don't need. This
eliminates the need to include the dynamic linker's private header
file, as well as two other headers from <sys>.
1999-04-24 02:07:17 +00:00
John Polstra
1306c069d2 Ugh. I didn't know this Makefile was reaching over into the dynamic
linker sources for some of its header files.  Add a -I flag to pick
up a new directory over there.
1999-04-09 05:56:23 +00:00
John Polstra
c30965b3bd Add "-fkeep-inline-functions" to CFLAGS so that higher optimization
levels (-O3 and above) won't remove essential code.  Many thanks
to Dmitrij Tejblum <dima@tejblum.dnttm.rssi.ru> for pointing out
that it was the optimizer's removal of this code that caused make
world with -O3 to break.  With this change, make buildworld now
completes.
1999-03-15 21:56:54 +00:00
John Polstra
0738f6e0c3 Reverse the order of processing object files within an executable or
shared library when invoking global constructors and destructors.
For constructors, the object files used to be processed from first
to last; now they're done from last to first.  (Destructors are done
in the opposite order, as required by the C++ standard.)  This makes
us consistent with standard gcc and egcs compilers.  It also
eliminates ordering differences between dynamic and static
executables.

Bump the value of __FreeBSD_version to 400002 to reflect this
change.
1999-03-13 01:35:44 +00:00
John Polstra
bb2b869188 Move the code for the ".init" and ".fini" sections outside of a
C function so the compiler won't try to emit line numbers for it
with "-g", breaking the build.  This has the nice side-effect of
making crtbegin.o and crtbeginS.o a little bit smaller.

Remove "-Wno-unused" from the Makefile.  Replace it with "__unused"
on particular function and variable declarations.
1999-03-12 17:33:28 +00:00
Hidetoshi Shimokawa
49837d6cd0 Initialize __progname by argv[0] before striping leading path,
otherwise we always get empty name.
1999-01-19 06:58:31 +00:00
John Polstra
f92bdbd010 Switch to using ".So" as the extension for PIC object files rather
than ".so".  The old extension conflicted with well-established
naming conventions for dynamically loadable modules.

The "clean" targets continue to remove ".so" files too, to deal with
old systems.
1999-01-09 21:51:00 +00:00
Steve Price
0997d762cf Strip the leading path from __progname.
Ok'd by:	jdp
1999-01-07 20:18:18 +00:00
Bruce Evans
3581d64b8d Fixed type mismatches in args to __syscall(). One for mmap() broke on
i386's with 64-bit longs -- the padding between mmap()'s 5th and 6th
is an int, not a long.  The other mismatches were benign.
1998-12-27 15:47:15 +00:00
Bruce Evans
d07b0a6163 Avoid using ld -O (as in bsd.lib.mk).
Fixed `make cleandepend'.  The default is null because SRCS is null.
1998-12-27 15:24:21 +00:00
Steve Price
a124f32704 Strip the leading path from __progname as is done in the a.out case. Also
bring in stddef.h so we can use NULL instead of 0 for pointer comparisons.

Hinted at by:	Bruce Evans
Reviewed by:	John Polstra
1998-12-24 18:19:47 +00:00
John Polstra
5584f22bb3 Make profiling work for ELF. gprof now autodetects the format of
the executable file, so it will work for both a.out and ELF format
files.  I have split the object format specific code into separate
source files.  It's cleaner than it was before, but it's still
pretty crufty.

Don't cheat on your make world for this update.  A lot of things
have to be rebuilt for it to work, including the compiler and all
of the profiled libraries.
1998-09-07 23:32:00 +00:00
John Birrell
34c91739be Remove the bootstrap hack that prevented the use of the rtld. 1998-08-20 21:37:22 +00:00
Bruce Evans
67b780b03b Fixed double slashes in pathnames. 1998-05-31 11:32:38 +00:00
Søren Schmidt
cabb97dcbf ELF preparation step 2:
Move a.out libraries to /usr/lib/aout to make space for ELF libs.
Make rtld usr /usr/lib/aout as default library path.
Make ldconfig reject /usr/lib as an a.out library path.
Fix various Makefiles for LIBDIR!=/usr/lib breakage.

This will after a make world & reboot give a system that no
longer uses /usr/lib/*, infact one could remove all the old
libraries there, they are not used anymore.

We are getting close to an ELF make world, but I'll let this
all settle for a week or two...
1998-05-26 20:12:56 +00:00
John Birrell
ec7fa2a51e Force BOOTSTRAP mode all the time while the headers are broken on alpha
as the result of i386 changes.
1998-05-04 02:06:09 +00:00
John Birrell
8999cfc9b5 Temporary fix for problems that occur if CFLAGS=-g is added to
/etc/make.conf. The tools can't handle generating debug code where
we fiddle with the ELF segments.
1998-04-01 03:24:19 +00:00
John Birrell
f672a042cf Don't share sources with i386-elf. That was too difficult. 8-(
Add a bootstrap mode so that non-rtld versions of these objects can
be built when bootstrapping the system with NetBSD tools, headers
and libraries. Once the FreeBSD tools are built, the FreeBSD headers
are installed and *then* these objects can be recompiled with the
rtld references. Phew.
1998-03-11 20:41:55 +00:00
John Birrell
1901906aa6 Sharing the crt sources with i386-elf wasn't too successful. The crti
asm code didn't link the way it was supposed to and the calling convention
for the entry "function" turned out to be very different. On alpha
it's a true function, but on i386 it's a fudge. Blech.

So jdp suggested keeping separate sets of source and avoiding lots
of #ifdefs. These files are based on his i386-elf code, with crt1.c
borrowing code from NetBSD's crt0. The copyright reflects that.

Complicating matters, the code turned out to be difficult to bootstrap
build using NetBSD tools. To compile against the FreeBSD rtld header
requires FreeBSD specific headers, but these can't be installed until
the tools are built, and they can't be built without the FreeBSD crt
objects. Anal retentive. So I introduced a HAVE_RTLD #define that isn't
set during the build process until all the tools are built and the
headers installed.
1998-03-11 20:36:11 +00:00
John Birrell
b843e53a97 Trash startup sources from NetBSD in favour of jdp's FreeBSD source
now that has been committed.

The makefile is derived from the i386-elf version, modified to pick
up most of the source (except crt1.c) from i386-elf. With minor changes
to i386-elf/crt1.c, this directory can be combined with i386-elf to
be a single csu/elf directory for all seasons.
1998-03-10 07:04:18 +00:00
John Birrell
fbb2bc058d Import a sanitized version of jdp's crt1.c from i386-elf. I have removed
the rtld code pending implementation on the alpha.

The csu/i386-elf should be renamed as csu/elf and this directory
trashed. Consider this a temporary implementation.
1998-03-10 06:56:16 +00:00
John Polstra
966a88d986 Import C startup files for ELF support.
Submitted by:	John Polstra <jdp@polstra.com>
1998-03-07 20:27:11 +00:00
John Polstra
0fbd9e9828 Remove the include of <dlfcn.h> from crt0.c; it is not needed now
that the dl* trampolines have been moved into libc.

Move dlfcn.h from src/lib/csu/i386 into src/include.  Nothing in
src/lib/csu/i386 uses it any more.
1998-02-11 04:57:25 +00:00
John Polstra
645c4be38a Move the trampolines for dlopen and related functions from crt0.o
into libc.  This reduces the size of every dynamically linked
executable by 248 bytes, and it reduces the size of static executables
by a lesser amount.  It also eliminates some global namespace
pollution.

With this change in place, the source for dlfcn.h should probably
be moved to "/usr/src/include".  I'll save that for another day.

Compatibility note:  Programs which use dlopen, if compiled on
systems with this change, will not run on systems with a libc from
prior to this change.  Very few programs use dlopen, so I think
that is OK.
1998-02-09 06:05:25 +00:00
John Polstra
663690b388 Implement dladdr. 1998-02-06 16:46:46 +00:00
Eivind Eklund
920207a8e9 ${TARGET} -> ${.TARGET}
Tiny pointed hat goes to:	Our Makefile-meister.
1998-01-12 18:29:02 +00:00
John Birrell
3c526fbfd3 CSU source for Alpha obtained from NetBSD. The makefile will require
more work when we get a half-way usable libc (which is next).
1998-01-11 03:30:39 +00:00
Brian Somers
9822c98d98 const correctness for dl*() 1997-11-22 03:34:46 +00:00
Satoshi Asami
fc702c5bc8 Make this file p-make clean. (Use "ld -O foo" instead of "ld; mv
a.out foo".)

Reviewed by:	bde (actually more like "Suggested by")
1997-10-11 02:37:42 +00:00
Wolfram Schneider
bf5cbf3551 Sort cross refereces in section SEE ALSO. 1997-09-29 19:11:55 +00:00
John Polstra
7e7344e2f4 Implement dlsym(RTLD_NEXT, symbol). 1997-08-02 04:56:44 +00:00
Mike Smith
dff682856f Use our copy of dlfcn.h, not the version in /usr/include, which may not
be up-to-date when we are building.
Submitted by:	Terry Lambert <terry@lambert.org>
1997-04-30 03:12:09 +00:00
John Polstra
f3112eb32a Declare the constructor/destructor linker sets as extern rather than
common.  Add one do-nothing element to each set.  This ensures that
the linker realizes that they are linker sets rather than simple
commons, and makes it possible to link c++rt0.o into every shared
library regardless of whether it is a C++ library or not.  Without
this change, the constructors and destructors in the main program
could be executed multiple times.

This change is going to make it possible to get rid of the
CPLUSPLUSLIB makefile variable once and for all.  It is a piece of
the solution to PR gnu/3505 (gcc -shared).  Finally, it fixes a
heretofore unreported bug:  If CPLUSPLUSLIB was set in a makefile
for a C++ shared library that had no static constructors or
destructors in it, then the main program's constructors and
destructors would be executed multiple times.
1997-04-09 19:14:31 +00:00
John Polstra
bb789b9ea2 Fix an error in the previous revision that caused make world breakage. 1997-04-02 16:49:18 +00:00
Bruce Evans
67fd3b9895 Simplified install rule. 1997-04-01 13:53:16 +00:00
Peter Wemm
7e546392b5 Revert $FreeBSD$ to $Id$ 1997-02-22 15:12:41 +00:00
Jordan K. Hubbard
1130b656e5 Make the long-awaited change from $Id$ to $FreeBSD$
This will make a number of things easier in the future, as well as (finally!)
avoiding the Id-smashing problem which has plagued developers for so long.

Boy, I'm glad we're not using sup anymore.  This update would have been
insane otherwise.
1997-01-14 07:20:47 +00:00
John Polstra
f08cd1247b Convert to mdoc format.
Add descriptions of RTLD_LAZY and RTLD_NOW.
Correct the synopsis to agree with the actual function prototypes.
Add clarifications of a few things.
Clean up the wording in a few places.
1997-01-12 19:55:49 +00:00
John Polstra
8a8c5a99ee Add definitions of RTLD_LAZY and RTLD_NOW. 1997-01-12 18:37:46 +00:00
John Polstra
65eabc3424 Set the "crt_ldso" member of the crt-to-ld.so interface structure. This
was apparently overlooked at the time the member was added.  Its absence
causes some error messages from the dynamic linker to begin with
"(null):" instead of with the pathname of the dynamic linker as they
should.

I am also adding a work-around to the dynamic linker, to cope with
legacy binaries that were built with older versions of crt0.
1997-01-11 23:59:34 +00:00
Bruce Evans
fd0a86436e Use ${COPY} instead of -C for installing non-source files. crt*.o
should be installed using the same flag as libraries, but ${COPY}
is currently used for libraries.
1997-01-01 04:52:55 +00:00
Peter Wemm
fbde87863d When linking with no rtld support, provide stub dl*() functions that
just return errors.  This removes the need for awful hacks like that in
our build of libtcl which would get link errors when linked static.

John Polstra once mentioned that this was on his "todo" list.

Note that one can use:
  cc -Wl,-Bstatic -o foo foo.o
and get an executable that has it's libraries statically linked, but has
a fully functional runtime linker so the executable can call dlopen() and
have it work.  (I've tested this)
1996-12-28 17:10:52 +00:00
Marc G. Fournier
d453b6a53d Fixed prototyping of dlopen/dlsym in dlfcn.h, to match how crt0.c defines
it and link.h prototypes it

Error of my ways pointed out by Peter
1996-10-08 01:41:51 +00:00
Steve Price
3d78e32756 Remove garbage initcode reference so that 'gcc -Dlint ...'
will compile without error.
1996-10-06 03:19:26 +00:00
Peter Wemm
4e89f352f0 Support crt0 <-> ld.so interface version 4. This should be both backwards
and forwards compatable with version 3.  This is needed to enable storing
a run-time library path in the dynamic linking headers.  The crt startup
tries version 4 first, and falls back to version 3, so an executable that
is linked on -current will work with the ld.so on 2.1.x and less.

Reviewed by: nate, jdp
Obtained from: NetBSD
1996-10-01 00:54:48 +00:00
Peter Wemm
dce96329a9 cmp -s || install -c --> install -C 1996-08-30 01:41:52 +00:00
Wolfram Schneider
9fb933075e `mv'' -> `mv -f''
``rm'' -> ``rm -f''
so mv/rm may not ask for confirmation if you are not root
1996-05-07 23:19:49 +00:00
John Polstra
89370a31f2 Changed the dimensions of __CTOR_LIST__ and __DTOR_LIST__ from 0
to 2.  This makes them agree with the declarations in libgcc, and
clears the way once again for linking c++rt0.o into all libraries,
and eliminating CPLUSPLUSLIB from <bsd.lib.mk>.  (I have not made
that change yet, because there is still a bootstrapping problem
for "make world".)

Also, removed a check which ensured that the constructor count in
the first word of __CTOR_LIST__ was greater than zero before
traversing the list.  I had added that check earlier, but it is no
longer necessary, now that there is guaranteed to be at least 2
words in __CTOR_LIST__.
1996-02-20 04:07:26 +00:00
Nate Williams
98c4ae7b2b Back out the thread_init code in order to allow -current to bootstrap
from -stable, until a better solution is found.

Submitted by:	Consensus of mailing list and the almighty Jordan :)
1996-01-30 05:55:20 +00:00
Julian Elischer
f70177e76e Reviewed by: julian and (hsu?)
Submitted by:	 John Birrel(L?)

changes for threadsafe operations
1996-01-22 00:02:33 +00:00
John Polstra
d5489b0d8f Check the count in the first word of __CTOR_LIST__ before executing
the loop that invokes the static constructors.  That makes it safe
to link c++rt0.o into any shared library, even one that does not
have any static constructors.  Formerly, doing that would cause a
bus error.  If the library has no static constructors, __CTOR_LIST__
comes out as a simple 4-byte COMMON region, and it does not have
the usual NULL word that terminates the list of constructors.  This
caused the old code to "call" a garbage address via the non-existent
entry __CTOR_LIST__[1].

The analogous code that invokes the static destructors was already safe.

This change is fully backward-compatible.

Reviewed by:	dfr@render.com (Doug Rabson)
1996-01-15 17:53:25 +00:00
Peter Wemm
6065a0be11 This commit was generated by cvs2svn to compensate for changes in r13122,
which included commits to RCS files with non-trunk default branches.
1995-12-30 19:02:48 +00:00
Peter Wemm
a5b996a7ec recording cvs-1.6 file death 1995-12-30 19:02:48 +00:00
Andrey A. Chernov
3e912c9dee Remove my locale hack. Sigh. 1995-11-02 12:42:42 +00:00
Poul-Henning Kamp
05fc2de514 Clean up and make code (more) readable. 1995-10-29 09:49:21 +00:00
Bruce Evans
ccbc94648a Fixed dependencies for scrt0.o.
Build a static gcrt0.o (sgcrt0.o) too.  Currently only the dynamic gcrt0.o
is used, although -pg forces -static.
Sorted the .o targets.
1995-10-22 18:36:47 +00:00
Poul-Henning Kamp
6b44b1a3fa -fomit-frame-pointer is becomming an increasingly popular optimization,
so before somebody screws up royally, make sure this always works by
adding a -fno-omit-frame-pointer here.
1995-10-20 20:05:15 +00:00
Poul-Henning Kamp
ee61b5a715 put the _getenv and _strncmp under #ifdef DEBUG, which is the only time
they are used.  Saves a few bytes here and there, nothing major.
1995-10-18 15:56:55 +00:00
David Greenman
14c175f7a9 Create a scrt0.o file that specifically excludes the shared-lib support.
This will be used for -static programs.
1995-10-18 04:19:00 +00:00
Nate Williams
4d2131fbc9 Fixup the "ld.so failed" message for the case when ld.so finds undefined
symbols.

An easy example to see this is to develop an X program which links
against Xt, but doesn't add -lX11 to the link line.  It will link fine,
but cause run-time errors by ld.so because of missing symbols used by Xt
defined in X11.  This patch makes the errors more readable.

Submitted by:	jdp@polstra.com (John Polstra)
1995-09-27 23:13:33 +00:00
Bruce Evans
97cefc5891 Install source files with the -c flag, not with the optional flag ${COPY}. 1995-08-06 12:37:41 +00:00
Bruce Evans
48cfb668fc Change install' to ${INSTALL}' so that default install flags can be
specified in the top level Makefiles.

Previously I missed dozens of Makefiles that skip the install after
using `cmp -s' to decide that the install isn't necessary.
1995-08-06 12:24:38 +00:00
Garrett Wollman
4fa53f8ca6 Numerous Makefile fixes:
1) Do dependencies.
2) Install all appropriate links to manual pages.
3) Install header file in `beforeinstall' like all the rest.
4) Install header file only if changed.
5) Install object files only if changed.
1995-06-30 15:30:35 +00:00
Doug Rabson
82aaeb09ad Change ld.so to correctly load dependant libraries for dlopen and unload them
on dlclose.  Also correctly call constructors and destructors for libraries
linked with /usr/lib/c++rt0.o.
Change interpretation of dlopen manpage to call _init() rather than init()
for dlopened objects.
Change c++rt0.o to avoid using atexit to call destructors, allowing dlclose to
call destructors when an object is unloaded.
Change interface between crt0 and ld.so to allow crt0 to call a function on
exit to call destructors for shared libraries explicitly.

These changes are backwards compatible.  Old binaries will work with the new
ld.so and new binaries will work with the old ld.so.  A version number has
been introduced in the crt0-ld.so interface to allow for future changes.

Reviewed by:	GAWollman, Craig Struble <cstruble@singularity.bevc.blacksburg.va.us>
1995-06-27 09:53:27 +00:00
Rodney W. Grimes
6c06b4e2aa Remove trailing whitespace. 1995-05-30 05:51:47 +00:00
Poul-Henning Kamp
139762f2be Install the dlopen.3 manpage. 1995-03-30 06:40:31 +00:00
Poul-Henning Kamp
e9434bccf7 Remove an unused variable. 1995-02-24 07:51:13 +00:00
Jordan K. Hubbard
f2c81e4dd7 Install the header files. 1995-02-09 08:00:20 +00:00