andrew@frip.WV.TEK.COM (Andrew Klossner) (09/02/89)
collect.c doesn't deal correctly with extended symbols in COFF object files, e.g., the output from 'gcc -g' or 'g++ -g0'. The loop: for (symindex = 0; symindex < symbols; symindex++ ) { SYMENT symbol; char *symbol_name; extern char *ldgetname(); ldtbread(ldptr, symindex, &symbol); ... } should instead look like this: symindex = 0; while (symindex < symbols) { SYMENT symbol; char *symbol_name; extern char *ldgetname(); ldtbread(ldptr, symindex, &symbol); ... symindex += 1 + symbol.n_numaux; } so that "auxiliary" symbol table entries will be skipped. This is necessary because ldgetname can core-dump on an auxiliary entry. -=- Andrew Klossner (uunet!tektronix!frip.WV.TEK!andrew) [UUCP] (andrew%frip.wv.tek.com@relay.cs.net) [ARPA]
pcg@thor.cs.aber.ac.uk (Piercarlo Grandi) (09/03/89)
In article <4428@orca.WV.TEK.COM> andrew@frip.WV.TEK.COM (Andrew Klossner) writes: collect.c doesn't deal correctly with extended symbols in COFF object files, e.g., the output from 'gcc -g' or 'g++ -g0'. As I do not like symbolic debuggers (I vastly prefer instrumenting the source, or assembler debuggers to look at system dependent problems), I have not bothered much with the various problems of '-g0' for 'g++' under system V. However, here is another one: 'g++' allows arguments to procedures to be unnamed; no name is generated for them in the symtab entry, and the assembler complains about illegal syntax. A 'fake' name ought to be generated. Reproduce-by: main(auto int, auto char *argv[]) { } -- Piercarlo "Peter" Grandi | ARPA: pcg%cs.aber.ac.uk@nsfnet-relay.ac.uk Dept of CS, UCW Aberystwyth | UUCP: ...!mcvax!ukc!aber-cs!pcg Penglais, Aberystwyth SY23 3BZ, UK | INET: pcg@cs.aber.ac.uk