02.11.2014 Views

RealView 编译工具要点指南 - ARM Information Center

RealView 编译工具要点指南 - ARM Information Center

RealView 编译工具要点指南 - ARM Information Center

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

®<br />

<strong>RealView</strong><br />

编 译 工 具<br />

4.0 版<br />

要 点 指 南<br />

Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved.<br />

<strong>ARM</strong> DUI 0202IC


<strong>RealView</strong> 编 译 工 具<br />

要 点 指 南<br />

Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved.<br />

版 本 信 息<br />

本 手 册 进 行 了 以 下 更 改 。<br />

更 改 历 史 记 录<br />

日 期 发 行 号 保 密 性 更 改<br />

2002 年 8 月 A 非 保 密 1.2 版<br />

2003 年 1 月 B 非 保 密 2.0 版<br />

2003 年 9 月 C 非 保 密 <strong>RealView</strong> Developer Suite 2.0.1 版<br />

2004 年 1 月 D 非 保 密 <strong>RealView</strong> Developer Suite 2.1 版<br />

2004 年 12 月 E 非 保 密 <strong>RealView</strong> Developer Suite 2.2 版<br />

2005 年 5 月 F 非 保 密 <strong>RealView</strong> Developer Suite 2.2 SP1 版<br />

2006 年 3 月 G 非 保 密 <strong>RealView</strong> Development Suite 3.0 版<br />

2007 年 3 月 H 非 保 密 <strong>RealView</strong> Development Suite 3.1 版<br />

2008 年 9 月 I 非 保 密 <strong>RealView</strong> Development Suite v4.0 4.0 版<br />

所 有 权 声 明<br />

除 非 本 所 有 权 声 明 在 下 面 另 有 说 明 , 否 则 带 有 ® 或 标 记 的 词 语 和 徽 标 是 <strong>ARM</strong> Limited 在 欧 盟 和 其<br />

他 国 家 / 地 区 的 注 册 商 标 或 商 标 。 此 处 提 及 的 其 他 品 牌 和 名 称 可 能 是 其 各 自 所 有 者 的 商 标 。<br />

除 非 事 先 得 到 版 权 所 有 人 的 书 面 许 可 , 否 则 不 得 以 任 何 形 式 修 改 或 复 制 本 文 档 包 含 的 部 分 或 全 部 信<br />

息 以 及 产 品 说 明 。<br />

本 文 档 描 述 的 产 品 还 将 不 断 发 展 和 完 善 。 <strong>ARM</strong> Limited 将 如 实 提 供 本 文 档 所 述 产 品 的 所 有 特 性 及 其<br />

使 用 方 法 。 但 是 , 所 有 暗 示 或 明 示 的 担 保 , 包 括 但 不 限 于 对 特 定 用 途 适 销 性 或 适 用 性 的 担 保 , 均 不<br />

包 括 在 内 。<br />

本 文 档 的 目 的 仅 在 于 帮 助 读 者 使 用 产 品 。 对 于 因 使 用 本 文 档 中 的 任 何 信 息 、 文 档 信 息 出 现 任 何 错 误<br />

或 遗 漏 或 者 错 误 使 用 产 品 造 成 的 任 何 损 失 或 损 害 , <strong>ARM</strong> 公 司 概 不 负 责 。<br />

使 用 <strong>ARM</strong> 一 词 时 , 它 表 示 <strong>ARM</strong> 或 其 任 何 相 应 的 子 公 司 。<br />

ii Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0202IC<br />

Non-Confidential<br />

Unrestricted Access


保 密 状 态<br />

本 文 档 的 内 容 是 非 保 密 的 。 根 据 <strong>ARM</strong> 与 <strong>ARM</strong> 将 本 文 档 交 予 的 参 与 方 的 协 议 条 款 , 使 用 、 复 制 和<br />

公 开 本 文 档 内 容 的 权 利 可 能 会 受 到 许 可 限 制 的 制 约 。<br />

受 限 访 问 是 一 种 <strong>ARM</strong> 内 部 分 类 。<br />

产 品 状 态<br />

本 文 档 的 信 息 是 开 发 的 产 品 的 最 新 信 息 。<br />

网 址<br />

http://www.arm.com<br />

<strong>ARM</strong> DUI 0202IC Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. iii<br />

Unrestricted Access<br />

Non-Confidential


iv Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0202IC<br />

Non-Confidential<br />

Unrestricted Access


目 录<br />

<strong>RealView</strong> 编 译 工 具<br />

要 点 指 南<br />

前 言<br />

关 于 本 手 册 ................................................................................................... viii<br />

反 馈 ................................................................................................................ xi<br />

第 1 章<br />

第 2 章<br />

简 介<br />

1.1 关 于 <strong>RealView</strong> 编 译 工 具 ............................................................................. 1-2<br />

1.2 RVCT 使 用 的 环 境 变 量 ................................................................................ 1-6<br />

1.3 获 取 详 细 信 息 .............................................................................................. 1-7<br />

创 建 应 用 程 序<br />

2.1 使 用 <strong>ARM</strong> 编 译 工 具 .................................................................................... 2-2<br />

2.2 使 用 <strong>ARM</strong> 编 译 器 ........................................................................................ 2-3<br />

2.3 使 用 <strong>ARM</strong> 链 接 器 ........................................................................................ 2-6<br />

2.4 使 用 <strong>ARM</strong> 汇 编 器 ........................................................................................ 2-7<br />

2.5 使 用 fromelf ................................................................................................. 2-8<br />

2.6 使 用 <strong>ARM</strong> Workbench IDE .......................................................................... 2-9<br />

<strong>ARM</strong> DUI 0202IC Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. v<br />

Unrestricted Access<br />

Non-Confidential


第 3 章<br />

附 录 A<br />

RVCT v4.0 与 RVCT v3.1 之 间 的 差 异<br />

3.1 <strong>RealView</strong> 编 译 工 具 v4.0 概 述 ..................................................................... 3-2<br />

3.2 RVCT v4.0 中 文 档 的 更 改 ........................................................................... 3-3<br />

3.3 RVCT v4.0 中 <strong>ARM</strong> 编 译 器 的 改 动 .............................................................. 3-4<br />

3.4 RVCT v4.0 中 对 库 支 持 的 改 动 .................................................................... 3-6<br />

3.5 RVCT v4.0 中 <strong>ARM</strong> 链 接 器 的 改 动 .............................................................. 3-7<br />

3.6 RVCT v4.0 中 <strong>ARM</strong> 汇 编 器 的 改 动 .............................................................. 3-8<br />

3.7 RVCT v4.0 中 fromelf 实 用 程 序 的 改 动 ....................................................... 3-9<br />

3.8 RVCT v4.0 中 不 提 倡 使 用 的 功 能 ............................................................... 3-11<br />

3.9 RVCT v4.0 中 不 再 使 用 的 功 能 .................................................................. 3-12<br />

3.10 RVCT v4.0 与 旧 对 象 和 库 的 兼 容 性 ........................................................... 3-13<br />

关 于 早 期 版 本<br />

A.1 RVCT v3.1 与 RVCT v3.0 之 间 的 差 异 ........................................................ A-2<br />

A.2 RVCT v3.0 与 RVCT v2.2 之 间 的 差 异 ...................................................... A-10<br />

A.3 RVCT v2.2 SP1 和 RVCT v2.2 之 间 的 差 异 ............................................. A-19<br />

A.4 RVCT v2.2 和 RVCT 2.1 版 之 间 的 差 异 .................................................... A-21<br />

A.5 RVCT v2.1 与 RVCT v2.0 之 间 的 差 异 ...................................................... A-32<br />

A.6 RVCT v2.0 与 RVCT v1.2 之 间 的 差 异 ...................................................... A-36<br />

vi Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0202IC<br />

Non-Confidential<br />

Unrestricted Access


前 言<br />

本 前 言 介 绍 《<strong>RealView</strong> 编 译 工 具 要 点 指 南 》。 本 前 言 分 为 以 下 几 节 :<br />

• 第 viii 页 的 关 于 本 手 册<br />

• 第 xi 页 的 反 馈<br />

<strong>ARM</strong> DUI 0202IC Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. vii<br />

Unrestricted Access<br />

Non-Confidential


前 言<br />

关 于 本 手 册<br />

本 手 册 概 要 介 绍 <strong>ARM</strong> ® <strong>RealView</strong> ® 编 译 工 具 (RVCT)。<br />

适 用 对 象<br />

本 手 册 是 为 所 有 使 用 RVCT 编 写 应 用 程 序 的 开 发 者 编 写 的 。 本 手 册 假 定 您 是 一<br />

位 经 验 丰 富 的 软 件 开 发 人 员 。<br />

使 用 本 手 册<br />

本 手 册 由 以 下 章 节 和 附 录 组 成 :<br />

第 1 章 简 介<br />

本 章 简 要 介 绍 了 RVCT。 同 时 介 绍 了 RVCT 的 组 件 及 在 线 文 档 。<br />

第 2 章 创 建 应 用 程 序<br />

本 章 概 述 如 何 使 用 RVCT 创 建 应 用 程 序 。<br />

第 3 章 RVCT v4.0 与 RVCT v3.1 之 间 的 差 异<br />

本 章 介 绍 RVCT 的 最 新 版 本 和 上 一 版 本 之 间 的 差 异 。<br />

附 录 A 关 于 早 期 版 本<br />

本 附 录 介 绍 RVCT 各 早 期 版 本 之 间 的 差 异 。<br />

本 手 册 假 定 <strong>ARM</strong> 软 件 安 装 在 缺 省 位 置 。 例 如 , 在 Windows 上 , 这 可 能 是<br />

volume:\Program Files\<strong>ARM</strong>。 引 用 路 径 名 时 , 假 定 安 装 位 置 为 install_directory。 例<br />

如 , install_directory\Documentation\...。 如 果 将 <strong>ARM</strong> 软 件 安 装 在 其 他 位 置 ,<br />

则 可 能 需 要 更 改 此 位 置 。<br />

viii Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0202IC<br />

Non-Confidential<br />

Unrestricted Access


前 言<br />

印 刷 约 定<br />

本 手 册 使 用 以 下 印 刷 约 定 :<br />

斜 体<br />

粗 体<br />

monospace<br />

突 出 显 示 重 要 注 释 、 介 绍 特 殊 术 语 以 及 表 示 内 部 交 叉 引 用 和<br />

引 文 。<br />

突 出 显 示 界 面 元 素 , 如 菜 单 名 称 。 表 示 <strong>ARM</strong> 处 理 器 信 号 名<br />

称 。 必 要 时 还 用 于 说 明 列 表 中 的 术 语 。<br />

表 示 可 以 从 键 盘 输 入 的 文 本 , 如 命 令 、 文 件 和 程 序 名 以 及 源<br />

代 码 。<br />

monospace 表 示 允 许 的 命 令 或 选 项 缩 写 。 可 只 输 入 下 划 线 标 记 的 文 本 ,<br />

无 需 输 入 命 令 或 选 项 的 全 名 。<br />

monospace italic 表 示 此 处 的 命 令 和 函 数 的 变 量 可 用 特 定 值 代 替 。<br />

等 宽 粗 体 表 示 在 示 例 代 码 以 外 使 用 的 语 言 关 键 字 。<br />

更 多 参 考 出 版 物<br />

本 部 分 列 出 了 <strong>ARM</strong> 公 司 的 各 种 出 版 物 , 可 提 供 有 关 <strong>ARM</strong> 系 列 处 理 器 开 发 代 码<br />

的 其 他 信 息 。<br />

<strong>ARM</strong> 公 司 将 定 期 对 其 文 档 进 行 更 新 和 更 正 。 有 关 最 新 勘 误 表 、 附 录 和 <strong>ARM</strong> 常<br />

见 问 题 (FAQ), 请 访 问 http://infocenter.arm.com/help/index.jsp。<br />

<strong>ARM</strong> 公 司 出 版 物<br />

本 手 册 包 含 了 有 关 RVCT 的 一 般 信 息 。 该 套 件 中 包 含 的 其 他 出 版 物 有 :<br />

• 《<strong>RealView</strong> 编 译 工 具 编 译 器 用 户 指 南 》 (<strong>ARM</strong> DUI 0205)。 本 手 册 介 绍<br />

<strong>ARM</strong> 编 译 器 armcc 的 基 本 功 能 以 及 特 定 于 编 译 器 的 功 能 。 另 外 还 介 绍<br />

NEON 向 量 化 编 译 器 , 并 说 明 如 何 利 用 自 动 向 量 化 功 能 。<br />

• 《<strong>RealView</strong> 编 译 工 具 编 译 器 参 考 指 南 》 (<strong>ARM</strong> DUI 0348)。 本 手 册 提 供<br />

<strong>ARM</strong> 编 译 器 的 参 考 信 息 , 并 介 绍 命 令 行 选 项 。 另 外 还 提 供 了 有 关 如 何 在<br />

该 编 译 器 中 生 成 C 和 C++ 的 <strong>ARM</strong> 实 现 的 参 考 资 料 。<br />

• 《<strong>RealView</strong> 编 译 工 具 库 和 浮 点 支 持 指 南 》(<strong>ARM</strong> DUI 0349)。 本 手 册 介 绍 了<br />

<strong>ARM</strong> C 和 C++ 库 、 对 ISO 标 准 的 遵 循 、 自 动 调 整 与 目 标 相 关 的 函 数 以 及<br />

特 定 于 应 用 程 序 的 要 求 。 另 外 还 介 绍 了 <strong>ARM</strong> 对 浮 点 计 算 的 支 持 。<br />

<strong>ARM</strong> DUI 0202IC Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. ix<br />

Unrestricted Access<br />

Non-Confidential


前 言<br />

• 《<strong>RealView</strong> 编 译 工 具 汇 编 器 指 南 》 (<strong>ARM</strong> DUI 0204)。 本 手 册 提 供 了 有 关<br />

<strong>ARM</strong> 汇 编 器 armasm 的 参 考 和 指 导 信 息 。<br />

• 《<strong>RealView</strong> 编 译 工 具 链 接 器 用 户 指 南 》(<strong>ARM</strong> DUI 0206)。 本 手 册 提 供 有 关<br />

<strong>ARM</strong> 链 接 器 armlink 的 用 户 信 息 。 另 外 还 概 述 了 分 散 加 载 。<br />

• 《<strong>RealView</strong> 编 译 工 具 链 接 器 参 考 指 南 》(<strong>ARM</strong> DUI 0381)。 本 手 册 提 供 有 关<br />

命 令 行 选 项 和 控 制 文 件 的 参 考 信 息 。 另 外 还 介 绍 了 <strong>ARM</strong> 体 系 结 构 的 基 础<br />

平 台 ABI (BPABI) 以 及 System V 共 享 库 和 可 执 行 文 件 。<br />

• 《<strong>RealView</strong> 编 译 工 具 实 用 程 序 指 南 》 (<strong>ARM</strong> DUI 0382)。 本 手 册 提 供 有 关<br />

<strong>ARM</strong> 库 管 理 程 序 armar 和 <strong>ARM</strong> 映 像 转 换 实 用 程 序 fromelf 的 命 令 行 选 项 与<br />

可 运 行 示 例 的 信 息 。<br />

• 《<strong>RealView</strong> 编 译 工 具 开 发 指 南 》(<strong>ARM</strong> DUI 0203)。 本 手 册 提 供 有 关 编 写 以<br />

<strong>ARM</strong> 系 列 处 理 器 为 目 标 的 代 码 的 指 导 信 息 。<br />

• 《<strong>ARM</strong> Workbench IDE 用 户 指 南 》(<strong>ARM</strong> DUI 0330)。 本 手 册 介 绍 如 何 使 用<br />

集 成 开 发 环 境 (IDE) 为 <strong>ARM</strong> 目 标 配 置 和 生 成 项 目 。<br />

有 关 基 本 标 准 、 软 件 接 口 和 <strong>ARM</strong> 支 持 的 标 准 的 完 整 信 息 , 请 参 阅<br />

install_directory\Documentation\Specifications\...。<br />

此 外 , 有 关 与 <strong>ARM</strong> 产 品 相 关 的 特 定 信 息 , 请 参 阅 下 列 文 档 :<br />

• 《<strong>ARM</strong> 体 系 结 构 参 考 手 册 》 <strong>ARM</strong>v7-A 和 <strong>ARM</strong>v7-R 版 (<strong>ARM</strong> DDI 0406)<br />

• 《<strong>ARM</strong>7-M 体 系 结 构 参 考 手 册 》 (<strong>ARM</strong> DDI 0403)<br />

• 《<strong>ARM</strong>6-M 体 系 结 构 参 考 手 册 》 (<strong>ARM</strong> DDI 0419)<br />

• 《<strong>ARM</strong> 体 系 结 构 参 考 手 册 》 (<strong>ARM</strong> DDI 0100)<br />

• 您 的 硬 件 设 备 的 <strong>ARM</strong> 数 据 手 册 或 技 术 参 考 手 册<br />

x Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0202IC<br />

Non-Confidential<br />

Unrestricted Access


前 言<br />

反 馈<br />

<strong>ARM</strong> Limited 欢 迎 提 供 有 关 <strong>RealView</strong> 编 译 工 具 及 其 文 档 的 反 馈 。<br />

对 <strong>RealView</strong> 编 译 工 具 的 反 馈<br />

如 果 您 有 关 于 RVCT 的 任 何 问 题 , 请 与 您 的 供 应 商 联 系 。 为 便 于 供 应 商 快 速 提<br />

供 有 用 的 答 复 , 请 提 供 :<br />

• 您 的 姓 名 和 公 司<br />

• 产 品 序 列 号<br />

• 工 具 的 版 本 字 符 串 , 包 括 您 所 用 工 具 的 版 本 号 和 发 布 日 期 。<br />

• 您 运 行 的 平 台 的 详 细 信 息 , 如 硬 件 平 台 、 操 作 系 统 类 型 和 版 本<br />

• 能 重 现 问 题 的 一 小 段 独 立 的 程 序<br />

• 您 预 期 发 生 和 实 际 发 生 的 情 况 的 详 细 说 明<br />

• 您 使 用 的 命 令 , 包 括 所 有 命 令 行 选 项<br />

• 能 说 明 问 题 的 示 例 输 出<br />

关 于 本 手 册 的 反 馈<br />

如 果 您 发 现 本 手 册 有 任 何 错 误 或 遗 漏 之 处 , 请 发 送 电 子 邮 件 到 errata@arm.com,<br />

并 提 供 :<br />

• 文 档 标 题<br />

• 文 档 编 号<br />

• 您 要 对 其 发 表 意 见 的 页 码<br />

• 问 题 的 简 要 说 明<br />

我 们 还 欢 迎 您 对 需 要 增 加 和 改 进 之 处 提 出 建 议 。<br />

<strong>ARM</strong> DUI 0202IC Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. xi<br />

Unrestricted Access<br />

Non-Confidential


前 言<br />

xii Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0202IC<br />

Non-Confidential<br />

Unrestricted Access


第 1 章<br />

简 介<br />

本 章 介 绍 <strong>ARM</strong> ® <strong>RealView</strong> ® 编 译 工 具 (RVCT) 及 其 软 件 组 件 和 文 档 。 本 章 分 为 以<br />

下 几 节 :<br />

• 第 1-2 页 的 关 于 <strong>RealView</strong> 编 译 工 具<br />

• 第 1-6 页 的 RVCT 使 用 的 环 境 变 量<br />

• 第 1-7 页 的 获 取 详 细 信 息<br />

<strong>ARM</strong> DUI 0202IC Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 1-1<br />

Unrestricted Access<br />

Non-Confidential


简 介<br />

1.1 关 于 <strong>RealView</strong> 编 译 工 具<br />

RVCT 由 一 系 列 工 具 、 支 持 文 档 和 示 例 组 成 。 这 些 工 具 可 用 于 针 对 <strong>ARM</strong> 系 列 处<br />

理 器 编 写 和 生 成 应 用 程 序 。<br />

可 以 使 用 RVCT 来 生 成 使 用 C、 C++ 或 <strong>ARM</strong> 汇 编 语 言 编 写 的 软 件 程 序 。<br />

1.1.1 RVCT 的 组 件<br />

本 节 概 述 RVCT 组 件 。<br />

开 发 工 具<br />

以 下 开 发 工 具 随 RVCT 一 起 安 装 :<br />

armcc <strong>ARM</strong> 编 译 器 。 它 可 编 译 C 和 C++ 代 码 。<br />

armasm<br />

armlink<br />

<strong>ARM</strong> 和 Thumb ® 汇 编 器 。 该 汇 编 器 汇 编 <strong>ARM</strong> 和 Thumb 汇 编 语 言<br />

源 代 码 。<br />

<strong>ARM</strong> 链 接 器 。 它 可 将 一 个 或 多 个 对 象 文 件 的 内 容 与 一 个 或 多 个 对<br />

象 库 的 选 定 部 分 相 结 合 , 生 成 一 个 可 执 行 程 序 。<br />

Rogue Wave C++ 库<br />

Rogue Wave 库 提 供 标 准 C++ 库 的 实 现 。 有 关 Rogue Wave 库 的 详 细<br />

信 息 , 请 参 阅 CD ROM 上 的 HTML 文 档 。<br />

C++ 库 <strong>ARM</strong> C++ 库 提 供 了 :<br />

• 编 译 C++ 时 使 用 的 辅 助 函 数<br />

• Rogue Wave 库 不 支 持 的 附 加 C++ 函 数<br />

C 库<br />

C 微 型 库<br />

fromelf<br />

<strong>ARM</strong> C 库 按 照 C 和 C++ 标 准 中 的 定 义 提 供 了 库 功 能 的 实 现 。 有 关<br />

详 细 信 息 , 请 参 阅 《 库 和 浮 点 支 持 指 南 》 中 第 2-2 页 上 的 “ 关 于 C<br />

和 C++ 库 ”。<br />

<strong>ARM</strong> C 微 型 库 (Microlib) 提 供 了 高 度 优 化 的 函 数 集 。 这 些 函 数 可 用<br />

于 必 须 在 极 少 量 内 存 环 境 下 运 行 的 深 层 嵌 入 式 应 用 程 序 。 有 关 详<br />

细 信 息 , 请 参 阅 《 库 和 浮 点 支 持 指 南 》 中 的 第 3 章 “C 微 型 库 ”。<br />

<strong>ARM</strong> 映 像 转 换 实 用 程 序 。 该 实 用 程 序 也 可 生 成 有 关 输 入 映 像 ( 例<br />

如 反 汇 编 及 其 代 码 和 数 据 大 小 ) 的 文 本 信 息 。<br />

1-2 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0202IC<br />

Non-Confidential<br />

Unrestricted Access


简 介<br />

armar<br />

