|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T t
Length: 2834 (0xb12) Types: TextFile Names: »test.hello.cc«
└─⟦a05ed705a⟧ Bits:30007078 DKUUG GNU 2/12/89 └─⟦cc8755de2⟧ »./libg++-1.36.1.tar.Z« └─⟦23757c458⟧ └─⟦this⟧ »libg++/tests/test.hello.cc«
// This file tests the installation of the GNU C++ compiler system. // In order for this file to be compiled successfully, the compiler // driver (g++) must have execute paths to the preprocessor (cpp+) // and the compiler (c++), as well as the loader (ld++) and the // special run-time library (crt0+.o). In addition, the library // gnulib+ is needed to provide functions such as "_builtin_new" // and "_builtin_delete". #include "test0.h" extern "C" { #include <a.out.h> } #include <sys/file.h> #if defined(USG) && !defined(hpux) #define exec aouthdr #define a_text text_start #define a_data data_start #endif class tfile { public: char tname[L_tmpnam]; static char *orig_name; char *this_name; struct exec header; tfile (char*); ~tfile (); void* load (); }; tfile::tfile (char *p) { int fd; strcpy (tname, "hack.XXXXXX"); mktemp (tname); this_name = new char[strlen (p) + 1]; strcpy (this_name, p); if ((fd = open (this_name, 2, 0)) < 0) { fprintf (stderr, "Unable to open file %s\n", p); exit (1); } if (read (fd, (void*) &header, sizeof (header)) <= 0) { fprintf (stderr, "Error in reading file %s\n", p); } close (fd); } tfile::~tfile () { unlink (tname); } void *tfile::load () { int size = header.a_text + header.a_data; #ifdef EXEC_PAGESIZE int pagsiz = EXEC_PAGESIZE; #elif !defined(PAGSIZ) int pagsiz = getpagesize(); #else int pagsiz = PAGSIZ; #endif if (size < (pagsiz)) size = (pagsiz); int init_fn = (int) new short[size]; init_fn += pagsiz-1; init_fn &= ~(pagsiz-1); fprintf (stderr, "\n ... timing incremental load...\n"); char command[512], *cmd = command; sprintf (cmd, "time %s -N -A %s -T %x %s %s -o %s -lg++ -lc", LDXX, orig_name, init_fn, CRT1X, this_name, tname); if (system (cmd)) { fprintf (stderr, "Error in linking file bye\n"); delete this; exit (1); } int fd = open (tname, 2, 0); if (lseek (fd, sizeof (header), L_SET) < 0) { perror ("Error in temp file seek\n"); delete this; exit (1); } read (fd, (char*) init_fn, size); close (fd); fprintf (stderr, "load symbol-table at address 0x%x\n", init_fn); return (void *)init_fn; } ifile in ("/dev/tty"); ofile out ("/dev/tty"); main (int, char *argv[]) { char buf[4096]; out << "Enter file to link: (test.bye or test.bye2 or test.shell)\n"; in >> buf; out << "Hello! linking `" << buf << "'...\n"; tfile::orig_name = argv[0]; tfile temp (buf); register void (*init_fn)() = temp.load (); fprintf (stderr, "\n if execution now aborts, your crt1+.o is bad\n"); (*init_fn) (); out << "Enter another file to link: "; in >> buf; out << "Hello! linking `" << buf << "'...\n"; tfile temp2 (buf); init_fn = temp2.load (); (*init_fn)(); }