Mercurial > flash_v2
diff packages/hal/arm/arch/current/src/arm.ld @ 50:a0774359f013 ecos-sw-1999-11-02
Merge from eCos master repository on 1999-11-02-17:02:15-GMT
| author | jlarmour |
|---|---|
| date | Tue, 02 Nov 1999 20:57:07 +0000 |
| parents | 797268ecc331 |
| children | f10165814f1e |
line wrap: on
line diff
--- a/packages/hal/arm/arch/current/src/arm.ld +++ b/packages/hal/arm/arch/current/src/arm.ld @@ -35,6 +35,30 @@ INPUT(extras.o) #endif GROUP(libtarget.a libgcc.a) +#if defined(__ARMEB__) +OUTPUT_FORMAT(elf32-bigarm) +#endif + +#if defined(CYG_HAL_STARTUP_STUBS) \ + && defined(CYGPKG_HAL_ARM_PID) \ + && defined(__ARMEB__) +// Note: This is only needed when the PID board is used in BE mode without +// the proper ROM controller part. +// +// In big-endian mode, merge .RODATA sections into the .DATA section. This +// causes the data in these sections to be copied to RAM. When the CPU +// makes byte or halfword access to RAM, A0/A1 are modified correctly. +// This does not happen on ROM access (unless the proper ROM controller +// is used). +// +// This is matched in the PID stubs.ldi file which does not use the +// RODATA macros. +#define MERGE_IN_RODATA *(.rodata*) +#else +// Keep RODATA in separate sections. +#define MERGE_IN_RODATA +#endif + #define ALIGN_LMA 4 #define FOLLOWING(_section_) AT ((LOADADDR (_section_) + SIZEOF (_section_) + ALIGN_LMA - 1) & ~ (ALIGN_LMA - 1)) #define LMA_EQ_VMA @@ -92,7 +116,7 @@ GROUP(libtarget.a libgcc.a) #define SECTION_data(_region_, _vma_, _lma_) \ .data _vma_ : _lma_ \ - { __ram_data_start = ABSOLUTE (.); *(.data*) *(.data1) \ + { __ram_data_start = ABSOLUTE (.); *(.data*) *(.data1) MERGE_IN_RODATA \ _GOT1_START_ = ABSOLUTE (.); *(.got1) _GOT1_END_ = ABSOLUTE (.); \ _GOT2_START_ = ABSOLUTE (.); *(.got2) _GOT2_END_ = ABSOLUTE (.); \ . = ALIGN (4); \
