1. IO Overflow via putc() in GCC v2.6.3, Slackware v2.x Linux v1.2.11
I'm getting a segmentation fault when running a program compiled by gcc
(v2.6.3 i486-linux-aout) using 'gcc -o sor -I. -Ih -g sor.c' on a 486 which
has 16 MB RAM, all scsi, and running Linux v1.2.11 based on the Slackware
v2.2/v2.3 distribution (I know, I know, I'm planning on upgrading RSN :-).
The Slackware v2.3 distribution was missing the g++ include files so I
snarfed that binary package ('disk') from the Slackware v2.3 archive on
ftp.cdrom.com and installed that.
The problem is a segmentation fault (gdb output):
[...]
Program received signal SIGSEGV, Segmentation fault.
I've not had this problem with any other programs that I've built with this
setup. 0x1d323 in _IO_file_overflow (f=0x65d00, ch=9) at fileops.c:350
fileops.c:350: No such file or directory.
(gdb) bt
#0 0x1d323 in _IO_file_overflow (f=0x65d00, ch=9) at fileops.c:350
#1 0x1b71a in __overflow (f=0x65d00, ch=9) at genops.c:160
[[I assume those first two are in the C/C++ library]]
#2 0x1cd1c in putc (c=9, stream=0x65d00) at putc.c:11
[[That's a function because I tried forcing the use of the function putc
rather than the macro but it makes no difference.]]
#3 0x15ff7 in dumpAction (
s=0x66c03 "\n SymbolTable* _current;", ' ' <repeats 13 times>, "// most current symbol table\n AST* _currClass;", ' ' <repeats 19 times>, "// current class, for recurs. detect\n RWTPtrDlist<ErrorMsg>* _errorList; // errorMsgs owned"..., output=0x65d00, tabs=1, file=-1, line=0, final_newline=1) at gen.c:906
[[This is in the actual 'sor' program. The string is a few hundred bytes
long. See the print below...]]
#4 0x1a9c8 in GenCPPClassHeader () at cpp.c:94
#5 0x109c6 in main (argc=3, argv=0xbffffb2c) at main.c:311
(gdb) printf "%500s", s
SymbolTable* _current; // most current symbol table
AST* _currClass; // current class, for recurs. detect
RWTPtrDlist<ErrorMsg>* _errorList; // errorMsgs owned by Linker!
void initialize();
void initScope(AST* n);
void initFuncScope(AST* n);
void addUnique(AST* id,AST* n);
void addNonUnique(AST* id,AST* n);
void addConstructor(AST* id,AST* n);
void addInheritedScopes(AST* classNode, AST* nteList);
RWTPtrDlist<ErrorMsg>* errorList() { return _errorList; }
void rptErr(ErrorCode e, AST* n);
void rptErr(ErrorCode e, AST* n, String str);
(gdb)
The application code is pretty simple the offending source line is:
906 if ( *s!='#' ) {TAB;}
where 'TAB' is a macro defined as:
#define TAB {int i=1; for (;i<=tabs;i++) {putc('\t', output);}}
and 'output' is an argument to dumpAction():
FILE *output
which has been passed 'stdout' by the callers.
I put explicit fflush(output) in the code but that didn't help any either.
I have not had this problem with any of the myriad other programs that I've
built with this system so, I'd really appreciate learning what stupid thing
I'm missing/doing/etc.
Thanks,
John
2. HELP! When I boot Linux wont run rc.S or rc.M!!
3. v2.4.1-v2.4.3pre2 doesnt power off by halt or shutdown -h
4. X Font Server Not Functioning
5. SCO Foxbase+ v2.1.1 To v2.1.2
6. help with setting up inn1.4sec
7. Problems with v2.1.30-v2.1.34
8. Gigatape devicenames on IBM AIX RS6000
9. Q: gcc v2.8.0 on solaris v2.5.1
10. solaris x86 v2.5 vs. v2.5.1 performance
11. Glibc V2.1.2 or V2.1.3?
12. MacIIci Hangs on Boot (v2.2, v2.3)
13. Where is v2.4.21-rc8 and v2.4.21 in bk ?