Yes, in fact the whole point of uniarch is to eliminate MCU-specific
information from binutils and gcc.  That's gone quite well, and it is an
external specs-file approach that allows the relevant information to be
propagated to the different toolchain phases. This introduces a new package,
msp430mcu, which combines the specs file translations for known chips, the
headers from Texas Instruments, and the linker scripts.  Updating to new
devices can be done in emergency cases by editing those files, and more
generally by simply installing a new msp430mcu release without touching
binutils or gcc.

(That space issue you noted that is avoided by using a spec function to do
the translation from the mcu token provided into a preprocessor symbol, so
we can maintain compatibility with the TI headers.)

And I was successful in supporting the legacy genericized MCU names by
associating each one with a specific MCU to which it is considered
equivalent.  So things like -mmcu=msp430x1611 will still end up supporting
the MSP430F1611.

I will be making a valiant effort over the next week to rebase the uniarch
work on gcc 4.5.2 and push the relevant updates to the git repositories now
hosted on the mspgcc project.

Peter

On Sat, Feb 5, 2011 at 4:55 AM, Peter Jansen <[email protected]> wrote:

> Hi Peter,
>
> When doing this, could we try and remove some of the occurrences of all
> these
> part numbers from gcc/binutils/libc?
>
> One thing I look at some time ago was to make some changes
> gcc/config/msp430/msp430.h with the SPECS to make it more generic, like
> change
> LINK_SPEC to
>
> #define LINK_SPEC "\
> %{!mmcu*:-m msp430x110} \
> %{mmcu=msp1:-m msp430x110} \
> %{mmcu=msp2:-m msp430x147} \
> %{mmcu=msp3:-m msp430xG4616} \
> %{mmcu=msp4:-m msp430x4783} \
> %{mmcu=msp5:-m msp430x47166} \
> %{mmcu=msp6:-m msp430x5418} \
> %{mmcu=msp430x*:-m msp430x%* } \
> %{mmcu=cc430x*:-m cc430x%* }"
>
> Being a bit more adventurous, which also need changes to msp430-libc, but
> change
>
> CPP_SPEC to
>
> #define CPP_SPEC "\
> %{!mmcu*|mmcu=msp1:%(cpp_msp1)} \
> %{mmcu=msp2:%(cpp_msp2)} \
> %{mmcu=msp3:%(cpp_msp3)} \
> %{mmcu=msp4:%(cpp_msp4)} \
> %{mmcu=msp5:%(cpp_msp5)} \
> %{mmcu=msp6:%(cpp_msp6)} \
> %{mmcu=msp430*:-D__MSP430%*} \
>
> etc, this means changing the __MSP430F149__ to MSP430F149 (without the __
> on the
>
> end, using %*__ in a spec substitution causes a space to be added :-( )
>
> Another change that could be made which affects msp430-libc also, would be
> to
> only build gcrt0.S for msp1/msp2/.../msp6 and re-arrange how
> CRT_BINUTILS_SPECS
> is built, this would mean a new crtmsp430xxxxxxx would not have to be build
> for
> every device.
>
> This might enable adding new parts to gcc may not require any changes, just
> changes to msp430-libc and binutils for the new linker scripts
>
> I can make some patches for this if you like.
>
> Regards,
>
> Peter Jansen
>
> (Sorry missed sending to the mailing list the first time).
>
>
> ----- Original Message ----
> > From: Peter Bigot <[email protected]>
> > To: GCC for MSP430 - http://mspgcc.sf.net <
> [email protected]>
> > Sent: Wed, 22 December, 2010 10:25:59 AM
> > Subject: [Mspgcc-users] Notice of elimination of genericized mcu names in
> >uniarch
> >
> > Traditionally, mspgcc has accepted genericized MCU part numbers, with an
>  "x"
> > substituted for the section of the part that denotes the chip memory
>  type.
> > E.g. -mmcu=msp430x1611 for the MSP430F1611.  See the breakdown of  how
> MSP430
> > part numbers are
> >constructed.<
> http://mspgcc4.git.sourceforge.net/git/gitweb.cgi?p=mspgcc4/msp430-libc;a=blob;f=pn-decode.txt;h=bee4afbd76934f88371971f8d89c55081fea0f9f;hb=ti
> >
> >>
> >
> > Of  the 270 distinct MSP430 MCUs in the latest list provided to me, 98
> cannot
> > be  genericized in this way because the genericization is ambiguous.
> For
> > example, the MSP430F2131 and MSP430G2131 differ in RAM and ROM size  and
> > offsets.  The MSP430F423 has hardware multiply support, while  the
> > MSP430FE423 and MSP430F423A do not.  The MSP430F1111 has  information
> > sections, while the MSP430C1111 does not.
> >
> > TI provides 61  legacy header files which can be shared for multiple
> chips.
> > For example, the  msp430x16x.h would work for MSP430F1610 MSP430F1611
> > MSP430F1612 MSP430F167  MSP430F168 and MSP430F169--however, those chips
> still
> > have different address  maps, so a generic msp430x16x fails to provide
> enough
> > information to allow an  application to be linked.
> >
> > Attempting to detect when it is safe to  recognize a generic name, and
> what
> > prototypical MCU to map it to, is the road  to insanity.  TI advises that
> new
> > projects should not use the legacy  headers.
> >
> > Here's the point: The uniarch updates to mspgcc will no longer  support
> > genericized mcu names.
> >
> > Under the current plan, you will have  your choice:
> >
> >    - Specify a recognized part, e.g.  -mmcu=msp430f1611
> >    - Specify one of two special-case generic parts,  -mmcu=msp430generic
> or
> >    -mmcu=msp430xgeneric, and only build  relocatable object files (not
> >    applications)
> >    - Skip the  -mmcu option, get whatever happens by default, and don't
> >    attempt to  reference device registers or constants
> >
> > Whatever you put as the -mmcu  parameter to gcc will automatically be
> defined
> > as a preprocessor macro, after  conversion to upper case and
> encapsulation in
> > double-underscores: e.g., using  -mmcu=msp430f1611 will cause
> __MSP430F1611__
> > to be defined and available for  conditional processing.
> >
> > Consequently, certain defines like  __MSP430_1611__ which are really
> > alternative spellings of the genericized  name will no longer be
> > automatically provided by the compiler.  You can,  of course, add them
> > yourself.
> >
> > Sorry, this is going to break some  code.  It'll probably be possible to
> work
> > around this with a legacy.h  header that does some magic, but I won't get
> to
> > that in the initial releases,  and will prioritize it below things like
> > integrating 20-bit pointer support  and improving other optimizations
> unless
> > I hear a lot of really really loud  objections.
> >
> > Peter
> >
>
>
>
>
>
> ------------------------------------------------------------------------------
> The modern datacenter depends on network connectivity to access resources
> and provide services. The best practices for maximizing a physical server's
> connectivity to a physical network are well understood - see how these
> rules translate into the virtual world?
> http://p.sf.net/sfu/oracle-sfdevnlfb
> _______________________________________________
> Mspgcc-users mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/mspgcc-users
>
------------------------------------------------------------------------------
The modern datacenter depends on network connectivity to access resources
and provide services. The best practices for maximizing a physical server's
connectivity to a physical network are well understood - see how these
rules translate into the virtual world? 
http://p.sf.net/sfu/oracle-sfdevnlfb
_______________________________________________
Mspgcc-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mspgcc-users

Reply via email to