问题标签 [abi]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
142 浏览

pointers - 在函数调用中将结构自动转换为指针

在我们的项目中,我们有一个看起来很正常的printf样式函数,修改后的%g格式意味着打印 GUID 而不是普通的浮点类型。对于我们的例子,GUID 看起来像这样:

实际上,打印函数期望传递一个指向 GUID 的指针,而不是结构本身:

然而,源代码库中有几个地方由于某种原因传递了整个 guid:

这种调用风格似乎适用于 MSVC2003 - 是否有一些 ABI 要求使编译器转换该函数调用风格以实际在幕后传递指针?当移植这个代码库以使用 clang/llvm 时,它肯定不会做同样的事情。

有人可以解释为什么第二个版本的调用适用于 MSVC 吗?非常感谢您提供指向相应文档的指针!

0 投票
5 回答
977 浏览

c - 将 f(mystruct *a) 更改为 f(const mystruct *a) 是否会破坏 C 中的 API/ABI?

将函数签名从 1->2 更改是否会破坏 C 中的 API/ABI?
改变 2->1 怎么样?

0 投票
2 回答
4851 浏览

c++ - ARM 设备的交叉编译库

我在将使用 Qt 库的示例应用程序部署到 ARM 设备时遇到了一些困难。我使用为我的系统提供的交叉编译器编译了这些库,我将二进制文件复制到了设备中,并使用相同的编译器编译了一个示例应用程序。当我尝试启动它时,这就是我得到的;

/usr/lib/libstdc++.so.6:找不到版本“CXXABI_ARM_1.3.3”(./libQtNetwork.so.4 需要)

/usr/lib/libstdc++.so.6:找不到版本“CXXABI_ARM_1.3.3”(./libQtCore.so.4 需要)

这可能是什么原因造成的?我使用了制造商提供的工具链,所以应该没问题...编译器是否可能是正确的,但它不是链接到它提供的 libstc++,而是链接到我系统中的 libstdc++,按照链接小路?谢谢!

0 投票
1 回答
501 浏览

mips - 可变参数在 mips 中工作

根据 mips abi 的说法,调用者将前几个参数放在 GPR 中以提高性能,并且不要将这些参数推送到堆栈框架中。但是当我使用 varargs api(stdarg.h) 定义具有可变参数列表的函数时,例如 void func(int type, ...);,api 工作。

我发现 stdarg.h apis 只搜索堆栈中的参数,如果编译器只将前几个参数推入 GPR,为什么 stdarg.h 工作?我错过了关于 ABI 的一些东西吗?

0 投票
4 回答
7452 浏览

assembly - 可变参数函数如何找出机器代码中的参数数量?

像printf这样的可变参数函数如何找出它们得到的参数数量?

参数的数量显然不是作为(隐藏)参数传递的(请参阅此处 asm 示例中对 printf 的调用)。

有什么诀窍?

0 投票
1 回答
5847 浏览

arm - ARM 到 C 调用约定,NEON 寄存器保存

有一个类似的帖子涵盖了常规寄存器。NEON 寄存器呢?据我记得,寄存器的上半部分或下半部分必须在函数调用中保留。我在任何地方都找不到该信息,有人可以澄清一下吗?

谢谢

AAPCS,§5.1.1 核心寄存器

  • r0-r3是参数和暂存寄存器;r0-r1也是结果寄存器
  • r4-r8是被调用者保存寄存器
  • r9可能是被调用者保存寄存器,也可能不是(在 AAPCS 的某些变体中,它是一个特殊寄存器)
  • r10-r11是被调用者保存寄存器
  • r12-r15是特殊寄存器

AAPCS,§5.1.2.1 VFP 寄存器使用约定(VFP v2、v3 和高级 SIMD 扩展)

  • s16–s31 (d8–d15, q4–q7)必须保留
  • s0–s15 (d0–d7, q0–q3)d16–d31 (q8–q15)不需要保留
0 投票
2 回答
1457 浏览

c# - 使用 MonoTouch 创建自定义 UITextField 并覆盖方法

UITextField用这样的背景图片创建了一个:

以下内容在哪里CustomTextField

它工作正常,但文本和占位符在左侧似乎都太近了。所以,我已经开始重写以下方法,但是应用程序崩溃了。

并以同样的方式EditingRectTextRect

有任何想法吗?谢谢你。

更新

例如,我只覆盖了PlaceholderRect(将占位符移动到不同的位置)但是应用程序崩溃了,为什么?

这是日志:

您还需要其他信息吗?我的目标与此链接(堆栈溢出参考)相同,但在Monotouch中。

提前谢谢你,问候。

0 投票
3 回答
668 浏览

compiler-construction - 编译和 ABI 有什么关系?

编译和 ABI 有什么关系?

编译器的唯一工作是为操作系统和/或其他应用程序构建应用程序二进制接口 (ABI)?

关于 ABI,引自维基百科

ABI 涵盖数据类型、大小和对齐方式等细节;调用约定,它控制函数的参数如何传递和返回值的检索;系统调用号以及应用程序应如何对操作系统进行系统调用;而在完整的操作系统ABI的情况下,目标文件、程序库等的二进制格式。

谢谢并恭祝安康!

0 投票
2 回答
3289 浏览

x86 - i386 与 AMD64 ABI 差异

在哪里可以找到 i386 和 AMD64 应用程序二进制接口 (ABI) 之间数据类型的所有差异?

我知道 long 类型在 i386 ABI 中是 32 位,在 AMD64 中是 64 位。它是否正确?

0 投票
5 回答
1632 浏览

c++ - 在 C++ 中,覆盖现有的虚函数会破坏 ABI 吗?

我的库有两个类,一个基类和一个派生类。在当前版本的库中,基类有一个虚函数 foo(),派生类不会覆盖它。在下一个版本中,我希望派生类覆盖它。这会破坏 ABI 吗?我知道通常会引入一个新的虚函数,但这似乎是一个特例。我的直觉是它应该改变 vtbl 中的偏移量,而不实际改变表的大小。

显然,由于 C++ 标准没有强制要求特定的 ABI,所以这个问题在某种程度上是特定于平台的,但实际上在大多数编译器中破坏和维护 ABI 的内容是相似的。我对 GCC 的行为很感兴趣,但是人们可以回答的编译器越多,这个问题就越有用;)