Not only is the Internet dead, it's starting to smell really bad.:2019年08月分

2019/08/06(Tue)

[オレオレN6] いいかげんOpenSSLのマージ作業終わりにしたい

なかなかゴールが見えねえ、つーか自分で使う予定の無いマシンのport全部切り捨てちまえば半月前に終ってた気もするがしゃーない。

前回PA-RISCのasmコードが使われてねえという話を書いたけど、どうもtargetをgccにしてもGNU asではなくSVR4 as(/usr/ccs/bin/as)向けのコードを吐くようなのでそのままでは使えないかんじ。 あとN/hppaはPA-RISC1.1と2.0でシングルバイナリみたいなんだけど、このasmコードはCPUIDでの切替無しに2.0の命令使うみたいだからどっちみちアカンっぽい。

そんでここ数日の作業はN/mipsのOpenSSLでは無効になってるオプションをLinuxなの設定と同じにして高速化のためのasmコードを有効にしてみた。

とはいえ手元にmipsなマシンなぞ一台もないので *1、gxemul環境でも作らんとベンチ取れねえので有効にしてどれだけ速くなるのか、それ以前にちゃんと動いてるのかも未確認でビルドが通ったってだけなので以下略。

しばらく前にお金ないからチラシの裏のVPSのプランをいっちゃん安いのに変更してディスク容量ギリギリにしたので、 buildbotとAnita+QEMU使ってのCI環境を止めてしまったからなぁ。 つーかSSDの単価クッソ下がってるはずなのにVPNの料金ってここ数年どこも完全に無風で変動無いよね…カクテルかよトム・クルーズの映画かよ。

そもそもN/mipsとかまったく知識が無いので

というえらいややこしい事になっとるのを今更知りましたわ *2そんなマクロやifdefをユーザーランドアプリケーションが適切に使ってくれるとは限らんわけでなぁ。

もちろんOpenSSLはそんなこと考えて書かれてないわけで、マクロやifdefは使わず

というPerlスクリプトの引数にABI(o32あるいはn{32,64})を指定して実行することでそれぞれ別のasmコードを吐くという仕掛けになっている、クロスビルドなにそれうまいの。 なもんで今オレオレN6のビルドツリー放り込んだコードはo32なのでn64だとエラーになるし、opensslconf.hはILP32決めうちなのでLP64用のifdefも必要なのだ。

なので対策としては

のどっちかなんだけど、前者もやってやれないことはないけど保守性考えるとやりたくねーのよね。

なもんで後者で作業してるんだが、いちおうarch/mips/{o32,64}ちゅーディレクトリ掘れというルールがあるっぽいのだけど、share/mk/*.mkにはそれをよきに計らってくれるマクロは無いっぽ。 どーせ自分でセコセコMakefile書かねばならんルールならわざわざ従う必要も無えよなってことで、わかりやすくarch/mips64で掘ることにしたどうせユーザー1名以下略。

そんでmips64以下にn64用のasmコードとLP64対応したopensslconf.hを置いてビルド流したんだけど、aes-mips.plとsha512-mips.plの吐くコードの中にn64でもdla命令の代わりにla命令を吐く箇所が複数あって、これに対して警告が出てビルドエラーになる。 調べてみると 1.1.1では修正されてるのでcherry-pickすることで対応した。

*1:掘ればまだSigmarion2の一台くらいは出土するかも知れんけど、あれKSEG2無効にしないと不安定でちょっと負荷かかるとパニックする問題って解決してねえだろうから無意味やな。
*2:例のアレでない方のSGI(Silicon Graphic)の呪いかなんかなのかな、そっちはさっぱりだ。

[オレオレN6] 続・いいかげんOpenSSLのマージ作業終わりにしたい

とかいいながらN/alphaでもcpuidとasmコードを有効にしてみた。

Nにはregdef.hが無いのだけどほとんどのマクロはmachine/asm.hにあるのでそっちをincludeするように書換えればおk。 ただし

#define fp      s6
#define AT      $at     /* assembler temporary */

が不足してるみたいなのでそこだけ対応が必要、regdef.hって発祥はどこなんやろDEC AlphaやしOSF/1とかTru64UNIX由来かと思ったらMIPSにもあるみたいだし。

