forked from Imagelibrary/rtems
remove obsolete files
This commit is contained in:
@@ -1,162 +0,0 @@
|
||||
/**
|
||||
* @file cpu.c
|
||||
*
|
||||
* ARM CPU Dependent Source.
|
||||
*/
|
||||
/*
|
||||
* RTEMS GBA BSP
|
||||
*
|
||||
* COPYRIGHT (c) 2000 Canon Research Centre France SA.
|
||||
* Emmanuel Raguet, mailto:raguet@crf.canon.fr
|
||||
*
|
||||
* Copyright (c) 2002 Advent Networks, Inc
|
||||
* Jay Monkman <jmonkman@adventnetworks.com>
|
||||
*
|
||||
* Copyright (c) 2004
|
||||
* Markku Puro <markku.puro@kopteri.net>
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in found in the file LICENSE in this distribution or at
|
||||
* http://www.rtems.com/license/LICENSE.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
#include <stdint.h>
|
||||
#include <rtems/system.h>
|
||||
#include <rtems.h>
|
||||
#include <rtems/bspIo.h>
|
||||
#include <rtems/score/isr.h>
|
||||
#include <rtems/score/wkspace.h>
|
||||
#include <rtems/score/thread.h>
|
||||
#include <rtems/score/cpu.h>
|
||||
#include <arm_mode_bits.h>
|
||||
|
||||
/**
|
||||
* @brief _CPU_Initialize routine performs processor dependent initialization
|
||||
*/
|
||||
void _CPU_Initialize(void)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief _CPU_ISR_Get_level returns the current interrupt level
|
||||
*
|
||||
* @param None
|
||||
* @return int level
|
||||
*/
|
||||
uint32_t _CPU_ISR_Get_level( void )
|
||||
{
|
||||
uint32_t reg = 0; /* to avoid warning */
|
||||
|
||||
asm volatile ("mrs %0, cpsr \n" \
|
||||
"and %0, %0, #0xc0 \n" \
|
||||
: "=r" (reg) \
|
||||
: "0" (reg) );
|
||||
return reg;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief _CPU_ISR_install_vector kernel routine installs the RTEMS handler for the
|
||||
* specified vector
|
||||
*
|
||||
* @param vector interrupt vector number
|
||||
* @param new_handler replacement ISR for this vector number
|
||||
* @param old_handler pointer to store former ISR for this vector number
|
||||
* @return None
|
||||
*
|
||||
* @todo Can't use exception vectors in GBA because they are already in GBA ROM BIOS!!
|
||||
*/
|
||||
extern __inline__ void _CPU_ISR_install_vector(uint32_t vector, proc_ptr new_handler, proc_ptr *old_handler);
|
||||
|
||||
/**
|
||||
* @brief _CPU_Context_Initialize kernel routine initialize the specified context
|
||||
*
|
||||
* @param the_context
|
||||
* @param stack_base
|
||||
* @param size
|
||||
* @param new_level
|
||||
* @param entry_point
|
||||
* @param is_fp
|
||||
* @return None
|
||||
*/
|
||||
void _CPU_Context_Initialize(
|
||||
Context_Control *the_context,
|
||||
uint32_t *stack_base,
|
||||
uint32_t size,
|
||||
uint32_t new_level,
|
||||
void *entry_point,
|
||||
bool is_fp
|
||||
)
|
||||
{
|
||||
the_context->register_sp = (uint32_t)stack_base + size ;
|
||||
the_context->register_lr = (uint32_t)entry_point;
|
||||
the_context->register_cpsr = new_level | ModePriv;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief _CPU_Install_interrupt_stack function is empty since the BSP must set up the interrupt stacks.
|
||||
*
|
||||
* @todo Can't use exception vectors in GBA because they are already in GBA ROM BIOS!!
|
||||
*/
|
||||
extern __inline__ void _CPU_Install_interrupt_stack( void );
|
||||
|
||||
/**
|
||||
* @brief _defaultExcHandler function is empty
|
||||
*
|
||||
* @todo Can't use exception vectors in GBA because they are already in GBA ROM BIOS!!
|
||||
*/
|
||||
extern void _defaultExcHandler (CPU_Exception_frame *ctx);
|
||||
|
||||
/**
|
||||
* @brief _currentExcHandler function is empty (_defaultExcHandler)
|
||||
*
|
||||
* @todo Can't use exception vectors in GBA because they are already in GBA ROM BIOS!!
|
||||
*/
|
||||
cpuExcHandlerType _currentExcHandler = _defaultExcHandler;
|
||||
/*
|
||||
extern void _Exception_Handler_Undef_Swi();
|
||||
extern void _Exception_Handler_Abort();
|
||||
extern void _exc_data_abort();
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief rtems_exception_init_mngt function is empty since the BSP must set up the interrupt stacks.
|
||||
*
|
||||
* @todo Can't use exception vectors in GBA because they are already in GBA ROM BIOS!!
|
||||
*/
|
||||
extern __inline__ void rtems_exception_init_mngt(void);
|
||||
|
||||
|
||||
/**
|
||||
* @brief do_data_abort function is empty
|
||||
*
|
||||
* This function figure out what caused the data abort
|
||||
*
|
||||
* @todo Can't use exception vectors in GBA because they are already in GBA ROM BIOS!!
|
||||
* This function is supposed to figure out what caused the data abort, do that, then return.
|
||||
* All unhandled instructions cause the system to hang.
|
||||
*/
|
||||
extern __inline__ void do_data_abort(uint32_t insn, uint32_t spsr, CPU_Exception_frame *ctx);
|
||||
|
||||
|
||||
/* @todo Can't use exception vectors in GBA because they are already in GBA ROM BIOS!! */
|
||||
/* @todo Remove dummy functions needed by linker
|
||||
****************************************************************************************/
|
||||
/* @cond INCLUDE_ASM */
|
||||
asm (" .text");
|
||||
asm (" .arm");
|
||||
asm (" .global _CPU_ISR_install_vector");
|
||||
asm ("_CPU_ISR_install_vector:");
|
||||
asm (" .global _CPU_Install_interrupt_stack");
|
||||
asm ("_CPU_Install_interrupt_stack:");
|
||||
asm (" .global _defaultExcHandler");
|
||||
asm ("_defaultExcHandler:");
|
||||
asm (" .global rtems_exception_init_mngt");
|
||||
asm ("rtems_exception_init_mngt:");
|
||||
asm (" .global do_data_abort");
|
||||
asm ("do_data_abort:");
|
||||
asm (" mov pc, lr");
|
||||
/* @endcond */
|
||||
|
||||
@@ -1,86 +0,0 @@
|
||||
/**
|
||||
* @file cpu_asm.S
|
||||
*
|
||||
* This file contains the implementation of exception handlers.
|
||||
*/
|
||||
/*
|
||||
* RTEMS GBA BSP
|
||||
*
|
||||
* Copyright (c) 2002 by Advent Networks, Inc.
|
||||
* Jay Monkman <jmonkman@adventnetworks.com>
|
||||
*
|
||||
* COPYRIGHT (c) 2000 Canon Research Centre France SA.
|
||||
* Emmanuel Raguet, mailto:raguet@crf.canon.fr
|
||||
*
|
||||
* Copyright (c) 2004
|
||||
* Markku Puro <markku.puro@kopteri.net>
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in found in the file LICENSE in this distribution or at
|
||||
* http://www.rtems.com/license/LICENSE.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#define __asm__
|
||||
#include <rtems/asm.h>
|
||||
#include <rtems/score/cpu_asm.h>
|
||||
#include <asm_macros.h>
|
||||
/* @cond INCLUDE_ASM */
|
||||
|
||||
/**
|
||||
* This routine performs a normal non-FP context.
|
||||
* function void _CPU_Context_switch( run_context, heir_context )
|
||||
* R0 = run_context R1 = heir_context
|
||||
*
|
||||
* This function copies the current registers to where r0 points, then
|
||||
* restores the ones from where r1 points.
|
||||
*
|
||||
* Using the ldm/stm opcodes save 2-3 us on 100 MHz ARM9TDMI with
|
||||
* a 16 bit data bus.
|
||||
*
|
||||
*/
|
||||
.align
|
||||
/* .section .iwram */
|
||||
PUBLIC_ARM_FUNCTION(_CPU_Context_switch)
|
||||
/* Start saving context */
|
||||
mrs r2, cpsr
|
||||
stmia r0, {r2, r4, r5, r6, r7, r8, r9, r10, r11, r13, r14}
|
||||
/* Start restoring context */
|
||||
_restore:
|
||||
ldmia r1, {r2, r4, r5, r6, r7, r8, r9, r10, r11, r13, r14}
|
||||
msr cpsr, r2
|
||||
mov pc, lr
|
||||
LABEL_END(_CPU_Context_switch)
|
||||
|
||||
/**
|
||||
* This function copies the restores the registers from where r0 points.
|
||||
* function void _CPU_Context_restore( new_context )
|
||||
* It must match _CPU_Context_switch()
|
||||
*
|
||||
*/
|
||||
PUBLIC_ARM_FUNCTION(_CPU_Context_restore)
|
||||
mov r1, r0
|
||||
b _restore
|
||||
LABEL_END(_CPU_Context_restore)
|
||||
|
||||
/**
|
||||
* function _Exception_Handler_Undef_Swi
|
||||
* Can't use exception vectors in GBA
|
||||
* @todo _Exception_Handler_Undef_Swi: Unused handler needed by ../score/cpu_asm.S
|
||||
*
|
||||
*/
|
||||
.global _Exception_Handler_Undef_Swi
|
||||
_Exception_Handler_Undef_Swi:
|
||||
mov pc, lr
|
||||
|
||||
/**
|
||||
* function _Exception_Handler_Abort
|
||||
* Can't use exception vectors in GBA
|
||||
* @todo _Exception_Handler_Abort: Unused handler needed by ../score/cpu_asm.S
|
||||
*
|
||||
*/
|
||||
.global _Exception_Handler_Abort
|
||||
_Exception_Handler_Abort:
|
||||
mov pc, lr
|
||||
/* @endcond */
|
||||
@@ -1,206 +0,0 @@
|
||||
/* irq_asm.S
|
||||
*
|
||||
* This file contains the implementation of the IRQ handler
|
||||
*
|
||||
* Copyright (c) 2002 Advent Networks, Inc.
|
||||
* Jay Monkman <jmonkman@adventnetworks.com>
|
||||
*
|
||||
* CopyRight (C) 2000 Canon Research France SA.
|
||||
* Emmanuel Raguet, mailto:raguet@crf.canon.fr
|
||||
*
|
||||
* Modified Andy Dachs <a.dachs@sstl.co.uk>
|
||||
* Copyright (c) 2001 Surrey Satellite Technolgy Limited
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in found in the file LICENSE in this distribution or at
|
||||
* http://www.rtems.com/license/LICENSE.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#include <rtems/asm.h>
|
||||
#define __asm__
|
||||
|
||||
|
||||
/*MUST be ARM code*/
|
||||
/* assume that before interrupt we are in svc mode */
|
||||
/* fix me: No priority support, interrupt disabled too long in the ISR */
|
||||
.arm
|
||||
.globl _ISR_Handler
|
||||
_ISR_Handler:
|
||||
.code 32
|
||||
stmdb sp!, {r0, r1, r2, r3, r12} /* save regs on INT stack */
|
||||
stmdb sp!, {lr} /* now safe to call C funcs */
|
||||
|
||||
/* one nest level deeper */
|
||||
ldr r0, =_ISR_Nest_level
|
||||
ldr r1, [r0]
|
||||
add r1, r1,#1
|
||||
str r1, [r0]
|
||||
|
||||
/* disable multitasking */
|
||||
ldr r0, =_Thread_Dispatch_disable_level
|
||||
ldr r1, [r0]
|
||||
add r1, r1,#1
|
||||
str r1, [r0]
|
||||
|
||||
/* BSP specific function to INT handler */
|
||||
/* FIXME: I'm not sure why I can't save just r12. I'm also */
|
||||
/* not sure which of r1-r3 are important. */
|
||||
#ifdef __thumb__
|
||||
ldr r0, =ExecuteITHandler +1
|
||||
mov lr, pc
|
||||
bx r0
|
||||
#else
|
||||
bl ExecuteITHandler
|
||||
#endif
|
||||
|
||||
/* one less nest level */
|
||||
ldr r0, =_ISR_Nest_level
|
||||
ldr r1, [r0]
|
||||
sub r1, r1,#1
|
||||
str r1, [r0]
|
||||
|
||||
/* unnest multitasking */
|
||||
ldr r0, =_Thread_Dispatch_disable_level
|
||||
ldr r1, [r0]
|
||||
sub r1, r1,#1
|
||||
str r1, [r0]
|
||||
|
||||
/* check to see if we interrupted nd INT (with FIQ?) */
|
||||
mrs r0, spsr
|
||||
and r0, r0, #0x1f
|
||||
cmp r0, #0x12 /* is it INT mode? */
|
||||
beq exitit
|
||||
|
||||
/* If thread dispatching is disabled, exit */
|
||||
cmp r1, #0
|
||||
bne exitit
|
||||
|
||||
/* If a task switch is necessary, call scheduler */
|
||||
ldr r0, =_Context_Switch_necessary
|
||||
ldrb r1, [r0]
|
||||
cmp r1, #0
|
||||
|
||||
/* since bframe is going to clear _ISR_Signals_to_thread_executing, */
|
||||
/* we need to load it here */
|
||||
ldr r0, =_ISR_Signals_to_thread_executing
|
||||
ldrb r1, [r0]
|
||||
bne bframe
|
||||
|
||||
/* If a signals to be sent (_ISR_Signals_to_thread_executing != 0), */
|
||||
/* call scheduler */
|
||||
cmp r1, #0
|
||||
beq exitit
|
||||
|
||||
/* _ISR_Signals_to_thread_executing = FALSE */
|
||||
mov r1, #0
|
||||
strb r1, [r0]
|
||||
|
||||
bframe:
|
||||
|
||||
/* Now we need to set up the return from this ISR to be _ISR_Dispatch */
|
||||
/* To do that, we need to save the current lr_int and spsr_int on the */
|
||||
/* SVC stack */
|
||||
mrs r0, spsr
|
||||
ldmia sp!, {r1} /* get lr off stack */
|
||||
stmdb sp!, {r1}
|
||||
mrs r2, cpsr
|
||||
orr r3, r2, #0x1 /* change to SVC mode */
|
||||
msr cpsr_c, r3
|
||||
|
||||
/* now in SVC mode */
|
||||
stmdb sp!, {r0, r1} /* put spsr_int and lr_int on SVC stack */
|
||||
msr cpsr_c, r2 /* change back to INT mode */
|
||||
|
||||
/* now in INT mode */
|
||||
|
||||
/* replace lr with address of _ISR_Dispatch */
|
||||
ldr lr, =_ISR_Dispatch_p_4 /* On entry to an ISR, the lr is */
|
||||
/* the return address + 4, so */
|
||||
/* we have to emulate that */
|
||||
#ifdef __thumb__
|
||||
sub lr, #0x1
|
||||
#endif
|
||||
ldmia sp!, {r1} /* out with the old */
|
||||
stmdb sp!, {lr} /* in with the new (lr) */
|
||||
#ifndef __thumb__
|
||||
orr r0, r0, #0xc0
|
||||
msr spsr_cf, r0 /* mask interrupt */
|
||||
#endif
|
||||
|
||||
exitit:
|
||||
ldmia sp!, {lr} /* restore regs from INT stack */
|
||||
ldmia sp!, {r0, r1, r2, r3, r12} /* restore regs from INT stack */
|
||||
subs pc, lr, #4 /* return */
|
||||
|
||||
/* on entry to _ISR_Dispatch, we're in SVC mode */
|
||||
.globl _ISR_Dispatch
|
||||
_ISR_Dispatch:
|
||||
#ifdef __thumb__
|
||||
/* will be called from ISR, with SPSR in T mode */
|
||||
/* ISR will enter from here */
|
||||
.code 16
|
||||
.thumb_func
|
||||
push {r0-r3,lr} /* save regs on SVC stack */
|
||||
/* (now safe to call C funcs) */
|
||||
/* we don't save lr, since */
|
||||
/* it's just going to get */
|
||||
/* overwritten */
|
||||
//nop /* made _ISR_Dispatch_p_4 4-word align */ /*recent compiler have a better support for pad*/
|
||||
#else
|
||||
.code 32
|
||||
stmdb sp!, {r0-r3, r12,lr} /* save regs on SVC stack */
|
||||
/* (now safe to call C funcs) */
|
||||
/* we don't save lr, since */
|
||||
/* it's just going to get */
|
||||
/* overwritten */
|
||||
#endif
|
||||
|
||||
|
||||
_ISR_Dispatch_p_4:
|
||||
bl _Thread_Dispatch
|
||||
#ifdef __thumb__
|
||||
ldr r0, = .Thread_Disp_T
|
||||
bx r0
|
||||
.pool
|
||||
.code 32
|
||||
.Thread_Disp_T:
|
||||
#endif
|
||||
|
||||
#ifdef __thumb__
|
||||
ldmia sp!, {r0-r3, lr} /*r12 not saved in thumb mode*/
|
||||
#else
|
||||
ldmia sp!, {r0-r3, r12, lr}
|
||||
#endif
|
||||
stmdb sp!, {r0-r2}
|
||||
/* Now we have to screw with the stack */
|
||||
mov r0, sp /* copy the SVC stack pointer */
|
||||
|
||||
mrs r1, cpsr
|
||||
bic r2, r1, #0x1 /* change to INT mode */
|
||||
orr r2, r2, #0xc0 /* disable interrupts */
|
||||
msr cpsr_c, r2
|
||||
|
||||
/* now in INT mode */
|
||||
stmdb sp!, {r4, r5, r6} /* save temp vars on INT stack */
|
||||
ldmia r0!, {r4, r5, r6} /* Get r0-r3 from SVC stack */
|
||||
stmdb sp!, {r4, r5, r6} /* and save them on INT stack */
|
||||
|
||||
ldmia r0!, {r4, r5} /* get saved values from SVC stack */
|
||||
/* r4=spsr, r5=lr */
|
||||
mov lr, r5 /* restore lr_int */
|
||||
msr spsr, r4 /* restore spsr_int */
|
||||
|
||||
/* switch to SVC mode, update sp, then return to INT mode */
|
||||
msr cpsr_c, r1 /* switch to SVC mode */
|
||||
mov sp, r0 /* update sp_svc */
|
||||
msr cpsr_c, r2 /* switch back to INT mode */
|
||||
|
||||
/* pop all the registers from the stack */
|
||||
ldmia sp!, {r0, r1, r2}
|
||||
ldmia sp!, {r4, r5, r6}
|
||||
|
||||
/* Finally, we can return to the interrupted task */
|
||||
subs pc, lr, #4
|
||||
|
||||
@@ -1,385 +0,0 @@
|
||||
/**
|
||||
* @file
|
||||
*
|
||||
* @brief Linker command base file for configuration with internal and external
|
||||
* RAM and optional ROM load.
|
||||
*
|
||||
* You need to add a linker command file to your board support package that
|
||||
* includes this file at the end and provides the following definitions.
|
||||
*
|
||||
* Compulsory are the memory regions RAM_INT, RAM_EXT and NIRVANA.
|
||||
* <pre>
|
||||
* MEMORY {
|
||||
* RAM_INT (AIW) : ORIGIN = 0x40000000, LENGTH = 64k
|
||||
* RAM_EXT (AIW) : ORIGIN = 0xa0000000, LENGTH = 32M
|
||||
* NIRVANA : ORIGIN = 0, LENGTH = 0
|
||||
* }
|
||||
* </pre>
|
||||
*
|
||||
* You may optionally provide ROM start and size values.
|
||||
* <pre>
|
||||
* bsp_rom_start = 0x80000000;
|
||||
* bsp_rom_size = 0x01000000;
|
||||
* </pre>
|
||||
*
|
||||
* Optionally you can enable the load to ROM. It is enabled then
|
||||
* bsp_enable_rom_load is defined. The value is arbitrary.
|
||||
* <pre>
|
||||
* bsp_enable_rom_load = 1;
|
||||
* </pre>
|
||||
*
|
||||
* Include the linker command base file. This file has to be installed in the
|
||||
* same directory than your linker command file.
|
||||
* <pre>
|
||||
* INCLUDE linkcmds.base
|
||||
* </pre>
|
||||
*
|
||||
* You may define optionally values for the following sizes:
|
||||
* - bsp_ram_int_size
|
||||
* - bsp_ram_ext_size
|
||||
* - bsp_stack_abt_size
|
||||
* - bsp_stack_fiq_size
|
||||
* - bsp_stack_irq_size
|
||||
* - bsp_stack_svc_size
|
||||
* - bsp_stack_undef_size
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2008
|
||||
* Embedded Brains GmbH
|
||||
* Obere Lagerstr. 30
|
||||
* D-82178 Puchheim
|
||||
* Germany
|
||||
* rtems@embedded-brains.de
|
||||
*
|
||||
* The license and distribution terms for this file may be found in the file
|
||||
* LICENSE in this distribution or at http://www.rtems.com/license/LICENSE.
|
||||
*/
|
||||
|
||||
OUTPUT_FORMAT ("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
|
||||
|
||||
OUTPUT_ARCH (arm)
|
||||
|
||||
ENTRY (start)
|
||||
|
||||
/*
|
||||
* BSP: Symbols that may be defined externally. The minimum alignment
|
||||
* requirement for regions is bsp_section_align.
|
||||
*/
|
||||
bsp_ram_int_size = DEFINED (bsp_ram_int_size) ? bsp_ram_int_size : LENGTH (RAM_INT);
|
||||
|
||||
bsp_ram_ext_size = DEFINED (bsp_ram_ext_size) ? bsp_ram_ext_size : LENGTH (RAM_EXT);
|
||||
|
||||
bsp_rom_start = DEFINED (bsp_rom_start) ? bsp_rom_start : 0;
|
||||
|
||||
bsp_rom_size = DEFINED (bsp_rom_size) ? bsp_rom_size : 0;
|
||||
|
||||
bsp_ram_ext_load_start = DEFINED (bsp_enable_rom_load) ? bsp_rom_start : bsp_ram_ext_start;
|
||||
|
||||
bsp_stack_abt_size = DEFINED (bsp_stack_abt_size) ? bsp_stack_abt_size : 128;
|
||||
|
||||
bsp_stack_fiq_size = DEFINED (bsp_stack_fiq_size) ? bsp_stack_fiq_size : 128;
|
||||
|
||||
bsp_stack_irq_size = DEFINED (bsp_stack_irq_size) ? bsp_stack_irq_size : 256;
|
||||
|
||||
bsp_stack_svc_size = DEFINED (bsp_stack_svc_size) ? bsp_stack_svc_size : 256;
|
||||
|
||||
bsp_stack_undef_size = DEFINED (bsp_stack_undef_size) ? bsp_stack_undef_size : 128;
|
||||
|
||||
/*
|
||||
* BSP: Global symbols
|
||||
*/
|
||||
bsp_ram_int_start = ORIGIN (RAM_INT);
|
||||
bsp_ram_int_end = bsp_ram_int_start + bsp_ram_int_size;
|
||||
|
||||
bsp_ram_ext_start = ORIGIN (RAM_EXT);
|
||||
bsp_ram_ext_end = bsp_ram_ext_start + bsp_ram_ext_size;
|
||||
|
||||
bsp_rom_end = bsp_rom_start + bsp_rom_size;
|
||||
|
||||
bsp_section_align = 16;
|
||||
|
||||
bsp_stack_align = 16;
|
||||
|
||||
SECTIONS {
|
||||
.vector : {
|
||||
/*
|
||||
* BSP: Start of vector section
|
||||
*/
|
||||
bsp_section_vector_start = .;
|
||||
|
||||
/*
|
||||
* BSP: Reserve space for the the exception vector table and
|
||||
* the pointers to the default exceptions handlers.
|
||||
*/
|
||||
. = . + 64;
|
||||
|
||||
. = ALIGN (bsp_section_align);
|
||||
|
||||
/*
|
||||
* BSP: End of vector section
|
||||
*/
|
||||
bsp_section_vector_end = .;
|
||||
} > RAM_INT
|
||||
|
||||
bsp_section_vector_size = bsp_section_vector_end - bsp_section_vector_start;
|
||||
|
||||
.text : {
|
||||
/*
|
||||
* BSP: Start of text section
|
||||
*/
|
||||
bsp_section_text_start = .;
|
||||
|
||||
/*
|
||||
* BSP: System startup entry
|
||||
*/
|
||||
KEEP (*(.entry))
|
||||
|
||||
/*
|
||||
* BSP: Moved into .text from .init
|
||||
*/
|
||||
KEEP (*(.init))
|
||||
|
||||
*(.text .stub .text.* .gnu.linkonce.t.*)
|
||||
KEEP (*(.text.*personality*))
|
||||
/* .gnu.warning sections are handled specially by elf32.em. */
|
||||
*(.gnu.warning)
|
||||
|
||||
/*
|
||||
* BSP: Magic ARM stuff
|
||||
*/
|
||||
*(.ARM.*)
|
||||
*(.glue_7)
|
||||
*(.glue_7t)
|
||||
*(.vfp11_veneer)
|
||||
|
||||
/*
|
||||
* BSP: Special FreeBSD sysctl sections
|
||||
*/
|
||||
. = ALIGN (16);
|
||||
__start_set_sysctl_set = .;
|
||||
*(set_sysctl_*);
|
||||
__stop_set_sysctl_set = ABSOLUTE(.);
|
||||
*(set_domain_*);
|
||||
*(set_pseudo_*);
|
||||
|
||||
/*
|
||||
* BSP: Moved into .text from .*
|
||||
*/
|
||||
*(.rodata .rodata.* .gnu.linkonce.r.*)
|
||||
*(.rodata1)
|
||||
*(.eh_frame_hdr)
|
||||
|
||||
/*
|
||||
* BSP: Required by cpukit/score/src/threadhandler.c
|
||||
*/
|
||||
PROVIDE (_fini = .);
|
||||
|
||||
/*
|
||||
* BSP: Moved into .text from .fini
|
||||
*/
|
||||
KEEP (*(.fini))
|
||||
|
||||
. = ALIGN (bsp_section_align);
|
||||
|
||||
/*
|
||||
* BSP: End of text section
|
||||
*/
|
||||
bsp_section_text_end = .;
|
||||
} > ROM_INT
|
||||
|
||||
bsp_section_text_size = bsp_section_text_end - bsp_section_text_start;
|
||||
|
||||
.data : AT (bsp_section_text_end) {
|
||||
/*
|
||||
* BSP: Start of data section
|
||||
*/
|
||||
bsp_section_data_start = .;
|
||||
|
||||
/*
|
||||
* BSP: Moved into .data from .ctors
|
||||
*/
|
||||
/* gcc uses crtbegin.o to find the start of
|
||||
the constructors, so we make sure it is
|
||||
first. Because this is a wildcard, it
|
||||
doesn't matter if the user does not
|
||||
actually link against crtbegin.o; the
|
||||
linker won't look for a file to match a
|
||||
wildcard. The wildcard also means that it
|
||||
doesn't matter which directory crtbegin.o
|
||||
is in. */
|
||||
KEEP (*crtbegin.o(.ctors))
|
||||
KEEP (*crtbegin?.o(.ctors))
|
||||
/* We don't want to include the .ctor section from
|
||||
the crtend.o file until after the sorted ctors.
|
||||
The .ctor section from the crtend file contains the
|
||||
end of ctors marker and it must be last */
|
||||
KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
|
||||
KEEP (*(SORT(.ctors.*)))
|
||||
KEEP (*(.ctors))
|
||||
|
||||
/*
|
||||
* BSP: Moved into .data from .dtors
|
||||
*/
|
||||
KEEP (*crtbegin.o(.dtors))
|
||||
KEEP (*crtbegin?.o(.dtors))
|
||||
KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
|
||||
KEEP (*(SORT(.dtors.*)))
|
||||
KEEP (*(.dtors))
|
||||
|
||||
/*
|
||||
* BSP: Moved into .data from .*
|
||||
*/
|
||||
*(.data1)
|
||||
KEEP (*(.eh_frame))
|
||||
*(.gcc_except_table .gcc_except_table.*)
|
||||
KEEP (*(.jcr))
|
||||
|
||||
*(.data .data.* .gnu.linkonce.d.*)
|
||||
KEEP (*(.gnu.linkonce.d.*personality*))
|
||||
SORT(CONSTRUCTORS)
|
||||
|
||||
. = ALIGN (bsp_section_align);
|
||||
|
||||
/*
|
||||
* BSP: End of data section
|
||||
*/
|
||||
bsp_section_data_end = .;
|
||||
} > RAM_EXT
|
||||
|
||||
bsp_section_data_size = bsp_section_data_end - bsp_section_data_start;
|
||||
|
||||
.bss : {
|
||||
/*
|
||||
* BSP: Start of bss section
|
||||
*/
|
||||
bsp_section_bss_start = .;
|
||||
|
||||
*(COMMON)
|
||||
*(.dynbss)
|
||||
*(.bss .bss.* .gnu.linkonce.b.*)
|
||||
|
||||
. = ALIGN (bsp_section_align);
|
||||
|
||||
/*
|
||||
* BSP: End of bss section
|
||||
*/
|
||||
bsp_section_bss_end = .;
|
||||
} > RAM_EXT
|
||||
|
||||
bsp_section_bss_size = bsp_section_bss_end - bsp_section_bss_start;
|
||||
|
||||
.stack : {
|
||||
/*
|
||||
* BSP: Start of stack section
|
||||
*/
|
||||
bsp_section_stack_start = .;
|
||||
|
||||
. = ALIGN (bsp_stack_align);
|
||||
bsp_stack_abt_start = .;
|
||||
. = . + bsp_stack_abt_size;
|
||||
|
||||
. = ALIGN (bsp_stack_align);
|
||||
bsp_stack_fiq_start = .;
|
||||
. = . + bsp_stack_fiq_size;
|
||||
|
||||
. = ALIGN (bsp_stack_align);
|
||||
bsp_stack_irq_start = .;
|
||||
. = . + bsp_stack_irq_size;
|
||||
|
||||
. = ALIGN (bsp_stack_align);
|
||||
bsp_stack_svc_start = .;
|
||||
. = . + bsp_stack_svc_size;
|
||||
|
||||
. = ALIGN (bsp_stack_align);
|
||||
bsp_stack_undef_start = .;
|
||||
. = . + bsp_stack_undef_size;
|
||||
|
||||
. = ALIGN (bsp_section_align);
|
||||
|
||||
/*
|
||||
* BSP: End of stack section
|
||||
*/
|
||||
bsp_section_stack_end = .;
|
||||
} > RAM_INT
|
||||
|
||||
bsp_section_stack_size = bsp_section_stack_end - bsp_section_stack_start;
|
||||
|
||||
.work_area : {
|
||||
/*
|
||||
* BSP: Start of work area. The work area will occupy the remaining
|
||||
* RAM_EXT region and contains the RTEMS work space and heap. We cannot
|
||||
* assign the region end directly since this leads to a region full
|
||||
* warning.
|
||||
*/
|
||||
bsp_section_work_area_start = .;
|
||||
|
||||
. = bsp_ram_ext_end - 4;
|
||||
|
||||
. = ALIGN (bsp_section_align);
|
||||
|
||||
/*
|
||||
* BSP: End of work area
|
||||
*/
|
||||
bsp_section_work_area_end = .;
|
||||
} > RAM_EXT
|
||||
|
||||
bsp_section_work_area_size = bsp_section_work_area_end - bsp_section_work_area_start;
|
||||
|
||||
/*
|
||||
* BSP: External symbols (FIXME)
|
||||
*/
|
||||
RamBase = bsp_ram_ext_start;
|
||||
RamSize = bsp_ram_ext_size;
|
||||
WorkAreaBase = bsp_section_work_area_start;
|
||||
HeapSize = 0;
|
||||
|
||||
/* Stabs debugging sections. */
|
||||
.stab 0 : { *(.stab) }
|
||||
.stabstr 0 : { *(.stabstr) }
|
||||
.stab.excl 0 : { *(.stab.excl) }
|
||||
.stab.exclstr 0 : { *(.stab.exclstr) }
|
||||
.stab.index 0 : { *(.stab.index) }
|
||||
.stab.indexstr 0 : { *(.stab.indexstr) }
|
||||
.comment 0 : { *(.comment) }
|
||||
/* DWARF debug sections.
|
||||
Symbols in the DWARF debugging sections are relative to the beginning
|
||||
of the section so we begin them at 0. */
|
||||
/* DWARF 1 */
|
||||
.debug 0 : { *(.debug) }
|
||||
.line 0 : { *(.line) }
|
||||
/* GNU DWARF 1 extensions */
|
||||
.debug_srcinfo 0 : { *(.debug_srcinfo) }
|
||||
.debug_sfnames 0 : { *(.debug_sfnames) }
|
||||
/* DWARF 1.1 and DWARF 2 */
|
||||
.debug_aranges 0 : { *(.debug_aranges) }
|
||||
.debug_pubnames 0 : { *(.debug_pubnames) }
|
||||
/* DWARF 2 */
|
||||
.debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
|
||||
.debug_abbrev 0 : { *(.debug_abbrev) }
|
||||
.debug_line 0 : { *(.debug_line) }
|
||||
.debug_frame 0 : { *(.debug_frame) }
|
||||
.debug_str 0 : { *(.debug_str) }
|
||||
.debug_loc 0 : { *(.debug_loc) }
|
||||
.debug_macinfo 0 : { *(.debug_macinfo) }
|
||||
/* SGI/MIPS DWARF 2 extensions */
|
||||
.debug_weaknames 0 : { *(.debug_weaknames) }
|
||||
.debug_funcnames 0 : { *(.debug_funcnames) }
|
||||
.debug_typenames 0 : { *(.debug_typenames) }
|
||||
.debug_varnames 0 : { *(.debug_varnames) }
|
||||
/* DWARF 3 */
|
||||
.debug_pubtypes 0 : { *(.debug_pubtypes) }
|
||||
.debug_ranges 0 : { *(.debug_ranges) }
|
||||
.gnu.attributes 0 : { KEEP (*(.gnu.attributes)) }
|
||||
|
||||
/DISCARD/ : {
|
||||
*(.note.GNU-stack) *(.gnu_debuglink)
|
||||
}
|
||||
|
||||
/*
|
||||
* BSP: Catch all unknown sections
|
||||
*/
|
||||
.nirvana : {
|
||||
*(*)
|
||||
} > NIRVANA
|
||||
}
|
||||
Reference in New Issue
Block a user