Commit Graph

97 Commits

Author SHA1 Message Date
jdp
0d2a12bcaf 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
jdp
d790b6b749 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
jdp
a83e407889 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
simokawa
2c9b0d5ff2 Initialize __progname by argv[0] before striping leading path,
otherwise we always get empty name.
1999-01-19 06:58:31 +00:00
jdp
ffcc901f03 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
1e08e3b3da Strip the leading path from __progname.
Ok'd by:	jdp
1999-01-07 20:18:18 +00:00
bde
f67d0f0ce6 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
bde
f13120ec87 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
467e88b19d 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
jdp
5b11e2a2f4 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
jb
bc2aa8b61a Remove the bootstrap hack that prevented the use of the rtld. 1998-08-20 21:37:22 +00:00
bde
317c29f913 Fixed double slashes in pathnames. 1998-05-31 11:32:38 +00:00
sos
bc60c8025e 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
jb
69ae143f47 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
jb
6774bb7ee0 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
jb
ca539b1229 Bring these back from the dead. 1998-03-11 20:48:57 +00:00
jb
b776b60a03 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
jb
ccb7460b92 This commit was generated by cvs2svn to compensate for changes in r34484,
which included commits to RCS files with non-trunk default branches.
1998-03-11 20:36:11 +00:00
jb
c5a6510dda 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
jb
b12189af60 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
jb
8a94357dec 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
jb
8839778db0 This commit was generated by cvs2svn to compensate for changes in r34452,
which included commits to RCS files with non-trunk default branches.
1998-03-10 06:56:16 +00:00
jdp
9ab8e81807 This commit was generated by cvs2svn to compensate for changes in r34198,
which included commits to RCS files with non-trunk default branches.
1998-03-07 20:27:11 +00:00
jdp
d07afba3b3 Import C startup files for ELF support.
Submitted by:	John Polstra <jdp@polstra.com>
1998-03-07 20:27:11 +00:00
jdp
5a744a4713 Import C startup files for ELF support.
Submitted by:	John Polstra <jdp@polstra.com>
1998-03-07 20:27:11 +00:00
jdp
a73c0d4a85 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
jdp
4538098d0b 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
jdp
d5b09c81ec Implement dladdr. 1998-02-06 16:46:46 +00:00
eivind
9d57fd98be ${TARGET} -> ${.TARGET}
Tiny pointed hat goes to:	Our Makefile-meister.
1998-01-12 18:29:02 +00:00
cvs2svn
0506343883 This commit was manufactured by cvs2svn to create branch 'jb'. 1998-01-11 03:30:40 +00:00
jb
003a004c39 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
13d351d261 const correctness for dl*() 1997-11-22 03:34:46 +00:00
asami
3dfcb8cd24 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
wosch
8ee659dd96 Sort cross refereces in section SEE ALSO. 1997-09-29 19:11:55 +00:00
jdp
2ed649b29b Implement dlsym(RTLD_NEXT, symbol). 1997-08-02 04:56:44 +00:00
msmith
025fcb755f 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
jdp
72875e2a08 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
jdp
1eeccd0067 Fix an error in the previous revision that caused make world breakage. 1997-04-02 16:49:18 +00:00
bde
0be4160258 Simplified install rule. 1997-04-01 13:53:16 +00:00
peter
6b08958c64 Revert $FreeBSD$ to $Id$ 1997-02-22 15:12:41 +00:00
jkh
808a36ef65 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
jdp
9083c9a4a0 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
jdp
4a8aa087c2 Add definitions of RTLD_LAZY and RTLD_NOW. 1997-01-12 18:37:46 +00:00
jdp
db2ad2c9ac 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
bde
ed911d0bba 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
b149fa7d4b 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
scrappy
a7a5567c4d 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
be4c09c465 Remove garbage initcode reference so that 'gcc -Dlint ...'
will compile without error.
1996-10-06 03:19:26 +00:00
peter
2242c2dae2 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
d24d89b928 cmp -s || install -c --> install -C 1996-08-30 01:41:52 +00:00