Below comments are very old.

Aren't new glibc and binutils now able to go without this ?

Note that the code inside the #if 0 is wrong as we have no vma defined in the function.

Or does it just have no performance impact anyway ?


From /arch/powerpc/mm/mem.c:

void clear_user_page(void *page, unsigned long vaddr, struct page *pg)
{
        clear_page(page);

        /*
         * We shouldn't have to do this, but some versions of glibc
         * require it (ld.so assumes zero filled pages are icache clean)
         * - Anton
         */
        flush_dcache_page(pg);
}
EXPORT_SYMBOL(clear_user_page);

void copy_user_page(void *vto, void *vfrom, unsigned long vaddr,
                    struct page *pg)
{
        copy_page(vto, vfrom);

        /*
         * We should be able to use the following optimisation, however
         * there are two problems.
         * Firstly a bug in some versions of binutils meant PLT sections
         * were not marked executable.
         * Secondly the first word in the GOT section is blrl, used
         * to establish the GOT address. Until recently the GOT was
         * not marked executable.
         * - Anton
         */
#if 0
        if (!vma->vm_file && ((vma->vm_flags & VM_EXEC) == 0))
                return;
#endif

        flush_dcache_page(pg);
}

Christophe

Reply via email to