Messages in this thread | | | Date | Wed, 2 Jan 2008 12:49:56 +0100 | From | Sam Ravnborg <> | Subject | Re: macro _set_base - "do - while(0)" question |
| |
On Wed, Jan 02, 2008 at 12:45:39PM +0100, Abdel wrote: > Hi, > > In file include/asm-i386/system.h, _set_base and _set_limit use an > useless do ... while(0) > > Why is this needed ? > > exemple with _set_base from linux-2.6.23 > > #define _set_base(addr,base) do { unsigned long __pr; \ > __asm__ __volatile__ ("movw %%dx,%1\n\t" \ > "rorl $16,%%edx\n\t" \ > "movb %%dl,%2\n\t" \ > "movb %%dh,%3" \ > :"=&d" (__pr) \ > :"m" (*((addr)+2)), \ > "m" (*((addr)+4)), \ > "m" (*((addr)+7)), \ > "0" (base) \ > ); } while(0) > Without the do {} while (0)
then 1) you could not define the variable __pr 2) You would be fooled when you did:
if (foo != bar) set_base(addr,base);
Sam
| |