Thread View: gnu.g++.bug
1 messages
1 total messages
Started by Skip Montanaro
Fri, 21 Oct 1988 02:28
Problem running libg++/test0 using GNU C++ 1.27.0
Author: Skip Montanaro
Date: Fri, 21 Oct 1988 02:28
Date: Fri, 21 Oct 1988 02:28
1162 lines
32875 bytes
32875 bytes
I tried sending the following to Doug Lea, but it bounced. (I think I muffed
the address.) Doug, if you're out there (or anyone else who's got any idea
what's going on):
I'm trying to build libg++ 1.25.0 using GNU C++ 1.27.0 and GCC 1.27.
When run, test0 gets a segmentation fault in fprintf (Environment ==
Sun-3/260 running SunOS 3.4):
----------
sprite% test0
Memory fault - core dumped
sprite% gdbplus test0 core
GDB 2.8.0 (GNU C++ 1.27.0 compatible), Copyright (C) 1988 Free Software
Foundation, Inc.
There is ABSOLUTELY NO WARRANTY for GDB; type "info warranty" for details.
GDB is free software and you are welcome to distribute copies of it
under certain conditions; type "info copying" to see the conditions.
Reading symbol data from /usr/karnack/u6/montnaro/libg++-1.25.0/test0...done.
Core file is from "test0".
Program terminated with signal 11, Segmentation fault.
Type "help" for a list of commands.
(gdb+) bt
#0 0x4b58 in fprintf ()
#1 0x2200 in op$alshift_expr_PSofile_PQI ($this=(struct ofile *) 0x20034, p=(char *) 0x2652 "Enter file to link: (test.bye or test.bye2 or test.shell)\n") (test0.h line 69)
#2 0x270a in main ((anon)=1, argv=(char **) 0xefff7f8) (test.hello.cc line 107)
(gdb+)
----------
I also get warnings when compiling test0 :
----------
cd /usr/karnack/u3/montnaro/u6/libg++-1.25.0/
make test0
/usr/karnack/u6/montnaro/g++/bin/g++ -c -v -g -O -fchar-charconst -B/usr/karnack/u6/montnaro/g++/bin/ test.hello.cc -o test.hello.o
g++ version 1.27.0
/usr/karnack/u6/montnaro/g++/lib/gcc-cpp+ -v -undef -D__GNU__ -D__GNUG__ -Dmc68000 -Dsun -Dunix -D__OPTIMIZE__ test.hello.cc /tmp/cca02915.cpp
GNU CPP version 1.27.0
/usr/karnack/u6/montnaro/g++/lib/gcc-c++ /tmp/cca02915.cpp -quiet -dumpbase test.hello.cc -fchar-charconst -opt -version -G -o /tmp/cca02915.s
GNU C++ version 1.27.0 (68k, MIT syntax) compiled by GNU C version 1.27.
At top level:
/usr/include/sys/fcntl.h:64: warning: type declaration of flock shadows previous declaration
/usr/include/sys/fcntl.h:64: warning: `flock' was declared `extern' and later `static'
test.hello.cc:114: warning: initialization between incompatible pointer types
test.hello.cc:123: warning: assignment between incompatible pointer types
as -mc68020 /tmp/cca02915.s -o test.hello.o
install -c dummylibg++.a /usr/karnack/u6/montnaro/g++/lib/libg++.a
ranlib /usr/karnack/u6/montnaro/g++/lib/libg++.a
/usr/karnack/u6/montnaro/g++/bin/g++ -v -g -O -fchar-charconst -B/usr/karnack/u6/montnaro/g++/bin/ test.hello.o -o test0
g++ version 1.27.0
/usr/karnack/u6/montnaro/g++/lib/gcc-ld++ -C -o test0 /lib/crt0.o /lib/Mcrt1.o test.hello.o -lg++ /usr/karnack/u6/montnaro/g++/lib/gcc-gnulib+ -lg -lc
please run test0 and follow instructions
Compilation finished at Mon Oct 17 16:01:25
----------
As far as I can tell, I've got GNU C++ installed properly. Notice that
bindir and libdir are different than the distribution. This is so I can test
the new version before final installation. I discovered a couple problems.
One, there were some hard-coded references to /usr/local/lib scattered
throughout the code. Two, _test0_message was undefined, because
/usr/local/lib was being searched first and an old version of libg++.a (from
1.21.0) was being used. I eventually resorted to renaming all G++-related
files in /usr/local/lib to *-1.21.0 to prevent that from occurring, however,
I'm still getting core dumps. I guess my next step will be to actually
install G++ in the production directories before testing, but I'd rather
avoid that if possible.
Further investigation with gdb+ shows that the fp class variable in the
ofile class is apparently not getting initialized (i.e., out.fp == 0), so
when
out << "...";
gets executed, fprintf gets called with a NULL stream arg. Since all the
constructor/destructor stuff is implicit, it looks like there's a bug in GNU
C++. I can't see any call to initialize out's private variables before the
first use of out when I examine test.hello.s.
Any help would be appreciated. Test.hello.cc (after cpp+ and squishing blank
lines) and test.hello.s follow.
test.hello.cc:
-------------
sprite% ../g++/bin/g++ -v -B../g++/lib/ -E test.hello.cc
g++ version 1.27.0
/usr/karnack/u6/montnaro/g++/lib/gcc-cpp+ -v -undef -D__GNU__ -D__GNUG__ -Dmc68000 -Dsun -Dunix test.hello.cc
GNU CPP version 1.27.0
# 1 "test.hello.cc"
# 1 "test0.h"
# 1 "/usr/karnack/u6/montnaro/g++/lib/g++-include/std.h"
overload abs;
extern void _exit (int) asm ("_" "_exit") ;
extern void abort () asm ("_" "abort") ;
extern int abs (int) asm ("_" "abs") ;
extern int access (const char*, int) asm ("_" "access") ;
extern int acct (const char*) asm ("_" "acct") ;
extern unsigned alarm (unsigned) asm ("_" "alarm") ;
extern void* alloca (int) asm ("_" "alloca") ;
extern double atof (const char*) asm ("_" "atof") ;
extern int atoi (const char*) asm ("_" "atoi") ;
extern long atol (const char*) asm ("_" "atol") ;
extern int bcmp (const void*, const void*, int) asm ("_" "bcmp") ;
extern int bcopy (const void*, void*, int) asm ("_" "bcopy") ;
extern void* brk (void*) asm ("_" "brk") ;
extern int bzero (void*, int) asm ("_" "bzero") ;
extern void* calloc (unsigned, unsigned) asm ("_" "calloc") ;
extern void cfree (void*) asm ("_" "cfree") ;
extern int chdir (const char*) asm ("_" "chdir") ;
extern int chmod (const char*, int) asm ("_" "chmod") ;
extern int chown (const char*, int, int) asm ("_" "chown") ;
extern long clock () asm ("_" "clock") ;
extern int close (int) asm ("_" "close") ;
extern int creat (const char*, int) asm ("_" "creat") ;
extern char* crypt (const char*, const char*) asm ("_" "crypt") ;
extern char* ctermid (char*) asm ("_" "ctermid") ;
extern char* cuserid (char*) asm ("_" "cuserid") ;
extern double drand48 () asm ("_" "drand48") ;
extern int dup (int) asm ("_" "dup") ;
extern int dup2 (int, int) asm ("_" "dup2") ;
extern int dysize (int) asm ("_" "dysize") ;
extern char* ecvt (double, int, int*, int*) asm ("_" "ecvt") ;
extern char* encrypt (char*, int) asm ("_" "encrypt") ;
extern double erand (short*) asm ("_" "erand") ;
extern int execl (const char*, const char *, ...) asm ("_" "execl") ;
extern int execle (const char*, const char *, ...) asm ("_" "execle") ;
extern int execlp (const char*, const char*, ...) asm ("_" "execlp") ;
extern int exect (const char*, const char**, char**) asm ("_" "exect") ;
extern int execv (const char*, const char**) asm ("_" "execv") ;
extern int execve (const char*, const char**, char**) asm ("_" "execve") ;
extern int execvp (const char*, const char**) asm ("_" "execvp") ;
extern void exit (int) asm ("_" "exit") ;
extern int fchmod (int, int) asm ("_" "fchmod") ;
extern int fchown (int, int, int) asm ("_" "fchown") ;
extern int fcntl (int, int, int) asm ("_" "fcntl") ;
extern char* fcvt (double, int, int*, int*) asm ("_" "fcvt") ;
extern int ffs (int) asm ("_" "ffs") ;
extern int flock (int, int) asm ("_" "flock") ;
extern int fork () asm ("_" "fork") ;
extern void free (void*) asm ("_" "free") ;
extern int fsync (int) asm ("_" "fsync") ;
extern long ftok (const char*, int) asm ("_" "ftok") ;
extern int ftruncate (int, unsigned long) asm ("_" "ftruncate") ;
extern char* gcvt (double, int, char*) asm ("_" "gcvt") ;
extern char* getcwd (char*, int) asm ("_" "getcwd") ;
extern int getdomainname (char*, int) asm ("_" "getdomainname") ;
extern int getdtablesize () asm ("_" "getdtablesize") ;
extern int getegid () asm ("_" "getegid") ;
extern char* getenv (const char*) asm ("_" "getenv") ;
extern int geteuid () asm ("_" "geteuid") ;
extern int getgid () asm ("_" "getgid") ;
extern int getgroups (int, int*) asm ("_" "getgroups") ;
extern long gethostid () asm ("_" "gethostid") ;
extern int gethostname (char*, int) asm ("_" "gethostname") ;
extern char* getlogin () asm ("_" "getlogin") ;
extern int getopt (int, char**, char*) asm ("_" "getopt") ;
extern int getpagesize () asm ("_" "getpagesize") ;
extern char* getpass (const char*) asm ("_" "getpass") ;
extern int getpgrp () asm ("_" "getpgrp") ;
extern int getpid () asm ("_" "getpid") ;
extern int getppid () asm ("_" "getppid") ;
extern int getpriority (int, int) asm ("_" "getpriority") ;
extern int getpw (int, char*) asm ("_" "getpw") ;
extern unsigned getuid () asm ("_" "getuid") ;
extern char* getwd (const char*) asm ("_" "getwd") ;
extern char* index (const char*, int) asm ("_" "index") ;
extern char* initstate (unsigned, char*, int) asm ("_" "initstate") ;
extern int ioctl (int, int, char*) asm ("_" "ioctl") ;
extern int isatty (int) asm ("_" "isatty") ;
extern long jrand48 (short*) asm ("_" "jrand48") ;
extern int kill (int, int) asm ("_" "kill") ;
extern int killpg (int, int) asm ("_" "killpg") ;
extern void lcong48 (short*) asm ("_" "lcong48") ;
extern int link (const char*, const char*) asm ("_" "link") ;
extern int lock (int, int, long) asm ("_" "lock") ;
extern long lrand48 () asm ("_" "lrand48") ;
extern long lseek (int, long, int) asm ("_" "lseek") ;
extern void* malloc (unsigned) asm ("_" "malloc") ;
extern void* memalign (unsigned, unsigned) asm ("_" "memalign") ;
extern void* memccpy (void*, const void*, int, int) asm ("_" "memccpy") ;
extern void* memchr (const void*, int, int) asm ("_" "memchr") ;
extern int memcmp (const void*, const void*, int) asm ("_" "memcmp") ;
extern void* memcpy (void*, const void*, int) asm ("_" "memcpy") ;
extern void* memset (void*, int, int) asm ("_" "memset") ;
extern int mkdir (const char*, int) asm ("_" "mkdir") ;
extern int mknod (const char*, int, int) asm ("_" "mknod") ;
extern char* mkstemp (char*) asm ("_" "mkstemp") ;
extern char* mktemp (char*) asm ("_" "mktemp") ;
extern long mrand48 () asm ("_" "mrand48") ;
extern int nice (int) asm ("_" "nice") ;
extern long nrand48 (short*) asm ("_" "nrand48") ;
extern int open (const char*, int, ...) asm ("_" "open") ;
extern void pause () asm ("_" "pause") ;
extern void perror (const char*) asm ("_" "perror") ;
extern int pipe (int*) asm ("_" "pipe") ;
extern void profil (char*, int, int, int) asm ("_" "profil") ;
extern int psignal (unsigned, char*) asm ("_" "psignal") ;
extern int ptrace (int, int, int, int) asm ("_" "ptrace") ;
extern int putenv (const char*) asm ("_" "putenv") ;
extern int rand () asm ("_" "rand") ;
extern long random () asm ("_" "random") ;
extern int read (int, void*, unsigned) asm ("_" "read") ;
extern int readlink (const char*, char*, int) asm ("_" "readlink") ;
extern void* realloc (void*, unsigned) asm ("_" "realloc") ;
extern int rename (const char*, const char*) asm ("_" "rename") ;
extern char* rindex (const char*, int) asm ("_" "rindex") ;
extern int rmdir (const char*) asm ("_" "rmdir") ;
extern void* sbrk (int) asm ("_" "sbrk") ;
extern short* seed48 (short*) asm ("_" "seed48") ;
extern int send (int, char*, int, int) asm ("_" "send") ;
extern int setgid (int) asm ("_" "setgid") ;
extern int sethostname (char*, int) asm ("_" "sethostname") ;
extern int setkey (const char*) asm ("_" "setkey") ;
extern int setpgrp (int, int) asm ("_" "setpgrp") ;
extern int setpriority (int, int, int) asm ("_" "setpriority") ;
extern int setregid (int, int) asm ("_" "setregid") ;
extern int setreuid (int, int) asm ("_" "setreuid") ;
extern char* setstate (char*) asm ("_" "setstate") ;
extern int setuid (int) asm ("_" "setuid") ;
extern int sigblock (int) asm ("_" "sigblock") ;
extern int siginterrupt (int, int) asm ("_" "siginterrupt") ;
extern int sigpause (int) asm ("_" "sigpause") ;
extern int sigsetmask (int) asm ("_" "sigsetmask") ;
extern unsigned sleep (unsigned) asm ("_" "sleep") ;
extern int srand (int) asm ("_" "srand") ;
extern void srand48 (long) asm ("_" "srand48") ;
extern void srandom (int) asm ("_" "srandom") ;
extern int stime (long*) asm ("_" "stime") ;
extern char* strcat (char*, const char*) asm ("_" "strcat") ;
extern char* strchr (const char*, int) asm ("_" "strchr") ;
extern int strcmp (const char*, const char*) asm ("_" "strcmp") ;
extern char* strcpy (char*, const char*) asm ("_" "strcpy") ;
extern int strcspn (const char*, const char*) asm ("_" "strcspn") ;
extern char* strdup (const char*) asm ("_" "strdup") ;
extern int strlen (const char*) asm ("_" "strlen") ;
extern char* strncat (char*, const char*, int) asm ("_" "strncat") ;
extern int strncmp (const char*, const char*, int) asm ("_" "strncmp") ;
extern char* strncpy (char*, const char*, int) asm ("_" "strncpy") ;
extern char* strpbrk (const char*, const char*) asm ("_" "strpbrk") ;
extern char* strrchr (const char*, int) asm ("_" "strrchr") ;
extern int strspn (const char*, const char*) asm ("_" "strspn") ;
extern double strtod (const char*, char**) asm ("_" "strtod") ;
extern char* strtok (char*, const char*) asm ("_" "strtok") ;
extern long strtol (const char*, char**, int) asm ("_" "strtol") ;
extern void swab (void*, void*, int) asm ("_" "swab") ;
extern int symlink (const char*, const char*) asm ("_" "symlink") ;
extern int syscall (int, ...) asm ("_" "syscall") ;
extern int system (const char*) asm ("_" "system") ;
extern char* tempnam (char*, char*) asm ("_" "tempnam") ;
extern long time (long*) asm ("_" "time") ;
extern char* tmpnam (char*) asm ("_" "tmpnam") ;
extern int truncate (const char*, unsigned long) asm ("_" "truncate") ;
extern char* ttyname (int) asm ("_" "ttyname") ;
extern int ttyslot () asm ("_" "ttyslot") ;
extern unsigned ualarm (unsigned, unsigned) asm ("_" "ualarm") ;
extern long ulimit (int, long) asm ("_" "ulimit") ;
extern int umask (int) asm ("_" "umask") ;
extern int unlink (const char*) asm ("_" "unlink") ;
extern unsigned usleep (unsigned) asm ("_" "usleep") ;
extern int vadvise (int) asm ("_" "vadvise") ;
extern void* valloc (unsigned) asm ("_" "valloc") ;
extern int vfork () asm ("_" "vfork") ;
extern int vhangup () asm ("_" "vhangup") ;
extern int wait (int*) asm ("_" "wait") ;
extern int write (int, const void*, unsigned) asm ("_" "write") ;
extern char** environ;
extern int errno;
extern char* sys_errlist[];
extern int sys_nerr;
extern char* optarg;
extern int opterr;
extern int optind;
# 1 "test0.h"
# 1 "/usr/karnack/u6/montnaro/g++/lib/g++-include/stdio.h"
extern struct _iobuf {
int _cnt;
char* _ptr;
char* _base;
int _bufsiz;
short _flag;
char _file;
} _iob[];
extern int _doprnt(const char*, void*, struct _iobuf *);
extern int _doscan( struct _iobuf *, const char*, void*);
extern int _filbuf( struct _iobuf *);
extern int _flsbuf(unsigned, struct _iobuf *);
extern int fclose( struct _iobuf *);
extern struct _iobuf * fdopen(int, const char*);
extern int fflush( struct _iobuf *);
extern int fgetc( struct _iobuf *);
extern char* fgets(char*, int, struct _iobuf *);
extern struct _iobuf * fopen(const char*, const char*);
extern int fprintf( struct _iobuf *, const char* ...);
extern int fputc(int, struct _iobuf *);
extern int fputs(const char*, struct _iobuf *);
extern int fread(void*, int, int, struct _iobuf *);
extern struct _iobuf * freopen(const char*, const char*, struct _iobuf *);
extern int fscanf( struct _iobuf *, const char* ...);
extern int fseek( struct _iobuf *, long, int);
extern long ftell( struct _iobuf *);
extern int fwrite(const void*, int, int, struct _iobuf *);
extern char* gets(char*);
extern int getw( struct _iobuf *);
extern int pclose( struct _iobuf *);
extern struct _iobuf * popen(const char*, const char*);
extern int printf(const char* ...);
extern void puts(const char*);
extern int putw(int, struct _iobuf *);
extern int scanf(const char* ...);
extern void setbuf( struct _iobuf *, char*);
extern void setbuffer( struct _iobuf *, char*, int);
extern void setlinebuf( struct _iobuf *);
extern void setvbuf( struct _iobuf *, char*, int, int);
extern int sscanf(char*, const char* ...);
extern struct _iobuf * tmpfile();
extern int ungetc(int, struct _iobuf *);
extern int vfprintf( struct _iobuf *, const char*, void* ap);
extern int vprintf(const char*, void* ap);
extern int vsprintf(char*, const char*, void* ap);
extern int sprintf(char*, const char* ...);
# 2 "test0.h"
# 1 "/usr/karnack/u6/montnaro/g++/lib/g++-include/stddef.h"
enum bool
{
FALSE = 0,
TRUE = 1
};
typedef void (*one_arg_error_handler_t)(char*);
# 3 "test0.h"
class ifile
{
struct _iobuf *fp;
char *name;
public:
ifile (char *name)
{
this->name = new char[strlen(name) + 1];
strcpy (this->name, name);
if ((fp = fopen (name, "r")) == 0 )
{
fprintf ( (&_iob[2]) , "could not open input file `%s'\n", name);
exit (1);
}
}
~ifile ()
{
fclose (fp);
if (fp) fprintf ( (&_iob[2]) , "closing input file `%s'\n", name);
}
ifile& operator>> (int &i)
{ fscanf (fp, "%d", &i); return *this; }
ifile& operator>> (char *p)
{ fscanf (fp, "%s", p); return *this; }
};
class ofile
{
struct _iobuf *fp;
char *name;
public:
ofile (char *name)
{
this->name = new char[strlen(name) + 1];
strcpy (this->name, name);
if ((fp = fopen (name, "w")) == 0 )
{
fprintf ( (&_iob[2]) , "could not open output file `%s'\n", name);
exit (1);
}
}
~ofile ()
{
fclose (fp);
if (fp) fprintf ( (&_iob[2]) , "closing output file `%s'\n", name);
}
ofile& operator<< (int i)
{
fprintf (fp, "%d", i);
fflush (fp);
return *this;
}
ofile& operator<< (char *p)
{
fprintf (fp, "%s", p);
fflush (fp);
return *this;
}
};
# 9 "test.hello.cc"
# 1 "/usr/include/a.out.h"
# 1 "/usr/include/sys/exec.h"
struct exec {
unsigned short a_machtype;
unsigned short a_magic;
unsigned long a_text;
unsigned long a_data;
unsigned long a_bss;
unsigned long a_syms;
unsigned long a_entry;
unsigned long a_trsize;
unsigned long a_drsize;
};
# 3 "/usr/include/a.out.h"
struct relocation_info {
long r_address;
unsigned int r_symbolnum:24,
r_pcrel:1,
r_length:2,
r_extern:1,
:4;
};
struct nlist {
union {
char *n_name;
long n_strx;
} n_un;
unsigned char n_type;
char n_other;
short n_desc;
unsigned long n_value;
};
# 10 "test.hello.cc"
# 1 "/usr/include/sys/file.h"
# 1 "/usr/include/sys/fcntl.h"
struct flock {
short l_type;
short l_whence;
long l_start;
long l_len;
short l_pid;
short l_xxx;
};
# 9 "/usr/include/sys/file.h"
# 37 "/usr/include/sys/file.h"
# 84 "/usr/include/sys/file.h"
# 11 "test.hello.cc"
void test0_message();
class tfile
{
char tname[ (sizeof( "/tmp/" ) + 15) ];
static char *orig_name;
char *this_name;
exec header;
public:
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 ( (&_iob[2]) , "Unable to open file %s\n", p);
exit (1);
}
if (read (fd, (void*) &header, sizeof (header)) <= 0)
{
fprintf ( (&_iob[2]) , "Error in reading file %s\n", p);
}
close (fd);
}
tfile::~tfile ()
{
unlink (tname);
}
void *tfile::load ()
{
int size = header.a_text + header.a_data;
int pagsiz = 0x2000 ;
if (size < (pagsiz))
size = (pagsiz);
int init_fn = (int) new short[size];
init_fn += pagsiz-1;
init_fn &= ~(pagsiz-1);
fprintf ( (&_iob[2]) , "\n ... timing incremental load...\n");
char command[512], *cmd = command;
sprintf (cmd, "time %s -C -N -A %s -T %x %s %s -o %s",
"/usr/karnack/u6/montnaro/g++/lib/gcc-ld++" , orig_name, init_fn, "/usr/karnack/u6/montnaro/g++/lib/gcc-crt1+.o" , this_name, tname);
if (system (cmd))
{
fprintf ( (&_iob[2]) , "Error in linking file bye\n");
delete this;
exit (1);
}
int fd = open (tname, 2, 0);
if (lseek (fd, sizeof (header), 0 ) < 0)
{
perror ("Error in temp file seek\n");
delete this;
exit (1);
}
read (fd, (char*) init_fn, size);
close (fd);
fprintf ( (&_iob[2]) , "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 ( (&_iob[2]) , "\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)();
test0_message();
}
test.hello.s:
-------------
#NO_APP
.text
LC0:
.ascii "%s\0"
.even
_op$arshift_expr_PSifile_PQI:
link a6,#0
movel d2,sp@-
movel a6@(12),sp@-
pea LC0
movel a6@(8),a0
movel a0@,sp@-
jbsr _fscanf
movel a6@(8),d2
movel d2,d0
addw #12,sp
jra L1
L1:
movel a6@(-4),d2
unlk a6
rts
LC1:
.ascii "%d\0"
.even
_op$arshift_expr_PSifile_SI:
link a6,#0
movel d2,sp@-
movel a6@(12),sp@-
pea LC1
movel a6@(8),a0
movel a0@,sp@-
jbsr _fscanf
movel a6@(8),d2
movel d2,d0
addw #12,sp
jra L2
L2:
movel a6@(-4),d2
unlk a6
rts
LC2:
.ascii "r\0"
LC3:
.ascii "could not open input file `%s'\12\0"
.even
_ifile_PSifile_PQI:
link a6,#0
movel d2,sp@-
tstl a6@(8)
jne L5
pea 8:w
jbsr ___builtin_new
movel d0,a6@(8)
addqw #4,sp
L5:
movel a6@(12),sp@-
jbsr _strlen
movel d0,d0
addql #1,d0
movel d0,sp@-
jbsr ___builtin_new
movel d0,d0
movel a6@(8),a0
movel d0,a0@(4)
movel a6@(12),sp@-
movel a6@(8),a0
movel a0@(4),sp@-
jbsr _strcpy
pea LC2
movel a6@(12),sp@-
jbsr _fopen
movel d0,d0
movel a6@(8),a0
movel d0,d0
movel d0,a0@
addw #24,sp
tstl d0
jne L4
movel a6@(12),sp@-
pea LC3
moveq #40,d0
addl #__iob,d0
movel d0,sp@-
jbsr _fprintf
pea 1:w
jbsr _exit
addw #16,sp
L4:
movel a6@(8),d2
movel d2,d0
jra L3
L3:
movel a6@(-4),d2
unlk a6
rts
LC4:
.ascii "closing input file `%s'\12\0"
.even
__$_ifile:
link a6,#0
tstl a6@(8)
jeq L9
movel a6@(8),a0
movel a0@,sp@-
jbsr _fclose
movel a6@(8),a0
addqw #4,sp
tstl a0@
jeq L7
movel a6@(8),a0
movel a0@(4),sp@-
pea LC4
moveq #40,d0
addl #__iob,d0
movel d0,sp@-
jbsr _fprintf
addw #12,sp
L7:
tstl a6@(12)
jeq L8
L8:
L9:
L6:
unlk a6
rts
.even
_op$alshift_expr_PSofile_PQI:
link a6,#0
movel d2,sp@-
movel a6@(12),sp@-
pea LC0
movel a6@(8),a0
movel a0@,sp@-
jbsr _fprintf
movel a6@(8),a0
movel a0@,sp@-
jbsr _fflush
movel a6@(8),d2
movel d2,d0
addw #16,sp
jra L10
L10:
movel a6@(-4),d2
unlk a6
rts
.even
_op$alshift_expr_PSofile_SI:
link a6,#0
movel d2,sp@-
movel a6@(12),sp@-
pea LC1
movel a6@(8),a0
movel a0@,sp@-
jbsr _fprintf
movel a6@(8),a0
movel a0@,sp@-
jbsr _fflush
movel a6@(8),d2
movel d2,d0
addw #16,sp
jra L11
L11:
movel a6@(-4),d2
unlk a6
rts
LC5:
.ascii "w\0"
LC6:
.ascii "could not open output file `%s'\12\0"
.even
_ofile_PSofile_PQI:
link a6,#0
movel d2,sp@-
tstl a6@(8)
jne L14
pea 8:w
jbsr ___builtin_new
movel d0,a6@(8)
addqw #4,sp
L14:
movel a6@(12),sp@-
jbsr _strlen
movel d0,d0
addql #1,d0
movel d0,sp@-
jbsr ___builtin_new
movel d0,d0
movel a6@(8),a0
movel d0,a0@(4)
movel a6@(12),sp@-
movel a6@(8),a0
movel a0@(4),sp@-
jbsr _strcpy
pea LC5
movel a6@(12),sp@-
jbsr _fopen
movel d0,d0
movel a6@(8),a0
movel d0,d0
movel d0,a0@
addw #24,sp
tstl d0
jne L13
movel a6@(12),sp@-
pea LC6
moveq #40,d0
addl #__iob,d0
movel d0,sp@-
jbsr _fprintf
pea 1:w
jbsr _exit
addw #16,sp
L13:
movel a6@(8),d2
movel d2,d0
jra L12
L12:
movel a6@(-4),d2
unlk a6
rts
LC7:
.ascii "closing output file `%s'\12\0"
.even
__$_ofile:
link a6,#0
tstl a6@(8)
jeq L18
movel a6@(8),a0
movel a0@,sp@-
jbsr _fclose
movel a6@(8),a0
addqw #4,sp
tstl a0@
jeq L16
movel a6@(8),a0
movel a0@(4),sp@-
pea LC7
moveq #40,d0
addl #__iob,d0
movel d0,sp@-
jbsr _fprintf
addw #12,sp
L16:
tstl a6@(12)
jeq L17
L17:
L18:
L15:
unlk a6
rts
LC8:
.ascii "hack.XXXXXX\0"
LC9:
.ascii "Unable to open file %s\12\0"
LC10:
.ascii "Error in reading file %s\12\0"
.even
.globl _tfile_PStfile_PQI
_tfile_PStfile_PQI:
link a6,#-4
movel d2,sp@-
tstl a6@(8)
jne L22
pea 58:w
jbsr ___builtin_new
movel d0,a6@(8)
addqw #4,sp
L22:
pea LC8
movel a6@(8),d0
movel d0,sp@-
jbsr _strcpy
movel a6@(8),d0
movel d0,sp@-
jbsr _mktemp
movel a6@(12),sp@-
jbsr _strlen
movel d0,d0
addql #1,d0
movel d0,sp@-
jbsr ___builtin_new
movel d0,d0
movel a6@(8),a0
movel d0,a0@(22)
movel a6@(12),sp@-
movel a6@(8),a0
movel a0@(22),sp@-
jbsr _strcpy
clrl sp@-
pea 2:w
movel a6@(8),a0
movel a0@(22),sp@-
jbsr _open
movel d0,d0
movel d0,d0
movel d0,a6@(-4)
addw #40,sp
tstl d0
jge L20
movel a6@(12),sp@-
pea LC9
moveq #40,d0
addl #__iob,d0
movel d0,sp@-
jbsr _fprintf
pea 1:w
jbsr _exit
addw #16,sp
L20:
pea 32:w
moveq #26,d0
addl a6@(8),d0
movel d0,sp@-
movel a6@(-4),sp@-
jbsr _read
movel d0,d0
addw #12,sp
tstl d0
jgt L21
movel a6@(12),sp@-
pea LC10
moveq #40,d0
addl #__iob,d0
movel d0,sp@-
jbsr _fprintf
addw #12,sp
L21:
movel a6@(-4),sp@-
jbsr _close
addqw #4,sp
movel a6@(8),d2
movel d2,d0
jra L19
L19:
movel a6@(-8),d2
unlk a6
rts
.even
.globl __$_tfile
__$_tfile:
link a6,#0
tstl a6@(8)
jeq L25
movel a6@(8),d0
movel d0,sp@-
jbsr _unlink
addqw #4,sp
tstl a6@(12)
jeq L24
L24:
L25:
L23:
unlk a6
rts
LC11:
.ascii "\12 ... timing incremental load...\12\0"
LC12:
.ascii "/usr/karnack/u6/montnaro/g++/lib/gcc-crt1+.o\0"
LC13:
.ascii "/usr/karnack/u6/montnaro/g++/lib/gcc-ld++\0"
LC14:
.ascii "time %s -C -N -A %s -T %x %s %s -o %s\0"
LC15:
.ascii "Error in linking file bye\12\0"
LC16:
.ascii "Error in temp file seek\12\0"
LC17:
.ascii "load symbol-table at address 0x%x\12\0"
.even
.globl _load_PStfile
_load_PStfile:
link a6,#-532
movel d2,sp@-
movel a6@(8),a0
movel a6@(8),a1
movel a0@(30),d1
addl a1@(34),d1
movel d1,a6@(-4)
movel #8192,a6@(-8)
movel a6@(-4),d1
cmpl a6@(-8),d1
jge L27
movel a6@(-8),a6@(-4)
L27:
movel a6@(-4),d0
asll #1,d0
movel d0,sp@-
jbsr ___builtin_new
movel d0,a6@(-12)
movel d0,d0
subql #1,d0
movel d0,d1
addl a6@(-8),d1
movel d1,a6@(-12)
movel a6@(-8),d0
subql #1,d0
notl d0
andl d0,a6@(-12)
pea LC11
moveq #40,d0
addl #__iob,d0
movel d0,sp@-
jbsr _fprintf
movel a6,d1
addl #-524,d1
movel d1,a6@(-528)
movel a6@(8),d0
movel d0,sp@-
movel a6@(8),a0
movel a0@(22),sp@-
pea LC12
movel a6@(-12),sp@-
movel __tfile$orig_name,sp@-
pea LC13
pea LC14
movel a6@(-528),sp@-
jbsr _sprintf
addw #44,sp
movel a6@(-528),sp@-
jbsr _system
movel d0,d0
addqw #4,sp
tstl d0
jeq L28
pea LC15
moveq #40,d0
addl #__iob,d0
movel d0,sp@-
jbsr _fprintf
pea 1:w
movel a6@(8),sp@-
jbsr __$_tfile
pea 1:w
jbsr _exit
addw #20,sp
L28:
clrl sp@-
pea 2:w
movel a6@(8),d0
movel d0,sp@-
jbsr _open
movel d0,a6@(-532)
clrl sp@-
pea 32:w
movel a6@(-532),sp@-
jbsr _lseek
movel d0,d0
addw #24,sp
tstl d0
jge L29
pea LC16
jbsr _perror
pea 1:w
movel a6@(8),sp@-
jbsr __$_tfile
pea 1:w
jbsr _exit
addw #16,sp
L29:
movel a6@(-4),sp@-
movel a6@(-12),sp@-
movel a6@(-532),sp@-
jbsr _read
movel a6@(-532),sp@-
jbsr _close
movel a6@(-12),sp@-
pea LC17
moveq #40,d0
addl #__iob,d0
movel d0,sp@-
jbsr _fprintf
movel a6@(-12),d2
movel d2,d0
addw #28,sp
jra L26
L26:
movel a6@(-536),d2
unlk a6
rts
LC18:
.ascii "Enter file to link: (test.bye or test.bye2 or test.shell)\12\0"
LC19:
.ascii "'...\12\0"
LC20:
.ascii "Hello! linking `\0"
LC21:
.ascii "\12 if execution now aborts, your crt1+.o is bad\12\0"
LC22:
.ascii "Enter another file to link: \0"
.even
.globl _main
_main:
link a6,#-4212
movel a2,sp@-
pea LC18
pea _out
jbsr _op$alshift_expr_PSofile_PQI
movel a6,d0
addl #-4096,d0
movel d0,sp@-
pea _in
jbsr _op$arshift_expr_PSifile_PQI
pea LC19
movel a6,d0
addl #-4096,d0
movel d0,sp@-
pea LC20
pea _out
jbsr _op$alshift_expr_PSofile_PQI
addqw #8,sp
movel d0,d0
movel d0,sp@-
jbsr _op$alshift_expr_PSofile_PQI
addqw #8,sp
movel d0,d0
movel d0,sp@-
jbsr _op$alshift_expr_PSofile_PQI
movel a6@(12),a0
movel a0@,__tfile$orig_name
movel a6,d0
addl #-4096,d0
movel d0,sp@-
movel a6,d0
addl #-4154,d0
movel d0,sp@-
jbsr _tfile_PStfile_PQI
addw #32,sp
movel a6,d0
addl #-4154,d0
movel d0,sp@-
jbsr _load_PStfile
movel d0,a2
pea LC21
moveq #40,d0
addl #__iob,d0
movel d0,sp@-
jbsr _fprintf
jbsr a2@
pea LC22
pea _out
jbsr _op$alshift_expr_PSofile_PQI
movel a6,d0
addl #-4096,d0
movel d0,sp@-
pea _in
jbsr _op$arshift_expr_PSifile_PQI
pea LC19
movel a6,d0
addl #-4096,d0
movel d0,sp@-
pea LC20
pea _out
jbsr _op$alshift_expr_PSofile_PQI
addqw #8,sp
movel d0,d0
movel d0,sp@-
jbsr _op$alshift_expr_PSofile_PQI
addqw #8,sp
movel d0,d0
movel d0,sp@-
jbsr _op$alshift_expr_PSofile_PQI
addw #36,sp
movel a6,d0
addl #-4096,d0
movel d0,sp@-
movel a6,d0
addl #-4212,d0
movel d0,sp@-
jbsr _tfile_PStfile_PQI
movel a6,d0
addl #-4212,d0
movel d0,sp@-
jbsr _load_PStfile
movel d0,a2
jbsr a2@
jbsr _test0_message
clrl sp@-
movel a6,d0
addl #-4212,d0
movel d0,sp@-
jbsr __$_tfile
clrl sp@-
movel a6,d0
addl #-4154,d0
movel d0,sp@-
jbsr __$_tfile
addw #28,sp
L30:
movel a6@(-4216),a2
unlk a6
rts
.even
.globl __GLOBAL_$D$test_hello_cc
__GLOBAL_$D$test_hello_cc:
link a6,#0
clrl sp@-
pea _out
jbsr __$_ofile
clrl sp@-
pea _in
jbsr __$_ifile
addw #16,sp
L31:
unlk a6
rts
LC23:
.ascii "/dev/tty\0"
.even
.globl __GLOBAL_$I$test_hello_cc
__GLOBAL_$I$test_hello_cc:
link a6,#0
pea LC23
pea _in
jbsr _ifile_PSifile_PQI
pea LC23
pea _out
jbsr _ofile_PSofile_PQI
addw #16,sp
L32:
unlk a6
rts
.globl _out
.data
.even
_out:
.skip 8
.globl _in
.even
_in:
.skip 8
.comm __tfile$orig_name,4
--
Skip Montanaro (montanaro@sprite.steinmetz.ge.com, montanaro@ge-crd.arpa)
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads