GCC RISCV 后端 -- cc1 入口

        GCC编译工具链中的 gcc 可执行程序,实际上是个驱动程序(Driver),其根据输入的参数,然后调用其它不同的程序,对输入文件进行处理,包括编译、链接等。可以通过以下命令查看:

gcc -v hello.c
$ gcc -v hello.c
.../usr/libexec/gcc/x86_64-linux-gnu/13/cc1 -quiet -v -imultiarch x86_64-linux-gnu hello.c -quiet -dumpdir a- -dumpbase hello.c -dumpbase-ext .c -mtune=generic -march=x86-64 -version -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/ccNZ9EWv.s
...
as -v --64 -o /tmp/ccXjJNFZ.o /tmp/ccNZ9EWv.s
.../usr/libexec/gcc/x86_64-linux-gnu/13/collect2 -plugin /usr/libexec/gcc/x86_64-linux-gnu/13/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper -plugin-opt=-fresolution=/tmp/ccCoWozh.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro 
/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/13/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/13 -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/13/../../.. /tmp/ccXjJNFZ.o -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-linux-gnu/13/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crtn.o
COLLECT_GCC_OPTIONS='-v' '-mtune=generic' '-march=x86-64' '-dumpdir' 'a.'

        也就是 gcc 根据其输入参数,驱动(Driver)了其它工具来最终完成整个编译的任务。

        其中,属于编译器部分的是 cc1 程序。其源代码入口为 <gcc-project>/gcc/main.cc 中的 main 函数:

        找到程序入口后,就可以顺着程序的代码逻辑,一步步往下看 cc1 程序的代码了。

        这里,有个认识点,就是,在查阅源代码时,要注意对代码的抽象理解。具体到C/C++的代码时,其最小抽象单元是函数,也就是理解函数在业务逻辑中的抽象意涵,也就是,知道函数的原型(Prototype),即其输入、输出、函数名,就能明白其作用。再往上抽象一层就是,类(Class),即对数据结构及相关处理函数的封装。再往上一层抽象就是库(library)。再往上就是包(Package)。这样一步步往上抽象,来组织管理整个程序代码,以使得其复杂度可以控制在便于维护及理解的程度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/28451.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用DeepSeek-R1-Distill-data-110k蒸馏中文数据集 微调Qwen2.5-7B-Instruct!

下载模型与数据 模型下载&#xff1a; huggingface&#xff1a; Qwen/Qwen2.5-7B-Instruct HF MirrorWe’re on a journey to advance and democratize artificial intelligence through open source and open science.https://hf-mirror.com/Qwen/Qwen2.5-7B-Instruct 魔搭&a…

基于编译器特性浅析C++程序性能优化

最近在恶补计算机基础知识&#xff0c;学到CSAPP第五章的内容&#xff0c;在这里总结并且展开一下C程序性能优化相关的内容。 衡量程序性能的方式 一般而言&#xff0c;程序的性能可以用CPE&#xff08;Cycles Per Element&#xff09;来衡量&#xff0c;其指的是处理每个元素…

K8s控制器Deployment详解

回顾 ReplicaSet 控制器,该控制器是用来维护集群中运行的 Pod 数量的&#xff0c;但是往往在实际操作的时候&#xff0c;我们反而不会去直接使用 RS&#xff0c;而是会使用更上层的控制器&#xff0c;比如说 Deployment。 Deployment 一个非常重要的功能就是实现了 Pod 的滚动…

大模型巅峰对决:DeepSeek vs GPT-4/Claude/PaLM-2 全面对比与核心差异揭秘

文章目录 一、架构设计深度解剖1.1 核心架构对比图谱1.2 动态MoE架构实现架构差异分析表 二、训练策略全面对比2.1 训练数据工程对比2.2 分布式训练代码对比DeepSeek混合并行实现GPT-4 Megatron实现对比 2.3 关键训练参数对比 三、性能表现多维评测3.1 基准测试全景对比3.2 推理…

【MySQL_02】安装(8.4.4LTS : Windows + Linux)

文章目录 一、版本说明二、官网下载三、Windows安装3.1 安装和配置3.2 四、Linux安装 历史文章点击&#x1f449;&#xff1a;SQL &#x1f408;‍⬛github&#xff1a;https://github.com/mysql &#x1f4bb;官网&#xff1a; https://www.mysql.com &#x1f30f;维基百科…

今天来介绍和讨论 AGI(通用人工智能)

首先介绍&#xff0c;AGI&#xff08;通用人工智能&#xff09;是什么&#xff1f; AGI&#xff08;Artificial General Intelligence&#xff0c;通用人工智能&#xff09;指的是能够像人类一样理解、学习、推理和解决广泛任务的人工智能系统。与目前的AI不同&#xff0c;AGI可…

自动化学习-使用git进行版本管理

目录 一、为什么要学习git 二、git是什么 三、git如何使用 1、git的下载安装和配置 2、git常用的命令 3、gitee远程仓库的使用 &#xff08;1&#xff09;注册 &#xff08;2&#xff09;创建仓库 &#xff08;3&#xff09;配置公钥&#xff08;建立电脑和git…

探秘基带算法:从原理到5G时代的通信变革【十】基带算法应用与对比

