lib2funcs.S (__gcc_plt_call): Load branch target to %r21.
[official-gcc.git] / libgcc / config / pa / lib2funcs.S
bloba2db5b3d3ac7b4bd63a2af2263132a2557f40f70
1 ;  Subroutines for calling unbound dynamic functions from within GDB for HPPA.
2 ;  Subroutines for out of line prologues and epilogues on for the HPPA
3 ;  Copyright (C) 1994-2019 Free Software Foundation, Inc.
5 ;  This file is part of GCC.
7 ;  GCC is free software; you can redistribute it and/or modify
8 ;  it under the terms of the GNU General Public License as published by
9 ;  the Free Software Foundation; either version 3, or (at your option)
10 ;  any later version.
12 ;  GCC is distributed in the hope that it will be useful,
13 ;  but WITHOUT ANY WARRANTY; without even the implied warranty of
14 ;  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 ;  GNU General Public License for more details.
17 ;  Under Section 7 of GPL version 3, you are granted additional
18 ;  permissions described in the GCC Runtime Library Exception, version
19 ;  3.1, as published by the Free Software Foundation.
21 ;  You should have received a copy of the GNU General Public License and
22 ;  a copy of the GCC Runtime Library Exception along with this program;
23 ;  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
24 ;  <http://www.gnu.org/licenses/>.
26 #if !defined(__pro__) && !defined(__rtems__)
27         .SPACE $PRIVATE$
28         .SUBSPA $DATA$,QUAD=1,ALIGN=8,ACCESS=31
29         .SUBSPA $BSS$,QUAD=1,ALIGN=8,ACCESS=31,ZERO,SORT=82
30         .SPACE $TEXT$
31         .SUBSPA $LIT$,QUAD=0,ALIGN=8,ACCESS=44
32         .SUBSPA $CODE$,QUAD=0,ALIGN=8,ACCESS=44,CODE_ONLY
33         .SUBSPA $MILLICODE$,QUAD=0,ALIGN=8,ACCESS=44,SORT=8
34 #endif
35         .IMPORT $$dyncall,MILLICODE
36 #if !defined(__pro__) && !defined(__rtems__)
37         .SPACE $TEXT$
38         .SUBSPA $CODE$
39 #else
40         .text
41 #endif
43 ; Simply call with the address of the desired import stub in %r22 and
44 ; arguments in the normal place (%r26-%r23 and stack slots).
46         .align 4
47         .EXPORT __gcc_plt_call,ENTRY,PRIV_LEV=3,RTNVAL=GR
48 __gcc_plt_call
49         .PROC
50         .CALLINFO
51         .ENTRY
52         ; Our return address comes in %r31, not %r2!
53         stw %r31,-8(%r30)
55         ; An inline version of dyncall so we don't have to worry
56         ; about long calls to millicode, PIC and other complexities.
57         bb,>=,n %r22,30,L$foo
58         depi 0,31,2,%r22
59         ldw 0(%r22),%r21
60         ldw 4(%r22),%r19
61 L$foo
62         ldsid (%r21),%r1
63         mtsp %r1,%sr0
64         ble 0(%sr0,%r21)
65         copy %r31,%r2
66         ldw -8(%r30),%r2
68         ; We're going to be returning to a stack address, so we
69         ; need to do an intra-space return.
70         ldsid (%rp),%r1
71         mtsp %r1,%sr0
72         be,n 0(%sr0,%rp)
73         .EXIT
74         .PROCEND