問題タブ [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 は次のようになります。

実際には、print 関数は、構造自体ではなく、GUID へのポインターが渡されることを想定しています。

ただし、ソース ベースにはいくつかの場所があり、何らかの理由で GUID 全体が渡されます。

このスタイルの呼び出しは MSVC2003 で正常に動作するようです - コンパイラがその関数呼び出しスタイルを変換して実際に舞台裏でポインターを渡すようにする ABI 要件はありますか? このコードベースを clang/llvm を使用するように移植すると、確かに同じことは起こりません。

2 番目のバージョンの呼び出しが 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 - varargs は mips で動作します

mips abi によると、呼び出し元はパフォーマンスのために最初のいくつかの引数を GPR に入れ、これらの引数をスタック フレームにプッシュしません。しかし、varargs api(stdarg.h) を使用して、void func(int type, ...); などの可変引数リストを持つ関数を定義すると、API が機能します。

stdarg.h API はスタック内の引数のみを検索することがわかりました。コンパイラが最初のいくつかの引数のみを GPR にプッシュする場合、stdarg.h はなぜ機能しますか? ABIについて何か見逃しましたか?

0 投票する
4 に答える
7452 参照

assembly - vararg関数はどのようにしてマシンコードの引数の数を見つけますか?

printfのような可変個引数関数は、取得した引数の数をどのように見つけることができますか?

引数の量は明らかに(非表示の)パラメーターとして渡されません(ここのasmの例でprintfの呼び出しを参照してください)。

トリックは何ですか?

0 投票する
1 に答える
5847 参照

arm - ARM から C への呼び出し規約、保存する NEON レジスタ

通常のレジスタをカバーする同様の投稿があります。NEONレジスタはどうですか。私が覚えている限りでは、レジスタの上半分または下半分のいずれかを関数呼び出し間で保持する必要があります。その情報はどこにも見つかりません、誰かがそれを明確にすることができますか?

ありがとう

AAPCSから、§5.1.1 コア レジスタ:

  • r0 ~ r3は、引数およびスクラッチ レジスタです。r0-r1は結果レジスタでもあります
  • r4-r8は呼び出し先保存レジスタです。
  • r9は callee-save レジスターである場合とそうでない場合があります (AAPCS の一部のバリアントでは、これは特殊レジスターです)。
  • r10-r11は呼び出し先保存レジスタです。
  • r12~r15は特殊レジスタ

AAPCSから、§5.1.2.1 VFP レジスタの使用規則 (VFP v2、v3、および Advanced SIMD 拡張) :

  • s16–s31 (d8–d15, q4–q7)は保存する必要があります
  • s0–s15 (d0–d7, q0–q3)およびd16–d31 (q8–q15)は保存する必要はありません
0 投票する
2 に答える
1457 参照

c# - カスタム UITextField を作成し、MonoTouch でメソッドをオーバーライドする

UITextField次のような背景画像を作成しました。

CustomTextField次のとおりです。

問題なく動作しますが、テキストとプレースホルダーの両方が左側に近すぎるように見えます。というわけで、以下のメソッドをオーバーライドし始めたのですが、アプリがクラッシュしてしまいます。

同様に、EditingRectメソッドとの両方TextRect

何か案は?ありがとうございました。

アップデート

たとえば、PlaceholderRect(プレースホルダーを別の位置に移動するために) のみをオーバーライドしましたが、アプリがクラッシュします。なぜですか?

これはログです:

他に必要な情報はありますか?私の目標は、このリンク (スタック オーバーフロー リファレンス) と同じですが、Monotouchです。

よろしくお願いします。

0 投票する
3 に答える
668 参照

compiler-construction - コンパイルとABIはどのように関連していますか?

コンパイルとABIはどのように関連していますか?

OSや他のアプリケーションへのアプリケーションバイナリインターフェイス(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 が壊れますか?

私のライブラリには、基本クラスと派生クラスの 2 つのクラスがあります。ライブラリの現在のバージョンでは、基本クラスに仮想関数 foo() があり、派生クラスはそれをオーバーライドしません。次のバージョンでは、派生クラスでオーバーライドしたいと考えています。これはABIを壊しますか?通常、新しい仮想関数を導入することで問題が解決することはわかっていますが、これは特殊なケースのようです。私の直感では、テーブルのサイズを実際に変更することなく、vtbl のオフセットを変更する必要があります。

明らかに、C++ 標準は特定の ABI を義務付けていないため、この質問はプラットフォーム固有のものですが、実際には、ABI を壊して維持するものはほとんどのコンパイラで似ています。私はGCCの振る舞いに興味がありますが、人々がより多くのコンパイラに答えることができれば、この質問はより有用になります;)