[ECOS] Virtual Vector Table.

Nick Garnett nickg@cygnus.co.uk
Tue Oct 10 03:30:00 GMT 2000


Gary Thomas <gthomas@redhat.com> writes:

> On 09-Oct-2000 Fabrice Gautier wrote:
> > Hi,
> > 
> > Where should I put the virtual vector table be for the i386/PC platform? 
> > 
> > I've seen it in vectors.S for the arm arch (actually in the .fixed_vectors
> > section).
> > It seems the same for the v85x arch. But I've found also the following for
> > the ceb_v850 platform, in plf_sections.h:  PROVIDE(_hal_virtual_vector_table
> > = 0x00FC0300);
> > For the mips/vrc4373, mn10300/stb and mn10300/stdeval1 platforms, my grep
> > only found extern declaration and I can not guess where the virtual vector
> > table really lies.
> 
> It's really up to you where it goes.  The table has to be defined by the
> stubs (aka RedBoot) and will be imported into eCos applications.  Bottom line
> is that it needs to end up at a well known, fixed, address.
> 
> I think that the ARM approach is probably the most general if you can
> make it work for the PC environment.


Basically the VSR table and the virtual vector table must be in well
known fixed memory addresses that can be found by both RedBoot and the
loaded executable. They must also be in places that will not be
overwritten by anything that might be loaded into memory. Ususally
this means putting them at the bottom of RAM. I can think of three
places in the PC that they could go:

1. At the bottom of normal RAM, at 0x1000. This would mean pushing the
   load address of RedBoot/monitor up to 0x2000.

2. At the top of normal RAM, at 0x9F000. This has the slight
   disadvantage that a large executable might overwrite it.

3. At the bottom of extended memory, at 0x100000.

Of these option 1 is probably the best. So something like: VSR table at
0x1000 and vector table at 0x1400.

-- 
Nick Garnett, eCos Kernel Architect
Red Hat, Cambridge, UK


More information about the Ecos-discuss mailing list