diff --git a/ChangeLog b/ChangeLog index 2006fcc2168..f1f048a353f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -3515,4 +3515,6 @@ include/nuttx/binfmt/. * arch/sim/src/up_elf.c and arch/x86/src/common/up_elf.c: Add for ELF modules. + * arch/arm/include/elf.h: Added ARM ELF header file. + * include/elf32.h: Renamed elf.h to elf32.h. diff --git a/arch/arm/include/elf.h b/arch/arm/include/elf.h index d8538538019..21b2c1c2c1e 100644 --- a/arch/arm/include/elf.h +++ b/arch/arm/include/elf.h @@ -50,7 +50,7 @@ * e_ident[EI_DATA] = ELFDATA2LSB (little endian) or ELFDATA2MSB (big endian) */ -#if 0 /* Defined in include/elf.h */ +#if 0 /* Defined in include/elf32.h */ #define EM_ARM 40 #endif diff --git a/arch/sim/src/up_elf.c b/arch/sim/src/up_elf.c index ca3b642dcde..26a8971a72f 100644 --- a/arch/sim/src/up_elf.c +++ b/arch/sim/src/up_elf.c @@ -40,7 +40,7 @@ #include #include -#include +#include #include #include diff --git a/arch/x86/src/common/up_elf.c b/arch/x86/src/common/up_elf.c index be166b480c9..da3f7b9935e 100644 --- a/arch/x86/src/common/up_elf.c +++ b/arch/x86/src/common/up_elf.c @@ -40,7 +40,7 @@ #include #include -#include +#include #include #include diff --git a/binfmt/elf.c b/binfmt/elf.c index d9c3d0b9c9a..9a0ac1873f5 100644 --- a/binfmt/elf.c +++ b/binfmt/elf.c @@ -42,7 +42,7 @@ #include #include #include -#include +#include #include #include diff --git a/binfmt/libelf/gnu-elf.ld b/binfmt/libelf/gnu-elf.ld index 703f3698123..bdf82836b30 100644 --- a/binfmt/libelf/gnu-elf.ld +++ b/binfmt/libelf/gnu-elf.ld @@ -1,7 +1,7 @@ /**************************************************************************** - * examples/elf/gnu-elf-gotoff.ld + * examples/elf/gnu-elf.ld * - * Copyright (C) 2009, 2012 Gregory Nutt. All rights reserved. + * Copyright (C) 2012 Gregory Nutt. All rights reserved. * Author: Gregory Nutt * * Redistribution and use in source and binary forms, with or without @@ -33,44 +33,11 @@ * ****************************************************************************/ -MEMORY -{ - ISPACE : ORIGIN = 0x0, LENGTH = 2097152 - DSPACE : ORIGIN = 0x0, LENGTH = 2097152 -} - -/**************************************************************************** - * The XFLAT program image is divided into two segments: - * - * (1) ISpace (Instruction Space). This is the segment that contains - * code (.text). Everything in the segment should be fetch-able - * machine PC instructions (jump, branch, call, etc.). - * (2) DSpace (Data Space). This is the segment that contains both - * read-write data (.data, .bss) as well as read-only data (.rodata). - * Everything in this segment should be access-able with machine - * PIC load and store instructions. - * - * Older versions of GCC (at least up to GCC 4.3.3), use GOT-relative - * addressing to access RO data. In that case, read-only data (.rodata) must - * reside in D-Space and this linker script should be used. - * - * Newer versions of GCC (at least as of GCC 4.6.3), use PC-relative - * addressing to access RO data. In that case, read-only data (.rodata) must - * reside in I-Space and this linker script should NOT be used with those - * newer tools. - * - ****************************************************************************/ - SECTIONS { .text 0x00000000 : { - /* ISpace is located at address 0. Every (unrelocated) ISpace - * address is an offset from the begining of this segment. - */ - - text_start = . ; - + _stext = . ; *(.text) *(.text.*) *(.gnu.warning) @@ -79,99 +46,72 @@ SECTIONS *(.glue_7t) *(.jcr) - /* C++ support: The .init and .fini sections contain XFLAT- - * specific logic to manage static constructors and destructors. + /* C++ support: The .init and .fini sections contain specific logic + * to manage static constructors and destructors. */ *(.gnu.linkonce.t.*) *(.init) *(.fini) - - /* This is special code area at the end of the normal - text section. It contains a small lookup table at - the start followed by the code pointed to by entries - in the lookup table. */ - - . = ALIGN (4) ; - PROVIDE(__ctbp = .); - *(.call_table_data) - *(.call_table_text) - _etext = . ; + } - } > ISPACE - - /* DSpace is also located at address 0. Every (unrelocated) DSpace - * address is an offset from the begining of this segment. - */ - - .data 0x00000000 : + .rodata : { - /* In this model, .rodata is access using PC-relative addressing - * and, hence, must also reside in the .text section. - */ - - __data_start = . ; + _srodata = . ; *(.rodata) *(.rodata1) *(.rodata.*) *(.gnu.linkonce.r*) + _erodata = . ; + } + .data : + { + _sdata = . ; *(.data) *(.data1) *(.data.*) *(.gnu.linkonce.d*) - *(.data1) - *(.eh_frame) - *(.gcc_except_table) - - *(.gnu.linkonce.s.*) - *(__libc_atexit) - *(__libc_subinit) - *(__libc_subfreeres) - *(.note.ABI-tag) - - /* C++ support. For each global and static local C++ object, - * GCC creates a small subroutine to construct the object. Pointers - * to these routines (not the routines themselves) are stored as - * simple, linear arrays in the .ctors section of the object file. - * Similarly, pointers to global/static destructor routines are - * stored in .dtors. - */ - - *(.gnu.linkonce.d.*) - - _ctors_start = . ; - *(.ctors) - _ctors_end = . ; - _dtors_start = . ; - *(.dtors) - _dtors_end = . ; - _edata = . ; - edata = ALIGN( 0x10 ) ; - } > DSPACE + } + + /* C++ support. For each global and static local C++ object, + * GCC creates a small subroutine to construct the object. Pointers + * to these routines (not the routines themselves) are stored as + * simple, linear arrays in the .ctors section of the object file. + * Similarly, pointers to global/static destructor routines are + * stored in .dtors. + */ + + .ctors : + { + _sctros = . ; + *(.ctors) + _edtors = . ; + } + + .ctors : + { + _sdtors = . ; + *(.dtors) + _edtors = . ; + } .bss : { - __bss_start = _edata ; - *(.dynsbss) - *(.sbss) - *(.sbss.*) - *(.scommon) - *(.dynbss) + _sbss = . ; *(.bss) *(.bss.*) - *(.bss*) + *(.sbss) + *(.sbss.*) *(.gnu.linkonce.b*) *(COMMON) - end = ALIGN( 0x10 ) ; - _end = ALIGN( 0x10 ) ; - } > DSPACE + _ebss = . ; + } - .got 0 : { *(.got.plt) *(.got) } - .junk 0 : { *(.rel*) *(.rela*) } /* Stabs debugging sections. */ + .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } diff --git a/binfmt/libelf/libelf.h b/binfmt/libelf/libelf.h index 37a2ad872dd..0fb1362dcdd 100644 --- a/binfmt/libelf/libelf.h +++ b/binfmt/libelf/libelf.h @@ -43,7 +43,7 @@ #include #include -#include +#include #include diff --git a/binfmt/libelf/libelf_bind.c b/binfmt/libelf/libelf_bind.c index e398521cca5..f41b5a0b6f6 100644 --- a/binfmt/libelf/libelf_bind.c +++ b/binfmt/libelf/libelf_bind.c @@ -41,7 +41,7 @@ #include #include -#include +#include #include #include #include diff --git a/binfmt/libelf/libelf_init.c b/binfmt/libelf/libelf_init.c index a3a320b1650..f2744eae769 100644 --- a/binfmt/libelf/libelf_init.c +++ b/binfmt/libelf/libelf_init.c @@ -43,7 +43,7 @@ #include #include #include -#include +#include #include #include diff --git a/binfmt/libelf/libelf_load.c b/binfmt/libelf/libelf_load.c index 4a1a561c3c7..9378661e3c9 100644 --- a/binfmt/libelf/libelf_load.c +++ b/binfmt/libelf/libelf_load.c @@ -45,7 +45,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/binfmt/libelf/libelf_read.c b/binfmt/libelf/libelf_read.c index 0b01cf096e9..da41212f237 100644 --- a/binfmt/libelf/libelf_read.c +++ b/binfmt/libelf/libelf_read.c @@ -43,7 +43,7 @@ #include #include #include -#include +#include #include #include diff --git a/binfmt/libelf/libelf_symbols.c b/binfmt/libelf/libelf_symbols.c index 05f827963a0..123f9f77f58 100644 --- a/binfmt/libelf/libelf_symbols.c +++ b/binfmt/libelf/libelf_symbols.c @@ -41,7 +41,7 @@ #include #include -#include +#include #include #include diff --git a/include/elf.h b/include/elf32.h similarity index 99% rename from include/elf.h rename to include/elf32.h index caf0b1876d9..e16ae0091ab 100644 --- a/include/elf.h +++ b/include/elf32.h @@ -1,5 +1,5 @@ /**************************************************************************** - * include/elf.h + * include/elf32.h * * Copyright (C) 2012 Gregory Nutt. All rights reserved. * Author: Gregory Nutt @@ -36,8 +36,8 @@ * ****************************************************************************/ -#ifndef __INCLUDE_ELF_H -#define __INCLUDE_ELF_H +#ifndef __INCLUDE_ELF32_H +#define __INCLUDE_ELF32_H /**************************************************************************** * Included Files @@ -349,4 +349,4 @@ typedef struct //extern Elf32_Dyn _DYNAMIC[] ; -#endif /* __INCLUDE_ELF_H */ +#endif /* __INCLUDE_ELF32_H */ diff --git a/include/nuttx/binfmt/elf.h b/include/nuttx/binfmt/elf.h index 6b13c10873d..aa04adaf2d3 100644 --- a/include/nuttx/binfmt/elf.h +++ b/include/nuttx/binfmt/elf.h @@ -45,7 +45,7 @@ #include #include #include -#include +#include /**************************************************************************** * Pre-processor Definitions