2017-11-05 65 views
1

私のプログラムをデバッグしていましたが、最後の行が起きました。どのように修正できますか?私は​​を使ってstrcpy()を見ましたが、それは__strcpy_sse2_unalignedが呼び出されていることを示しています。__strcpy_sse2_unaligned with -fno-builtin

[email protected]:~/booksrc# gcc -fno-builtin -g char_array2.c 
[email protected]:~/booksrc# gdb -q ./a.out 
Reading symbols from ./a.out...done. 
(gdb) list 
1 #include <stdio.h> 
2 #include <string.h> 
3 
4 int main() { 
5  char str_a[20]; 
6 
7  strcpy(str_a, "Hello World!\n"); 
8  printf(str_a); 
9 } 
(gdb) break 6 
Breakpoint 1 at 0x708: file char_array2.c, line 6. 
(gdb) break strcpy 
Breakpoint 2 at 0x5a0 
(gdb) break 8 
Breakpoint 3 at 0x71b: file char_array2.c, line 8. 
(gdb) run 
Starting program: /root/booksrc/a.out 

Breakpoint 1, main() at char_array2.c:7 
7  strcpy(str_a, "Hello World!\n"); 
(gdb) cont 
Continuing. 

Breakpoint 2, __strcpy_sse2_unaligned() 
    at ../sysdeps/x86_64/multiarch/strcpy-sse2-unaligned.S:47 
47 ../sysdeps/x86_64/multiarch/strcpy-sse2-unaligned.S: No such file or directory. 

答えて

1

__strcpy_sse2_unalignedは、あなたのマシン上で使用されているstrcpyの実装です。 glibcは、IFUNC resolverを使用して、CPU特性に基づいて最適化された実装を自動的に選択します。

これはGCCとGCCの組み込み関数で何もする必要はありません。 GCCはstrcpyを呼び出します。それはglibcが関数を呼び出すことだけです。