how BTFIXUP_CALL is used..

Chan Kim ckim at etri.re.kr
Sun Apr 27 02:22:03 EDT 2014


Hi,
It's raining Suday afternoon in Korea where many people are in grief for the loss of their family members from the ferry accident last week.
We have those victims and families in our thoughts and prayers..
Anyway, I have a question..
In file mm/memory.c (linux 3.3), in funrcion __pmd_alloc, I see a line below.
        pmd_t *new = pmd_alloc_one(mm, address);

pmd_alloc_one is defined as below.
        #define pmd_alloc_one(mm, address)      BTFIXUP_CALL(pmd_alloc_one)(mm, address)

if I apply the BTFIXUP_CALL macro, (#define BTFIXUP_CALL(__name) ___f_##__name)
it just becomes ___f_pmd_alloc_one which is defined in file arch/sparc/boot/btfix.S below.
        -----------
        ...
                .global ___btfixup_end
        ___btfixup_end:

        ! Define undefined references
                .global ___f_flush_sig_insns
        ___f_flush_sig_insns:
        ...
                .global ___f_pmd_alloc_one
        ___f_pmd_alloc_one:
        ...
        ---------------
which makes me think ___f_pmd_alloc_one is just an adress shared by many ___f_... functions.
And I couldn't find ___f_pmd_alloc_one anywhere else. (no definition..)
But actually, as I guessed, the pmd_alloc_one function is actually srmmu_pmd_alloc_one function.
How is this done? I only know BTFIXUP.. thing is adjusting the functions for the correct subarchitecture but I can't understand how this is done. 
Could anyboy tell me how this is done? or any good reference?
Thanks,
Chan


More information about the Kernelnewbies mailing list