3

LLVM IR を使用して構造データを生成しています。

例えば:

struct mystruct {int a:1; int b:2; unsigned long c} = {{1, 2, 3}};

ドキュメントを読んでデモを試してみましたが、API ではユーザーがパディングと値の組み合わせを自分で処理する必要があるようです。

次のように構造体をもっと簡単に作成する方法はありますか:

fields.push_back(Type::getIntNTy(context, 1));
fields.push_back(Type::getIntNTy(context, 2));
fields.push_back(Type::getIntNTy(context, 64));
structTy.setBody(fields, false /* isPacked*/);

レイアウト作業は本当に大変で、バグが発生する可能性が非常に高いです。初期化子の値を組み合わせるのも大変です。

私の理解では、構造体がパックされていないことをllvm APIに伝えると、自動的にパディングを処理するはずですよね?

コメントはありますか?

4

1 に答える 1

0

パディングは、ターゲット システムの C 標準と ABI によって決定されます。LLVM 自体は、これらの規則について何も知りません (LLVM IR ではなく C 用であるため)。

残念ながら、すべてのパディングの奇妙さとビットフィールドのレイアウトを処理する責任があります。通常、これは C/C++ フロントエンド (clang など) の作業です。

于 2012-11-10T19:18:54.273 に答える