Comstackr Apache httpd dans le bytecode LLVM en utilisant clang

Je veux comstackr httpd dans le bytecode LLVM en utilisant clang . J’ai d’abord essayé de le comstackr en utilisant gcc , pour lequel j’ai fait ce qui suit:

./configure --prefix=/home/varun/apache/httpd/gcc --with-included-apr make sudo make install 

Et il installe avec succès!

Maintenant, je tente de le comstackr avec clang, pour lequel je fais ce qui suit:

CC="clang" CFLAGS="-O4" ./configure --prefix=/home/varun/apache/httpd/clang --with-included-apr make # didn't come to this step sudo make install # didn't come to this step
CC="clang" CFLAGS="-O4" ./configure --prefix=/home/varun/apache/httpd/clang --with-included-apr make # didn't come to this step sudo make install # didn't come to this step 

Et la configuration elle-même échoue. J’ai choisi -O4 car je lisais que LLVM génère des bytecodes si vous utilisez -O4 ou -emit-llvm en tant que CFLAGS (aucun des deux ne fonctionne).

C’est l’erreur que j’ai:

 checking whether the C comstackr works... no configure: error: in `/home/varun/apache/httpd/httpd-2.4.3/srclib/apr': configure: error: C comstackr cannot create executables 

Est-ce lié au fait que l’éditeur de liens ne soit pas en mesure de lier les fichiers bytecode LLVM?

[Je savais que c’était lié à l’étape de liaison, mais je ne pouvais pas faire avancer les choses. Enfin, compilation réussie, alors j’écris ma propre réponse]

Approche 1 (échoué)

  1. Clang installé sur mon système en utilisant le gestionnaire de paquets Synaptic.
  2. Installé binutils-gold, car cela est nécessaire pour donner le LLVMgold.so comme un plug-in à l’éditeur de liens. Mais pour cela le clang qui a été installé, devrait avoir le plugin or.

Essayer de configurer httpd avec cette commande:

CC="clang" CFLAGS="-O4" ./configure --prefix=/home/varun/work/httpd/build --with-included-apr 

Ici, –with-included-apr est requirejs par httpd. -O4 est requirejs pour que la compilation se fasse par bytecode.

Cette étape de configuration elle-même échoue , car le clang installé ne dispose pas du plug-in approprié pour permettre à l’éditeur de liens de lier des fichiers objects bytecode.

Approche 2 (succès)

  1. Binutils installé-or. A également obtenu la source de binutils.
  2. Comstackr LLVM et utiliser le code source binutils pour comstackr, afin que LLVM ait le plugin gold.

Comstackr LLVM,

../configure --with-binutils-include=/usr/src/binutils/binutils-2.22/include --enable-gold --prefix=/usr/local make sudo make install ln -s /usr/local/lib/LLVMgold.so /usr/lib/bdf-plugins/LLVMgold.so 

Maintenant, comstackz httpd

CC="clang" CFLAGS="-O4" ./configure --prefix=/home/varun/work/httpd/build --with-included-apr make sudo make install 

Le bytecode LLVM est une représentation intermédiaire utilisée dans LLVM. Il ne peut être exécuté par aucune machine. C’est pourquoi le script configure se plaint que

 C comstackr cannot create executables. 

Ne pas générer de bytecode LLVM. Essayez plutôt d’utiliser un autre niveau d’optimisation. (et n’utilisez pas -emit-llvm dans CFLAGS aussi).

J’ai répondu à une question très similaire ici:

Générer LLVM IR pour httpd

Il est en fait facile de construire des IR pour les projets les mieux écrits.

Fiche sans vergogne pour notre outil:

https://github.com/SRI-CSL/whole-program-llvm

Bonne chance.