|  | // Copyright 2009 The Go Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style | 
|  | // license that can be found in the LICENSE file. | 
|  |  | 
|  | #include "textflag.h" | 
|  |  | 
|  | TEXT _rt0_arm_linux(SB),NOSPLIT|NOFRAME,$0 | 
|  | MOVW	(R13), R0	// argc | 
|  | MOVW	$4(R13), R1		// argv | 
|  | MOVW	$_rt0_arm_linux1(SB), R4 | 
|  | B		(R4) | 
|  |  | 
|  | // When building with -buildmode=c-shared, this symbol is called when the shared | 
|  | // library is loaded. | 
|  | TEXT _rt0_arm_linux_lib(SB),NOSPLIT,$0 | 
|  | B	_rt0_arm_lib(SB) | 
|  |  | 
|  | TEXT _rt0_arm_linux1(SB),NOSPLIT|NOFRAME,$0 | 
|  | // We first need to detect the kernel ABI, and warn the user | 
|  | // if the system only supports OABI. | 
|  | // The strategy here is to call some EABI syscall to see if | 
|  | // SIGILL is received. | 
|  | // If you get a SIGILL here, you have the wrong kernel. | 
|  |  | 
|  | // Save argc and argv (syscall will clobber at least R0). | 
|  | MOVM.DB.W [R0-R1], (R13) | 
|  |  | 
|  | // do an EABI syscall | 
|  | MOVW	$20, R7 // sys_getpid | 
|  | SWI	$0 // this will trigger SIGILL on OABI systems | 
|  |  | 
|  | MOVM.IA.W (R13), [R0-R1] | 
|  | B	runtime·rt0_go(SB) |