diff options
author | Mike Frysinger <vapier@gentoo.org> | 2011-11-27 03:55:38 -0500 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2011-11-27 05:01:38 -0500 |
commit | 0d08b449615e52c386eeca25a64d8548a01c8bec (patch) | |
tree | 6164050f2690370fe3ef1a51d54642201cec5a55 /ldso/ldso/bfin/dl-sysdep.h | |
parent | 0405cb8f5b647fadf61f7539828ef88a883223e2 (diff) |
ldso: fdpic: unify duplicate bfin/frv logic
Much of the logic in the bfin/frv subdirs is FDPIC specific and not arch
specific. So start a new fdpic/ subdir to keep common things.
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Diffstat (limited to 'ldso/ldso/bfin/dl-sysdep.h')
-rw-r--r-- | ldso/ldso/bfin/dl-sysdep.h | 148 |
1 files changed, 8 insertions, 140 deletions
diff --git a/ldso/ldso/bfin/dl-sysdep.h b/ldso/ldso/bfin/dl-sysdep.h index 168e5c89a..c96526356 100644 --- a/ldso/ldso/bfin/dl-sysdep.h +++ b/ldso/ldso/bfin/dl-sysdep.h @@ -1,23 +1,10 @@ - /* Copyright (C) 2003, 2004 Red Hat, Inc. - Contributed by Alexandre Oliva <aoliva@redhat.com> - Based on ../i386/dl-sysdep.h - -This file is part of uClibc. - -uClibc is free software; you can redistribute it and/or modify it -under the terms of the GNU Lesser General Public License as -published by the Free Software Foundation; either version 2.1 of the -License, or (at your option) any later version. - -uClibc is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Lesser General Public -License along with uClibc; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, -USA. */ +/* Copyright (C) 2003, 2004 Red Hat, Inc. + * Contributed by Alexandre Oliva <aoliva@redhat.com> + * Copyright (C) 2006-2011 Analog Devices, Inc. + * Based on ../i386/dl-sysdep.h + * + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + */ /* * Various assembly language/system dependent hacks that are required @@ -34,21 +21,6 @@ USA. */ #define DL_NO_COPY_RELOCS -#define HAVE_DL_INLINES_H - -/* - * Initialization sequence for a GOT. Copy the resolver function - * descriptor and the pointer to the elf_resolve/link_map data - * structure. Initialize the got_value in the module while at that. - */ -#define INIT_GOT(GOT_BASE,MODULE) \ -{ \ - (MODULE)->loadaddr.got_value = (GOT_BASE); \ - GOT_BASE[0] = ((unsigned long *)&_dl_linux_resolve)[0]; \ - GOT_BASE[1] = ((unsigned long *)&_dl_linux_resolve)[1]; \ - GOT_BASE[2] = (unsigned long) MODULE; \ -} - /* Here we define the magic numbers that this dynamic loader should accept */ #define MAGIC1 EM_BLACKFIN #undef MAGIC2 @@ -59,19 +31,8 @@ USA. */ /* Need bootstrap relocations */ #define ARCH_NEEDS_BOOTSTRAP_RELOCS -struct elf_resolve; - -struct funcdesc_value -{ - void *entry_point; - void *got_value; -} __attribute__((__aligned__(8))); - - extern int _dl_linux_resolve(void) __attribute__((__visibility__("hidden"))); -struct funcdesc_ht; - #undef SEND_EARLY_STDERR #define SEND_EARLY_STDERR(S) \ do { \ @@ -89,65 +50,6 @@ struct funcdesc_ht; for (__t = 0; __t < 0x1000000; __t++) __asm__ __volatile__ (""); } \ } while (0) -#define DL_LOADADDR_TYPE struct elf32_fdpic_loadaddr - -#define DL_RELOC_ADDR(LOADADDR, ADDR) \ - ((ElfW(Addr))__reloc_pointer ((void*)(ADDR), (LOADADDR).map)) - -#define DL_ADDR_TO_FUNC_PTR(ADDR, LOADADDR) \ - ((void(*)(void)) _dl_funcdesc_for ((void*)(ADDR), (LOADADDR).got_value)) - -#define _dl_stabilize_funcdesc(val) \ - ({ __asm__ ("" : "+m" (*(val))); (val); }) - -#define DL_CALL_FUNC_AT_ADDR(ADDR, LOADADDR, SIGNATURE, ...) \ - ({ struct funcdesc_value fd = { (void*)(ADDR), (LOADADDR).got_value }; \ - void (*pf)(void) = (void*) _dl_stabilize_funcdesc (&fd); \ - (* SIGNATURE pf)(__VA_ARGS__); }) - -#define DL_INIT_LOADADDR_BOOT(LOADADDR, BASEADDR) \ - (__dl_init_loadaddr_map (&(LOADADDR), dl_boot_got_pointer, \ - dl_boot_ldsomap ?: dl_boot_progmap)) - -#define DL_INIT_LOADADDR_PROG(LOADADDR, BASEADDR) \ - (__dl_init_loadaddr_map (&(LOADADDR), 0, dl_boot_progmap)) - -#define DL_INIT_LOADADDR_EXTRA_DECLS \ - int dl_init_loadaddr_load_count; -#define DL_INIT_LOADADDR(LOADADDR, BASEADDR, PHDR, PHDRCNT) \ - (dl_init_loadaddr_load_count = \ - __dl_init_loadaddr (&(LOADADDR), (PHDR), (PHDRCNT))) -#define DL_INIT_LOADADDR_HDR(LOADADDR, ADDR, PHDR) \ - (__dl_init_loadaddr_hdr ((LOADADDR), (ADDR), (PHDR), \ - dl_init_loadaddr_load_count)) -#define DL_UPDATE_LOADADDR_HDR(LOADADDR, ADDR, PHDR) \ - (__dl_update_loadaddr_hdr ((LOADADDR), (ADDR), (PHDR))) -#define DL_LOADADDR_UNMAP(LOADADDR, LEN) \ - (__dl_loadaddr_unmap ((LOADADDR), (NULL))) -#define DL_LIB_UNMAP(LIB, LEN) \ - (__dl_loadaddr_unmap ((LIB)->loadaddr, (LIB)->funcdesc_ht)) -#define DL_LOADADDR_BASE(LOADADDR) \ - ((LOADADDR).got_value) - -/* This is called from dladdr(), such that we map a function - descriptor's address to the function's entry point before trying to - find in which library it's defined. */ -#define DL_LOOKUP_ADDRESS(ADDRESS) (_dl_lookup_address (ADDRESS)) - -#define DL_ADDR_IN_LOADADDR(ADDR, TPNT, TFROM) \ - (! (TFROM) && __dl_addr_in_loadaddr ((void*)(ADDR), (TPNT)->loadaddr)) - -/* - * Compute the GOT address. On several platforms, we use assembly - * here. on FDPIC, there's no way to compute the GOT address, - * since the offset between text and data is not fixed, so we arrange - * for the ldso assembly entry point to pass this value as an argument - * to _dl_start. */ -#define DL_BOOT_COMPUTE_GOT(got) ((got) = dl_boot_got_pointer) - -#define DL_BOOT_COMPUTE_DYN(dpnt, got, load_addr) \ - ((dpnt) = dl_boot_ldso_dyn_pointer) - /* We only support loading FDPIC independently-relocatable shared libraries. It probably wouldn't be too hard to support loading shared libraries that require relocation by the same amount, but we @@ -172,46 +74,12 @@ do \ } \ while (0) -/* We want want to apply all relocations in the interpreter during - bootstrap. Because of this, we have to skip the interpreter - relocations in _dl_parse_relocation_information(), see - elfinterp.c. */ -#define DL_SKIP_BOOTSTRAP_RELOC(SYMTAB, INDEX, STRTAB) 0 - -#ifdef __NR_pread -#define _DL_PREAD(FD, BUF, SIZE, OFFSET) \ - (_dl_pread((FD), (BUF), (SIZE), (OFFSET))) -#endif - -/* We want to return to dlsym() a function descriptor if the symbol - turns out to be a function. */ -#define DL_FIND_HASH_VALUE(TPNT, TYPE_CLASS, SYM) \ - (((TYPE_CLASS) & ELF_RTYPE_CLASS_DLSYM) \ - && ELF32_ST_TYPE((SYM)->st_info) == STT_FUNC \ - ? _dl_funcdesc_for ((void *)DL_RELOC_ADDR ((TPNT)->loadaddr, (SYM)->st_value), \ - (TPNT)->loadaddr.got_value) \ - : DL_RELOC_ADDR ((TPNT)->loadaddr, (SYM)->st_value)) - #define DL_IS_SPECIAL_SEGMENT(EPNT, PPNT) \ __dl_is_special_segment(EPNT, PPNT) #define DL_MAP_SEGMENT(EPNT, PPNT, INFILE, FLAGS) \ __dl_map_segment (EPNT, PPNT, INFILE, FLAGS) -#define DL_GET_READY_TO_RUN_EXTRA_PARMS \ - , struct elf32_fdpic_loadmap *dl_boot_progmap, Elf32_Addr dl_boot_got_pointer -#define DL_GET_READY_TO_RUN_EXTRA_ARGS \ - , dl_boot_progmap, dl_boot_got_pointer - - -#ifdef __USE_GNU -# include <link.h> -#else -# define __USE_GNU -# include <link.h> -# undef __USE_GNU -#endif - -#include <elf.h> +#include "../fdpic/dl-sysdep.h" static __always_inline Elf32_Addr elf_machine_load_address (void) |