riscv64-linux-gnu-gcc编译生成32位cpu二进制

  • x86平台下64位设备,默认情况下编译的是elf64,比如简单的helloworld代码如下,使用readelf查看elf头部信息,格式为ELF64。
➜  cat helloworld.c
#include <stdio.h>int main()
{printf("hello!!!\n");return 0;
}➜  gcc -Wall helloworld.c -g -o helloworld
➜  readelf -h helloworld
ELF 头:Magic:  7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00类别:                              ELF64数据:                              2 补码,小端序 (little endian)Version:                           1 (current)OS/ABI:                            UNIX - System VABI 版本:                          0类型:                              DYN (Position-Independent Executable file)系统架构:                          Advanced Micro Devices X86-64版本:                              0x1入口点地址:              0x1040程序头起点:              64 (bytes into file)Start of section headers:          14080 (bytes into file)标志:             0x0Size of this header:               64 (bytes)Size of program headers:           56 (bytes)Number of program headers:         13Size of section headers:           64 (bytes)Number of section headers:         36Section header string table index: 35
  • 要生成32位代码时只需要指定 -m 32即可。
➜  gcc -Wall -m32 helloworld.c -g -o helloworld
➜  readelf -h helloworld
ELF 头:Magic:  7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00类别:                              ELF32数据:                              2 补码,小端序 (little endian)Version:                           1 (current)OS/ABI:                            UNIX - System VABI 版本:                          0类型:                              DYN (Position-Independent Executable file)系统架构:                          Intel 80386版本:                              0x1入口点地址:              0x1060程序头起点:              52 (bytes into file)Start of section headers:          13996 (bytes into file)标志:             0x0Size of this header:               52 (bytes)Size of program headers:           32 (bytes)Number of program headers:         12Size of section headers:           40 (bytes)Number of section headers:         36Section header string table index: 35
  • 我的设备是MANJARO发行版本,通过包管理器安装了risc-v编译工具链riscv64-linux-gnu-gcc
➜  uname -a
Linux mt-pc 5.10.202-1-MANJARO #1 SMP PREEMPT Tue Nov 28 19:17:16 UTC 2023 x86_64 GNU/Linux
➜   pacman -Q riscv64-linux-gnu-gcc
riscv64-linux-gnu-gcc 12.2.0-1
  • 对于riscv汇编程序,默认生成elf64二进制。
➜  cat test.s
# Add
# Format:
#       ADD RD, RS1, RS2
# Description:
#       The contents of RS1 is added to the contents of RS2 and the result is
#       placed in RD..text                   # Define beginning of text section.global _start          # Define entry _start_start:li x6, 1                # x6 = 1li x7, 2                # x7 = 2add x5, x6, x7          # x5 = x6 + x7stop:j stop                  # Infinite loop to stop execution.end                    # End of file➜  riscv64-linux-gnu-gcc -nostdlib -fno-builtin -g -Wall test.s -o test
➜  riscv64-linux-gnu-readelf -h test
ELF Header:Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00Class:                             ELF64Data:                              2's complement, little endianVersion:                           1 (current)OS/ABI:                            UNIX - System VABI Version:                       0Type:                              DYN (Position-Independent Executable file)Machine:                           RISC-VVersion:                           0x1Entry point address:               0x29aStart of program headers:          64 (bytes into file)Start of section headers:          5536 (bytes into file)Flags:                             0x5, RVC, double-float ABISize of this header:               64 (bytes)Size of program headers:           56 (bytes)Number of program headers:         8Size of section headers:           64 (bytes)Number of section headers:         19Section header string table index: 18
  • 参照x86下的方式,使用 -m 32 发现没这个选项。查看github官方说明文档,发现–print-multi-lib可以打印出支持的架构,执行发现啥也没打印出来。
➜  riscv64-linux-gnu-gcc --print-multi-lib
.;
  • 继续看文档,发现有个 -march/-mabi 选项,继续搜查之。发现gnu官方文档-march gnu官方文档-mabi有关于这两个选项的说明。
  • 查看默认情况下这两个选项的值为 ‘-march=rv64gc’ ‘-mabi=lp64d’。使用readelf查看header信息,生成的是elf64。
