This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Need help for a net target


Michael_fogel writes:
 > Hello
 > 
 > For my diploma thesis I have to implement a new back-end for GCC.
 > The microcontroller is based on an FPGA and was developed one year ago. 
 > Only an Assembler is available and now my university lecturer wants an C 
 > compiler too. I decided to use GCC in version 4.2.1 as basis for the new 
 > compiler.
 > 
 > I started with an new target, defined the mandatory target macros and 
 > implemented the instruction patterns.
 > 
 > After i few tries i was able to compile my first file. Now I try to make 
 > the optimization working, but there is a problem i can not solve.
 > Compiling the following code with activated optimization comes up with 
 > an error message.
 > 
 > 
 > #define RAM_ADDRESS 0
 > #define SERIAL_OFFSET 800
 > 
 > void ReadSerialNumber(void) {
 >   int  SerialNumber, c;
 >   char *s;
 >    
 >   SerialNumber   =   0;                
 >   s   =   (char*)(RAM_ADDRESS + SERIAL_OFFSET);
 >   while ((c =  *s - '0') <= 9){         
 >       SerialNumber = 10*SerialNumber + c;       
 >       s++;          
 >   }
 >  
 >   // ...
 > }
 > 
 > test.c: In function 'ReadSerialNumber':
 > test.c:40: internal compiler error: in create_mem_ref, at 
 > tree-ssa-address.c:677
 > Please submit a full bug report,
 > 
 > adding an volatile
 > 
 > volatile char *s;
 > 
 > 
 > fixes it but I think the real problem is somewhere else.

Are you telling us that you have got all this way with gcc, but you
have *never* debugged it with gdb?  If so, this is the time to learn.
Run "gcc -v" to see te args passed to cc1, break out gdb, and start
debugging the ICE.

A clue:

  /* Verify that the address is in the simplest possible shape
     (only a register).  If we cannot create such a memory reference,
     something is really wrong.  */
  gcc_assert (parts.symbol == NULL_TREE);
  gcc_assert (parts.index == NULL_TREE);
  gcc_assert (!parts.step || integer_onep (parts.step));
  gcc_assert (!parts.offset || integer_zerop (parts.offset));
  gcc_unreachable ();

Andrew.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]