ZHCUAV7Z september 1995 – march 2023 66AK2E05 , 66AK2H06 , 66AK2H12 , 66AK2H14 , AM1705 , AM1707 , AM1802 , AM1806 , AM1808 , AM1810 , AM5K2E04 , OMAP-L132 , OMAP-L137 , OMAP-L138 , SM470R1B1M-HT , TMS470R1A288 , TMS470R1A384 , TMS470R1A64 , TMS470R1B1M , TMS470R1B512 , TMS470R1B768
要使用由链接器生成的复制表,用户必须知道复制表的内容。此信息包含在一个运行时支持库头文件 cpy_tbl.h 中。该文件包含由链接器生成的复制表数据结构的 C 源代码表示。ARM cpy_tbl.h 文件展示了该复制表头文件。
/*****************************************************************************/
/* cpy_tbl.h v##### */
/* 2003 米6体育平台手机版_好二三四 版权所有 */
/* */
/* 可由链接器自动生成的复制表数据结构的规范 */
/* (使用 LCF 中的 table() 运算符)。 */
/*****************************************************************************/
#ifndef _CPY_TBL
#define _CPY_TBL
#ifdef __cplusplus
extern "C" namespace std {
#endif /* __cplusplus */
/*****************************************************************************/
/* 复制记录数据结构 */
/*****************************************************************************/
typedef struct copy_record
{
unsigned int load_addr;
unsigned int run_addr;
unsigned int size;
} COPY_RECORD;
/*****************************************************************************/
/* 复制表数据结构 */
/*****************************************************************************/
typedef struct copy_table
{
unsigned short rec_size;
unsigned short num_recs;
COPY_RECORD recs[1];
} COPY_TABLE;
/*****************************************************************************/
/* 通用复制例程原型。 */
/*****************************************************************************/
extern void copy_in(COPY_TABLE *tp);
#ifdef __cplusplus
} /* extern "C" namespace std */
#ifndef _CPP_STYLE_HEADER
using std::COPY_RECORD;
using std::COPY_TABLE;
using std::copy_in;
#endif /* _CPP_STYLE_HEADER */
#endif /* __cplusplus */
#endif /* !_CPY_TBL */
对于已标记要进行复制的每个对象组件,链接器会为其创建一个 COPY_RECORD 对象。每个 COPY_RECORD 至少包含对象组件的以下信息:
链接器会将与同一复制表关联的所有 COPY_RECORD 收集到一个 COPY_TABLE 对象中。COPY_TABLE 对象包含给定 COPY_RECORD 的大小、表中 COPY_RECORD 的数量以及表中 COPY_RECORD 的数组。例如,在节 8.8.4.2的 BINIT 示例中,各输出段 .first 和 .extra 将在 BINIT 复制表中拥有各自的 COPY_RECORD 条目。BINIT 复制表将如下所示:
COPY_TABLE __binit__ = { 12, 2,
{ <load address of .first>,
<run address of .first>,
<size of .first> },
{ <load address of .extra>,
<run address of .extra>,
<size of .extra> } };