网站公告列表

  没有公告

加入收藏
设为首页
联系本站
您现在的位置: AnalogCN安诺电子 >> 文章 >> 技术交流 >> 文章正文
  uclinux-2008R1-RC8(bf561)到VDSP5的移植(42):__bad_size的问题           ★★★ 【字体:
uclinux-2008R1-RC8(bf561)到VDSP5的移植(42):__bad_size的问题
作者:快乐虾    文章来源:http://blog.csdn.net/lights_joy    点击数:    更新时间:2008-6-24    
在编译内核时,有一个链接错误:
[Error li1021] The following symbols referenced in processor 'p0' could not be resolved:
        '__bad_size [___bad_size]' referenced from 'mm.dlb[slab.doj]'
引用__bad_size函数的是:
/*
 * This function must be completely optimized away if a constant is passed to
 * it. Mostly the same as what is in linux/slab.h except it returns an index.
 */
static __always_inline int index_of(const size_t size)
{
     extern void __bad_size(void);
 
     if (__builtin_constant_p(size)) {
         int i = 0;
 
#define CACHE(x) \
     if (size <=x) \
         return i; \
     else \
         i++;
#include "linux/kmalloc_sizes.h"
#undef CACHE
         __bad_size();
     } else {
         __bad_size();
     }
     return 0;
}
但是在整个内核源代码中搜索,完全没有__bad_size函数的实现,这是怎么回事?
查一下引用这个函数的地方:
#define INDEX_AC index_of(sizeof(struct arraycache_init))
#define INDEX_L3 index_of(sizeof(struct kmem_list3))
除此以外没有其它地方用到。
我们知道sizeof(struct arraycache_init)sizeof(struct kmem_list3)是在编译时就可以确定的常数,当这两个参数传递到index_of之后,由于__builtin_constant_p的关系,它将执行if里面的内容。
把这里面的宏展开,就变成了:
     if (size <=32)
         return i;
     else
         i++;
     if (size <=64)
         return i;
     else
         i++;
     if (size <=96)
         return i;
     else
         i++;
因而,在打开GCC优化的时候,这个函数实际就变成了一个常数,最后的__bad_size或者if判断都将被优化掉!
在没有打开优化的时候,__bad_size仍将做为一个函数调用保留,此时链接必然出错!
这也是在这个函数头注释的意思!
回到VDSP5上来,我们希望用VDSP5来调试内核,因此自然不可能打开优化,况且VDSP5也不支持__builtin_constant_p。因此直接修改这两个宏定义:
#define INDEX_AC 0 //index_of(sizeof(struct arraycache_init))
#define INDEX_L3 1 //index_of(sizeof(struct kmem_list3))
文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    前置放大器在移动医疗服务系
    便携式多通道大容量生理信号
    防腐监测仪的设计与应用
    基于AD1674的酶标仪的设计
    基于C/S模式的JRTPLIB库的测
    ffmpeg与jrtplib相结合应用
    blackfin模拟摄像头驱动中的
    可编程逻辑在数字信号处理系
    发现VDSP4.5一个BUG:单步调
    VDSP5.0双核工程下sml3中的变
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    版权所有:AnalogCN安诺电子 湘ICP备06016315号