<strong>ARM</strong> 库 管 理 程 序 。 它 可 使 多 组 ELF 格 式 对 象 文 件 集 中 到 一 起 并 保<br />

留 在 档 案 或 库 中 。 可 将 这 样 的 库 或 档 案 传 给 链 接 器 , 以 替 代 多 个<br />

ELF 文 件 。 也 可 以 将 该 档 案 分 发 给 第 三 方 , 以 进 行 进 一 步 的 应 用 程<br />

序 开 发 。<br />

注 意<br />

<strong>RealView</strong> Development Suite (RVDS) 支 持 64 位 Linux 平 台 , 但 RVCT 的 设 计 还<br />

不 能 利 用 此 功 能 。RVCT 的 文 件 I/O 例 程 使 用 文 件 大 小 适 合 32 位 (signed) int 的<br />

标 准 系 统 调 用 。 这 意 味 着 最 大 映 像 大 小 限 制 为 2GB, 即 使 在 64 位 平 台 或 内 存 大<br />

于 2GB 的 计 算 机 上 进 行 构 建 也 是 如 此 。 如 果 超 过 这 个 大 小 , 链 接 器 将 报 告 一 条<br />

错 误 消 息 , 指 示 内 存 不 足 。 这 可 能 令 人 不 解 , 因 为 有 足 够 的 内 存 但 应 用 程 序 却<br />

无 法 访 问 。<br />

标 准 遵 从 性<br />

RVCT 符 合 以 下 标 准 。 在 每 种 情 况 中 , 都 注 明 了 遵 从 的 程 度 :<br />

ar<br />

DWARF 3<br />

DWARF 2<br />

ISO C<br />

UNIX 样 式 的 对 象 代 码 档 案 , 由 armar 生 成 , armlink 使 用 。 armar<br />

可 列 出 和 提 取 多 数 ar 格 式 的 对 象 代 码 档 案 , armlink 可 使 用 由 另 一<br />

个 档 案 实 用 程 序 创 建 的 ar 格 式 档 案 , 只 要 该 档 案 包 含 符 号 表 成 员<br />

即 可 。<br />

RVDS 中 的 所 有 工 具 都 支 持 DWARF 3 调 试 表 (DWARF 调 试 标 准<br />

第 3 版 )。<br />

RVCT 中 的 所 有 工 具 和 <strong>ARM</strong> 提 供 的 ELF DWARF 2 兼 容 调 试 器<br />

( 例 如 <strong>RealView</strong> Debugger) 都 支 持 DWARF 2 调 试 表 。<br />

<strong>ARM</strong> 编 译 器 接 受 ISO C 1990 和 1999 源 代 码 作 为 输 入 。 有 关 详 细 信<br />

息 , 请 参 阅 《 编 译 器 用 户 指 南 》 中 的 源 语 言 模 式 。<br />

ISO C++ <strong>ARM</strong> 编 译 器 接 受 ISO C++ 2003 源 代 码 作 为 输 入 。<br />

ELF<br />

<strong>ARM</strong> 工 具 可 生 成 ELF 格 式 的 可 重 定 位 的 和 可 执 行 的 文 件 。 fromelf<br />

实 用 程 序 可 将 ELF 文 件 转 换 为 其 他 格 式 。<br />

注 意<br />

DWARF 2 和 DWARF 3 标 准 在 某 些 地 方 不 明 确 , 例 如 调 试 帧 数 据 。 这 意 味 着 无<br />

法 保 证 第 三 方 调 试 器 能 够 使 用 <strong>ARM</strong> 代 码 生 成 工 具 所 生 成 的 DWARF, 也 无 法 保<br />

证 <strong>RealView</strong> Debugger 能 够 使 用 第 三 方 工 具 所 生 成 的 DWARF。<br />

<strong>ARM</strong> DUI 0202IC Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 1-3<br />

Unrestricted Access<br />

Non-Confidential


简 介<br />

符 合 <strong>ARM</strong> 体 系 结 构 的 ABI ( 基 本 标 准 )<br />

<strong>ARM</strong> 体 系 结 构 的 应 用 程 序 二 进 制 接 口 (ABI) 是 一 个 标 准 集 。 其 中 有 些 标 准 是 开<br />

放 的 。 有 些 是 <strong>ARM</strong> 体 系 结 构 特 有 的 。 这 些 标 准 控 制 基 于 <strong>ARM</strong> 的 执 行 环 境 ( 从<br />

裸 机 到 <strong>ARM</strong> Linux 等 主 流 操 作 系 统 ) 中 的 二 进 制 代 码 和 开 发 工 具 的 互 操 作 。<br />

只 要 符 合 此 标 准 , 则 来 自 不 同 生 成 器 的 <strong>ARM</strong> 和 Thumb 对 象 及 对 象 库 就 可 以 协<br />

同 工 作 。<br />

《<strong>ARM</strong> 体 系 结 构 的 ABI ( 基 本 标 准 )》 (BSABI) 由 一 系 列 规 范 组 成 ,<br />

其 中 包 括 :<br />

AADWARF 《<strong>ARM</strong> 体 系 结 构 DWARF 标 准 》。 此 ABI 使 用 DWARF 3 标 准 来 控<br />

制 调 试 数 据 在 对 象 生 成 器 与 调 试 器 之 间 的 交 换 。<br />

AAELF<br />

AAPCS<br />

BPABI<br />

CLIBABI<br />

CPPABI<br />

EHABI<br />

RTABI<br />

《<strong>ARM</strong> 体 系 结 构 ELF 标 准 》。 基 于 一 般 ELF 标 准 , 用 于 控 制 可 链<br />

接 和 可 执 行 文 件 在 生 成 者 与 使 用 者 之 间 的 交 换 。<br />

《<strong>ARM</strong> 体 系 结 构 的 过 程 调 用 标 准 》。 用 于 管 理 运 行 时 各 函 数 之 间 的<br />

控 制 和 数 据 交 换 。 RVCT 所 支 持 的 每 个 主 要 执 行 环 境 类 型 都 有 一 个<br />

AAPCS 变 体 。<br />

《<strong>ARM</strong> 体 系 结 构 的 基 本 平 台 ABI》。 用 于 控 制 静 态 链 接 器 所 生 成 的<br />

可 执 行 文 件 和 共 享 对 象 文 件 的 格 式 和 内 容 。 它 使 用 链 接 后 处 理 支<br />

持 平 台 特 定 的 可 执 行 文 件 。 它 提 供 用 于 派 生 平 台 ABI 的 基 本 标 准 。<br />

《<strong>ARM</strong> 体 系 结 构 的 C 库 ABI》。 定 义 C 库 的 ABI。<br />

《<strong>ARM</strong> 体 系 结 构 的 C++ ABI》。 基 于 一 般 C++ ABI ( 最 初 是 为<br />

IA-64 开 发 的 ), 用 于 控 制 独 立 C++ 编 译 器 之 间 的 交 互 操 作 。<br />

《<strong>ARM</strong> 体 系 结 构 的 异 常 处 理 ABI》。 定 义 异 常 的 引 发 和 处 理 方 式 中<br />

与 语 言 无 关 及 特 定 于 C++ 的 方 面 。<br />

《<strong>ARM</strong> 体 系 结 构 的 运 行 时 ABI》。 控 制 哪 些 独 立 生 成 的 对 象 可 通 过<br />

浮 点 和 编 译 器 辅 助 函 数 的 支 持 假 定 其 执 行 环 境 。<br />

有 关 <strong>ARM</strong> 支 持 的 基 本 标 准 、 软 件 接 口 以 及 其 他 标 准 的 详 细 信 息 , 请 参 阅<br />

install_directory\Documentation_Specifications_4.0\PDF。<br />

有 关 最 新 发 行 版 本 的 详 细 信 息 , 请 访 问 http://www.arm.com。<br />

如 果 要 从 早 期 版 本 升 级 到 最 新 版 RVCT, 请 确 保 使 用 最 新 版 的 <strong>ARM</strong> 规 范 。<br />

1-4 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0202IC<br />

Non-Confidential<br />

Unrestricted Access


简 介<br />

支 持 软 件<br />

要 在 仿 真 环 境 下 或 在 基 于 <strong>ARM</strong> 内 核 的 硬 件 上 调 试 程 序 , 请 使 用 合 适 的 调 试 器 ,<br />

例 如 <strong>RealView</strong> Debugger。 它 符 合 ELF、 DWARF 2 和 DWARF 3 标 准 , 由 GCC<br />

v3.4 或 RVCT v2.2 及 更 高 版 本 生 成 。<br />

要 在 仿 真 环 境 下 调 试 程 序 , 请 使 用 <strong>RealView</strong> <strong>ARM</strong>ulator ® ISS 或 指 令 集 系 统 模 型<br />

(ISSM) 支 持 软 件 。 <strong>RealView</strong> Armulator ISS 是 随 RVDS 一 起 提 供 的 指 令 集 仿 真 器<br />

(ISS)。 它 与 调 试 器 进 行 通 信 , 并 可 在 运 行 调 试 器 的 主 机 上 或 调 试 器 的 远 程 系 统<br />

上 运 行 。 有 关 详 细 信 息 , 请 参 阅 《<strong>RealView</strong> <strong>ARM</strong>ulator ISS 用 户 指 南 》。<br />

本 次 新 版 提 供 了 Cortex 处 理 器 的 仿 真 器 模 型 。 可 通 过 <strong>RealView</strong> Debugger 中 的<br />

ISSM 调 试 接 口 访 问 这 些 模 型 。<br />

代 码 示 例<br />

本 手 册 引 用 了 RVDS 随 附 的 示 例 , 这 些 示 例 位 于 示 例 目 录<br />

install_directory\RVDS\Examples 中 。 有 关 所 提 供 示 例 的 汇 总 , 请 参 阅<br />

《<strong>RealView</strong> Development Suite 入 门 指 南 》。<br />

<strong>ARM</strong> DUI 0202IC Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 1-5<br />

Unrestricted Access<br />

Non-Confidential


简 介<br />

1.2 RVCT 使 用 的 环 境 变 量<br />

表 1-1 显 示 了 RVCT 使 用 的 环 境 变 量 。<br />

表 1-1 RVCT 使 用 的 环 境 变 量<br />

环 境 变 量<br />

<strong>ARM</strong>ROOT<br />

<strong>ARM</strong>LMD_LICENSE_FILE<br />

设 置<br />

安 装 根 目 录 (install_directory)。 缺 省 为 C:\Program Files\<strong>ARM</strong>。<br />

<strong>ARM</strong> <strong>RealView</strong> 许 可 证 文 件 的 位 置 。 有 关 此 环 境 变 量 的 信 息 , 请 参 阅 《<strong>ARM</strong> 工 具<br />

FLEXnet 许 可 证 管 理 指 南 》。<br />

RVCT40_ASMOPT 要 在 常 规 makefile 之 外 使 用 的 其 他 <strong>ARM</strong> 汇 编 器 选 项 。 例 如 :<br />

--licretry<br />

列 出 的 选 项 出 现 在 makefile 中 为 armasm 命 令 指 定 的 所 有 选 项 之 前 。 因 此 , 在 makefile<br />

中 指 定 的 任 何 选 项 都 可 能 覆 盖 在 此 环 境 变 量 中 列 出 的 选 项 。<br />

RVCT40_CCOPT 要 在 常 规 makefile 之 外 使 用 的 其 他 <strong>ARM</strong> 编 译 器 选 项 。 例 如 :<br />

--licretry<br />

列 出 的 选 项 出 现 在 makefile 中 为 armcc 命 令 指 定 的 所 有 选 项 之 前 。 因 此 , 在 makefile<br />

中 指 定 的 任 何 选 项 都 可 能 覆 盖 在 此 环 境 变 量 中 列 出 的 选 项 。<br />

RVCT40_FROMELFOPT 要 在 常 规 makefile 之 外 使 用 的 其 他 <strong>ARM</strong> fromelf 选 项 。 例 如 :<br />

--licretry<br />

列 出 的 选 项 出 现 在 makefile 中 为 fromelf 命 令 指 定 的 所 有 选 项 之 前 。 因 此 , 在<br />

makefile 中 指 定 的 任 何 选 项 都 可 能 覆 盖 在 此 环 境 变 量 中 列 出 的 选 项 。<br />

RVCT40_LINKOPT 要 在 常 规 makefile 之 外 使 用 的 其 他 <strong>ARM</strong> 链 接 器 选 项 。 例 如 :<br />

--licretry<br />

RVCT40BIN RVCT 程 序 可 执 行 文 件 :<br />

列 出 的 选 项 出 现 在 makefile 中 为 armlink 命 令 指 定 的 所 有 选 项 之 前 。 因 此 , 在<br />

makefile 中 指 定 的 任 何 选 项 都 可 能 覆 盖 在 此 环 境 变 量 中 列 出 的 选 项 。<br />

install_directory\RVCT\Programs\...\win_32-pentium<br />

RVCT40INC <strong>ARM</strong> 编 译 器 包 含 以 下 文 件 :<br />

RVCT40LIB <strong>ARM</strong> 编 译 器 库 文 件 :<br />

install_directory\RVCT\Data\...\include\windows<br />

install_directory\RVCT\Data\...\lib<br />

RVDS_PROJECT 标 识 项 目 模 板 目 录 。<br />

RVDS_PROJECT_WORKDIR 标 识 项 目 工 作 目 录 。<br />

1-6 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0202IC<br />

Non-Confidential<br />

Unrestricted Access


简 介<br />

1.3 获 取 详 细 信 息<br />

根 据 安 装 的 不 同 , 完 整 的 文 档 套 件 将 以 基 于 浏 览 器 的 HTML 格 式 以 及 PDF 格 式<br />

提 供 。<br />

注 意<br />

《<strong>RealView</strong> Development Suite 入 门 指 南 》 中 提 供 了 RVDS 文 档 中 所 用 <strong>ARM</strong> 术 语<br />

的 术 语 表 。<br />

如 果 安 装 了 文 档 套 件 , 可 使 用 以 下 某 一 方 法 访 问 该 文 档 :<br />

• 根 据 平 台 的 不 同 , 若 要 查 看 文 档 套 件 , 请 执 行 以 下 操 作 :<br />

— 在 Windows 上 , 请 选 择 :<br />

开 始 → 所 有 程 序 → <strong>ARM</strong> → Help viewer v1.0<br />

— 在 Red Hat Linux 上 , 请 选 择 :<br />

开 始 菜 单 → 程 序 → <strong>ARM</strong> → Help viewer v1.0<br />

这 将 显 示 一 个 单 独 的 查 看 器 , 您 可 在 其 中 :<br />

— 查 看 HTML 格 式 的 RVDS 文 档<br />

— 对 所 有 文 档 或 部 分 文 档 执 行 文 本 搜 索<br />

— 访 问 每 个 文 档 的 对 应 PDF 文 件<br />

注 意<br />

在 从 独 立 查 看 器 中 查 看 PDF 文 档 时 , 无 法 搜 索 所 有 PDF 文 档 。<br />

• 根 据 平 台 的 不 同 , 若 要 查 看 PDF 文 档 , 请 执 行 以 下 操 作 :<br />

— 在 Windows 上 , 请 选 择 :<br />

开 始 → 所 有 程 序 → <strong>ARM</strong> → <strong>RealView</strong> Development Suite v4.0 →<br />

RVDS v4.0 Documentation Suite/RVDS v4.0 文 档 套 件<br />

— 在 Red Hat Linux 上 , 请 选 择 :<br />

开 始 菜 单 → 程 序 → <strong>ARM</strong> → <strong>RealView</strong> Development Suite v4.0 →<br />

RVDS v4.0 Documentation Suite/RVDS v4.0 文 档 套 件<br />

这 将 显 示 一 个 PDF 文 档 , 其 中 包 含 指 向 PDF 格 式 RVDS 文 档 的 链 接 。 您<br />

还 可 以 对 所 有 PDF 文 档 执 行 文 本 搜 索 。<br />

此 外 , 在 所 有 支 持 的 平 台 上 还 提 供 Rogue Wave C++ 库 的 HTML 格 式 文 档 。 此 文<br />

档 是 标 准 安 装 模 式 缺 省 安 装 的 。 有 关 详 细 信 息 , 请 参 阅 第 1-8 页 的 Rogue Wave<br />

文 档 。<br />

<strong>ARM</strong> DUI 0202IC Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 1-7<br />

Unrestricted Access<br />

Non-Confidential


简 介<br />

1.3.1 Rogue Wave 文 档<br />

RVCT 的 Rogue Wave 标 准 C++ 库 的 手 册 在 产 品 CD ROM 中 以 HTML 文 件 形 式<br />

提 供 。 可 以 使 用 标 准 Web 浏 览 器 查 看 这 些 文 件 。 例 如 , 选 择 文 件<br />

install_directory\Documentation\RogueWave\1.0\release\stdref\index.htm 将 显 示<br />

Rogue Wave 的 HTML 文 档 。 请 参 阅 图 1-1, 其 中 install_directory 为 D:\<strong>ARM</strong>。<br />

图 1-1 Rogue Wave HTML 文 档<br />

1-8 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0202IC<br />

Non-Confidential<br />

Unrestricted Access


第 2 章<br />

创 建 应 用 程 序<br />

本 章 介 绍 如 何 使 用 <strong>ARM</strong> ® <strong>RealView</strong> ® 编 译 工 具 创 建 应 用 程 序 。 本 章 分 为 以 下 几<br />

节 :<br />

• 第 2-2 页 的 使 用 <strong>ARM</strong> 编 译 工 具<br />

第 2-3 页 的 使 用 <strong>ARM</strong> 编 译 器<br />

• 第 2-7 页 的 使 用 <strong>ARM</strong> 汇 编 器<br />

• 第 2-6 页 的 使 用 <strong>ARM</strong> 链 接 器<br />

• 第 2-8 页 的 使 用 fromelf<br />

• 第 2-9 页 的 使 用 <strong>ARM</strong> Workbench IDE<br />

<strong>ARM</strong> DUI 0202IC Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 2-1<br />

Unrestricted Access<br />

Non-Confidential


创 建 应 用 程 序<br />

2.1 使 用 <strong>ARM</strong> 编 译 工 具<br />

典 型 的 应 用 程 序 开 发 可 能 涉 及 :<br />

• 主 应 用 程 序 的 C/C++ 源 代 码 (armcc)<br />

• 近 硬 件 组 件 的 汇 编 源 代 码 (armasm), 如 中 断 服 务 例 程<br />

• 将 所 有 对 象 链 接 在 一 起 , 以 生 成 映 像 (armlink)<br />

• 将 映 像 转 换 为 纯 二 进 制 、 Intel Hex 以 及 Motorola-S 格 式 的 闪 存 格 式<br />

(fromelf)<br />

图 2-1 演 示 了 如 何 链 接 <strong>ARM</strong> 编 译 工 具 以 开 发 典 型 的 应 用 程 序 。<br />

armcc<br />

armlink<br />

fromelf<br />

C/C++<br />

<strong>ARM</strong> and<br />

Thumb<br />

.c<br />

.o<br />

code<br />

data<br />

debug<br />

code<br />

Assembly<br />

code<br />

.s<br />

armasm<br />

.o<br />

code<br />

data<br />

debug<br />

data<br />

debug<br />

Plain binary<br />

Intel Hex<br />

Motorola-S<br />

Source code<br />

Object code<br />

Image<br />

Flash format<br />

图 2-1 典 型 的 工 具 使 用 流 程 图<br />

2-2 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0202IC<br />

Non-Confidential<br />

Unrestricted Access


创 建 应 用 程 序<br />

2.2 使 用 <strong>ARM</strong> 编 译 器<br />

<strong>ARM</strong> 编 译 器 armcc 可 将 C 和 C++ 源 代 码 编 译 为 <strong>ARM</strong> 和 Thumb 代 码 。<br />

通 常 , 可 按 如 下 方 式 调 用 <strong>ARM</strong> 编 译 器 :<br />

armcc [options] ifile_1 ... ifile_n<br />

可 以 指 定 一 个 或 多 个 输 入 文 件 。<br />

有 关 <strong>ARM</strong> 和 Thumb 的 编 译 , 以 及 如 何 根 据 您 指 定 的 文 件 扩 展 名 调 整 编 译 器 启<br />

动 配 置 的 详 细 信 息 , 请 参 阅 《 编 译 器 用 户 指 南 》 中 的 第 2 章 <strong>ARM</strong> 编 译 器 使 用<br />

入 门 。<br />

2.2.1 生 成 Dhrystone 示 例<br />

示 例 目 录 下 安 装 了 一 系 列 应 用 程 序 的 示 例 C 源 代 码 。 每 个 示 例 都 有 一 个<br />

readme.txt 文 件 , 该 文 件 介 绍 示 例 代 码 以 及 如 何 编 译 该 代 码 。<br />

例 如 ,Dhrystone 基 准 程 序 的 源 代 码 安 装 在 示 例 目 录 中 的 ...\dhrystone 之 下 。 这<br />

个 程 序 可 用 于 评 估 系 统 的 整 数 处 理 性 能 。<br />

编 译 Dhrystone 示 例 :<br />

1. 使 用 以 下 命 令 编 译 C 文 件 dhry_1.c 和 dhry_2.c:<br />

armcc -c -W --debug -O3 -Otime --no_inline --no_multifile -DMSC_CLOCK \<br />

dhry_1.c dhry_2.c<br />

以 下 是 常 用 选 项 :<br />

-c 指 示 编 译 器 只 编 译 而 不 链 接 。<br />

--debug 指 示 编 译 器 为 源 代 码 级 调 试 添 加 调 试 表 。<br />

-O3 指 示 编 译 器 应 用 最 高 优 化 生 成 代 码 。<br />

-Otime 指 示 编 译 器 优 化 代 码 以 提 高 速 度 , 而 不 是 节 省 空 间 。<br />

--no_inline 和 --no_multifile 选 项 是 保 留 Dhrystone 基 准 程 序 的 主 旨 功 能 所<br />

必 需 的 选 项 :<br />

• --no_inline 是 必 需 的 选 项 , 用 于 禁 用 函 数 内 联 , 因 为 Dhrystone 要 求<br />

不 合 并 过 程<br />

• --no_multifile 是 必 需 的 选 项 , 用 于 禁 用 多 文 件 编 译 , 因 为 Dhrystone<br />

要 求 分 别 编 译 两 个 源 文 件 。<br />

在 生 成 Dhrystone 编 译 文 件 时 还 会 用 到 下 列 选 项 :<br />

-W 指 示 编 译 器 禁 用 所 有 警 告 。<br />

<strong>ARM</strong> DUI 0202IC Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 2-3<br />

Unrestricted Access<br />

Non-Confidential


创 建 应 用 程 序<br />

