linux-libc-headers: include/asm-arm26/page.h, include/asm-ia64/pag...

Jakub Bogusz qboosh w pld-linux.org
Nie, 29 Sie 2004, 19:29:53 CEST


On Sun, Aug 29, 2004 at 05:45:29PM +0200, Paweł Sikora wrote:
> On Sunday 29 of August 2004 17:30, Jakub Bogusz wrote:
> > On Sun, Aug 29, 2004 at 05:11:47PM +0200, Mariusz Mazur wrote:
> > > On niedziela 29 sierpień 2004 16:44, Jakub Bogusz wrote:
> > > > > -#define PAGE_SIZE  (1UL << PAGE_SHIFT)
> > > > > +extern int getpagesize(void);
> > > > > +#define PAGE_SIZE ((unsigned long)getpagesize())
> > > > > +#define PAGE_SHIFT ((unsigned
> > > > > long[]){12,13,14,-1,15,-1,-1,-1,16}[PAGE_SIZE>>13]) #define
> > > > > PAGE_MASK  (~(PAGE_SIZE-1))
> > > >
> > > > Wersja z ?: trochę brzydziej wyglądała, ale chyba jej wolałbym użyć...
> > > > przynajmniej sensownie by zareagowała na zwrócenie nieoczekiwanej
> > > > wartości przez getpagesize() - bo to powyższe... można się domyślić.
> > >
> > > Nie można, bo się ni w ząb nie znam na operacjach bitowych w C :)
> > > Chooociaż. Chyba rozszyfrowałem co to za spaghetti makro. Jak rozumiem
> > > chodzi ci o wersją, jaką ten człek posłał oryginalnie, a to co jest
> > > powyżej działa tylko poprawnie dla jakiś określonych PAGE_SIZEów?
> >
> > To może lepiej tak (coś pośredniego):
> >
> > #define PAGE_SHIFT ((PAGE_SIZE > 65536) ? -1 : ((unsigned
> > long[]){12,13,14,-1,15,-1,-1,-1,16}[PAGE_SIZE>>13]))
> 
> przecież przy -1 też będą kwiatki,

No będą, ale przynajmniej deterministyczne.

> bo kompilator co najwyżej
> puści `warning: left/right shift count is negative' i skompiluje kod.

Zawsze skompiluje, bo to się odnosi tylko do przypadku (architektur),
gdzie PAGE_SIZE nie jest znane na etapie kompilacji. getpagesize() to
funkcja libc.


-- 
Jakub Bogusz    http://cyber.cs.net.pl/~qboosh/




Więcej informacji o liście dyskusyjnej pld-devel-pl