riscv: fix offset in 64bit scheduler
Also keep common start.S file for 64 and 32 bit architectures.
Этот коммит содержится в:
		
							родитель
							
								
									dfab1aa717
								
							
						
					
					
						коммит
						ccc604d2e0
					
				
					 7 изменённых файлов: 65 добавлений и 79 удалений
				
			
		
							
								
								
									
										44
									
								
								src/device/riscv/handleinterrupt32.S
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										44
									
								
								src/device/riscv/handleinterrupt32.S
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
					@ -0,0 +1,44 @@
 | 
				
			||||||
 | 
					.section .text.handleInterruptASM
 | 
				
			||||||
 | 
					.global handleInterruptASM
 | 
				
			||||||
 | 
					.type handleInterruptASM,@function
 | 
				
			||||||
 | 
					handleInterruptASM:
 | 
				
			||||||
 | 
					    // Save and restore all registers, because the hardware only saves/restores
 | 
				
			||||||
 | 
					    // the pc.
 | 
				
			||||||
 | 
					    // Note: we have to do this in assembly because the "interrupt"="machine"
 | 
				
			||||||
 | 
					    // attribute is broken in LLVM: https://bugs.llvm.org/show_bug.cgi?id=42984
 | 
				
			||||||
 | 
					    addi    sp, sp, -64
 | 
				
			||||||
 | 
					    sw      ra, 60(sp)
 | 
				
			||||||
 | 
					    sw      t0, 56(sp)
 | 
				
			||||||
 | 
					    sw      t1, 52(sp)
 | 
				
			||||||
 | 
					    sw      t2, 48(sp)
 | 
				
			||||||
 | 
					    sw      a0, 44(sp)
 | 
				
			||||||
 | 
					    sw      a1, 40(sp)
 | 
				
			||||||
 | 
					    sw      a2, 36(sp)
 | 
				
			||||||
 | 
					    sw      a3, 32(sp)
 | 
				
			||||||
 | 
					    sw      a4, 28(sp)
 | 
				
			||||||
 | 
					    sw      a5, 24(sp)
 | 
				
			||||||
 | 
					    sw      a6, 20(sp)
 | 
				
			||||||
 | 
					    sw      a7, 16(sp)
 | 
				
			||||||
 | 
					    sw      t3, 12(sp)
 | 
				
			||||||
 | 
					    sw      t4, 8(sp)
 | 
				
			||||||
 | 
					    sw      t5, 4(sp)
 | 
				
			||||||
 | 
					    sw      t6, 0(sp)
 | 
				
			||||||
 | 
					    call    handleInterrupt
 | 
				
			||||||
 | 
					    lw      t6, 0(sp)
 | 
				
			||||||
 | 
					    lw      t5, 4(sp)
 | 
				
			||||||
 | 
					    lw      t4, 8(sp)
 | 
				
			||||||
 | 
					    lw      t3, 12(sp)
 | 
				
			||||||
 | 
					    lw      a7, 16(sp)
 | 
				
			||||||
 | 
					    lw      a6, 20(sp)
 | 
				
			||||||
 | 
					    lw      a5, 24(sp)
 | 
				
			||||||
 | 
					    lw      a4, 28(sp)
 | 
				
			||||||
 | 
					    lw      a3, 32(sp)
 | 
				
			||||||
 | 
					    lw      a2, 36(sp)
 | 
				
			||||||
 | 
					    lw      a1, 40(sp)
 | 
				
			||||||
 | 
					    lw      a0, 44(sp)
 | 
				
			||||||
 | 
					    lw      t2, 48(sp)
 | 
				
			||||||
 | 
					    lw      t1, 52(sp)
 | 
				
			||||||
 | 
					    lw      t0, 56(sp)
 | 
				
			||||||
 | 
					    lw      ra, 60(sp)
 | 
				
			||||||
 | 
					    addi    sp, sp, 64
 | 
				
			||||||
 | 
					    mret
 | 
				
			||||||
| 
						 | 
					@ -1,19 +1,3 @@
 | 
				
			||||||
.section .init
 | 
					 | 
				
			||||||
.global _start
 | 
					 | 
				
			||||||
