Path: utzoo!telly!attcan!utgpu!jarvis.csri.toronto.edu!mailrus!tut.cis.ohio-state.edu!XEROX.COM!Leisner.Henr From: Leisner.Henr@XEROX.COM (Marty) Newsgroups: gnu.gcc.bug Subject: gcc v1.34 on 386i with coff encapsulation Message-ID: <890419-133323-1820@Xerox> Date: 19 Apr 89 20:33:08 GMT Sender: daemon@tut.cis.ohio-state.edu Distribution: gnu Organization: GNUs Not Usenet Lines: 111 I'm trying to bring up to gas v1.31 and the gnu linker with gcc v1.34 on a sun386i (as a step towards doing cross-developing for other systems). I'm still not there yet (if anyone has done this, please let me know how you did it). The script libconvert has a problem -- the sun386i libc.a object names are longer than 15 characters, so that libconvert doesn't apply robotussin to all the objects. Changing < for i in *.o to > for i in * is adequate. Robotussin seems to be having problems with the sun objects. For the empty program, the sun C compiler produces (cc -S foo.c) .file "foo.c" .version "sun386-1.0" .optim .LL0: .data and the assembler produces the following (in objdump): mlsun% objdump -t foo.o ***SYMBOL TABLE INFORMATION*** [Index] m1 Name Value Scnum Type Sclass Numaux Name [Index] m2 Offset Value Scnum Type Sclass Numaux Name [Index] a Tagndx Misc Misc Fcnary Fcnary Tvdnx foo.o: [0] m1 .file 0x00000000 -2 0x0000 0x67 1 .file [1] a 779054950 0x0063 0x0000 0x00000000 0x00000000 0 [2] m1 .text 0x00000000 1 0x0000 0x03 1 .text [3] a 0 0x0000 0x0000 0x00000000 0x00000000 0 [4] m1 .data 0x00000000 2 0x0000 0x03 1 .data [5] a 0 0x0000 0x0000 0x00000000 0x00000000 0 [6] m1 .bss 0x00000000 3 0x0000 0x03 1 .bss [7] a 0 0x0000 0x0000 0x00000000 0x00000000 0 [8] m1 .comment 0x00000000 4 0x0000 0x03 1 .comment [9] a 12 0x0000 0x0000 0x00000000 0x00000000 0 [10] m1 -lg 0x00000000 -1 0x0000 0x02 0 -lg I have no idea what the -lg symbol is in section number -1. When converting the libraries, the gnu linker barfed on these -lg symbols. I patched robutussin to discard symbols where the section number was -1 -- patches look like: symbol_count = 0; for (i = 0; i < coff_header.f_nsyms; ++i) { if (coff_sym_listp[i].n_scnum != N_DEBUG ! && coff_sym_listp[i].n_name[0] != '.') { if (verbose_flag) printf ("map %d to %d\n", i, symbol_count); --- 267,280 ---- symbol_count = 0; for (i = 0; i < coff_header.f_nsyms; ++i) { + #ifdef DEBUG + printf("%s in scnum %d\n", coff_sym_listp[i].n_name, coff_sym_listp[i].n _scnum); + #endif + if (coff_sym_listp[i].n_scnum != N_DEBUG ! && coff_sym_listp[i].n_name[0] != '.' ! && coff_sym_listp[i].n_scnum != -1) ! { if (verbose_flag) printf ("map %d to %d\n", i, symbol_count); *************** *** 383,389 **** for (i = 0; i < coff_header.f_nsyms; ++i) { if (coff_sym_listp[i].n_scnum != N_DEBUG ! && coff_sym_listp[i].n_name[0] != '.') { if (coff_sym_listp[i].n_zeroes == 0) { --- 390,397 ---- for (i = 0; i < coff_header.f_nsyms; ++i) { if (coff_sym_listp[i].n_scnum != N_DEBUG ! && coff_sym_listp[i].n_name[0] != '.' ! && coff_sym_listp[i].n_scnum != -1) { if (coff_sym_listp[i].n_zeroes == 0) { I'm not sure I understand these -lg symbols but gnu ld definitely didn't like them. Anyway, I can now get trivial C programs to link but they core dump. Before I continue on this adventure, anyone have any advise? marty ARPA: leisner.henr@xerox.com GV: leisner.henr NS: martin leisner:wbst139:xerox UUCP: hplabs!arisia!leisner