Linux/compile.hÍ·Îļþ˵Ã÷

·¢±íÓÚ£º2010-5-25 10:15

×ÖÌ壺´ó ÖРС | ÉÏһƪ | ÏÂһƪ | ÎÒҪͶ¸å

 ×÷ÕߣºÎ´Öª    À´Ô´£º51TestingÈí¼þ²âÊÔÍø²É±à

·ÖÏí£º

¡¡¡¡²»¹ýÎÒÔÚÏÖÔڵĴúÂëÀïûÓз¢ÏÖÓÐʹÓÃ__safeÕâ¸ö¶¨ÒåµÄµØ·½£¬²»ÖªµÀÊDz»ÊDZàÒëÆ÷ÏÖÔÚÒѾ­Ö§³ÖÕâÖÖÌØÊâµÄÇé¿öÁË£¬ËùÒԾͲ»ÓÃÔÙ¼ÓÕâÑùµÄ´úÂëÁË¡£

# define __force __attribute__((force))

¡¡¡¡±íʾËù¶¨ÒåµÄ±äÁ¿ÀàÐÍÊÇ¿ÉÒÔ×öÇ¿ÖÆÀàÐÍת»»µÄ£¬ÔÚ½øÐÐSparse·ÖÎöµÄʱºò£¬ÊDz»Óñ¨¸æ¾¯ÐÅÏ¢µÄ¡£

# define __nocast __attribute__((nocast))

¡¡¡¡ÕâÀï±íʾÕâ¸ö±äÁ¿µÄ²ÎÊýÀàÐÍÓëʵ¼Ê²ÎÊýÀàÐÍÒ»¶¨µÃ¶ÔµÃÉϲÅÐУ¬Òª²»¾ÍÔÚSparseµÄʱºòÉú²ú¸æ¾¯ÐÅÏ¢¡£

# define __iomem __attribute__((noderef, address_space(2)))

¡¡¡¡Õâ¸ö¶¨ÒåÓë__user, __userÊÇÒ»ÑùµÄ£¬Ö»²»¹ýÕâÀïµÄ±äÁ¿µØÖ·ÊÇÐèÒªÔÚÉ豸µØÖ·Ó³Éä¿Õ¼äµÄ¡£

# define __acquires(x) __attribute__((context(x,0,1)))
# define __releases(x) __attribute__((context(x,1,0)))

¡¡¡¡ÕâÊÇÒ»¶ÔÏ໥¹ØÁªµÄº¯Êý¶¨Ò壬µÚÒ»¾ä±íʾ²ÎÊýxÔÚÖ´ÐÐ֮ǰ£¬ÒýÓüÆÊý±ØÐëΪ0£¬Ö´Ðкó£¬ÒýÓüÆÊý±ØÐëΪ1£¬µÚ¶þ¾äÔòÕýºÃÏà·´£¬Õâ¸ö¶¨ÒåÊÇÓÃÔÚÐÞÊκ¯Êý¶¨ÒåµÄ±äÁ¿µÄ¡£

# define __acquire(x) __context__(x,1)
# define __release(x) __context__(x,-1)

¡¡¡¡ÕâÊÇÒ»¶ÔÏ໥¹ØÁªµÄº¯Êý¶¨Ò壬µÚÒ»¾ä±íʾҪÔö¼Ó±äÁ¿xµÄ¼ÆÊý£¬Ôö¼ÓÁ¿Îª1£¬µÚ¶þ¾äÔòÕýºÃÏà·´£¬Õâ¸öÊÇÓÃÀ´º¯ÊýÖ´ÐеĹý³ÌÖС£

¡¡¡¡ÒÔÉÏËľäÈç¹ûÔÚ´úÂëÖгöÏÖÁ˲»Æ½ºâµÄ×´¿ö£¬ÄÇôÔÚSparseµÄ¼ì²âÖоͻᱨ¾¯¡£µ±È»£¬SparseµÄ¼ì²âÖ»ÊÇÒ»¸öÊֶΣ¬¶øÇÒÊǾ²Ì¬¼ì²é´úÂëµÄÊÖ ¶Î£¬ËùÒÔËüµÄ°ïÖúÓÐÏÞ£¬ÓпÉÄÜ°ÑÕýÈ·µÄÈÏΪÊÇ´íÎóµÄ¶ø·¢³ö¸æ¾¯¡£ÒªÊǶÔÒÔÉÏËľäµÄÒâ˼»¹ÊDz»Ì«Á˽âµÄ»°£¬ÇëÔÚÔ´´úÂëÀïËÑÒ»ÏÂÏà¹Ø·ûºÅµÄÓ÷¨¾ÍÄÜÖªµÀÁË¡£Õâ µÚÒ»×éÓëµÚ¶þ×飬ÔÚ±¾ÖÊÉÏ£¬ÊÇûʲôÇø±ðµÄ£¬Ö»ÊÇʹÓõÄλÖÃÉÏ£¬ÓÐËùÇø±ð°ÕÁË¡£

