Re: call instruction question

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Jan 10, 2013 at 10:09:48AM -0800, Ian Lance Taylor wrote:
> On Wed, Jan 9, 2013 at 2:14 PM, horseriver <horserivers@xxxxxxxxx> wrote:
> >
> >                 1. why use "fc ff ff ff "  in call instruction?
> 
> Answered by John Fine.
> 
> >                 2. In my .c source file ,I have not used  strcpy function , so why it is disassembly out here ?
> >                 after research , I find this call instruction is corresponding  to this line :
> >
> >                                sprintf(acpi_device_name(device), "%s", ACPI_EC_DEVICE_NAME);
> >                 sprintf is a externel implemented function .
> >
> >                 but why in disassebly code it is strcpy ?
> >
> >                 whether something wrong with relocation data?
> 
> This is a GCC optimization.  GCC converts
>     sprintf(buf, "%s", arg);
> into
>     strcpy(buf, arg);
> because the operations are equivalent and strcpy is more efficient.
> By default GCC assumes that it can call any function in the C standard
> library.
  
   yes! I understand what you mean !

   I should not blame gcc's optimization , but here it has caused an error :
   when linking , ld will look for this strcpy's implemention and fill into this .o 
   file with strcpy's address . In my project , strcpy is implemented in  source code.
   so I linked this .o file with that .o which has implemented strcpy , but ld reported this to me :
                              
                      undefined reference to `strcpy' at this .o file

   I could not understand this . Is there some advice ?



>  To turn off this assumption, use the -fno-hosted option that
> I already mentioned earlier.
> 
> Ian


[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux