Date: Sun, 04 Feb 1996 00:48:29 +0800 From: Peter Wemm <peter@jhome.DIALix.COM> To: "Rodney W. Grimes" <rgrimes@GndRsh.aac.dev.com> Cc: bde@zeta.org.au (Bruce Evans), CVS-committers@freebsd.org, cvs-lib@freebsd.org, jdp@polstra.com, nate@sri.MT.net Subject: Re: cvs commit: src/lib/csu/i386 crt0.c Message-ID: <199602031648.AAA25239@jhome.DIALix.COM> In-Reply-To: Your message of "Sat, 03 Feb 1996 08:26:33 PST." <199602031626.IAA22687@GndRsh.aac.dev.com>
next in thread | previous in thread | raw e-mail | index | archive | help
>> >> >IMHO, the "safest" thing to do is ensure that we do all the compiling of th >e >> >utility programs to generate library code first, before we even touch >> >anything in /usr/lib or /usr/include. ie: (cd lib ; make depend) before >> >doing the CLOBBER in the libraries target. >> >> There's no guarantee that `make depend' creates all the utilities. It >> has to create most of them to get the dependencies right, however. >> >> If I ran `make world' a lot (I haven't tried it yet!) then I would >> remove the `make depend' step to speed it up a little. If NOCLEANDIR >> isn't defined, the .depend files are almost never used for `make world' >> because `make depend all' gives bogus dependencies for the `all' target >> (the .depend files don't exist when the dependencies are determined). > >You keep saying this, but it is not totally true, _especially_ when >this command is run from a high level in the source tree. > >Ie, cd /usr/src; make depend all; does infact DTRT as first a full sweep >over the src tree creating .depends is run, then a full pass over the >tree running make all (at this point the .depends do exist). > >There are several cases though that should be changed to: >make depend && make all. Like the kernel compile area for example. I use 'config -n' (because I'm very aware of the dependency sideeffects when I do this and manually clean either the files themselves or do a make clean.) and have always done a "make depend ; make all". It's good to know I haven't been wasting my keystrokes.. :-) Anyway, a slight diversion.. :-) A question about the original topic. :-) It seems that linker_sets are not constructed at run-time by the dynamic linker.. (although I could be wrong) Why can't we use a c++ style constructor? all gcc supplied "main()" code contains calls to __main() in libgcc.a. ie: foo.c: main() {} becomes foo.s: .file "foo.c" gcc2_compiled.: ___gnu_compiled_c: .text .align 2 .globl _main .type _main,@function _main: pushl %ebp movl %esp,%ebp call ___main L1: leave ret Lfe1: .size _main,Lfe1-_main So, 99.999% of the problems could be solved by using the built-in gcc "glue" for linking and calling c++ code from a "c" main. It also means we can put the init code inside only libc_r and it'll all "just work" without messing with libc at all. A "c++" constructor will appear and it will call the "c" thread_init() function. This is, of course, assuming that c++ constructors in dynamic loaded shared libs is "working".... -Peter >-- >Rod Grimes rgrimes@gndrsh.aac.dev.com >Accurate Automation Company Reliable computers for FreeBSD Cheers, -Peter
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199602031648.AAA25239>