kurkos.sh 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. if [ -f /tools/bin/ld-new ];then
  2. # Toolchain Ayarlama - Adjusting toolchain
  3. # Not: sadece önsistem->temel sistem geçişinde çalışacak.
  4. #############################
  5. # Önsistem linklemesinin ayarlanması(Adjusting the Toolchain) yani artık üretilen
  6. # paketler yeni ürettiğimiz glibc e link edilmiş olacak. Glibc paketlenmesinden önce
  7. # başka linkleme içeren paketleme yapılmamalıdır
  8. mv -v /tools/bin/{ld,ld-old}
  9. mv -v /tools/$(uname -m)-pc-linux-gnu/bin/{ld,ld-old}
  10. mv -v /tools/bin/{ld-new,ld}
  11. ln -sv /tools/bin/ld /tools/$(uname -m)-pc-linux-gnu/bin/ld
  12. #############################
  13. # gcc speclerinin derleme yaparken yeni linkerin nerde olduğunu (/tools takısı silinerek)
  14. # bilmesi ayarlanır, ayrıca
  15. # üsbaşlık(headers) dosyalarının konumu ayarlanır.
  16. gcc -dumpspecs | sed -e 's@/tools@@g' \
  17. -e '/\*startfile_prefix_spec:/{n;s@.*@/usr/lib/ @}' \
  18. -e '/\*cpp:/{n;s@$@ -isystem /usr/include@}' > \
  19. `dirname $(gcc --print-libgcc-file-name)`/specs
  20. #############################
  21. # aşağıdaki komutla artık derlenen uygulamaların doğru yere linklendiğine emin oluruz.
  22. echo 'int main(){}' > dummy.c
  23. cc dummy.c -v -Wl,--verbose &> dummy.log
  24. readelf -l a.out | grep ': /lib'
  25. # çıktı:
  26. # [Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]
  27. # 32bit test için çıktı -> /lib/ld-linux.so.2. olmalı
  28. #############################
  29. # Doğru başlangıç dosyalarını kurduğumuzdan aşağıdaki komutla emin oluruz.
  30. grep -o '/usr/lib.*/crt[1in].*succeeded' dummy.log
  31. # çıktı:
  32. # /usr/lib/../lib/crt1.o succeeded
  33. # /usr/lib/../lib/crti.o succeeded
  34. # /usr/lib/../lib/crtn.o succeeded
  35. #############################
  36. # Derleyicinin doğru üstbaşlık dosyalarına baktığını(headers kontrol)
  37. # komutu ile kontrol ederiz.
  38. grep -B1 '^ /usr/include' dummy.log
  39. # çıktı:
  40. # #include <...> search starts here:
  41. # /usr/include
  42. #############################
  43. # Linkerin doğru yolları araştırdığına da emin oluruz.
  44. grep 'SEARCH.*/usr/lib' dummy.log |sed 's|; |\n|g'
  45. # çıktı (en son satırlar -linux-gnu leri görmezden gelinir.):
  46. # SEARCH_DIR("/usr/lib")
  47. # SEARCH_DIR("/lib")
  48. #############################
  49. # Doğru libc kütüphanesi kullandığımızı kontrol için
  50. grep "/lib.*/libc.so.6 " dummy.log
  51. # çıktı:
  52. # attempt to open /lib/libc.so.6 succeeded
  53. #############################
  54. # Son olarak gcc nin doğru dinamik linkerini kullandığına emin oluruz.
  55. grep found dummy.log
  56. # çıktı:
  57. # found ld-linux-x86-64.so.2 at /usr/lib/ld-linux-x86-64.so.2
  58. #############################
  59. # temizlik
  60. rm -v dummy.c a.out dummy.log
  61. fi