mirror of
				https://git.proxmox.com/git/mirror_zfs
				synced 2025-11-04 05:22:48 +00:00 
			
		
		
		
	Authored by: Chris Williamson <chris.williamson@delphix.com> Reviewed by: Matthew Ahrens <mahrens@delphix.com> Reviewed by: George Wilson <george.wilson@delphix.com> Reviewed by: John Kennedy <john.kennedy@delphix.com> Reviewed by: Dan Kimmel <dan.kimmel@delphix.com> Approved by: Garrett D'Amore <garrett@damore.org> Ported-by: Don Brady <don.brady@delphix.com> Ported-by: John Kennedy <john.kennedy@delphix.com> OpenZFS-issue: https://www.illumos.org/issues/7431 OpenZFS-commit: https://github.com/openzfs/openzfs/commit/dfc11533 Porting Notes: * The CLI long option arguments for '-t' and '-m' don't parse on linux * Switched from kmem_alloc to vmem_alloc in zcp_lua_alloc * Lua implementation is built as its own module (zlua.ko) * Lua headers consumed directly by zfs code moved to 'include/sys/lua/' * There is no native setjmp/longjump available in stock Linux kernel. Brought over implementations from illumos and FreeBSD * The get_temporary_prop() was adapted due to VFS platform differences * Use of inline functions in lua parser to reduce stack usage per C call * Skip some ZFS Test Suite ZCP tests on sparc64 to avoid stack overflow
		
			
				
	
	
		
			70 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
/*
 | 
						|
 * CDDL HEADER START
 | 
						|
 *
 | 
						|
 * The contents of this file are subject to the terms of the
 | 
						|
 * Common Development and Distribution License (the "License").
 | 
						|
 * You may not use this file except in compliance with the License.
 | 
						|
 *
 | 
						|
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 | 
						|
 * or http://www.opensolaris.org/os/licensing.
 | 
						|
 * See the License for the specific language governing permissions
 | 
						|
 * and limitations under the License.
 | 
						|
 *
 | 
						|
 * When distributing Covered Code, include this CDDL HEADER in each
 | 
						|
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
 | 
						|
 * If applicable, add the following below this CDDL HEADER, with the
 | 
						|
 * fields enclosed by brackets "[]" replaced with your own identifying
 | 
						|
 * information: Portions Copyright [yyyy] [name of copyright owner]
 | 
						|
 *
 | 
						|
 * CDDL HEADER END
 | 
						|
 */
 | 
						|
 | 
						|
/*
 | 
						|
 * Copyright (c) 1992, 2010, Oracle and/or its affiliates. All rights reserved.
 | 
						|
 */
 | 
						|
 | 
						|
#define	ENTRY(x) \
 | 
						|
	.text; \
 | 
						|
	.align	8; \
 | 
						|
	.globl	x; \
 | 
						|
	.type	x, @function; \
 | 
						|
x:
 | 
						|
 | 
						|
#define	SET_SIZE(x) \
 | 
						|
	.size	x, [.-x]
 | 
						|
 | 
						|
/*
 | 
						|
 * Setjmp and longjmp implement non-local gotos using state vectors
 | 
						|
 * type label_t.
 | 
						|
 */
 | 
						|
#ifdef __i386__
 | 
						|
 | 
						|
	ENTRY(setjmp)			/* save area is passed in eax */
 | 
						|
	movl	%ebp, 0(%eax)		/* save ebp */
 | 
						|
	movl	%ebx, 4(%eax)		/* save ebx */
 | 
						|
	movl	%esi, 8(%eax)		/* save esi */
 | 
						|
	movl	%edi, 12(%eax)		/* save edi */
 | 
						|
	movl	%esp, 16(%eax)		/* save esp */
 | 
						|
	movl	(%esp), %ecx		/* %eip (return address) */
 | 
						|
	movl	%ecx, 20(%eax)		/* save eip */
 | 
						|
	subl	%eax, %eax		/* return 0 */
 | 
						|
	ret
 | 
						|
	SET_SIZE(setjmp)
 | 
						|
 | 
						|
	ENTRY(longjmp)			/* save area is passed in eax */
 | 
						|
	movl	0(%eax), %ebp		/* restore ebp */
 | 
						|
	movl	4(%eax), %ebx		/* restore ebx */
 | 
						|
	movl	8(%eax), %esi		/* restore esi */
 | 
						|
	movl	12(%eax), %edi		/* restore edi */
 | 
						|
	movl	16(%eax), %esp		/* restore esp */
 | 
						|
	movl	20(%eax), %ecx		/* %eip (return address) */
 | 
						|
	addl	$4, %esp		/* pop ret adr */
 | 
						|
	jmp	*%ecx			/* indirect jump */
 | 
						|
	SET_SIZE(longjmp)
 | 
						|
 | 
						|
#ifdef __ELF__
 | 
						|
.section .note.GNU-stack,"",%progbits
 | 
						|
#endif
 | 
						|
 | 
						|
#endif /* __i386__ */
 |