HCC编译器说明
Toolkit包中提供了HCC编译器,用于进行Device侧驱动及应用程序的编译。HCC编译器存储在Toolkit安装路径的“toolchain/hcc”目录中,包含的主要二进制工具说明如下表所示。
工具名称 |
存储相对路径 |
功能说明及使用场景 |
风险分析 |
保留原因 |
---|---|---|---|---|
gcc |
hcc/bin/aarch64-target-linux-gnu-gcc |
编译C语言实现的源文件,生成可执行文件。 用户编写Device侧代码时会使用该工具编译代码生成可执行文件。 |
用户只能用来编译源码生成可执行的二进制文件,无法获取其他运行态信息,实际风险小。 |
属于编译器配套基础二进制工具集。 |
cpp |
hcc/bin/aarch64-target-linux-gnu-cpp |
编译C++语言实现的源文件,生成可执行文件。 用户编写Device侧代码时会使用该工具编译代码生成可执行文件。 |
用户只能用来编译源码生成可执行的二进制文件,无法获取其他运行态信息,实际风险小。 |
|
ld |
hcc/bin/aarch64-target-linux-gnu-ld |
创建动态链接的可执行文件时,将所有符号添加到动态符号表中。 用户编写Device侧代码时在编译源码的过程中会使用该工具链接中间文件生成完整的可执行文件。 |
用户使用链接器在编译过程中链接中间文件,无法获取其他运行态信息,实际风险小。 |
|
readelf |
hcc/bin/aarch64-target-linux-gnu-readelf |
显示二进制文件的ELF标头包含的信息。 调试问题时可通过该工具查看算子库二进制文件的ELF头信息及各个段的信息。 |
用户仅仅可以查看二进制文件的段信息,无法获取其他运行态信息,实际风险小。 |
|
addr2line |
hcc/bin/aarch64-target-linux-gnu-addr2line |
用来将程序地址转换成其所对应的程序源文件、代码行以及函数。 |
对于存在调试信息的可执行程序,可使用此工具将地址对应成源码,无法获取其他运行态信息,实际风险小。 |
|
g++ |
hcc/bin/aarch64-target-linux-gnu-g++ |
编译C++语言实现的源文件,生成可执行文件。 用户编写Device侧代码时会使用该工具编译代码生成可执行文件。 |
用户只能用来编译源码生成可执行的二进制文件,无法获取其他运行态信息,实际风险小。 |
|
gcov-dump |
hcc/bin/aarch64-target-linux-gnu-gcov-dump |
线下gcda和gcno文件的dump工具 ,用于打印出Device侧coverage文件内容。 |
用户只能用来查看gcda及gcno文件内容,无法获取其他运行态信息,实际风险小。 |
|
ranlib |
hcc/bin/aarch64-target-linux-gnu-ranlib |
用于生成库文件中的.o文件索引。 用户将object文件添加到库文件中后,可使用此工具更新符号表索引。 |
用户将object文件添加到库文件中后,仅可使用此工具更新符号表索引,无法获取其他运行态信息,实际风险小。 |
|
ar |
hcc/bin/aarch64-target-linux-gnu-ar |
创建、修改、解压静态库文件。 将object文件打包成库文件。 |
用户只能用来将目标文件打包成库文件,无法获取其他运行态信息,实际风险小。 |
|
gcov-tool |
hcc/bin/aarch64-target-linux-gnu-gcov-tool |
线下gcda文件处理工具。 用户可使用此工具打印出Device侧gcda文件中计数器。 |
用户只能用来查看gcda文件中计数器,无法获取其他运行态信息,实际风险小。 |
|
as |
hcc/bin/aarch64-target-linux-gnu-as |
将汇编文件转换成二进制文件。 用户可使用此工具将汇编文件转换成机器码二进制文件。 |
用户只能用来编译源码生成可执行的二进制文件,无法获取其他运行态信息,实际风险小。 |
|
gcc-7.3.0 |
hcc/bin/aarch64-target-linux-gnu-gcc-7.3.0 |
编译C语言实现的源文件,生成可执行文件。 用户编写Device侧代码时会使用该工具编译代码生成可执行文件。 |
用户只能用来编译源码生成可执行的二进制文件,无法获取其他运行态信息,实际风险小。 |
|
gprof |
hcc/bin/aarch64-target-linux-gnu-gprof |
程序性能分析工具,计算程序运行中各个函数消耗时间。 用户查看Device侧可执行文件的性能工具。 |
用户可以通过该工具修改ELF文件头,用于调试,风险可控。 |
|
strings |
hcc/bin/aarch64-target-linux-gnu-strings |
从目标文件中列出可打印的字符串。 用户可以将目标文件中字符串打印出来。 |
用户只能将目标文件中字符串打印出来,无法获得其他运行态信息,实际风险小。 |
|
c++ |
hcc/bin/aarch64-target-linux-gnu-c++ |
编译C++语言实现的源文件,生成可执行文件。用户编写Device侧代码时会使用该工具编译代码生成可执行文件。 |
用户只能用来编译源码生成可执行的二进制文件,无法获取其他运行态信息,实际风险小。 |
|
gcc-ar |
hcc/bin/aarch64-target-linux-gnu-gcc-ar |
创建,修改,解压一个静态库文件。 用于将Device侧object文件打包成库文件。 |
用户只能用来将目标文件打包成库文件,无法获取其他运行态信息,实际风险小。 |
|
strip |
hcc/bin/aarch64-target-linux-gnu-strip |
丢弃程序文件中的符号信息。 用户可以使用此工具将目标文件中的符号表或指定段删除。 |
用户只能将目标文件中的符号表或者指定段删除, 无法获得其他运行态信息,实际风险小。 |
|
c++filt |
hcc/bin/aarch64-target-linux-gnu-c++filt |
转换C++符号为可识别的C符号。 将符号表中C++的符号转换成可识别的C符号。 |
用户只能用来将C++符号转换成可识别的C符号,实际风险小。 |
|
gcc-nm |
hcc/bin/aarch64-target-linux-gnu-gcc-nm |
用于列出程序文件中的符号,符号是指函数或变量名等。 用户查看Device侧可执行文件的符号表。 |
用户查看可执行文件的符号表,无法获取其他运行态信息,实际风险小。 |
|
ld.bfd |
hcc/bin/aarch64-target-linux-gnu-ld.bfd |
链接器,将多个对象和库文件组合成一个二进制文件,重新定位它们的数据并且捆绑符号索引。 用户编写Device侧代码时在编译源码的过程中会使用该工具链接中间文件生成完整的可执行文件。 |
用户使用链接器在编译过程中链接中间文件,无法获取其他运行态信息,实际风险小。 |
|
gcc-ranlib |
hcc/bin/aarch64-target-linux-gnu-gcc-ranlib |
用于生成库文件中的.o文件索引。 用户将object文件添加到库文件中后,更新符号表索引。 |
用户将object文件添加到库文件中后,更新符号表索引,无法获取其他运行态信息,实际风险小。 |
|
nm |
hcc/bin/aarch64-target-linux-gnu-nm |
用于列出程序文件中的符号,符号是指函数或变量名等。 用户可使用此工具查看Device侧可执行文件的符号表。 |
用户查看可执行文件的符号表,无法获取其他运行态信息,实际风险小。 |
|
elfedit |
hcc/bin/aarch64-target-linux-gnu-elfedit |
用于更新ELF文件头及文件属性。 用户更新Device侧可执行文件的ELF文件头。 |
用户可以通过该工具修改ELF文件头,用于调试,风险可控。 |
|
gcov |
hcc/bin/aarch64-target-linux-gnu-gcov |
用于打印文件覆盖率信息。 用户打印出Device侧插桩后可执行文件的覆盖率信息。 |
用户只能用来统计覆盖率信息,无法获取其他运行态信息,实际风险小。 |
|
objcopy |
hcc/bin/aarch64-target-linux-gnu-objcopy |
用于对生成的程序文件进行一定的编辑。 用户编译、拷贝Device侧可执行文件,将目标文件从一种二进制格式复制或者翻译到另一种二进制格式。 |
用户编辑、拷贝可执行文件,无法获取其他运行态信息,实际风险小。 |
|
run |
/hcc/bin/aarch64-target-linux-gnu-run |
模拟器,用于运行和调试程序。 |
用户仅可通过该工具获取调试信息,无法获取其他信息,实际风险小。 |