This is the mail archive of the ecos-discuss@sourceware.org mailing list for the eCos 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: Problems building ecos sources


> [dfernandez@software RB]$ ecosconfig new pc_i82559 redboot U
> CYGSEM_HAL_USE_ROM_MONITOR, new inferred value 0
> U CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK, new inferred value 0
> [dfernandez@software RB]$ ecosconfig
> import /opt/ecos/packages/hal/i386/pc/cu..rrent/misc/redboot_FLOPPY_SMP.ecm
> ...change prefix to i586-elf...
> [dfernandez@software RB]$ ecosconfig check
> Target: pc_i82559
> Template: redboot
> Added:
>  CYGPKG_IO_ETH_DRIVERS
> No conflicts
> [dfernandez@software RB]$ ecosconfig tree
> [dfernandez@software RB]$ make
> ...
> make[1]: Leaving directory
> `/home/dfernandez/Projects/eCos/RB/infra/current'
> make -r -C redboot/current build
> make[1]: Entering directory
> `/home/dfernandez/Projects/eCos/RB/redboot/current'
> i586-elf-gcc -c  -I/home/dfernandez/Projects/eCos/RB/install/include
> -I/opt/ecos/packages/redboot/current
> -I/opt/ecos/packages/redboot/current/src
> -I/opt/ecos/packages/redboot/current/tests -I.
> -I/opt/ecos/packages/redboot/current/src/ -finline-limit=7000 -Wall
> -Wpointer-arith -Wstrict-prototypes -Winline -Wundef  -g -O2
> -ffunction-sections -fdata-sections  -fno-exceptions
> -Wp,-MD,src/main.tmp -o
> src/redboot_main.o /opt/ecos/packages/redboot/current/src/main.c
> /opt/ecos/packages/redboot/current/src/main.c: In function ???cyg_start???:
> /opt/ecos/packages/redboot/current/src/main.c:397: error: invalid lvalue
> in assignment
> /opt/ecos/packages/redboot/current/src/main.c: In function ???do_go???:
> /opt/ecos/packages/redboot/current/src/main.c:597: error: invalid lvalue
> in assignment
> make[1]: *** [src/main.o.d] Error 1
> make[1]: Leaving directory
> `/home/dfernandez/Projects/eCos/RB/redboot/current'
> make: *** [build] Error 2
> 
> 	May be that there's something wrong with this ecos version?

I'm guessing you have a very new gcc. gcc has slowly been becoming
more strict about lvalues, ie the left hand side of an assignment. For
quite a while casts on the left hand side have caused warnings. I'm
guessing the gcc folks have gone a stage further and turned something
else into an error. My gcc 4.0.4 compiles this part of the code fine,
but gives warnings in other places. 

The problem we have is that the lines with errors are actually
macros. And the macros are quite big:

It is defined in cyg/hal/hal_arch.h

#define HAL_THREAD_INIT_CONTEXT( _sparg_, _thread_, _entry_, _id_ )     \
CYG_MACRO_START                                                         \
    register CYG_WORD* _sp_ = ((CYG_WORD*)((_sparg_) &~15));            \
    register CYG_WORD *_fpspace_ = NULL;                                \
    register HAL_SavedRegisters *_regs_;                                \
                                                                        \
    HAL_THREAD_INIT_FPU_CONTEXT_SPACE( _sp_, _fpspace_ );               \
    *(--_sp_) = (CYG_WORD)(0);                                          \
    *(--_sp_) = (CYG_WORD)(0);                                          \
    *(--_sp_) = (CYG_WORD)(_thread_);                                   \
    *(--_sp_) = (CYG_WORD)(0);                                          \
                                                                        \
    _regs_ = (HAL_SavedRegisters *)                                     \
               ((unsigned long)_sp_ - sizeof(HAL_SavedRegisters));      \
    HAL_THREAD_INIT_FPU_CONTEXT( _regs_, _fpspace_ );                   \
    _regs_->eflags = (CYG_WORD)(0x00000200);                            \
    _regs_->cs     = (CYG_WORD)(CYG_HAL_DEFAULT_CS);                    \
    _regs_->pc     = (CYG_WORD)(_entry_);                               \
    _regs_->vector = (CYG_WORD)(_id_);                                  \
    _regs_->esp    = (CYG_WORD) _sp_-4;                                 \
    _regs_->ebp    = (CYG_WORD)(_id_);                                  \
    _regs_->esi    = (CYG_WORD)(_id_);                                  \
    _regs_->edi    = (CYG_WORD)(_id_);                                  \
    _regs_->eax    = (CYG_WORD)(_id_);                                  \
    _regs_->ebx    = (CYG_WORD)(_id_);                                  \
    _regs_->ecx    = (CYG_WORD)(_id_);                                  \
    _regs_->edx    = (CYG_WORD)(_id_);                                  \
    (_sparg_)      = (CYG_ADDRESS) _regs_;                              \
CYG_MACRO_END

Could you try to work out which specific line is causing problems.
Comment half of the macro out and see if it compiles. The binary chop
depending on if it compiles or does not compile...

I would also be interested in knowing what version of gcc you have.

        Thanks
                Andrew



-- 
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss


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