文章目录 三、算法在现代通信系统中的应用3.1 5G 通信中的应用3.1.1 信道编码与调制解调3.1.2 大规模 MIMO 技术3.1.3 案例分析&#xff1a;5G 基站与终端实现 3.2 卫星通信中的应用3.2.1 抗干扰与纠错编码3.2.2 信号处理与调制解调3.2.3 案例分析&#xff1a;卫星通信系统实例…

从vue源码解析Vue.set()和this.$set()

前言 最近死磕了一段时间vue源码&#xff0c;想想觉得还是要输出点东西&#xff0c;我们先来从Vue提供的Vue.set()和this.$set()这两个api看看它内部是怎么实现的。 Vue.set()和this.$set()应用的场景 平时做项目的时候难免不会对 数组或者对象 进行这样的骚操作操作&#xff…

IO学习day3

一、思维导图 二、练习 1、使用文件IO读取图片 文件大小&#xff0c;文件偏移量&#xff0c;宽度&#xff0c;高度 2.向一个程序中输入文件名&#xff0c;判断指定目录下是否有这个文件&#xff0c;如果有这个文件, 将这个文件的属性信息输出。如果不存在输出不存在即可。 .…

MWC 2025|紫光展锐联手美格智能发布5G通信模组SRM812

在2025年世界移动通信大会&#xff08;MWC 2025&#xff09;期间&#xff0c;紫光展锐携手美格智能正式推出了基于紫光展锐V620平台的第二代5G Sub6G R16模组SRM812&#xff0c;以超高性价比方案&#xff0c;全面赋能合作伙伴&#xff0c;加速5G规模化应用在各垂直领域的全面落…

场景题:10亿QQ用户,如何统计在线人数?

现在卷的环境下&#xff0c;面试除了八股文算法项目外&#xff0c;场景题也是问的越来越多了。一方面是就业市场竞争者较多所带来的必然结果&#xff1b;另一方面是公司对于应聘者的技术要求也越来越高了。 今天继续介绍Java面试常见的场景题&#xff1a;在线人数统计 现在用户…

Markdown HTML 图像语法

插入图片 Markdown ![图片描述](图片链接)一般来说&#xff0c;直接复制粘贴过来就行了&#xff0c;部分网页/应用可以拖拽&#xff0c;没人会真敲图片的链接吧…… 示例图片&#xff1a; ![Creeper?](https://i-blog.csdnimg.cn/direct/f5031c8c4f15421c9882d7eb23540b8…

3D建模--犀牛Rhino for Mac

介绍 Rhino 8是一款功能强大的三维构建软件&#xff0c;它可以帮助用户创建各种类型的3D模型&#xff0c;包括产品设计、建筑设计、工业设计计划等。具有直观的界面和丰富的工具库&#xff0c;让你可以快速轻松地进行建模、编辑、分析和漂染。支持多种文件格式的导入和导出&am…

Axure原型模板与元件库APP交互设计素材(附资料)

为了高效地进行APP和小程序的设计与开发&#xff0c;原型设计工具Axure凭借其强大的功能和灵活性&#xff0c;成为了众多产品经理和设计师的首选。本文将详细介绍Axure原型模板APP常用界面组件元件库、交互设计素材&#xff0c;以及多套涵盖电商、社区服务、娱乐休闲、农业农村…

使用sympy求解给定函数表达式的拉普拉斯变换

拉普拉斯变换是一种重要的数学工具&#xff0c;在工程、物理和经济学等多个领域有着广泛的应用。Sympy是一个Python库&#xff0c;专门用于符号数学计算&#xff0c;其中包括求解拉普拉斯变换。 使用sympy&#xff0c;我们可以方便地计算给定函数表达式的拉普拉斯变换&#xff…

mongodb安装教程以及mongodb的使用

MongoDB是由C语言编写的一种面向文档的NoSQL数据库&#xff0c;旨在为WEB应用提供可扩展的高性能数据存储解决方案。与传统的关系型数据库&#xff08;如 MySQL 或 PostgreSQL&#xff09;不同&#xff0c;MongoDB 存储数据的方式是以 BSON&#xff08;类似于 JSON 的二进制格式…

家政保洁维修行业有没有必要做小程序?

【家政创业必看】家政行业小程序值得做吗&#xff1f;4大核心优势告诉你&#xff01; 随时随地下单&#xff1a;客户手机一键预约&#xff0c;告别找电话/翻页面的麻烦 品牌专业升级&#xff1a;精美界面服务详情用户评价&#xff0c;打造可信赖形象 营销神器&#xff1…

电力设备基础概念解析

设备 配变终端 配电主站 位于城市调度中心&#xff0c;负责全面监控和管理整个配网的运行状况。 配电子站 常常设立在 110kV/35kV 变电站内&#xff0c;它们像是一个个“分中心”&#xff0c;负责各自辖区内的监控任务。子站与所辖区域内的DTU/TTU/FTU等电力终端设备保持紧…

C++ 内存序在多线程中的使用

目录 一、内存顺序 二、 指令重排在多线程中的问题 2.1 问题与原因 2.2 解决方案 三、六种内存序 3.1 memory_order_relaxed 3.2 memory_order_consume 3.3 memory_order_acquire 3.4 memory_order_release 3.5 memory_order_acq_rel 3.6 memory_order_seq_cst 一、…