| 
 
| table.h 文件中有: /* tables.h
 * Linker table helper macros.
 * NetWatch system management mode administration console
 *
 * Copyright 2009, Google Inc.
 * All rights reserved.
 *...........
 */
 typedef void (*thunk_t)(void);
 typedef struct {
 thunk_t f;
 const char * name;
 } initializer_t;
 
 #define TABLE(typ, name) \
 const volatile typ name##_table[0] __attribute__((section(".table." #name ))); \
 const volatile typ name##_table_end[0] __attribute__((section(".table." #name ".END")));
 
 #define TABLE_LENGTH(name)    (name##_table_end - name##_table)
 
 在main.c  中调用( aa,bb均己定义的函数名 )
 TABLE(initializer_t, aa);
 TABLE(initializer_t, bb);
 
 for (i = 0; i < TABLE_LENGTH(aa); i++) {
 outputf("- %s()", aa_table[i].name);
 aa_table[i].f();
 }
 for (i = 0; i < TABLE_LENGTH(bb); i++) {
 outputf("- %s()", bb_table[i].name);
 bb_table[i].f();
 }
 这是从一个开源软件(基于GCC编译的)上看到的. 搞不明白,name##_table[0]中的name能像字符串那样用参数直接替代?
 问题好二:在链接文件里section字段下面有(lds):
 _table_start = .;
 *(SORT(.table.*));
 _table_end = .;
 *(SORT(.table.*));这名的意思是将table下的东西排序吗? 原理是什么?
 有朋友接触过这些吗.
 | 
 |