Saya menghadiri presentasi tentang Specter dan Meltdown oleh seorang profesor UCL. Dia menyarankan beberapa cara untuk mengurangi Spectre 2 (Branch Target Injection) dengan memutakhirkan ke High Sierra dan menginstal semua perangkat lunak dari sumber dengan switch --mretpoline (sudah digunakan di LLVM dan GCC). Saya ingin menginstal R dan RStudio di macOS High Sierra dengan cara ini. Saya mengunduh sumber untuk keduanya. Prosedur instalasi serupa untuk R dan RStudio. File INSTALL untuk R mengatakan bahwa saya harus menjalankan
./configure
make
Saya memeriksa file "configure" dan makefiles (Makeconf.in, Makefile.in, Makefile.in). Saya tidak melihat cara yang jelas untuk menambahkan saklar. Saya meminta bantuan untuk make, yang juga tidak menyebutkan cara menambahkan switch.
Saya mencari ini secara online dan yang paling dekat yang bisa saya temukan adalah penjelasan retpoline dan Specter 2.
Bagaimana saya bisa mengkompilasi perangkat lunak dari sumber dengan make dan menyertakan --mretpoline switch?
sumber
-mretpoline
.Jawaban:
Versi pendek : Setelah banyak penyelidikan, saya tidak dapat menginstal perangkat lunak pada MacOS dari sumber dengan baik
llvm
dan-mretpoline
bendera, atau dengangcc
dan-mindirect-branch=thunk -mfunction-return=thunk -mindirect-branch-register
bendera. Ini tampaknya lebih umum daripadaR
dan khusus untukMacOS
, jadi saya mengubah judulnya. Saya menduga bahwa ini tidak dapat dilakukan pada Mac pada tanggal 27 April 2018. Saya menjalankan macOS High Sierra versi 10.13.3 (17D102).Versi panjang : Hal berikut ini berlaku untuk GnuPG, yang saya putuskan untuk diinstal sebelum R (karena R membutuhkan gfortran, yang membutuhkan gcc, yang membutuhkan MPFR , yang dilengkapi dengan tanda tangan GPG yang ingin saya verifikasi). Saya mengikuti langkah - langkah untuk menginstal GPG dari Git .
LLVM terbaru (dengan Homebrew)
LLVM dari Apple gagal (lihat di bawah), jadi saya menggunakan LLVM clang 6 untuk memperbaikinya dan saya instal dengan homebrew (sedikit mengalahkan tujuan kompilasi dari sumber dengan flag tertentu, tetapi saya kehabisan waktu). Saya memasang homebrew dengan:
kemudian memperbaruinya dua kali dengan
Menginstal dentang dengan Homebrew diperlukan XCode, jadi saya menginstalnya dari App Store. Kemudian saya mengikuti langkah-langkah di halaman ini :
Lalu saya menambahkan
-mretpoline
flag ke keduanyaC
, saya menambahkan path ke keduanyaC
danC++
kompiler, dan saya memanggil skrip shell dari GPG:Saya mendapat kesalahan ini:
File log
config.log
memberikan rincian lebih lanjut:Utas ini dengan komentar dari Januari 2018 di bagian bawah mengatakan bahwa Mac belum didukung dengan
-mretpoline
:Sejak itu tidak ada tanggapan. Jadi menginstal dengan LLVM gagal.
GCC (dengan Homebrew)
Alternatif lain adalah mengkompilasi dengan
gcc
bukannya LLVM. Saya menginstal clang (6.0) versi terbaru denganDan saya menambahkan
gcc
bendera dari halaman ini , yang berbeda dari LLVM. Skrip bash ini menambahkan flag untuk keduanyaC
danC++
, memberikan path ke kedua kompiler, dan memanggil skrip shell dari GPG:dan sekali lagi saya mendapatkan kesalahan:
File log
config.log
memberikan rincian lebih lanjut:Sungguh aneh bahwa kompiler tahu tentang nama yang mirip dengan garis bawah ekstra.
Jadi
gcc
gagal juga. Dan sekarang saya bingung.Lampiran: LLVM dari Apple
Skrip bash berikut mengekspor flag untuk
make
dan memanggil skrip shell dari GnuPG:Gagal dengan kompiler yang dikirimkan dari Apple, tetapi itu menunjukkan bahwa flag-flag tersebut sampai ke kompiler:
Jadi komentar @ seth benar dalam cara mengirim flag ke compiler.
sumber