-DMSC_CLOCK 指 示 编 译 器 使 用 C 库 函 数 clock() 进 行 计 时 度 量 。<br />

有 关 编 译 器 选 项 的 详 细 信 息 , 请 参 阅 《 编 译 器 参 考 指 南 》 中 的 第 2 章 编<br />

译 器 命 令 行 选 项 。<br />

注 意<br />

请 注 意 --arm 是 缺 省 编 译 器 选 项 。 有 关 详 细 信 息 , 请 参 阅 编 译 生 成 <strong>ARM</strong> 代<br />

码 。<br />

2. 将 文 件 链 接 在 一 起 , 请 参 阅 第 2-6 页 的 使 用 <strong>ARM</strong> 链 接 器<br />

3. 使 用 兼 容 的 调 试 器 ( 例 如 <strong>RealView</strong> Debugger) 加 载 并 运 行 映 像 。<br />

有 关 dhry_1.c 和 dhry_2.c 的 内 容 以 及 如 何 计 算 Dhrystone 性 能 的 信 息 , 请 参 阅 该<br />

示 例 的 readme.txt 文 件 。<br />

2.2.2 编 译 生 成 <strong>ARM</strong> 代 码<br />

下 列 编 译 器 选 项 用 于 生 成 <strong>ARM</strong> 代 码 :<br />

--arm 指 示 编 译 器 优 先 生 成 <strong>ARM</strong> 代 码 ( 优 先 于 Thumb 代 码 )。 但 是 ,<br />

#pragma thumb 会 覆 盖 此 选 项 。 这 是 缺 省 编 译 器 选 项 。<br />

--arm_only<br />

强 制 编 译 器 只 生 成 <strong>ARM</strong> 代 码 。 编 译 器 就 当 目 标 体 系 结 构 中 没 有<br />

Thumb 一 样 进 行 工 作 。 将 忽 略 所 有 #pragma thumb 声 明 。<br />

另 请 参 阅<br />

• 《 编 译 器 用 户 指 南 》 中 第 4-65 页 的 #pragma thumb<br />

• 《 编 译 器 参 考 指 南 》 中 第 2-7 页 的 --arm<br />

• 《 编 译 器 参 考 指 南 》 中 第 2-14 页 的 --arm_only<br />

2-4 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0202IC<br />

Non-Confidential<br />

Unrestricted Access


创 建 应 用 程 序<br />

2.2.3 编 译 生 成 Thumb 代 码<br />

要 生 成 Thumb 版 本 , 请 使 用 :<br />

armcc --thumb ...<br />

其 中 :<br />

--thumb<br />

指 示 编 译 器 优 先 生 成 Thumb 代 码 ( 优 先 于 <strong>ARM</strong> 代 码 )。 但<br />

是 , #pragma arm 会 覆 盖 此 选 项 。<br />

另 请 参 阅<br />

• 《 编 译 器 用 户 指 南 》 中 第 4-51 页 的 #pragma arm<br />

• 《 编 译 器 参 考 指 南 》 中 第 2-107 页 的 --thumb<br />

<strong>ARM</strong> DUI 0202IC Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 2-5<br />

Unrestricted Access<br />

Non-Confidential


创 建 应 用 程 序<br />

2.3 使 用 <strong>ARM</strong> 链 接 器<br />

该 链 接 器 将 一 个 或 多 个 对 象 文 件 的 内 容 与 一 个 或 多 个 对 象 库 的 选 定 部 分 合 并 起<br />

来 , 生 成 一 个 映 像 或 对 象 文 件 。<br />

通 常 , 可 如 下 调 用 <strong>ARM</strong> 链 接 器 :<br />

armlink [options] file_1 ... file_n<br />

有 关 详 细 信 息 , 请 参 阅 《 链 接 器 用 户 指 南 》 中 的 第 2 章 <strong>ARM</strong> 链 接 器 使 用 入 门 。<br />

2.3.1 链 接 Dhrystone 示 例<br />

对 于 Dhrystone 示 例 程 序 , 请 使 用 下 面 的 命 令 链 接 对 象 文 件 :<br />

armlink dhry_1.o dhry_2.o -o dhrystone.axf --info totals<br />

其 中 :<br />

-o 将 输 出 文 件 指 定 为 dhrystone.axf。<br />

--info totals 指 示 链 接 器 显 示 输 入 对 象 和 库 的 代 码 和 数 据 大 小 的 总 和 。<br />

2-6 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0202IC<br />

Non-Confidential<br />

Unrestricted Access


创 建 应 用 程 序<br />

2.4 使 用 <strong>ARM</strong> 汇 编 器<br />

使 用 <strong>ARM</strong> 汇 编 器 (armasm) 的 基 本 语 法 为 :<br />

armasm [options] inputfile<br />

例 如 , 若 要 汇 编 名 为 myfile.s 的 文 件 中 的 代 码 , 并 在 结 果 对 象 文 件 中 包 含 调 试<br />

信 息 , 请 键 入 :<br />

armasm --debug myfile.s<br />

这 会 生 成 名 为 myfile.o 的 对 象 文 件 。<br />

有 关 选 项 和 语 法 的 详 细 , 请 参 阅 《 编 译 器 指 南 》 中 第 3-2 页 的 命 令 语 法 。<br />

2.4.1 从 汇 编 器 源 代 码 生 成 示 例<br />

示 例 汇 编 语 言 代 码 安 装 在 示 例 目 录 下 。 这 些 示 例 都 有 一 个 readme.txt 文 件 , 用<br />

以 介 绍 这 些 示 例 以 及 如 何 编 译 它 们 。 例 如 , 有 一 个 简 单 的 程 序 word.s, 该 程 序<br />

的 代 码 安 装 在 示 例 目 录 中 的 ...\asm 之 下 。<br />

生 成 该 示 例 :<br />

1. 使 用 以 下 命 令 汇 编 源 文 件 :<br />

armasm --debug word.s<br />

2. 使 用 以 下 命 令 链 接 该 文 件 :<br />

armlink word.o -o word.axf<br />

3. 使 用 兼 容 的 调 试 器 ( 例 如 <strong>RealView</strong> Debugger) 加 载 并 测 试 映 像 。<br />

逐 步 调 试 该 程 序 并 检 查 寄 存 器 , 查 看 它 们 如 何 变 化 。 有 关 如 何 执 行 此 操 作<br />

的 详 细 信 息 , 请 参 阅 调 试 器 文 档 。<br />

<strong>ARM</strong> DUI 0202IC Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 2-7<br />

Unrestricted Access<br />

Non-Confidential


创 建 应 用 程 序<br />

2.5 使 用 fromelf<br />

<strong>ARM</strong> fromelf 实 用 程 序 的 功 能 包 括 :<br />

• 将 ELF 可 执 行 格 式 的 可 执 行 映 像 转 换 为 其 他 文 件 格 式<br />

• 控 制 输 出 文 件 中 的 调 试 信 息<br />

• 反 汇 编 ELF 映 像 或 ELF 对 象 文 件<br />

• 保 护 映 像 中 的 IP 和 传 递 到 第 三 方 的 对 象<br />

• 打 印 有 关 ELF 映 像 或 ELF 对 象 文 件 的 信 息<br />

有 关 详 细 信 息 , 请 参 阅 《 实 用 程 序 指 南 》 中 的 第 2 章 使 用 fromelf。<br />

2.5.1 使 用 fromelf 示 例<br />

下 面 的 示 例 演 示 如 何 使 用 fromelf:<br />

fromelf --text -c -s --output=outfile.lst infile.axf<br />

创 建 一 个 纯 文 本 输 出 文 件 , 其 中 包 含 ELF 映 像 的 反 汇 编 代 码 和 符<br />

号 表 。<br />

fromelf --bin --16x2 --output=outfile.bin infile.axf<br />

针 对 内 存 配 置 为 两 个 寄 存 器 组 16 位 内 存 宽 度 的 目 标 系 统 创 建 两 个<br />

二 进 制 格 式 的 文 件 (outfile0.bin 和 outfile1.bin)。<br />

最 后 一 个 示 例 的 输 出 文 件 适 合 于 直 接 写 入 Flash 设 备 。<br />

2-8 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0202IC<br />

Non-Confidential<br />

Unrestricted Access


创 建 应 用 程 序<br />

2.6 使 用 <strong>ARM</strong> Workbench IDE<br />

使 用 <strong>ARM</strong> Workbench IDE, 您 可 以 通 过 图 形 用 户 界 面 来 管 理 软 件 开 发 项 目 。<br />

<strong>ARM</strong> Workbench 提 供 了 完 全 集 成 的 IDE, 该 IDE 将 软 件 开 发 与 所 有 <strong>RealView</strong> 工<br />

具 的 编 译 和 调 试 技 术 结 合 在 一 起 。Workbench 随 附 提 供 的 示 例 包 含 一 些 可 供 您<br />

试 用 的 完 全 可 运 行 的 项 目 。 要 使 用 这 些 项 目 , 必 须 启 动 Workbench, 并 将 这 些<br />

示 例 导 入 您 的 工 作 空 间 。 有 关 详 细 信 息 , 请 参 阅 《<strong>ARM</strong> Workbench IDE 用 户 指<br />

南 》。<br />

<strong>ARM</strong> DUI 0202IC Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 2-9<br />

Unrestricted Access<br />

Non-Confidential


创 建 应 用 程 序<br />

2-10 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0202IC<br />

Non-Confidential<br />

Unrestricted Access


第 3 章<br />

RVCT v4.0 与 RVCT v3.1 之 间 的 差 异<br />

本 章 介 绍 <strong>ARM</strong> ® <strong>RealView</strong> ® 编 译 工 具 (RVCT) v4.0 和 RVCT v3.1 之 间 的 主 要 差<br />

异 。 本 章 分 为 以 下 几 节 :<br />

• 第 3-2 页 的 <strong>RealView</strong> 编 译 工 具 v4.0 概 述<br />

• 第 3-3 页 的 RVCT v4.0 中 文 档 的 更 改<br />

• 第 3-4 页 的 RVCT v4.0 中 <strong>ARM</strong> 编 译 器 的 改 动<br />

• 第 3-6 页 的 RVCT v4.0 中 对 库 支 持 的 改 动<br />

• 第 3-7 页 的 RVCT v4.0 中 <strong>ARM</strong> 链 接 器 的 改 动<br />

• 第 3-8 页 的 RVCT v4.0 中 <strong>ARM</strong> 汇 编 器 的 改 动<br />

• 第 3-9 页 的 RVCT v4.0 中 fromelf 实 用 程 序 的 改 动<br />

• 第 3-11 页 的 RVCT v4.0 中 不 提 倡 使 用 的 功 能<br />

• 第 3-12 页 的 RVCT v4.0 中 不 再 使 用 的 功 能<br />

• 第 3-13 页 的 RVCT v4.0 与 旧 对 象 和 库 的 兼 容 性<br />

有 关 RVCT 早 期 版 本 之 间 的 差 异 , 请 参 阅 附 录 A 关 于 早 期 版 本 。<br />

<strong>ARM</strong> DUI 0202IC Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 3-1<br />

Unrestricted Access<br />

Non-Confidential


RVCT v4.0 与 RVCT v3.1 之 间 的 差 异<br />

3.1 <strong>RealView</strong> 编 译 工 具 v4.0 概 述<br />

RVCT v4.0 和 RVCT v3.1 之 间 最 重 要 的 差 异 是 :<br />

• 对 Cortex -A9 ( 仅 限 RVDS Professional 版 ) 和 Cortex-R4F 处 理 器 的 支<br />

持 。 若 要 查 看 支 持 的 体 系 结 构 和 处 理 器 的 完 整 列 表 , 请 使 用 --cpu=list 命<br />

令 行 选 项 。<br />

• 对 使 用 RVCT 和 CodeSourcery 工 具 生 成 Linux 应 用 程 序 的 增 强 支 持 。<br />

• 增 强 的 符 号 可 见 性 。<br />

• 增 强 的 fromelf 功 能 。<br />

• 链 接 器 中 增 强 的 调 用 图 功 能 。<br />

• 生 成 适 合 预 链 接 的 映 像 。<br />

• 可 识 别 体 系 结 构 的 反 汇 编 。<br />

• 对 Cortex -M3 处 理 器 的 初 步 位 处 理 操 作 支 持 。<br />

• 增 强 的 Cortex -M1 处 理 器 浮 点 性 能 。<br />

• 增 强 的 代 码 优 化 。<br />

• Profiler 引 导 的 优 化 。<br />

• 链 接 时 代 码 生 成 。<br />

3-2 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0202IC<br />

Non-Confidential<br />

Unrestricted Access


RVCT v4.0 与 RVCT v3.1 之 间 的 差 异<br />

3.2 RVCT v4.0 中 文 档 的 更 改<br />

RVCT v4.0 的 文 档 有 以 下 更 改 :<br />

• 《 链 接 器 和 实 用 程 序 指 南 》 已 拆 分 成 以 下 手 册 :<br />

— 《 链 接 器 用 户 指 南 》<br />

— 《 链 接 器 参 考 指 南 》<br />

— 《 实 用 程 序 指 南 》<br />

• 《NEON 向 量 化 编 译 器 指 南 》 已 并 入 《 编 译 器 用 户 指 南 》 和 《 编 译 器 参<br />

考 指 南 》。<br />

• 《 开 发 指 南 》 已 重 新 编 排 结 构 和 更 新 , 以 反 映 最 新 的 <strong>ARM</strong> 体 系 结 构 和 处<br />

理 器 。<br />

• --licretry 选 项 已 记 载 到 文 档 中 。 <strong>ARM</strong> 汇 编 器 、<strong>ARM</strong> 编 译 器 、<strong>ARM</strong> 链 接<br />

器 和 fromelf 实 用 程 序 都 支 持 该 选 项 。<br />

• 所 有 文 档 都 已 更 新 , 以 反 映 相 关 工 具 中 的 功 能 。<br />

请 参 阅 本 章 的 其 余 部 分 , 详 细 了 解 这 些 工 具 在 本 版 本 中 的 改 动 情 况 。<br />

<strong>ARM</strong> DUI 0202IC Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 3-3<br />

Unrestricted Access<br />

Non-Confidential


RVCT v4.0 与 RVCT v3.1 之 间 的 差 异<br />

3.3 RVCT v4.0 中 <strong>ARM</strong> 编 译 器 的 改 动<br />

RVCT v4.0 中 的 编 译 器 有 以 下 改 动 :<br />

• 支 持 Cortex-A9 和 Cortex-R4F 处 理 器 ( 使 用 --cpu=Cortex-A9 和<br />

--cpu=Cortex-R4F 开 关 )。 请 参 阅 《 编 译 器 参 考 指 南 》 中 第 2-2 页 的 命 令 行<br />

选 项 。<br />

• 添 加 了 很 多 新 的 内 在 函 数 。 请 参 阅 《 编 译 器 用 户 指 南 》 中 第 4-2 页 的 内 在<br />

函 数 。<br />

• 添 加 了 --arm_only 命 令 行 选 项 , 该 选 项 强 制 编 译 器 仅 输 出 <strong>ARM</strong> 代 码 , 忽<br />

略 所 有 #pragma thumb 声 明 。<br />

请 参 阅 《 编 译 器 参 考 指 南 》 中 第 2-2 页 的 命 令 行 选 项 。<br />

• 添 加 了 以 下 命 令 行 选 项 , 以 支 持 生 成 Linux 应 用 程 序 :<br />

— --arm_linux<br />

— --arm_linux_config_file<br />

— --arm_linux_configure<br />

— --arm_linux_paths<br />

— --configure_cpp_headers<br />

— --configure_extra_includes<br />

— --configure_extra_libraries<br />

— --configure_gcc<br />

— --configure_gld<br />

— --configure_sysroot<br />

— --shared<br />

— --translate_g++<br />

— --translate_gcc<br />

— --translate_gld<br />

• 为 --fpu 命 令 行 选 项 增 加 了 以 下 选 项 :<br />

— vfpv3_fp16<br />

— vfpv3_d16<br />

— vfpv3_d16_fp16<br />

— softvfp+vfpv3_fp16<br />

— softvfp+vfpv3_d16<br />

— softvfp+vfpv3_d16_fp16<br />

相 应 的 预 定 义 宏 也 已 添 加 。 请 参 阅 《 编 译 器 用 户 指 南 》 中 第 5-28 页 的 使<br />

用 浮 点 算 法 。<br />

3-4 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0202IC<br />

Non-Confidential<br />

Unrestricted Access


RVCT v4.0 与 RVCT v3.1 之 间 的 差 异<br />

• 已 添 加 __attribute__((bitband)) 类 型 属 性 , 以 支 持 Cortex-M3 处 理 器 上 的<br />

位 操 作 处 理 。 请 参 阅 《 编 译 器 参 考 指 南 》 中 第 4-37 页 的 类 型 属 性 。<br />

• 增 强 的 Cortex-M1 处 理 器 浮 点 性 能 。 单 精 度 算 法 至 少 快 6 倍 , 双 精 度 算 法<br />

至 少 快 3.5 倍 。<br />

• 用 于 显 式 或 隐 式 标 有 dllexport 的 对 象 和 函 数 的 ELF 符 号 可 见 性 已 更 改 。<br />

之 前 在 RVCT v3.1 STV_DEFAULT ( 可 预 占 ) 节 中 定 义 的 符 号 现 在 在 RVCT<br />

v4.0 STV_PROTECTED ( 导 出 的 不 可 预 占 ) 节 中 定 义 。 但 是 , COMDAT 节 中 定 义<br />

的 符 号 没 有 移 动 , 仍 在 STV_DEFAULT 节 中 定 义 。<br />

--no_hide_all 编 译 器 选 项 仍 然 将 符 号 的 可 见 性 设 为 STV_DEFAULT, 而 不 是<br />

STV_HIDDEN, 因 此 这 将 不 再 等 同 于 导 出 它 们 。<br />

• 新 的 --retain 编 译 器 选 项 可 用 来 限 制 编 译 器 执 行 的 代 码 转 换 。 例 如 , 您 可<br />

以 防 止 误 删 未 使 用 的 内 联 函 数 。 此 外 还 提 供 了 以 下 属 性 :<br />

— __attribute__((notailcall))<br />

— __attribute__((nomerge))<br />

请 参 阅 《 编 译 器 参 考 指 南 》 中 第 2-98 页 的 --retain=option。<br />

请 参 阅 《 编 译 器 参 考 指 南 》 中 第 4-28 页 的 函 数 属 性 。<br />

• Profiler 引 导 的 优 化 利 用 了 <strong>ARM</strong> Profiler 生 成 的 应 用 程 序 性 能 信 息 。 可 以 使<br />

用 新 的 --profile 选 项 将 性 能 信 息 输 入 编 译 器 和 链 接 器 中 , 以 生 成 大 小 更<br />

小 性 能 却 更 快 的 代 码 。<br />

• 链 接 时 代 码 生 成 是 使 用 新 的 --ltgc 编 译 器 和 链 接 器 选 项 实 现 的 , 它 提 供 了<br />

以 下 优 化 :<br />

— 跨 模 块 内 联 以 提 高 性 能<br />

— 共 享 基 址 以 缩 小 代 码 大 小<br />

有 关 详 细 信 息 , 请 参 阅 《 编 译 器 用 户 指 南 》 中 第 5-16 页 的 函 数 内 联 。<br />

• 增 加 的 其 他 命 令 行 选 项 有 :<br />

— --compatible<br />

— --device<br />

— --fp16_format<br />

— --library_interface=rvct_c90<br />

— --licretry<br />

• 为 兼 容 GNU 库 头 文 件 , 增 加 了 一 些 函 数 。 请 参 阅 《 编 译 器 参 考 指 南 》 中<br />

第 4-104 页 的 GNU 内 置 函 数 。<br />

<strong>ARM</strong> DUI 0202IC Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 3-5<br />

Unrestricted Access<br />

Non-Confidential


RVCT v4.0 与 RVCT v3.1 之 间 的 差 异<br />

3.4 RVCT v4.0 中 对 库 支 持 的 改 动<br />

宏 和 标 准 库 之 间 的 功 能 差 异 已 减 小 。 此 外 还 支 持 宽 字 符 IO。 有 关 详 细 信 息 , 请<br />

参 阅 《 库 和 浮 点 支 持 指 南 》。<br />

3-6 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0202IC<br />

Non-Confidential<br />

Unrestricted Access


RVCT v4.0 与 RVCT v3.1 之 间 的 差 异<br />

3.5 RVCT v4.0 中 <strong>ARM</strong> 链 接 器 的 改 动<br />

RVCT v4.0 中 的 链 接 器 有 以 下 改 动 :<br />

• 增 加 了 以 下 命 令 行 选 项 :<br />

--[no_]add_needed<br />

--arm_only<br />

--arm_linux<br />

--[no_]combreloc<br />

--device<br />

--filtercomment<br />

--info=visibility<br />

--no_largeregions<br />

--licretry<br />

--ltcg<br />

--max_open_files<br />

--[no_]muldefweak<br />

--[no_]prelink_support<br />

--profile<br />

--section_index_display=type<br />

另 请 参 阅 :<br />

• 《 链 接 器 用 户 指 南 》 中 第 2-6 页 的 使 用 命 令 行 选 项<br />

• 《 链 接 器 参 考 指 南 》 中 的 第 2 章 链 接 器 命 令 行 选 项<br />

<strong>ARM</strong> DUI 0202IC Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 3-7<br />

Unrestricted Access<br />

Non-Confidential


RVCT v4.0 与 RVCT v3.1 之 间 的 差 异<br />

3.6 RVCT v4.0 中 <strong>ARM</strong> 汇 编 器 的 改 动<br />

RVCT v4.0 中 的 汇 编 器 有 以 下 改 动 :<br />

• 增 加 了 以 下 NEON 和 VFP 指 令 :<br />

— VCVT, 带 半 精 度 扩 展<br />

— VCVTB 和 VCVTT, 带 半 精 度 扩 展<br />

请 参 阅 《 汇 编 器 指 南 》 中 第 5-39 页 的 NEON 通 用 数 据 处 理 指 令 和<br />

第 5-97 页 的 VFP 指 令 。<br />

• 增 加 了 PLDW 指 令 以 支 持 Cortex-A9。 有 关 详 细 信 息 , 请 参 阅 《 汇 编 器 指<br />

南 》 中 第 4-23 页 的 PLD、 PLDW 和 PLI。<br />

• 以 下 指 令 现 在 支 持 符 号 类 型 :<br />

— EXPORT<br />

— EXTERN<br />

— GLOBAL<br />

— IMPORT<br />

• 增 加 了 以 下 命 令 行 开 关 :<br />

— --arm_only<br />

— --cpreproc<br />

— --device<br />

— --licretry<br />