あと以下のopensslconf.hにあるDES高速化オプション、DEC Alphaの場合unsigned intにしたら20%速くなったぜ!とコメントにあるのに、LinuxもOSF/1もTru64UNIXもunsigned longでpkgsrcのNだけなんやな>unsigned int

#if (defined(HEADER_NEW_DES_H) || defined(HEADER_DES_H)) && !defined(DES_LONG)
/* If this is set to 'unsigned int' on a DEC Alpha, this gives about a
 * %20 speed up (longs are 8 bytes, int's are 4). */
#ifndef DES_LONG
#define DES_LONG unsigned long
#endif
#endif

ということでどっちが速いのか実測せんとアレやけど、DEC AlphaはNの動く無償のエミュレーターとか無さそうでな…実機なんて絶対に置きたくねえ…

2019/08/07(Wed)

[Windows] RDP捨てたい

先々月くらいのWindows Updateの後からリモートデスクトップで7→10で接続するとスクリーンロック解除の途中でハングアップするので困ってる。

調べると5月の KB4497935な累積アップデートで混入したバグのようで Know IssueにIntel HD GraphicsとかNVIDIAでGPUアクセラレーションの問題でリモートデスクトップがブラックアウトとある。

ただうちは

という感じでちょっと同じバグでは無さそうな気もすんのよね。

ちなみに7からログインできない状態に陥ってもiOSとかからMS製のRDPアプリで接続すると成功する、ただし1度ログイン可能になるまでは応答に時間がかかるし時にはタイムアウトになるのは7と同じ(2度目以降は問題なし)。 iPhone 5Sの4インチからRDPは苦行以外のなにものでもない。

なので7のクライアントがなんか悪さして10のサーバーがおかしくなるみたいな状態っぽいのだが、原因はわからん。

[宗教] ThinkPad X201のCPU FAN死んだ

この季節によりによってCPU FANが死んだのであちあちコンロ点火!アチチチチチチチチチチチwなのであるクソが、前回交換から2年持たないのほんとひで。

温度上昇でサーマルエラー検知からの強制シャットダウンならまだいいけど、どっかの部品が死にかけてるのか画面がチラつき出してそのうち突然死しやがるので、マザボもそろそろ寿命かもしれん。

以前は新品の純正CPU FAN + ヒートシンクも2500円くらいで売ってたんだけどさすがに供給も絶えたようで、怪しい中華製CPU FANに交換した再生品ばっかだし値段も中古本体の方が安かったりする本末転倒。 なのでヒートシンクなしで数百円で売ってるやつをポチってみたけどどうなることやら。 すでにX61で通った道ではあるがどうせサイズ合ってない騒音酷い寿命短いの3重苦なんやろうなぁこれ、まぁしゃーない。

2019/08/08(Thu)

