Thread View: gnu.gcc.bug
1 messages
1 total messages
Started by Sebastian Wangnick
Thu, 27 Aug 1992 18:21
Two bugs within gcc-2.2.2
Author: Sebastian Wangnick
Date: Thu, 27 Aug 1992 18:21
Date: Thu, 27 Aug 1992 18:21
83 lines
3160 bytes
3160 bytes
I just reinstalled gcc-2.2.2 on our RS6000 (configured rs6000-ibm-aix) and
stumbled again over this damn bug within __builtin_new of libgcc2.c:
Allocating e.g., new int[0], fires the new_handler! I patched this with:
*** libgcc2.c Thu Aug 27 15:46:30 1992
--- /tmp/lc Thu Aug 27 15:54:20 1992
***************
*** 969,975 ****
{
void *p;
p = malloc (sz);
! if (p == 0 && sz)
(*__new_handler) ();
return p;
}
--- 969,975 ----
{
void *p;
p = malloc (sz);
! if (p == 0)
(*__new_handler) ();
return p;
}
Another issue is that using -pg makes the assembler complain (at least in
AIX 3.2 with the patch you mention in RS6000.README installed): Compiling
the following program
int main () {return 0;}
with
gcc -pg -v -c minimal.C
leads to:
Reading specs from /usr/local/lib/gcc-lib/rs6000-ibm-aix/2.2.2/specs
gcc version 2.2.2
/usr/local/lib/gcc-lib/rs6000-ibm-aix/2.2.2/cpp -lang-c++ -v -undef -D__GNUC__=
2 -D__GNUG__=2 -D__cplusplus -D_IBMR2 -D_AIX -D___IBMR2__ -D___AIX__ -D___IBMR2
-D___AIX -D__CHAR_UNSIGNED__ minimal.C /tmp/ccWcMDM2.i
GNU CPP version 2.2.2
/usr/local/lib/gcc-lib/rs6000-ibm-aix/2.2.2/cc1plus /tmp/ccWcMDM2.i -quiet -dum
pbase minimal.cc -version -p -o /tmp/ccWcMDM2.s
GNU C++ version 2.2.2 compiled by GNU C version 2.2.2.
as -o minimal.o /tmp/ccWcMDM2.s
Assembler:
/tmp/ccWcMDM2.s: line 1: Invalid toc entry within .toc scope
/tmp/ccWcMDM2.s: line 24: Invalid toc entry within .toc scope
/tmp/ccWcMDM2.s: line 30: undefined symbol ".mcount"
/tmp/ccWcMDM2.s: line 30: illegal expression type for branch address
I overcame this with the following patch to toplev.c (not knowing what it will
do to other architectures):
*** toplev.c Thu Aug 27 10:13:04 1992
--- toplev.c.orig Thu May 28 07:36:37 1992
***************
*** 1609,1615 ****
if (profile_flag || profile_block_flag)
! {
! text_section ();
! ASM_OUTPUT_SKIP(asm_out_file,UNITS_PER_WORD);
! assemble_external_libcall(gen_rtx(SYMBOL_REF,Pmode,"mcount"));
! }
--- 1609,1611 ----
if (profile_flag || profile_block_flag)
! assemble_zeros (UNITS_PER_WORD);
The problem is: I still cannot profile, since ld only has 65536 or so TOC
entries available, and my program (lots of C++) needs 101700 when profiled!
I suppose TOC information is doubled when profiled, so making my code a little
bit bigger will trigger the border even WITHOUT profiling! No FP constants,
only function definitions! So, PLEASE, devise a different scheme or tell IBM
to lift that border.
So long,
Sebastian Wangnick Orthogon System GmbH
(basti@orthogo.uucp) Linzer Strasse 4
Tel +49 421 219136 D-2800 Bremen 33
Fax +49 421 213093 Germany
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