有 关 详 细 信 息 , 请 参 阅 《 汇 编 器 指 南 》 中 第 3 章 汇 编 器 参 考 。<br />

另 请 参 阅 《 汇 编 器 指 南 》 中 第 5-15 页 的 一 般 信 息 。<br />

3-8 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0202IC<br />

Non-Confidential<br />

Unrestricted Access


RVCT v4.0 与 RVCT v3.1 之 间 的 差 异<br />

3.7 RVCT v4.0 中 fromelf 实 用 程 序 的 改 动<br />

RVCT v4.0 中 的 fromelf 实 用 程 序 添 加 了 以 下 选 项 :<br />

• --base<br />

• --bincombined<br />

• --bincombined_base<br />

• --bincombined_padding<br />

• --cad<br />

• --cadcombined<br />

• --compare<br />

• --cpu<br />

• --datasymbols<br />

• --device<br />

• --disassemble<br />

• --emit<br />

• --fpu<br />

• --globalize<br />

• --hide<br />

• --hide_and_localize<br />

• --ignore_section<br />

• --ignore_symbol<br />

• --info=instruction_usage<br />

• --in_place<br />

• --interleave<br />

• --licretry<br />

• --localize<br />

• --privacy<br />

• --qualify<br />

• --reinitialize_workdir<br />

• --relax_section<br />

• --relax_symbol<br />

• --rename<br />

• --show<br />

• --show_and_globalize<br />

• --source_directory<br />

<strong>ARM</strong> DUI 0202IC Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 3-9<br />

Unrestricted Access<br />

Non-Confidential


RVCT v4.0 与 RVCT v3.1 之 间 的 差 异<br />

• --strip=symbols<br />

• --strip=localsymbols<br />

• --workdir.<br />

以 前 没 有 文 档 记 载 的 选 项 --text -w 现 已 记 入 文 档 。<br />

支 持 识 别 体 系 结 构 的 反 汇 编 。<br />

有 关 详 细 信 息 , 请 参 阅 《 实 用 程 序 指 南 》 中 的 第 2 章 使 用 fromelf。<br />

3-10 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0202IC<br />

Non-Confidential<br />

Unrestricted Access


RVCT v4.0 与 RVCT v3.1 之 间 的 差 异<br />

3.8 RVCT v4.0 中 不 提 倡 使 用 的 功 能<br />

RVCT v4.0 中 不 提 倡 使 用 以 下 功 能 :<br />

• 不 提 倡 使 用 --memaccess 编 译 器 选 项 。<br />

• 不 提 倡 使 用 以 下 mathlib 函 数 :<br />

— gamma()<br />

— gamma_r()<br />

— lgamma_r()<br />

— scalb()<br />

— significand()<br />

• 不 提 倡 使 用 以 下 Bessel 函 数 :<br />

— j0()<br />

— j1()<br />

— jn()<br />

— y0()<br />

— y1()<br />

— yn()<br />

• <strong>ARM</strong> 汇 编 器 选 项 -O ( 大 写 , 非 小 写 )<br />

<strong>ARM</strong> DUI 0202IC Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 3-11<br />

Unrestricted Access<br />

Non-Confidential


RVCT v4.0 与 RVCT v3.1 之 间 的 差 异<br />

3.9 RVCT v4.0 中 不 再 使 用 的 功 能<br />

RVCT v4.0 中 不 再 使 用 以 下 功 能 :<br />

• 不 再 使 用 以 下 工 具 :<br />

— armcpp<br />

— tcc<br />

— tcpp<br />

makefile 中 对 armcpp、 tcc 或 tcpp 的 所 有 引 用 必 须 分 别 更 改 为 armcc --cpp、<br />

armcc --thumb 或 armcc --thumb --cpp。<br />

• 不 再 使 用 通 过 C 宏 调 整 语 言 环 境 和 CTYPE 的 做 法 。<br />

• 不 再 使 用 <strong>ARM</strong> 汇 编 器 选 项 -D ( 与 --depend 同 义 )。<br />

3-12 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0202IC<br />

Non-Confidential<br />

Unrestricted Access


RVCT v4.0 与 RVCT v3.1 之 间 的 差 异<br />

3.10 RVCT v4.0 与 旧 对 象 和 库 的 兼 容 性<br />

只 要 没 有 使 用 --apcs /adsabi 进 行 生 成 , 并 且 使 用 了 RVCT v4.0 链 接 器 和 C/C++<br />

库 , 则 支 持 与 RVCT v2.x 和 v3.x 对 象 / 库 代 码 的 向 后 兼 容 性 。 不 保 证 向 前 兼 容 。<br />

由 于 存 在 这 些 限 制 ,<strong>ARM</strong> 强 烈 建 议 您 使 用 RVCT v4.0 重 新 生 成 包 括 所 有 用 户 或<br />

第 三 方 提 供 的 库 在 内 的 整 个 项 目 。 这 是 为 避 免 任 何 潜 在 的 不 兼 容 性 , 并 充 分 利<br />

用 RVCT v4.0 提 供 的 改 进 优 化 、 增 强 功 能 和 新 增 功 能 。<br />

<strong>ARM</strong> DUI 0202IC Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 3-13<br />

Unrestricted Access<br />

Non-Confidential


RVCT v4.0 与 RVCT v3.1 之 间 的 差 异<br />

3-14 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0202IC<br />

Non-Confidential<br />

Unrestricted Access


附 录 A<br />

关 于 早 期 版 本<br />

本 附 录 介 绍 早 期 版 本 的 <strong>ARM</strong> ® <strong>RealView</strong> ® 编 译 工 具 (RVCT) 之 间 的 主 要 差 异 。<br />

本 附 录 分 为 以 下 几 节 :<br />

• 第 A-2 页 的 RVCT v3.1 与 RVCT v3.0 之 间 的 差 异<br />

• 第 A-10 页 的 RVCT v3.0 与 RVCT v2.2 之 间 的 差 异<br />

• 第 A-19 页 的 RVCT v2.2 SP1 和 RVCT v2.2 之 间 的 差 异<br />

• 第 A-21 页 的 RVCT v2.2 和 RVCT 2.1 版 之 间 的 差 异<br />

• 第 A-32 页 的 RVCT v2.1 与 RVCT v2.0 之 间 的 差 异<br />

• 第 A-36 页 的 RVCT v2.0 与 RVCT v1.2 之 间 的 差 异<br />

<strong>ARM</strong> DUI 0202IC Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. A-1<br />

Unrestricted Access<br />

Non-Confidential


关 于 早 期 版 本<br />

A.1 RVCT v3.1 与 RVCT v3.0 之 间 的 差 异<br />

本 节 介 绍 RVCT v3.1 与 RVCT v3.0 之 间 的 差 异 。<br />

A.1.1<br />

RVCT v3.1 概 述<br />

• RVCT v3.1 现 在 支 持 以 下 新 的 --cpu 选 项 :<br />

— <strong>ARM</strong> v7 是 不 可 识 别 的 <strong>ARM</strong> 体 系 结 构 。--cpu=7 表 示 对 所 有<br />

<strong>ARM</strong>v7-A、<strong>ARM</strong>v7-R 和 <strong>ARM</strong>v7-M 体 系 结 构 都 通 用 的 功 能 。 根 据 定<br />

义 , --cpu=7 选 项 所 具 有 的 任 何 给 定 功 能 在 所 有 <strong>ARM</strong>v7-A、<br />

<strong>ARM</strong>v7-R 和 <strong>ARM</strong>v7-M 体 系 结 构 中 都 存 在 。<br />

— Cortex 处 理 器 :<br />

--cpu=Cortex-R4<br />

--cpu=Cortex-M1<br />

--Cortex-A8NoNEON.<br />

— Marvell Feroceon 处 理 器 --cpu=88FRxxx。<br />

要 查 看 支 持 的 体 系 结 构 和 处 理 器 的 完 整 列 表 , 请 使 用 --cpu=list。 有 关 详<br />

细 信 息 , 请 参 阅 《 编 译 器 参 考 指 南 》 中 第 2-28 页 的 --cpu=list 和<br />

第 2-28 页 的 --cpu=name。<br />

• RVCT v3.1 删 除 了 --apcs=/adsabi 选 项 。 无 法 再 编 译 ADS 兼 容 的 对 象 以 及<br />

链 接 旧 ADS 对 象 和 库 。<br />

• RVCT v3.1 提 供 完 整 的 C99 语 言 支 持 , 复 数 和 宽 I/O 除 外 。 有 关 详 细 信 息 ,<br />

请 参 阅 《 编 译 器 用 户 指 南 》 中 第 5-41 页 的 C99 的 新 功 能 。<br />

• RVCT v3.1 完 全 支 持 NEON 技 术 。 有 关 详 细 信 息 , 请 参 阅 《 编 译 器 用 户<br />

指 南 》 中 的 第 3 章 使 用 NEON 向 量 化 编 译 器 和 第 4-10 页 的 NEON 内 在 函<br />

数 。<br />

• RVCT v3.1 提 供 了 C 微 型 库 (microlib) 作 为 标 准 C 库 的 替 代 库 , 可 用 于 适<br />

合 在 极 少 量 内 存 环 境 下 运 行 的 深 度 嵌 入 式 应 用 程 序 。 Microlib 并 不 完 全 符<br />

合 ISO C 标 准 。 有 关 详 细 信 息 , 请 参 阅 《 库 和 浮 点 支 持 指 南 》 中 第 3 章 C<br />

微 型 库 。<br />

• RVCT v3.1 提 供 汇 编 器 宏 来 调 整 语 言 环 境 和 CTYPE 函 数 。 有 关 详 细 信 息 ,<br />

请 参 阅 《 库 和 浮 点 支 持 指 南 》 中 第 2-41 页 的 使 用 汇 编 器 宏 调 整 语 言 环 境<br />

和 CTYPE。<br />

A-2 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0202IC<br />

Non-Confidential<br />

Unrestricted Access


关 于 早 期 版 本<br />

• RVCT v3.1 提 供 特 定 的 编 译 器 内 在 函 数 , 有 助 于 在 C 和 C++ 中 轻 松 访 问 基<br />

于 <strong>ARM</strong> 体 系 结 构 的 处 理 器 的 低 级 功 能 。 有 关 详 细 信 息 , 请 参 阅 《 编 译 器<br />

用 户 指 南 》 中 第 4-3 页 的 指 令 内 在 函 数 。<br />

• RVCT v3.1 支 持 ETSI 内 在 函 数 。 有 关 详 细 信 息 , 请 参 阅 《 编 译 器 用 户 指<br />

南 》 中 第 4-6 页 的 ETSI 基 本 运 算 。<br />

• RVCT v3.1 支 持 C55x 内 在 函 数 。 有 关 详 细 信 息 , 请 参 阅 《 编 译 器 用 户 指<br />

南 》 中 第 4-8 页 的 TI C55x 内 在 函 数 。<br />

• RVCT v3.1 提 供 对 调 用 图 、 分 散 加 载 文 件 和 执 行 区 节 布 局 的 增 强 支 持 。 有<br />

关 详 细 信 息 , 请 参 阅 《 链 接 器 参 考 指 南 》 中 第 2-7 页<br />

的 --[no_]callgraph。<br />

• RVCT v3.1 提 供 对 可 交 付 的 映 像 和 对 象 中 IP 的 增 强 保 护 。 有 关 详 细 信 息 ,<br />

请 参 阅 第 A-9 页 的 RVCT v3.1 中 fromelf 实 用 程 序 的 改 动 。<br />

• RVCT v3.1 提 供 的 一 个 选 项 可 以 控 制 去 除 文 件 路 径 中 的 冗 余 路 径 名 信 息 。<br />

此 选 项 可 用 于 <strong>ARM</strong> 编 译 器 、 链 接 器 和 汇 编 器 。 有 关 详 细 信 息 , 请 参 阅<br />

《 链 接 器 参 考 指 南 》 中 第 2-45 页 的 --[no_]reduce_paths。<br />

• RVDS v3.1 现 在 包 含 Eclipse IDE 作 为 主 要 的 项 目 管 理 工 具 。 RVDS 的<br />

Eclipse 插 件 提 供 综 合 性 的 配 置 面 板 , 可 设 置 RVCT 的 所 有 选 项 。 有 关 详 细<br />

信 息 , 请 参 阅 《<strong>RealView</strong> Development Suite Eclipse 插 件 用 户 指 南 》。<br />

• RVDS v3.1 已 将 --verbose 命 令 行 选 项 更 改 为 将 诊 断 输 出 发 送 到 stdout, 而<br />

不 是 stderr。 如 果 要 将 此 信 息 重 定 向 到 文 件 , 则 必 须 使 用 --list, 而 不 是<br />

--errors。<br />

A.1.2<br />

RVCT v3.1 中 不 再 使 用 的 功 能<br />

请 注 意 RVCT v3.1 中 的 以 下 差 异 :<br />

• RVCT v3.1 不 支 持 Solaris 平 台 。<br />

• RVCT v3.1 不 再 支 持 Red Hat Linux Enterprise v3 32 位 主 机 平 台 。<br />

• RVCT v3.1 不 支 持 编 译 器 选 项 --apcs=/adsabi。<br />

• RVCT v3.0 不 提 倡 使 用 的 功 能 在 RVCT v3.1 中 不 再 使 用 。 有 关 详 细 信 息 ,<br />

请 参 阅 第 A-12 页 的 RVCT v3.0 中 不 提 倡 使 用 的 功 能 。<br />

<strong>ARM</strong> DUI 0202IC Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. A-3<br />

Unrestricted Access<br />

Non-Confidential


关 于 早 期 版 本<br />

A.1.3<br />

RVCT v3.1 中 不 提 倡 使 用 的 功 能<br />

请 注 意 RVCT v3.1 中 的 以 下 差 异 :<br />

• 不 提 倡 使 用 以 下 工 具 名 称 :<br />

— armcpp<br />

— tcc<br />

— tcpp<br />

• 不 提 倡 使 用 通 过 文 件 扩 展 名 ( 如 .ac 和 .tc) 进 行 的 指 令 集 切 换 。<br />

• 在 针 对 <strong>ARM</strong>v7-A、<strong>ARM</strong>v7-R 和 <strong>ARM</strong>v7-M 或 更 高 版 本 的 体 系 结 构 进 行 编<br />

译 时 , 不 提 倡 使 用 内 联 汇 编 器 。 对 于 <strong>ARM</strong>v7-A 和 <strong>ARM</strong>v7-R, 编 译 器 会 生<br />

成 警 告 。 对 于 <strong>ARM</strong>v6-M 和 <strong>ARM</strong>v7-M, 在 生 成 Thumb 代 码 时 , 编 译 器 会<br />

生 成 错 误 。<br />

• 不 提 倡 使 用 以 下 选 项 :<br />

— --split_ldm<br />

— --memaccess<br />

• 不 提 倡 使 用 C 宏 调 整 语 言 环 境 和 CTYPE。<br />

• 不 提 倡 使 用 fromelf 选 项 --no_comment_section, 文 档 中 已 不 再 包 含 该 选 项 。<br />

应 改 用 --strip=comment 选 项 。<br />

• 不 提 倡 使 用 以 下 汇 编 器 功 能 :<br />

— 在 新 代 码 中 不 提 倡 使 用 VFP 向 量 模 式 , 并 且 统 一 汇 编 语 言 不 支 持 向<br />

量 记 号 。 若 要 使 用 向 量 记 号 , 必 须 使 用 旧 的 VFP 助 记 符 。<br />

— 对 于 更 新 的 CPU, 不 提 倡 使 用 CPSR 访 问 可 在 用 户 模 式 下 访 问 的 位 。<br />

而 应 使 用 APSR。<br />

— 对 于 <strong>ARM</strong>v6T2 及 更 高 版 本 , 在 STC 和 STC2 中 使 用 PC 相 对 的 寻 址 。<br />

— --checkreglist, 改 用 --diag_warning 1206。<br />

— 将 16 位 LDM 和 STM 与 寄 存 器 列 表 中 的 基 址 寄 存 器 一 起 使 用 , 并 指 定 回<br />

写 。<br />

A-4 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0202IC<br />

Non-Confidential<br />

Unrestricted Access


关 于 早 期 版 本<br />

A.1.4<br />

RVCT v3.1 中 <strong>ARM</strong> 编 译 器 的 改 动<br />

请 注 意 RVCT v3.1 中 编 译 器 的 以 下 差 异 :<br />

• --cpu 命 令 行 选 项 支 持 新 的 体 系 结 构 和 处 理 器 。 有 关 详 细 信 息 , 请 参 阅<br />

第 A-2 页 的 RVCT v3.1 概 述 。<br />

• --vectorize 命 令 行 选 项 直 接 从 C 或 C++ 代 码 生 成 NEON 向 量 指 令 。 有 关<br />

详 细 信 息 , 请 参 阅 《 编 译 器 参 考 指 南 》 中 第 2-116 页<br />

的 --[no_]vectorize。<br />

注 意<br />

要 使 用 此 选 项 , 您 必 须 有 NEON 向 量 化 编 译 器 许 可 证 。 该 许 可 证 随 RVDS<br />

Professional 版 一 起 提 供 。<br />

• --c99 命 令 行 选 项 提 供 完 整 的 C99 语 言 支 持 , 复 数 和 宽 I/O 除 外 。<br />

• --library_type=lib 命 令 行 选 项 选 择 相 关 运 行 时 库 。 有 关 详 细 信 息 , 请 参 阅<br />

《 编 译 器 参 考 指 南 》 中 第 2-72 页 的 --library_type=lib。<br />

• --bss_threshold=num 命 令 行 选 项 控 制 小 型 全 局 ZI 数 据 项 布 局 。<br />

• 控 制 优 化 诊 断 消 息 的 --diag_suppress=optimizations 和<br />

--diag_warning=optimizations 命 令 行 选 项 。<br />

• 控 制 变 长 数 组 支 持 的 --[no_]vla 命 令 行 选 项 。<br />

• --wchar16 和 --wchar32 命 令 行 选 项 更 改 wchar_t 类 型 。<br />

• RVCT v3.1 不 支 持 --apcs=/adsabi。<br />

• --[no_]reduce_paths 选 项 控 制 在 文 件 路 径 中 去 除 冗 余 路 径 名 信 息 。<br />

• 提 供 NEON 内 在 函 数 , 以 从 C 和 C++ 生 成 SIMD 指 令 。<br />

• 支 持 对 选 定 的 Texas Instruments C55x 内 在 函 数 的 仿 真 。<br />

• 支 持 实 现 语 音 编 码 的 ETSI 基 本 操 作 。<br />

• __attribute__((section("name"))) 用 于 对 与 --autoat 命 令 行 选 项 结 合 使 用 的<br />

布 局 地 址 进 行 编 码 。<br />

• 提 供 特 定 的 内 在 函 数 , 以 便 使 用 C 和 C++ 轻 松 访 问 基 于 <strong>ARM</strong> 体 系 结 构 的<br />

处 理 器 的 低 级 功 能 。<br />

<strong>ARM</strong> DUI 0202IC Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. A-5<br />

Unrestricted Access<br />

Non-Confidential


关 于 早 期 版 本<br />

A.1.5<br />

RVCT v3.1 中 对 库 支 持 的 改 动<br />

请 注 意 RVCT v3.1 中 的 库 支 持 的 以 下 差 异 :<br />

• RVCT v3.1 有 新 的 库 命 名 约 定 。<br />

• RVCT v3.1 提 供 的 库 支 持 可 用 于 必 须 在 极 少 量 内 存 环 境 下 运 行 的 深 层 嵌 入<br />

式 应 用 程 序 。 Microlib 引 入 了 一 组 新 函 数 , 这 些 函 数 并 不 完 全 遵 从 标 准 ,<br />

但 是 为 尽 量 减 少 代 码 进 行 了 高 度 优 化 。<br />

• RVCT v3.1 提 供 汇 编 器 宏 来 调 整 语 言 环 境 和 CTYPE 函 数 。<br />

另 请 参 阅 :<br />

• 《 库 和 浮 点 支 持 指 南 》<br />

A.1.6<br />

RVCT v3.1 中 <strong>ARM</strong> 链 接 器 的 改 动<br />

请 注 意 RVCT v3.1 中 链 接 器 的 以 下 差 异 :<br />

• --info summarysizes 属 性 汇 总 映 像 代 码 和 数 据 大 小 。<br />

• --cpu=name 命 令 行 选 项 为 选 定 的 <strong>ARM</strong> 处 理 器 或 体 系 结 构 指 定 上 限 。<br />

• --fpu=name 命 令 行 选 项 为 选 定 的 FPU 体 系 结 构 指 定 上 限 。<br />

• --bpabi 命 令 行 选 项 生 成 BPABI 可 执 行 文 件 。<br />

• --dll 命 令 行 选 项 生 成 BPABI DLL。<br />

• --predefine=“string” 命 令 行 选 项 可 将 命 令 传 递 到 在 分 散 文 件 第 一 行 中 指 定<br />

的 预 处 理 器 。<br />

• --[no_]reduce_paths 选 项 控 制 在 文 件 路 径 中 去 除 冗 余 路 径 名 信 息 。<br />

• --autoat 命 令 行 选 项 控 制 __at 节 到 执 行 区 的 自 动 放 置 。<br />

• --verbose 命 令 行 选 项 将 诊 断 输 出 发 送 到 stout。 如 果 要 将 此 信 息 重 定 向 到<br />

文 件 , 则 必 须 使 用 --list。 有 关 详 细 信 息 , 请 参 阅 《 链 接 器 参 考 指 南 》 中<br />

第 2-59 页 的 --verbose。<br />

• 可 通 过 以 下 方 式 将 变 量 分 配 给 __at 节 : 使 用<br />

__attribute__((section("name"))) 显 式 命 令 该 节 , 或 者 使 用<br />

__attribute__((at("name"))) 为 您 设 置 节 的 名 称 。 有 关 详 细 信 息 , 请 参 阅<br />

《 链 接 器 用 户 指 南 》 中 第 5-9 页 的 指 定 区 和 节 地 址 的 示 例 。<br />

A-6 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0202IC<br />

Non-Confidential<br />

Unrestricted Access


关 于 早 期 版 本<br />

• ALIGN alignment 属 性 用 于 在 分 散 加 载 文 件 中 对 齐 边 界 。<br />

• 向 执 行 区 分 配 输 入 节 时 , 使 用 .ANYnum 进 行 优 先 级 排 序 。<br />

• 执 行 区 内 容 的 属 性 :<br />

— ZEROPAD 属 性 在 ELF 文 件 中 对 节 进 行 初 始 化<br />

— 设 置 填 充 字 节 的 值 的 PADVALUE 属 性<br />

