Geçtiğimiz günlerde kol çekirdekleri için assembler programlamayı başlattım. İlk küçük demolarım, sadece .txt bölümü ile herhangi bir problem yaşamadan koştum.dahili yeniden konumlandırma düzeltilemedi
Mantıksal bir uzantı olarak, assembler kodunu normal bölümlere yapılandırmak istedim: .text, .data, .bss. Çünkü, hata ben montajcı tehcir şikayetçi neden hiçbir ipucu var
prog.s: Assembler messages:
prog.s:17: Error: internal_relocation (type: OFFSET_IMM) not fixed up
make: *** [prog.o] Error 1
ile
.globl _start
.section .text
_start:
b main
b .
b .
b .
b .
b .
b .
b .
main:
ldr r0, x
nop
.section .data
x: .word 0xf0f0f0f0
.end
Ama
/opt/arm/bin/arm-as -ggdb -mcpu=arm7tdmi demo.s -o demo.o
çıkışları:
Yani ben şu basit program yazdım Ben bu linker görevi olduğunu düşündüm. Montajcıya, .data bölümünün montaj aşamasında son bellekte yer almadığını söylemem gerektiğini düşünebilirdim, ancak ilgili hiçbir şey bulamıyorum.i tatmin edici bir çözüm değildir
.org .
tarafından
.section .data
değiştirilmesiyle, doğru bir şekilde monte kodu almak için bir yol bulmuş olmasına rağmen. Özellikle gaz dokümantasyonunun bu bölümün anlamını vurguladığı göz önüne alındığında.
Belki uzmanların birisi bana bazı bilgelik
uyarlanmıştır. Bu veya benzer bir şey binutils belgelerinin kol bölümüne gitmelidir. Bağlayıcının büyük ölçekli ve kodlayıcıyı küçük ölçekli yeniden yerleştirmeyi yaptığını ezberleyeceğim. Biraz fazla zamanım varsa, bazı c-programlarını incelerim ve biraz daha içgörü kazanmayı umuyorum ... – user1146332
bu kabul edilen cevap mı? – aditya