.type _start,@function
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
_start:
 | 
					 | 
				
			||||||
    // Load the stack pointer.
 | 
					 | 
				
			||||||
    la sp,      _stack_top
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // Load the globals pointer. The program will load pointers relative to this
 | 
					 | 
				
			||||||
    // register, so it must be set to the right value on startup.
 | 
					 | 
				
			||||||
    // See: https://gnu-mcu-eclipse.github.io/arch/riscv/programmer/#the-gp-global-pointer-register
 | 
					 | 
				
			||||||
    la gp,      __global_pointer$
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // Jump to runtime.main
 | 
					 | 
				
			||||||
    call main
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.section .text.handleInterruptASM
 | 
					.section .text.handleInterruptASM
 | 
				
			||||||
.global handleInterruptASM
 | 
					.global handleInterruptASM
 | 
				
			||||||
.type handleInterruptASM,@function
 | 
					.type handleInterruptASM,@function
 | 
				
			||||||
| 
						 | 
					@ -13,48 +13,3 @@ _start:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Jump to runtime.main
 | 
					    // Jump to runtime.main
 | 
				
			||||||
    call main
 | 
					    call main
 | 
				
			||||||
 | 
					 | 
				
			||||||
.section .text.handleInterruptASM
 | 
					 | 
				
			||||||
.global handleInterruptASM
 | 
					 | 
				
			||||||
.type handleInterruptASM,@function
 | 
					 | 
				
			||||||
handleInterruptASM:
 | 
					 | 
				
			||||||
    // Save and restore all registers, because the hardware only saves/restores
 | 
					 | 
				
			||||||
    // the pc.
 | 
					 | 
				
			||||||
    // Note: we have to do this in assembly because the "interrupt"="machine"
 | 
					 | 
				
			||||||
    // attribute is broken in LLVM: https://bugs.llvm.org/show_bug.cgi?id=42984
 | 
					 | 
				
			||||||
    addi    sp, sp, -64
 | 
					 | 
				
			||||||
    sw      ra, 60(sp)
 | 
					 | 
				
			||||||
    sw      t0, 56(sp)
 | 
					 | 
				
			||||||
    sw      t1, 52(sp)
 | 
					 | 
				
			||||||
    sw      t2, 48(sp)
 | 
					 | 
				
			||||||
    sw      a0, 44(sp)
 | 
					 | 
				
			||||||
    sw      a1, 40(sp)
 | 
					 | 
				
			||||||
    sw      a2, 36(sp)
 | 
					 | 
				
			||||||
    sw      a3, 32(sp)
 | 
					 | 
				
			||||||
    sw      a4, 28(sp)
 | 
					 | 
				
			||||||
    sw      a5, 24(sp)
 | 
					 | 
				
			||||||
    sw      a6, 20(sp)
 | 
					 | 
				
			||||||
    sw      a7, 16(sp)
 | 
					 | 
				
			||||||
    sw      t3, 12(sp)
 | 
					 | 
				
			||||||
    sw      t4, 8(sp)
 | 
					 | 
				
			||||||
    sw      t5, 4(sp)
 | 
					 | 
				
			||||||
    sw      t6, 0(sp)
 | 
					 | 
				
			||||||
    call    handleInterrupt
 | 
					 | 
				
			||||||
    lw      t6, 0(sp)
 | 
					 | 
				
			||||||
    lw      t5, 4(sp)
 | 
					 | 
				
			||||||
    lw      t4, 8(sp)
 | 
					 | 
				
			||||||
    lw      t3, 12(sp)
 | 
					 | 
				
			||||||
    lw      a7, 16(sp)
 | 
					 | 
				
			||||||
    lw      a6, 20(sp)
 | 
					 | 
				
			||||||
    lw      a5, 24(sp)
 | 
					 | 
				
			||||||
    lw      a4, 28(sp)
 | 
					 | 
				
			||||||
    lw      a3, 32(sp)
 | 
					 | 
				
			||||||
    lw      a2, 36(sp)
 | 
					 | 
				
			||||||
    lw      a1, 40(sp)
 | 
					 | 
				
			||||||
    lw      a0, 44(sp)
 | 
					 | 
				
			||||||
    lw      t2, 48(sp)
 | 
					 | 
				
			||||||
    lw      t1, 52(sp)
 | 
					 | 
				
			||||||
    lw      t0, 56(sp)
 | 
					 | 
				
			||||||
    lw      ra, 60(sp)
 | 
					 | 
				
			||||||
    addi    sp, sp, 64
 | 
					 | 
				
			||||||
    mret
 | 
					 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,30 +3,30 @@
 | 
				
			||||||
