http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56606
Bug #: 56606 Summary: GCC refuses to emit long calls for operator new/delete on PowerPC Classification: Unclassified Product: gcc Version: 4.7.2 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassig...@gcc.gnu.org ReportedBy: g...@mrozekma.com -mlongcall seems to have no effect on operator new and operator delete. For example, given the code: > extern void foo(); > void bar() { > foo(); > new char; > } A normal run of GCC on PowerPC will generate the (abridged) assembly: > bl _Z3foov > bl _Znwj Running GCC with the -mlongcall option generates: > lis r9, _Z3foov@ha > addi r9, r9, _Z3foov@l > mtctr r9 > bctrl > bl _Znwj The branch to foo() was expanded as expected, but the branch to operator new is still short. Calls to random libc and libstdc++ functions are all converted; so far operator new and operator delete are the only ones I've seen that don't work. This seems similar to bug 12769, but that was for generated functions --- GCC build info: > Target: ppc-redhat-linux > Configured with: ./configure --prefix=/opt/gcc-4.7.2-ppc > --mandir=/opt/gcc-4.7.2-ppc/share/man --enable-shared --enable-threads=posix > --with-system-zlib --enable-languages=c,c++ --build=ppc-redhat-linux > --host=ppc-redhat-linux --target=ppc-redhat-linux > gcc version 4.7.2 (GCC) Test compiled with: > g++ -mlongcall -c -o test.o test.cpp