darwin: add support for arm64 GOARCH (aka Apple Silicon)
This patch adds support for generating GOOS=darwin GOARCH=arm64 binaries. This means that it will become possible to run `go test` on recent Macs, for example.
Этот коммит содержится в:
		
							родитель
							
								
									af6bbaf532
								
							
						
					
					
						коммит
						7a5d4c9537
					
				
					 3 изменённых файлов: 27 добавлений и 0 удалений
				
			
		
							
								
								
									
										1
									
								
								Makefile
									
										
									
									
									
								
							
							
						
						
									
										1
									
								
								Makefile
									
										
									
									
									
								
							|  | @ -635,6 +635,7 @@ endif | |||
| 	GOOS=linux GOARCH=arm $(TINYGO) build -size short -o test.elf       ./testdata/cgo | ||||
| 	GOOS=windows GOARCH=amd64 $(TINYGO) build -size short -o test.exe   ./testdata/cgo | ||||
| 	GOOS=darwin GOARCH=amd64 $(TINYGO) build              -o test       ./testdata/cgo | ||||
| 	GOOS=darwin GOARCH=arm64 $(TINYGO) build              -o test       ./testdata/cgo | ||||
| ifneq ($(OS),Windows_NT) | ||||
| 	# TODO: this does not yet work on Windows. Somehow, unused functions are | ||||
| 	# not garbage collected. | ||||
|  |  | |||
|  | @ -1,7 +1,12 @@ | |||
| #ifdef __MACH__ | ||||
| .global  _tinygo_startTask
 | ||||
| _tinygo_startTask: | ||||
| #else | ||||
| .section .text.tinygo_startTask | ||||
| .global  tinygo_startTask
 | ||||
| .type    tinygo_startTask, %function | ||||
| tinygo_startTask: | ||||
| #endif | ||||
|     .cfi_startproc | ||||
|     // Small assembly stub for starting a goroutine. This is already run on the | ||||
|     // new stack, with the callee-saved registers already loaded. | ||||
|  | @ -23,13 +28,25 @@ tinygo_startTask: | |||
|     blr   x19 | ||||
| 
 | ||||
|     // After return, exit this goroutine. This is a tail call. | ||||
| #ifdef __MACH__ | ||||
|     b     _tinygo_pause | ||||
| #else | ||||
|     b     tinygo_pause | ||||
| #endif | ||||
|     .cfi_endproc | ||||
| #ifndef __MACH__ | ||||
| .size tinygo_startTask, .-tinygo_startTask | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| #ifdef __MACH__ | ||||
| .global _tinygo_swapTask
 | ||||
| _tinygo_swapTask: | ||||
| #else | ||||
| .global tinygo_swapTask
 | ||||
| .type tinygo_swapTask, %function | ||||
| tinygo_swapTask: | ||||
| #endif | ||||
|     // This function gets the following parameters: | ||||
|     // x0 = newStack uintptr | ||||
|     // x1 = oldStack *uintptr | ||||
|  |  | |||
|  | @ -1,7 +1,12 @@ | |||
| #ifdef __MACH__ | ||||
| .global _tinygo_scanCurrentStack
 | ||||
| _tinygo_scanCurrentStack: | ||||
| #else | ||||
| .section .text.tinygo_scanCurrentStack | ||||
| .global tinygo_scanCurrentStack
 | ||||
| .type tinygo_scanCurrentStack, %function | ||||
| tinygo_scanCurrentStack: | ||||
| #endif | ||||
|     // Sources: | ||||
|     //   * https://developer.arm.com/architectures/learn-the-architecture/armv8-a-instruction-set-architecture/procedure-call-standard | ||||
|     //   * https://godbolt.org/z/qrvrEh | ||||
|  | @ -16,7 +21,11 @@ tinygo_scanCurrentStack: | |||
| 
 | ||||
|     // Scan the stack. | ||||
|     mov     x0, sp | ||||
| #ifdef __MACH__ | ||||
|     bl      _tinygo_scanstack | ||||
| #else | ||||
|     bl      tinygo_scanstack | ||||
| #endif | ||||
| 
 | ||||
|     // Restore stack state and return. | ||||
|     ldp     x29, x30, [sp], #96 | ||||
|  |  | |||
		Загрузка…
	
	Создание таблицы
		
		Сослаться в новой задаче
	
	 Ayke van Laethem
						Ayke van Laethem