— 创 建 一 个 链 接 器 生 成 的 区 , 其 中 包 含 一 个 值 的 FILL 属 性 。<br />

• --pltgot=type、 --pltgot_opts=mode 和 --info pltgot 命 令 行 选 项 生 成 与<br />

BPABI 的 不 同 寻 址 模 式 相 对 应 的 表<br />

• --library_type=lib 命 令 行 选 项 选 择 相 关 运 行 时 库 。 有 关 详 细 信 息 , 请 参 阅<br />

《 编 译 器 参 考 指 南 》 中 第 2-72 页 的 --library_type=lib。<br />

• 调 用 图 选 项 :<br />

— --callgraph_file=filename 定 义 输 出 文 件 的 名 称<br />

— --callgraph_output=fmt 定 义 输 出 文 件 的 类 型<br />

— --cgfile=opt 控 制 调 用 图 的 内 容<br />

— --cgsymbol=type 控 制 调 用 图 的 内 容<br />

— --cgundefined=type 控 制 调 用 图 的 内 容 。<br />

• RVCT v3.1 中 , 链 接 器 解 释 相 对 基 址 加 载 区 的 方 式 稍 有 不 同 。 它 不 再 根 据<br />

前 一 个 加 载 区 中 的 零 初 始 化 (ZI) 数 据 调 整 加 载 区 的 基 址 。<br />

示 例 A-1 显 示 了 一 个 包 含 重 叠 数 据 的 分 散 文 件 。<br />

示 例 A-1 包 含 LR2 的 相 对 基 址 的 分 散 文 件<br />

LR1 0x8000<br />

{<br />

er_progbits +0<br />

{<br />

*(+RO,+RW) ; Takes space in the Load Region<br />

}<br />

er_zi +0<br />

{<br />

*(+ZI) ; Takes no space in the Load Region<br />

}<br />

}<br />

LR2 +0 ; Load Region follows immediately from LR1<br />

{<br />

er_moreprogbits +0<br />

{<br />

<strong>ARM</strong> DUI 0202IC Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. A-7<br />

Unrestricted Access<br />

Non-Confidential


关 于 早 期 版 本<br />

}<br />

}<br />

file1.o(+RO) ; Takes space in the Load Region<br />

如 果 检 测 到 重 叠 , RVCT v3.1 会 生 成 错 误 消 息 。 为 了 纠 正 此 问 题 , 分 散 文<br />

件 中 要 有 一 个 表 达 式 来 计 算 LR2 的 基 址 。 示 例 A-2 显 示 了 更 正 后 的 分 散 文<br />

件 。<br />

示 例 A-2 包 含 计 算 得 到 的 LR2 基 址 的 分 散 文 件<br />

LR1 0x8000<br />

{<br />

er_progbits +0<br />

{<br />

*(+RO,+RW) ; Takes space in the Load Region<br />

}<br />

er_zi +0<br />

{<br />

*(+ZI) ; Takes no space in the Load Region<br />

}<br />

}<br />

LR2 ImageLimit(er_zi) ; Set the address of LR2 to limit of er_zi<br />

{<br />

er_moreprogbits +0<br />

{<br />

file1.o(+RO) ; Takes space in the Load Region<br />

}<br />

}<br />

A.1.7<br />

RVCT v3.1 中 <strong>ARM</strong> 汇 编 器 的 改 动<br />

请 注 意 RVCT v3.1 中 汇 编 器 有 以 下 差 异 :<br />

• --cpu 命 令 行 选 项 支 持 新 的 体 系 结 构 和 处 理 器 。 有 关 详 细 信 息 , 请 参 阅<br />

第 A-2 页 的 RVCT v3.1 概 述 。<br />

• --library_type=lib 命 令 行 选 项 选 择 相 关 运 行 时 库 。<br />

• --[no_]reduce_paths 选 项 控 制 在 文 件 路 径 中 去 除 冗 余 路 径 名 信 息 。<br />

• 将 APSR 用 于 CPSR 的 用 户 模 式 位 。<br />

• 在 新 代 码 中 不 提 倡 使 用 VFP 向 量 模 式 , 统 一 汇 编 语 言 不 支 持 向 量 记 号 。<br />

• 支 持 Intel 无 线 MMX2 指 令 。<br />

A-8 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0202IC<br />

Non-Confidential<br />

Unrestricted Access


关 于 早 期 版 本<br />

• CODEALIGN 属 性 可 在 AREA 指 令 中 设 置 。<br />

• --depend_format=string 可 更 改 输 出 相 关 性 文 件 的 格 式 。<br />

• --no_code_gen 选 项 可 与 --depend 一 起 使 用 , 不 生 成 对 象 文 件 。<br />

• UND 是 一 种 可 对 未 在 体 系 结 构 方 面 定 义 的 指 令 进 行 编 码 的 新 指 令 。<br />

有 关 详 细 信 息 , 请 参 阅 《 汇 编 器 指 南 》。<br />

A.1.8<br />

RVCT v3.1 中 fromelf 实 用 程 序 的 改 动<br />

请 注 意 RVCT v3.1 中 的 以 下 差 异 :<br />

• 更 改 节 名 称 的 --privacy 命 令 行 选 项<br />

• --strip 命 令 行 选 项 保 护 可 交 付 的 映 像 和 对 象 中 的 IP。<br />

另 请 参 阅 :<br />

• 《 实 用 程 序 指 南 》<br />

<strong>ARM</strong> DUI 0202IC Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. A-9<br />

Unrestricted Access<br />

Non-Confidential


关 于 早 期 版 本<br />

A.2 RVCT v3.0 与 RVCT v2.2 之 间 的 差 异<br />

本 节 介 绍 RVCT v3.0 与 RVCT v2.2 之 间 的 差 异 。<br />

A.2.1<br />

RVCT v3.0 中 的 一 般 性 改 动<br />

RVCT v3.0 中 有 以 下 改 动 :<br />

• RVCT v3.0 包 括 对 两 个 <strong>ARM</strong>v7 体 系 结 构 配 置 文 件 的 支 持 :<br />

<strong>ARM</strong>v7-A<br />

支 持 <strong>ARM</strong> 和 Thumb-2 指 令 集 的 系 统 的 应 用 程 序 性 能 信 息 , 具 有<br />

Thumb ® -2EE, 可 用 于 虚 拟 ( 基 于 MMU 的 ) 内 存 系 统 。<br />

<strong>ARM</strong>v7-M<br />

仅 支 持 Thumb-2 的 微 控 制 器 配 置 文 件 。<br />

RVCT v3.0 支 持 <strong>ARM</strong>v4 以 后 的 所 有 <strong>ARM</strong> 体 系 结 构 。 <strong>ARM</strong>v4 之 前 的 所 有<br />

体 系 结 构 名 称 现 已 过 时 , 将 不 再 受 到 支 持 。<br />

• RVCT v3.0 支 持 两 个 <strong>ARM</strong> Cortex 处 理 器 系 列 :<br />

— Cortex -A8<br />

— Cortex -M3<br />

要 查 看 支 持 的 体 系 结 构 和 处 理 器 的 完 整 列 表 , 请 使 用 :<br />

armcc --cpu list<br />

• RVCT v3.0 包 含 对 <strong>ARM</strong>v7 体 系 结 构 的 两 个 组 件 的 初 步 支 持 , 即 高 级 SIMD<br />

扩 展 ( 也 称 为 NEON 技 术 ) 和 VFPv3。 这 表 示 大 量 的 SIMD ( 单 指 令 、<br />

多 数 据 ) 指 令 以 及 某 些 VFPv3 指 令 现 在 都 可 用 在 <strong>ARM</strong> 和 Thumb-2 指 令 集<br />

中 。<br />

NEON 是 针 对 信 号 处 理 应 用 程 序 和 嵌 入 式 处 理 器 的 64/128 位 混 合 SIMD<br />

技 术 。 NEON 作 为 处 理 器 的 一 部 分 来 实 现 , 但 是 它 拥 有 自 己 的 执 行 管 道 ,<br />

以 及 有 别 于 <strong>ARM</strong> 的 寄 存 器 组 。 NEON 指 令 在 <strong>ARM</strong> 和 Thumb-2 中 都 可 用 。<br />

要 查 看 支 持 的 浮 点 体 系 结 构 的 完 整 列 表 , 请 使 用 :<br />

armcc --fpu list<br />

• RVCT v3.0 支 持 <strong>ARM</strong>v7 的 Thumb-2 执 行 环 境 (Thumb-2EE)。 Thumb-2EE<br />

指 令 集 基 于 Thumb-2, 并 更 改 和 增 加 了 一 些 内 容 , 使 其 更 适 用 于 动 态 生 成<br />

的 代 码 。<br />

Thumb-2EE 扩 展 引 入 了 新 的 指 令 集 状 态 , 即 ThumbEE 状 态 。 在 此 状 态<br />

下 , 该 指 令 集 几 乎 与 Thumb-2 指 令 集 完 全 相 同 。 但 有 些 指 令 的 行 为 有 所 修<br />

改 , 并 提 供 了 一 些 新 指 令 。<br />

A-10 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0202IC<br />

Non-Confidential<br />

Unrestricted Access


关 于 早 期 版 本<br />

• <strong>ARM</strong> 汇 编 器 可 用 于 汇 编 Intel ® 无 线 MMX 技 术 指 令 来 开 发 代 码 , 例 如 用<br />

于 PXA270 处 理 器 。<br />

• 按 照 最 新 版 本 的 《<strong>ARM</strong> 体 系 结 构 的 ABI ( 基 本 标 准 )》 [BSABI] 的 要<br />

求 , RVCT v3.0 完 全 支 持 DWARF 3 调 试 表 (DWARF 调 试 标 准 第 3 版 )。<br />

DWARF 3 是 缺 省 格 式 并 且 包 括 :<br />

— 完 全 支 持 调 试 C++ 命 名 空 间<br />

— 调 试 信 息 的 大 小 的 增 加 。<br />

在 此 版 本 的 编 译 器 和 汇 编 器 中 :<br />

— 如 果 您 不 指 定 格 式 , 则 假 定 为 DWARF 3<br />

— 如 果 您 指 定 --debug (-g), 缺 省 情 况 下 , 生 成 DWARF 3。<br />

为 了 向 后 兼 容 , 仍 然 支 持 命 令 行 选 项 --dwarf2。<br />

• <strong>ARM</strong> 编 译 器 和 链 接 器 支 持 线 程 局 部 存 储 (TLS), 使 程 序 可 以 使 用 多 线 程 。<br />

提 供 两 个 新 的 关 键 字 来 支 持 MPCore 上 的 TLS:<br />

— __declspec(thread)<br />

— __thread.<br />

• <strong>ARM</strong> 编 译 器 现 在 提 供 高 级 标 量 优 化 , 包 括 展 开 循 环 。 当 使 用 -O3 进 行 编 译<br />

时 , 会 自 动 调 用 这 些 增 强 功 能 , 这 样 , 以 少 量 的 代 码 大 小 开 销 即 可 获 得 显<br />

著 的 性 能 优 势 。<br />

• 在 RVCT v3.0 中 , 整 数 (int 或 long long) 除 以 零 缺 省 将 返 回 零 。 这 和 以<br />

前 的 行 为 不 同 , 以 前 运 行 时 的 结 果 是 终 止 程 序 , 并 显 示 错 误 消 息 。<br />

• 在 RVCT v3.0 中 , 您 可 以 更 改 错 误 和 警 告 消 息 使 用 的 语 言 。 例 如 , 要 在 基<br />

于 英 语 的 工 作 站 上 显 示 日 语 消 息 , 请 使 用 :<br />

--message_locale ja_JP<br />

• --show_cmdline 选 项 以 前 只 在 <strong>ARM</strong> 编 译 器 中 可 用 , 现 在 可 以 在 汇 编 器 、 链<br />

接 器 、 armar 和 fromelf 中 使 用 。 使 用 此 选 项 可 以 查 看 命 令 行 是 如 何 被 处 理<br />

的 。 命 令 以 标 准 化 方 式 显 示 , 并 展 开 所 有 via 文 件 的 内 容 。 但 使 用 此 选 项<br />

不 会 捕 获 命 令 行 中 的 意 外 错 误 。<br />

• RVCT v3.0 引 入 了 以 下 环 境 变 量 :<br />

— RVCT30_CCOPT<br />

— RVCT30_LINKOPT<br />

— RVCT30_ASMOPT<br />

对 每 个 RVCT, 此 变 量 的 值 将 相 应 地 插 入 到 命 令 行 字 符 串 之 前 。 命 令 行 上<br />

的 参 数 可 覆 盖 环 境 变 量 中 指 定 的 选 项 。<br />

<strong>ARM</strong> DUI 0202IC Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. A-11<br />

Unrestricted Access<br />

Non-Confidential


关 于 早 期 版 本<br />

RVCT v3.0 中 不 再 使 用 的 功 能<br />

RVCT v3.0 中 有 以 下 改 动 :<br />

• RVCT v2.2 中 不 提 倡 使 用 的 所 有 功 能 和 命 令 行 选 项 在 RVCT v3.0 中 不 再 使<br />

用 。 要 查 看 这 些 功 能 和 选 项 的 列 表 , 请 参 阅 《 编 译 器 用 户 指 南 》 中 的 “ 附<br />

录 A: 使 用 旧 命 令 行 选 项 ”。<br />

• 早 期 版 本 的 RVCT 支 持 旧 的 编 译 器 选 项 , 以 便 帮 助 您 将 消 息 选 项 迁 移 到 新<br />

版 本 。 但 这 些 选 项 现 在 已 不 再 使 用 , 也 不 再 受 支 持 。 有 关 详 细 信 息 , 请 参<br />

阅 《 编 译 器 用 户 指 南 》 中 的 “ 附 录 A: 使 用 旧 命 令 行 选 项 ”。<br />

• <strong>ARM</strong> 编 译 器 不 支 持 多 行 字 符 串 。 此 行 为 以 前 在 GNU 模 式 中 受 支 持 , 以 便<br />

向 后 兼 容 。<br />

• 不 再 支 持 以 下 特 定 于 编 译 器 的 编 译 指 令 :<br />

— check_printf_formats、 check_scanf_formats 和 check_vprintf_formats<br />

— [no_]debug<br />

• 不 再 支 持 软 件 堆 栈 检 查 。 在 此 版 本 中 , 不 支 持 以 下 编 译 器 和 汇 编 器 选 项 :<br />

— --apcs /swst<br />

— --apcs /noswst<br />

— --apcs /swstna<br />

以 下 内 容 不 再 可 用 :<br />

— 编 译 指 示 [no_]check_stack<br />

— 预 定 义 宏 __APCS_SWST<br />

不 再 提 供 库 的 软 件 堆 栈 检 查 的 版 本 。<br />

RVCT v3.0 中 不 提 倡 使 用 的 功 能<br />

RVCT v3.0 中 有 以 下 改 动 :<br />

• <strong>ARM</strong> 编 译 器 支 持 使 用 选 项 --apcs /adsabi 来 编 译 与 旧 的 <strong>ARM</strong> Developer<br />

Suite (ADS) 应 用 程 序 二 进 制 接 口 (ABI) 兼 容 的 代 码 。 RVCT 3.0 中 不 提 倡<br />

这 样 做 , 而 在 RVCT 3.1 中 已 取 消 这 种 做 法 。<br />

• 以 下 是 不 提 倡 使 用 的 汇 编 器 选 项 , RVCT 3.1 中 已 取 消 这 些 选 项 :<br />

— --no_cache<br />

— --no_regs ( 改 为 使 用 --regnames=none)<br />

— --checkreglist ( 改 为 使 用 --diag_warning 1206)<br />

A-12 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0202IC<br />

Non-Confidential<br />

Unrestricted Access


关 于 早 期 版 本<br />

• 不 提 倡 将 节 属 性 限 定 符 (RO、 RW、 ZI、 DBG) 与 链 接 器 选 项 --remove 一 起<br />

使 用 , 将 在 以 后 的 版 本 中 删 除 。<br />

• C++ 配 置 选 项 --dll_vtbl 已 由 新 的 --export_all_vtbl 选 项 取 代 。 不 提 倡 使<br />

用 --dll_vtbl, 并 且 以 后 将 不 再 支 持 该 选 项 。<br />

• 不 提 倡 使 用 --memaccess -UL41, 将 在 以 后 的 版 本 中 删 除 。 --memaccess -UL41<br />

被 --no_unaligned_access 替 代 。<br />

• 编 译 器 选 项 --depend_format=unix 替 代 了 --unix_depend_format。 此 选 项 不 提<br />

倡 使 用 , 将 在 以 后 的 版 本 中 删 除 。<br />

• 在 RVCT v3.0 中 ,fromelf --text 的 语 法 有 所 不 同 。 以 下 形 式 不 提 倡 使 用 ,<br />

将 在 以 后 的 版 本 中 删 除 :<br />

— fromelf --text=xx<br />

— fromelf --text/xx<br />

• <strong>ARM</strong> 不 建 议 使 用 __user_stack_slop 函 数 。 此 选 项 不 提 倡 使 用 , 将 在 以 后 的<br />

版 本 中 删 除 。<br />

A.2.2<br />

RVCT v3.0 中 <strong>ARM</strong> 编 译 器 的 改 动<br />

RVCT v3.0 中 有 以 下 改 动 :<br />

• 作 为 RVCT v3.0 中 新 的 可 移 植 性 功 能 的 一 部 分 , 新 的 编 译 器 选 项<br />

--library_interface 指 定 将 编 译 器 输 出 和 RVCT 库 或 任 何 符 合 AEABI 的 库<br />

一 起 使 用 。 例 如 , 使 用 --library_interface=aeabi_glibc 将 指 定 输 出 与 符 合<br />

AEABI 的 某 版 本 GNU C 库 一 起 使 用 。<br />

• <strong>ARM</strong> 编 译 器 现 在 支 持 线 程 局 部 存 储 (TLS), 使 程 序 可 以 使 用 多 线 程 。 使 用<br />

TLS, 每 个 线 程 可 以 修 改 全 局 变 量 , 但 更 改 仅 对 线 程 可 见 。 提 供 两 个 关 键<br />

字 :<br />

— __declspec(thread) 声 明 变 量 是 线 程 局 部 变 量 , 并 具 有 线 程 存 储 时 限<br />

— __thread 相 当 于 __declspec(thread)。<br />

• <strong>ARM</strong>v7 之 前 的 <strong>ARM</strong> 处 理 器 使 用 SWI 或 SVC 指 令 来 进 行 半 主 机 调 用 。 不 过 ,<br />

如 果 为 Cortex -M3 处 理 器 进 行 编 译 , 则 会 使 用 BKPT 指 令 实 现 半 主 机 。<br />

使 用 新 的 __semihost() 内 在 函 数 , 您 可 以 从 与 目 标 体 系 结 构 无 关 的 C 或<br />

C++ 进 行 半 主 机 调 用 。<br />

• <strong>ARM</strong> 编 译 器 提 供 内 在 函 数 来 为 Cortex -A8 处 理 器 生 成 <strong>ARM</strong> 和 Thumb 状<br />

态 下 的 代 码 , 从 而 支 持 NEON 技 术 。<br />

<strong>ARM</strong> DUI 0202IC Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. A-13<br />

Unrestricted Access<br />

Non-Confidential


关 于 早 期 版 本<br />

• <strong>ARM</strong> 编 译 器 支 持 GCC builtin 函 数 __builtin_expect, 当 以 反 馈 为 导 向 的<br />

优 化 不 切 实 际 时 提 供 跳 转 预 测 信 息 。 此 函 数 在 GNU 模 式 和 <strong>ARM</strong> 模 式 下 可<br />

用 。<br />

• <strong>ARM</strong> 编 译 器 包 括 --info totals 选 项 , 用 于 显 示 对 象 大 小 。 使 用 此 选 项 可<br />

以 查 看 编 译 的 对 象 中 代 码 和 数 据 (RO 数 据 、 RW 数 据 、 ZI 数 据 和 调 试 数<br />

据 ) 的 大 小 。<br />

• 编 译 器 包 括 可 在 Windows 上 使 用 的 新 的 --depend_format=string 选 项 。 此 选<br />

项 将 输 出 相 关 性 文 件 的 格 式 更 改 为 UNIX 风 格 , 以 便 与 某 些 UNIX make 程<br />

序 兼 容 。<br />

• <strong>ARM</strong> 编 译 器 现 在 可 以 识 别 C++ 文 件 的 .cc 扩 展 名 。 当 有 以 .c 开 头 的 无 法<br />

识 别 的 扩 展 名 时 , 将 发 出 警 告 , 例 如 filename.cmd。<br />

• 作 为 <strong>ARM</strong> 对 GNU 编 译 器 扩 展 的 支 持 的 一 部 分 , armcc 现 在 在 使 用 --gnu<br />

选 项 时 接 受 C 和 C++ 语 言 的 条 件 。 如 果 结 果 与 测 试 相 同 , 则 条 件 语 句 中 的<br />

中 间 操 作 数 可 以 忽 略 , 例 如 :<br />

i ? i : j<br />

如 果 测 试 以 某 种 方 式 修 改 了 值 , 则 这 是 尤 其 有 用 的 , 因 为 只 需 计 算 一 次<br />

i。<br />

• RVCT v3.0 包 含 对 POSIX 函 数 wcstombs() 的 编 译 器 和 库 支 持 , 以 便 转 换 来<br />

自 一 个 数 组 的 多 字 节 字 符 序 列 , 然 后 将 这 些 字 符 存 储 到 其 他 数 组 中 。<br />

• <strong>ARM</strong> 编 译 器 支 持 选 项 --unaligned_access ( 此 选 项 替 代 了 不 提 倡 使 用 的 选<br />

项 --memaccess)。<br />

• AAPCS 不 再 要 求 位 域 缺 省 为 无 符 号 。 因 此 , 增 加 了 一 个 新 的 选 项<br />

--signed_bitfields, 用 于 指 定 位 域 是 有 符 号 的 。 缺 省 为<br />

--unsigned_bitfields。<br />

• 以 前 ,<strong>ARM</strong> 编 译 器 为 目 的 地 址 未 知 的 任 何 符 号 生 成 .directive 节 。 此 要 求<br />

已 被 ELF 标 准 机 制 取 代 。 这 表 示 使 用 dllimport 导 入 的 符 号 的 行 为 可 能 有<br />

所 改 变 。 例 如 :<br />

__declspec(dllimport) int f();<br />

int g() { return f(); }<br />

不 生 成 任 何 .directive 节 。<br />

• 编 译 器 提 供 新 的 __user_setup_stackheap() 函 数 , 该 函 数 采 用 与<br />

__user_initial_stackheap() 相 同 的 方 式 返 回 初 始 堆 栈 和 堆 的 位 置 。<br />

