[okl4-developer] OKL4 2.1: Original version of'arch/arm/pistachio/cpu/arm926ejs/include/cache.h' is not compilable

Geoffrey Lee glee at ok-labs.com
Thu Jul 10 17:16:02 EST 2008


On Wed, Jul 09, 2008 at 06:59:44PM +0200, Frank Kaiser wrote:
> Hello, Folks

Hi Frank

> 
>  
> 
> It turned out that the below mentioned statement
>              'static const word_t CACHE_LINE_MASK = (CACHE_LINE_SIZE -
> 1)'
> is not only superfluous, but is fatal to the build. It creates a number
> of loader errors of the sort:
> 
> arm-linux-ld: sam/pistachio/bin/kernel: warning: allocated section
> `.text' not in segment
> 
> arm-linux-ld: sam/pistachio/bin/kernel: warning: allocated section
> `.glue_7' not in segment
> 
> arm-linux-ld: sam/pistachio/bin/kernel: warning: allocated section
> `.glue_7t' not in segment
> 
> ...
> 
> I can only guess that this has something to do with the fact that the
> statement creates a code allocation in any source files which includes
> 'cache.h'. Commenting the statement out heals the problem.
> 


Thanks for letting us know and keeping us updated on your latest
progress.  Your reports are greatly appreciated.

 
>  
> 
> Regards
> 
> Frank

	-gl

> 
> From: developer-bounces at okl4.org [mailto:developer-bounces at okl4.org] On
> Behalf Of Frank Kaiser
> Sent: Wednesday, July 09, 2008 4:31 PM
> To: developer at okl4.org
> Subject: [okl4-developer] OKL4 2.1: Original version
> of'arch/arm/pistachio/cpu/arm926ejs/include/cache.h' is not compilable
> 
>  
> 
> Hello
> 
>  
> 
> When I started my platform development, I drew the okl4_2.1.tar.gz
> tarball from http://wiki.ok-labs.com/FrontPage?action=AttachFile.
> Unzipping it, for some reason, I did not get out the core specific
> include files 'cache.h', 'cpu.h' and 'syscon.h' located at
> 'arch/arm/pistachio/cpu/arm926ejs/include/'. Since there is no example
> platform in the tarball using the ARM926EJ-S core, I thought they were
> left out intentionally, and I created my own ones by combining the
> XSCALE and ARM920T variants with ARM926EJ-S variants from OKL4 1.4.9. It
> just did not occur to me that the unzip went wrong.
> 
> Meanwhile a colleague also used the mentioned tarball and put it in our
> SVN repository. Recently I began to integrate my new platform code into
> the SVN repository and discovered the missing header file. Comparing
> them with my own creation showed that I have some insignificant
> differences with 'cpu.h' and 'syscon.h', but a significant difference in
> the referenced header files with 'cache.h'.
> 
> Here the include statements of the original:
> 
> #include <debug.h>
> 
> #include <cpu/syscon.h>
> 
> #include <cache.h>
> 
> #include <plat/platform.h> /* Get cache size */
> 
> Here the include statements of my private version:
> 
>              #include <kernel/debug.h>
> 
> #include <kernel/arch/asm.h>
> 
> #include <kernel/cpu/syscon.h>
> 
> Another difference is that the original version contains the definition 
>              'static const word_t CACHE_LINE_MASK = (CACHE_LINE_SIZE -
> 1)' 
> which does not exist in my private version, and I do not see that
> CACHE_LINE_MASK is anywhere referenced.
> 
> My private version compiles w/o a flaw, but the original one files for
> the first compiled source file (asid.cc) with the following multiple
> error:
> 
> sam/pistachio/include/kernel/cpu/cache.h: In static member function
> `static void arm_cache::cache_flush_i()':
> 
> sam/pistachio/include/kernel/cpu/cache.h:150: error: expected `)' before
> "_"
> 
> sam/pistachio/include/kernel/cpu/cache.h:148: warning: unused variable
> 'zero'
> 
> The relevant code lines are:
> 
>         __asm__ __volatile__ (
> 
>              "  mcr     p15, 0, "_(zero)", c7, c5, 0    ;"      /* Flush
> I cache */
> 
> #if defined(__GNUC__)
> 
>             :: [zero] "r" (zero)
> 
> #endif
> 
> The problem is that '_()' is a preprocessor macro defined in
> 'kernel/arch/asm.h' which the original file misses.
> 
> I made the addition to the original file by following its include path
> scheme:
> 
> #include <debug.h>
> 
> #include <arch/asm.h>
> 
> #include <cpu/syscon.h>
> 
> #include <cache.h>
> 
> #include <plat/platform.h> /* Get cache size */
> 
> Surprisingly this correction does not work. I get most of the files of
> the PISTACHIO kernel compiled until it comes to the platform specific
> ones. With 'platform/at91/pistachio/src/interrupt.cc' the error
> reappears, and additionally the compiler claims that it does not find
> the header files 'debug.h', 'arch/asm.h', 'cpu/syscon.h', 'cache.h' and
> 'plat/platform.h', the 5 ones included by
> '.../arm926ejs/include/cache.h'. Something must we wrong the the include
> paths seen by the compiler, and a view in the log shows the difference.
> 
> When compiling, for instance 'asid.cc', the include paths are ('sam' is
> the build directory):
> 
> -Isam/pistachio/include 
> 
> -Isam/pistachio/object/pistachio/include 
> 
> -Ipistachio/include 
> 
> -Iarch/arm/pistachio/v5/include
> 
> However, for 'interrupt.cc' the include paths are:
> 
> -Isam/pistachio/include 
> 
> -Isam/pistachio/object/pistachio/src 
> 
> -Ipistachio/src
> 
> Both files share only the first include paths of both list. Checking
> this location shows that 'asm.h' is found at
> 'sam/pistachio/include/kernel/arch'. That explains why my private
> version of 'cache.h' finds it. But when compiling 'asid.cc' the original
> version finds it too, and that is thru the second include path
> 'sam/pistachio/object/pistachio/include' under which copy of the arch
> directory exists. It looks as if there is a mix-up of include paths
> versus header file copies in the build directory. The question is:
> 
> *       Why are there different include paths for the pistachio kernel
> source files and for the platform-dependent source files?
> 
> *       Why are there two copies of the architectural-, cpu-, kdb- and
> platform-specific header files, one set in
> '<build_dir>/pistachio/include/kernel' and one set in
> '<build_dir>/pistachio/object/pistachio/include'?
> 
> Although the copies are created by SCONS, it is confusing regarding the
> correct set-up of #include directives in the source file. If I had to
> write my platform source files totally from scratch, I'd have had a hard
> time with this. Actually I made a test compilation with an existing
> platform to figure out how the build directory looks like after a
> successful build.
> 
>  
> 
> Regards
> 
> Frank
> 

> _______________________________________________
> Developer mailing list
> Developer at okl4.org
> https://lists.okl4.org/mailman/listinfo/developer


-- 




More information about the Developer mailing list