[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: RFC: Remove BSP_Configuration



Ralf Corsepius wrote:
On Thu, 2005-10-20 at 10:26 -0400, gregory.menke@gsfc.nasa.gov wrote:

"Joel Sherrill <joel@OARcorp.com>" <joel.sherrill@OARcorp.com> writes:
> > Hi,
> > While teaching the class last week, it occurred to me that an RTEMS
> application has 2 copies of the Configuration Table and a separate > pointer to it in the executive proper. Maybe this can be simplified.
> So I want some feedback.
> > Currently:
> > + confdefs.h generated a structure named "Configuration"
> + shared BSP code copies that to BSP_Configuration
> + RTEMS proper does not know the variable name Configuration
> or BSP_Configuration, so it takes a pointer in as an
> argument to rtems_initialize_executive_early and saves
> that address in a global pointer variable.
> > My proposal would be to:
> > (1) Eliminate BSP_Configuration entirely. Do not copy
> the generated Configuration to BSP_Configuration and
> modified Cofniguration as required in the BSP.


We have found BSP_Configuration to be useful at runtime, having a
well-defined struct to pull footprint info out of is nicer than defining
symbols in the linker script.

We haven't had a use of CPU_Configuration however.

The copying stuff related to these structs does seem a little clumsy,
but maybe its required or at least useful for other reasons.

IIRC, this had been used to separate "initial ROM-based configurations" from "actual runtime-configurations".

And to let RAM downloaded images be restarted. We didn't know how to have a 2nd copy of the .data when in a.out/coff back in the dark ages. That's where it started. Now I think this is easy to handle.


But isn't this now what this type of trick now accomplishes:

  /* initialized data section
     ld will load this at __text_end in the output file,
     but will actually locate it in ram.  By doing a
     memcpy( &_data_start, &_text_end, (&_data_end - &_data_start);
     during startup, we initialize our nonzero globals . */
  .init : AT (__text_end)
  {
    __data_start = .;
    *(.data)
    __data_end = .;
  } > ram


I think it would simplify things. But I am concerned that it is requiring the Configuration Tables to have a fixed name. At one level it doesn't bother me at all. But at another, I worry that I am missing something.

--joel