[オレオレN6] まだまだまだOpenSSL(以下略

ふーんOpenSSLのmasterにはPA-RISCのasmコードをSVR4 asでなくGNU asでビルドできるようにする差分が commitされとるな、ということでこいつをmergeすればとかちょっと一瞬考えたんだがPA-RISC 1.1 vs 2.0問題があるからN的にはMACHINE_ARCH増やすとかせんとならんのか、やめやめ。

そんで残るはarm(aarch64)なのだけど、perlスクリプトで吐かれるasmコードにNローカルでThumb-2命令対応?とかclangのバグ対策?とか入っててこれもコード監査せんとならん…困ったなこれ。

[音楽] The Velvet Underground & Nico/All Tomorrow's Parties

認知症老人は陽性から陰性症状に遷移しつつあるようで、物盗られ妄想やカプグラ症候群(すり替わり妄想)からくる大迷惑な異常行動はここ数日は現れないようになってきた。 それでもずっと家に引きこもってるにも関わらず、こっちが買出ししてきた食材が「昨日誰それと出会った時に頂いたもの」に化けてるわ「明日その誰それが家に来るので返礼の意味を込めておもてなしをしなければならない」と一週間分の食材を出鱈目な調理であっというまに生ゴミにするので、正気の時間は一刻たりと無い。

この奇妙な妄想でひとつ思い出したのがAll Tomorrow's Partiesという曲だ *1

貧しき少女は夢見る、どんな衣装を纏えばいいのだろうと
明日から催されるはずのパーティー会場で
そして彼女は誰ものとも知れぬお下がりのドレスをまとう
明日から催されるはずのパーティー会場で
しかし現実の彼女はどこへ行こうと、行く先々でトラブルを起こすだろう
やがて夜が訪れる頃には
彼女はこれでいったい何度目かもしれぬ、その週一の物笑いの種になるんだ
そして彼女は扉の裏で涙を流すのだろう

灰かぶり姫をモチーフに、存在しない明日からのパーティーを妄執してボロ切れから死体を覆う黒布までをまとい、物笑いの種になり誰にも哀れまれない気のふれた少女の歌である。 今の時代だと学名タピオカインスタ蠅なんかもこれやね(ぉ。

こういう曲を有名人グルーピー上がりのモデルであるNicoに歌わせたLou Reedって最高に性格が悪いよね(褒め言葉)、偏屈大王の名に相応しい。 つーか上に貼ったNicoの死後となる再結成ライブ(まあ存命でも呼ばなかっただろうけど)の音源で、自分歌わずにJohn Caleに押しつけてるあたりも一悶着あったんだろうと想像に難くない。

認知症において妄執といった異常行動は中核症状ではなく周辺症状と呼ばれるのだけど、その分類を知った時は??逆じゃねえの??などと思ったものだけど、今なら理解できる。

つまり中核症状が「壊れたテープレコーダー」状態になることなら、そこでデタラメに再生される録音内容ってのは本人が生まれてきてからずっとマイクに向かって吹き込んできた人生そのものなのだ。 病気で人格が豹変したというわけではないので(当人と関わりが薄い他人には豹変にみえるだろうけど)周辺症状としか分類しようがねえのよな、それでトラブルが起きるなら元よりそういう人間だったのだ。 こんなもん治療しようと思ったらそれこそタイムマシンで出生時まで戻って人生最初からやり直させるしかない、不可能ちゅーこと。

元々いい齢こいたオトナであっても自他境界が曖昧とかそもそも溶けちゃってる頭赤子な人は多いし(うちの患者もそうだった)、こういう人はちょっとでも脳の機能が落ちはじめたらあっという間に認知症になるんだろうなぁ。 とりあえず人生半分過ぎたら認知症の予防のためにも、テレビとかインターネットの掲示板とかSNSでおままごととかお人形さん遊びみたいな、自他境界が曖昧になるのを楽しむまるで質の悪いドラッグの乱用じみた行為なぞ止めて、人生の明るい側だけを脳に刻んでくべきなんだな(例えどれだけ苦しくても)。

つーか人生の半分じゃ時既に遅しな気もするし、やはりDon't Trust Over Thirtyの精神で 27歳で死んでおくのがベストな選択であるといえる、ハローハローどのくらい酷い?

*1:学生時代コピバンで演奏してピアノ連打で爪割れた思い出、というかライブでやるような曲じゃねえ!

[宗教] ThinkPad X201の故障個所特定

前回だがいつものThinkPadの持病であるCPU FAN死亡といったな、あれは嘘だ。

今日になって液晶ベゼルが高温で触れないくらい熱く焦げ、液晶の左下隅の真っ黒になっとって顔面ブルースクリーン。 こりゃやべえと慌てて分解してみたら、CCFL周りの配線がショートしとるようで異常高温になっとった。 つーことでCPU FANからの熱を逃がす目的の液晶ヒンジを逆ルートで伝わって本体アチチになっていただけで、CPU FAN自体は回っていたもよう。 ということで液晶の故障なんだから画面がチラつくのも当然なんやな、マザーが死んでるとかではなかった。

なお我が家のX201は 過去記事のとおりAFFS液晶と交換した改造品でHydis製のHV121WX4-120なのよね、こいつのバックライトの発熱は元より大きくそもそも危ない橋だった感ある。 これ液晶メーカー的にはフレームにさらに放熱パネル密着させろな設計なんだろうな、逆にThinkPadはCPU FANの発熱をヒンジ経由で液晶とトップパネルに逃がして放熱する設計っぽいので、この改造そのものに無理があったのだろう。

いちおう前兆としてはここ最近Windows起動中の黒画面なんかで周辺と中央で輝度の色ムラが発生するなーとは思ってたんだよね、どーせCCFLの劣化やろ貧乏は嫌どすえで思考停止しておった。

こんなこともあろうかといつもの通り確保してある予備の同型パネルと交換、取り外した故障パネルも冷ませば表示に問題ないのでバックライトだけ交換したら使えそうなので捨てずにジャンク箱。 これCCFLでなく低発熱のLEDに改造できねえもんだろうかな、このパネル色再現性と視野角はIPS液晶レベルなんだけどCFFLで電力消費が大きく熱いのだけがネックだ。

2019/08/09(Fri)

[オレオレN6] GXemul is broken

今時のコンテナ技術や構成管理ツールに慣れてしまうと手作業でエミュ環境作ってOSインストールとか苦痛以外の何物でもないので、毛色は違うけどpy-anitaというNの自動テストフレームワークは仮想マシンのインストールを自動でやってくれるので、それを久しぶりに使ってみたんだが

/dev/ttyE0: Device not configured

でGXemul使ったhpcmipsな仮想環境がlogin:の前で止まってしまうっぽいのだが、うーん?

オレオレN6の問題かと思ったけど、TNFなN7/N8どいつも同じ状態なので無関係っぽい、調べたらanitaの作者のぐっさんが 本家のMLGNATに報告しとるからそのうち直るやろ(適当)。

さしあたりの作業はマルチユーザーな必要は無いので、インストーラーからrc.confをrc_configured=NOに書換えてシングルユーザーで動かしとったけど、MobilePro 780 emulationならまだ動いてるとあるので試したらvi立ち上げるだけでカーネルデバッガ堕ちた。

[宗教] ThinkPad X201をAFFS液晶に交換し、更にLEDバックライト化する

ThinkPad X201をIPSに匹敵する色再現と視野角にするにはAFFS液晶であるHydis HV121WX4-120に交換するのが定番、なんせ完全互換なので加工も不要でフレキとインバーターがそのまま流用できるのでな。 しかし困ったことにバックライトがLEDでなくCFFLでしかもかなりの高発熱なので、 昨日の記事でも書いたように異常発熱起こしてパネルとベゼルが焦げるというわりと怖い事故が起きかねないリスクがある。

なもんで低発熱なLEDバックライトに交換できねえかなと思って調べてたんだけど、HV121WX5-111という同サイズでAFFS液晶かつLEDバックライトという製品を使って改造してる人がいつもの 中華ThinkPadフォーラムにおった。 ただHV121WX4-120とは違って形状とコネクタに一切の互換性が無いので、トップパネルの加工とフレキの切った貼ったが必要なようで難易度高いわなこれ。

なのでX61の液晶のLEDバックライト化と同様にインバーター改造と焦げたHV121WX4-120のCFFLをLEDに換装するという方向で攻めたいのだが、 単にLED化するのなら純正でLEDバックライトモデルも存在するわけで、あまりそういう改造をしてる人がおらんのよね。いちおう 成功例はあるようだけど業者パワーでパーツ専用で作ったみたいなので参考にならん。

そんでちょい調べたらAliexpressに X201 LEDバックライト改造キットという正にワイが欲しかったものが売ってるではないですか、そのうち買ってみますかねこれ。

2019/08/10(Sat)

[WWW] 例のアレ

そもそもCDNって今やプライバシーを売り飛ばし悪い連中の防弾壁になったりのインターネットの汚水溜めの側じゃなかったっけ、ヤクザがくみてふの責任回避に破門状回すようなもんか。 ヘイト遮断はするけど違法コンテンツサイトを遮断しないのは、シノギでクスリには手を出すなみたい建前なんやな。

[オレオレN6] OpenSSL + MIPS

Configureで生成されるopensslconf.hの定義でNetBSDとLinuxで異なってるCPU最適化のマクロなんだけど、GXemul + hpcmipsでベンチをとったらMD2/RC4はLinuxでの設定にした方が性能が良く、DESもわずかにLinuxの方が上、BF(Blowfish)はどっちも変わらんという感じ。 あとBN(big number)もasm有効にするとそれなりに性能良くなってる気がするが正直よくわからん。

まぁMD2/RC4/DESなんぞ今更使うことも無いのでどうでもいいんだが、問題はLinuxでは有効になっとるアセンブラの方でAESとかSHA1とか現役でよく使うやつ。これCコードよりも遅いつーかAESは数分の1の速度しか出ないので何かがおかしい。 うーんmipsでも世代によるんかなこれ、Linux/mipsでもテストしないとアレやな…

2019/08/11(Sun)

[オレオレN6] 続・OpenSSL + MIPS

NではOpenSSLがlibcにあるSHA512実装を使うように改造されてる。なもんでsha512-mips.Sはビルドされんので気づかなかったのだが、このファイルを生成するためのsha512-mips.pl実行時にo32を指定してもなおdadduといった64bit拡張命令が使われとるので、どうやら最低要求のISAがMIPS IIIじゃねえのってことに気づくなど。

おそらくISAについて元々

を要求するようなので、そこは下をMIPS IIIに足切りしたってことなんだろうな *1、ならNのデフォルトであるgcc -mips1でビルド通らんコードになるわそら。

ちなみにN/hpcmipsで使われてるCPUはTOSHIBA TX39XX(MIPS I)やNEC VR41XX(MIPS II)だからCOPTS=-mips3するわけにもいかんので、こいつら全部無効にせんと駄目ってこった、またifdefが厚くなるな…

しかし問題はやっぱりAESがとんでもなく遅い理由よな、いちおうaes-mips.SはMIPS Iの命令だけしか使われてなようなんだが、MIPS III以上で動かさないと数分の1の速度でCコードより遅くなるなんてありえんと思うんだけどね、まぁトーシロ考えだけどさ…

とりあえずはN/hpcmipsではなくGXemul -emaltaでN/evbmipsでベンチとってみますかね、またバグ対策にシングルユーザーモードで起動とかめんどいのでMicrosoft GianoとN/emipsも試したんだけど、こっちはこっちで起動途中にCPU 100%のままに刺さるっぽいので諦めた、もしかするとマシンスペック足りねえのかな…

*1:かといって他のコードも全てISAはMIPS III以上を想定してるわけでもなく、Big NumberはMIPS IIとMIPS IIIで別のコードになっとるようで、ワイみたいなトーシロには混乱しかねえなこれ…

2019/08/12(Mon)

[オレオレN6] 続々・OpenSSL + MIPS

とりあえずgxemul -emalta でevbmips mips64el環境用意してベンチをとってみたけど、問題のAESもCコードと同等かそれ以上に性能出るようにはなった。 つーことで少なくともmips64であれば有効にしておいた方がいいという感じなんやな。

こっちがTNF N6の結果

OpenSSL 1.0.1i 6 Aug 2014
built on: NetBSD 6.1.5
options:bn(32,32) md2(int) rc4(ptr,int) des(idx,cisc,16,long) aes(partial) idea(int) blowfish(ptr)
compiler: gcc version 4.5.3 (NetBSD nb2 20111202)
The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
md2               8971.31        18.01k       22.09k       27.68k       27.27k
sha1                29.33k       88.24k      276.09k      320.67k      483.97k
rc4                 68.24k      728.21k      754.15k      668.54k      777.57k
des cbc             55.41k      120.56k       11.99k      114.13k       68.27k
des ede3            42.32k     9600.00        37.96k       35.33k       30.85k
aes-128 cbc        216.45k      129.56k      245.84k       24.19k      221.71k
aes-192 cbc        176.62k      176.41k      212.42k      177.80k      217.19k
aes-256 cbc        101.68k      185.50k      168.79k      187.93k      184.76k

そんでこちらがopensslconf.hの設定をLinuxと同じにしてasmコードも有効にしたオレオレN6

OpenSSL 1.0.2k  26 Jan 2017
built on: reproducible build, date unspecified
options:bn(64,32) md2(int) rc4(ptr,char) des(idx,cisc,16,long) aes(partial) idea(int) blowfish(ptr)
gcc version 4.5.3 (NetBSD nb2 20111202)
The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
md2                 10.40k       21.04k       33.09k       39.72k       40.14k
sha1                45.79k      126.83k      325.21k      390.09k      568.55k
rc4                852.41k      921.17k      835.38k      827.15k      830.52k
des cbc            116.81k      101.42k      122.11k      102.74k      122.14k
des ede3            42.97k       43.51k       39.77k       37.22k       38.20k
aes-128 cbc        223.64k      242.86k      248.47k      220.41k      215.45k
aes-192 cbc        195.34k      193.07k      215.43k      213.97k      194.33k
aes-256 cbc        173.26k      155.52k      158.01k      188.16k      187.30k

うーん微妙過ぎる…

あとgxemul -emaltaはcdromエミュが機能してないっぽいので、インストールは仮想ディスクをvnd(4)経由でマウントしてtarballを展開する必要があった。 あとこっちはhpcmipsと違ってマルチユーザーで動いとるな。

[オレオレN6] N/evbmips-mips64el

なんか変だなという疑問をエミュレーターの不具合やろで脳死してたのだが、N6/mips64ってkernelはn64だけどuserlandやkernel modueはn32でビルドされとるんやな(いちおうn64なlibも/usr/lib/64にあるのだけど)。 だからMALTA64なkernelで起動した時kernfsやらprocfsサポートが無いからエラー出るから後載せしようとmodload(8)かけるとBad system callで死ぬのか…なんやこれ… うーん全部o32/n32/n64で別portにするという選択肢無かったんすかねこれ…どん判AA略

まぁええわ、N/hpcmipsでo32の-DAES_ASMの速度がクソ遅い原因がn32で解消するなら、それはもうCPUがMIPS IIIでないからちゅーことで一件落着や、いまいち腑に落ちんが。

それにしても/usr/testsもn32なバイナリなのでn64なlibcryptoの動作確認のしようが無くて困るのだがどうすっかねこれ…

2019/08/14(Wed)

続々々・OpenSSL + MIPS

ふーんOのMIPSサポートはloongsonだけでなくsgiも32bitサポート切り捨てて完全にn64化されとるんね、ようやっとる。

Nも切り捨てないまでもo32とn64で別portの方が現実的だと思うんだが、どうもmatt案件っぽいので全てを察した。

2019/08/16(Fri)

[オレオレN6] OpenSSL + ARM

ARMだけNローカルでasmコードにがっつりとローカルパッチ当たってるのだが、一応は元のperlスクリプトに修正して生成したとは思うんだけどそっちの修正がcommitされとらんようなのでめんどくせえ。 というかそのせいでN HEADではOpenSSL-1.1にアプデした時にregenされてローカルの変更がほとんど消し飛んでるんだけどええんかあいつら…

つーかN HEADで消えて問題ない差分ならこっちも捨てても良さそうなんだけど、念のためにNローカルパッチは何をやりたかったのかを出力されたasmコードを元に逆にperlスクリプトを修正しながら推測してみるかね…

つーことでまずはcrypto/aes/asm/aesv8-armx.plの差分

@@ -38,6 +38,7 @@ $prefix="aes_v8";

 $code=<<___;
 #include "arm_arch.h"
+#include "arm_asm.h"

 #if __ARM_MAX_ARCH__>=7
 .text
@@ -930,13 +930,7 @@ if ($flavour =~ /64/) {                    ######## 64-bit code
        if ($arg =~ m/[qv]([0-9]+)[^,]*,\s*[qv]([0-9]+)/o) {
            my $word = $opcode{$mnemonic}|(($1&7)<<13)|(($1&8)<<19)
                                         |(($2&7)<<1) |(($2&8)<<2);
-           # since ARMv7 instructions are always encoded little-endian.
-           # correct solution is to use .inst directive, but older
-           # assemblers don't implement it:-(
-           sprintf ".byte\t0x%02x,0x%02x,0x%02x,0x%02x\t@ %s %s",
-                       $word&0xff,($word>>8)&0xff,
-                       ($word>>16)&0xff,($word>>24)&0xff,
-                       $mnemonic,$arg;
+           sprintf ".inst\t0x%08x\t@ %s %s",$word,$mnemonic,$arg;
        }
     };

@@ -980,7 +975,7 @@ if ($flavour =~ /64/) {                     ######## 64-bit code
        s/vmov\.32\s+(.*)/unvmov32($1)/geo              or
        s/^(\s+)b\./$1b/o                               or
        s/^(\s+)mov\./$1mov/o                           or
-       s/^(\s+)ret/$1bx\tlr/o;
+       s/^(\s+)ret/$1RET/o;

        print $_,"\n";
     }

まずarm_asm.hってのをN独自に用意してインクルードしてる、これの中身は

#if defined (_ARM_ARCH_4T)
# define RET            bx              lr
#else
# define RET            mov             pc, lr
#endif

とARMv4Tとの差異を吸収するマクロが定義されてて、s/^(\s+)ret/$1bx\tlr/o; → s/^(\s+)ret/$1RET/o; の変更部分と関連している。

そんでスクリプトのコメントに「.inst命令を使うべきだけど古いasには実装されてないので.byte命令使うね」と書かれてる部分があるんだけど、Nはgasだからってことで正しく.instつかうぜという修正をいれておるもよう。

さらにこれ以外にもARM NEON IntrinsicsだかAEONでお買い物だかWAONポイントが溜まるか知らねえけどSIMD命令でなんかやってるとこで結構な差分が出るのは、OpenSSL-1.0.2kにアプデした時にasmコードを再生成しとらんので、 このcommitのCortex-A5x最適化がすっぽり抜け落ちてるんやね、うーんこの。

うーん結局のところ、Nローカルで意図して適用したパッチって実はこのARMv4T対応と.byte→.inst置換くらいで、あとはasmコード再生成忘れによるマージ漏れミスという可能性が高まってきたゾ。 やっぱりリリースエンジニアリング崩壊しとりますな…さすがは限界集落である。

しっかしこのペースでコード監査しとるとマジ終わらんな、ワイみたいにローカルパッチだけでなくOpenSSLそのもののコード監査しとるLibreSSL方面とかガチ苦行としかいいようがない。

2019/08/20(Tue)

[音楽] The Who/The Real Me

タイトルはThe Whoの名盤「Quadrophenia(四重人格)」より。

また病院に舞い戻ることになった
別の精神科医を紹介して貰いに
診察室で俺が週末に苦しんだ幻視の事を話したんだ
でもヤツはそれについて何を思ったのか漏らさず隠し通した
アンタは俺にとっての「現実」を疑ってるのか?
なあ先生よ

うちの認知症老人、 カプグラ症候群(すりかわり妄想)ときたらお次は 解離性同一性障害(多重人格)やろうなと思ってたけど、どうもすでにその状態なんやなこれ。 感情が高ぶってすりかわり妄想の症状が悪化すると、口調がすっかり変わってまるで自分がアブダクション(誘拐)されたお手伝いさんみたいな態度になるんだけど、これ別人格ですわ。

フィクションで誇張されたいわゆる多重人格ってのは、ほんとうに別の人格が存在する病気かのように広く信じ込まれてるけど、要するに

といった認知障害でごくあたりまえにみられる症状の合併症でしかないのよね、実例をまのあたりにするとああ…しょーもな…という気分になると思う。

そんで支離滅裂な妄言の中に繰り返し「先生」と呼ばれる存在がでてきて家から一歩も出てないのに「先生」と会った云々と主張するのだけど、病院の先生か学校の先生かそれともかつての趣味の先生(すでに死去)か頭捻ってたんだけど、ダニエル・キイスの著書で有名な ビリー・ミリガンがそれぞれの人格に指示を与える統合人格というべきものを「ティーチャー(教師)」と呼んでた事を思い出し、ああそれと同じなのかなぁと合点がいった。

2019/08/24(Sat)

[p**src] パッケージ同士の無駄な依存関係

毎度のことなんだがperlのバージョンが5.28から5.30になったことでp5-*の不整合が発生してめんどくさいのだが、今回はほとんど再インストール級の作業になってしもうた。

ちなみにperlは5.30.0で後方互換だいぶ切り捨てたのだけどその話ではない、そこいらへんはチラシの裏もしばらく前に対策しとったのでな…

なぜ再インストール級の作業な羽目に陥ったかというと、それはオレオレN6環境は

という状態だからなのよね。

この設定だと

という深い依存関係があって、lang/gcc8までさかのぼってアンインストールする必要があるのだ。 なもんでlang/gcc8をアンインストールするには今度はlibstdc++も消えるので依存するパッケージも消さんとならんのでドミノ倒しどころか壊滅状態なのだ。 ちゅーことでワイは諦めてそっと/usr/pkgごと消した(/usr/pkg/etcのバックアップは忘れないようにね!)

つーかそもそもopensslもperlに依存(RUN_DEPENDS)しとるのが判断ミスよな。

USE_TOOLS+=             fgrep gmake makedepend perl:run

これConfigure/configスクリプトの実行に必要なBUILD_DEPENDSで十分なんですわ。

おそらくこれってc_rehashとCA.plちゅーperlスクリプトのためだけにRUN_DEPENDしとるんだろうけど、こいつらbaseではperl無いこともあって使われてないのよね。 なのでbinに入れる必要もp**src的にはあまりなく、baseと同様にshare/openssl以下に放り込んどけばいいだけよね(CA.plの方はMakefile修正してそうなっとるのだが、c_rehashの方は修正漏れなんだろうか)。

どうしてもbinに入れたいってのであればopenssl-libとopensslでパッケージ分割すりゃいいわけでな。 それに今後perl5本体に同梱されるライブラリがopenssl依存になったりすると循環参照になる可能性も無いわけではないのでな、こういう本質的でない依存関係は持つべきじゃないのだ。

そしてもうひとつ、gcc8がpython37(とgsed)に依存(RUN_DEPENDS)してる理由がさっぱりなのですわ、Makefileを確認してみると

.include "../../lang/python/application.mk"

とmake実行時にshebangをpkgsrcでインストールしたpythonに置換するREPLACE_PYTHONというマクロを定義したファイルをインクルードしている。

なのでgcc8と一緒にpythonに依存したスクリプトがインストールされると推測されるわけだが、これを確認してみると

maintainer-scripts/branch_changer.py
gcc/ada/doc/share/conf.py
gcc/ada/doc/share/latex_elements.py
gcc/ada/doc/share/ada_pygments.py
gcc/jit/docs/conf.py
gcc/gdbhooks.py
libstdc++-v3/scripts/make_graph.py
libstdc++-v3/python/libstdcxx/v6/__init__.py
libstdc++-v3/python/libstdcxx/v6/xmethods.py
libstdc++-v3/python/libstdcxx/v6/printers.py
libstdc++-v3/python/libstdcxx/__init__.py
contrib/dg-extract-results.py
contrib/header-tools/headerutils.py
contrib/mark_spam.py
contrib/testsuite-management/validate_failures.py
contrib/gen_autofdo_event.py
contrib/check_GNU_style_lib.py
contrib/check_GNU_style.py
contrib/analyze_brprob_spec.py
contrib/update-copyright.py
contrib/analyze_brprob.py
contrib/filter_params.py
contrib/jit-coverage-report.py
libffi/generate-darwin-source-and-headers.py

いくつかのpythonスクリプトがヒットするんだけど、分類すると

とどう考えてもBUILD_DEPENDSで問題無さそうなシロモノばっかりなんよね。 もしgccでC/C++ソースをビルドする際にバックエンドでこれらのスクリプトが動くならRUN_DEPENDSである必要あるけど、そうでないならこちらも本質的でない無駄な依存関係でしかない。

ということで、lang/python/application.mkから更にインクルードされてるlang/python/pyversion.mkにあるマクロ

# PYTHON_FOR_BUILD_ONLY
#       Whether Python is needed only at build time or at run time.
#
#       Possible values: yes no test tool
#       Default: no

の定義忘れだよなこれ。

これ以外にもperl関連のパッケージにおいてはテストの実行にしか必要の無いパッケージがRUN_DEPENDSになってたりするのが多くてほんともうちょっと何とかならんのか。 まぁこれは元のMakefile.PL自体が間違えててテスト時以外は不要な依存関係を定義してたりするのを丸写しだったりするんだけどね…

2019/08/29(Thu)

[音楽] Christone ``Kingfish'' Ingram/I Put A Spell On You

フェンダー公式より、この容姿でなんと若干20歳にしてB.B. KingとFreddy KingそしてAlbert Kingの三大キングを継ぐ新たなるブルースの王登場だと。

歌もギターも上手いんだが円熟味つーかブルース(憂鬱)という部分で年齢相応で物足りない部分はあるけど期待の新人やね、つーかストラトなんぞよりES-335 B.B. Kingモデル弾いて欲しいとこではあるけど、Gibsonちゃんもはや息してねえからな…

まぁJimmy James(Delvon Lamerr Organ TrioとTrue Loveのギタリスト)といい「ギターは顔で弾く」タイプがまた復活してきたのは喜ばしいことよ。

ちなみにこの「I Put A Spell On You」はScreamin' Jay Hawkinsの曲なんだけど、あの棺桶から登場したりドクロや手首とかの人体パーツで遊んだりする人喰い人種か首狩り族かな装束はいまやポリコレで放送禁止級なので、こっち路線を継げる者はさすがにおらんやろうな。

この人は「Constipation Blues(便秘のブルース)」が有名やね、だんだんギターのリフもホーンセクションそしてホンキートンクピアノと全てが屁と脱糞音と水洗音に聴こえてくる怪作、きたない。

ディズニーのアナ雪の主題歌で「Let It Go」が「ありのままで」などと訳されてたそうだが、この曲では直球に「ウンコ出てくれ!」なのである。