# define __cond_lock(x,c) ((c) ? ({ __acquire(x); 1; }) : 0)

¡¡¡¡Õâ¾ä»°µÄÒâ˼¾ÍÊÇÌõ¼þËø¡£µ±cÕâ¸öÖµ²»Îª0ʱ£¬ÔòÈüÆÊýÖµ¼Ó1£¬²¢·µ»ØֵΪ1¡£²»¹ýÕâÀïÎÒÓÐÒ»¸öÒÉÎÊ£¬¾ÍÊÇÔÚÕâÀÓÐÒ»¸ö__cond_lock¶¨ Ò壬µ«Ã»Óж¨ÒåÏàÓ¦µÄ__cond_unlock£¬ÄÇôÔÚ±äÁ¿µÄÊÍ·ÅÉÏ£¬¾Íû°ì·¨×öµ½Ò»Ö¡£¶øÇÒÎÒ²éÁËһϹØÓÚspin_trylock()Õâ¸öº¯ÊýµÄ¶¨ Ò壬Ëü¾ÍÓÃÁË__cond_lock£¬¶øÇÒÀïÃæÓÖÓÃÁË_spin_trylockº¯Êý£¬ÔÚ_spin_trylockº¯ÊýÀÔÙ¾­¹ý¼¸´Îµ÷Ó㬾ͻáʹÓõ½ __acquireº¯Êý£¬ÕâÑùµÄ»°£¬Ï൱ÓÚÒ»¸ö²Ù×÷£¬¾Í½øÐÐÁËÁ½´Î¼ÆË㣬»áµ¼ÖÂSparseµÄ¼ì²â³öÏָ澯ÐÅÏ¢£¬¾­¹ýÎÒд´úÂë½øÐÐʵÑ飬ÑéÖ¤ÁËÎÒµÄÅжϣ¬ ȷʵÊÇ»á³öÏָ澯ÐÅÏ¢£¬Èç¹ûÎÒдÁ½±éunlockÖ¸Á¾ÍûÓи澯ÐÅÏ¢ÁË£¬µ«ÕâÊÇÓë³ÌÐòµÄÔËÐÐÊDz»Ò»Öµġ£

extern void __chk_user_ptr(const volatile void __user *);
extern void __chk_io_ptr(const volatile void __iomem *);

¡¡¡¡ÕâÁ½¾ä±È½ÏÓÐÒâ˼¡£ÕâÀïÖ»ÊǶ¨ÒåÁ˺¯Êý£¬µ«ÊÇ´úÂëÀïûÓк¯ÊýµÄʵÏÖ¡£ÕâÑù×öµÄÄ¿µÄ£¬¾ÍÊÇÔÚ½øÐÐSparseµÄʱºò£¬ÈÃSparse¸ø´úÂë×ö±ØÒªµÄ²ÎÊýÀàÐͼì²é£¬ÔÚʵ¼ÊµÄ±àÒë¹ý³ÌÖУ¬²¢²»ÐèÒªÕâÁ½¸öº¯ÊýµÄʵÏÖ¡£

#define notrace __attribute__((no_instrument_function))

