File: raw_syscall_helper_32.S

package info (click to toggle)
linux 6.1.8-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 1,488,076 kB
  • sloc: ansic: 23,401,844; asm: 266,744; sh: 108,976; makefile: 49,705; python: 36,927; perl: 36,810; cpp: 6,044; yacc: 4,904; lex: 2,722; awk: 1,440; ruby: 25; sed: 5
file content (49 lines) | stat: -rw-r--r-- 942 bytes parent folder | download | duplicates (15)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/* SPDX-License-Identifier: GPL-2.0 */
.global sys32_helper
sys32_helper:
	/* Args: syscall_args_32*, function pointer */
	pushl	%ebp
	pushl	%ebx
	pushl	%esi
	pushl	%edi
	movl	5*4(%esp), %eax	/* pointer to args struct */

	movl	1*4(%eax), %ebx
	movl	2*4(%eax), %ecx
	movl	3*4(%eax), %edx
	movl	4*4(%eax), %esi
	movl	5*4(%eax), %edi
	movl	6*4(%eax), %ebp
	movl	0*4(%eax), %eax

	call	*(6*4)(%esp)	/* Do the syscall */

	/* Now we need to recover without losing any reg values */
	pushl	%eax
	movl	6*4(%esp), %eax
	popl	0*4(%eax)
	movl	%ebx, 1*4(%eax)
	movl	%ecx, 2*4(%eax)
	movl	%edx, 3*4(%eax)
	movl	%esi, 4*4(%eax)
	movl	%edi, 5*4(%eax)
	movl	%ebp, 6*4(%eax)

	popl	%edi
	popl	%esi
	popl	%ebx
	popl	%ebp
	ret

	.type sys32_helper, @function
	.size sys32_helper, .-sys32_helper

.global int80_and_ret
int80_and_ret:
	int	$0x80
	ret

	.type int80_and_ret, @function
	.size int80_and_ret, .-int80_and_ret

.section .note.GNU-stack,"",%progbits