sbrk.S revision 165903
1193323Sed/*-
2193323Sed * Copyright (c) 1990 The Regents of the University of California.
3193323Sed * All rights reserved.
4193323Sed *
5193323Sed * This code is derived from software contributed to Berkeley by
6193323Sed * William Jolitz.
7193323Sed *
8193323Sed * Redistribution and use in source and binary forms, with or without
9193323Sed * modification, are permitted provided that the following conditions
10193323Sed * are met:
11193323Sed * 1. Redistributions of source code must retain the above copyright
12193323Sed *    notice, this list of conditions and the following disclaimer.
13193323Sed * 2. Redistributions in binary form must reproduce the above copyright
14193323Sed *    notice, this list of conditions and the following disclaimer in the
15193323Sed *    documentation and/or other materials provided with the distribution.
16193323Sed * 4. Neither the name of the University nor the names of its contributors
17193323Sed *    may be used to endorse or promote products derived from this software
18193323Sed *    without specific prior written permission.
19193323Sed *
20193323Sed * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
21193323Sed * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22193323Sed * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23193323Sed * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
24193323Sed * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25193323Sed * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26193323Sed * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27193323Sed * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28193323Sed * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29193323Sed * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30193323Sed * SUCH DAMAGE.
31193323Sed */
32193323Sed
33193323Sed#if defined(SYSLIBC_SCCS) && !defined(lint)
34193323Sed	.asciz "@(#)sbrk.s	5.1 (Berkeley) 4/23/90"
35193323Sed#endif /* SYSLIBC_SCCS and not lint */
36193323Sed#include <machine/asm.h>
37193323Sed__FBSDID("$FreeBSD: head/lib/libc/amd64/sys/sbrk.S 165903 2007-01-09 00:28:16Z imp $");
38193323Sed
39193323Sed#include "SYS.h"
40193323Sed
41193323Sed	.globl	CNAME(_end)
42193323Sed	.globl	HIDENAME(minbrk)
43193323Sed	.globl	HIDENAME(curbrk)
44
45	.data
46HIDENAME(minbrk):	.quad	CNAME(_end)
47HIDENAME(curbrk):	.quad	CNAME(_end)
48	.text
49
50ENTRY(sbrk)
51	pushq	%rdi
52	movq	%rdi,%rcx
53#ifdef PIC
54	movq	PIC_GOT(HIDENAME(curbrk)),%rdx
55	movq	(%rdx),%rax
56#else
57	movq	HIDENAME(curbrk)(%rip),%rax
58#endif
59	testq	%rcx,%rcx
60	jz	back
61	addq	%rax,%rdi
62	mov	$SYS_break,%eax
63	KERNCALL
64	jb	err
65#ifdef PIC
66	movq	PIC_GOT(HIDENAME(curbrk)),%rdx
67	movq	(%rdx),%rax
68#else
69	movq	HIDENAME(curbrk)(%rip),%rax
70#endif
71	movq	0(%rsp), %rcx
72#ifdef PIC
73	addq	%rcx,(%rdx)
74#else
75	addq	%rcx,HIDENAME(curbrk)(%rip)
76#endif
77back:
78	addq	$8, %rsp
79	ret
80err:
81	addq	$8, %rsp
82#ifdef PIC
83	movq	PIC_GOT(HIDENAME(cerror)),%rdx
84	jmp	*%rdx
85#else
86	jmp	HIDENAME(cerror)
87#endif
88