diff options
Diffstat (limited to 'cpukit/libdl')
33 files changed, 2 insertions, 4686 deletions
diff --git a/cpukit/libdl/Makefile.am b/cpukit/libdl/Makefile.am index b21c16750a..8b95a7d91c 100644 --- a/cpukit/libdl/Makefile.am +++ b/cpukit/libdl/Makefile.am @@ -1,7 +1,7 @@ -if LIBDL - include $(top_srcdir)/automake/compile.am +if LIBDL + noinst_LIBRARIES = libdl.a libdl_a_SOURCES = \ dlfcn-shell.c \ @@ -33,5 +33,4 @@ libdl_a_CPPFLAGS = $(AM_CPPFLAGS) -DRTEMS_RTL_RAP_LOADER=1 -DRTEMS_RTL_ELF_LOADE endif -include $(srcdir)/preinstall.am include $(top_srcdir)/automake/local.am diff --git a/cpukit/libdl/dlfcn-shell.h b/cpukit/libdl/dlfcn-shell.h deleted file mode 100644 index 9383577d25..0000000000 --- a/cpukit/libdl/dlfcn-shell.h +++ /dev/null @@ -1,17 +0,0 @@ -/* - * COPYRIGHT (c) 2012 Chris Johns <chrisj@rtems.org> - * - * The license and distribution terms for this file may be - * found in the file LICENSE in this distribution or at - * http://www.rtems.org/license/LICENSE. - */ - -#if !defined(_DLFCN_SHELL_H_) -#define _DLFCN_SHELL_H_ - -int shell_dlopen (int argc, char* argv[]); -int shell_dlclose (int argc, char* argv[]); -int shell_dlsym (int argc, char* argv[]); -int shell_dlcall (int argc, char* argv[]); - -#endif diff --git a/cpukit/libdl/dlfcn.h b/cpukit/libdl/dlfcn.h deleted file mode 100644 index 1ac3ba1330..0000000000 --- a/cpukit/libdl/dlfcn.h +++ /dev/null @@ -1,112 +0,0 @@ -/* $NetBSD: dlfcn.h,v 1.21 2010/01/07 07:35:35 skrll Exp $ */ - -/*- - * Copyright (c) 1998 The NetBSD Foundation, Inc. - * All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by Paul Kranenburg. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef _DLFCN_H_ -#define _DLFCN_H_ - -//#include <sys/featuretest.h> -#include <sys/cdefs.h> - -#if defined(_NETBSD_SOURCE) -typedef struct _dl_info { - const char *dli_fname; /* File defining the symbol */ - void *dli_fbase; /* Base address */ - const char *dli_sname; /* Symbol name */ - const void *dli_saddr; /* Symbol address */ -} Dl_info; -#endif /* defined(_NETBSD_SOURCE) */ - -/* - * User interface to the run-time linker. - */ -__BEGIN_DECLS -void *dlopen(const char *, int); -int dlclose(void *); -void *dlsym(void * __restrict, const char * __restrict); -#if defined(_NETBSD_SOURCE) -int dladdr(void * __restrict, Dl_info * __restrict); -int dlctl(void *, int, void *); -#endif -int dlinfo(void *, int, void *); -const char *dlerror(void); -__END_DECLS - -/* Values for dlopen `mode'. */ -#define RTLD_LAZY 1 -#define RTLD_NOW 2 -#define RTLD_GLOBAL 0x100 /* Allow global searches in object */ -#define RTLD_LOCAL 0x200 -#if defined(_NETBSD_SOURCE) -#define DL_LAZY RTLD_LAZY /* Compat */ -#endif - -/* - * Special handle arguments for dlsym(). - */ -#define RTLD_NEXT ((void *) -1) /* Search subsequent objects. */ -#define RTLD_DEFAULT ((void *) -2) /* Use default search algorithm. */ -#define RTLD_SELF ((void *) -3) /* Search the caller itself. */ - -/* - * dlctl() commands - */ -#if defined(_NETBSD_SOURCE) -#define DL_GETERRNO 1 -#define DL_GETSYMBOL 2 -#if 0 -#define DL_SETSRCHPATH x -#define DL_GETLIST x -#define DL_GETREFCNT x -#define DL_GETLOADADDR x -#endif /* 0 */ -#endif /* defined(_NETBSD_SOURCE) */ - -/* - * dlinfo() commands - * - * From Solaris: http://docs.sun.com/app/docs/doc/816-5168/dlinfo-3c?a=view - */ -#define RTLD_DI_UNRESOLVED 10 -#if defined(_NETBSD_SOURCE) -#define RTLD_DI_LINKMAP 3 -#if 0 -#define RTLD_DI_ARGSINFO 1 -#define RTLD_DI_CONFIGADDR 2 -#define RTLD_DI_LMID 4 -#define RTLD_DI_SERINFO 5 -#define RTLD_DI_SERINFOSIZE 6 -#define RTLD_DI_ORIGIN 7 -#define RTLD_DI_GETSIGNAL 8 -#define RTLD_DI_SETSIGNAL 9 -#endif -#endif /* _NETBSD_SOURCE */ - -#endif /* !defined(_DLFCN_H_) */ diff --git a/cpukit/libdl/include/arch/arm/machine/elf_machdep.h b/cpukit/libdl/include/arch/arm/machine/elf_machdep.h deleted file mode 100644 index 8f01d05212..0000000000 --- a/cpukit/libdl/include/arch/arm/machine/elf_machdep.h +++ /dev/null @@ -1,132 +0,0 @@ -/* $NetBSD: elf_machdep.h,v 1.8 2009/05/30 05:56:52 skrll Exp $ */ - -#if defined(__ARMEB__) -#define ELF32_MACHDEP_ENDIANNESS ELFDATA2MSB -#else -#define ELF32_MACHDEP_ENDIANNESS ELFDATA2LSB -#endif - -#define ELF64_MACHDEP_ENDIANNESS XXX /* break compilation */ -#define ELF64_MACHDEP_ID_CASES \ - /* no 64-bit ELF machine types supported */ - -/* Processor specific flags for the ELF header e_flags field. */ -#define EF_ARM_RELEXEC 0x00000001 -#define EF_ARM_HASENTRY 0x00000002 -#define EF_ARM_INTERWORK 0x00000004 /* GNU binutils 000413 */ -#define EF_ARM_SYMSARESORTED 0x00000004 /* ARM ELF A08 */ -#define EF_ARM_APCS_26 0x00000008 /* GNU binutils 000413 */ -#define EF_ARM_DYNSYMSUSESEGIDX 0x00000008 /* ARM ELF B01 */ -#define EF_ARM_APCS_FLOAT 0x00000010 /* GNU binutils 000413 */ -#define EF_ARM_MAPSYMSFIRST 0x00000010 /* ARM ELF B01 */ -#define EF_ARM_PIC 0x00000020 -#define EF_ARM_ALIGN8 0x00000040 /* 8-bit structure alignment. */ -#define EF_ARM_NEW_ABI 0x00000080 -#define EF_ARM_OLD_ABI 0x00000100 -#define EF_ARM_SOFT_FLOAT 0x00000200 -#define EF_ARM_EABIMASK 0xff000000 - -#define ELF32_MACHDEP_ID_CASES \ - case EM_ARM: \ - break; - -#define ELF32_MACHDEP_ID EM_ARM - -#define ARCH_ELFSIZE 32 /* MD native binary size */ - -/* Processor specific relocation types */ - -#define R_ARM_NONE 0 -#define R_ARM_PC24 1 -#define R_ARM_ABS32 2 -#define R_ARM_REL32 3 -#define R_ARM_PC13 4 -#define R_ARM_ABS16 5 -#define R_ARM_ABS12 6 -#define R_ARM_THM_ABS5 7 -#define R_ARM_ABS8 8 -#define R_ARM_SBREL32 9 -#define R_ARM_THM_CALL 10 -#define R_ARM_THM_PC8 11 -#define R_ARM_AMP_VCALL9 12 -#define R_ARM_SWI24 13 -#define R_ARM_THM_SWI8 14 -#define R_ARM_XPC25 15 -#define R_ARM_THM_XPC22 16 - -/* TLS relocations */ -#define R_ARM_TLS_DTPMOD32 17 /* ID of module containing symbol */ -#define R_ARM_TLS_DTPOFF32 18 /* Offset in TLS block */ -#define R_ARM_TLS_TPOFF32 19 /* Offset in static TLS block */ - -/* 20-31 are reserved for ARM Linux. */ -#define R_ARM_COPY 20 -#define R_ARM_GLOB_DAT 21 -#define R_ARM_JUMP_SLOT 22 -#define R_ARM_RELATIVE 23 -#define R_ARM_GOTOFF 24 -#define R_ARM_GOTPC 25 -#define R_ARM_GOT32 26 -#define R_ARM_PLT32 27 -#define R_ARM_CALL 28 -#define R_ARM_JUMP24 29 -#define R_ARM_THM_JUMP24 30 -#define R_ARM_BASE_ABS 31 - -#define R_ARM_ALU_PCREL_7_0 32 -#define R_ARM_ALU_PCREL_15_8 33 -#define R_ARM_ALU_PCREL_23_15 34 -#define R_ARM_ALU_SBREL_11_0 35 -#define R_ARM_ALU_SBREL_19_12 36 -#define R_ARM_ALU_SBREL_27_20 37 -#define R_ARM_V4BX 40 -#define R_ARM_TARGET2 41 -#define R_ARM_PREL31 42 - -#define R_ARM_MOVW_ABS_NC 43 -#define R_ARM_MOVT_ABS 44 - -#define R_ARM_THM_MOVW_ABS_NC 47 -#define R_ARM_THM_MOVT_ABS 48 - -#define R_ARM_THM_JUMP19 51 - -/* 96-111 are reserved to G++. */ -#define R_ARM_GNU_VTENTRY 100 -#define R_ARM_GNU_VTINHERIT 101 -#define R_ARM_THM_JUMP11 102 -#define R_ARM_THM_JUMP8 103 - -/* More TLS relocations */ -#define R_ARM_TLS_GD32 104 /* PC-rel 32 bit for global dynamic */ -#define R_ARM_TLS_LDM32 105 /* PC-rel 32 bit for local dynamic */ -#define R_ARM_TLS_LDO32 106 /* 32 bit offset relative to TLS */ -#define R_ARM_TLS_IE32 107 /* PC-rel 32 bit for GOT entry of */ -#define R_ARM_TLS_LE32 108 -#define R_ARM_TLS_LDO12 109 -#define R_ARM_TLS_LE12 110 -#define R_ARM_TLS_IE12GP 111 - -/* 112-127 are reserved for private experiments. */ - -#define R_ARM_RXPC25 249 -#define R_ARM_RSBREL32 250 -#define R_ARM_THM_RPC22 251 -#define R_ARM_RREL32 252 -#define R_ARM_RABS32 253 -#define R_ARM_RPC24 254 -#define R_ARM_RBASE 255 - -#define R_TYPE(name) __CONCAT(R_ARM_,name) - -/* Processor specific program header flags */ -#define PF_ARM_SB 0x10000000 -#define PF_ARM_PI 0x20000000 -#define PF_ARM_ENTRY 0x80000000 - -/* Processor specific section header flags */ -#define SHF_ENTRYSECT 0x10000000 -#define SHF_COMDEF 0x80000000 - -/* Processor specific symbol types */ -#define STT_ARM_TFUNC STT_LOPROC diff --git a/cpukit/libdl/include/arch/bfin/machine/elf_machdep.h b/cpukit/libdl/include/arch/bfin/machine/elf_machdep.h deleted file mode 100644 index cf0dc19221..0000000000 --- a/cpukit/libdl/include/arch/bfin/machine/elf_machdep.h +++ /dev/null @@ -1,28 +0,0 @@ -#define ELF32_MACHDEP_ENDIANNESS ELFDATA2LSB - -#define ELF32_MACHDEP_ID_CASES \ - case EM_BLACKFIN: \ - break; - -#define ELF32_MACHDEP_ID EM_BLACKFIN - -#define ARCH_ELFSIZE 32 - -#define R_BFIN_UNUSED0 0 - -#define R_BFIN_RIMM16 5 -#define R_BFIN_LUIMM16 6 -#define R_BFIN_HUIMM16 7 -#define R_BFIN_PCREL12_JUMP_S 8 -#define R_BFIN_PCREL24_JUMP_X 9 -#define R_BFIN_PCREL24 10 -#define R_BFIN_PCREL24_JU 13 -#define R_BFIN_PCREL24_CALL_X 14 - -#define R_BFIN_BYTE_DATA 16 -#define R_BFIN_BYTE2_DATA 17 -#define R_BFIN_BYTE4_DATA 18 - - - -#define R_TYPE(name) __CONCAT(R_BFIN_,name) diff --git a/cpukit/libdl/include/arch/h8300/machine/elf_machdep.h b/cpukit/libdl/include/arch/h8300/machine/elf_machdep.h deleted file mode 100644 index 3d049157eb..0000000000 --- a/cpukit/libdl/include/arch/h8300/machine/elf_machdep.h +++ /dev/null @@ -1,59 +0,0 @@ - -#define ELF32_MACHDEP_ENDIANNESS ELFDATA2MSB - -#define ELF32_MACHDEP_ID_CASES \ - case EM_H8_300: \ - case EM_H8_300H: \ - case EM_H8S: \ - case EM_H8_500: \ - break; - -#define ELF32_MACHDEP_ID EM_H8_300 -#define ARCH_ELFSIZE 32 - -#define R_H8_NONE 0 -#define R_H8_DIR32 1 -#define R_H8_DIR32_28 2 -#define R_H8_DIR32_24 3 -#define R_H8_DIR32_16 4 -#define R_H8_DIR32U 6 -#define R_H8_DIR32U_28 7 -#define R_H8_DIR32U_24 8 -#define R_H8_DIR32U_20 9 -#define R_H8_DIR32U_16 10 -#define R_H8_DIR24 11 -#define R_H8_DIR24_20 12 -#define R_H8_DIR24_16 13 -#define R_H8_DIR24U 14 -#define R_H8_DIR24U_20 15 -#define R_H8_DIR24U_16 16 -#define R_H8_DIR16 17 -#define R_H8_DIR16U 18 -#define R_H8_DIR16S_32 19 -#define R_H8_DIR16S_28 20 -#define R_H8_DIR16S_24 21 -#define R_H8_DIR16S_20 22 -#define R_H8_DIR16S 23 -#define R_H8_DIR8 24 -#define R_H8_DIR8U 25 -#define R_H8_DIR8Z_32 26 -#define R_H8_DIR8Z_28 27 -#define R_H8_DIR8Z_24 28 -#define R_H8_DIR8Z_20 29 -#define R_H8_DIR8Z_16 30 -#define R_H8_PCREL16 31 -#define R_H8_PCREL8 32 -#define R_H8_BPOS 33 -#define R_H8_PCREL32 34 -#define R_H8_GOT32O 35 -#define R_H8_GOT16O 36 -#define R_H8_DIR16A8 59 -#define R_H8_DIR16R8 60 -#define R_H8_DIR24A8 61 -#define R_H8_DIR24R8 62 -#define R_H8_DIR32A16 63 -#define R_H8_ABS32 65 -#define R_H8_ABS32A16 127 - - -#define R_TYPE(name) __CONCAT(R_H8_,name) diff --git a/cpukit/libdl/include/arch/i386/machine/elf_machdep.h b/cpukit/libdl/include/arch/i386/machine/elf_machdep.h deleted file mode 100644 index 442c561a9c..0000000000 --- a/cpukit/libdl/include/arch/i386/machine/elf_machdep.h +++ /dev/null @@ -1,63 +0,0 @@ -/* $NetBSD: elf_machdep.h,v 1.10 2009/05/30 05:56:52 skrll Exp $ */ - -#define ELF32_MACHDEP_ENDIANNESS ELFDATA2LSB -#define ELF32_MACHDEP_ID_CASES \ - case EM_386: \ - case EM_486: \ - break; - -#define ELF64_MACHDEP_ENDIANNESS XXX /* break compilation */ -#define ELF64_MACHDEP_ID_CASES \ - /* no 64-bit ELF machine types supported */ - -#define ELF32_MACHDEP_ID EM_386 - -#define ARCH_ELFSIZE 32 /* MD native binary size */ - -/* i386 relocations */ -#define R_386_NONE 0 -#define R_386_32 1 -#define R_386_PC32 2 -#define R_386_GOT32 3 -#define R_386_PLT32 4 -#define R_386_COPY 5 -#define R_386_GLOB_DAT 6 -#define R_386_JMP_SLOT 7 -#define R_386_RELATIVE 8 -#define R_386_GOTOFF 9 -#define R_386_GOTPC 10 - -/* TLS relocations */ -#define R_386_TLS_TPOFF 14 -#define R_386_TLS_IE 15 -#define R_386_TLS_GOTIE 16 -#define R_386_TLS_LE 17 -#define R_386_TLS_GD 18 -#define R_386_TLS_LDM 19 - -/* The following relocations are GNU extensions. */ -#define R_386_16 20 -#define R_386_PC16 21 -#define R_386_8 22 -#define R_386_PC8 23 - -/* More TLS relocations */ -#define R_386_TLS_GD_32 24 -#define R_386_TLS_GD_PUSH 25 -#define R_386_TLS_GD_CALL 26 -#define R_386_TLS_GD_POP 27 -#define R_386_TLS_LDM_32 28 -#define R_386_TLS_LDM_PUSH 29 -#define R_386_TLS_LDM_CALL 30 -#define R_386_TLS_LDM_POP 31 -#define R_386_TLS_LDO_32 32 -#define R_386_TLS_IE_32 33 -#define R_386_TLS_LE_32 34 -#define R_386_TLS_DTPMOD32 35 -#define R_386_TLS_DTPOFF32 36 -#define R_386_TLS_TPOFF32 37 -#define R_386_TLS_GOTDESC 39 -#define R_386_TLS_DESC_CALL 40 -#define R_386_TLS_DESC 41 - -#define R_TYPE(name) __CONCAT(R_386_,name) diff --git a/cpukit/libdl/include/arch/lm32/machine/elf_machdep.h b/cpukit/libdl/include/arch/lm32/machine/elf_machdep.h deleted file mode 100644 index 29c75b89db..0000000000 --- a/cpukit/libdl/include/arch/lm32/machine/elf_machdep.h +++ /dev/null @@ -1,34 +0,0 @@ -#define ELF32_MACHDEP_ENDIANNESS ELFDATA2MSB - -#define ELF32_MACHDEP_ID_CASES \ - case EM_LATTICEMICO32: \ - break; - -#define ELF32_MACHDEP_ID EM_LATTICEMICO32 - -#define EF_MACH32_MACH 0x00000001 - -//#define EF_BLACKFIN - -#define ARCH_ELFSIZE 32 - -#define R_LM32_NONE 0 -#define R_LM32_8 1 -#define R_LM32_16 2 -#define R_LM32_32 3 -#define R_LM32_HI16 4 -#define R_LM32_LO16 5 -#define R_LM32_GPREL16 6 -#define R_LM32_CALL 7 -#define R_LM32_BRANCH 8 -#define R_LM32_GNU_VTINHERIT 9 -#define R_LM32_GNU_VTENTRY 10 -#define R_LM32_16_GOT 11 -#define R_LM32_GOTOFF_HI16 12 -#define R_LM32_GOTOFF_LO16 13 -#define R_LM32_COPY 14 -#define R_LM32_GLOT_DAT 15 -#define R_LM32_JMP_SLOT 16 -#define R_LM32_RELATIVE 17 - -#define R_TYPE(name) __CONCAT(R_LM32_,name) diff --git a/cpukit/libdl/include/arch/m68k/machine/elf_machdep.h b/cpukit/libdl/include/arch/m68k/machine/elf_machdep.h deleted file mode 100644 index 9a987c69b5..0000000000 --- a/cpukit/libdl/include/arch/m68k/machine/elf_machdep.h +++ /dev/null @@ -1,47 +0,0 @@ -/* $NetBSD: elf_machdep.h,v 1.7 2002/01/28 21:34:48 thorpej Exp $ */ - -#define ELF32_MACHDEP_ENDIANNESS ELFDATA2MSB -#define ELF32_MACHDEP_ID_CASES \ - case EM_68K: \ - break; - -#define ELF64_MACHDEP_ENDIANNESS XXX /* break compilation */ -#define ELF64_MACHDEP_ID_CASES \ - /* no 64-bit ELF machine types supported */ - -#define ELF32_MACHDEP_ID EM_68K - -/* - * Machine-dependent ELF flags. These are defined by the GNU tools. - */ -#define EF_CPU32 0x00810000 -#define EF_M68000 0x01000000 - -#define ARCH_ELFSIZE 32 /* MD native binary size */ - -/* m68k relocation types */ -#define R_68K_NONE 0 -#define R_68K_32 1 -#define R_68K_16 2 -#define R_68K_8 3 -#define R_68K_PC32 4 -#define R_68K_PC16 5 -#define R_68K_PC8 6 -#define R_68K_GOT32 7 -#define R_68K_GOT16 8 -#define R_68K_GOT8 9 -#define R_68K_GOT32O 10 -#define R_68K_GOT16O 11 -#define R_68K_GOT8O 12 -#define R_68K_PLT32 13 -#define R_68K_PLT16 14 -#define R_68K_PLT8 15 -#define R_68K_PLT32O 16 -#define R_68K_PLT16O 17 -#define R_68K_PLT8O 18 -#define R_68K_COPY 19 -#define R_68K_GLOB_DAT 20 -#define R_68K_JMP_SLOT 21 -#define R_68K_RELATIVE 22 - -#define R_TYPE(name) __CONCAT(R_68K_,name) diff --git a/cpukit/libdl/include/arch/mips/machine/elf_machdep.h b/cpukit/libdl/include/arch/mips/machine/elf_machdep.h deleted file mode 100644 index 26700ce4ce..0000000000 --- a/cpukit/libdl/include/arch/mips/machine/elf_machdep.h +++ /dev/null @@ -1,199 +0,0 @@ -/* $NetBSD: elf_machdep.h,v 1.15 2011/03/15 07:39:22 matt Exp $ */ - -#ifndef _MIPS_ELF_MACHDEP_H_ -#define _MIPS_ELF_MACHDEP_H_ - -#ifdef _LP64 -#define ARCH_ELFSIZE 64 /* MD native binary size */ -#else -#define ARCH_ELFSIZE 32 /* MD native binary size */ -#endif - -#if ARCH_ELFSIZE == 32 -#define ELF32_MACHDEP_ID_CASES \ - case EM_MIPS: \ - break; - -#define ELF32_MACHDEP_ID EM_MIPS - -#elif ARCH_ELFSIZE == 64 -#define ELF64_MACHDEP_ID_CASES \ - case EM_MIPS: \ - break; - -#define ELF64_MACHDEP_ID EM_MIPS - -#endif - - -/* mips relocs. */ - -#define R_MIPS_NONE 0 -#define R_MIPS_16 1 -#define R_MIPS_32 2 -#define R_MIPS_REL32 3 -#define R_MIPS_REL R_MIPS_REL32 -#define R_MIPS_26 4 -#define R_MIPS_HI16 5 /* high 16 bits of symbol value */ -#define R_MIPS_LO16 6 /* low 16 bits of symbol value */ -#define R_MIPS_GPREL16 7 /* GP-relative reference */ -#define R_MIPS_LITERAL 8 /* Reference to literal section */ -#define R_MIPS_GOT16 9 /* Reference to global offset table */ -#define R_MIPS_GOT R_MIPS_GOT16 -#define R_MIPS_PC16 10 /* 16 bit PC relative reference */ -#define R_MIPS_CALL16 11 /* 16 bit call thru glbl offset tbl */ -#define R_MIPS_CALL R_MIPS_CALL16 -#define R_MIPS_GPREL32 12 - -/* 13, 14, 15 are not defined at this point. */ -#define R_MIPS_UNUSED1 13 -#define R_MIPS_UNUSED2 14 -#define R_MIPS_UNUSED3 15 - -/* - * The remaining relocs are apparently part of the 64-bit Irix ELF ABI. - */ -#define R_MIPS_SHIFT5 16 -#define R_MIPS_SHIFT6 17 - -#define R_MIPS_64 18 -#define R_MIPS_GOT_DISP 19 -#define R_MIPS_GOT_PAGE 20 -#define R_MIPS_GOT_OFST 21 -#define R_MIPS_GOT_HI16 22 -#define R_MIPS_GOT_LO16 23 -#define R_MIPS_SUB 24 -#define R_MIPS_INSERT_A 25 -#define R_MIPS_INSERT_B 26 -#define R_MIPS_DELETE 27 -#define R_MIPS_HIGHER 28 -#define R_MIPS_HIGHEST 29 -#define R_MIPS_CALL_HI16 30 -#define R_MIPS_CALL_LO16 31 -#define R_MIPS_SCN_DISP 32 -#define R_MIPS_REL16 33 -#define R_MIPS_ADD_IMMEDIATE 34 -#define R_MIPS_PJUMP 35 -#define R_MIPS_RELGOT 36 -#define R_MIPS_JALR 37 -/* TLS relocations */ - -#define R_MIPS_TLS_DTPMOD32 38 /* Module number 32 bit */ -#define R_MIPS_TLS_DTPREL32 39 /* Module-relative offset 32 bit */ -#define R_MIPS_TLS_DTPMOD64 40 /* Module number 64 bit */ -#define R_MIPS_TLS_DTPREL64 41 /* Module-relative offset 64 bit */ -#define R_MIPS_TLS_GD 42 /* 16 bit GOT offset for GD */ -#define R_MIPS_TLS_LDM 43 /* 16 bit GOT offset for LDM */ -#define R_MIPS_TLS_DTPREL_HI16 44 /* Module-relative offset, high 16 bits */ -#define R_MIPS_TLS_DTPREL_LO16 45 /* Module-relative offset, low 16 bits */ -#define R_MIPS_TLS_GOTTPREL 46 /* 16 bit GOT offset for IE */ -#define R_MIPS_TLS_TPREL32 47 /* TP-relative offset, 32 bit */ -#define R_MIPS_TLS_TPREL64 48 /* TP-relative offset, 64 bit */ -#define R_MIPS_TLS_TPREL_HI16 49 /* TP-relative offset, high 16 bits */ -#define R_MIPS_TLS_TPREL_LO16 50 /* TP-relative offset, low 16 bits */ - -#define R_MIPS_max 51 - -#define R_TYPE(name) __CONCAT(R_MIPS_,name) - -#define R_MIPS16_min 100 -#define R_MIPS16_26 100 -#define R_MIPS16_GPREL 101 -#define R_MIPS16_GOT16 102 -#define R_MIPS16_CALL16 103 -#define R_MIPS16_HI16 104 -#define R_MIPS16_LO16 105 -#define R_MIPS16_max 106 - - -/* mips dynamic tags */ - -#define DT_MIPS_RLD_VERSION 0x70000001 -#define DT_MIPS_TIME_STAMP 0x70000002 -#define DT_MIPS_ICHECKSUM 0x70000003 -#define DT_MIPS_IVERSION 0x70000004 -#define DT_MIPS_FLAGS 0x70000005 -#define DT_MIPS_BASE_ADDRESS 0x70000006 -#define DT_MIPS_CONFLICT 0x70000008 -#define DT_MIPS_LIBLIST 0x70000009 -#define DT_MIPS_CONFLICTNO 0x7000000b -#define DT_MIPS_LOCAL_GOTNO 0x7000000a /* number of local got ents */ -#define DT_MIPS_LIBLISTNO 0x70000010 -#define DT_MIPS_SYMTABNO 0x70000011 /* number of .dynsym entries */ -#define DT_MIPS_UNREFEXTNO 0x70000012 -#define DT_MIPS_GOTSYM 0x70000013 /* first dynamic sym in got */ -#define DT_MIPS_HIPAGENO 0x70000014 -#define DT_MIPS_RLD_MAP 0x70000016 /* address of loader map */ - -/* - * ELF Flags - */ -#define EF_MIPS_PIC 0x00000002 /* Contains PIC code */ -#define EF_MIPS_CPIC 0x00000004 /* STD PIC calling sequence */ -#define EF_MIPS_ABI2 0x00000020 /* N32 */ - -#define EF_MIPS_ARCH_ASE 0x0f000000 /* Architectural extensions */ -#define EF_MIPS_ARCH_MDMX 0x08000000 /* MDMX multimedia extension */ -#define EF_MIPS_ARCH_M16 0x04000000 /* MIPS-16 ISA extensions */ - -#define EF_MIPS_ARCH 0xf0000000 /* Architecture field */ -#define EF_MIPS_ARCH_1 0x00000000 /* -mips1 code */ -#define EF_MIPS_ARCH_2 0x10000000 /* -mips2 code */ -#define EF_MIPS_ARCH_3 0x20000000 /* -mips3 code */ -#define EF_MIPS_ARCH_4 0x30000000 /* -mips4 code */ -#define EF_MIPS_ARCH_5 0x40000000 /* -mips5 code */ -#define EF_MIPS_ARCH_32 0x50000000 /* -mips32 code */ -#define EF_MIPS_ARCH_64 0x60000000 /* -mips64 code */ -#define EF_MIPS_ARCH_32R2 0x70000000 /* -mips32r2 code */ -#define EF_MIPS_ARCH_64R2 0x80000000 /* -mips64r2 code */ - -#define EF_MIPS_ABI 0x0000f000 -#define EF_MIPS_ABI_O32 0x00001000 -#define EF_MIPS_ABI_O64 0x00002000 -#define EF_MIPS_ABI_EABI32 0x00003000 -#define EF_MIPS_ABI_EABI64 0x00004000 - -#if defined(__MIPSEB__) -#define ELF32_MACHDEP_ENDIANNESS ELFDATA2MSB -#define ELF64_MACHDEP_ENDIANNESS ELFDATA2MSB -#elif defined(__MIPSEL__) -#define ELF32_MACHDEP_ENDIANNESS ELFDATA2LSB -#define ELF64_MACHDEP_ENDIANNESS ELFDATA2LSB -#elif !defined(HAVE_NBTOOL_CONFIG_H) -#error neither __MIPSEL__ nor __MIPSEB__ are defined. -#endif - -#ifdef _KERNEL -#ifdef _KERNEL_OPT -#include "opt_compat_netbsd.h" -#endif -#ifdef COMPAT_16 -/* - * Up to 1.6, the ELF dynamic loader (ld.elf_so) was not relocatable. - * Tell the kernel ELF exec code not to try relocating the interpreter - * for dynamically-linked ELF binaries. - */ -#define ELF_INTERP_NON_RELOCATABLE -#endif /* COMPAT_16 */ - -/* - * We need to be able to include the ELF header so we can pick out the - * ABI being used. - */ -#ifdef ELFSIZE -#define ELF_MD_PROBE_FUNC ELFNAME2(mips_netbsd,probe) -#define ELF_MD_COREDUMP_SETUP ELFNAME2(coredump,setup) -#endif - -struct exec_package; - -int mips_netbsd_elf32_probe(struct lwp *, struct exec_package *, void *, char *, - vaddr_t *); -void coredump_elf32_setup(struct lwp *, void *); - -int mips_netbsd_elf64_probe(struct lwp *, struct exec_package *, void *, char *, - vaddr_t *); -void coredump_elf64_setup(struct lwp *, void *); -#endif /* _KERNEL */ - -#endif /* _MIPS_ELF_MACHDEP_H_ */ diff --git a/cpukit/libdl/include/arch/moxie/machine/elf_machdep.h b/cpukit/libdl/include/arch/moxie/machine/elf_machdep.h deleted file mode 100644 index 3f0df23cdc..0000000000 --- a/cpukit/libdl/include/arch/moxie/machine/elf_machdep.h +++ /dev/null @@ -1,15 +0,0 @@ -#define ELF32_MACHDEP_ENDIANNESS ELFDATA2MSB - -#define ELF32_MACHDEP_ID_CASES \ - case EM_MOXIE: \ - break; - -#define ELF32_MACHDEP_ID EM_MOXIE - -#define ARCH_ELFSIZE 32 - -#define R_MOXIE_NONE 0 -#define R_MOXIE_32 1 -#define R_MOXIE_PCREL10 2 - -#define R_TYPE(name) __CONCAT(R_MOXIE_,name) diff --git a/cpukit/libdl/include/arch/nios2/machine/elf_machdep.h b/cpukit/libdl/include/arch/nios2/machine/elf_machdep.h deleted file mode 100644 index 3f3c108bf5..0000000000 --- a/cpukit/libdl/include/arch/nios2/machine/elf_machdep.h +++ /dev/null @@ -1,46 +0,0 @@ -/* $NetBSD: elf_machdep.h,v 1.7 2002/01/28 21:34:48 thorpej Exp $ */ - -#define ELF32_MACHDEP_ENDIANNESS ELFDATA2MSB -#define ELF32_MACHDEP_ID_CASES \ - case EM_ALTERA_NIOS2: \ - break; - -#define ELF64_MACHDEP_ENDIANNESS XXX /* break compilation */ -#define ELF64_MACHDEP_ID_CASES \ - /* no 64-bit ELF machine types supported */ - -#define ELF32_MACHDEP_ID EM_ALTERA_NIOS2 - -/* - * Machine-dependent ELF flags. These are defined by the GNU tools. - */ -#define EF_NIOS2 0x00810000 - -#define ARCH_ELFSIZE 32 /* MD native binary size */ - -/* NIOS2 relocation types */ -#define R_NIOS2_NONE 0 -#define R_NIOS2_32 1 -#define R_NIOS2_16 2 -#define R_NIOS2_8 3 -#define R_NIOS2_PC32 4 -#define R_NIOS2_PC16 5 -#define R_NIOS2_PC8 6 -#define R_NIOS2_GOT32 7 -#define R_NIOS2_GOT16 8 -#define R_NIOS2_GOT8 9 -#define R_NIOS2_GOT32O 10 -#define R_NIOS2_GOT16O 11 -#define R_NIOS2_GOT8O 12 -#define R_NIOS2_PLT32 13 -#define R_NIOS2_PLT16 14 -#define R_NIOS2_PLT8 15 -#define R_NIOS2_PLT32O 16 -#define R_NIOS2_PLT16O 17 -#define R_NIOS2_PLT8O 18 -#define R_NIOS2_COPY 19 -#define R_NIOS2_GLOB_DAT 20 -#define R_NIOS2_JMP_SLOT 21 -#define R_NIOS2_RELATIVE 22 - -#define R_TYPE(name) __CONCAT(R_NIOS2_,name) diff --git a/cpukit/libdl/include/arch/powerpc/machine/elf_machdep.h b/cpukit/libdl/include/arch/powerpc/machine/elf_machdep.h deleted file mode 100644 index f0fdb3f33b..0000000000 --- a/cpukit/libdl/include/arch/powerpc/machine/elf_machdep.h +++ /dev/null @@ -1,105 +0,0 @@ -/* $NetBSD: elf_machdep.h,v 1.9 2011/01/15 10:00:07 matt Exp $ */ - -#define ELF32_MACHDEP_ENDIANNESS ELFDATA2MSB -#define ELF32_MACHDEP_ID_CASES \ - case EM_PPC: \ - break; - -#define ELF64_MACHDEP_ENDIANNESS ELFDATA2MSB -#define ELF64_MACHDEP_ID_CASES \ - case EM_PPC64: \ - break; - -#define ELF32_MACHDEP_ID EM_PPC -#define ELF64_MACHDEP_ID EM_PPC64 - -#ifdef _LP64 -#define ARCH_ELFSIZE 64 /* MD native binary size */ -#else -#define ARCH_ELFSIZE 32 /* MD native binary size */ -#endif - -/* Specify the value of _GLOBAL_OFFSET_TABLE_ */ -#define DT_PPC_GOT DT_LOPROC - -#define R_PPC_NONE 0 -#define R_PPC_32 1 -#define R_PPC_24 2 -#define R_PPC_16 3 -#define R_PPC_16_LO 4 -#define R_PPC_16_HI 5 /* R_PPC_ADDIS */ -#define R_PPC_16_HA 6 -#define R_PPC_14 7 -#define R_PPC_14_TAKEN 8 -#define R_PPC_14_NTAKEN 9 -#define R_PPC_REL24 10 /* R_PPC_BRANCH */ -#define R_PPC_REL14 11 -#define R_PPC_REL14_TAKEN 12 -#define R_PPC_REL14_NTAKEN 13 -#define R_PPC_GOT16 14 -#define R_PPC_GOT16_LO 15 -#define R_PPC_GOT16_HI 16 -#define R_PPC_GOT16_HA 17 -#define R_PPC_PLT24 18 -#define R_PPC_COPY 19 -#define R_PPC_GLOB_DAT 20 -#define R_PPC_JMP_SLOT 21 -#define R_PPC_RELATIVE 22 -#define R_PPC_LOCAL24PC 23 -#define R_PPC_U32 24 -#define R_PPC_U16 25 -#define R_PPC_REL32 26 -#define R_PPC_PLT32 27 -#define R_PPC_PLTREL32 28 -#define R_PPC_PLT16_LO 29 -#define R_PPC_PLT16_HI 30 -#define R_PPC_PLT16_HA 31 -#define R_PPC_SDAREL16 32 -#define R_PPC_SECTOFF 33 -#define R_PPC_SECTOFF_LO 34 -#define R_PPC_SECTOFF_HI 35 -#define R_PPC_SECTOFF_HA 36 -#define R_PPC_ADDR30 37 - -/* TLS relocations */ -#define R_PPC_TLS 67 - -#define R_PPC_DTPMOD32 68 -#define R_PPC_TPREL16 69 -#define R_PPC_TPREL16_LO 70 -#define R_PPC_TPREL16_HI 71 -#define R_PPC_TPREL16_HA 72 -#define R_PPC_TPREL32 73 -#define R_PPC_DTPREL16 74 -#define R_PPC_DTPREL16_LO 75 -#define R_PPC_DTPREL16_HI 76 -#define R_PPC_DTPREL16_HA 77 -#define R_PPC_DTPREL32 78 - -#define R_PPC_GOT_TLSGD16 79 -#define R_PPC_GOT_TLSGD16_LO 80 -#define R_PPC_GOT_TLSGD16_HI 81 -#define R_PPC_GOT_TLSGD16_HA 82 -#define R_PPC_GOT_TLSLD16 83 -#define R_PPC_GOT_TLSLD16_LO 84 -#define R_PPC_GOT_TLSLD16_HI 85 -#define R_PPC_GOT_TLSLD16_HA 86 - -#define R_PPC_GOT_TPREL16 87 -#define R_PPC_GOT_TPREL16_LO 88 -#define R_PPC_GOT_TPREL16_HI 89 -#define R_PPC_GOT_TPREL16_HA 90 -#define R_PPC_GOT_DTPREL16 91 -#define R_PPC_GOT_DTPREL16_LO 92 -#define R_PPC_GOT_DTPREL16_HI 93 -#define R_PPC_GOT_DTPREL16_HA 94 -#define R_PPC_TLSGD 95 -#define R_PPC_TLSLD 96 - -/* Used for the secure-plt PIC code sequences */ -#define R_PPC_REL16 249 -#define R_PPC_REL16_LO 250 -#define R_PPC_REL16_HI 251 -#define R_PPC_REL16_HA 252 - -#define R_TYPE(name) __CONCAT(R_PPC_,name) diff --git a/cpukit/libdl/include/arch/sparc/machine/elf_machdep.h b/cpukit/libdl/include/arch/sparc/machine/elf_machdep.h deleted file mode 100644 index e8f2b630c2..0000000000 --- a/cpukit/libdl/include/arch/sparc/machine/elf_machdep.h +++ /dev/null @@ -1,92 +0,0 @@ -/* $NetBSD: elf_machdep.h,v 1.7 2009/05/30 05:56:53 skrll Exp $ */ - -#define ELF32_MACHDEP_ENDIANNESS ELFDATA2MSB -#define ELF32_MACHDEP_ID_CASES \ - case EM_SPARC: \ - case EM_SPARC32PLUS: \ - break; - -#define ELF64_MACHDEP_ENDIANNESS ELFDATA2MSB -#define ELF64_MACHDEP_ID_CASES \ - case EM_SPARC32PLUS: \ - case EM_SPARCV9: \ - /* no 64-bit ELF machine types supported */ - -#define ELF32_MACHDEP_ID EM_SPARC /* XXX right? */ - -#define ARCH_ELFSIZE 32 /* MD native binary size */ - -#define R_SPARC_NONE 0 -#define R_SPARC_8 1 -#define R_SPARC_16 2 -#define R_SPARC_32 3 -#define R_SPARC_DISP8 4 -#define R_SPARC_DISP16 5 -#define R_SPARC_DISP32 6 -#define R_SPARC_WDISP30 7 -#define R_SPARC_WDISP22 8 -#define R_SPARC_HI22 9 -#define R_SPARC_22 10 -#define R_SPARC_13 11 -#define R_SPARC_LO10 12 -#define R_SPARC_GOT10 13 -#define R_SPARC_GOT13 14 -#define R_SPARC_GOT22 15 -#define R_SPARC_PC10 16 -#define R_SPARC_PC22 17 -#define R_SPARC_WPLT30 18 -#define R_SPARC_COPY 19 -#define R_SPARC_GLOB_DAT 20 -#define R_SPARC_JMP_SLOT 21 -#define R_SPARC_RELATIVE 22 -#define R_SPARC_UA32 23 -#define R_SPARC_PLT32 24 -#define R_SPARC_HIPLT22 25 -#define R_SPARC_LOPLT10 26 -#define R_SPARC_PCPLT32 27 -#define R_SPARC_PCPLT22 28 -#define R_SPARC_PCPLT10 29 -#define R_SPARC_10 30 -#define R_SPARC_11 31 -#define R_SPARC_64 32 -#define R_SPARC_OLO10 33 -#define R_SPARC_HH22 34 -#define R_SPARC_HM10 35 -#define R_SPARC_LM22 36 -#define R_SPARC_PC_HH22 37 -#define R_SPARC_PC_HM10 38 -#define R_SPARC_PC_LM22 39 -#define R_SPARC_WDISP16 40 -#define R_SPARC_WDISP19 41 -#define R_SPARC_GLOB_JMP 42 -#define R_SPARC_7 43 -#define R_SPARC_5 44 -#define R_SPARC_6 45 - -/* TLS relocations */ -#define R_SPARC_TLS_GD_HI22 56 -#define R_SPARC_TLS_GD_LO10 57 -#define R_SPARC_TLS_GD_ADD 58 -#define R_SPARC_TLS_GD_CALL 59 -#define R_SPARC_TLS_LDM_HI22 60 -#define R_SPARC_TLS_LDM_LO10 61 -#define R_SPARC_TLS_LDM_ADD 62 -#define R_SPARC_TLS_LDM_CALL 63 -#define R_SPARC_TLS_LDO_HIX22 64 -#define R_SPARC_TLS_LDO_LOX10 65 -#define R_SPARC_TLS_LDO_ADD 66 -#define R_SPARC_TLS_IE_HI22 67 -#define R_SPARC_TLS_IE_LO10 68 -#define R_SPARC_TLS_IE_LD 69 -#define R_SPARC_TLS_IE_LDX 70 -#define R_SPARC_TLS_IE_ADD 71 -#define R_SPARC_TLS_LE_HIX22 72 -#define R_SPARC_TLS_LE_LOX10 73 -#define R_SPARC_TLS_DTPMOD32 74 -#define R_SPARC_TLS_DTPMOD64 75 -#define R_SPARC_TLS_DTPOFF32 76 -#define R_SPARC_TLS_DTPOFF64 77 -#define R_SPARC_TLS_TPOFF32 78 -#define R_SPARC_TLS_TPOFF64 79 - -#define R_TYPE(name) __CONCAT(R_SPARC_,name) diff --git a/cpukit/libdl/include/arch/v850/machine/elf_machdep.h b/cpukit/libdl/include/arch/v850/machine/elf_machdep.h deleted file mode 100644 index b76d1491d6..0000000000 --- a/cpukit/libdl/include/arch/v850/machine/elf_machdep.h +++ /dev/null @@ -1,74 +0,0 @@ -#define ELF32_MACHDEP_ENDIANNESS ELFDATA2LSB - -#define ELF32_MACHDEP_ID_CASES \ - case EM_V850: \ - break; - -#define ELF32_MACHDEP_ID EM_V850 - - - -#define EF_V850_ARCH 0xf0000000 -#define E_V850_ARCH 0x00000000 -#define E_V850E_ARCH 0x10000000 -#define E_V850E1_ARCH 0x20000000 -#define E_V850E2_ARCH 0x30000000 -#define E_V850E2V3_ARCH 0x40000000 - -#define ARCH_ELFSIZE 32 - - -#define R_V850_NONE 0 -#define R_V850_9_PCREL 1 -#define R_V850_22_PCREL 2 -#define R_V850_HI16_S 3 -#define R_V850_HI16 4 -#define R_V850_LO16 5 -#define R_V850_ABS32 6 -#define R_V850_16 7 -#define R_V850_8 8 -#define R_V850_SDA_16_16_OFFSET 9 -#define R_V850_SDA_15_16_OFFSET 10 -#define R_V850_ZDA_16_16_OFFSET 11 -#define R_V850_ZDA_15_16_OFFSET 12 -#define R_V850_TDA_6_8_OFFSET 13 -#define R_V850_TDA_7_8_OFFSET 14 -#define R_V850_TDA_7_7_OFFSET 15 -#define R_V850_TDA_16_16_OFFSET 16 -#define R_V850_TDA_4_5_OFFSET 17 -#define R_V850_TDA_4_4_OFFSET 18 -#define R_V850_SDA_16_16_SPLIT_OFFSET 19 -#define R_V850_ZDA_16_16_SPLIT_OFFSET 20 -#define R_V850_CALLT_6_7_OFFSET 21 -#define R_V850_CALLT_16_16_OFFSET 22 -#define R_V850_GNU_VTINHERIT 23 -#define R_V850_GNU_VTENTRY 24 -#define R_V850_LONGCALL 25 -#define R_V850_LONGJUMP 26 -#define R_V850_ALIGN 27 -#define R_V850_REL32 28 -#define R_V850_LO16_SPLIT_OFFSET 29 -#define R_V850_16_PCREL 30 -#define R_V850_17_PCREL 31 -#define R_V850_23 32 -#define R_V850_32_PCREL 33 -#define R_V850_32_ABS 34 -#define R_V850_16_SPLIT_OFFSET 35 -#define R_V850_16_S1 36 -#define R_V850_LO16_S1 37 -#define R_V850_CALLT_15_16_OFFSET 38 -#define R_V850_32_GOTPCREL 39 -#define R_V850_16_GOT 40 -#define R_V850_32_GOT 41 -#define R_V850_22_PLT 42 -#define R_V850_32_PLT 43 -#define R_V850_COPY 44 -#define R_V850_GLOB_DAT 45 -#define R_V850_JMP_SLOT 46 -#define R_V850_RELATIVE 47 -#define R_V850_16_GOTOFF 48 -#define R_V850_32_GOTOFF 49 -#define R_V850_CODE 50 -#define R_V850_DATA 51 - -#define R_TYPE(name) __CONCAT(R_V850_,name) diff --git a/cpukit/libdl/include/link.h b/cpukit/libdl/include/link.h deleted file mode 100644 index c93efd9e78..0000000000 --- a/cpukit/libdl/include/link.h +++ /dev/null @@ -1,45 +0,0 @@ -/* $NetBSD: link.h,v 1.13 2008/04/28 20:22:54 martin Exp $ */ - -/*- - * Copyright (c) 1999 The NetBSD Foundation, Inc. - * All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility, - * NASA Ames Research Center. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef _LINK_H_ -#define _LINK_H_ - -/* - * Pull in the correct definitions for our toolchain target. - */ -#ifdef __ELF__ -#include <link_elf.h> -#else -#include <link_aout.h> -#endif - -#endif /* _LINK_H_ */ diff --git a/cpukit/libdl/include/link_elf.h b/cpukit/libdl/include/link_elf.h deleted file mode 100644 index d2691b68b0..0000000000 --- a/cpukit/libdl/include/link_elf.h +++ /dev/null @@ -1,79 +0,0 @@ -/* $NetBSD: link_elf.h,v 1.8 2009/11/04 19:28:03 pooka Exp $ */ - -/* - * This only exists for GDB. - */ - -#ifndef _LINK_ELF_H_ -#define _LINK_ELF_H_ - -#include <sys/types.h> - -#include <machine/elf_machdep.h> -#include <stdint.h> -#include <rtems/rtl/rtl-obj-fwd.h> - -enum sections -{ - rap_text = 0, - rap_const = 1, - rap_ctor = 2, - rap_dtor = 3, - rap_data = 4, - rap_bss = 5, - rap_secs = 6 -}; - -/** - * Object details. - */ -typedef struct -{ - const char* name; /**< Section name. */ - uint32_t offset; /**< The offset in the elf file. */ - uint32_t size; /**< The size of the section. */ - uint32_t rap_id; /**< Which obj does this section belongs to. */ -}section_detail; - -/** - * link map structure will be used for GDB support. - */ -struct link_map { - const char* name; /**< Name of the obj. */ - uint32_t sec_num; /**< The count of section. */ - section_detail* sec_detail; /**< The section details. */ - uint32_t* sec_addr[rap_secs]; /**< The RAP section addr. */ - uint32_t rpathlen; /**< The length of the path. */ - char* rpath; /**< The path of object files. */ - struct link_map* l_next; /**< Linked list of mapped libs. */ - struct link_map* l_prev; -}; - -/** - * r_debug is used to manage the debug related structures. - */ -struct r_debug { - int r_version; /* not used */ - struct link_map *r_map; /* list of loaded images */ - enum { - RT_CONSISTENT, /* things are stable */ - RT_ADD, /* adding a shared library */ - RT_DELETE /* removing a shared library */ - } r_state; -}; - -/* - * stub function. It is empty. - */ -void _rtld_debug_state (void); - -/* - * add link map to the list. - */ -int _rtld_linkmap_add (rtems_rtl_obj_t* obj); - -/* - * Remove link map from the list. - */ -void _rtld_linkmap_delete (rtems_rtl_obj_t* obj); -#endif /* _LINK_ELF_H_ */ diff --git a/cpukit/libdl/include/sys/cdefs_elf.h b/cpukit/libdl/include/sys/cdefs_elf.h deleted file mode 100644 index 91903d6017..0000000000 --- a/cpukit/libdl/include/sys/cdefs_elf.h +++ /dev/null @@ -1,152 +0,0 @@ -/* $NetBSD: cdefs_elf.h,v 1.24 2005/07/16 17:53:36 christos Exp $ */ - -/* - * Copyright (c) 1995, 1996 Carnegie-Mellon University. - * All rights reserved. - * - * Author: Chris G. Demetriou - * - * Permission to use, copy, modify and distribute this software and - * its documentation is hereby granted, provided that both the copyright - * notice and this permission notice appear in all copies of the - * software, derivative works or modified versions, and any portions - * thereof, and that both notices appear in supporting documentation. - * - * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" - * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND - * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. - * - * Carnegie Mellon requests users of this software to return to - * - * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU - * School of Computer Science - * Carnegie Mellon University - * Pittsburgh PA 15213-3890 - * - * any improvements or extensions that they make and grant Carnegie the - * rights to redistribute these changes. - */ - -#ifndef _SYS_CDEFS_ELF_H_ -#define _SYS_CDEFS_ELF_H_ - -#ifdef __LEADING_UNDERSCORE -#define _C_LABEL(x) __CONCAT(_,x) -#define _C_LABEL_STRING(x) "_"x -#else -#define _C_LABEL(x) x -#define _C_LABEL_STRING(x) x -#endif - -#if __STDC__ -#define ___RENAME(x) __asm__(___STRING(_C_LABEL(x))) -#else -#ifdef __LEADING_UNDERSCORE -#define ___RENAME(x) ____RENAME(_/**/x) -#define ____RENAME(x) __asm__(___STRING(x)) -#else -#define ___RENAME(x) __asm__(___STRING(x)) -#endif -#endif - -#define __indr_reference(sym,alias) /* nada, since we do weak refs */ - -#if __STDC__ -#define __strong_alias(alias,sym) \ - __asm__(".global " _C_LABEL_STRING(#alias) "\n" \ - _C_LABEL_STRING(#alias) " = " _C_LABEL_STRING(#sym)); - -#define __weak_alias(alias,sym) \ - __asm__(".weak " _C_LABEL_STRING(#alias) "\n" \ - _C_LABEL_STRING(#alias) " = " _C_LABEL_STRING(#sym)); -#define __weak_extern(sym) \ - __asm__(".weak " _C_LABEL_STRING(#sym)); -#define __warn_references(sym,msg) \ - __asm__(".section .gnu.warning." #sym "\n\t.ascii \"" msg "\"\n\t.text"); - -#else /* !__STDC__ */ - -#ifdef __LEADING_UNDERSCORE -#define __weak_alias(alias,sym) ___weak_alias(_/**/alias,_/**/sym) -#define ___weak_alias(alias,sym) \ - __asm__(".weak alias\nalias = sym"); -#else -#define __weak_alias(alias,sym) \ - __asm__(".weak alias\nalias = sym"); -#endif -#ifdef __LEADING_UNDERSCORE -#define __weak_extern(sym) ___weak_extern(_/**/sym) -#define ___weak_extern(sym) \ - __asm__(".weak sym"); -#else -#define __weak_extern(sym) \ - __asm__(".weak sym"); -#endif -#define __warn_references(sym,msg) \ - __asm__(".section .gnu.warning.sym\n\t.ascii msg ; .text"); - -#endif /* !__STDC__ */ - -#if __STDC__ -#define __SECTIONSTRING(_sec, _str) \ - __asm__(".section " #_sec "\n\t.asciz \"" _str "\"\n\t.previous") -#else -#define __SECTIONSTRING(_sec, _str) \ - __asm__(".section _sec\n\t.asciz _str\n\t.previous") -#endif - -#define __IDSTRING(_n,_s) __SECTIONSTRING(.ident,_s) - -#define __RCSID(_s) __IDSTRING(rcsid,_s) -#define __SCCSID(_s) -#define __SCCSID2(_s) -#if 0 /* XXX userland __COPYRIGHTs have \ns in them */ -#define __COPYRIGHT(_s) __SECTIONSTRING(.copyright,_s) -#else -#define __COPYRIGHT(_s) \ - static const char copyright[] \ - __attribute__((__unused__,__section__(".copyright"))) = _s -#endif - -#define __KERNEL_RCSID(_n, _s) __RCSID(_s) -#define __KERNEL_SCCSID(_n, _s) -#if 0 /* XXX see above */ -#define __KERNEL_COPYRIGHT(_n, _s) __COPYRIGHT(_s) -#else -#define __KERNEL_COPYRIGHT(_n, _s) __SECTIONSTRING(.copyright, _s) -#endif - -#ifndef __lint__ -#define __link_set_make_entry(set, sym) \ - static void const * const __link_set_##set##_sym_##sym \ - __section("link_set_" #set) __used = &sym -#define __link_set_make_entry2(set, sym, n) \ - static void const * const __link_set_##set##_sym_##sym##_##n \ - __section("link_set_" #set) __used = &sym[n] -#else -#define __link_set_make_entry(set, sym) \ - extern void const * const __link_set_##set##_sym_##sym -#define __link_set_make_entry2(set, sym, n) \ - extern void const * const __link_set_##set##_sym_##sym##_##n -#endif /* __lint__ */ - -#define __link_set_add_text(set, sym) __link_set_make_entry(set, sym) -#define __link_set_add_rodata(set, sym) __link_set_make_entry(set, sym) -#define __link_set_add_data(set, sym) __link_set_make_entry(set, sym) -#define __link_set_add_bss(set, sym) __link_set_make_entry(set, sym) -#define __link_set_add_text2(set, sym, n) __link_set_make_entry2(set, sym, n) -#define __link_set_add_rodata2(set, sym, n) __link_set_make_entry2(set, sym, n) -#define __link_set_add_data2(set, sym, n) __link_set_make_entry2(set, sym, n) -#define __link_set_add_bss2(set, sym, n) __link_set_make_entry2(set, sym, n) - -#define __link_set_decl(set, ptype) \ - extern ptype * const __start_link_set_##set[]; \ - extern ptype * const __stop_link_set_##set[] \ - -#define __link_set_start(set) (__start_link_set_##set) -#define __link_set_end(set) (__stop_link_set_##set) - -#define __link_set_count(set) \ - (__link_set_end(set) - __link_set_start(set)) - -#endif /* !_SYS_CDEFS_ELF_H_ */ diff --git a/cpukit/libdl/include/sys/exec_elf.h b/cpukit/libdl/include/sys/exec_elf.h deleted file mode 100644 index 4242415f54..0000000000 --- a/cpukit/libdl/include/sys/exec_elf.h +++ /dev/null @@ -1,1101 +0,0 @@ -/* $NetBSD: exec_elf.h,v 1.102 2010/03/01 11:27:29 skrll Exp $ */ - -/*- - * Copyright (c) 1994 The NetBSD Foundation, Inc. - * All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by Christos Zoulas. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef _SYS_EXEC_ELF_H_ -#define _SYS_EXEC_ELF_H_ - -/* - * The current ELF ABI specification is available at: - * http://www.sco.com/developers/gabi/ - * - * Current header definitions are in: - * http://www.sco.com/developers/gabi/latest/ch4.eheader.html - */ - -#if defined(_KERNEL) || defined(_STANDALONE) -#include <sys/types.h> -#else -#include <inttypes.h> -#endif /* _KERNEL || _STANDALONE */ - -#if defined(ELFSIZE) -#define CONCAT(x,y) __CONCAT(x,y) -#define ELFNAME(x) CONCAT(elf,CONCAT(ELFSIZE,CONCAT(_,x))) -#define ELFNAME2(x,y) CONCAT(x,CONCAT(_elf,CONCAT(ELFSIZE,CONCAT(_,y)))) -#define ELFNAMEEND(x) CONCAT(x,CONCAT(_elf,ELFSIZE)) -#define ELFDEFNNAME(x) CONCAT(ELF,CONCAT(ELFSIZE,CONCAT(_,x))) -#endif - -#if HAVE_NBTOOL_CONFIG_H -#include <nbinclude/machine/elf_machdep.h> -#else -#include <machine/elf_machdep.h> -#endif - -typedef uint8_t Elf_Byte; - -typedef uint32_t Elf32_Addr; -#define ELF32_FSZ_ADDR 4 -typedef uint32_t Elf32_Off; -typedef int32_t Elf32_SOff; -#define ELF32_FSZ_OFF 4 -typedef int32_t Elf32_Sword; -#define ELF32_FSZ_SWORD 4 -typedef uint32_t Elf32_Word; -#define ELF32_FSZ_WORD 4 -typedef uint16_t Elf32_Half; -#define ELF32_FSZ_HALF 2 -typedef uint64_t Elf32_Lword; -#define ELF32_FSZ_LWORD 8 - -typedef uint64_t Elf64_Addr; -#define ELF64_FSZ_ADDR 8 -typedef uint64_t Elf64_Off; -typedef int64_t Elf64_SOff; -#define ELF64_FSZ_OFF 8 -typedef int32_t Elf64_Shalf; -#define ELF64_FSZ_SHALF 4 - -#ifndef ELF64_FSZ_SWORD -typedef int32_t Elf64_Sword; -#define ELF64_FSZ_SWORD 4 -#endif /* ELF64_FSZ_SWORD */ -#ifndef ELF64_FSZ_WORD -typedef uint32_t Elf64_Word; -#define ELF64_FSZ_WORD 4 -#endif /* ELF64_FSZ_WORD */ - -typedef int64_t Elf64_Sxword; -#define ELF64_FSZ_SXWORD 8 -typedef uint64_t Elf64_Xword; -#define ELF64_FSZ_XWORD 8 -typedef uint64_t Elf64_Lword; -#define ELF64_FSZ_LWORD 8 -typedef uint32_t Elf64_Half; -#define ELF64_FSZ_HALF 4 -typedef uint16_t Elf64_Quarter; -#define ELF64_FSZ_QUARTER 2 - -/* - * ELF Header - */ -#define ELF_NIDENT 16 - -typedef struct { - unsigned char e_ident[ELF_NIDENT]; /* Id bytes */ - Elf32_Half e_type; /* file type */ - Elf32_Half e_machine; /* machine type */ - Elf32_Word e_version; /* version number */ - Elf32_Addr e_entry; /* entry point */ - Elf32_Off e_phoff; /* Program hdr offset */ - Elf32_Off e_shoff; /* Section hdr offset */ - Elf32_Word e_flags; /* Processor flags */ - Elf32_Half e_ehsize; /* sizeof ehdr */ - Elf32_Half e_phentsize; /* Program header entry size */ - Elf32_Half e_phnum; /* Number of program headers */ - Elf32_Half e_shentsize; /* Section header entry size */ - Elf32_Half e_shnum; /* Number of section headers */ - Elf32_Half e_shstrndx; /* String table index */ -} Elf32_Ehdr; - -typedef struct { - unsigned char e_ident[ELF_NIDENT]; /* Id bytes */ - Elf64_Quarter e_type; /* file type */ - Elf64_Quarter e_machine; /* machine type */ - Elf64_Half e_version; /* version number */ - Elf64_Addr e_entry; /* entry point */ - Elf64_Off e_phoff; /* Program hdr offset */ - Elf64_Off e_shoff; /* Section hdr offset */ - Elf64_Half e_flags; /* Processor flags */ - Elf64_Quarter e_ehsize; /* sizeof ehdr */ - Elf64_Quarter e_phentsize; /* Program header entry size */ - Elf64_Quarter e_phnum; /* Number of program headers */ - Elf64_Quarter e_shentsize; /* Section header entry size */ - Elf64_Quarter e_shnum; /* Number of section headers */ - Elf64_Quarter e_shstrndx; /* String table index */ -} Elf64_Ehdr; - -/* e_ident offsets */ -#define EI_MAG0 0 /* '\177' */ -#define EI_MAG1 1 /* 'E' */ -#define EI_MAG2 2 /* 'L' */ -#define EI_MAG3 3 /* 'F' */ -#define EI_CLASS 4 /* File class */ -#define EI_DATA 5 /* Data encoding */ -#define EI_VERSION 6 /* File version */ -#define EI_OSABI 7 /* Operating system/ABI identification */ -#define EI_ABIVERSION 8 /* ABI version */ -#define EI_PAD 9 /* Start of padding bytes up to EI_NIDENT*/ -#define EI_NIDENT 16 /* First non-ident header byte */ - -/* e_ident[EI_MAG0,EI_MAG3] */ -#define ELFMAG0 0x7f -#define ELFMAG1 'E' -#define ELFMAG2 'L' -#define ELFMAG3 'F' -#define ELFMAG "\177ELF" -#define SELFMAG 4 - -/* e_ident[EI_CLASS] */ -#define ELFCLASSNONE 0 /* Invalid class */ -#define ELFCLASS32 1 /* 32-bit objects */ -#define ELFCLASS64 2 /* 64-bit objects */ -#define ELFCLASSNUM 3 - -/* e_ident[EI_DATA] */ -#define ELFDATANONE 0 /* Invalid data encoding */ -#define ELFDATA2LSB 1 /* 2's complement values, LSB first */ -#define ELFDATA2MSB 2 /* 2's complement values, MSB first */ - -/* e_ident[EI_VERSION] */ -#define EV_NONE 0 /* Invalid version */ -#define EV_CURRENT 1 /* Current version */ -#define EV_NUM 2 - -/* e_ident[EI_OSABI] */ -#define ELFOSABI_SYSV 0 /* UNIX System V ABI */ -#define ELFOSABI_HPUX 1 /* HP-UX operating system */ -#define ELFOSABI_NETBSD 2 /* NetBSD */ -#define ELFOSABI_LINUX 3 /* GNU/Linux */ -#define ELFOSABI_HURD 4 /* GNU/Hurd */ -#define ELFOSABI_86OPEN 5 /* 86Open */ -#define ELFOSABI_SOLARIS 6 /* Solaris */ -#define ELFOSABI_MONTEREY 7 /* Monterey */ -#define ELFOSABI_IRIX 8 /* IRIX */ -#define ELFOSABI_FREEBSD 9 /* FreeBSD */ -#define ELFOSABI_TRU64 10 /* TRU64 UNIX */ -#define ELFOSABI_MODESTO 11 /* Novell Modesto */ -#define ELFOSABI_OPENBSD 12 /* OpenBSD */ -#define ELFOSABI_OPENVMS 13 /* OpenVMS */ -#define ELFOSABI_NSK 14 /* HP Non-Stop Kernel */ -#define ELFOSABI_AROS 15 /* Amiga Research OS */ -/* Unofficial OSABIs follow */ -#define ELFOSABI_ARM 97 /* ARM */ -#define ELFOSABI_STANDALONE 255 /* Standalone (embedded) application */ - -#define ELFOSABI_NONE ELFOSABI_SYSV -#define ELFOSABI_AIX ELFOSABI_MONTEREY - -/* e_type */ -#define ET_NONE 0 /* No file type */ -#define ET_REL 1 /* Relocatable file */ -#define ET_EXEC 2 /* Executable file */ -#define ET_DYN 3 /* Shared object file */ -#define ET_CORE 4 /* Core file */ -#define ET_NUM 5 - -#define ET_LOOS 0xfe00 /* Operating system specific range */ -#define ET_HIOS 0xfeff -#define ET_LOPROC 0xff00 /* Processor-specific range */ -#define ET_HIPROC 0xffff - -/* e_machine */ -#define EM_NONE 0 /* No machine */ -#define EM_M32 1 /* AT&T WE 32100 */ -#define EM_SPARC 2 /* SPARC */ -#define EM_386 3 /* Intel 80386 */ -#define EM_68K 4 /* Motorola 68000 */ -#define EM_88K 5 /* Motorola 88000 */ -#define EM_486 6 /* Intel 80486 */ -#define EM_860 7 /* Intel 80860 */ -#define EM_MIPS 8 /* MIPS I Architecture */ -#define EM_S370 9 /* Amdahl UTS on System/370 */ -#define EM_MIPS_RS3_LE 10 /* MIPS RS3000 Little-endian */ - /* 11-14 - Reserved */ -#define EM_RS6000 11 /* IBM RS/6000 XXX reserved */ -#define EM_PARISC 15 /* Hewlett-Packard PA-RISC */ -#define EM_NCUBE 16 /* NCube XXX reserved */ -#define EM_VPP500 17 /* Fujitsu VPP500 */ -#define EM_SPARC32PLUS 18 /* Enhanced instruction set SPARC */ -#define EM_960 19 /* Intel 80960 */ -#define EM_PPC 20 /* PowerPC */ -#define EM_PPC64 21 /* 64-bit PowerPC */ - /* 22-35 - Reserved */ -#define EM_S390 22 /* System/390 XXX reserved */ -#define EM_V800 36 /* NEC V800 */ -#define EM_FR20 37 /* Fujitsu FR20 */ -#define EM_RH32 38 /* TRW RH-32 */ -#define EM_RCE 39 /* Motorola RCE */ -#define EM_ARM 40 /* Advanced RISC Machines ARM */ -#define EM_ALPHA 41 /* DIGITAL Alpha */ -#define EM_SH 42 /* Hitachi Super-H */ -#define EM_SPARCV9 43 /* SPARC Version 9 */ -#define EM_TRICORE 44 /* Siemens Tricore */ -#define EM_ARC 45 /* Argonaut RISC Core */ -#define EM_H8_300 46 /* Hitachi H8/300 */ -#define EM_H8_300H 47 /* Hitachi H8/300H */ -#define EM_H8S 48 /* Hitachi H8S */ -#define EM_H8_500 49 /* Hitachi H8/500 */ -#define EM_IA_64 50 /* Intel Merced Processor */ -#define EM_MIPS_X 51 /* Stanford MIPS-X */ -#define EM_COLDFIRE 52 /* Motorola Coldfire */ -#define EM_68HC12 53 /* Motorola MC68HC12 */ -#define EM_MMA 54 /* Fujitsu MMA Multimedia Accelerator */ -#define EM_PCP 55 /* Siemens PCP */ -#define EM_NCPU 56 /* Sony nCPU embedded RISC processor */ -#define EM_NDR1 57 /* Denso NDR1 microprocessor */ -#define EM_STARCORE 58 /* Motorola Star*Core processor */ -#define EM_ME16 59 /* Toyota ME16 processor */ -#define EM_ST100 60 /* STMicroelectronics ST100 processor */ -#define EM_TINYJ 61 /* Advanced Logic Corp. TinyJ embedded family processor */ -#define EM_X86_64 62 /* AMD x86-64 architecture */ -#define EM_PDSP 63 /* Sony DSP Processor */ -#define EM_PDP10 64 /* Digital Equipment Corp. PDP-10 */ -#define EM_PDP11 65 /* Digital Equipment Corp. PDP-11 */ -#define EM_FX66 66 /* Siemens FX66 microcontroller */ -#define EM_ST9PLUS 67 /* STMicroelectronics ST9+ 8/16 bit microcontroller */ -#define EM_ST7 68 /* STMicroelectronics ST7 8-bit microcontroller */ -#define EM_68HC16 69 /* Motorola MC68HC16 Microcontroller */ -#define EM_68HC11 70 /* Motorola MC68HC11 Microcontroller */ -#define EM_68HC08 71 /* Motorola MC68HC08 Microcontroller */ -#define EM_68HC05 72 /* Motorola MC68HC05 Microcontroller */ -#define EM_SVX 73 /* Silicon Graphics SVx */ -#define EM_ST19 74 /* STMicroelectronics ST19 8-bit CPU */ -#define EM_VAX 75 /* Digital VAX */ -#define EM_CRIS 76 /* Axis Communications 32-bit embedded processor */ -#define EM_JAVELIN 77 /* Infineon Technologies 32-bit embedded CPU */ -#define EM_FIREPATH 78 /* Element 14 64-bit DSP processor */ -#define EM_ZSP 79 /* LSI Logic's 16-bit DSP processor */ -#define EM_MMIX 80 /* Donald Knuth's educational 64-bit processor */ -#define EM_HUANY 81 /* Harvard's machine-independent format */ -#define EM_PRISM 82 /* SiTera Prism */ -#define EM_AVR 83 /* Atmel AVR 8-bit microcontroller */ -#define EM_FR30 84 /* Fujitsu FR30 */ -#define EM_D10V 85 /* Mitsubishi D10V */ -#define EM_D30V 86 /* Mitsubishi D30V */ -#define EM_V850 87 /* NEC v850 */ -#define EM_M32R 88 /* Mitsubishi M32R */ -#define EM_MN10300 89 /* Matsushita MN10300 */ -#define EM_MN10200 90 /* Matsushita MN10200 */ -#define EM_PJ 91 /* picoJava */ -#define EM_OPENRISC 92 /* OpenRISC 32-bit embedded processor */ -#define EM_ARC_A5 93 /* ARC Cores Tangent-A5 */ -#define EM_XTENSA 94 /* Tensilica Xtensa Architecture */ -#define EM_VIDEOCORE 95 /* Alphamosaic VideoCore processor */ -#define EM_TMM_GPP 96 /* Thompson Multimedia General Purpose Processor */ -#define EM_NS32K 97 /* National Semiconductor 32000 series */ -#define EM_TPC 98 /* Tenor Network TPC processor */ -#define EM_SNP1K 99 /* Trebia SNP 1000 processor */ -#define EM_ST200 100 /* STMicroelectronics ST200 microcontroller */ -#define EM_IP2K 101 /* Ubicom IP2xxx microcontroller family */ -#define EM_MAX 102 /* MAX processor */ -#define EM_CR 103 /* National Semiconductor CompactRISC micorprocessor */ -#define EM_F2MC16 104 /* Fujitsu F2MC16 */ -#define EM_MSP430 105 /* Texas Instruments MSP430 */ -#define EM_BLACKFIN 106 /* Analog Devices Blackfin DSP */ -#define EM_SE_C33 107 /* Seiko Epson S1C33 family */ -#define EM_SEP 108 /* Sharp embedded microprocessor */ -#define EM_ARCA 109 /* Arca RISC microprocessor */ -#define EM_UNICORE 110 /* UNICORE from PKU-Unity Ltd. and MPRC Peking University */ -#define EM_EXCESS 111 /* eXcess: 16/32/64-bit configurable embedded CPU */ -#define EM_DXP 112 /* Icera Semiconductor Inc. Deep Execution Processor */ -#define EM_ALTERA_NIOS2 113 /* Altera Nios II soft-core processor */ -#define EM_CRX 114 /* National Semiconductor CRX */ -#define EM_XGATE 115 /* Motorola XGATE embedded processor */ -#define EM_C166 116 /* Infineon C16x/XC16x processor */ -#define EM_M16C 117 /* Renesas M16C series microprocessors */ -#define EM_DSPIC30F 118 /* Microchip Technology dsPIC30F Digital Signal Controller */ -#define EM_CE 119 /* Freescale Communication Engine RISC core */ -#define EM_M32C 120 /* Renesas M32C series microprocessors */ - -#define EM_LATTICEMICO32 138 /* RICS processor for Lattice FPGA architecture */ - -#define EM_MICROBLAZE 189 /* Xilinx MicroBlaze 32-bit RISC soft processor core */ - -#define EM_MOXIE 0xFEED - -/* Unofficial machine types follow */ -#define EM_AVR32 6317 /* used by NetBSD/avr32 */ -#define EM_ALPHA_EXP 36902 /* used by NetBSD/alpha; obsolete */ -#define EM_NUM 36903 - -/* - * Program Header - */ -typedef struct { - Elf32_Word p_type; /* entry type */ - Elf32_Off p_offset; /* offset */ - Elf32_Addr p_vaddr; /* virtual address */ - Elf32_Addr p_paddr; /* physical address */ - Elf32_Word p_filesz; /* file size */ - Elf32_Word p_memsz; /* memory size */ - Elf32_Word p_flags; /* flags */ - Elf32_Word p_align; /* memory & file alignment */ -} Elf32_Phdr; - -typedef struct { - Elf64_Half p_type; /* entry type */ - Elf64_Half p_flags; /* flags */ - Elf64_Off p_offset; /* offset */ - Elf64_Addr p_vaddr; /* virtual address */ - Elf64_Addr p_paddr; /* physical address */ - Elf64_Xword p_filesz; /* file size */ - Elf64_Xword p_memsz; /* memory size */ - Elf64_Xword p_align; /* memory & file alignment */ -} Elf64_Phdr; - -/* p_type */ -#define PT_NULL 0 /* Program header table entry unused */ -#define PT_LOAD 1 /* Loadable program segment */ -#define PT_DYNAMIC 2 /* Dynamic linking information */ -#define PT_INTERP 3 /* Program interpreter */ -#define PT_NOTE 4 /* Auxiliary information */ -#define PT_SHLIB 5 /* Reserved, unspecified semantics */ -#define PT_PHDR 6 /* Entry for header table itself */ -#define PT_NUM 7 - -#define PT_LOOS 0x60000000 /* OS-specific range */ -#define PT_HIOS 0x6fffffff -#define PT_LOPROC 0x70000000 /* Processor-specific range */ -#define PT_HIPROC 0x7fffffff - -#define PT_MIPS_REGINFO 0x70000000 - -/* p_flags */ -#define PF_R 0x4 /* Segment is readable */ -#define PF_W 0x2 /* Segment is writable */ -#define PF_X 0x1 /* Segment is executable */ - -#define PF_MASKOS 0x0ff00000 /* Operating system specific values */ -#define PF_MASKPROC 0xf0000000 /* Processor-specific values */ - -/* Extended program header index. */ -#define PN_XNUM 0xffff - -/* - * Section Headers - */ -typedef struct { - Elf32_Word sh_name; /* section name (.shstrtab index) */ - Elf32_Word sh_type; /* section type */ - Elf32_Word sh_flags; /* section flags */ - Elf32_Addr sh_addr; /* virtual address */ - Elf32_Off sh_offset; /* file offset */ - Elf32_Word sh_size; /* section size */ - Elf32_Word sh_link; /* link to another */ - Elf32_Word sh_info; /* misc info */ - Elf32_Word sh_addralign; /* memory alignment */ - Elf32_Word sh_entsize; /* table entry size */ -} Elf32_Shdr; - -typedef struct { - Elf64_Half sh_name; /* section name (.shstrtab index) */ - Elf64_Half sh_type; /* section type */ - Elf64_Xword sh_flags; /* section flags */ - Elf64_Addr sh_addr; /* virtual address */ - Elf64_Off sh_offset; /* file offset */ - Elf64_Xword sh_size; /* section size */ - Elf64_Half sh_link; /* link to another */ - Elf64_Half sh_info; /* misc info */ - Elf64_Xword sh_addralign; /* memory alignment */ - Elf64_Xword sh_entsize; /* table entry size */ -} Elf64_Shdr; - -/* sh_type */ -#define SHT_NULL 0 /* Section header table entry unused */ -#define SHT_PROGBITS 1 /* Program information */ -#define SHT_SYMTAB 2 /* Symbol table */ -#define SHT_STRTAB 3 /* String table */ -#define SHT_RELA 4 /* Relocation information w/ addend */ -#define SHT_HASH 5 /* Symbol hash table */ -#define SHT_DYNAMIC 6 /* Dynamic linking information */ -#define SHT_NOTE 7 /* Auxiliary information */ -#define SHT_NOBITS 8 /* No space allocated in file image */ -#define SHT_REL 9 /* Relocation information w/o addend */ -#define SHT_SHLIB 10 /* Reserved, unspecified semantics */ -#define SHT_DYNSYM 11 /* Symbol table for dynamic linker */ -#define SHT_INIT_ARRAY 14 /* Initialization function pointers */ -#define SHT_FINI_ARRAY 15 /* Termination function pointers */ -#define SHT_PREINIT_ARRAY 16 /* Pre-initialization function ptrs */ -#define SHT_GROUP 17 /* Section group */ -#define SHT_SYMTAB_SHNDX 18 /* Section indexes (see SHN_XINDEX) */ -#define SHT_NUM 19 - -#define SHT_LOOS 0x60000000 /* Operating system specific range */ -#define SHT_SUNW_move 0x6ffffffa -#define SHT_SUNW_syminfo 0x6ffffffc -#define SHT_SUNW_verdef 0x6ffffffd /* Versions defined by file */ -#define SHT_GNU_verdef SHT_SUNW_verdef -#define SHT_SUNW_verneed 0x6ffffffe /* Versions needed by file */ -#define SHT_GNU_verneed SHT_SUNW_verneed -#define SHT_SUNW_versym 0x6fffffff /* Symbol versions */ -#define SHT_GNU_versym SHT_SUNW_versym -#define SHT_HIOS 0x6fffffff -#define SHT_LOPROC 0x70000000 /* Processor-specific range */ -#define SHT_AMD64_UNWIND 0x70000001 /* unwind information */ -#define SHT_HIPROC 0x7fffffff -#define SHT_LOUSER 0x80000000 /* Application-specific range */ -#define SHT_HIUSER 0xffffffff - -/* sh_flags */ -#define SHF_WRITE 0x1 /* Section contains writable data */ -#define SHF_ALLOC 0x2 /* Section occupies memory */ -#define SHF_EXECINSTR 0x4 /* Section contains executable insns */ -#define SHF_MERGE 0x10 /* Section contains data that can be merged */ -#define SHF_STRINGS 0x20 /* Section contains null-terminated strings */ -#define SHF_INFO_LINK 0x40 /* Section header's sh_info holds table index */ -#define SHF_LINK_ORDER 0x80 /* Section has special ordering requirements */ - -#define SHF_MASKOS 0x0f000000 /* Operating system specific values */ -#define SHF_MASKPROC 0xf0000000 /* Processor-specific values */ - -/* - * Symbol Table - */ -typedef struct { - Elf32_Word st_name; /* Symbol name (.strtab index) */ - Elf32_Word st_value; /* value of symbol */ - Elf32_Word st_size; /* size of symbol */ - Elf_Byte st_info; /* type / binding attrs */ - Elf_Byte st_other; /* unused */ - Elf32_Half st_shndx; /* section index of symbol */ -} Elf32_Sym; - -typedef struct { - Elf64_Half st_name; /* Symbol name (.strtab index) */ - Elf_Byte st_info; /* type / binding attrs */ - Elf_Byte st_other; /* unused */ - Elf64_Quarter st_shndx; /* section index of symbol */ - Elf64_Addr st_value; /* value of symbol */ - Elf64_Xword st_size; /* size of symbol */ -} Elf64_Sym; - -/* Symbol Table index of the undefined symbol */ -#define ELF_SYM_UNDEFINED 0 - -#define STN_UNDEF 0 /* undefined index */ - -/* st_info: Symbol Bindings */ -#define STB_LOCAL 0 /* local symbol */ -#define STB_GLOBAL 1 /* global symbol */ -#define STB_WEAK 2 /* weakly defined global symbol */ -#define STB_NUM 3 - -#define STB_LOOS 10 /* Operating system specific range */ -#define STB_HIOS 12 -#define STB_LOPROC 13 /* Processor-specific range */ -#define STB_HIPROC 15 - -/* st_info: Symbol Types */ -#define STT_NOTYPE 0 /* Type not specified */ -#define STT_OBJECT 1 /* Associated with a data object */ -#define STT_FUNC 2 /* Associated with a function */ -#define STT_SECTION 3 /* Associated with a section */ -#define STT_FILE 4 /* Associated with a file name */ -#define STT_COMMON 5 /* Uninitialised common block */ -#define STT_TLS 6 /* Thread local data object */ -#define STT_NUM 7 - -#define STT_LOOS 10 /* Operating system specific range */ -#define STT_HIOS 12 -#define STT_LOPROC 13 /* Processor-specific range */ -#define STT_HIPROC 15 - -/* st_other: Visibility Types */ -#define STV_DEFAULT 0 /* use binding type */ -#define STV_INTERNAL 1 /* not referenced from outside */ -#define STV_HIDDEN 2 /* not visible, may be used via ptr */ -#define STV_PROTECTED 3 /* visible, not preemptible */ -#define STV_EXPORTED 4 -#define STV_SINGLETON 5 -#define STV_ELIMINATE 6 - -/* st_info/st_other utility macros */ -#define ELF_ST_BIND(info) ((uint32_t)(info) >> 4) -#define ELF_ST_TYPE(info) ((uint32_t)(info) & 0xf) -#define ELF_ST_INFO(bind,type) ((Elf_Byte)(((bind) << 4) | \ - ((type) & 0xf))) -#define ELF_ST_VISIBILITY(other) ((uint32_t)(other) & 3) - -/* - * Special section indexes - */ -#define SHN_UNDEF 0 /* Undefined section */ - -#define SHN_LORESERVE 0xff00 /* Reserved range */ -#define SHN_ABS 0xfff1 /* Absolute symbols */ -#define SHN_COMMON 0xfff2 /* Common symbols */ -#define SHN_XINDEX 0xffff /* Escape -- index stored elsewhere */ -#define SHN_HIRESERVE 0xffff - -#define SHN_LOPROC 0xff00 /* Processor-specific range */ -#define SHN_HIPROC 0xff1f -#define SHN_LOOS 0xff20 /* Operating system specific range */ -#define SHN_HIOS 0xff3f - -#define SHN_MIPS_ACOMMON 0xff00 -#define SHN_MIPS_TEXT 0xff01 -#define SHN_MIPS_DATA 0xff02 -#define SHN_MIPS_SCOMMON 0xff03 - -/* - * Relocation Entries - */ -typedef struct { - Elf32_Word r_offset; /* where to do it */ - Elf32_Word r_info; /* index & type of relocation */ -} Elf32_Rel; - -typedef struct { - Elf32_Word r_offset; /* where to do it */ - Elf32_Word r_info; /* index & type of relocation */ - Elf32_Sword r_addend; /* adjustment value */ -} Elf32_Rela; - -/* r_info utility macros */ -#define ELF32_R_SYM(info) ((info) >> 8) -#define ELF32_R_TYPE(info) ((info) & 0xff) -#define ELF32_R_INFO(sym, type) (((sym) << 8) + (unsigned char)(type)) - -typedef struct { - Elf64_Addr r_offset; /* where to do it */ - Elf64_Xword r_info; /* index & type of relocation */ -} Elf64_Rel; - -typedef struct { - Elf64_Addr r_offset; /* where to do it */ - Elf64_Xword r_info; /* index & type of relocation */ - Elf64_Sxword r_addend; /* adjustment value */ -} Elf64_Rela; - -/* r_info utility macros */ -#define ELF64_R_SYM(info) ((info) >> 32) -#define ELF64_R_TYPE(info) ((info) & 0xffffffff) -#define ELF64_R_INFO(sym,type) (((sym) << 32) + (type)) - -/* - * Move entries - */ -typedef struct { - Elf32_Lword m_value; /* symbol value */ - Elf32_Word m_info; /* size + index */ - Elf32_Word m_poffset; /* symbol offset */ - Elf32_Half m_repeat; /* repeat count */ - Elf32_Half m_stride; /* stride info */ -} Elf32_Move; - -#define ELF32_M_SYM(info) ((info) >> 8) -#define ELF32_M_SIZE(info) (info) & 0xff) -#define ELF32_M_INFO(sym, size) (((sym) << 8) + (unsigned char)(size)) - -typedef struct { - Elf64_Lword m_value; /* symbol value */ - Elf64_Xword m_info; /* size + index */ - Elf64_Xword m_poffset; /* symbol offset */ - Elf64_Half m_repeat; /* repeat count */ - Elf64_Half m_stride; /* stride info */ -} Elf64_Move; - -#define ELF64_M_SYM(info) ((info) >> 8) -#define ELF64_M_SIZE(info) (info) & 0xff) -#define ELF64_M_INFO(sym, size) (((sym) << 8) + (unsigned char)(size)) - -/* - * Hardware/software capabilities entry - */ -typedef struct { - Elf32_Word c_tag; /* entry tag value */ - union { - Elf32_Addr c_ptr; - Elf32_Word c_val; - } c_un; -} Elf32_Cap; - -typedef struct { - Elf64_Xword c_tag; /* entry tag value */ - union { - Elf64_Addr c_ptr; - Elf64_Xword c_val; - } c_un; -} Elf64_Cap; - -/* - * Dynamic Section structure array - */ -typedef struct { - Elf32_Word d_tag; /* entry tag value */ - union { - Elf32_Addr d_ptr; - Elf32_Word d_val; - } d_un; -} Elf32_Dyn; - -typedef struct { - Elf64_Xword d_tag; /* entry tag value */ - union { - Elf64_Addr d_ptr; - Elf64_Xword d_val; - } d_un; -} Elf64_Dyn; - -/* d_tag */ -#define DT_NULL 0 /* Marks end of dynamic array */ -#define DT_NEEDED 1 /* Name of needed library (DT_STRTAB offset) */ -#define DT_PLTRELSZ 2 /* Size, in bytes, of relocations in PLT */ -#define DT_PLTGOT 3 /* Address of PLT and/or GOT */ -#define DT_HASH 4 /* Address of symbol hash table */ -#define DT_STRTAB 5 /* Address of string table */ -#define DT_SYMTAB 6 /* Address of symbol table */ -#define DT_RELA 7 /* Address of Rela relocation table */ -#define DT_RELASZ 8 /* Size, in bytes, of DT_RELA table */ -#define DT_RELAENT 9 /* Size, in bytes, of one DT_RELA entry */ -#define DT_STRSZ 10 /* Size, in bytes, of DT_STRTAB table */ -#define DT_SYMENT 11 /* Size, in bytes, of one DT_SYMTAB entry */ -#define DT_INIT 12 /* Address of initialization function */ -#define DT_FINI 13 /* Address of termination function */ -#define DT_SONAME 14 /* Shared object name (DT_STRTAB offset) */ -#define DT_RPATH 15 /* Library search path (DT_STRTAB offset) */ -#define DT_SYMBOLIC 16 /* Start symbol search within local object */ -#define DT_REL 17 /* Address of Rel relocation table */ -#define DT_RELSZ 18 /* Size, in bytes, of DT_REL table */ -#define DT_RELENT 19 /* Size, in bytes, of one DT_REL entry */ -#define DT_PLTREL 20 /* Type of PLT relocation entries */ -#define DT_DEBUG 21 /* Used for debugging; unspecified */ -#define DT_TEXTREL 22 /* Relocations might modify non-writable seg */ -#define DT_JMPREL 23 /* Address of relocations associated with PLT */ -#define DT_BIND_NOW 24 /* Process all relocations at load-time */ -#define DT_INIT_ARRAY 25 /* Address of initialization function array */ -#define DT_FINI_ARRAY 26 /* Size, in bytes, of DT_INIT_ARRAY array */ -#define DT_INIT_ARRAYSZ 27 /* Address of termination function array */ -#define DT_FINI_ARRAYSZ 28 /* Size, in bytes, of DT_FINI_ARRAY array*/ -#define DT_NUM 29 - -#define DT_LOOS 0x60000000 /* Operating system specific range */ -#define DT_VERSYM 0x6ffffff0 /* Symbol versions */ -#define DT_FLAGS_1 0x6ffffffb /* ELF dynamic flags */ -#define DT_VERDEF 0x6ffffffc /* Versions defined by file */ -#define DT_VERDEFNUM 0x6ffffffd /* Number of versions defined by file */ -#define DT_VERNEED 0x6ffffffe /* Versions needed by file */ -#define DT_VERNEEDNUM 0x6fffffff /* Number of versions needed by file */ -#define DT_HIOS 0x6fffffff -#define DT_LOPROC 0x70000000 /* Processor-specific range */ -#define DT_HIPROC 0x7fffffff - -/* Flag values for DT_FLAGS_1 (incomplete) */ -#define DF_1_INITFIRST 0x00000020 /* Object's init/fini take priority */ - -/* - * Auxiliary Vectors - */ -typedef struct { - Elf32_Word a_type; /* 32-bit id */ - Elf32_Word a_v; /* 32-bit id */ -} Aux32Info; - -typedef struct { - Elf64_Half a_type; /* 32-bit id */ - Elf64_Xword a_v; /* 64-bit id */ -} Aux64Info; - -/* a_type */ -#define AT_NULL 0 /* Marks end of array */ -#define AT_IGNORE 1 /* No meaning, a_un is undefined */ -#define AT_EXECFD 2 /* Open file descriptor of object file */ -#define AT_PHDR 3 /* &phdr[0] */ -#define AT_PHENT 4 /* sizeof(phdr[0]) */ -#define AT_PHNUM 5 /* # phdr entries */ -#define AT_PAGESZ 6 /* PAGESIZE */ -#define AT_BASE 7 /* Interpreter base addr */ -#define AT_FLAGS 8 /* Processor flags */ -#define AT_ENTRY 9 /* Entry address of executable */ -#define AT_DCACHEBSIZE 10 /* Data cache block size */ -#define AT_ICACHEBSIZE 11 /* Instruction cache block size */ -#define AT_UCACHEBSIZE 12 /* Unified cache block size */ - - /* Vendor specific */ -#define AT_MIPS_NOTELF 10 /* XXX a_val != 0 -> MIPS XCOFF executable */ - -#define AT_EUID 2000 /* euid (solaris compatible numbers) */ -#define AT_RUID 2001 /* ruid (solaris compatible numbers) */ -#define AT_EGID 2002 /* egid (solaris compatible numbers) */ -#define AT_RGID 2003 /* rgid (solaris compatible numbers) */ - - /* Solaris kernel specific */ -#define AT_SUN_LDELF 2004 /* dynamic linker's ELF header */ -#define AT_SUN_LDSHDR 2005 /* dynamic linker's section header */ -#define AT_SUN_LDNAME 2006 /* dynamic linker's name */ -#define AT_SUN_LPGSIZE 2007 /* large pagesize */ - - /* Other information */ -#define AT_SUN_PLATFORM 2008 /* sysinfo(SI_PLATFORM) */ -#define AT_SUN_HWCAP 2009 /* process hardware capabilities */ -#define AT_SUN_IFLUSH 2010 /* do we need to flush the instruction cache? */ -#define AT_SUN_CPU 2011 /* CPU name */ - /* ibcs2 emulation band aid */ -#define AT_SUN_EMUL_ENTRY 2012 /* coff entry point */ -#define AT_SUN_EMUL_EXECFD 2013 /* coff file descriptor */ - /* Executable's fully resolved name */ -#define AT_SUN_EXECNAME 2014 - -/* - * Note Headers - */ -typedef struct { - Elf32_Word n_namesz; - Elf32_Word n_descsz; - Elf32_Word n_type; -} Elf32_Nhdr; - -typedef struct { - Elf64_Half n_namesz; - Elf64_Half n_descsz; - Elf64_Half n_type; -} Elf64_Nhdr; - -#define ELF_NOTE_TYPE_ABI_TAG 1 - -/* GNU-specific note name and description sizes */ -#define ELF_NOTE_ABI_NAMESZ 4 -#define ELF_NOTE_ABI_DESCSZ 16 -/* GNU-specific note name */ -#define ELF_NOTE_ABI_NAME "GNU\0" - -/* GNU-specific OS/version value stuff */ -#define ELF_NOTE_ABI_OS_LINUX 0 -#define ELF_NOTE_ABI_OS_HURD 1 -#define ELF_NOTE_ABI_OS_SOLARIS 2 - -/* NetBSD-specific note type: Emulation name. desc is emul name string. */ -#define ELF_NOTE_TYPE_NETBSD_TAG 1 -/* NetBSD-specific note name and description sizes */ -#define ELF_NOTE_NETBSD_NAMESZ 7 -#define ELF_NOTE_NETBSD_DESCSZ 4 -/* NetBSD-specific note name */ -#define ELF_NOTE_NETBSD_NAME "NetBSD\0\0" - -/* NetBSD-specific note type: Checksum. There should be 1 NOTE per PT_LOAD - section. desc is a tuple of <phnum>(16),<chk-type>(16),<chk-value>. */ -#define ELF_NOTE_TYPE_CHECKSUM_TAG 2 -#define ELF_NOTE_CHECKSUM_CRC32 1 -#define ELF_NOTE_CHECKSUM_MD5 2 -#define ELF_NOTE_CHECKSUM_SHA1 3 -#define ELF_NOTE_CHECKSUM_SHA256 4 - -/* NetBSD-specific note type: PaX. There should be 1 NOTE per executable. - section. desc is a 32 bit bitmask */ -#define ELF_NOTE_TYPE_PAX_TAG 3 -#define ELF_NOTE_PAX_MPROTECT 0x01 /* Force enable Mprotect */ -#define ELF_NOTE_PAX_NOMPROTECT 0x02 /* Force disable Mprotect */ -#define ELF_NOTE_PAX_GUARD 0x04 /* Force enable Segvguard */ -#define ELF_NOTE_PAX_NOGUARD 0x08 /* Force disable Servguard */ -#define ELF_NOTE_PAX_ASLR 0x10 /* Force enable ASLR */ -#define ELF_NOTE_PAX_NOASLR 0x20 /* Force disable ASLR */ -#define ELF_NOTE_PAX_NAMESZ 4 -#define ELF_NOTE_PAX_NAME "PaX\0" -#define ELF_NOTE_PAX_DESCSZ 4 - -/* - * NetBSD-specific core file information. - * - * NetBSD ELF core files use notes to provide information about - * the process's state. The note name is "NetBSD-CORE" for - * information that is global to the process, and "NetBSD-CORE@nn", - * where "nn" is the lwpid of the LWP that the information belongs - * to (such as register state). - * - * We use the following note identifiers: - * - * ELF_NOTE_NETBSD_CORE_PROCINFO - * Note is a "netbsd_elfcore_procinfo" structure. - * - * We also use ptrace(2) request numbers (the ones that exist in - * machine-dependent space) to identify register info notes. The - * info in such notes is in the same format that ptrace(2) would - * export that information. - * - * Please try to keep the members of this structure nicely aligned, - * and if you add elements, add them to the end and bump the version. - */ - -#define ELF_NOTE_NETBSD_CORE_NAME "NetBSD-CORE" - -#define ELF_NOTE_NETBSD_CORE_PROCINFO 1 - -#define NETBSD_ELFCORE_PROCINFO_VERSION 1 - -struct netbsd_elfcore_procinfo { - /* Version 1 fields start here. */ - uint32_t cpi_version; /* netbsd_elfcore_procinfo version */ - uint32_t cpi_cpisize; /* sizeof(netbsd_elfcore_procinfo) */ - uint32_t cpi_signo; /* killing signal */ - uint32_t cpi_sigcode; /* signal code */ - uint32_t cpi_sigpend[4]; /* pending signals */ - uint32_t cpi_sigmask[4]; /* blocked signals */ - uint32_t cpi_sigignore[4];/* blocked signals */ - uint32_t cpi_sigcatch[4];/* blocked signals */ - int32_t cpi_pid; /* process ID */ - int32_t cpi_ppid; /* parent process ID */ - int32_t cpi_pgrp; /* process group ID */ - int32_t cpi_sid; /* session ID */ - uint32_t cpi_ruid; /* real user ID */ - uint32_t cpi_euid; /* effective user ID */ - uint32_t cpi_svuid; /* saved user ID */ - uint32_t cpi_rgid; /* real group ID */ - uint32_t cpi_egid; /* effective group ID */ - uint32_t cpi_svgid; /* saved group ID */ - uint32_t cpi_nlwps; /* number of LWPs */ - int8_t cpi_name[32]; /* copy of p->p_comm */ - /* Add version 2 fields below here. */ - int32_t cpi_siglwp; /* LWP target of killing signal */ -}; - -#if defined(ELFSIZE) && (ELFSIZE == 32) -#define Elf_Ehdr Elf32_Ehdr -#define Elf_Phdr Elf32_Phdr -#define Elf_Shdr Elf32_Shdr -#define Elf_Sym Elf32_Sym -#define Elf_Rel Elf32_Rel -#define Elf_Rela Elf32_Rela -#define Elf_Dyn Elf32_Dyn -#define Elf_Word Elf32_Word -#define Elf_Sword Elf32_Sword -#define Elf_Addr Elf32_Addr -#define Elf_Off Elf32_Off -#define Elf_SOff Elf32_SOff -#define Elf_Nhdr Elf32_Nhdr - -#define ELF_R_SYM ELF32_R_SYM -#define ELF_R_TYPE ELF32_R_TYPE -#define ELFCLASS ELFCLASS32 - -#define AuxInfo Aux32Info -#elif defined(ELFSIZE) && (ELFSIZE == 64) -#define Elf_Ehdr Elf64_Ehdr -#define Elf_Phdr Elf64_Phdr -#define Elf_Shdr Elf64_Shdr -#define Elf_Sym Elf64_Sym -#define Elf_Rel Elf64_Rel -#define Elf_Rela Elf64_Rela -#define Elf_Dyn Elf64_Dyn -#define Elf_Word Elf64_Word -#define Elf_Sword Elf64_Sword -#define Elf_Addr Elf64_Addr -#define Elf_Off Elf64_Off -#define Elf_SOff Elf64_SOff -#define Elf_Nhdr Elf64_Nhdr - -#define ELF_R_SYM ELF64_R_SYM -#define ELF_R_TYPE ELF64_R_TYPE -#define ELFCLASS ELFCLASS64 - -#define AuxInfo Aux64Info -#endif - -#define ELF32_ST_BIND(info) ELF_ST_BIND(info) -#define ELF32_ST_TYPE(info) ELF_ST_TYPE(info) -#define ELF32_ST_INFO(bind,type) ELF_ST_INFO(bind,type) -#define ELF32_ST_VISIBILITY(other) ELF_ST_VISIBILITY(other) - -#define ELF64_ST_BIND(info) ELF_ST_BIND(info) -#define ELF64_ST_TYPE(info) ELF_ST_TYPE(info) -#define ELF64_ST_INFO(bind,type) ELF_ST_INFO(bind,type) -#define ELF64_ST_VISIBILITY(other) ELF_ST_VISIBILITY(other) - -typedef struct { - Elf32_Half si_boundto; /* direct bindings - symbol bound to */ - Elf32_Half si_flags; /* per symbol flags */ -} Elf32_Syminfo; - -typedef struct { - Elf64_Half si_boundto; /* direct bindings - symbol bound to */ - Elf64_Half si_flags; /* per symbol flags */ -} Elf64_Syminfo; - -#define SYMINFO_FLG_DIRECT 0x0001 /* symbol ref has direct association - to object containing definition */ -#define SYMINFO_FLG_PASSTHRU 0x0002 /* ignored - see SYMINFO_FLG_FILTER */ -#define SYMINFO_FLG_COPY 0x0004 /* symbol is a copy-reloc */ -#define SYMINFO_FLG_LAZYLOAD 0x0008 /* object containing defn should be - lazily-loaded */ -#define SYMINFO_FLG_DIRECTBIND 0x0010 /* ref should be bound directly to - object containing definition */ -#define SYMINFO_FLG_NOEXTDIRECT 0x0020 /* don't let an external reference - directly bind to this symbol */ -#define SYMINFO_FLG_FILTER 0x0002 /* symbol ref is associated to a */ -#define SYMINFO_FLG_AUXILIARY 0x0040 /* standard or auxiliary filter */ - -#define SYMINFO_BT_SELF 0xffff /* symbol bound to self */ -#define SYMINFO_BT_PARENT 0xfffe /* symbol bound to parent */ -#define SYMINFO_BT_NONE 0xfffd /* no special symbol binding */ -#define SYMINFO_BT_EXTERN 0xfffc /* symbol defined as external */ -#define SYMINFO_BT_LOWRESERVE 0xff00 /* beginning of reserved entries */ - -#define SYMINFO_NONE 0 /* Syminfo version */ -#define SYMINFO_CURRENT 1 -#define SYMINFO_NUM 2 - -/* - * These constants are used for Elf32_Verdef struct's version number. - */ -#define VER_DEF_NONE 0 -#define VER_DEF_CURRENT 1 - -/* - * These constants are used for Elf32_Verdef struct's vd_flags. - */ -#define VER_FLG_BASE 0x1 -#define VER_FLG_WEAK 0x2 - -/* - * These are used in an Elf32_Versym field. - */ -#define VER_NDX_LOCAL 0 -#define VER_NDX_GLOBAL 1 - -/* - * These constants are used for Elf32_Verneed struct's version number. - */ -#define VER_NEED_NONE 0 -#define VER_NEED_CURRENT 1 - -/* - * GNU Extension hidding symb - */ -#define VERSYM_HIDDEN 0x8000 -#define VERSYM_VERSION 0x7fff - -#define ELF_VER_CHR '@' - -/* - * These are current size independent. - */ - -typedef struct { - Elf32_Half vd_version; /* version number of structure */ - Elf32_Half vd_flags; /* flags (VER_FLG_*) */ - Elf32_Half vd_ndx; /* version index */ - Elf32_Half vd_cnt; /* number of verdaux entries */ - Elf32_Word vd_hash; /* hash of name */ - Elf32_Word vd_aux; /* offset to verdaux entries */ - Elf32_Word vd_next; /* offset to next verdef */ -} Elf32_Verdef; -typedef Elf32_Verdef Elf64_Verdef; - -typedef struct { - Elf32_Word vda_name; /* string table offset of name */ - Elf32_Word vda_next; /* offset to verdaux */ -} Elf32_Verdaux; -typedef Elf32_Verdaux Elf64_Verdaux; - -typedef struct { - Elf32_Half vn_version; /* version number of structure */ - Elf32_Half vn_cnt; /* number of vernaux entries */ - Elf32_Word vn_file; /* string table offset of library name*/ - Elf32_Word vn_aux; /* offset to vernaux entries */ - Elf32_Word vn_next; /* offset to next verneed */ -} Elf32_Verneed; -typedef Elf32_Verneed Elf64_Verneed; - -typedef struct { - Elf32_Word vna_hash; /* Hash of dependency name */ - Elf32_Half vna_flags; /* flags (VER_FLG_*) */ - Elf32_Half vna_other; /* unused */ - Elf32_Word vna_name; /* string table offset to version name*/ - Elf32_Word vna_next; /* offset to next vernaux */ -} Elf32_Vernaux; -typedef Elf32_Vernaux Elf64_Vernaux; - -typedef struct { - Elf32_Half vs_vers; -} Elf32_Versym; -typedef Elf32_Versym Elf64_Versym; - -#ifdef _KERNEL - -#define ELF_AUX_ENTRIES 14 /* Max size of aux array passed to loader */ -#define ELF32_NO_ADDR (~(Elf32_Addr)0) /* Indicates addr. not yet filled in */ -#define ELF32_LINK_ADDR ((Elf32_Addr)-2) /* advises to use link address */ -#define ELF64_NO_ADDR (~(Elf64_Addr)0) /* Indicates addr. not yet filled in */ -#define ELF64_LINK_ADDR ((Elf64_Addr)-2) /* advises to use link address */ - -#if defined(ELFSIZE) && (ELFSIZE == 64) -#define ELF_NO_ADDR ELF64_NO_ADDR -#define ELF_LINK_ADDR ELF64_LINK_ADDR -#elif defined(ELFSIZE) && (ELFSIZE == 32) -#define ELF_NO_ADDR ELF32_NO_ADDR -#define ELF_LINK_ADDR ELF32_LINK_ADDR -#endif - -#ifndef ELF32_EHDR_FLAGS_OK -#define ELF32_EHDR_FLAGS_OK(eh) 1 -#endif - -#ifndef ELF64_EHDR_FLAGS_OK -#define ELF64_EHDR_FLAGS_OK(eh) 1 -#endif - -#if defined(ELFSIZE) && (ELFSIZE == 64) -#define ELF_EHDR_FLAGS_OK(eh) ELF64_EHDR_FLAGS_OK(eh) -#else -#define ELF_EHDR_FLAGS_OK(eh) ELF32_EHDR_FLAGS_OK(eh) -#endif - -#if defined(ELFSIZE) -struct elf_args { - Elf_Addr arg_entry; /* program entry point */ - Elf_Addr arg_interp; /* Interpreter load address */ - Elf_Addr arg_phaddr; /* program header address */ - Elf_Addr arg_phentsize; /* Size of program header */ - Elf_Addr arg_phnum; /* Number of program headers */ -}; -#endif - -#ifdef _KERNEL_OPT -#include "opt_execfmt.h" -#endif - -#ifdef EXEC_ELF32 -int exec_elf32_makecmds(struct lwp *, struct exec_package *); -int elf32_copyargs(struct lwp *, struct exec_package *, - struct ps_strings *, char **, void *); - -int coredump_elf32(struct lwp *, void *); -int coredump_writenote_elf32(struct proc *, void *, Elf32_Nhdr *, - const char *, void *); - -int elf32_check_header(Elf32_Ehdr *, int); -#endif - -#ifdef EXEC_ELF64 -int exec_elf64_makecmds(struct lwp *, struct exec_package *); -int elf64_copyargs(struct lwp *, struct exec_package *, - struct ps_strings *, char **, void *); - -int coredump_elf64(struct lwp *, void *); -int coredump_writenote_elf64(struct proc *, void *, Elf64_Nhdr *, - const char *, void *); - -int elf64_check_header(Elf64_Ehdr *, int); -#endif - -#endif /* _KERNEL */ - -#endif /* !_SYS_EXEC_ELF_H_ */ diff --git a/cpukit/libdl/preinstall.am b/cpukit/libdl/preinstall.am deleted file mode 100644 index dba6cc4d81..0000000000 --- a/cpukit/libdl/preinstall.am +++ /dev/null @@ -1,7 +0,0 @@ -## Automatically generated by ampolish3 - Do not edit - -if AMPOLISH3 -$(srcdir)/preinstall.am: Makefile.am - $(AMPOLISH3) $(srcdir)/Makefile.am > $(srcdir)/preinstall.am -endif - diff --git a/cpukit/libdl/rap-shell.h b/cpukit/libdl/rap-shell.h deleted file mode 100644 index c2d9112c0f..0000000000 --- a/cpukit/libdl/rap-shell.h +++ /dev/null @@ -1,14 +0,0 @@ -/* - * COPYRIGHT (c) 2013 Chris Johns <chrisj@rtems.org> - * - * The license and distribution terms for this file may be - * found in the file LICENSE in this distribution or at - * http://www.rtems.org/license/LICENSE. - */ - -#if !defined(_RAP_SHELL_H_) -#define _RAP_SHELL_H_ - -int shell_rap (int argc, char* argv[]); - -#endif diff --git a/cpukit/libdl/rap.h b/cpukit/libdl/rap.h deleted file mode 100644 index 0b86553e2b..0000000000 --- a/cpukit/libdl/rap.h +++ /dev/null @@ -1,115 +0,0 @@ -/* - * COPYRIGHT (c) 2013 Chris Johns <chrisj@rtems.org> - * - * The license and distribution terms for this file may be - * found in the file LICENSE in this distribution or at - * http://www.rtems.org/license/LICENSE. - */ -/** - * @file - * - * @ingroup rtems_rap - * - * @brief RTEMS Application Loader - * - * This is the RTEMS Application loader for files in the RAP format. - */ - -#if !defined (_RAP_H_) -#define _RAP_H_ - -#include <rtems.h> -#include <rtems/chain.h> - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/** - * @defgroup rtems_rap RTEMS Application Loader - * - * The module implements an application loader for files in the RAP format. The - * RAP format is: - * - * <header> - * <compressed container> - * - * The compressed container is a stream of ELF relocatable object files. - * - * TBD. - */ - -/** - * The module iterator handle. - */ -typedef bool (*rtems_rap_iterator_t) (void* handle); - -/** - * Load an application. - * - * @param name The name of the application file. - * @return bool True if the module loads else an error. - */ -bool rtems_rap_load (const char* name, int mode, int argc, const char* argv[]); - -/** - * Unload an application. - * - * @param obj The application descriptor. - * @retval true The application file has been unloaded. - * @retval false The application could not be unloaded. - */ -bool rtems_rap_unload (const char* name); - -/** - * Find the application handle given a file name. - * - * @param name The name of the application file. It can be absolute or - * relative. Relative names can the basename with an extension. - * @retval NULL No application file with that name found. - * @return void* The application descriptor. - */ -void* rtems_rap_find (const char* name); - -/** - * Run an iterator over the modules calling the iterator function. - * - * @param iterator The iterator function. - * @retval true The iterator function returned did not return false. - * @retval false The iterator function returned false.. - */ -bool rtems_rap_iterate (rtems_rap_iterator_t iterator); - -/** - * Return the name of the module given a handle. - * - * @param handle The module handle. - * @return const char* The name of the module if the handle is valid else it - * is NULL. - */ -const char* rtems_rap_name (void* handle); - -/** - * Return the DL handle used to load the module given the RAP handle. - * - * @param handle The module handle. - * @return void* The DL handle returned by the dlopen call. - */ -void* rtems_rap_dl_handle (void* handle); - -/** - * Get the last error message clearing it. This call is not thread safe is - * multiple threads are loading object files at the same time. This call - * follows the model provided by the dlopen family of calls. - * - * @param message Pointer to a buffer to copy the message into. - * @param max_message The maximum message that can be copied. - * @return int The last error number. - */ -int rtems_rap_get_error (char* message, size_t max_message); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif diff --git a/cpukit/libdl/rtl-allocator.h b/cpukit/libdl/rtl-allocator.h deleted file mode 100644 index e8044ee1e8..0000000000 --- a/cpukit/libdl/rtl-allocator.h +++ /dev/null @@ -1,181 +0,0 @@ -/* - * COPYRIGHT (c) 2012 Chris Johns <chrisj@rtems.org> - * - * The license and distribution terms for this file may be - * found in the file LICENSE in this distribution or at - * http://www.rtems.org/license/LICENSE. - */ -/** - * @file - * - * @ingroup rtems_rtl - * - * @brief RTEMS Run-Time Linker Allocator - */ - -#if !defined (_RTEMS_RTL_ALLOCATOR_H_) -#define _RTEMS_RTL_ALLOCATOR_H_ - -#include <stdbool.h> - -#include "rtl-indirect-ptr.h" - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/** - * Define the types of allocation the loader requires. - * - * @note It is best to use the object tag for general memory allocation and to - * leave the tags with specific access properties to the module data - */ -enum rtems_rtl_alloc_tags_e { - RTEMS_RTL_ALLOC_OBJECT, /**< A generic memory object. */ - RTEMS_RTL_ALLOC_SYMBOL, /**< Memory used for symbols. */ - RTEMS_RTL_ALLOC_EXTERNAL, /**< Memory used for external symbols. */ - RTEMS_RTL_ALLOC_READ, /**< The memory is read only. */ - RTEMS_RTL_ALLOC_READ_WRITE, /**< The memory is read and write. */ - RTEMS_RTL_ALLOC_READ_EXEC /**< The memory is read and executable. */ -}; - -/** - * The allocator tag type. - */ -typedef enum rtems_rtl_alloc_tags_e rtems_rtl_alloc_tag_t; - -/** - * The number of tags. - */ -#define RTEMS_RTL_ALLOC_TAGS ((size_t) (RTEMS_RTL_ALLOC_READ_EXEC + 1)) - -/** - * Allocator handler handles all RTL allocations. It can be hooked and - * overridded for customised allocation schemes or memory maps. - * - * @param allocation If true the request is to allocate memory else free. - * @param tag The type of allocation request. - * @param address Pointer to the memory address. If an allocation the value is - * unspecific on entry and the allocated address or NULL on - * exit. The NULL value means the allocation failed. If a delete - * or free request the memory address is the block to free. A - * free request of NULL is silently ignored. - * @param size The size of the allocation if an allocation request and - * not used if deleting or freeing a previous allocation. - */ -typedef void (*rtems_rtl_allocator_t)(bool allocate, - rtems_rtl_alloc_tag_t tag, - void** address, - size_t size); - -/** - * The allocator data. - */ -struct rtems_rtl_alloc_data_s { - /**< The memory allocator handler. */ - rtems_rtl_allocator_t allocator; - /**< The indirect pointer chains. */ - rtems_chain_control indirects[RTEMS_RTL_ALLOC_TAGS]; -}; - -typedef struct rtems_rtl_alloc_data_s rtems_rtl_alloc_data_t; - -/** - * Initialise the allocate data. - * - * @param data The data to initialise. - */ -void rtems_rtl_alloc_initialise (rtems_rtl_alloc_data_t* data); - -/** - * The Runtime Loader allocator new allocates new memory and optionally clear - * the memory if requested. - * - * @param tag The type of allocation request. - * @param size The size of the allocation. - * @param zero If true the memory is cleared. - * @return void* The memory address or NULL is not memory available. - */ -void* rtems_rtl_alloc_new (rtems_rtl_alloc_tag_t tag, size_t size, bool zero); - -/** - * The Runtime Loader allocator delete deletes allocated memory. - * - * @param tag The type of allocation request. - * @param address The memory address to delete. A NULL is ignored. - */ -void rtems_rtl_alloc_del (rtems_rtl_alloc_tag_t tag, void* address); - -/** - * Hook the Runtime Loader allocatior. A handler can call the previous handler - * in the chain to use it for specific tags. The default handler uses the - * system heap. Do not unhook your handler if memory it allocates has not been - * returned. - * - * @param handler The handler to use as the allocator. - * @return rtems_rtl_alloc_handler_t The previous handler. - */ -rtems_rtl_allocator_t rtems_rtl_alloc_hook (rtems_rtl_allocator_t handler); - -/** - * Allocate memory to an indirect handle. - * - * @param tag The type of allocation request. - * @param handle The handle to allocate the memory to. - * @param size The size of the allocation. - */ -void rtems_rtl_alloc_indirect_new (rtems_rtl_alloc_tag_t tag, - rtems_rtl_ptr_t* handle, - size_t size); - -/** - * Free memory from an indirect handle. - * - * @param tag The type of allocation request. - * @param handle The handle to free the memory from. - */ -void rtems_rtl_alloc_indirect_del (rtems_rtl_alloc_tag_t tag, - rtems_rtl_ptr_t* handle); - -/** - * Allocate the memory for a module given the size of the text, const, data and - * bss sections. If any part of the allocation fails the no memory is - * allocated. - * - * @param text_base Pointer to the text base pointer. - * @param text_size The size of the read/exec section. - * @param const_base Pointer to the const base pointer. - * @param const_size The size of the read only section. - * @param eh_base Pointer to the eh base pointer. - * @param eh_size The size of the eh section. - * @param data_base Pointer to the data base pointer. - * @param data_size The size of the read/write secton. - * @param bss_base Pointer to the bss base pointer. - * @param bss_size The size of the read/write. - * @retval true The memory has been allocated. - * @retval false The allocation of memory has failed. - */ -bool rtems_rtl_alloc_module_new (void** text_base, size_t text_size, - void** const_base, size_t const_size, - void** eh_base, size_t eh_size, - void** data_base, size_t data_size, - void** bss_base, size_t bss_size); - -/** - * Free the memory allocated to a module. - * - * @param text_base Pointer to the text base pointer. - * @param const_base Pointer to the const base pointer. - * @param eh_base Pointer to the eh base pointer. - * @param data_base Pointer to the data base pointer. - * @param bss_base Pointer to the bss base pointer. - */ -void rtems_rtl_alloc_module_del (void** text_base, void** const_base, - void** eh_base, void** data_base, - void** bss_base); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif diff --git a/cpukit/libdl/rtl-fwd.h b/cpukit/libdl/rtl-fwd.h deleted file mode 100644 index 4641ad5d5e..0000000000 --- a/cpukit/libdl/rtl-fwd.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * COPYRIGHT (c) 2012 Chris Johns <chrisj@rtems.org> - * - * The license and distribution terms for this file may be - * found in the file LICENSE in this distribution or at - * http://www.rtems.org/license/LICENSE. - */ -/** - * @file - * - * @ingroup rtems_rtl - * - * @brief RTEMS Run-Time Linker ELF Headers - */ - -#if !defined (_RTEMS_RTL_FWD_H_) -#define _RTEMS_RTL_FWD_H_ - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/** - * The forward declaration of the obj structure. - */ -struct rtems_rtl_data_s; -typedef struct rtems_rtl_data_s rtems_rtl_data_t; - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif diff --git a/cpukit/libdl/rtl-indirect-ptr.h b/cpukit/libdl/rtl-indirect-ptr.h deleted file mode 100644 index 81503a3b45..0000000000 --- a/cpukit/libdl/rtl-indirect-ptr.h +++ /dev/null @@ -1,235 +0,0 @@ -/* - * COPYRIGHT (c) 2012 Chris Johns <chrisj@rtems.org> - * - * The license and distribution terms for this file may be - * found in the file LICENSE in this distribution or at - * http://www.rtems.org/license/LICENSE. - */ -/** - * @file - * - * @ingroup rtems_rtl - * - * @brief RTEMS Run-Time Linker Indirect Pointer Management allows memory - * compaction in the allocator. - */ - -#if !defined (_RTEMS_RTL_INDIRECT_PTR_H_) -#define _RTEMS_RTL_INDIRECT_PTR_H_ - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -#include <rtems/chain.h> - -/** - * The RTL Indirect pointer. - */ -struct rtems_rtl_ptr_s { - rtems_chain_node node; /**< Indirect pointers are held on lists. */ - void* pointer; /**< The actual pointer. */ -}; - -typedef struct rtems_rtl_ptr_s rtems_rtl_ptr_t; - -/** - * The RTL Indirect size and pointer. - */ -struct rtems_rtl_sptr_s { - rtems_rtl_ptr_t ptr; /**< The indirect pointer. */ - size_t size; /**< The size of the memory block. */ -}; - -typedef struct rtems_rtl_sptr_s rtems_rtl_sptr_t; - -/** - * A chain of indirect pointers for users to chain in applications. - * - * @note The chain the pointer is on is internal to the allocator and cannot be - * used by applications. - */ -struct rtems_rtl_ptr_chain_s { - rtems_chain_node node; /**< Chain of indirect pointers. */ - rtems_rtl_ptr_t ptr; /**< The indirect pointer. */ -}; - -typedef struct rtems_rtl_ptr_chain_s rtems_rtl_ptr_chain_t; - -/** - * A chain of indirect sized pointers for users to chain in applications. - * - * @note The chain the pointer is on is internal to the allocator and cannot be - * used by applications. - */ -struct rtems_rtl_sptr_chain_s { - rtems_chain_node node; /**< Chain of indirect pointers. */ - rtems_rtl_sptr_t ptr; /**< The indirect pointer. */ -}; - -typedef struct rtems_rtl_sptr_chain_s rtems_rtl_sptr_chain_t; - -/** - * Get the pointer given an indirect handle. - * - * @param handle The handle the pointer is returned from. - * @return void* The pointer held in the handle. - */ -static inline void* rtems_rtl_ptr_get (rtems_rtl_ptr_t* handle) -{ - return handle->pointer; -} - -/** - * Set the pointer given an indirect handle and the pointer. - * - * @param handle The handle the pointer is returned from. - * @param pointer The pointer to set in the handle. - */ -static inline void rtems_rtl_ptr_set (rtems_rtl_ptr_t* handle, void* pointer) -{ - handle->pointer = pointer; -} - -/** - * Initialise the indirect handle. - * - * @param handle The handle to initialise. - */ -static inline void rtems_rtl_ptr_init (rtems_rtl_ptr_t* handle) -{ - rtems_chain_set_off_chain (&handle->node); - handle->pointer = NULL; -} - -/** - * Is the indirect handle NULL ? - * - * @param handle The handle to test. - * @return bool True if the pointer is NULL. - */ -static inline bool rtems_rtl_ptr_null (rtems_rtl_ptr_t* handle) -{ - return handle->pointer == NULL; -} - -/** - * Move the allocated pointer from one handle to another. The source handle is - * cleared and removed from the list of handles. - * - * @param src The source handle to move the pointer from. - * @param dst The destination handle to receive the pointer. - */ -static inline void rtems_rtl_ptr_move (rtems_rtl_ptr_t* dst, rtems_rtl_ptr_t* src) -{ - /* - * We do not know which chain the src handle resides on so insert the dst - * handle after the src handle then extract the src handle. - */ - rtems_chain_insert_unprotected (&src->node, &dst->node); - rtems_chain_extract_unprotected (&src->node); - dst->pointer = src->pointer; - rtems_rtl_ptr_init (src); -} - -/** - * Return the pointer as the type provided. - * - * @param _h The handle. - * @param _t The type. - */ -#define rtems_rtl_ptr_type_get(_h, _t) ((_t*) rtems_rtl_ptr_get (_h)) - -/** - * Get the pointer given an indirect handle. - * - * @param handle The handle the pointer is returned from. - * @return void* The pointer held in the handle. - */ -static inline void* rtems_rtl_sptr_get (rtems_rtl_sptr_t* handle) -{ - return rtems_rtl_ptr_get (&handle->ptr); -} - -/** - * Set the pointer given an indirect handle and the pointer. - * - * @param handle The handle the pointer is returned from. - * @param pointer The pointer to set in the handle. - */ -static inline void rtems_rtl_sptr_set (rtems_rtl_sptr_t* handle, void* pointer) -{ - rtems_rtl_ptr_set (&handle->ptr, pointer); -} - -/** - * Initialise the indirect handle. - * - * @param handle The handle to initialise. - */ -static inline void rtems_rtl_sptr_init (rtems_rtl_sptr_t* handle) -{ - rtems_rtl_ptr_init (&handle->ptr); - handle->size = 0; -} - -/** - * Is the indirect handle NULL ? - * - * @param handle The handle to test. - * @return bool True if the pointer is NULL. - */ -static inline bool rtems_rtl_sptr_null (rtems_rtl_sptr_t* handle) -{ - return rtems_rtl_ptr_null (&handle->ptr); -} - -/** - * Move the allocated pointer from one handle to another. The source handle is - * cleared and removed from the list of handles. - * - * @param src The source handle to move the pointer from. - * @param dst The destination handle to receive the pointer. - */ -static inline void rtems_rtl_sptr_move (rtems_rtl_sptr_t* dst, rtems_rtl_sptr_t* src) -{ - rtems_rtl_ptr_move (&dst->ptr, &src->ptr); - dst->size = src->size; - src->size = 0; -} - -/** - * Get the size. - * - * @param handle The handle to get the size from. - * @return size_t The size_t. - */ -static inline size_t rtems_rtl_sptr_get_size (rtems_rtl_sptr_t* handle) -{ - return handle->size; -} - -/** - * Set the size. - * - * @param handle The handle to set the size. - * @param size The size to set.. - */ -static inline void rtems_rtl_sptr_set_size (rtems_rtl_sptr_t* handle, size_t size) -{ - handle->size = size; -} - -/** - * Return the pointer as the type provided. - * - * @param _h The handle. - * @param _t The type. - */ -#define rtems_rtl_sptr_type_get(_h, _t) ((_t*) rtems_rtl_sptr_get (_h)) - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif diff --git a/cpukit/libdl/rtl-obj-cache.h b/cpukit/libdl/rtl-obj-cache.h deleted file mode 100644 index 8eacdd316b..0000000000 --- a/cpukit/libdl/rtl-obj-cache.h +++ /dev/null @@ -1,132 +0,0 @@ -/* - * COPYRIGHT (c) 2012 Chris Johns <chrisj@rtems.org> - * - * The license and distribution terms for this file may be - * found in the file LICENSE in this distribution or at - * http://www.rtems.org/license/LICENSE. - */ -/** - * @file - * - * @ingroup rtems_rtl - * - * @brief RTEMS Run-Time Linker Object File cache buffers a section of the - * object file in a buffer to localise read performance. - * - * This is a simple object file cache that holds a buffer of data from the - * offset in the file the read is requested from. Writes are not supported. - * - * The cache holds the file descriptor, the offset into the file and the amount - * of valid data in the cache. If the file is ever modified the user of the - * cache to responsible for flushing the cache. For example the cache should be - * flused if the file is closed. - * - * The cache can return by reference or by value. By reference allow access to - * the cache buffer. Do not modify the cache's data. By value will copy the - * requested data into the user supplied buffer. - * - * The read by reference call allows you to probe the file's data. For example - * a string in an object file can be an unknown length. You can request a read - * up to the cache's size by reference. The code will attempt to have this data - * in the buffer. If there is not enough data in the file the length will be - * modifed to reflect this. - * - * You can have more than one cache for a single file all looking at different - * parts of the file. - */ - -#if !defined (_RTEMS_RTL_OBJ_CACHE_H_) -#define _RTEMS_RTL_OBJ_CACHE_H_ - -#include <fcntl.h> -#include <stdbool.h> -#include <stdint.h> -#include <stdlib.h> - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/** - * The buffer cache. - */ -typedef struct rtems_rtl_obj_cache_s -{ - int fd; /**< The file descriptor of the data in the cache. */ - size_t file_size; /**< The size of the file. */ - off_t offset; /**< The base offset of the buffer. */ - size_t size; /**< The size of the cache. */ - size_t level; /**< The amount of data in the cache. A file can be - * smaller than the cache file. */ - uint8_t* buffer; /**< The buffer */ -} rtems_rtl_obj_cache_t; - -/** - * Open a cache allocating a single buffer of the size passed. The default - * state of the cache is flushed. No already open checks are made. - * - * @param cache The cache to initialise. - * @param size The size of the cache. - * @retval true The cache is open. - * @retval false The cache is not open. The RTL error is set. - */ -bool rtems_rtl_obj_cache_open (rtems_rtl_obj_cache_t* cache, size_t size); - -/** - * Close a cache. - * - * @param cache The cache to close. - */ -void rtems_rtl_obj_cache_close (rtems_rtl_obj_cache_t* cache); - -/** - * Flush the cache. Any further read will read the data from the file. - * - * @param cache The cache to flush. - */ -void rtems_rtl_obj_cache_flush (rtems_rtl_obj_cache_t* cache); - -/** - * Read data by reference. The length contains the amount of data that should - * be available in the cache and referenced by the buffer handle. It must be - * less than or equal to the size of the cache. This call will return the - * amount of data that is available. It can be less than you ask if the offset - * and size is past the end of the file. - * - * @param cache The cache to reference data from. - * @param fd The file descriptor. Must be an open file. - * @param offset The offset in the file to reference the data to. - * @param buffer The location to reference the data from. - * @param length The length of data to reference. Can be modified to a - * lesser value and true is still returned so check it. - * @retval true The data referenced is in the cache. - * @retval false The read failed and the RTL error has been set. - */ -bool rtems_rtl_obj_cache_read (rtems_rtl_obj_cache_t* cache, - int fd, - off_t offset, - void** buffer, - size_t* length); - -/** - * Read data by value. The data is copied to the user supplied buffer. - * - * @param cache The cache to read the data from. - * @param fd The file descriptor. Must be an open file. - * @param offset The offset in the file to read the data from. - * @param buffer The location the data is written into. - * @param length The length of data to read. - * @retval true The data has been read from the cache. - * @retval false The read failed and the RTL error has been set. - */ -bool rtems_rtl_obj_cache_read_byval (rtems_rtl_obj_cache_t* cache, - int fd, - off_t offset, - void* buffer, - size_t length); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif diff --git a/cpukit/libdl/rtl-obj-comp.h b/cpukit/libdl/rtl-obj-comp.h deleted file mode 100644 index 34bfa6ffa1..0000000000 --- a/cpukit/libdl/rtl-obj-comp.h +++ /dev/null @@ -1,122 +0,0 @@ -/* - * COPYRIGHT (c) 2012 Chris Johns <chrisj@rtems.org> - * - * The license and distribution terms for this file may be - * found in the file LICENSE in this distribution or at - * http://www.rtems.org/license/LICENSE. - */ -/** - * @file - * - * @ingroup rtems_rtl - * - * @brief RTEMS Run-Time Linker Object File Compression manages a - * compressed stream of data. - * - * This is a simple interface to the object file cache to stream data from - * from a compressed object file. There is no ability to seek with the - * data from a compressed file. The module exists to allocate the output - * buffer when the loader starts and use the cache buffers will have been - * allocated. - */ - -#if !defined (_RTEMS_RTL_OBJ_COMP_H_) -#define _RTEMS_RTL_OBJ_COMP_H_ - -#include <rtems/rtl/rtl-obj-cache.h> - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/** - * The amount of input data read at a time from the file. - */ -#define RTEMS_RTL_DECOMP_INPUT_SIZE (256) - -/** - * The types of supported compression. - */ -#define RTEMS_RTL_COMP_NONE (0) -#define RTEMS_RTL_COMP_LZ77 (1) - -/** - * The compressed file. - */ -typedef struct rtems_rtl_obj_cpmp_s -{ - rtems_rtl_obj_cache_t* cache; /**< The cache provides the input - * buffer. */ - int fd; /**< The file descriptor. */ - int compression; /**< The type of compression. */ - off_t offset; /**< The base offset of the buffer. */ - size_t size; /**< The size of the output buffer. */ - size_t level; /**< The amount of data in the buffer. */ - uint8_t* buffer; /**< The buffer */ - uint32_t read; /**< The amount of data read. */ -} rtems_rtl_obj_comp_t; - -/** - * Return the input level. - */ -static inline uint32_t rtems_rtl_obj_comp_input (rtems_rtl_obj_comp_t* comp) -{ - return comp->read; -} - -/** - * Open a compressor allocating the output buffer. - * - * @param comp The compressor to initialise. - * @param size The size of the compressor's output buffer. - * @retval true The compressor is open. - * @retval false The compressor is not open. The RTL error is set. - */ -bool rtems_rtl_obj_comp_open (rtems_rtl_obj_comp_t* comp, - size_t size); - -/** - * Close a compressor. - * - * @param comp The compressor to close. - */ -void rtems_rtl_obj_comp_close (rtems_rtl_obj_comp_t* comp); - -/** - * Set the cache and offset in the file the compressed stream starts. - * - * @param comp The compressor to set the offset in. - * @param cache The cache to read the file in by. - * @param fd The file descriptor. Must be an open file. - * @param compression The type of compression being streamed. - * @param offset The offset in the file the compressed stream starts. - */ -void rtems_rtl_obj_comp_set (rtems_rtl_obj_comp_t* comp, - rtems_rtl_obj_cache_t* cache, - int fd, - int compression, - off_t offset); - -/** - * Read decompressed data. The length contains the amount of data that should - * be available in the cache and referenced by the buffer handle. It must be - * less than or equal to the size of the cache. This call will return the - * amount of data that is available. It can be less than you ask if the offset - * and size is past the end of the file. - * - * @param comp The compressor to read data from. - * @param buffer The buffer the output is written too. - * @param length The length of data to read. Can be modified to a - * lesser value and true is still returned so check it. - * @retval true The data referenced is in the cache. - * @retval false The read failed and the RTL error has been set. - */ -bool rtems_rtl_obj_comp_read (rtems_rtl_obj_comp_t* comp, - void* buffer, - size_t length); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif diff --git a/cpukit/libdl/rtl-obj-fwd.h b/cpukit/libdl/rtl-obj-fwd.h deleted file mode 100644 index 2c53244316..0000000000 --- a/cpukit/libdl/rtl-obj-fwd.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * COPYRIGHT (c) 2012 Chris Johns <chrisj@rtems.org> - * - * The license and distribution terms for this file may be - * found in the file LICENSE in this distribution or at - * http://www.rtems.org/license/LICENSE. - */ -/** - * @file - * - * @ingroup rtems_rtl - * - * @brief RTEMS Run-Time Linker ELF Headers - */ - -#if !defined (_RTEMS_RTL_OBJ_FWD_H_) -#define _RTEMS_RTL_OBJ_FWD_H_ - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/** - * The forward declaration of the obj section structure. - */ -struct rtems_rtl_obj_sect_s; -typedef struct rtems_rtl_obj_sect_s rtems_rtl_obj_sect_t; - -/** - * The forward declaration of the obj structure. - */ -struct rtems_rtl_obj_s; -typedef struct rtems_rtl_obj_s rtems_rtl_obj_t; - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif diff --git a/cpukit/libdl/rtl-obj.h b/cpukit/libdl/rtl-obj.h deleted file mode 100644 index 6a35a72822..0000000000 --- a/cpukit/libdl/rtl-obj.h +++ /dev/null @@ -1,635 +0,0 @@ -/* - * COPYRIGHT (c) 2012 Chris Johns <chrisj@rtems.org> - * - * The license and distribution terms for this file may be - * found in the file LICENSE in this distribution or at - * http://www.rtems.org/license/LICENSE. - */ -/** - * @file - * - * @ingroup rtems_rtl - * - * @brief RTEMS Run-Time Linker Object Support. - */ - -#if !defined (_RTEMS_RTL_OBJ_H_) -#define _RTEMS_RTL_OBJ_H_ - -#include <rtems.h> -#include <rtems/chain.h> -#include <rtems/rtl/rtl-sym.h> -#include <rtems/rtl/rtl-unresolved.h> - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/** - * Loader format flags. - */ -#define RTEMS_RTL_FMT_ELF (1 << 0) -#define RTEMS_RTL_FMT_COMP (1 << 1) -#define RTEMS_RTL_FMT_PRIVATE (1 << 16) - -/** - * Loader format definition. - */ -typedef struct rtems_rtl_loader_format_s -{ - /** - * The format label. This can be used to determine and manage - * specific formats. - */ - const char* label; - - /** - * The format flags. - */ - uint32_t flags; -} rtems_rtl_loader_format_t; - -/** - * The type of the format loader check handler. This handler checks the format - * and if it is detected as suitable it returns true. - */ -typedef bool (*rtems_rtl_loader_check) (rtems_rtl_obj_t* obj, int fd); - -/** - * The type of the format loader load handler. This handler loads the specific - * format. - */ -typedef bool (*rtems_rtl_loader_load) (rtems_rtl_obj_t* obj, int fd); - -/** - * The type of the format loader unload handler. This handler unloads the - * specific format. - */ -typedef bool (*rtems_rtl_loader_unload) (rtems_rtl_obj_t* obj); - -/** - * The type of the format loader signature handler. This handler checks the - * format signature. - */ -typedef rtems_rtl_loader_format_t* (*rtems_rtl_loader_sig) (void); - -/** - * Table for supported loadable formats. - */ -typedef struct rtems_rtl_loader_table_s -{ - rtems_rtl_loader_check check; /**< The check handler. */ - rtems_rtl_loader_load load; /**< The loader. */ - rtems_rtl_loader_unload unload; /**< The unloader. */ - rtems_rtl_loader_sig signature; /**< The loader's signature. */ -} rtems_rtl_loader_table_t; - -/** - * Flags for the various section types. - */ -#define RTEMS_RTL_OBJ_SECT_TEXT (1 << 0) /**< Section holds program text. */ -#define RTEMS_RTL_OBJ_SECT_CONST (1 << 1) /**< Section holds program text. */ -#define RTEMS_RTL_OBJ_SECT_DATA (1 << 2) /**< Section holds program data. */ -#define RTEMS_RTL_OBJ_SECT_BSS (1 << 3) /**< Section holds program bss. */ -#define RTEMS_RTL_OBJ_SECT_EH (1 << 4) /**< Section holds exception data. */ -#define RTEMS_RTL_OBJ_SECT_REL (1 << 5) /**< Section holds relocation records. */ -#define RTEMS_RTL_OBJ_SECT_RELA (1 << 6) /**< Section holds relocation addend - * records. */ -#define RTEMS_RTL_OBJ_SECT_SYM (1 << 7) /**< Section holds symbols. */ -#define RTEMS_RTL_OBJ_SECT_STR (1 << 8) /**< Section holds strings. */ -#define RTEMS_RTL_OBJ_SECT_ALLOC (1 << 9) /**< Section allocates runtime memory. */ -#define RTEMS_RTL_OBJ_SECT_LOAD (1 << 10) /**< Section is loaded from object file. */ -#define RTEMS_RTL_OBJ_SECT_WRITE (1 << 11) /**< Section is writable, ie data. */ -#define RTEMS_RTL_OBJ_SECT_EXEC (1 << 12) /**< Section is executable. */ -#define RTEMS_RTL_OBJ_SECT_ZERO (1 << 13) /**< Section is preset to zero. */ -#define RTEMS_RTL_OBJ_SECT_LINK (1 << 14) /**< Section is link-ordered. */ -#define RTEMS_RTL_OBJ_SECT_CTOR (1 << 15) /**< Section contains constructors. */ -#define RTEMS_RTL_OBJ_SECT_DTOR (1 << 16) /**< Section contains destructors. */ -#define RTEMS_RTL_OBJ_SECT_LOCD (1 << 17) /**< Section has been located. */ - -/** - * Section types mask. - */ -#define RTEMS_RTL_OBJ_SECT_TYPES (RTEMS_RTL_OBJ_SECT_TEXT | \ - RTEMS_RTL_OBJ_SECT_CONST | \ - RTEMS_RTL_OBJ_SECT_DATA | \ - RTEMS_RTL_OBJ_SECT_BSS | \ - RTEMS_RTL_OBJ_SECT_EH) - -/** - * An object file is made up of sections and the can be more than - * one of a specific type of sections. All sections and grouped - * together in memory. - */ -struct rtems_rtl_obj_sect_s -{ - rtems_chain_node node; /**< The node's link in the chain. */ - int section; /**< The section number. */ - const char* name; /**< The section's name. */ - size_t size; /**< The size of the section in memory. */ - off_t offset; /**< Offset into the object file. Relative to - * the start of the object file. */ - uint32_t alignment; /**< Alignment of this section. */ - int link; /**< Section link field. */ - int info; /**< Secfion info field. */ - uint32_t flags; /**< The section's flags. */ - void* base; /**< The base address of the section in - * memory. */ - int load_order; /**< Order we load sections. */ -}; - -/** - * Object file descriptor flags. - */ -#define RTEMS_RTL_OBJ_LOCKED (1 << 0) /**< Lock the object file so it cannot - * be unloaded. */ -#define RTEMS_RTL_OBJ_UNRESOLVED (1 << 1) /**< The object file has unresolved - * external symbols. */ - -/** - * RTL Object. There is one for each object module loaded plus one for the base - * kernel image. - */ -struct rtems_rtl_obj_s -{ - rtems_chain_node link; /**< The node's link in the chain. */ - uint32_t flags; /**< The status of the object file. */ - uint32_t users; /**< References to the object file. */ - int format; /**< The format of the object file. */ - const char* fname; /**< The file name for the object. */ - const char* oname; /**< The object file name. Can be - * relative. */ - const char* aname; /**< The archive name containing the - * object. NULL means the object is not - * in a lib */ - off_t ooffset; /**< The object offset in the archive. */ - size_t fsize; /**< Size of the object file. */ - rtems_chain_control sections; /**< The sections of interest in the - * object file. */ - rtems_rtl_obj_sym_t* local_table; /**< Local symbol table. */ - size_t local_syms; /**< Local symbol count. */ - size_t local_size; /**< Local symbol memory usage. */ - rtems_rtl_obj_sym_t* global_table; /**< Global symbol table. */ - size_t global_syms; /**< Global symbol count. */ - size_t global_size; /**< Global symbol memory usage. */ - uint32_t unresolved; /**< The number of unresolved relocations. */ - void* text_base; /**< The base address of the text section - * in memory. */ - size_t text_size; /**< The size of the text section. */ - void* const_base; /**< The base address of the const section - * in memory. */ - void* eh_base; /**< The base address of the eh section - * in memory. */ - size_t eh_size; /**< The size of the eh section. */ - void* data_base; /**< The base address of the data section - * in memory. */ - void* bss_base; /**< The base address of the bss section - * in memory. */ - size_t bss_size; /**< The size of the bss section. */ - size_t exec_size; /**< The amount of executable memory - * allocated */ - void* entry; /**< The entry point of the module. */ - uint32_t checksum; /**< The checksum of the text sections. A - * zero means do not checksum. */ - uint32_t* sec_num; /**< The sec nums of each obj. */ - uint32_t obj_num; /**< The count of elf files in an rtl obj. */ - struct link_map* linkmap; /**< For GDB. */ - void* loader; /**< The file details specific to a loader. */ -}; - -/** - * A section handler is called once for each section that needs to be - * processed by this handler. - * - * @param obj The object file's descriptor the section belongs too. - * @param fd The file descriptor of the object file beling loaded. - * @param sect The section the handler is being invoked to handle. - * @param data A user supplied data variable. - * @retval true The operation was successful. - * @retval false The operation failed and the RTL has been set. - */ -typedef bool (*rtems_rtl_obj_sect_handler_t)(rtems_rtl_obj_t* obj, - int fd, - rtems_rtl_obj_sect_t* sect, - void* data); - -/** - * Get the file name. - * - * @param obj The object file. - * @return const char* The string. - */ -static inline const char* rtems_rtl_obj_fname (const rtems_rtl_obj_t* obj) -{ - return obj->fname; -} - -/** - * Is the file name valid ? - * - * @param obj The object file. - * @return bool There is a file name - */ -static inline bool rtems_rtl_obj_fname_valid (const rtems_rtl_obj_t* obj) -{ - return obj->fname; -} - -/** - * Get the object name. - * - * @param obj The object file. - * @return const char* The string. - */ -static inline const char* rtems_rtl_obj_oname (const rtems_rtl_obj_t* obj) -{ - return obj->oname; -} - -/** - * Is the object name valid ? - * - * @param obj The object file. - * @return bool There is an object name - */ -static inline bool rtems_rtl_obj_oname_valid (const rtems_rtl_obj_t* obj) -{ - return obj->oname; -} - -/** - * Get the archive name. - * - * @param obj The object file. - * @return const char* The string. - */ -static inline const char* rtems_rtl_obj_aname (const rtems_rtl_obj_t* obj) -{ - return obj->aname; -} - -/** - * Is the archive name valid ? - * - * @param obj The object file. - * @return bool There is an archive name - */ -static inline bool rtems_rtl_obj_aname_valid (const rtems_rtl_obj_t* obj) -{ - return obj->aname; -} - -/** - * Is the address inside the text section? - * - * @param obj The object file. - * @return bool There is an archive name - */ -static inline bool rtems_rtl_obj_text_inside (const rtems_rtl_obj_t* obj, - const void* address) -{ - return - (address >= obj->text_base) && - (address < (obj->text_base + obj->text_size)); -} - -/** - * Allocate an object structure on the heap. - * - * @retval NULL No memory for the object. - */ -rtems_rtl_obj_t* rtems_rtl_obj_alloc (void); - -/** - * Free the object structure and related resources. - * - * @param obj The object file's descriptor to free. - * @retval false The object has dependences. - * @retval true The object has been freed. - */ -bool rtems_rtl_obj_free (rtems_rtl_obj_t* obj); - -/** - * Does the object file have unresolved external references ? If it does the - * results of executing code is unpredictable. - * - * @param obj The object file's descriptor. - * @retval true The object file has unresolved externals. - * @retval false The object file has all external references resolved. - */ -bool rtems_rtl_obj_unresolved (rtems_rtl_obj_t* obj); - -/** - * Parses a filename and returns newly allocated strings with the archive name, - * object name, and the object's offset - * - * @param name The filename of the object - * @param aname Address of a string pointer that holds the archive name - * @param oname Address of a string pointer that holds the object name - * @param ooffset Address of an int that holds the object offset - * @retval true The parsing was successful - * @retval false The parsing was unsuccessful - */ -bool rtems_rtl_parse_name (const char* name, - const char** aname, - const char** oname, - off_t* ooffset); - -/** - * Check of the name matches the object file's object name. - * - * @param obj The object file's descriptor. - * @param name The name to match. - */ -bool rtems_rtl_match_name (rtems_rtl_obj_t* obj, const char* name); - -/** - * Find an object file on disk that matches the name. The object descriptor is - * fill in with the various parts of a name. A name can have archive, object - * file and offset components. The search path in the RTL is searched. - * - * @param obj The object file's descriptor. - * @param name The name to locate on disk. - * @retval true The file has been found. - * @retval false The file could not be located. The RTL error has been set. - */ -bool rtems_rtl_obj_find_file (rtems_rtl_obj_t* obj, const char* name); - -/** - * Add a section to the object descriptor. - * - * @param obj The object file's descriptor. - * @param section The section's index number. - * @param name The name of the section. - * @param size The size of the section in memory. - * @param offset The offset of the section in the object file. - * @param alignment The alignment of the section in memory. - * @param link The section's link field (from the ELF format). - * @param info The section's info field (from the ELF format). - * @param flags The section's flags. - * @retval true The section has been added. - * @retval false The section has not been added. See the RTL error. - */ -bool rtems_rtl_obj_add_section (rtems_rtl_obj_t* obj, - int section, - const char* name, - size_t size, - off_t offset, - uint32_t alignment, - int link, - int info, - uint32_t flags); - -/** - * Erase the object file descriptor's sections. - * - * @param obj The object file's descriptor. - */ -void rtems_rtl_obj_erase_sections (rtems_rtl_obj_t* obj); - -/** - * Find the section given a name. - * - * @param obj The object file's descriptor. - * @param name The name of the section to find. - * @retval NULL The section was not found. - * @return rtems_rtl_obj_sect_t* The named section. - */ -rtems_rtl_obj_sect_t* rtems_rtl_obj_find_section (const rtems_rtl_obj_t* obj, - const char* name); - -/** - * Find a section given a section's index number. - * - * @param obj The object file's descriptor. - * @param index The section's index to find. - * @retval NULL The section was not found. - * @return rtems_rtl_obj_sect_t* The found section. - */ -rtems_rtl_obj_sect_t* rtems_rtl_obj_find_section_by_index (const rtems_rtl_obj_t* obj, - int index); - -/** - * The text section size. Only use once all the sections has been added. It - * includes alignments between sections that are part of the object's text - * area. The consts sections are included in this section. - * - * @param obj The object file's descriptor. - * @return size_t The size of the text area of the object file. - */ -size_t rtems_rtl_obj_text_size (const rtems_rtl_obj_t* obj); - -/** - * The text section alignment for the object file. Only use once all the - * sections has been added. The section alignment is the alignment of the first - * text type section loaded the text section. - * - * You can assume the alignment is a positive integral power of 2 if not 0 or - * 1. If 0 or 1 then there is no alignment. - * - * @param obj The object file's descriptor. - * @return uint32_t The alignment. Can be 0 or 1 for not aligned or the alignment. - */ -uint32_t rtems_rtl_obj_text_alignment (const rtems_rtl_obj_t* obj); - -/** - * The const section size. Only use once all the sections has been added. It - * includes alignments between sections that are part of the object's const - * area. The consts sections are included in this section. - * - * @param obj The object file's descriptor. - * @return size_t The size of the const area of the object file. - */ -size_t rtems_rtl_obj_const_size (const rtems_rtl_obj_t* obj); - -/** - * The const section alignment for the object file. Only use once all the - * sections has been added. The section alignment is the alignment of the first - * const type section loaded the const section. - * - * You can assume the alignment is a positive integral power of 2 if not 0 or - * 1. If 0 or 1 then there is no alignment. - * - * @param obj The object file's descriptor. - * @return uint32_t The alignment. Can be 0 or 1 for not aligned or the alignment. - */ -uint32_t rtems_rtl_obj_const_alignment (const rtems_rtl_obj_t* obj); - -/** - * The eh section size. Only use once all the sections has been added. It - * includes alignments between sections that are part of the object's bss area. - * - * @param obj The object file's descriptor. - * @return size_t The size of the bss area of the object file. - */ -size_t rtems_rtl_obj_eh_size (const rtems_rtl_obj_t* obj); - -/** - * The eh section alignment for the object file. Only use once all the sections - * has been added. The section alignment is the alignment of the first bss type - * section loaded the bss section. - * - * You can assume the alignment is a positive integral power of 2 if not 0 or - * 1. If 0 or 1 then there is no alignment. - * - * @param obj The object file's descriptor. - * @return uint32_t The alignment. Can be 0 or 1 for not aligned or the alignment. - */ -uint32_t rtems_rtl_obj_eh_alignment (const rtems_rtl_obj_t* obj); - -/** - * The data section size. Only use once all the sections has been added. It - * includes alignments between sections that are part of the object's data - * area. - * - * @param obj The object file's descriptor. - * @return size_t The size of the data area of the object file. - */ -size_t rtems_rtl_obj_data_size (const rtems_rtl_obj_t* obj); - -/** - * The data section alignment for the object file. Only use once all the - * sections has been added. The section alignment is the alignment of the first - * data type section loaded the data section. - * - * You can assume the alignment is a positive integral power of 2 if not 0 or - * 1. If 0 or 1 then there is no alignment. - * - * @param obj The object file's descriptor. - * @return uint32_t The alignment. Can be 0 or 1 for not aligned or the alignment. - */ -uint32_t rtems_rtl_obj_data_alignment (const rtems_rtl_obj_t* obj); - -/** - * The bss section size. Only use once all the sections has been added. It - * includes alignments between sections that are part of the object's bss area. - * - * @param obj The object file's descriptor. - * @return size_t The size of the bss area of the object file. - */ -size_t rtems_rtl_obj_bss_size (const rtems_rtl_obj_t* obj); - -/** - * The bss section alignment for the object file. Only use once all the - * sections has been added. The section alignment is the alignment of the first - * bss type section loaded the bss section. - * - * You can assume the alignment is a positive integral power of 2 if not 0 or - * 1. If 0 or 1 then there is no alignment. - * - * @param obj The object file's descriptor. - * @return uint32_t The alignment. Can be 0 or 1 for not aligned or the alignment. - */ -uint32_t rtems_rtl_obj_bss_alignment (const rtems_rtl_obj_t* obj); - -/** - * Relocate the object file. The object file's section are parsed for any - * relocation type sections. - * - * @param obj The object file's descriptor. - * @param fd The object file's file descriptor. - * @param handler The object file's format specific relocation handler. - * @param data User specific data handle. - * @retval true The object file was relocated. - * @retval false The relocation failed. The RTL error is set. - */ -bool rtems_rtl_obj_relocate (rtems_rtl_obj_t* obj, - int fd, - rtems_rtl_obj_sect_handler_t handler, - void* data); - -/** - * Synchronize caches to make code visible to CPU(s) - * - * @param obj The object file's descriptor. - */ -void rtems_rtl_obj_synchronize_cache (rtems_rtl_obj_t* obj); - -/** - * Relocate an object file's unresolved reference. - * - * @param rec The unresolved relocation record. - * @param sym The unresolved relocation's referenced symbol. - * @retval true The object file record was relocated. - * @retval false The relocation failed. The RTL error is set. - */ -bool rtems_rtl_obj_relocate_unresolved (rtems_rtl_unresolv_reloc_t* reloc, - rtems_rtl_obj_sym_t* sym); - -/** - * Load the symbols from the object file. Only the exported or public symbols - * are read into memory and held in the global symbol table. - * - * @param obj The object file's descriptor. - * @param fd The object file's file descriptor. - * @param handler The object file's format specific symbol handler. - * @param data User specific data handle. - * @retval true The object file's symbol where loaded. - * @retval false The symbol loading failed. The RTL error is set. - */ -bool rtems_rtl_obj_load_symbols (rtems_rtl_obj_t* obj, - int fd, - rtems_rtl_obj_sect_handler_t handler, - void* data); - -/** - * Load the sections that have been allocated memory in the target. The bss - * type section does not load any data, it is set to 0. The text and data - * sections read the detault data from the object file into the target memory. - * - * @param obj The object file's descriptor. - * @param fd The object file's file descriptor. - * @param handler The object file's format specific load handler. - * @param data User specific data handle. - * @retval true The object has been sucessfully loaded. - * @retval false The load failed. The RTL error has been set. - */ -bool rtems_rtl_obj_load_sections (rtems_rtl_obj_t* obj, - int fd, - rtems_rtl_obj_sect_handler_t handler, - void* data); - -/** - * Invoke the constructors the object has. Constructors are a table of pointers - * to "void (*)(void);" where NULL pointers are skipped. The table's size is - * taken from the section's size. The objet ELF specific code is responisble - * for flagging which sections contain constructors. - * - * @param obj The object file's descriptor. - */ -void rtems_rtl_obj_run_ctors (rtems_rtl_obj_t* obj); - -/** - * Invoke the destructors the object has. Destructors are a table of pointers - * to "void (*)(void);" where NULL pointers are skipped. The table's size is - * taken from the section's size. The objet ELF specific code is responisble - * for flagging which sections contain destructors. - * - * @param obj The object file's descriptor. - */ -void rtems_rtl_obj_run_dtors (rtems_rtl_obj_t* obj); - -/** - * Load the object file, reading all sections into memory, symbols and - * performing any relocation fixups. - * - * @param obj The object file's descriptor. - * @retval true The object file has been loaded. - * @retval false The load failed. The RTL error has been set. - */ -bool rtems_rtl_obj_load (rtems_rtl_obj_t* obj); - -/** - * Unload the object file, erasing all symbols and releasing all memory. - * - * @param obj The object file's descriptor. - * @retval true The object file has been unloaded. - * @retval false The unload failed. The RTL error has been set. - */ -bool rtems_rtl_obj_unload (rtems_rtl_obj_t* obj); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif diff --git a/cpukit/libdl/rtl-sym.h b/cpukit/libdl/rtl-sym.h deleted file mode 100644 index fe00da89d7..0000000000 --- a/cpukit/libdl/rtl-sym.h +++ /dev/null @@ -1,135 +0,0 @@ -/* - * COPYRIGHT (c) 2012-2014 Chris Johns <chrisj@rtems.org> - * - * The license and distribution terms for this file may be - * found in the file LICENSE in this distribution or at - * http://www.rtems.org/license/LICENSE. - */ -/** - * @file - * - * @ingroup rtems_rtl - * - * @brief RTEMS Run-Time Linker Object File Symbol Table. - */ - -#if !defined (_RTEMS_RTL_SYM_H_) -#define _RTEMS_RTL_SYM_H_ - -#include <rtems.h> -#include "rtl-obj-fwd.h" - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/** - * An object file symbol. - */ -typedef struct rtems_rtl_obj_sym_s -{ - rtems_chain_node node; /**< The node's link in the chain. */ - const char* name; /**< The symbol's name. */ - void* value; /**< The value of the symbol. */ - uint32_t data; /**< Format specific data. */ -} rtems_rtl_obj_sym_t; - -/** - * Table of symbols stored in a hash table. - */ -typedef struct rtems_rtl_symbols_s -{ - rtems_chain_control* buckets; - size_t nbuckets; -} rtems_rtl_symbols_t; - -/** - * Open a symbol table with the specified number of buckets. - * - * @param symbols The symbol table to open. - * @param buckets The number of buckets in the hash table. - * @retval true The symbol is open. - * @retval false The symbol table could not created. The RTL - * error has the error. - */ -bool rtems_rtl_symbol_table_open (rtems_rtl_symbols_t* symbols, - size_t buckets); - -/** - * Close the table and erase the hash table. - * - * @param symbols Close the symbol table. - */ -void rtems_rtl_symbol_table_close (rtems_rtl_symbols_t* symbols); - -/** - * Add a table of exported symbols to the symbol table. - * - * The export table is a series of symbol records and each record has two - * fields: - * - * 1. label - * 2. address - * - * The 'label' is an ASCIIZ string of variable length. The address is of size - * of an unsigned long for the target running the link editor. The byte order - * is defined by the machine type because the table should be built by the - * target compiler. - * - * The table is terminated with a nul string followed by the bytes 0xDE, 0xAD, - * 0xBE, and 0xEF. This avoids alignments issues. - * - * @param obj The object table the symbols are for. - * @param esyms The exported symbol table. - * @param size The size of the table in bytes. - */ -bool rtems_rtl_symbol_global_add (rtems_rtl_obj_t* obj, - const unsigned char* esyms, - unsigned int size); - -/** - * Find a symbol given the symbol label in the global symbol table. - * - * @param name The name as an ASCIIZ string. - * @retval NULL No symbol found. - * @return rtems_rtl_obj_sym_t* Reference to the symbol. - */ -rtems_rtl_obj_sym_t* rtems_rtl_symbol_global_find (const char* name); - -/** - * Find a symbol given the symbol label in the local object file. - * - * @param obj The object file to search. - * @param name The name as an ASCIIZ string. - * @retval NULL No symbol found. - * @return rtems_rtl_obj_sym_t* Reference to the symbol. - */ -rtems_rtl_obj_sym_t* rtems_rtl_symbol_obj_find (rtems_rtl_obj_t* obj, - const char* name); - -/** - * Add the object file's symbols to the global table. - * - * @param obj The object file the symbols are to be added. - */ -void rtems_rtl_symbol_obj_add (rtems_rtl_obj_t* obj); - -/** - * Erase the object file's local symbols. - * - * @param obj The object file the local symbols are to be erased from. - */ -void rtems_rtl_symbol_obj_erase_local (rtems_rtl_obj_t* obj); - -/** - * Erase the object file's symbols. - * - * @param obj The object file the symbols are to be erased from. - */ -void rtems_rtl_symbol_obj_erase (rtems_rtl_obj_t* obj); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif diff --git a/cpukit/libdl/rtl-trace.h b/cpukit/libdl/rtl-trace.h deleted file mode 100644 index 4b93c8c91c..0000000000 --- a/cpukit/libdl/rtl-trace.h +++ /dev/null @@ -1,102 +0,0 @@ -/* - * COPYRIGHT (c) 2012-2014 Chris Johns <chrisj@rtems.org> - * - * The license and distribution terms for this file may be - * found in the file LICENSE in this distribution or at - * http://www.rtems.org/license/LICENSE. - */ -/** - * @file - * - * @ingroup rtems_rtl - * - * @brief RTEMS Run-Time Linker ELF Trace Support. - */ - -#if !defined (_RTEMS_RTL_TRACE_H_) -#define _RTEMS_RTL_TRACE_H_ - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -#include <stdbool.h> -#include <stdint.h> - -/** - * Set to 1 to build trace support in to the RTL code. - */ -#define RTEMS_RTL_TRACE 1 - -/** - * The type of the mask. - */ -typedef uint32_t rtems_rtl_trace_mask; - -/** - * List of tracing bits for the various parts of the link editor. - */ -#define RTEMS_RTL_TRACE_DETAIL (1UL << 0) -#define RTEMS_RTL_TRACE_WARNING (1UL << 1) -#define RTEMS_RTL_TRACE_LOAD (1UL << 2) -#define RTEMS_RTL_TRACE_UNLOAD (1UL << 3) -#define RTEMS_RTL_TRACE_SECTION (1UL << 4) -#define RTEMS_RTL_TRACE_SYMBOL (1UL << 5) -#define RTEMS_RTL_TRACE_RELOC (1UL << 6) -#define RTEMS_RTL_TRACE_GLOBAL_SYM (1UL << 7) -#define RTEMS_RTL_TRACE_LOAD_SECT (1UL << 8) -#define RTEMS_RTL_TRACE_ALLOCATOR (1UL << 9) -#define RTEMS_RTL_TRACE_UNRESOLVED (1UL << 10) -#define RTEMS_RTL_TRACE_CACHE (1UL << 11) -#define RTEMS_RTL_TRACE_ALL (0xffffffffUL & ~(RTEMS_RTL_TRACE_CACHE)) - -/** - * Call to check if this part is bring traced. If RTEMS_RTL_TRACE is defined to - * 0 the code is dead code elminiated when built with -Os, -O2, or higher. - * - * @param mask The part of the API to trace. - * @retval true Tracing is active for the mask. - * @retval false Do not trace. - */ -#if RTEMS_RTL_TRACE -bool rtems_rtl_trace (rtems_rtl_trace_mask mask); -#else -#define rtems_rtl_trace(_m) (0) -#endif - -/** - * Set the mask. - * - * @param mask The mask bits to set. - * @return The previous mask. - */ -#if RTEMS_RTL_TRACE -rtems_rtl_trace_mask rtems_rtl_trace_set_mask (rtems_rtl_trace_mask mask); -#else -#define rtems_rtl_trace_set_mask(_m) -#endif - -/** - * Clear the mask. - * - * @param mask The mask bits to clear. - * @return The previous mask. - */ -#if RTEMS_RTL_TRACE -rtems_rtl_trace_mask rtems_rtl_trace_clear_mask (rtems_rtl_trace_mask mask); -#else -#define rtems_rtl_trace_clear_mask(_m) -#endif - -/** - * Add shell trace shell command. - */ -#if RTEMS_RTL_TRACE -int rtems_rtl_trace_shell_command (int argc, char *argv[]); -#endif - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif diff --git a/cpukit/libdl/rtl-unresolved.h b/cpukit/libdl/rtl-unresolved.h deleted file mode 100644 index bd4ce2a215..0000000000 --- a/cpukit/libdl/rtl-unresolved.h +++ /dev/null @@ -1,212 +0,0 @@ -/* - * COPYRIGHT (c) 2012 Chris Johns <chrisj@rtems.org> - * - * The license and distribution terms for this file may be - * found in the file LICENSE in this distribution or at - * http://www.rtems.org/license/LICENSE. - */ -/** - * @file - * - * @ingroup rtems_rtl - * - * @brief RTEMS Run-Time Linker Object File Unresolved Relocations Table. - * - * The unresolved relocation table holds relocations in a loaded object file - * which reference unresolved external symbols. The support is needed to allow - * dependent object files to load. In the case of dependent object files one - * will have unresolved externals until the dependent object file is also - * loaded. There is no load order that resolves this. - * - * The unresolved relocation table is a single table used by all object files - * with unresolved symbols. It made of blocks linked together where blocks are - * allocated as requiered. The table is always maintained compacted. That is as - * relocations are resolved and removed the table is compacted. The only - * pointer in the table is the object file poniter. This is used to identify - * which object the relocation belongs to. There are no linking or back - * pointers in the unresolved relocations table. The table is scanned for each - * object file's relocations. This is not fast but the table should be small - * and if it happens to grow large you have other more pressing issues to - * resolve in your application. - * - * The table holds two (2) types of records: - * - * # Symbol name strings. - * # Relocations. - * - * The symbol name a relocation references is held in a specific symbol name - * string record in the table the relocation record references. The record - * counts the number of references and the string is removed from the table - * when the reference count reaches 0. There can be many relocations - * referencing the symbol. The strings are referenced by a single 16bit - * unsigned integer which is the count of the string in the table. - * - * The section the relocation is for in the object is the section number. The - * relocation data is series of machine word sized fields: - * - * # Offset in the section. - * # Relocation info (format specific) - * # Additional format specific data. - */ - -#if !defined (_RTEMS_RTL_UNRESOLVED_H_) -#define _RTEMS_RTL_UNRESOLVED_H_ - -#include <rtems.h> -#include "rtl-obj-fwd.h" - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/** - * Hack to work around machine size. This needs to be cleaned up - * to better support 64bit targets. - */ -typedef uint32_t rtems_rtl_word_t; - -/** - * The types of records in the blocks. - */ -typedef enum rtems_rtl_unresolved_rtype_e -{ - rtems_rtl_unresolved_empty = 0, /**< The records is empty. Must always be 0 */ - rtems_rtl_unresolved_name = 1, /**< The record is a name. */ - rtems_rtl_unresolved_reloc = 2 /**< The record is a relocation record. */ -} rtems_rtl_unresolved_rtype_t; - -/** - * Unresolved externals symbol names. The names are reference counted and - * separate from the relocation records because a number of records could - * reference the same symbol name. - */ -typedef struct rtems_rtl_unresolv_name_s -{ - uint16_t refs; /**< The number of references to this name. */ - uint16_t length; /**< The length of this name. */ - const char name[12]; /**< The symbol name. */ -} rtems_rtl_unresolv_name_t; - -/** - * Unresolved externals symbols require the relocation records to be held - * and references. - */ -typedef struct rtems_rtl_unresolv_reloc_s -{ - rtems_rtl_obj_t* obj; /**< The relocation's object file. */ - uint16_t flags; /**< Format specific flags. */ - uint16_t name; /**< The symbol's name. */ - uint16_t sect; /**< The target section. */ - rtems_rtl_word_t rel[3]; /**< Relocation record. */ -} rtems_rtl_unresolv_reloc_t; - -/** - * Unresolved externals records. - */ -typedef struct rtems_rtl_unresolv_rec_s -{ - rtems_rtl_unresolved_rtype_t type; - union - { - rtems_rtl_unresolv_name_t name; /**< The name, or */ - rtems_rtl_unresolv_reloc_t reloc; /**< the relocation record. */ - } rec; -} rtems_rtl_unresolv_rec_t; - -/** - * Unresolved blocks. - */ -typedef struct rtems_rtl_unresolv_block_s -{ - rtems_chain_node link; /**< Blocks are chained. */ - uint32_t recs; /**< The number of records in the block. */ - rtems_rtl_unresolv_rec_t rec; /**< The records. More follow. */ -} rtems_rtl_unresolv_block_t; - -/** - * Unresolved table holds the names and relocations. - */ -typedef struct rtems_rtl_unresolved_s -{ - uint32_t marker; - size_t block_recs; /**< The records per blocks allocated. */ - rtems_chain_control blocks; /**< List of blocks. */ -} rtems_rtl_unresolved_t; - -/** - * The iterator function used to iterate over the unresolved table. - * - * @param rec The current iterator. - * @param data The user data. - * @retval true The iterator has finished. - * @retval false The iterator has not finished. Keep iterating. - */ -typedef bool rtems_rtl_unresolved_iterator_t (rtems_rtl_unresolv_rec_t* rec, - void* data); - -/** - * Open an unresolved relocation table. - * - * @param unresolv The unresolved table to open. - * @param block_records The number of records per block allocated. - * @retval true The table is open. - * @retval false The unresolved relocation table could not created. The RTL - * error has the error. - */ -bool rtems_rtl_unresolved_table_open (rtems_rtl_unresolved_t* unresolved, - size_t block_records); - -/** - * Close the table and erase the blocks. - * - * @param unreolved Close the unresolved table. - */ -void rtems_rtl_unresolved_table_close (rtems_rtl_unresolved_t* unresolved); - -/** - * Iterate over the table of unresolved entries. - */ -bool rtems_rtl_unresolved_interate (rtems_rtl_unresolved_iterator_t iterator, - void* data); - -/** - * Add a relocation to the list of unresolved relocations. - * - * @param unresolved The unresolved symbol table. - * @param obj The object table the symbols are for. - * @param flags Format specific flags. - * @param name The symbol name the relocation references. - * @param sect The target section number the relocation references. - * @param rel The format specific relocation data. - * @retval true The relocation has been added. - * @retval false The relocation could not be added. - */ -bool rtems_rtl_unresolved_add (rtems_rtl_obj_t* obj, - const uint16_t flags, - const char* name, - const uint16_t sect, - const rtems_rtl_word_t* rel); - -/** - * Resolve the unresolved symbols. - */ -void rtems_rtl_unresolved_resolve (void); - -/** - * Remove a relocation from the list of unresolved relocations. - * - * @param unresolved The unresolved symbol table. - * @param obj The object table the symbols are for. - * @param esyms The exported symbol table. - * @param size The size of the table in bytes. - */ -bool rtems_rtl_unresolved_remove (rtems_rtl_obj_t* obj, - const char* name, - const uint16_t sect, - const rtems_rtl_word_t* rel); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif diff --git a/cpukit/libdl/rtl.h b/cpukit/libdl/rtl.h deleted file mode 100644 index fe9a7df081..0000000000 --- a/cpukit/libdl/rtl.h +++ /dev/null @@ -1,321 +0,0 @@ -/* - * COPYRIGHT (c) 2012 Chris Johns <chrisj@rtems.org> - * - * The license and distribution terms for this file may be - * found in the file LICENSE in this distribution or at - * http://www.rtems.org/license/LICENSE. - */ - -/** - * @file - * - * @ingroup rtems_rtl - * - * @brief RTEMS Run-Time Linker - * - * This is the POSIX interface to run-time loading of code into RTEMS. - */ - -#if !defined (_RTEMS_RTL_H_) -#define _RTEMS_RTL_H_ - -#include <link.h> -#include <rtems.h> -#include <rtems/chain.h> - -#include <rtems/rtl/rtl-allocator.h> -#include <rtems/rtl/rtl-fwd.h> -#include <rtems/rtl/rtl-obj.h> -#include <rtems/rtl/rtl-obj-cache.h> -#include <rtems/rtl/rtl-obj-comp.h> -#include <rtems/rtl/rtl-unresolved.h> - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/** - * @defgroup rtems_rtl RTEMS Runtime Link Editor - * - * The module implements a runtime link editor with the standard dlopen, and - * dlclose family of functions. - * - * The runtime link editor is different to that found on Unix type systems. The - * object modules are compiled for PIC or position indepentent code and - * therefore require relocating when loaded. - * - * The object file format is currently ELF and object files can be separate - * files or in an archive. Object files in an archive are referenced by - * specifing 'archive:object' format. For example 'libfoo.a:bar.o'. - */ - -/** - * Macros to glue two tokens. - */ -#ifdef __STDC__ -#define RTL_XGLUE(a,b) a##b -#else -#define RTL_XGLUE(a,b) a/**/b -#endif - -#define RTL_GLUE(a,b) RTL_XGLUE(a,b) - -/** - * The number of buckets in the global symbol table. - */ -#define RTEMS_RTL_SYMS_GLOBAL_BUCKETS (32) - -/** - * The number of relocation record per block in the unresolved table. - */ -#define RTEMS_RTL_UNRESOLVED_BLOCK_SIZE (64) - -/** - * The global debugger interface variable. - */ -extern struct r_debug _rtld_debug; - -/** - * Debugger break function. Call when debugging to have it read the _rtld_debug - * variable. - */ -extern void _rtld_debug_state (void); - -/** - * The type of constructor/destructor function. - */ -typedef void (*rtems_rtl_cdtor_t)(void); - -/** - * The global RTL data. This structure is allocated on the heap when the first - * call to the RTL is made and never released. - * - * The global symbol table is a hash table held in this structure and the - * actual symbols are part of the object's structure. If this is a problem we - * could look at a hash table per object file. - */ -struct rtems_rtl_data_s -{ - rtems_id lock; /**< The RTL lock id */ - rtems_rtl_alloc_data_t allocator; /**< The allocator data. */ - rtems_chain_control objects; /**< List if loaded object files. */ - const char* paths; /**< Search paths for archives. */ - rtems_rtl_symbols_t globals; /**< Global symbol table. */ - rtems_rtl_unresolved_t unresolved; /**< Unresolved symbols. */ - rtems_rtl_obj_t* base; /**< Base object file. */ - rtems_rtl_obj_cache_t symbols; /**< Symbols object file cache. */ - rtems_rtl_obj_cache_t strings; /**< Strings object file cache. */ - rtems_rtl_obj_cache_t relocs; /**< Relocations object file cache. */ - rtems_rtl_obj_comp_t decomp; /**< The decompression compressor. */ - int last_errno; /**< Last error number. */ - char last_error[64]; /**< Last error string. */ -}; - -/** - * Get the RTL data with out locking. This call assumes the RTL is locked. - * - * @return rtems_rtl_data_t* The RTL data after being locked. - * @retval NULL The RTL data is not initialised. - */ -rtems_rtl_data_t* rtems_rtl_data (void); - -/** - * Get the RTL global symbol table with out locking. This call assmes the RTL - * is locked. - * - * @return rtems_rtl_symbols_t* The RTL global symbols after being locked. - * @retval NULL The RTL data is not initialised. - */ -rtems_rtl_symbols_t* rtems_rtl_global_symbols (void); - -/** - * Get the RTL resolved table with out locking. This call assmes the RTL - * is locked. - * - * @return rtems_rtl_unresolv_t* The RTL unresolved symbols and reloc records. - * @retval NULL The RTL data is not initialised. - */ -rtems_rtl_unresolved_t* rtems_rtl_unresolved (void); - -/** - * Get the RTL symbols, strings, or relocations object file caches. This call - * assmes the RTL is locked. - * - * @param symbols Pointer to the location to set the cache into. Returns NULL - * is rtl is not initialised. If NULL is passed in no value set. - * @param strings Pointer to the location to set the cache into. Returns NULL - * is rtl is not initialised. If NULL is passed in no value set. - * @param relocs Pointer to the location to set the cache into. Returns NULL - * is rtl is not initialised. If NULL is passed in no value set. - */ -void rtems_rtl_obj_caches (rtems_rtl_obj_cache_t** symbols, - rtems_rtl_obj_cache_t** strings, - rtems_rtl_obj_cache_t** relocs); - -/** - * Flush all the object file caches. - */ -void rtems_rtl_obj_caches_flush (void); - -/** - * Get the RTL decompressor setting the cache and the offset in the file the - * compressed stream starts. This call assmes the RTL is locked. - * - * @param decomp Pointer to the location to set the compressor into. Returns - * NULL is rtl is not initialised. - * @param cache The cache to read the file with. Saves needing an extrs buffer. - * @param offset The offset in the file the compressed stream starts. - */ -void rtems_rtl_obj_comp (rtems_rtl_obj_comp_t** decomp, - rtems_rtl_obj_cache_t* cache, - int fd, - int compression, - off_t offset); - -/** - * Lock the Run-time Linker. - * - * @return rtems_rtl_data_t* The RTL data after being locked. - * @retval NULL The RTL data could not be initialised or locked. Typically this - * means the lock could not be created. - */ -rtems_rtl_data_t* rtems_rtl_lock (void); - -/** - * Unlock the Run-time Linker. - * - * @return True The RTL is unlocked. - * @return False The RTL could not be unlocked. Not much you can do. - */ -bool rtems_rtl_unlock (void); - -/** - * Check a pointer is a valid object file descriptor returning the pointer as - * that type. - * - * Assumes the RTL has been locked. - * - * @param handle Pointer to the object file to be validated. - * @return rtl_obj* The object file descriptor. NULL is returned if invalid. - */ -rtems_rtl_obj_t* rtems_rtl_check_handle (void* handle); - -/** - * Find the object given a file name. - * - * @param name The name of the object file. - * @retval NULL No object file with that name found. - * @return rtems_rtl_obj_t* The object file descriptor. - */ -rtems_rtl_obj_t* rtems_rtl_find_obj (const char* name); - -/** - * Load an object file into memory relocating it. It will not be resolved - * against other symbols in other object files or the base image. - * - * The name can be a file name for an object file or it can be encoded to - * reference an archive of object modules (static library). This encoding is - * specific to RTEMS and allows dependences to specify an archive without the - * searching overhead normally incurred by linkers locating object files in an - * archive. The file name format rules are: - * - * 1. Absolute file references a specific object file in the architecture - * specific location on the file system. - * - * 2. Relative file references an object format file in the search path. - * - * 3. Absolute archive and file reference to a specific location in the file - * system. The archive and file are encoded as 'archive:file [@@offset]' - * where 'archive' is a valid file at the absolute path in the file system, - * and 'file' is a contained in the archive, and optionally an offset to - * the 'file' in the 'archive'. If no offset is provided the archive is - * searched. - * - * 4. Relative archive and file in the search path. The encoding is the same - * as described in item 3 of this list. - * - * Assumes the RTL has been locked. - * - * @param name The name of the object file. - * @param mode The mode of the load as defined by the dlopen call. - * @return rtl_obj* The object file descriptor. NULL is returned if the load fails. - */ -rtems_rtl_obj_t* rtems_rtl_load_object (const char* name, int mode); - -/** - * Unload an object file. This only happens when the user count is 0. - * - * Assumes the RTL has been locked. - * - * @param obj The object file descriptor. - * @retval true The object file has been unloaded. - * @retval false The object file could not be unloaded. - */ -bool rtems_rtl_unload_object (rtems_rtl_obj_t* obj); - -/** - * Run any constructor functions the object file may contain. This call - * assumes the linker is unlocked. - * - * @param obj The object file. - */ -void rtems_rtl_run_ctors (rtems_rtl_obj_t* obj); - -/** - * Get the last error message clearing it. This operation locks the run time - * linker and therefore keeps the RTL thread safe but this call is not thread - * safe is multiple threads are loading object files at the same time. This - * call is provided to map to the dlopen family of calls. - * - * @param message Pointer to a buffer to copy the message into. - * @param max_message The maximum message that can be copied. - * @return int The last error number. - */ -int rtems_rtl_get_error (char* message, size_t max_message); - -/** - * Append the path to the search path. - * - * @param path The path to append. - * @retval false The path could not be appended. - * @retval true The path was appended. - */ -bool rtems_rtl_path_append (const char* path); - -/** - * Prepend the path to the search path. - * - * @param path The path to prepend. - * @retval false The path could not be prepended. - * @retval true The path was prepended. - */ - -bool rtems_rtl_path_prepend (const char* path); - -/** - * Add an exported symbol table to the global symbol table. This call is - * normally used by an object file when loaded that contains a global symbol - * table. - * - * @param esyms The exported symbol table. - * @param count The size of the exported symbol table. - */ -void rtems_rtl_base_sym_global_add (const unsigned char* esyms, - unsigned int count); - -/** - * Return the object file descriptor for the base image. The object file - * descriptor returned is created when the run time linker is initialised. - * - * Assumes the RTL has been locked. - * - * @return rtl_obj* The object file descriptor for the base image. NULL is - * returned if the load fails. - */ -rtems_rtl_obj_t* rtems_rtl_baseimage (void); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif |