2010-04-25 30 views
27

kısa bir süre önce düşük seviyeli bir çalışmanın hatalarını ayıklamaya çalışıyorum ve derleyici (avr-gcc) için crt0.S'yi bulamadım ama bir crt1.S (ve karşılık gelen .o dosyaları ile) buldum.crt0.o ve crt1.o - Fark nedir?

Bu iki dosya arasındaki fark nedir? Crt1 tamamen farklı bir şey mi yoksa ne? Her ikisi de önyükleme için bir şey yapmak zorunda gibi görünüyorlar (yığınının çerçevesini ve benzeri), ama neden ayrımı?

cevap

27

Her iki crt0/crt1 de aynı şeyi yapar, temel olarak() yığınını başlatma, irqs ayarlama, vb.) Çağrılmadan önce gerekenleri yapar. Biriyle ya da diğeriyle bağlantı kurmalı ama ikisini de değil. Onlar gerçekten kütüphaneler değil, gerçekten inline montaj kodu.

Bildiğim kadarıyla anladığım kadarıyla, crt

  • CRT1 (öncesi ve ana ve çıkış sonrası denilen işlevleri) Kurucular ve yıkıcı destekleyen sistemde kullanılan iki "tatlar" gelir. Bu durumda ana normal işlev çağrısı gibi ele alınır. Kurucuları/yıkıcıları desteklemeyen sistemlerde
  • crt0 kullanılır.
+2

+1 http://lists.uclibc.org/pipermail/uclibc/2002-December/025943.html – stacker

+0

Bu kurucular/yıkıcılar tam olarak nedir? Bu C++ ya da bir şey ile ilgili mi? Benim cevabımda Bu, crtbeginT.o ve crtend.o olmadan çalıştı, bunlar da danışmanlar ve yıkıcılar. –

+0

Cevabımda yazdım. C++ ile ilgili değil (doğrudan). Programın bitiminden önce ve sonra çağrılması gereken fonksiyonlardır. Programın çalıştığı işletim sistemi ile ilgilidir. Ama bunun hakkında söylenecek en iyi kişi değilim (asla böyle işlevler yazmamış, diğerleri yapmış) ve muhtemelen kendi başına bir cevabı hak edecektir. – kriss