__user_setup_stackheap() 减 小 了 代 码 大 小 ( 优 于<br />

__user_initial_stackheap()), 因 为 不 需 要 临 时 堆 栈 。<br />

A-14 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0202IC<br />

Non-Confidential<br />

Unrestricted Access


关 于 早 期 版 本<br />

• <strong>ARM</strong> 编 译 器 现 在 支 持 命 令 行 选 项 --diag_style gnu, 以 显 示 与 gcc 报 告 的 格<br />

式 相 匹 配 的 消 息 。 这 是 对 早 期 版 本 中 使 用 的 arm 和 ide 格 式 的 增 补 。<br />

• 现 在 , 嵌 入 式 汇 编 器 在 每 个 函 数 开 始 时 的 状 态 由 编 译 器 的 调 用 来 设 置 , 并<br />

由 #pragma arm 和 #pragma thumb 编 译 指 示 来 修 饰 。<br />

通 过 在 嵌 入 式 汇 编 器 函 数 中 使 用 显 式 <strong>ARM</strong>、 THUMB 或 CODE16 指 令 , 您 还 可 以<br />

在 函 数 中 更 改 嵌 入 式 汇 编 器 的 状 态 , 仅 限 当 前 函 数 。<br />

A.2.3<br />

RVCT v3.0 中 库 支 持 的 改 动<br />

RVCT v3.0 中 有 以 下 改 动 :<br />

• 《<strong>ARM</strong> 体 系 结 构 的 C 库 ABI》[CLIBABI] 描 述 了 由 编 译 器 检 查 的 一 致 性 测<br />

试 _AEABI_PORTABILITY_LEVEL。 使 用 它 可 以 提 高 您 的 代 码 到 CLIBABI 的 其 他<br />

实 现 的 可 移 植 性 。<br />

• 最 新 版 本 的 《<strong>ARM</strong> 体 系 结 构 的 ABI ( 基 本 标 准 )》 [BSABI] 纠 正 了<br />

assert() 宏 的 定 义 中 的 一 个 缺 陷 , 并 要 求 遵 守 信 号 一 致 性 。 现 在 , 它 定 义<br />

为 __aeabi_assert()。 有 关 详 细 信 息 , 请 参 阅 assert.h。<br />

• RVCT v3.0 为 线 程 安 全 的 字 符 串 函 数 strlcpy 和 strlcat 提 供 了 库 支 持 。<br />

• RVCT v3.0 包 括 __user_initial_stackheap() 的 新 的 库 实 现 。 这 表 示 如 果 您<br />

使 用 包 含 <strong>ARM</strong>_LIB_STACK、 <strong>ARM</strong>_LIB_HEAP 和 / 或 <strong>ARM</strong>_LIB_STACKHEAP 指 令 的 分 散<br />

加 载 文 件 , 则 不 需 要 重 新 实 现 此 函 数 。<br />

• RVCT v3.0 中 有 了 新 的 库 机 制 , 在 这 种 机 制 中 , 当 代 码 引 用 诸 如<br />

__use_no_heap 或 __use_no_semihosting 等 __use_no_* 符 号 时 , 如 果 检 测 到 符<br />

号 冲 突 , 错 误 消 息 可 以 提 供 更 多 信 息 。<br />

• 为 了 完 全 符 合 POSIX, armar 不 再 接 受 不 带 - 前 缀 的 命 令 行 选 项 。 这 表 示<br />

如 下 形 式 的 命 令 :<br />

armar cru lib.a foo.o<br />

是 错 误 的 。 如 果 您 使 用 早 期 版 本 的 RVCT 的 编 译 脚 本 或 makefile, 则 这 些<br />

命 令 可 能 需 要 更 改 。<br />

• armar 现 在 支 持 命 令 行 选 项 --diag_style gnu, 以 显 示 与 gcc 报 告 的 格 式 相 匹<br />

配 的 消 息 。 这 是 对 早 期 版 本 中 使 用 的 arm 和 ide 格 式 的 增 补 。<br />

<strong>ARM</strong> DUI 0202IC Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. A-15<br />

Unrestricted Access<br />

Non-Confidential


关 于 早 期 版 本<br />

A.2.4<br />

RVCT v3.0 中 <strong>ARM</strong> 链 接 器 的 改 动<br />

RVCT v3.0 中 有 以 下 改 动 :<br />

• 在 当 前 版 本 中 , 链 接 器 仅 支 持 SVr4 映 像 和 共 享 库 的 线 程 局 部 存 储 (TLS)。<br />

有 关 链 接 器 实 现 的 完 整 信 息 , 请 参 阅 <strong>ARM</strong> 体 系 结 构 的 ABI 附 录 和 勘 误 表<br />

[ABI 附 录 ]。<br />

• RVCT v3.0 包 括 新 的 链 接 器 选 项 --compress_debug, 它 强 制 压 缩 .debug_*<br />

节 , 以 便 消 除 一 些 冗 余 以 及 减 少 调 试 表 大 小 。 但 使 用 --compress_debug 选<br />

项 将 导 致 链 接 时 间 延 长 。<br />

• RVCT v3.0 包 括 新 的 链 接 器 选 项 --info libraries, 它 可 以 输 出 为 链 接 阶 段<br />

自 动 选 择 的 每 个 库 的 完 整 路 径 名 称 。 可 以 将 此 选 项 与 修 饰 符<br />

--info_lib_prefix 一 起 使 用 , 以 显 示 有 关 特 定 库 的 信 息 。<br />

• RVCTv3.0 包 含 新 的 链 接 器 选 项 --no_legacyalign, 在 放 置 节 时 强 制 链 接 器<br />

使 用 自 然 对 齐 。<br />

• RVCT v3.0 包 括 新 的 链 接 器 选 项 --dynamic_debug, 强 制 链 接 器 输 出 调 试 节<br />

的 动 态 重 定 位 。<br />

• RVCT v3.0 包 括 新 的 链 接 器 选 项 --show_cmdline, 查 看 链 接 器 如 何 处 理 命 令<br />

行 。<br />

• <strong>ARM</strong> 链 接 器 现 在 支 持 命 令 行 选 项 --diag_style gnu, 以 显 示 与 gcc 报 告 的 格<br />

式 相 匹 配 的 消 息 。 这 是 对 早 期 版 本 中 使 用 的 arm 和 ide 格 式 的 增 补 。<br />

A.2.5<br />

RVCT v3.0 中 <strong>ARM</strong> 汇 编 器 的 改 动<br />

RVCT v3.0 中 有 以 下 改 动 :<br />

• RVCT v3.0 支 持 <strong>ARM</strong>v7 的 Thumb-2 执 行 环 境 (Thumb-2EE) 体 系 结 构 扩<br />

展 。 此 项 扩 展 基 于 Thumb-2。 关 键 区 别 是 :<br />

— 新 的 ENTERX 和 LEAVEX 状 态 更 改 指 令 , 可 用 在 Thumb 状 态 和 新 的<br />

ThumbEE 状 态 中<br />

— 新 的 HB、 HBL、 HBLP 和 HBP 指 令 , 用 于 跳 转 至 处 理 程 序<br />

— 空 指 针 , 用 于 检 查 加 载 和 存 储<br />

— ThumbEE 状 态 下 额 外 的 CHKA 指 令 , 用 于 检 查 数 组 边 界<br />

— 对 加 载 、 存 储 和 跳 转 指 令 (BX、 BLX 和 BXJ) 的 某 些 其 他 修 改 。<br />

A-16 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0202IC<br />

Non-Confidential<br />

Unrestricted Access


关 于 早 期 版 本<br />

• RVCT v3.0 包 括 对 <strong>ARM</strong>v7 体 系 结 构 的 两 个 组 件 的 初 步 支 持 , 它 们 是 高 级<br />

SIMD 扩 展 和 VFPv3。<br />

高 级 SIMD 扩 展 包 括 :<br />

— 高 级 SIMD 寄 存 器 。 它 们 与 VFPv3 寄 存 器 组 相 同 , 不 过 被 看 作 32 个<br />

64 位 寄 存 器 或 16 个 128 位 寄 存 器 。<br />

— 将 高 级 SIMD 寄 存 器 作 为 元 素 的 向 量 来 处 理 的 大 量 新 指 令 。<br />

这 些 新 指 令 可 用 在 <strong>ARM</strong> 和 Thumb-2 指 令 集 中 。<br />

VFPv3 与 VFPv2 相 比 有 以 下 增 强 功 能 :<br />

— 将 VFPv2 寄 存 器 组 大 幅 扩 展 至 32 个 64 位 寄 存 器 , 是 以 前 的 VFP 寄<br />

存 器 组 的 一 倍 。 这 些 寄 存 器 不 包 括 主 要 的 <strong>ARM</strong> 通 用 寄 存 器 。<br />

— 多 个 新 的 指 令 可 以 高 效 地 加 载 大 量 的 常 用 浮 点 数 , 以 及 高 效 地 转 换<br />

浮 点 和 定 点 格 式 。<br />

这 些 新 指 令 可 用 在 <strong>ARM</strong> 和 Thumb-2 指 令 集 中 。<br />

• 作 为 <strong>ARM</strong> 对 高 级 SIMD 指 令 的 支 持 的 一 部 分 , 浮 点 状 态 和 控 制 寄 存 器<br />

(FPSCR) 的 第 27 位 现 在 被 保 留 为 累 积 标 记 , 以 便 指 示 饱 和 整 数 运 算 时 是<br />

否 发 生 饱 和 。<br />

• <strong>ARM</strong> 汇 编 器 可 用 于 汇 编 Intel 无 线 MMX 技 术 指 令 , 以 便 为 PXA270 处 理<br />

器 开 发 代 码 。 引 入 了 两 个 新 指 令 , 加 载 / 存 储 指 令 的 语 法 更 改 为 支 持 符 号<br />

和 文 字 。<br />

• 使 用 以 下 选 项 将 输 出 以 列 表 形 式 写 入 文 件 :<br />

--list file<br />

如 果 未 指 定 file, 则 使 用 --list= 将 输 出 发 送 到 inputfile.lst。<br />

注 意<br />

您 可 以 使 用 --list 将 输 出 发 送 到 .lst 文 件 。 不 过 , 不 提 倡 使 用 此 语 法 , 汇<br />

编 器 将 发 出 警 告 。<br />

• 引 入 了 两 个 新 指 令 :<br />

— RELOC, 在 对 象 文 件 中 对 ELF 重 定 位 进 行 编 码<br />

— QN, 定 义 指 定 NEON 四 字 寄 存 器 的 名 称 。<br />

• <strong>ARM</strong> 汇 编 器 现 在 支 持 命 令 行 选 项 --diag_style gnu, 以 显 示 与 gcc 报 告 的 格<br />

式 相 匹 配 的 消 息 。 这 是 对 早 期 版 本 中 使 用 的 arm 和 ide 格 式 的 增 补 。<br />

• 使 用 armasm --debug 时 不 再 保 留 局 部 符 号 。 如 果 要 保 留 局 部 符 号 来 辅 助 调<br />

试 , 必 须 指 定 --keep。<br />

<strong>ARM</strong> DUI 0202IC Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. A-17<br />

Unrestricted Access<br />

Non-Confidential


关 于 早 期 版 本<br />

• 在 RVCT v2.2 中 , 在 Thumb 汇 编 器 代 码 中 将 LDR 伪 指 令 与 局 部 标 签 一 起 使<br />

用 会 生 成 一 个 没 有 设 置 Thumb 位 的 地 址 。 如 果 希 望 您 的 代 码 具 有 此 行 为 ,<br />

则 使 用 armasm --untyped_local_labels。<br />

A.2.6<br />

RVCT v3.0 中 fromelf 实 用 程 序 的 改 动<br />

RVCT v3.0 中 有 以 下 改 动 :<br />

• Fromelf 实 用 程 序 现 在 支 持 --debugonly 选 项 , 用 于 删 除 ELF 输 出 文 件 中 的<br />

代 码 和 数 据 节 。<br />

• 在 RVCT v3.0 中 ,fromelf --text 的 语 法 有 所 不 同 。 以 下 形 式 不 提 倡 使 用 ,<br />

将 在 以 后 的 版 本 中 删 除 :<br />

— fromelf --text=xx<br />

— fromelf --text/xx<br />

• RVCT v3.0 包 括 新 的 fromelf 选 项 --show_cmdline, 用 于 查 看 fromelf 实 用 程<br />

序 如 何 处 理 命 令 行 。<br />

• fromelf 实 用 程 序 现 在 支 持 命 令 行 选 项 --diag_style gnu, 以 显 示 与 gcc 报 告<br />

的 格 式 相 匹 配 的 消 息 。 这 是 对 早 期 版 本 中 使 用 的 arm 和 ide 格 式 的 增 补 。<br />

A-18 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0202IC<br />

Non-Confidential<br />

Unrestricted Access


关 于 早 期 版 本<br />

A.3 RVCT v2.2 SP1 和 RVCT v2.2 之 间 的 差 异<br />

本 节 介 绍 随 <strong>RealView</strong> Developer Suite v2.2 Service Pack 1 (SP1) 提 供 的 RVCT v2.2<br />

与 早 期 版 本 之 间 的 差 异 。<br />

差 异 如 下 :<br />

• RVCT v2.2 SP1 包 括 对 <strong>ARM</strong>1136J(F)-S-rev-1 内 核 的 支 持 。 要 查 看 支 持 的<br />

内 核 的 完 整 列 表 , 请 使 用 :<br />

armcc --cpu list<br />

• 在 编 译 共 享 对 象 时 , <strong>ARM</strong> 链 接 器 提 供 新 的 选 项 , 即 使 用 :<br />

— --pt_arm_exidx 来 创 建 一 个 描 述 异 常 表 的 位 置 的 PT_<strong>ARM</strong>_EXIDX 程 序 头<br />

文 件 。 链 接 器 假 定 包 含 PT_<strong>ARM</strong>_EXIDX 程 序 头 文 件 的 共 享 对 象 可 能 引 发<br />

异 常 。<br />

— --force_so_throw, 强 制 链 接 器 假 定 所 有 共 享 对 象 可 能 引 发 异 常 。<br />

有 关 这 些 命 令 行 选 项 的 详 细 信 息 , 请 参 阅 《 链 接 器 和 实 用 程 序 指 南 》 中<br />

描 述 System V 共 享 库 的 一 章 。<br />

• 支 持 预 处 理 指 令 #warning。 此 指 令 在 编 译 时 生 成 用 户 定 义 的 警 告 , 但 不 会<br />

暂 停 编 译 。<br />

• 支 持 关 键 字 __restrict 和 __restrict__, 作 为 restrict 的 同 义 词 。 在 此 版 本<br />

中 , 两 个 关 键 字 可 以 在 所 有 模 式 中 使 用 ( 而 不 仅 是 --restrict)。<br />

• deprecated 函 数 属 性 在 GNU 模 式 和 <strong>ARM</strong> 模 式 中 支 持 :<br />

int Function_Attributes_deprecated_0(int b) __attribute__ ((deprecated));<br />

• fromelf 实 用 程 序 现 在 支 持 --no_comment_section 选 项 , 用 于 删 除 ELF 输 出<br />

文 件 中 的 .comment 节 。<br />

• 编 译 器 选 项 --enum_is_int 的 存 储 类 型 选 择 已 更 改 。 如 果 枚 举 器 的 范 围 大 于<br />

signed int 的 范 围 , 但 在 unsigned int 的 范 围 内 , 则 enum 的 存 储 类 型 现 在 是<br />

unsigned int。<br />

例 如 :<br />

enum E { k = 0x8000000 }; /* is treated as unsigned int */<br />

<strong>ARM</strong> DUI 0202IC Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. A-19<br />

Unrestricted Access<br />

Non-Confidential


关 于 早 期 版 本<br />

• 作 为 <strong>ARM</strong> 汇 编 语 言 开 发 的 一 部 分 ,SWI 指 令 已 重 命 名 为 SVC ( 超 级 用 户 调<br />

用 )。<br />

指 令 被 反 汇 编 为 SVC, 并 提 供 注 释 指 明 这 是 以 前 的 SWI。 例 如 , fromelf<br />

--text -c 生 成 :<br />

...<br />

0x00000fbc: e3a00010 .... MOV r0,#0x10<br />

0x00000fc0: ef123456 V4.. SVC 0x123456 ; formerly SWI<br />

...<br />

A-20 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0202IC<br />

Non-Confidential<br />

Unrestricted Access


关 于 早 期 版 本<br />

A.4 RVCT v2.2 和 RVCT 2.1 版 之 间 的 差 异<br />

本 节 介 绍 RVCT v2.2 与 RVCT v2.1 之 间 的 差 异 。<br />

A.4.1<br />

RVCT v2.2 中 的 一 般 性 改 动<br />

RVCT v2.2 中 有 以 下 改 动 。<br />

• RVCT v2.2 支 持 新 的 Thumb ® -2 指 令 集 。 Thumb-2 引 入 了 许 多 新 的 32 位 指<br />

令 , 以 及 一 些 新 的 16 位 指 令 。 在 支 持 它 的 处 理 器 上 ( 如<br />

<strong>ARM</strong>1156T2(F)-S), Thumb-2 可 提 供 与 <strong>ARM</strong> 接 近 的 性 能 以 及 与 原 始<br />

Thumb 类 似 的 代 码 大 小 。<br />

Thumb-2 指 令 集 包 括 旧 的 16 位 Thumb 指 令 , 作 为 子 集 。<br />

• RVCT v2.2 支 持 新 的 <strong>ARM</strong>v6 内 核 , 例 如 <strong>ARM</strong>1176JZ(F)-S ( 采 用 了 经<br />

<strong>ARM</strong> TrustZone 技 术 优 化 的 软 件 )、 <strong>ARM</strong>968EJ-S、 <strong>ARM</strong>1156T2(F)-S 和<br />

<strong>ARM</strong> MPCore 。<br />

RVCT v2.2 汇 编 器 提 供 对 MPCore 指 令 的 支 持 。<br />

• RVCT v2.2 支 持 新 的 汇 编 器 语 法 , 同 时 继 续 支 持 旧 的 语 法 , 以 便 可 以 汇 编<br />

遗 留 代 码 。<br />

• RVCT v2.2 与 《<strong>ARM</strong> 《 体 系 结 构 的 基 本 平 台 ABI》 [BPABI] 完 全 兼 容 ,<br />

因 此 可 以 支 持 一 系 列 的 操 作 系 统 , 例 如 <strong>ARM</strong> Linux 和 Symbian OS。<br />

• 按 照 《<strong>ARM</strong> 体 系 结 构 的 ABI( 基 本 标 准 )》[BSABI] 的 规 定 ,RVCT v2.2<br />

初 步 支 持 DWARF 3 ( 标 准 草 案 9) 调 试 表 。 现 在 提 供 一 个 新 的 命 令 行 选<br />

项 --dwarf3, 用 于 在 编 译 代 码 时 指 定 此 格 式 。<br />

• 命 令 行 选 项 --debug 或 -g 可 以 指 定 是 否 为 当 前 编 译 生 成 调 试 表 。 优 化 选 项<br />

由 -Onum 指 定 。 缺 省 情 况 下 , 使 用 --debug 或 -g 选 项 不 会 影 响 优 化 设 置 。<br />

这 是 RVCT v2.2 中 的 行 为 改 动 ( 单 独 使 用 --debug 或 -g 相 当 于 在 RVCT<br />

v2.1 中 使 用 [--debug|-g] -O0)。 除 此 新 的 缺 省 行 为 外 , 优 化 选 项 ( 即<br />

-Onum、-Ospace 或 -Otime) 的 行 为 没 有 改 动 。<br />

• RVCT v2.2 支 持 命 令 行 选 项 --apcs /fpic, 用 于 编 译 与 System V 共 享 库 兼<br />

容 的 代 码 。 使 用 此 选 项 可 以 生 成 只 读 的 、 与 位 置 无 关 的 代 码 , 其 中 相 对 地<br />

址 引 用 与 程 序 被 加 载 的 位 置 无 关 。<br />

• <strong>ARM</strong> 链 接 器 支 持 生 成 共 享 库 以 及 链 接 到 共 享 库 。 提 供 新 的 命 令 行 选 项 来<br />

生 成 SVr4 可 执 行 文 件 和 共 享 对 象 , 以 及 指 定 生 成 代 码 的 方 式 。<br />

<strong>ARM</strong> DUI 0202IC Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. A-21<br />

Unrestricted Access<br />

Non-Confidential


关 于 早 期 版 本<br />

• <strong>ARM</strong> 链 接 器 符 合 《<strong>ARM</strong> 体 系 结 构 的 基 本 平 台 ABI》 [BPABI], 以 及 支 持<br />

经 GNU 扩 展 的 符 号 版 本 模 型 。<br />

• 浮 点 数 计 算 的 <strong>ARM</strong> 实 现 已 更 改 , 改 进 了 对 C99 函 数 的 支 持 。 在 此 更 改 显<br />

著 改 变 行 为 的 情 形 中 , 引 入 了 兼 容 模 式 , 以 辅 助 开 发 人 员 迁 移 代 码 以 使 用<br />

新 的 功 能 。 有 关 详 细 信 息 , 请 参 阅 第 A-26 页 的 RVCT v2.2 中 库 支 持 的 改<br />

动 。<br />

• <strong>ARM</strong> 编 译 器 C 实 现 已 更 改 , 现 在 对 超 出 范 围 的 枚 举 器 值 发 出 警 告 。 这 些<br />

值 的 处 理 方 式 与 在 C++ 中 相 同 。 这 表 示 当 您 升 级 到 最 新 版 本 的 RVCT 时 ,<br />

具 有 超 范 围 值 的 enum 类 型 的 大 小 可 能 与 C 中 的 大 小 不 同 。<br />

如 果 您 使 用 C++ 或 命 令 行 选 项 --enum_is_int、--strict 或<br />

--strict_warnings, 则 没 有 变 化 。 有 关 详 细 信 息 , 请 参 阅 第 A-24 页 的 RVCT<br />

v2.2 中 <strong>ARM</strong> 编 译 器 的 改 动 。<br />

• <strong>ARM</strong> 库 已 增 强 , 改 进 了 对 多 线 程 的 支 持 。 它 的 目 的 是 为 了 帮 助 使 用 基 于<br />

RTOS 的 系 统 的 开 发 人 员 。<br />

• <strong>ARM</strong> 编 译 器 提 供 新 的 选 项 , 以 更 好 地 控 制 动 态 符 号 的 导 出 方 式 :<br />

— --dllexport_all<br />

— --no_hide_all<br />

• <strong>ARM</strong> 链 接 器 可 以 执 行 RVCT 的 其 他 组 件 不 可 用 的 某 些 跳 转 优 化 。 提 供 两<br />