.type    tinygo_scanCurrentStack, %function
 | 
					.type    tinygo_scanCurrentStack, %function
 | 
				
			||||||
tinygo_scanCurrentStack:
 | 
					tinygo_scanCurrentStack:
 | 
				
			||||||
   // Push callee-saved registers onto the stack.
 | 
					   // Push callee-saved registers onto the stack.
 | 
				
			||||||
   addi sp, sp, -128
 | 
					   addi sp, sp, -104
 | 
				
			||||||
   sd ra,  120(sp)
 | 
					   sd ra,  96(sp)
 | 
				
			||||||
   sd s11, 112(sp)
 | 
					   sd s11, 88(sp)
 | 
				
			||||||
   sd s10, 104(sp)
 | 
					   sd s10, 80(sp)
 | 
				
			||||||
   sd s9,  96(sp)
 | 
					   sd s9,  72(sp)
 | 
				
			||||||
   sd s8,  88(sp)
 | 
					   sd s8,  64(sp)
 | 
				
			||||||
   sd s7,  80(sp)
 | 
					   sd s7,  56(sp)
 | 
				
			||||||
   sd s6,  72(sp)
 | 
					   sd s6,  48(sp)
 | 
				
			||||||
   sd s5,  64(sp)
 | 
					   sd s5,  40(sp)
 | 
				
			||||||
   sd s4,  56(sp)
 | 
					   sd s4,  32(sp)
 | 
				
			||||||
   sd s3,  48(sp)
 | 
					   sd s3,  24(sp)
 | 
				
			||||||
   sd s2,  40(sp)
 | 
					   sd s2,  16(sp)
 | 
				
			||||||
   sd s1,  32(sp)
 | 
					   sd s1,  8(sp)
 | 
				
			||||||
   sd s0,  24(sp)
 | 
					   sd s0,  0(sp)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   // Scan the stack.
 | 
					   // Scan the stack.
 | 
				
			||||||
   mv a0, sp
 | 
					   mv a0, sp
 | 
				
			||||||
   call tinygo_scanstack
 | 
					   call tinygo_scanstack
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   // Restore return address.
 | 
					   // Restore return address.
 | 
				
			||||||
   ld ra, 60(sp)
 | 
					   ld ra, 96(sp)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   // Restore stack state.
 | 
					   // Restore stack state.
 | 
				
			||||||
   addi sp, sp, 128
 | 
					   addi sp, sp, 104
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   // Return to the caller.
 | 
					   // Return to the caller.
 | 
				
			||||||
   ret
 | 
					   ret
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -16,5 +16,8 @@
 | 
				
			||||||
	"ldflags": [
 | 
						"ldflags": [
 | 
				
			||||||
		"--gc-sections"
 | 
							"--gc-sections"
 | 
				
			||||||
	],
 | 
						],
 | 
				
			||||||
 | 
						"extra-files": [
 | 
				
			||||||
 | 
							"src/device/riscv/start.S"
 | 
				
			||||||
 | 
						],
 | 
				
			||||||
	"gdb": "riscv64-unknown-elf-gdb"
 | 
						"gdb": "riscv64-unknown-elf-gdb"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -12,6 +12,6 @@
 | 
				
			||||||
	],
 | 
						],
 | 
				
			||||||
	"extra-files": [
 | 
						"extra-files": [
 | 
				
			||||||
		"src/runtime/scheduler_tinygoriscv.S",
 | 
							"src/runtime/scheduler_tinygoriscv.S",
 | 
				
			||||||
		"src/device/riscv/start.S"
 | 
							"src/device/riscv/handleinterrupt32.S"
 | 
				
			||||||
	]
 | 
						]
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -12,6 +12,6 @@
 | 
				
			||||||
	],
 | 
						],
 | 
				
			||||||
	"extra-files": [
 | 
						"extra-files": [
 | 
				
			||||||
		"src/runtime/scheduler_tinygoriscv64.S",
 | 
							"src/runtime/scheduler_tinygoriscv64.S",
 | 
				
			||||||
		"src/device/riscv/start64.S"
 | 
							"src/device/riscv/handleinterrupt64.S"
 | 
				
			||||||
	]
 | 
						]
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Загрузка…
	
	Создание таблицы
		
		Сослаться в новой задаче