x86 上的堆栈对齐

2023-11-24

在 x86(32 位)平台上,当运行使用 gcc-4.8.1 编译的代码时,出现了一个神秘的总线错误-march=pentium4。我将问题追溯到 SSE 指令:

movdqa %xmm5,0x50(%esp)

esp = 0xbfffedac。movdqa要求地址是 16 字节对齐的,但这里不是这种情况,因此会出现总线错误。

如果使用编译则不会出现该问题-march=native(这是 Core-i3 处理器)。

据我所知,Linux/x86 上唯一保证的堆栈对齐是 4 字节。因此,代码生成器应该选择使用似乎很奇怪movdqa,即使有指令,也没有某种对齐检查movdqu对于可能未对齐的访问。

所以,这看起来 gcc 中有一个错误。

我不是 SSE 和 x86 ABI 方面的专家,在发送错误报告之前,我希望得到反馈。


现在 gcc 中的默认值是-mpreferred-stack-boundary=4(16 字节对齐),设置-mincoming-stack-boundary=4.

因此,如果从具有不同堆栈对齐假设的其他编译器(例如 OCaml)生成的代码调用使用 SSE 的 gcc 代码,则可能会出现问题(请参阅讨论在 OCaml 错误跟踪器上)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

x86 上的堆栈对齐 的相关文章

  • Visual Studio - X11:缺少 DISPLAY 环境变量

    我正在使用 Visual Studio 2019 Enterprise 开发跨平台 Windows Linux x64 GUI 应用程序 在这个 2019 版本中 我们可以使用 Visual Studio调试平台 Windows 本机 和
  • 哪些 GCC 优化标志对二进制大小影响最大?

    我正在使用 GCC 为 ARM 开发 C 我遇到了一个问题 我没有启用优化 我无法创建二进制文件 ELF https en wikipedia org wiki Executable and Linkable Format 对于我的代码 因
  • 亚马逊 Linux - 安装 openjdk-debuginfo?

    我试图使用jstack在 ec2 实例上amazon linux 所以我安装了openjdk devel包裹 sudo yum install java 1 7 0 openjdk devel x86 64 但是 jstack 引发了异常j
  • Apache LOG:子进程 pid xxxx 退出信号分段错误 (11)

    Apache PHP Mysql Linux 注意 子进程 pid 23145 退出信号分段错误 11 tmp 中可能存在 coredump 但 tmp下没有找到任何东西 我怎样才能找到错误 PHP 代码中函数的无限循环导致了此错误
  • 使用 --prof 选项创建多个日志文件而不是一个 v8.log 的节点

    我正在尝试使用 prof 选项来分析我的 Node 应用程序 但我发现不是一个单一的 v8 log 文件 而是使用诸如isolate 0x9582b40 v8 log isolate 0xa1cab78 v8 6049 等前缀创建的多个文件
  • 从哪里获取 iostream.h

    我正在尝试在 Linux 中做一些事情 但它抱怨找不到 iostream h 我需要安装什么才能获取此文件 这个标准头的正确名称是iostream没有扩展名 如果您的编译器仍然找不到它 请尝试以下操作 find usr include na
  • 如何指定配置脚本的包含目录

    我的工作场所有一个 Linux 系统 其中包含相当旧的软件包 并且没有 root 访问权限 我正在从源代码编译我需要的包 prefix somewhere in homedir 我的问题是我只是不知道如何说服配置在特定目录中查找头文件 源码
  • 隐式声明“gets”

    据我所知 隐式声明 通常意味着该函数必须在调用之前放置在程序的顶部 或者我需要声明原型 然而 gets应该在stdio h文件 我已包含 有没有什么办法解决这一问题 include
  • Java时区混乱

    我正在运行 Tomcat 应用程序 并且需要显示一些时间值 不幸的是 时间快到了 还有一个小时的休息时间 我调查了一下 发现我的默认时区被设置为 sun util calendar ZoneInfo id GMT 08 00 offset
  • 如何在 bash_profile 文件中添加导出语句?

    我正在尝试了解是否必须添加导出语句来在 bash profile 文件中设置变量 我该怎么做呢 例如 如果我必须添加 export AX name 那么我应该将其简单地写在文件末尾还是我还需要编写其他内容 简单写一下export AS na
  • 为什么使用signalfd无法捕获SIGSEGV?

    我的系统是ubuntu 12 04 我将示例修改为man 2 signalfd 并添加sigaddset mask SIGSEGV 在示例中 但我无法得到输出SIGSEGV被生成 这是一个错误吗glibc 源代码片段如下 sigemptys
  • 如何在 Linux 中向热敏打印机发送 ESC/POS 命令

    我正在尝试在热敏打印机上发送 ESC POS 命令 但每当我发送它们时 热敏打印机都会将它们打印为文本 而不是作为命令执行它们 我在 prn 文件中编写这些命令 每当我执行 lp 命令来打印文件时 这些 prn 文件也会被打印 但作为文本
  • 有没有办法提高linux管道的性能?

    我正在尝试使用 64 位将超高速数据从一个应用程序传输到另一个应用程序CentOS http en wikipedia org wiki CentOS6 我使用以下方法进行了基准测试dd发现阻碍我的是管道而不是程序中的算法 我的目标是达到
  • GCC 详细模式输出解释

    我是 Linux 新手 谁能向我解释一下我的 hello world 程序的以下详细模式输出 另外 这些文件是做什么用的crt1 o crti o crtend o crtbegin o and crtn o and lc and lgcc
  • 让 GCC 使用进位逻辑进行任意精度算术而不需要内联汇编?

    当使用任意精度算术 例如 512 位整数 时 有没有办法让 GCC 在不使用内联汇编的情况下使用 ADC 和类似指令 乍一看 GMP 的源代码表明他们只是为每个支持的平台提供了汇编实现 这是我编写的测试代码 它将命令行中的两个 128 位数
  • 如何在 Ubuntu/Linux 发行版中安装 Tesseract-OCR 3.03?

    我和一个朋友有兴趣为 CV 项目训练 tesseract OCR 引擎 我们尝试使用一些包装器 例如 PyTesser 和 pyocr 但结果目前不如我们需要的那么准确 因此 我们希望尝试训练超立方体以更好地实现我们的目的 即识别食品标签上
  • x86:寄存器操作为内存内容和内存地址?

    寄存器 gt 内存地址 gt 内存内容 内存地址 gt 内存内容 上面的模型正确吗 而且 如果是的话 你能建议我是否认为正确吗 movl eax ebx gt 它将 eax 的内存地址移动到 ebx 这也会导致内容移动 movl eax e
  • EULA 接受 Bash 脚本

    我有一个尝试安装垃圾箱的脚本 除了 bin 在 more 中打开 EULA 之外 一切正常 在脚本再次开始并自行完成安装之前 您必须手动 ctrl c 退出此 more 实例 因为这更多的是逃离 shell 所以脚本在打开后不知道要运行什么
  • 为什么GCC编译的应用程序总是包含_mcount符号?

    库并不总是包含 mcount 符号 但应用程序包含 您可以使用 gobjdump 或 nm 实用程序验证这一点 我读过 mcount 用于实现分析 但即使禁用分析并启用优化 O2 该符号仍然存在 它还有其他额外的用途吗 更新 我使用的是 S
  • 为什么 INT64_MIN 的定义不同?为什么他们的行为不同?

    The stdint h我公司的标题是 define INT64 MIN 9223372036854775808LL 但在我项目的一些代码中 一位程序员写道 undef INT64 MIN define INT64 MIN 92233720