➜  riscv64-linux-gnu-gcc -v -nostdlib -fno-builtin -g -Wall test.s -o test
...
COLLECT_GCC_OPTIONS='-v' '-nostdlib' '-fno-builtin' '-g' '-Wall' '-o' 'test' '-march=rv64gc' '-mabi=lp64d' '-misa-spec=20191213' '-march=rv64imafdc_zicsr_zifencei' '-dumpdir' 'test.'
...➜  tmp riscv64-linux-gnu-readelf -h test
ELF Header:Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00Class:                             ELF64Data:                              2's complement, little endianVersion:                           1 (current)OS/ABI:                            UNIX - System VABI Version:                       0Type:                              DYN (Position-Independent Executable file)Machine:                           RISC-VVersion:                           0x1Entry point address:               0x29aStart of program headers:          64 (bytes into file)Start of section headers:          5536 (bytes into file)Flags:                             0x5, RVC, double-float ABISize of this header:               64 (bytes)Size of program headers:           56 (bytes)Number of program headers:         8Size of section headers:           64 (bytes)Number of section headers:         19Section header string table index: 18
  • 基于以上信息,生成32二进制选项可设置为 “-march=rv32ima -mabi=ilp32”。
➜  riscv64-linux-gnu-gcc -nostdlib -fno-builtin -march=rv32ima -mabi=ilp32 -g -Wall test.s -o test
➜  riscv64-linux-gnu-readelf -h test
ELF Header:Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00Class:                             ELF32Data:                              2's complement, little endianVersion:                           1 (current)OS/ABI:                            UNIX - System VABI Version:                       0Type:                              DYN (Position-Independent Executable file)Machine:                           RISC-VVersion:                           0x1Entry point address:               0x1b8Start of program headers:          52 (bytes into file)Start of section headers:          5220 (bytes into file)Flags:                             0x0Size of this header:               52 (bytes)Size of program headers:           32 (bytes)Number of program headers:         8Size of section headers:           40 (bytes)Number of section headers:         19Section header string table index: 18

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

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

相关文章

三种决策树算法

ID3 ID3算法在特征选择时&#xff0c;使用的指标是信息增益&#xff08;Information Gain&#xff09;&#xff0c;信息增益是基于熵&#xff08;entropy&#xff09;的概念&#xff0c;熵是用来衡量数据集中的不确定性或纯度的一个指标。当熵值高时&#xff0c;数据集的不确定…

Notepad++插件:格式化JSON

一、问题描述 最近有这么一串json字符串&#xff1a; 你想看吗&#xff1f; 是不是觉得密密匝匝滴&#xff0c;很不想看呢&#xff1f; 下面是经过处理的json字符串&#xff1a; 你喜欢哪种格式的json字符串展示呢&#xff1f; 反正我喜欢已经格式化的&#xff0c;也就是第二…

​html.parser --- 简单的 HTML 和 XHTML 解析器​

源代码&#xff1a; Lib/html/parser.py 这个模块定义了一个 HTMLParser 类&#xff0c;为 HTML&#xff08;超文本标记语言&#xff09;和 XHTML 文本文件解析提供基础。 class html.parser.HTMLParser(*, convert_charrefsTrue) 创建一个能解析无效标记的解析器实例。 如果…

金蝶云星空和旺店通·企业奇门单据接口对接

金蝶云星空和旺店通企业奇门单据接口对接 对接源平台:旺店通企业奇门 慧策&#xff08;原旺店通&#xff09;是一家技术驱动型智能零售服务商&#xff0c;基于云计算PaaS、SaaS模式&#xff0c;以一体化智能零售解决方案&#xff0c;帮助零售企业数字化智能化升级&#xff0c;实…

Unity - 插件至 ZXing

Unity 使用 ZXing 生成和扫描二维码 Reference: Unity 使用 ZXing 生成和扫描二维码_unity 生成二维码-CSDN博客

基于单片机的电阻、电容、电感测试仪(论文+源码)

1.系统设计 1)控制部分&#xff1a;本设计以单片机为核心&#xff0c;采用89C52单片机&#xff0c;利用其管脚的特殊功能以及所具备的中断系统&#xff0c;定时/计数器和LCD显示功能等。在本设计中&#xff0c;采用LCD1602液晶显示&#xff1a;本设计中有1个CD4502、3个LM555、…

每日汇评:黄金阻力最小路径显示上行

周五早间&#xff0c;金价正盘整超过2030美元的周涨幅&#xff1b; 美联储确认鸽派政策转向&#xff0c;美元和美国国债收益率双双下挫&#xff1b; 在有利的技术面下&#xff0c;金价仍面临上行风险 &#xff1b; 周五早盘&#xff0c;金价在1930美元上方窄幅波动&#xff0c;…

弹性搜索引擎Elasticsearch:本地部署与远程访问指南

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;网络奇遇记、Cpolar杂谈 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言系统环境1. Windows 安装Elasticsearch2. 本地访问Elasticsearch3. Windows 安装…

挑战52天学小猪佩奇笔记--day23

52天学完小猪佩奇--day23 ​【本文说明】 本文内容来源于对B站UP 脑洞部长 的系列视频 挑战52天背完小猪佩奇----day23 的视频内容总结&#xff0c;方便复习。强烈建议大家去关注一波UP&#xff0c;配合UP视频学习。 day23的主题&#xff1a;新车 语境&#xff1a;旁白描述场景…

FM30H12G N通道沟槽电源MOS管 封装形式PDFN5*6

FM30H12G 是一款 N通道沟槽电源的场效应管&#xff08;MOS管&#xff09;&#xff0c;封装形式&#xff1a;PDFN5*6。 来百度APP畅享高清图片 FM30H12G应用&#xff1a; 1、液晶电视 2、笔记本 3、电梯 4、感应加热 5、电动工具

圈子社交文化系统,了解生活,更了解你!APP小程序H5三端源码交付,支持二开!

在这个快节奏的时代&#xff0c;圈子社交系统成为了我生活中不可或缺的一部分。通过这个系统&#xff0c;我不仅可以结识到志同道合的朋友&#xff0c;还可以参与各种有趣的活动和发布自己的心情和见解。在这个圈子里&#xff0c;我感受到了无限的可能性和温暖的人性。 首先&am…

劲松中西医结合医院专家在线解读:宫颈HPV感染后多久会发病

宫颈HPV感染后多久会发病&#xff0c;一般没有具体时间。因为宫颈HPV感染后&#xff0c;受到多种因素的影响&#xff0c;每个人的发展速度和病情严重程度都有所不同。 一般而言&#xff0c;HPV感染后需要较长时间才能引起宫颈病变。在这个过程中&#xff0c;病毒会与宫颈细胞结…

文件系统和磁盘调度

文件系统 概述 文件系统&#xff1a;一种用于持久性存储的系统抽象 在存储器上&#xff1a;组织、控制、导航、访问和检索数据大多数计算机包含文件系统 文件&#xff1a;文件系统中一个单元的相关数据在操作系统中的抽象 文件系统功能 分配文件磁盘空间 管理文件块管理空…

流控制传输协议SCTP

前言 流控制传输协议&#xff08;Stream Control Transmission Protocol&#xff0c;SCTP&#xff09;是一种在网络连接两端同时传输多个数据流的协议。SCTP和TCP类似&#xff0c;都是通过确认机制实现数据传输的安全性。二者最大的区别是&#xff0c;SCTP是多宿主&#xff08…

day36算法训练|贪心part05

435. 无重叠区间 我来按照右边界排序&#xff0c;从左向右记录非交叉区间的个数。最后用区间总数减去非交叉区间的个数就是需要移除的区间个数了。图源&#xff1a;代码随想录 class Solution { public:// 按照区间右边界排序static bool cmp (const vector<int>& a…

小程序人脸识别—检测人脸图片获取图片

wxml <view><view class"flex white"><!-- 镜头翻转 --><view bindtap"reverse">镜头翻转</view><view bindtap"clickScanCode">扫二维码</view></view><view class"head-image-box w…

面试题:SpringBoot 如何自定义自己的条件注解与自动配置?

文章目录 前言自定义条件注解自定义自动配置 前言 Spring Boot的核心功能就是为整合第三方框架提供自动配置&#xff0c;而本文则带着大家实现了自己的自动配置和Starter&#xff0c;一旦真正掌握了本文的内容&#xff0c;就会对Spring Boot产生“一览众山小”的感觉。 自定义…

ArcGIS Maps SDK for JS:关闭地图边框(v4.27)

1 问题描述 近期&#xff0c;将ArcGIS Api for JS v4.16更新到了ArcGIS Maps SDK for JS v4.27&#xff0c;原本去除地图的css代码失效了。v4.27需要用.esri-view-surface--touch-none::after控制边框属性。 下面为没有关闭地图边框的效果图。&#xff08;亮色版地图为黑色边…

LeetCode-42. 接雨水【栈 数组 双指针 动态规划 单调栈】

LeetCode-42. 接雨水【栈 数组 双指针 动态规划 单调栈】 题目描述&#xff1a;解题思路一&#xff1a;单调栈&#xff0c;维护一个单调递减栈。每当遇到当前元素大于栈顶元素就出栈&#xff0c;在出栈时更新答案。当遇到出栈的情况&#xff0c;若单调栈栈左边有一个元素则必有…

基于深度学习的Python+OpenCV的甲骨文相似度评估系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介1. 数据获取2. 深度学习模型训练3. 图像相似度评估4. 结果展示 二、功能三、系统四. 总结 一项目简介 基于深度学习的PythonOpenCV的甲骨文相似度评估系统&…