2017-11-16 158 views
6

Sanal Bellek sonunda özel bir bölüm içeren bir program oluşturmak istiyorum. Bu yüzden böyle bir bağlayıcı komut dosyası bir şey yapmak istedim:Başlangıç ​​yığın işaretleyicisini, bağlayıcı komut dosyasıyla açıkça belirle

/* ... */ 
.section_x 0xffff0000 : { 
    _start_section_x = .; 
    . = . + 0xffff; 
    _end_section_x = .; 
} 

sorun olduğunu gcc/ld/glibc bunun bilinen bir örtüşür bile, bir 32 bitlik bir uygulama için varsayılan olarak bu konumda yığını yüklemek gibi görünüyor Bölüm. Yukarıdaki kod sıfır yığını dışında bir istisna neden olur. Bağlayıcıya yığın için başka bir sanal bellek konumu kullanması için bir yol var mı? (Ayrıca, yığının sanal belleğin bu bölümünü kapsamadığından emin olmak isterim ...).

+0

Hedefiniz hakkında daha fazla bilgi vermeniz gerekir. İlk kayıt içeriği (yığın konumunu belirleyen) hedefe bağlıdır. –

+0

Bu bir kol-8 sistemidir (32 bit modunda derleme). Bir gcc 4.7.0 toolchain ile bir linux 3.10 çekirdek kullanıyorum. – HardcoreHenry

cevap

1

Sorunun yanlış olup olmadığını sorgulayan, hatta sormayan yanıtlardan nefret ediyorum, ancak 64k segmentine ihtiyacınız varsa, neden başlangıçta bir tane ayıramazsınız?

Neden işlem adres alanınızda sabit bir adrese ihtiyaç duyabilirsiniz? Yaklaşık 30 yıldır pek çok farklı türde kodlama yapıyorum ve korunan belleğin ortaya çıkmasından bu yana sabit bir adrese ihtiyaç duymadım.

+0

Maalesef soru yanlış değil. Bir işaretçideki çeşitli bitlere özel anlam atayabilen mevcut bir sistemi değiştiriyorum. Bu nedenle, 0xffff0000 adres aralığını özel bir amaç için ayırmam gerekiyor. – HardcoreHenry

+0

@HardcoreHenry Bu sistemi kimin yarattığını "zarif" olarak nitelendirdiğime inanıyorum, ancak dünyanın% 99'unun seni de dahil etmeyi umut ettiğini düşünüyorum. Bu, neden bu goofy işaretçiler geçerli adreslere çözmek zorunda? Sabit bellek adresleri gerektirmeyen bazı soyutlama katmanı ek işlevsellik sunamaz mı? Bu biti ayarlanmış bir yapıya işaret edebilirler ya da işaretçiyi iptal etmek, bir bakış açısının nasıl yapılacağını bilen bir rutin tarafından yapılabilirdi? –