?? runtesti.s
字號:
# Assembler initialization code for actual execution test. # This code becomes the start of the execution test program. It is# responsible for initializing the static data, invoking the C code,# and returning the result. It is called as though it were a C# function with an argument of the address of the data segment.# We need to know the value of _ftext and _fdata at link time, but we# have no way to actually get that at runtime. This is because when# this code is compiled with -membedded-pic, the la instruction will# be turned into an addiu $gp instruction. We work around this by# storing the information in words in the .data section. We then load# the values of these words *before* doing the runtime relocation. .sdatatext_start: .word _ftextdata_start: .word _fdata .globl start .textstart: # Grab some space on the stack, just as though we were a real # function. addiu $sp,$sp,-8 sw $31,0($sp) # Save the $gp register, and set it up for our data section. sw $gp,4($sp) addu $gp,$4,0x8000 # macro # The start of the data segment is in $4. # Get the address of start into $5 in a position independent # fashion. .set noreorder $LF1 = . + 8 bal $LF1 la $5,start-$LF1 # macro .set reorder addu $5,$5,$31 # Now get the address of _ftext into $6. la $6,_ftext-start # macro addu $6,$6,$5 # Get the value of _ftext used to link into $7. lw $7,text_start # macro # Get the value of _fdata used to link into $8. lw $8,data_start # macro # Get the address of __runtime_reloc_start into $9. la $9,__runtime_reloc_start-start # macro addu $9,$9,$5 # Get the address of __runtime_reloc_stop into $10. la $10,__runtime_reloc_stop-start # macro addu $10,$10,$5 # The words between $9 and $10 are the runtime initialization # instructions. Step through and relocate them. First set # $11 and $12 to the values to add to text and data sections, # respectively. subu $11,$6,$7 subu $12,$4,$81: bge $9,$10,3f # macro lw $13,0($9) and $14,$13,0xfffffffe # macro move $15,$11 beq $13,$14,2f move $15,$122: addu $14,$14,$4 lw $24,0($14) addu $24,$24,$15 sw $24,0($14) addiu $9,$9,4 b 1b3: # Now the statically initialized data has been relocated # correctly, and we can call the C code which does the actual # testing. bal foo # We return the value returned by the C code. lw $31,0($sp) lw $gp,4($sp) addu $sp,$sp,8 j $31
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -