]> git.ipfire.org Git - thirdparty/glibc.git/blame - sysdeps/unix/alpha/sysdep.S
Replace FSF snail mail address by URL.
[thirdparty/glibc.git] / sysdeps / unix / alpha / sysdep.S
CommitLineData
15be932d 1/* Copyright (C) 1993, 1996, 1998, 2002, 2003, 2004, 2012
2acd67aa 2 Free Software Foundation, Inc.
3214b89b 3 This file is part of the GNU C Library.
77072f48
BK
4 Contributed by Brendan Kehoe (brendan@zen.org).
5
f1fc1823 6 The GNU C Library is free software; you can redistribute it and/or
3214b89b
AJ
7 modify it under the terms of the GNU Lesser General Public
8 License as published by the Free Software Foundation; either
9 version 2.1 of the License, or (at your option) any later version.
77072f48 10
f1fc1823
UD
11 The GNU C Library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
3214b89b 14 Lesser General Public License for more details.
77072f48 15
3214b89b 16 You should have received a copy of the GNU Lesser General Public
ab84e3ff
PE
17 License along with the GNU C Library. If not, see
18 <http://www.gnu.org/licenses/>. */
77072f48
BK
19
20#include <sysdep.h>
44b8acdd 21#include <features.h>
77072f48 22
15be932d 23#if defined(PIC)
d5a256ad
RM
24 /* Put this at the end of libc's text segment so that all of
25 the direct branches from the syscalls are forward, and
26 thus predicted not taken. */
27 .section .text.last, "ax", @progbits
28#else
7cc46c19 29 .text
d5a256ad 30#endif
44b8acdd 31
15be932d
RH
32#ifndef NOT_IN_libc
33# define SYSCALL_ERROR_ERRNO __libc_errno
d5a256ad 34#else
15be932d 35# define SYSCALL_ERROR_ERRNO errno
d5a256ad 36#endif
44b8acdd 37
d5a256ad 38 .align 4
15be932d
RH
39 .globl __syscall_error
40 .ent __syscall_error
44b8acdd 41__syscall_error:
15be932d
RH
42 /* When building a shared library, we branch here without having
43 loaded the GP. Nor, since it was a direct branch, have we
44 loaded PV with our address.
d5a256ad 45
15be932d
RH
46 When building a static library, we tail call here from another
47 object file, possibly with a different GP, and must return with
48 the GP of our caller in place so that linker relaxation works.
df162e76 49
15be932d
RH
50 Both issues are solved by computing the GP into T1 instead of
51 clobbering the traditional GP register. */
52 .prologue 0
d5a256ad 53 mov v0, t0
15be932d
RH
54 br t1, 1f
551: ldah t1, 0(t1) !gpdisp!1
d5a256ad 56 call_pal PAL_rduniq
e3829e90 57
15be932d
RH
58 lda t1, 0(t1) !gpdisp!1
59 ldq t1, SYSCALL_ERROR_ERRNO(t1) !gottprel
60 addq v0, t1, t1
44b8acdd 61 lda v0, -1
44b8acdd 62
15be932d
RH
63 stl t0, 0(t1)
64 ret
d5a256ad
RM
65
66 .end __syscall_error