This is the mail archive of the crossgcc@sources.redhat.com mailing list for the crossgcc project.
See the CrossGCC FAQ for lots more information.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
Ciao David,
thanx for your help... I'd probably better to expalin why and what I'm
tryin' to do:
my target is a PowerPc based board and the cross environment is running on
Cygwin.
My software HAS to start from 0x10000 but the vector table on a PPC has to
reside at lower addresses (starting from 0x0); in particular at 0x100
resides the system reset ISR and at 0x500 the external interrupt handler
so...
when I run at 0x10000 I want to buid the exception table. I created a custom
section .vtable and I want to copy its contents; the assembler instructions
are handled correctly, my problems arises when calliing c routines.
here's part of my linker script:
-----------
MEMORY
{
sram (rw) : org = 0x0, len = 16M
flash (rx) : org = 0x4000000, len = 8M
}
SECTIONS
{
....
.vtable : AT(ADDR(.text)+SIZEOF(.text))
{
_vtstart = .;
*(.vtable)
_vtend = .;
} > sram
...
}
_VT_SIZE = SIZEOF(.vtable);
-------------
this is how I copy the vector table and jump to 0x100:
.globl _makevt
.ORG 0x0
_makevt:
addis r3, 0, _vtstart@h
ori r3, r3, _vtstart@l
/* Destination */
li r4,0x0
addis r5, 0, _VT_SIZE@h
ori r5, r5, _VT_SIZE@l
add r7, r3, r5
cont:
lwzx r5, 0, r3
stwx r5, 0, r4
lwzx r8, 0, r4
cmp 0, 0, r8, r5
addi r4, r4, 4
addi r3, r3, 4
cmp 0, 0, r3, r7
ble cont
/* Set PC */
lis r4, 0x0
ori r4, r4, 0x100
mtlr r4
blr
----------------------------------
and here's the custom section:
.section .vtable, "ax"
.org 0x100 /* System Reset - 1st instruction after hw power-on reset. */
addis 11, 0 , __SP_INIT@h # Initialize stack pointer r1 to
addi 1, 11, __SP_INIT@l # value in linker command file.
addis 13, 0, _SDA_BASE_@h # Initialize r13 to sdata base
addi 13, 13, _SDA_BASE_@l # (provided by linker).
addis 2, 0, _SDA2_BASE_@h # Initialize r2 to sdata2 base
addi 2, 2, _SDA2_BASE_@l # (provided by linker).
addi 0, 0, 0 # Clear r0.
bl __init_main
.org 0x200
bl isr_dummy200
.org 0x300
bl isr_dummy300
.org 0x400
bl isr_dummy400
.....
Thanx for your time,
Davide
Regards
Davide
--------------. ,-. SS Padana Sup. km 158
Davide Viti \ ,---------------' \ I-20060 Cassina de' Pecchi MI
Siemens ICM/N `--' `--------------------------------
--------------. ,-. SS Padana Sup. km 158
Davide Viti \ ,---------------' \ I-20060 Cassina de' Pecchi MI
Siemens ICM/N `--' `--------------------------------
------
Want more information? See the CrossGCC FAQ, http://www.objsw.com/CrossGCC/
Want to unsubscribe? Send a note to crossgcc-unsubscribe@sources.redhat.com
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |