Re: PAGE_ALIGN() compile breakage

Adrian Bunk
2008-07-25T09:28:23Z

On Fri, Jul 25, 2008 at 12:14:55PM +0300, Adrian Bunk wrote:
> On Fri, Jul 25, 2008 at 01:55:37AM -0700, Andrew Morton wrote:
>...
> > pls test:
> >
> > diff -puN include/linux/sched.h~a include/linux/sched.h
> > --- a/include/linux/sched.h~a
> > +++ a/include/linux/sched.h
> > @@ -2139,16 +2139,7 @@ static inline void set_task_cpu(struct t
> >
> > #endif /* CONFIG_SMP */
> >
> > -#ifdef HAVE_ARCH_PICK_MMAP_LAYOUT
> > extern void arch_pick_mmap_layout(struct mm_struct *mm);
> > -#else
> > -static inline void arch_pick_mmap_layout(struct mm_struct *mm)
> > -{
> > - mm->mmap_base = TASK_UNMAPPED_BASE;
> > - mm->get_unmapped_area = arch_get_unmapped_area;
> > - mm->unmap_area = arch_unmap_area;
> > -}
> > -#endif
> >
> > #ifdef CONFIG_TRACING
> > extern void
> > diff -puN mm/mmap.c~a mm/mmap.c
> > --- a/mm/mmap.c~a
> > +++ a/mm/mmap.c
> > @@ -2268,3 +2268,12 @@ int install_special_mapping(struct mm_st
> >
> > return 0;
> > }
> > +
> > +#ifndef HAVE_ARCH_PICK_MMAP_LAYOUT
> > +void arch_pick_mmap_layout(struct mm_struct *mm)
> > +{
> > + mm->mmap_base = TASK_UNMAPPED_BASE;
> > + mm->get_unmapped_area = arch_get_unmapped_area;
> > + mm->unmap_area = arch_unmap_area;
> > +}
> > +#endif
>
> Nice, this seems to fix the problem.
>...

Further testing revealed that you should choose a file that also gets
compiled on MMU-less architectures:

<-- snip -->

...
LD vmlinux
fs/built-in.o: In function `flush_old_exec':
(.text+0x6ae8): undefined reference to `arch_pick_mmap_layout'
fs/built-in.o: In function `flush_old_exec':
(.text+0x6cf0): undefined reference to `arch_pick_mmap_layout'
make[1]: *** [vmlinux] Error 1

<-- snip -->

cu
Adrian

--

"Is there not promise of rain?" Ling Tan asked suddenly out
of the darkness. There had been need of rain for many days.
"Only a promise," Lao Er said.
Pearl S. Buck - Dragon Seed