From 607902061e6a2473c5c6d4e105dea0f95779fcc4 Mon Sep 17 00:00:00 2001 From: schodet Date: Tue, 24 Mar 2009 14:27:36 +0000 Subject: * ecos/packages/hal/sparc: - moved interrupt stack as it is used before bss zeroing, overwriting local ram contents. git-svn-id: svn+ssh://pessac/svn/cesar/trunk@4282 017c9cb6-072f-447c-8318-d5b54f68fe89 --- cesar/ecos/packages/hal/sparc/arch/current/src/sparc.ld | 5 +++++ cesar/ecos/packages/hal/sparc/arch/current/src/vectors.S | 2 +- .../current/include/pkgconf/mlt_sparc_leon_ahbram.ldi | 11 +++++++---- .../leon/current/include/pkgconf/mlt_sparc_leon_ram.ldi | 15 +++++++-------- .../leon3/current/include/pkgconf/mlt_sparc_leon3_ram.ldi | 1 + 5 files changed, 21 insertions(+), 13 deletions(-) (limited to 'cesar/ecos') diff --git a/cesar/ecos/packages/hal/sparc/arch/current/src/sparc.ld b/cesar/ecos/packages/hal/sparc/arch/current/src/sparc.ld index 063e3c4e03..8e5cd1c654 100644 --- a/cesar/ecos/packages/hal/sparc/arch/current/src/sparc.ld +++ b/cesar/ecos/packages/hal/sparc/arch/current/src/sparc.ld @@ -154,6 +154,11 @@ GROUP(libtarget.a libgcc.a) __bss_end = ABSOLUTE (.); } \ > _region_ +#define SECTION_interrupt_stack(_region_, _vma_, _lma_) \ + .interrupt_stack _vma_ : _lma_ \ + { *(.interrupt_stack) } \ + > _region_ + #define SECTION_private(_region_, _vma_, _lma_) \ .private _vma_ : _lma_ \ { __private_start = ABSOLUTE (.); \ diff --git a/cesar/ecos/packages/hal/sparc/arch/current/src/vectors.S b/cesar/ecos/packages/hal/sparc/arch/current/src/vectors.S index 29378aa2a6..1c2aa67aae 100644 --- a/cesar/ecos/packages/hal/sparc/arch/current/src/vectors.S +++ b/cesar/ecos/packages/hal/sparc/arch/current/src/vectors.S @@ -900,7 +900,7 @@ hal_vsr_table: #if defined(BOOTUPSTACK_IS_INTERRUPTSTACK) || \ defined(CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK) - .section ".bss" + .section ".interrupt_stack" #ifndef CYGPKG_HAL_SMP_SUPPORT diff --git a/cesar/ecos/packages/hal/sparc/leon/current/include/pkgconf/mlt_sparc_leon_ahbram.ldi b/cesar/ecos/packages/hal/sparc/leon/current/include/pkgconf/mlt_sparc_leon_ahbram.ldi index c86578c7c6..cb8600bec7 100644 --- a/cesar/ecos/packages/hal/sparc/leon/current/include/pkgconf/mlt_sparc_leon_ahbram.ldi +++ b/cesar/ecos/packages/hal/sparc/leon/current/include/pkgconf/mlt_sparc_leon_ahbram.ldi @@ -21,14 +21,17 @@ SECTIONS SECTION_data (ahbram, ALIGN (0x1), LMA_EQ_VMA) SECTION_private (ahbram, ALIGN (0x4), LMA_EQ_VMA) SECTION_bss (ahbram, ALIGN (0x8) (NOLOAD), LMA_EQ_VMA) - CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); #ifdef CYG_HAL_LOCALRAM - // Will be overwritten by bss and heap. - CYG_LABEL_DEFN(__dlram_data_source) = ALIGN (ADDR (.bss), 8); + // Will be overwritten by bss. SECTION_dlram_data (tclrd, , AT (LOADADDR (.bss))) SECTION_dlram_bss (tclrd, (NOLOAD), LMA_EQ_VMA) - CYG_LABEL_DEFN(__ilram_source) = ALIGN (CYG_LABEL_DEFN (__dlram_data_source) + SIZEOF (.dlram_data), 8); SECTION_ilram (tclri, , FOLLOWING (.dlram_data)) + CYG_LABEL_DEFN(__dlram_data_source) = LOADADDR (.dlram_data); + CYG_LABEL_DEFN(__ilram_source) = LOADADDR (.ilram); + . = ADDR (.bss) + + MAX (SIZEOF (.bss), SIZEOF (.dlram_data) + SIZEOF (.ilram)); #endif + SECTION_interrupt_stack (ahbram, ALIGN (8) (NOLOAD), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (8); SECTIONS_END } diff --git a/cesar/ecos/packages/hal/sparc/leon/current/include/pkgconf/mlt_sparc_leon_ram.ldi b/cesar/ecos/packages/hal/sparc/leon/current/include/pkgconf/mlt_sparc_leon_ram.ldi index 807c8055a2..0560ae5e4d 100644 --- a/cesar/ecos/packages/hal/sparc/leon/current/include/pkgconf/mlt_sparc_leon_ram.ldi +++ b/cesar/ecos/packages/hal/sparc/leon/current/include/pkgconf/mlt_sparc_leon_ram.ldi @@ -1,7 +1,3 @@ -// eCos memory layout - Fri Oct 20 08:18:20 2000 - -// This is a generated file - do not edit - #include MEMORY @@ -24,14 +20,17 @@ SECTIONS SECTION_data (ram, ALIGN (0x1), LMA_EQ_VMA) SECTION_private (ram, ALIGN (0x4), LMA_EQ_VMA) SECTION_bss (ram, ALIGN (0x8) (NOLOAD), LMA_EQ_VMA) - CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); #ifdef CYG_HAL_LOCALRAM - // Will be overwritten by bss and heap. - CYG_LABEL_DEFN(__dlram_data_source) = ALIGN (ADDR (.bss), 8); + // Will be overwritten by bss. SECTION_dlram_data (tclrd, , AT (LOADADDR (.bss))) SECTION_dlram_bss (tclrd, (NOLOAD), LMA_EQ_VMA) - CYG_LABEL_DEFN(__ilram_source) = ALIGN (CYG_LABEL_DEFN (__dlram_data_source) + SIZEOF (.dlram_data), 8); SECTION_ilram (tclri, , FOLLOWING (.dlram_data)) + CYG_LABEL_DEFN(__dlram_data_source) = LOADADDR (.dlram_data); + CYG_LABEL_DEFN(__ilram_source) = LOADADDR (.ilram); + . = ADDR (.bss) + + MAX (SIZEOF (.bss), SIZEOF (.dlram_data) + SIZEOF (.ilram)); #endif + SECTION_interrupt_stack (ram, ALIGN (8) (NOLOAD), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (8); SECTIONS_END } diff --git a/cesar/ecos/packages/hal/sparc/leon3/current/include/pkgconf/mlt_sparc_leon3_ram.ldi b/cesar/ecos/packages/hal/sparc/leon3/current/include/pkgconf/mlt_sparc_leon3_ram.ldi index c6df5cbe59..ae80ab0ea5 100644 --- a/cesar/ecos/packages/hal/sparc/leon3/current/include/pkgconf/mlt_sparc_leon3_ram.ldi +++ b/cesar/ecos/packages/hal/sparc/leon3/current/include/pkgconf/mlt_sparc_leon3_ram.ldi @@ -21,6 +21,7 @@ SECTIONS SECTION_gcc_except_table (ram, ALIGN (0x1), LMA_EQ_VMA) SECTION_data (ram, ALIGN (0x1), LMA_EQ_VMA) SECTION_bss (ram, ALIGN (0x8) (NOLOAD), LMA_EQ_VMA) + SECTION_interrupt_stack (ram, ALIGN (0x8) (NOLOAD), LMA_EQ_VMA) CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); SECTIONS_END } -- cgit v1.2.3