On Wed, Oct 6, 2010 at 11:34 PM, Phung Nguyen <nhph...@gmail.com> wrote: > How can I turn this optimization off?
Use -fno-builtin-printf. Richard. > Phung > > On Wed, Oct 6, 2010 at 10:04 PM, Jakub Jelinek <ja...@redhat.com> wrote: >> On Wed, Oct 06, 2010 at 09:59:29PM +0700, Phung Nguyen wrote: >>> When porting GCC on xc16x, I met a problem with a constant string. The >>> following is the C code: >>> #include "stdio.h" >>> >>> int main () { >>> >>> printf ("c\n"); >>> } >>> And the following is the generated assembly: >>> .xc16x >>> >>> .section .rodata >>> >>> .LC0: >>> .ascii "c\0" >>> .section .text >>> .align 1 >>> .global _main >>> _main: >>> mov [-r0],r1 >>> mov r1,r0 >>> >>> mov r8,#SOF:.LC0 >>> calla cc_UC,_puts >>> mov r1,[r0+] >>> ret >>> >>> where there is no '\n' in the constant string .LC0 any more. However, >>> when I change the string into "%c\n" (with a character passed), the >>> constant string .LC0 becomes .ascii "c\12\0" >>> >>> Is there any idea about this kind of problem? Where did I got the mistake? >> >> Why do you think there is any problem? printf ("c\n") is quivalent >> to cheaper puts ("c"), so when optimizing gcc uses the latter instead of >> former. >> >> Jakub >> >