个 新 的 命 令 行 选 项 来 处 理 尾 调 用 节 , 在 节 的 尾 部 优 化 跳 转 指 令 。<br />

• RVCT v2.1 中 不 提 倡 使 用 的 选 项 在 v2.2 中 现 已 不 再 使 用 ( 请 参 阅 RVCT<br />

v2.2 中 不 再 使 用 的 功 能 )。<br />

• RVCT v2.1 中 支 持 的 某 些 选 项 在 v2.2 中 已 不 提 倡 使 用 ( 请 参 阅 第 A-24 页<br />

的 RVCT v2.2 中 不 提 倡 使 用 的 功 能 )。<br />

RVCT v2.2 中 不 再 使 用 的 功 能<br />

RVCT v2.2 中 有 以 下 改 动 :<br />

• RVCT v2.1 中 不 提 倡 使 用 的 所 有 功 能 和 选 项 在 RVCT v2.2 中 已 不 再 使 用 ,<br />

这 些 功 能 和 选 项 有 :<br />

— 传 统 的 软 件 开 发 工 具 包 (SDT) 格 式 ( 如 <strong>ARM</strong> 对 象 格 式 (AOF) 和 )<br />

<strong>ARM</strong> 库 格 式 (ALF) 格 式 的 库 。<br />

— 对 关 键 字 使 用 单 短 线 , 例 如 armlink -help。<br />

— 编 译 器 选 项 -ansi 和 -ansic。<br />

A-22 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0202IC<br />

Non-Confidential<br />

Unrestricted Access


关 于 早 期 版 本<br />

• RVCT v2.1 中 不 提 倡 使 用 的 旧 编 译 器 选 项 名 称 在 RVCT v2.2 中 已 不 再 使<br />

用 , 例 如 -fy、-fd、-Ec 和 -zo。<br />

当 存 在 优 先 使 用 的 选 项 名 称 时 , 编 译 器 会 发 出 警 告 , 例 如 :<br />

armcc -zo<br />

Warning: X0010W: Old syntax, please use '--split_sections'.<br />

要 查 看 这 些 功 能 和 选 项 的 列 表 , 请 参 阅 《 编 译 器 用 户 指 南 》 中 的 “ 附<br />

录 A: 使 用 旧 命 令 行 选 项 ”。<br />

• 不 再 使 用 某 些 旧 的 <strong>ARM</strong> 处 理 器 和 体 系 结 构 :<br />

— <strong>ARM</strong>6<br />

— <strong>ARM</strong>v3 和 <strong>ARM</strong>v3M<br />

要 查 看 支 持 的 内 核 的 完 整 列 表 , 请 使 用 :<br />

armcc --cpu list<br />

• 不 再 使 用 某 些 旧 的 浮 点 体 系 结 构 :<br />

— VFPv1 ( 缺 省 为 VFPv2)<br />

— FPA<br />

— 软 件 FPA<br />

除 非 另 行 指 定 , 否 则 缺 省 为 软 件 VFP。<br />

要 查 看 支 持 的 浮 点 体 系 结 构 的 完 整 列 表 , 请 使 用 :<br />

armcc --fpu list<br />

• 以 下 编 译 器 选 项 不 再 使 用 :<br />

— --fpu fpa、--fpu softfpa 和 --fpu vfpv1<br />

— --fa<br />

— --cpu 3 和 --cpu 3M<br />

— -Oldrd 和 -Ono_ldrd<br />

— -Wletter 和 -Eletter<br />

• 不 支 持 SXT 和 UXT 指 令 ( 符 号 扩 展 或 零 扩 展 ) 的 同 义 词 。<br />

• 不 再 使 用 FPA 寄 存 器 f0-f7 和 F0-F7。<br />

• 不 支 持 使 用 环 境 变 量 RVCT21_CLWARN 来 对 不 提 倡 的 选 项 发 出 警 告 。<br />

<strong>ARM</strong> DUI 0202IC Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. A-23<br />

Unrestricted Access<br />

Non-Confidential


关 于 早 期 版 本<br />

RVCT v2.2 中 不 提 倡 使 用 的 功 能<br />

RVCT v2.2 中 有 以 下 改 动 :<br />

• 编 译 器 支 持 选 项 --apcs /adsabi 来 编 译 与 旧 的 <strong>ARM</strong> Developer Suite (ADS)<br />

应 用 程 序 二 进 制 接 口 (ABI) 兼 容 的 代 码 。 此 选 项 不 提 倡 使 用 , 将 在 以 后 的<br />

版 本 中 删 除 。<br />

• <strong>ARM</strong> 链 接 器 和 fromelf 接 受 两 种 形 式 的 否 定 选 项 , 例 如 --no_debug 和<br />

--nodebug。 但 不 提 倡 使 用 非 标 准 形 式 , 并 且 以 后 将 不 再 支 持 非 标 准 形 式 ,<br />

例 如 --nodebug。 如 果 您 使 用 不 提 倡 使 用 的 语 法 , 则 将 发 出 警 告 。<br />

• C++ 配 置 选 项 --dll_vtbl 已 由 新 的 --export_all_vtbl 选 项 取 代 。 选 项<br />

--dll_vtbl 不 提 倡 使 用 , 以 后 将 不 再 支 持 。<br />

• RVCT 汇 编 器 支 持 两 种 形 式 的 独 占 加 载 寄 存 器 指 令 :<br />

— LDREX{B|D|H}{cond} Rd, [Rn]<br />

— LDR{B|D|H}EX{cond} Rd, [Rn]<br />

第 二 种 形 式 不 提 倡 使 用 , 将 在 以 后 的 版 本 中 删 除 。<br />

反 汇 编 器 仅 支 持 第 一 种 形 式 。<br />

• RVCT 汇 编 器 支 持 两 种 形 式 的 独 占 存 储 寄 存 器 指 令 :<br />

— STREX{B|D|H}{cond} Rd, [Rn]<br />

— STR{B|D|H}EX{cond} Rd, [Rn]<br />

第 二 种 形 式 不 提 倡 使 用 , 将 在 以 后 的 版 本 中 删 除 。<br />

反 汇 编 器 仅 支 持 第 一 种 形 式 。<br />

A.4.2<br />

RVCT v2.2 中 <strong>ARM</strong> 编 译 器 的 改 动<br />

RVCT v2.2 中 有 以 下 改 动 :<br />

• <strong>ARM</strong> 编 译 器 提 供 新 的 选 项 , 以 更 好 地 控 制 动 态 符 号 的 导 出 方 式 , 即 使<br />

用 :<br />

— --export_all_vtbl 来 导 出 具 有 关 键 函 数 的 类 的 所 有 虚 拟 表 函 数 和<br />

RTTI<br />

— --export_defs_implicitly 来 导 出 原 型 被 标 记 为 dllimport 的 定 义 。<br />

• 当 生 成 共 享 对 象 或 DLL 时 , <strong>ARM</strong> 编 译 器 提 供 新 的 选 项 来 指 定 符 号 可 见<br />

性 , 即 使 用 :<br />

— --dllexport_all 来 提 供 所 有 全 局 符 号 的 动 态 可 见 度 , 除 非 另 行 指 定<br />

— --no_hide_all 来 导 出 所 有 extern 定 义 以 及 导 入 所 有 未 定 义 的 引 用 。<br />

A-24 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0202IC<br />

Non-Confidential<br />

Unrestricted Access


关 于 早 期 版 本<br />

• 新 的 __swi_indirect_r7 的 行 为 与 __swi_indirect_r12 相 类 似 , 只 不 过 它 使 用<br />

r7 而 不 使 用 r12。 <strong>ARM</strong> Linux 上 的 Thumb 应 用 程 序 使 用 __swi_indirect_r7<br />

进 行 内 核 系 统 调 用 。<br />

• --force_new_nothrow 的 行 为 已 扩 充 , 它 可 以 使 任 何 重 载 的 全 局 operator new<br />

被 作 为 throw() 来 处 理 。<br />

• <strong>ARM</strong> 编 译 器 C 实 现 已 更 改 , 现 在 对 超 出 范 围 的 枚 举 器 值 发 出 警 告 。<br />

在 严 格 的 C 中 , 枚 举 器 值 必 须 可 以 表 示 为 int, 例 如 它 们 的 范 围 必 须 为<br />

-2147483648 至 +2147483647( 含 这 两 个 值 )。 在 早 期 版 本 的 RVCT 中 , 超<br />

出 范 围 的 值 将 转 换 为 int, 而 不 会 发 出 警 告 ( 除 非 指 定 了 --strict 选 项 )。<br />

在 RVCT v2.2 中 , 这 些 值 的 处 理 方 式 与 在 C++ 中 相 同 , 即 将 它 们 当 作<br />

unsigned int、 long long 或 unsigned long long 处 理 。 这 表 示 如 果 您 使 用 最<br />

新 版 本 的 RVCT, 则 具 有 超 范 围 值 的 enum 类 型 的 大 小 可 能 与 在 C 中 的 大 小<br />

不 同 。 例 如 :<br />

enum E1 { k1 = 0xffffffff }; /* value == 2147483648u; out-of-range in C */<br />

/* C: before 2.2: sizeof(enum E1) == 1 */<br />

/* C: 2.2: sizeof(enum E1) == 4 */<br />

/* C++: all: sizeof(enum E1) == 4 */<br />

enum E2 { k2 = (int)0xffffffff }; /* value == -1; in range */<br />

/* C: before 2.2: sizeof(enum E1) == 1 */<br />

/* C: 2.2: sizeof(enum E1) == 1 */<br />

/* C++: all: sizeof(enum E1) == 1 */<br />

enum E3 { k3 = -1, k4 = 0xffffffff }; /* value == 2147483648u; out-of-range in C */<br />

/* C: before 2.2: sizeof(enum E1) == 1 */<br />

/* C: 2.2: sizeof(enum E1) == 8; use long long */<br />

/* C++: all: sizeof(enum E1) == 8; use long long */<br />

要 确 保 报 告 超 出 范 围 的 警 告 , 请 使 用 以 下 命 令 将 它 们 更 改 为 错 误 :<br />

armcc --diag_error 66 ...<br />

如 果 您 使 用 C++ 或 命 令 行 选 项 --enum_is_int、--strict 或<br />

--strict_warnings, 则 没 有 变 化 。<br />

• <strong>ARM</strong> 编 译 器 现 在 支 持 在 <strong>ARM</strong> 和 GNU 模 式 中 使 用 __attribute__ 关 键 字 。<br />

• <strong>ARM</strong> 编 译 器 现 在 支 持 新 的 变 量 属 性 zero_init 或 __zero_init__, 用 于 指 定<br />

不 具 有 初 始 值 设 定 项 的 变 量 被 放 置 在 ZI 数 据 节 中 。<br />

• <strong>ARM</strong> 编 译 器 提 供 新 的 选 项 --dwarf3, 用 于 指 定 DWARF 3 标 准 调 试 表 , 以<br />

便 当 编 译 以 C 或 C++ 编 写 的 代 码 时 描 述 <strong>ARM</strong> 或 Thumb 程 序 。 如 果 您 不 指<br />

定 格 式 , 则 编 译 器 假 定 为 DWARF 2。<br />

• <strong>ARM</strong> 编 译 器 支 持 新 的 环 境 变 量 RVCT22_CCOPT, 它 可 用 于 指 定 编 译 器 的 命 令<br />

行 选 项 。<br />

<strong>ARM</strong> DUI 0202IC Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. A-25<br />

Unrestricted Access<br />

Non-Confidential


关 于 早 期 版 本<br />

• RVCT v2.2 支 持 命 令 行 选 项 --apcs /fpic, 用 于 编 译 与 System V 共 享 库 兼<br />

容 的 代 码 。 使 用 此 选 项 可 以 生 成 只 读 的 、 与 位 置 无 关 的 代 码 , 其 中 相 对 地<br />

址 引 用 与 程 序 被 加 载 的 位 置 无 关 。<br />

• <strong>ARM</strong> 编 译 器 提 供 新 的 内 在 函 数 来 控 制 中 断 处 理 :<br />

— __enable_irq() 和 __disable_irq()<br />

— __enable_fiq() 和 __disable_fiq()<br />

• <strong>ARM</strong> 编 译 器 提 供 新 的 内 在 函 数 来 控 制 优 化 :<br />

— __schedule_barrier()<br />

— __force_stores()<br />

— __memory_changed()<br />

• <strong>ARM</strong> 编 译 器 包 括 新 的 选 项 , 用 于 启 用 或 禁 用 根 据 上 下 文 隐 式 确 认 模 板 参<br />

数 从 属 名 称 是 有 类 型 还 是 无 类 型 , 即 使 用 :<br />

— --implicit_typename<br />

— --no_implicit_typename<br />

缺 省 为 --no_implicit_typename。<br />

• 当 调 用 编 译 器 时 , 您 可 以 使 用 --show_cmdline 选 项 来 查 看 编 译 器 如 何 处 理<br />

命 令 行 。 命 令 以 标 准 化 方 式 显 示 , 并 展 开 所 有 via 文 件 的 内 容 。 但 使 用 此<br />

选 项 不 会 捕 获 命 令 行 中 的 意 外 错 误 。<br />

• 对 于 优 化 级 别 -O3 的 浮 点 算 法 ,<strong>ARM</strong> 编 译 器 不 再 保 证 符 合 ISO C 和 C++ 标<br />

准 。 您 必 须 使 用 --fpmode=std 选 项 来 确 保 符 合 ISO C 和 C++ 标 准 。<br />

• 按 照 ISO C 标 准 的 规 定 , <strong>ARM</strong> 编 译 器 现 在 将 const volatile ( 和 volatile<br />

const) 数 据 放 置 在 RW 或 ZI 节 中 。 以 前 , 这 些 数 据 被 放 置 在 RO 节 中 。 如<br />

果 您 错 误 地 假 定 了 编 译 器 放 置 数 据 的 方 式 , 则 可 能 影 响 到 您 的 代 码 。<br />

A.4.3<br />

RVCT v2.2 中 库 支 持 的 改 动<br />

RVCT v2.2 中 有 以 下 改 动 :<br />

• 浮 点 数 计 算 的 <strong>ARM</strong> 实 现 已 更 改 , 改 进 了 对 C99 函 数 的 支 持 。 在 此 更 改 显<br />

著 改 变 行 为 的 情 形 中 , 引 入 了 兼 容 模 式 , 以 辅 助 开 发 人 员 迁 移 代 码 以 使 用<br />

新 的 功 能 。 fplib 中 新 增 的 ( 或 行 为 有 所 改 动 的 ) C99 函 数 有 :<br />

— ilogb、 ilogbf、 ilogbl<br />

— logb、 logbf、 logbl<br />

— scalbn、 scalbnf、 scalbnl、 scalbln、 scalblnf、 scalblnl<br />

A-26 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0202IC<br />

Non-Confidential<br />

Unrestricted Access


关 于 早 期 版 本<br />

— nextafter、 nextafterf、 nextafterl、 nexttoward、 nexttowardf、<br />

nexttowardl<br />

mathlib 中 新 增 的 ( 或 行 为 有 所 改 动 的 ) C99 函 数 有 :<br />

— fpclassify 和 signbit<br />

— isfinite、 isinf、 isnan 和 isnormal<br />

— copysign、 copysignf<br />

— isgreater、 isgreaterequal、 isless、 islessequal、 islessgreater 和<br />

isunordered<br />

为 了 帮 助 您 移 植 代 码 , 新 的 兼 容 模 式 可 以 模 拟 这 些 函 数 和 宏 以 前 的 行 为 :<br />

— ilogb、 ilogbf、 ilogbl<br />

— finite<br />

— isnan<br />

注 意<br />

在 将 来 的 版 本 中 将 删 除 此 旧 式 支 持 。<strong>ARM</strong> 建 议 您 将 使 用 的 这 些 功 能 改 为<br />

最 新 版 本 编 译 器 中 的 等 效 函 数 。<br />

• <strong>ARM</strong> 库 已 增 强 , 改 进 了 对 多 线 程 的 支 持 。 它 的 目 的 是 为 了 帮 助 使 用 基 于<br />

RTOS 的 系 统 的 开 发 人 员 。<br />

用 户 可 覆 盖 的 函 数 __user_libspace() 已 拆 分 为 两 个 包 装 函 数 :<br />

__user_perproc_libspace()<br />

它 返 回 指 向 __user_libspace 数 据 区 的 指 针 , 该 数 据 区 用 于 存 储 整<br />

个 进 程 的 全 局 数 据 , 即 在 所 有 线 程 中 共 享 的 数 据 。<br />

__user_perthread_libspace()<br />

它 返 回 指 向 __user_libspace 数 据 区 的 指 针 , 该 数 据 区 用 于 存 储 特<br />

定 进 程 的 局 部 数 据 。<br />

还 有 三 个 新 的 用 户 可 覆 盖 函 数 来 管 理 锁 机 制 , 防 止 同 时 访 问 造 成 共 享 数 据<br />

损 坏 :<br />

_mutex_initialize()<br />

此 函 数 接 受 指 向 32 位 字 的 指 针 , 并 将 它 作 为 有 效 的 互 斥 量 来 初<br />

始 化 。<br />

int _mutex_initialize(mutex *m);<br />

_mutex_acquire()<br />

此 函 数 使 调 用 线 程 在 提 供 的 互 斥 量 上 获 得 锁 。<br />

void _mutex_acquire(mutex *m);<br />

<strong>ARM</strong> DUI 0202IC Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. A-27<br />

Unrestricted Access<br />

Non-Confidential


关 于 早 期 版 本<br />

_mutex_release()<br />

此 函 数 使 调 用 线 程 释 放 提 供 的 互 斥 量 。<br />

void _mutex_release(mutex *m);<br />

这 导 致 某 些 函 数 在 多 线 程 环 境 中 的 行 为 方 式 有 所 改 变 , 更 方 便 开 发 人 员 在<br />

多 进 程 系 统 中 使 用 这 些 函 数 。<br />

• <strong>ARM</strong> 库 管 理 程 序 armar 支 持 命 令 行 选 项 --diag_style, 以 指 定 诊 断 消 息 的<br />

显 示 方 式 。 例 如 要 包 含 行 号 和 字 符 计 数 , 可 使 用 :<br />

armar --diag_style ide<br />

缺 省 为 <strong>ARM</strong> 格 式 , 即 --diag_style arm。<br />

A.4.4<br />

RVCT v2.2 中 <strong>ARM</strong> 链 接 器 的 改 动<br />

RVCT v2.2 中 有 以 下 改 动 :<br />

• <strong>ARM</strong> 链 接 器 符 合 《<strong>ARM</strong> 体 系 结 构 的 基 本 平 台 ABI》 [BPABI], 并 支 持 经<br />

GNU 扩 展 的 符 号 版 本 模 型 。 链 接 器 提 供 新 的 选 项 来 控 制 符 号 版 本 , 即 使<br />

用 :<br />

— --symver_script file 来 启 用 隐 式 符 号 版 本 , 以 及 将 file 作 为 符 号 版 本<br />

脚 本 输 入 。<br />

— --symver_soname 来 启 用 隐 式 符 号 版 本 和 版 本 符 号 , 以 便 强 制 静 态 绑<br />

定 。<br />

如 果 符 号 没 有 已 定 义 的 版 本 , 链 接 器 将 使 用 所 链 接 的 文 件 的 SONAME。<br />

注 意<br />

通 常 情 况 下 , 符 号 版 本 只 在 生 成 或 链 接 到 DSO 或 共 享 库 时 有 用 。 它 对 静<br />

态 链 接 没 有 影 响 。<br />

• <strong>ARM</strong> 链 接 器 可 以 执 行 RVCT 的 其 他 组 件 不 可 用 的 某 些 跳 转 优 化 。<br />

两 个 新 的 命 令 行 选 项 可 以 控 制 这 些 优 化 , 即 使 用 :<br />

— --inline 来 启 用 跳 转 内 联 。 缺 省 情 况 下 , 内 联 为 禁 用 。<br />

— --info inline 在 每 内 联 一 个 函 数 时 显 示 信 息 , 以 及 查 看 内 联 的 总 数 。<br />

当 您 指 定 --inline 和 --feedback file 时 , 由 链 接 器 内 联 的 函 数 也 被 发 布 到<br />

反 馈 文 件 中 。<br />

A-28 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0202IC<br />

Non-Confidential<br />

Unrestricted Access


关 于 早 期 版 本<br />

• 提 供 两 个 新 的 命 令 行 选 项 来 处 理 尾 调 用 节 , 在 节 的 尾 部 优 化 跳 转 指 令 , 即<br />

使 用 :<br />

— --tailreorder 将 尾 调 用 节 移 到 其 目 标 之 上 ( 如 果 可 能 )<br />

— --info tailreorder 来 显 示 有 关 已 移 动 的 尾 调 用 节 的 信 息 。<br />

• 两 个 新 命 令 行 选 项 可 用 于 在 <strong>ARM</strong> 链 接 器 中 控 制 中 间 代 码 生 成 , 即 使 用 :<br />

— --no_inlineveneer 来 禁 用 内 联 中 间 代 码<br />

— --no_veneershare 来 防 止 中 间 代 码 共 享 。<br />

• <strong>ARM</strong> 链 接 器 支 持 生 成 共 享 库 以 及 链 接 到 共 享 库 。 提 供 新 的 命 令 行 选 项 来<br />

编 译 SVr4 和 BPABI 可 执 行 文 件 和 共 享 对 象 BPABI DLL, 以 及 指 定 生 成 代<br />

码 的 方 式 , 即 使 用 :<br />

— --sysv 来 编 译 SVr4 格 式 的 ELF 文 件<br />

— --shared 来 编 译 SVr4 共 享 对 象<br />

— --soname name 来 指 定 共 享 对 象 的 SONAME<br />

— --fpic 来 链 接 与 位 置 无 关 的 代 码<br />

— --init symbol 来 指 定 初 始 化 代 码<br />

— --fini symbol 在 卸 载 可 执 行 文 件 或 共 享 对 象 时 执 行 代 码<br />

— --linux_abitag id 来 指 定 最 低 兼 容 Linux 内 核 版 本<br />

— --dynamiclinker name 来 更 改 缺 省 动 态 链 接 器 。<br />

• 提 供 新 的 链 接 器 选 项 --startup 来 将 备 选 的 C 库 与 不 同 的 启 动 符 一 起 使 用 。<br />

类 似 地 ,--cppinit 选 项 可 用 于 C++ 初 始 化 代 码 。<br />

• <strong>ARM</strong> 链 接 器 选 项 --symbols 列 出 链 接 步 骤 中 使 用 的 局 部 和 全 局 符 号 。 在<br />