随机推荐

  • 检查本地存储是否可用

    我知道有很多关于检查的问题localStorage但如果有人在浏览器中手动关闭它怎么办 这是我用来检查的代码 localStorage setItem mod mod if localStorage getItem mod null ale
  • 活动被销毁是因为方向改变还是因为应用程序正在关闭?

    我有一个Activity启动一个异步任务 允许以纵向或横向方向显示活动 当方向改变时 Activity 将被销毁并重新创建 无论方向改变多少次 任务都会继续工作 它还成功地将结果返回给活动 根据 CommonsWare 的回答 http g
  • 如何使用 Selenium WebDriver C# 从下拉列表中选择一个选项?

    我正在尝试选择一个选项进行网络测试 可以在这里找到一个例子 http www tizag com phpT examples formex php 除了选择一个选项部分之外 一切都很好 如何按值或按标签选择选项 My Code using
  • 如何将 selenium chrome 选项添加到“desiredCapability”?

    对于 selenium 我有很多 chrome 选项 我需要通过以下方式将其传递给远程网络驱动程序DesiredCapabilities 在本页有一个关于如何执行此操作的 java 示例 但是如何在 python 中执行此操作 这文档很穷
  • 使用 CNN 处理一维数据

    只是想知道是否有人这样做过 我有一个一维的数据集 但不确定它是否是正确的单词选择 与通常的 CNN 输入图像 二维 不同 我的数据只有一维 一个例子是 instance1 feature1 feature2 featureN instanc
  • Python ctypes 未在 Mac OS X 上加载动态库

    我有一个 C 库repeater so我可以通过以下方式从 Linux 中的 Python 加载 import numpy as np repeater np ctypeslib load library librepeater so 但是
  • 使用 GCC 的链接器错误,包括。用于 binutils 和 textinfo

    我每次在编译程序 配置和安装一些东西时都会收到此错误 例如binutils 文本信息等 usr local bin ld this linker was not configured to use sysroots collect2 err
  • 使用 Apple Pay 创建令牌,无需付款

    我有两个问题 有没有办法使用 Apple Pay 创建 STPToken 而无需付款 在我的 iOS 应用程序中 客户在注册时要么输入付款信息 要么决定使用 Apple Pay 当客户决定购买时 注册后的某个时间 他们的卡将自动扣款 我可以
  • Kdevelop 步骤和断点不起作用

    我需要使用步骤 单步执行 单步执行指令 和断点 但选项 跳过 跳过指令 等 在菜单 运行 中被禁用 当我在程序中放置断点时 程序不会在此断点处停止 我发现我必须关闭编译器和链接器的优化 但我不知道如何关闭 Kdevelop 4 4 1 中的
  • ASP.NET:视图状态和以编程方式添加用户控件

    当使用 LoadControl string path 以编程方式添加用户控件时 在用户控件的页面生命周期中 它何时使用其视图状态初始化其子控件 我问这个问题是因为我正在以编程方式加载的用户控件之一有一个 TextBox 控件 该控件未通过
  • 使用批处理文件命名驱动器

    我正在寻找一个命令来重命名我在 WinXP 中每次启动时映射的几个驱动器 我已经完成了映射部分 现在我有兴趣使用自定义名称以编程方式命名它们 这样我就可以保持它们的一致性 我放弃了 DOS 转而学习 PowerShell 最终的结果是这样的
  • Node.js“require”语句中的大括号(大括号)

    我试图理解下面两个 require 语句之间的区别 具体来说 其目的是什么 s 缠绕着ipcMain const electron require electron const ipcMain require electron 他们似乎都分
  • 如何在 Android 中缩放文本视图?

    谁能指导我在android中的多个视图上执行放大和缩小操作 我需要在图像 文本视图的触摸上执行放大和缩小操作 我的父级布局应该是什么 这是在触摸图像视图时缩放图像的代码 如何缩放文本视图 请帮我 These matrices will be
  • 所有 OLE 错误代码的列表

    是否有所有 OLE 错误代码的列表 None
  • 如何跟踪 WCF 序列化问题/异常

    我偶尔会遇到这样的问题 在 WCF 序列化期间 从我的 OperationContract 返回 DataContract 后 抛出应用程序异常 我收到的唯一 且意义不大 的消息是 System ServiceModel Communica
  • 发送至特定远程 IP 的第一个 UDP 消息丢失

    我正在开发一个基于 LAN 的解决方案 其中一个 服务器 必须控制多个 玩家 我选择的协议是 UDP 因为它很简单 我不需要连接 我的流量仅由时不时的短命令组成 我想使用混合广播消息进行同步 并使用单个目标消息进行玩家单独的命令 多播 TC
  • HTML 输入不允许数字

    现在我有一个像这样的输入字段
  • 在 SVN 中合并后我无法提交更改

    使用 TortoiseSVN 合并项目的两个分支后 我在提交更改时遇到了问题 详细信息如下 我做了一个合并分支到主干project我正在努力 Project包括主存储库和与主存储库联合的库 如下所示svn 外部 图书馆也有分支 作为子目录p
  • 如何将本地变量传递给远程“Invoke-Command”? [复制]

    这个问题在这里已经有答案了 我正在尝试使用以下命令检索位于远程服务器上的文件的哈希值Invoke Command 当我给出如下完整路径时 它工作得很好 Invoke Command ComputerName winserver Script
  • x86 上的堆栈对齐

    在 x86 32 位 平台上 当运行使用 gcc 4 8 1 编译的代码时 出现了一个神秘的总线错误 march pentium4 我将问题追溯到 SSE 指令 movdqa xmm5 0x50 esp esp 0xbfffedac mov