_why_ does the UNIX linker not distinguish text and data addresses???
Stephen Clamage
steve at taumet.com
Wed Aug 1 02:25:17 AEST 1990
levy at mtcchi.uucp (Daniel R. Levy) writes:
|::::::::::::::
|a.c
|::::::::::::::
|main()
|{
| (void) bogus();
|}
|::::::::::::::
|b.c
|::::::::::::::
|int bogus;
Traditional Unix object-file formats, and thus the linkers, are very
simple-minded. They certainly could distinguish between text and
data addresses, but simply don't. It is up to the programmer, even
in ANSI C, to take care that extern declarations/definitions in separate
compilation units match. Lint will generally pick up mismatches.
In C++, BTW, this example will fail at link time no matter what linker
is used, since the type of the function is encoded by the compiler into
its true external name.
--
Steve Clamage, TauMetric Corp, steve at taumet.com
More information about the Comp.unix.wizards
mailing list