Концепция контекста в LLVM - PullRequest
0 голосов
/ 26 января 2020

Я новичок в среде LLVM. Я пытаюсь понять концепцию контекста. Что значит «контекст кода»? Зачем это нужно фреймворку? Из различной информации в сети, кажется, что это информация о состоянии для данного кода. Все еще не могли визуализировать, что он делает? а почему это важно?

1 Ответ

0 голосов
/ 24 февраля 2020

Контекст существует, чтобы позволить одной программе использовать две библиотеки (скажем, графическую библиотеку и библиотеку 3D-аудио), каждая из которых использует LLVM под колпаком, чтобы их LLVM не мешали друг другу. Правило состоит в том, что вы никогда не можете перемещать объекты LLVM между двумя контекстами. Все модули, типы и константы, созданные с одним контекстом, остаются в этом контексте навсегда. (Верификатор проверит, что все IR в модуле принадлежат одному и тому же контексту, на всякий случай.)

Это невмешательство также может быть полезно для обеспечения безопасности потока, когда вы хотите, чтобы два потока выполняли с LLVM одновременно. Вы не можете объединить контексты позже, но вы можете сгенерировать текст ассемблерного кода и объединить его.

Для удобства также существует глобальный объект, но только программа main () должна использовать его, чтобы у нас не было двух экземпляры LLVM снова вмешиваются.

...