RVCT v2.2 中 , 缺 省 情 况 下 , 此 输 出 不 再 列 出 映 射 符 号 。 新 的 命 令 行 选 项<br />

--list_mapping_symbols 现 在 可 以 将 映 射 符 号 包 括 在 --symbols 生 成 的 输 出<br />

中 。<br />

• 如 果 链 接 器 检 测 到 指 定 <strong>ARM</strong>v3 ( 在 RVCT v2.2 中 已 不 再 使 用 ) 的 对 象 ,<br />

它 会 将 这 些 对 象 升 级 到 <strong>ARM</strong>v4 以 便 可 以 和 <strong>ARM</strong> 库 一 起 使 用 。 当 链 接 器<br />

提 升 目 标 体 系 结 构 级 别 时 , 将 显 示 警 告 消 息 。<br />

• <strong>ARM</strong> 链 接 器 使 您 可 以 在 分 散 加 载 描 述 文 件 中 按 符 号 名 称 来 引 用 输 入 节 。<br />

请 参 阅 《 链 接 器 和 实 用 程 序 指 南 》 中 对 input_symbol_pattern 的 描 述 。<br />

<strong>ARM</strong> DUI 0202IC Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. A-29<br />

Unrestricted Access<br />

Non-Confidential


关 于 早 期 版 本<br />

A.4.5<br />

RVCT v2.2 中 <strong>ARM</strong> 汇 编 器 的 改 动<br />

RVCT v2.2 中 有 以 下 改 动 :<br />

• <strong>ARM</strong>v6T2 定 义 了 Thumb-2, 它 与 Thumb 指 令 集 相 比 有 了 重 大 改 进 。<br />

Thumb-2 提 供 了 几 乎 与 <strong>ARM</strong> 指 令 集 完 全 相 同 的 功 能 。 它 同 时 具 有 16 位 和<br />

32 位 指 令 , 并 可 同 时 实 现 类 似 于 <strong>ARM</strong> 的 性 能 以 及 类 似 于 Thumb 的 代 码 密<br />

度 。<br />

<strong>ARM</strong>v6T2 还 定 义 了 <strong>ARM</strong> 指 令 集 中 的 多 个 新 指 令 。<br />

汇 编 器 支 持 <strong>ARM</strong> 和 Thumb-2 中 的 所 有 新 指 令 。<br />

• RVCT v2.2 包 括 对 新 的 <strong>ARM</strong>v6 体 系 结 构 扩 展 的 支 持 :<br />

— <strong>ARM</strong>v6Z 定 义 <strong>ARM</strong> 安 全 扩 展 (TrustZone), 例 如 用 于<br />

<strong>ARM</strong>1176JZ(F)-S 内 核 。<br />

— <strong>ARM</strong>v6K 定 义 对 称 的 多 处 理 器 系 统 (SMP) 的 指 令 , 例 如 用 于 <strong>ARM</strong><br />

MPCore。<br />

• RVCT v2.2 汇 编 器 可 用 于 编 写 可 以 汇 编 为 <strong>ARM</strong> 或 Thumb-2 指 令 的 源 代<br />

码 。 您 可 以 使 用 相 同 的 语 言 来 为 Thumb-2 之 前 的 处 理 器 编 写 Thumb 指 令 。<br />

但 RVCT v2.2 也 支 持 旧 的 汇 编 语 言 语 法 , 以 便 能 够 汇 编 遗 留 代 码 。<br />

• <strong>ARM</strong> 汇 编 器 支 持 COMMON 指 令 , 用 于 在 指 定 的 符 号 处 分 配 所 定 义 大 小 的 内<br />

存 块 。 您 还 可 以 指 定 内 存 的 对 齐 方 式 :<br />

COMMON symbol{,size{,alignment}}<br />

• <strong>ARM</strong> 汇 编 器 提 供 一 个 新 选 项 --dwarf3, 用 于 指 定 DWARF 3 标 准 调 试 表 。<br />

DWARF 2 仍 然 是 缺 省 值 。<br />

• <strong>ARM</strong> 汇 编 器 提 供 了 新 的 选 项 , 用 于 在 生 成 共 享 对 象 或 DLL 时 指 定 符 号 可<br />

见 性 , 即 使 用 :<br />

— --dllexport_all 来 提 供 所 有 全 局 符 号 的 动 态 可 见 度 , 除 非 另 行 指 定<br />

— --no_hide_all 来 导 出 所 有 extern 定 义 以 及 导 入 所 有 未 定 义 的 引 用 。<br />

• 通 过 对 IMPORT 和 EXPORT 指 令 使 用 新 的 属 性 , <strong>ARM</strong> 汇 编 器 可 以 输 出 具 有 可<br />

见 度 集 的 ELF 符 号 :<br />

— DYNAMIC<br />

— HIDDEN<br />

— PROTECTED<br />

A-30 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0202IC<br />

Non-Confidential<br />

Unrestricted Access


关 于 早 期 版 本<br />

A.4.6<br />

RVCT v2.2 中 对 fromelf 实 用 程 序 的 改 动<br />

RVCT v2.2 中 有 以 下 改 动 :<br />

• fromelf 实 用 程 序 的 功 能 已 增 强 , 可 以 在 --text=/s 的 输 出 中 支 持 经 GNU 扩<br />

展 的 符 号 版 本 表 。 使 用 新 的 -- no_symbolversions 选 项 可 以 禁 用 符 号 版 本 表<br />

的 解 码 。<br />

<strong>ARM</strong> DUI 0202IC Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. A-31<br />

Unrestricted Access<br />

Non-Confidential


关 于 早 期 版 本<br />

A.5 RVCT v2.1 与 RVCT v2.0 之 间 的 差 异<br />

本 节 介 绍 RVCT v2.1 与 RVCT v2.0 之 间 的 差 异 。<br />

A.5.1<br />

RVCT 2.1 版 中 的 一 般 性 改 动<br />

RVCT 2.1 版 中 有 以 下 改 动 :<br />

• 完 全 支 持 C++, 包 括 异 常 。<br />

• 增 强 了 对 <strong>ARM</strong>v6 内 核 的 支 持 。 要 查 看 支 持 的 内 核 的 完 整 列 表 , 请 使 用 :<br />

armcc --cpu list<br />

• 编 译 器 、 链 接 器 、 汇 编 器 和 fromelf 支 持 新 的 --diag_style 选 项 , 以 生 成 与<br />

IDE ( 如 Microsoft Visual Studio) 更 兼 容 的 格 式 的 警 告 和 错 误 。<br />

• 编 译 器 和 链 接 器 支 持 新 的 实 用 程 序 , 以 删 除 生 成 的 C++ 代 码 中 未 使 用 的 虚<br />

拟 函 数 。<br />

• 编 译 器 支 持 新 的 --min_array_alignment 选 项 。<br />

• 提 供 链 接 器 反 馈 信 息 , 以 便 在 下 次 编 译 文 件 时 通 知 编 译 器 有 未 使 用 的 函<br />

数 。 这 些 函 数 将 放 置 在 各 自 的 节 中 , 以 便 链 接 器 将 来 删 除 它 们 。<br />

• 按 照 《<strong>ARM</strong> 体 系 结 构 的 ELF》 标 准 [AAELF] 的 定 义 , <strong>ARM</strong> ® 工 具 可 以 使<br />

用 SHF_STRINGS 节 在 多 个 编 译 单 元 中 共 享 合 适 的 字 符 串 。<br />

• 不 提 倡 使 用 VFPv1。 新 的 缺 省 为 VFPv2。 要 查 看 支 持 的 FPU 的 完 整 列 表 ,<br />

请 使 用 :<br />

armcc --fpu list<br />

• 不 提 倡 对 关 键 字 使 用 单 短 线 , 以 后 将 不 再 支 持 。 使 用 编 译 工 具 时 使 用 双 短<br />

线 。<br />

• 缺 省 情 况 下 , 使 用 不 提 倡 的 选 项 ( 如 编 译 器 选 项 --fpu softfpa) 时 编 译 工<br />

具 将 发 出 警 告 。<br />

在 RVCT v2.1 中 , 可 以 通 过 将 环 境 变 量 RVCT21_CLWARN 设 置 为 以 下 值 之 一 来<br />

更 改 此 行 为 :<br />

0 对 使 用 旧 语 法 和 不 提 倡 选 项 的 情 况 发 出 警 告 。<br />

1 接 受 旧 语 法 , 不 对 其 发 出 警 告 , 但 在 使 用 不 提 倡 选 项 时 发 出 警<br />

告 。 这 是 缺 省 设 置 。<br />

2 接 受 旧 语 法 和 不 提 倡 使 用 选 项 , 不 发 出 警 告 。<br />

A-32 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0202IC<br />

Non-Confidential<br />

Unrestricted Access


关 于 早 期 版 本<br />

A.5.2<br />

RVCT 2.1 版 中 <strong>ARM</strong> 编 译 器 的 改 动<br />

RVCT 2.1 版 中 有 以 下 改 动 :<br />

• 当 使 用 --gnu 选 项 运 行 编 译 器 时 , 支 持 GNU 扩 展 。 但 在 不 使 用 此 选 项 运 行<br />

编 译 器 时 也 支 持 一 些 扩 展 。 这 些 编 译 模 式 被 称 为 :<br />

<strong>ARM</strong> 模 式<br />

缺 省 模 式 , 即 不 使 用 --gnu 选 项 进 行 编 译 。<br />

GNU 模 式<br />

使 用 --gnu 选 项 进 行 编 译 。<br />

有 关 所 有 GNU 扩 展 以 及 支 持 的 模 式 和 语 言 的 完 整 列 表 , 请 参 阅<br />

《<strong>RealView</strong> 编 译 工 具 2.1 版 编 译 器 和 库 指 南 》 中 描 述 编 译 器 引 用 的 一 章 。<br />

• 通 过 Edison Design Group (EDG) 前 端 增 强 了 对 ISO C++ 的 支 持 。 它 提 供 完<br />

整 的 C++ 解 析 程 序 , 将 程 序 表 示 形 式 传 递 到 <strong>ARM</strong> 编 译 器 , 以 生 成 代 码 。<br />

它 现 在 支 持 引 发 和 捕 获 C++ 异 常 。<br />

• 多 文 件 编 译 提 供 在 多 个 编 译 单 元 中 实 现 优 化 。 使 用 新 的 --multifile 选 项 可<br />

以 指 定 此 行 为 。 多 文 件 编 译 需 要 在 命 令 行 上 指 定 多 个 文 件 , 例 如 :<br />

armcc [options] --multifile ifile_1 ... ifile_n<br />

• 新 的 -O3 优 化 级 别 , 缺 省 情 况 下 包 括 多 文 件 编 译 。<br />

• 新 的 --cpu list 和 --fpu list 选 项 可 以 显 示 有 关 支 持 的 CPU 和 体 系 结 构 的<br />

详 细 信 息 。<br />

• 新 的 --min_array_alignment 选 项 可 用 于 指 定 阵 列 的 最 低 对 齐 要 求 。<br />

• 新 的 __breakpoint() 内 在 函 数 。<br />

• Noreturn 函 数 。<br />

• --old_cfe 选 项 现 在 已 不 再 使 用 。<br />

A.5.3<br />

RVCT 2.1 版 中 库 支 持 的 改 动<br />

RVCT 2.1 版 中 有 以 下 改 动 :<br />

• C++ 库 ( 即 Rogue Wave 和 C++ 运 行 时 库 ) 现 在 支 持 C++ 异 常 。C++ 库 继<br />

续 支 持 不 需 要 异 常 支 持 的 应 用 程 序 。<br />

• C 库 现 在 支 持 所 有 wchar.h 函 数 ( 文 件 I/O 除 外 ), 以 及 printf 和 scanf 中<br />

的 c99 十 六 进 制 浮 点 支 持 。<br />

<strong>ARM</strong> DUI 0202IC Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. A-33<br />

Unrestricted Access<br />

Non-Confidential


关 于 早 期 版 本<br />

• 引 入 了 新 的 区 表 格 式 来 支 持 压 缩 算 法 。 此 新 格 式 不 再 包 含<br />

ZISection$$Table。<br />

A.5.4<br />

RVCT 2.1 版 中 <strong>ARM</strong> 链 接 器 的 改 动<br />

RVCT 2.1 版 中 有 以 下 改 动 :<br />

• 缺 省 情 况 下 , 启 用 读 / 写 数 据 压 缩 以 优 化 ROM 大 小 。<br />

• 提 供 新 的 选 项 --rosplit 来 输 出 两 个 RO 执 行 区 , 一 个 用 于 代 码 , 另 一 个 用<br />

于 数 据 。<br />

• 提 供 新 的 命 令 行 选 项 来 支 持 C++ 异 常 表 。 使 用 新 的 选 项 --noexceptions 来<br />

确 保 您 的 代 码 中 没 有 任 何 异 常 。<br />

新 的 选 项 --exceptions_tables=unwind|nounwind 强 制 链 接 器 生 成 异 常 表 , 而<br />

与 输 入 文 件 的 内 容 无 关 。 例 如 , 使 用 --exceptions_tables=unwind, 链 接 器<br />

可 以 为 具 有 调 试 帧 信 息 的 C 和 汇 编 语 言 对 象 创 建 异 常 表 。<br />

• 提 供 新 的 选 项 --userlibpath 来 指 定 搜 索 用 户 库 的 位 置 。<br />

• 现 在 , 链 接 器 在 检 查 对 象 文 件 的 对 齐 时 更 加 严 格 。 它 确 保 要 求 堆 栈 8 字 节<br />

对 齐 的 任 何 代 码 仅 由 保 留 堆 栈 8 字 节 对 齐 的 代 码 直 接 或 间 接 地 调 用 。 如 果<br />

检 测 到 堆 栈 对 齐 冲 突 , 链 接 器 将 生 成 错 误 消 息 :<br />

Error L6238E: object_name.o(section_name) contains invalid call from<br />

’ ~PRES8’ function to ’ REQ8’ function_name<br />

如 果 引 用 了 外 部 符 号 地 址 , 也 会 生 成 类 似 的 警 告 消 息 :<br />

Warning L6306W: ’ ~PRES8’ section object_name.o(section_name) should not<br />

use the address of ’ REQ8’ function_name<br />

A.5.5<br />

RVCT 2.1 版 中 <strong>ARM</strong> 汇 编 器 的 改 动<br />

RVCT 2.1 版 中 有 以 下 改 动 :<br />

• 新 的 --cpu list 和 --fpu list 选 项 可 以 显 示 有 关 支 持 的 CPU 和 体 系 结 构 的<br />

详 细 信 息 。<br />

• 汇 编 器 包 括 新 的 :RCONST: unary 运 算 符 , 用 于 返 回 给 定 寄 存 器 的 编 号 。<br />

• 汇 编 器 检 查 修 饰 堆 栈 指 针 (SP) 的 指 令 , 以 确 定 是 否 将 代 码 标 记 为 PRES8。<br />

如 果 需 要 , 可 以 自 动 执 行 此 更 改 ( 请 参 阅 《<strong>RealView</strong> 编 译 工 具 2.1 版 汇 编<br />

器 指 南 》 中 描 述 指 令 引 用 的 一 章 )。<br />

A-34 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0202IC<br />

Non-Confidential<br />

Unrestricted Access


关 于 早 期 版 本<br />

• 汇 编 器 可 以 发 出 有 关 代 码 中 可 能 存 在 互 锁 的 警 告 。 要 启 用 此 选 项 , 请 使<br />

用 :<br />

armasm --diag_warning 1563<br />

A.5.6<br />

RVCT 2.1 版 中 对 fromelf 实 用 程 序 的 改 动<br />

RVCT 2.1 版 中 有 以 下 改 动 :<br />

• 新 的 --expandarrays 选 项 可 以 解 码 ELF 映 像 , 以 便 在 结 构 的 内 部 和 外 部 展<br />

开 阵 列 。<br />

此 选 项 只 能 与 --text -a 选 项 一 起 使 用 。<br />

<strong>ARM</strong> DUI 0202IC Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. A-35<br />

Unrestricted Access<br />

Non-Confidential


关 于 早 期 版 本<br />

A.6 RVCT v2.0 与 RVCT v1.2 之 间 的 差 异<br />

本 节 介 绍 RVCT v2.0 与 RVCT v1.2 之 间 的 差 异 。<br />

A.6.1<br />

RVCT v2.0 中 的 一 般 性 改 动<br />

RVCT v2.0 中 有 以 下 改 动 :<br />

• 支 持 <strong>ARM</strong> 体 系 结 构 v6。<br />

• 符 合 <strong>ARM</strong> 体 系 结 构 的 ABI ( 基 本 标 准 ) [BSABI]。 有 关 详 细 信 息 , 请 参 阅<br />

http://www.arm.com。<br />

• 要 引 发 浮 点 异 常 , 必 须 选 择 --fpmode ieee_full。 这 是 因 为 缺 省 设 置 现 在 是<br />

--fpmode std, 因 此 缺 省 情 况 下 不 生 成 浮 点 异 常 。<br />

• 支 持 使 用 双 短 线 “--” 指 示 命 令 行 关 键 字 ( 例 如 --cpp)。<br />

A.6.2<br />

RVCT 2.0 版 中 <strong>ARM</strong> 编 译 器 的 改 动<br />

<strong>ARM</strong> 编 译 器 (armcc) 有 以 下 更 改 :<br />

• RVCT 2.0 版 编 译 器 有 新 的 前 端 , 包 括 对 命 令 行 选 项 做 了 更 改 。 为 了 向 后 兼<br />

容 , 也 支 持 老 版 本 <strong>ARM</strong> 编 译 器 中 提 供 的 选 项 。<br />

• 现 在 , 四 个 独 立 的 编 译 器 (armcc、 tcc、 armcpp 和 tcpp) 已 经 合 并 为 一 个<br />

编 译 器 armcc。 但 为 了 有 助 于 移 植 到 新 的 编 译 器 , 可 使 用 单 独 的 编 译 器 名<br />

称 来 调 用 RVCT 2.0 版 编 译 器 。<br />

• 支 持 <strong>ARM</strong>v6 及 其 未 对 齐 访 问 特 性 。<br />

• 添 加 新 的 嵌 入 式 汇 编 器 与 内 联 编 译 器 配 合 使 用 。<br />

• 使 用 #pragma arm 和 #pragma thumb 实 现 每 个 函 数 的 <strong>ARM</strong> 和 Thumb ® 编 译 。<br />

• 使 用 --fpmode 选 项 的 五 个 浮 点 模 型 。<br />

• --list 选 项 的 行 为 与 在 旧 的 编 译 器 中 的 行 为 不 同 。<br />

• C++ 模 板 实 例 化 。<br />

• C++ 命 名 空 间 。<br />

• 您 可 以 指 定 指 针 对 齐 的 级 别 。<br />

• 编 译 C++ 时 不 再 支 持 ROPI。<br />

A-36 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0202IC<br />

Non-Confidential<br />

Unrestricted Access


关 于 早 期 版 本<br />

• 诊 断 消 息 的 控 制 和 处 理 。 同 样 , 诊 断 消 息 的 编 号 方 式 已 经 更 改 。 现 在 , 消<br />

息 的 编 号 格 式 为 #nnnn 或 #nnnn-D。 带 有 -D 后 缀 的 消 息 的 消 息 编 号 可 用 于 使<br />

您 能 够 处 理 诊 断 消 息 的 选 项 中 。<br />

• 新 接 口 不 支 持 许 多 旧 版 本 的 编 译 器 选 项 。 但 为 了 向 后 兼 容 , 如 果 使 用<br />

--old_cfe 选 项 , 则 可 以 使 用 这 些 选 项 。 有 关 详 细 信 息 , 请 参 阅 《<strong>RealView</strong><br />

编 译 工 具 2.0 版 编 译 器 和 库 指 南 》 中 介 绍 旧 版 本 编 译 器 选 项 的 附 录 。 适 用<br />

时 , 此 附 录 也 说 明 旧 版 本 编 译 器 选 项 映 射 到 新 版 本 编 译 器 选 项 的 方 式 。 对<br />

于 在 《<strong>RealView</strong> 编 译 工 具 2.0 版 编 译 器 和 库 指 南 》 中 列 出 的 消 息 , 该 附 录<br />

也 说 明 新 编 译 器 接 口 所 输 出 的 等 效 消 息 。<br />

注 意<br />

如 果 使 用 --old_cfe 选 项 , 编 译 器 所 输 出 的 消 息 将 使 用 旧 的 编 号 格 式 。<br />

其 他 更 改 包 括 添 加 了 新 的 编 译 指 示 和 预 定 义 宏 、 其 他 C 和 C++ 语 言 扩 展 以 及 对<br />

<strong>ARM</strong> C 和 C++ 库 进 行 了 更 改 。<br />

A.6.3<br />

RVCT 2.0 版 中 <strong>ARM</strong> 链 接 器 的 改 动<br />

<strong>ARM</strong> 链 接 器 (armlink) 有 以 下 更 改 :<br />

• --unresolved 选 项 现 在 可 应 用 于 部 分 链 接 。<br />

• 添 加 了 新 的 控 制 文 件 命 令 RESOLVE, 并 在 执 行 部 分 链 接 时 使 用 。 RESOLVE 使<br />

用 时 与 armlink 选 项 --unresolved 相 似 。<br />

• 选 项 --edit 现 在 可 以 接 受 多 个 文 件 。<br />

• 有 了 指 定 填 充 字 节 值 的 新 选 项 --pad。<br />

• 添 加 了 新 的 分 散 加 载 属 性 EMPTY 和 ZEROPAD。<br />

<strong>ARM</strong> DUI 0202IC Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. A-37<br />

Unrestricted Access<br />

Non-Confidential


关 于 早 期 版 本<br />

A.6.4<br />

RVCT 2.0 版 中 <strong>ARM</strong> 汇 编 器 的 改 动<br />

<strong>ARM</strong> 汇 编 器 (armasm) 有 以 下 更 改 :<br />

• 添 加 了 对 新 的 <strong>ARM</strong> 体 系 结 构 v6 的 支 持 。 包 括 饱 和 指 令 、 并 行 指 令 和 组 合<br />

及 分 离 指 令 。<br />

• ALIGN 指 令 具 有 附 加 参 数 , 可 指 定 任 何 填 充 的 内 容 。 此 参 数 为 可 选 。<br />

• 具 有 新 的 AREA 指 令 NOALLOC。<br />

• 具 有 两 个 新 指 令 , ELIF 和 FRAME RETURN ADDRESS。<br />

• 具 有 四 个 新 的 内 置 变 量 {AREANAME}、 {COMMANDLINE}、 {LINENUM} 和<br />

{INPUTFILE}。<br />

A-38 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0202IC<br />

Non-Confidential<br />

Unrestricted Access

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!