<br />  Hi,<br /><br /> in the linux initialization, inside setup_arch, I see 
ld_mmu_srmmu() (I'm working on SPARC architecture, SRMMU is Sparc Reference 
MMU)<br /><br />      and it comprises many macro calls starting with 
BTFIXUP... The first two lines look like this.<br /><br />       <br /><br />   
        BTFIXUPSET_SIMM13(pgdir_shift, SRMMU_PGDIR_SHIFT); // ___ss_pgdir_shift 
 <-- "first line"<br /><br />           BTFIXUPSET_SETHI(pgdir_size, 
SRMMU_PGDIR_SIZE); // ___hs_pgdir_size<br /><br /> ...<br /><br />  <br /><br 
/>   The macro in the first line BTFIXUPSET_SIMM13 is expanded to <br /><br />  
     #define BTFIXUPSET_SIMM13(__name, __val)                                   
             \<br /><br />           do {                                       
                                     \<br /><br />                   
___ss_##__name[0] |= 1;                                                 \<br 
/><br />                   ___ss_##__name[1] = (unsigned)__val;                 
                   \<br /><br />           } while (0)<br /><br />  <br /><br 
/>   So the first line just becomes<br /><br />      ___ss_pgdir_shift[0] |= 
1;<br /><br />  ___ss_pgdir_shift[1] = (unsigned)SRMMU_PGDIR_SHIFT;<br /><br /> 
 <br /><br />    <br /><br />   If I look up __ss_pgdir_shift, it is found in 
arch/sparc/boot/btfix.S,<br /><br />       <br /><br />   <br />          
___ss_pgdir_shift:<br />        <br />                  .word 
0x73000000,0,68<br />     <br />                  .word   
_stext+0x000148c8,0,_stext+0x00014c94,0,_stext+0x00015348,0,_stext+0x00016310,0,_stext+0x000163c8,0,_stext+0x00016fb4,0,_stext+0x00017508,0,_stext+0x0007c31c,0,_stext+0x0007c9b0,0,_stext+0x0007da94,0,_stext+0x0007e310,0,_stext+0x0007edbc,0,_stext+0x0007f058,0,_stext+0x0007f234,0,_stext+0x0007f950,0,_stext+0x0007fbb4,0,_stext+0x00080408,0,_stext+0x00084540,0,_stext+0x00084c30,0,_stext+0x00085a60,0,_stext+0x00086598,0,_stext+0x00087b40,0,_stext+0x00087ce4,0,_stext+0x00088c54,0,_stext+0x00089f58,0,_stext+0x0008d748,0,_stext+0x003d08f4,0,__init_begin+0x0000659c,0,__init_begin+0x00007ac8,0,__init_begin+0x00008088,0,__init_begin+0x00008360,0,__init_begin+0x00008720,0,__init_begin+0x00008908,0,__init_begin+0x00008bf8,0<br
 /> <br />           <br /><br /><br />     I think this assembly code was 
built before the compilation of ld_mmu_srmmu. (this BTFIXUP thing sounds like 
related to what is called pre-link, I saw it on the web) and This ld_mmu_srmmu 
function seems like to setup functions and values into specific sparc 
sub-architectures. <br /><br />       (replacing genearal things with more 
specific things)<br /><br />        <br /><br />   So the first line is setting 
bit 0 of 0x73000000 and writing SRMMU_PGIDR_SHIFT (=2^24) to the next word. and 
there is a number 68 and it is followed by 68 words. I can see it looks like 
setting up a page directory table with certain length.  But how has this 
assembly been built during pre-link? Is there any good reference? How are this 
values and functions used? I mean in what manner? Could somebody give me and 
idea how it's used later?<br /><br />    Sorry for hasty questions.<br /><br /> 
 Best regards,<br /><br />       Chan<br /><br />         <br />
_______________________________________________
Kernelnewbies mailing list
[email protected]
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies

Reply via email to