¡¡¡¡ÕâÒ»¾ä£¬ÊǶ¨ÒåÁËÒ»¸öÊôÐÔ£¬Õâ¸öÊôÐÔ¿ÉÒÔÓÃÀ´ÐÞÊÎÒ»¸öº¯Êý£¬Ö¸¶¨Õâ¸öº¯Êý²»±»¸ú×Ù¡£ÄÇôÕâ¸öÊôÐÔµ½µ×ÊÇÔõô»Ø×ÓÊÂÄØ£¿Ô­À´£¬ÔÚgcc±àÒëÆ÷ÀïÃ棬ʵ ÏÖÁËÒ»¸ö·Ç³£Ç¿´óµÄ¹¦ÄÜ£¬Èç¹ûÔÚ±àÒëµÄʱºò°ÑÒ»¸öÏàÓ¦µÄÑ¡ÔñÏî´ò¿ª£¬ÄÇô¾Í¿ÉÒÔÔÚÖ´ÐÐÍê³ÌÐòµÄʱºò£¬ÓÃһЩ¹¤¾ßÀ´ÏÔʾÕû¸öº¯Êý±»µ÷ÓõĹý³Ì£¬ÕâÑù¾Í²»ÐèÒª ÈóÌÐòÔ±ÊÖ¶¯ÔÚËùÓеĺ¯ÊýÀïÒ»µãµãÌí¼ÓÄÜÏÔʾº¯Êý±»µ÷Óùý³ÌµÄÓï¾ä£¬ÕâÑùºÄʱºÄÁ¦£¬»¹ÈÝÒ׳ö´í¡£ÄÇô¶ÔÓ¦ÔÚÓ¦ÓóÌÐò·½Ã棬¿ÉÒÔʹÓÃGraphvizÕâ¸ö¹¤ ¾ßÀ´½øÐÐÏÔʾ£¬ÖÁÓÚʹÓÃ˵Ã÷ÓëÈí¼þʵÏÖµÄÔ­Àí¿ÉÒÔ×Ô¼ºÔÚÍøÉϲéÒ»²é£¬ºÜÈÝÒײ鵽¡£¶ÔÓ¦ÓÚÄںˣ¬ÒòΪÄÚºËÒ»Ö±ÊÇÔÚÔËÐн׶Σ¬ËùÒԾͲ»ÄÜʹÓÃÕâÌ׶«Î÷ÁË£¬ÄÚºË ÊÇÔÚ×Ô¼ºµÄÄÚ²¿ÊµÏÖÁËÒ»¸öftraceµÄ»úÖÆ£¬±àÒëÄں˵Äʱºò£¬Èç¹û´ò¿ªÕâ¸öÑ¡ÏÄÇôͨ¹ý¹ÒÔØÒ»¸ödebugfsµÄÎļþϵͳÀ´½øÐÐÏàÓ¦ÄÚÈݵÄÏÔʾ£¬¾ßÌå µÄ²Ù×÷²½Ö裬¿ÉÒԲο´ÄÚºËÔ´ÂëËù´øµÄÎĵµ¡£ÄÇÉÏÃæ˵ÁËÕâô¶à£¬ÓënotraceÕâ¸öÊôÐÔÓÐʲô¹ØϵÄØ£¿ÒòΪÔÚ½øÐк¯Êýµ÷ÓÃÁ÷³ÌµÄÏÔʾ¹ý³ÌÖУ¬ÊÇʹÓÃÁËÁ½¸ö ÌØÊâµÄº¯ÊýµÄ£¬µ±º¯Êý±»µ÷ÓÃÓ뺯Êý±»Ö´ÐÐÍê·µ»Ø֮ǰ£¬¶¼»á·Ö±ðµ÷ÓÃÕâÁ½¸öÌرðµÄº¯Êý¡£Èç¹û²»°ÑÕâÁ½¸öº¯ÊýµÄº¯ÊýÖ¸¶¨Îª²»±»¸ú×ÙµÄÊôÐÔ£¬ÄÇôÕû¸ö¸ú×ٵĹý³Ì ¾Í»áÏÝÈëÒ»¸öÎÞÏÞÑ­»·µ±ÖС£

32/3<123>
¼ÛÖµ398ÔªµÄ²âÊԿγÌÃâ·ÑÔùËÍ£¬ÌîÎʾíÁìÈ¡°É£¡

¹Ø×¢51Testing

ÁªÏµÎÒÃÇ

¿ì½ÝÃæ°å Õ¾µãµØͼ ÁªÏµÎÒÃÇ ¹ã¸æ·þÎñ ¹ØÓÚÎÒÃÇ Õ¾³¤Í³¼Æ

·¨ÂɹËÎÊ£ºÉϺ£äîϪÂÉʦÊÂÎñËù ÏîÆåÂÉʦ
°æȨËùÓÐ ÉϺ£²©Îª·åÈí¼þ¼¼Êõ¹É·ÝÓÐÏÞ¹«Ë¾ Copyright©51testing.com 2003-2022
ͶËß¼°Òâ¼û·´À¡£ºwebmaster@51testing.com; ÒµÎñÁªÏµ£ºservice@51testing.com 021-64471599-8017

»¦ICP±¸05003035ºÅ

»¦¹«Íø°²±¸ 31010102002173ºÅ