Back to index

glibc  2.9
link.h
Go to the documentation of this file.
00001 /* Copyright (C) 2005 Free Software Foundation, Inc.
00002    This file is part of the GNU C Library.
00003 
00004    The GNU C Library is free software; you can redistribute it and/or
00005    modify it under the terms of the GNU Lesser General Public
00006    License as published by the Free Software Foundation; either
00007    version 2.1 of the License, or (at your option) any later version.
00008 
00009    The GNU C Library is distributed in the hope that it will be useful,
00010    but WITHOUT ANY WARRANTY; without even the implied warranty of
00011    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00012    Lesser General Public License for more details.
00013 
00014    You should have received a copy of the GNU Lesser General Public
00015    License along with the GNU C Library; if not, write to the Free
00016    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
00017    02111-1307 USA.  */
00018 
00019 #ifndef       _LINK_H
00020 # error "Never include <bits/link.h> directly; use <link.h> instead."
00021 #endif
00022 
00023 
00024 /* Registers for entry into PLT on ARM.  */
00025 typedef struct La_arm_regs
00026 {
00027   uint32_t lr_reg[4];
00028   uint32_t lr_sp;
00029   uint32_t lr_lr;
00030   /* Coprocessor registers used for argument passing.  The data
00031      stored here depends on the coprocessors available in the
00032      system which are used for function calls in the current ABI.
00033      VFP uses eight 64-bit registers, and iWMMXt uses ten.  */
00034   uint32_t lr_coproc[42];
00035 } La_arm_regs;
00036 
00037 /* Return values for calls from PLT on ARM.  */
00038 typedef struct La_arm_retval
00039 {
00040   /* Up to four integer registers can be used for a return value in
00041      some ABIs (APCS complex long double).  */
00042   uint32_t lrv_reg[4];
00043 
00044   /* Any coprocessor registers which might be used to return values
00045      in the current ABI.  */
00046   uint32_t lrv_coproc[12];
00047 } La_arm_retval;
00048 
00049 
00050 __BEGIN_DECLS
00051 
00052 extern Elf32_Addr la_arm_gnu_pltenter (Elf32_Sym *__sym, unsigned int __ndx,
00053                                    uintptr_t *__refcook,
00054                                    uintptr_t *__defcook,
00055                                    La_arm_regs *__regs,
00056                                    unsigned int *__flags,
00057                                    const char *__symname,
00058                                    long int *__framesizep);
00059 extern unsigned int la_arm_gnu_pltexit (Elf32_Sym *__sym, unsigned int __ndx,
00060                                    uintptr_t *__refcook,
00061                                    uintptr_t *__defcook,
00062                                    const La_arm_regs *__inregs,
00063                                    La_arm_retval *__outregs,
00064                                    const char *symname);
00065 
00066 __END_DECLS