lldb
Arduinoで格闘ロボットを自作できる!「二足歩行ロボット自作ガイド」が発売
なんてのが出てたので、読んでみた。
戦いのリングは、日本プロレス連盟じゃなくて、 ROBO-ONE という所でやってる。剣道部門があったりして、面白い。足裏以外がマットにつくとダウンって事になる。10カウントのうちに立ち上がるんだぞ、ロッキー。
ってな事で、どんな風に転んでも立ち上がる事が必至だ。知らない間に世の中進歩してるのね。
ちょっと昔の記事だけど、 浅草ギ研 ROBO-ONEへの道(二足歩行ロボット製作日記)なんてのが公開されてた。舞台裏は大変なのね。
こちらは、業界で使われている、昆虫みたいなロボット
こんなのが、鉄砲持って、戦場を駆け回るのか、怖いな。自動運転の車をみんな期待してるけど、これも怖い。怖さを想像してください。鉄砲を積むんじゃなくて、爆発物と言えば、怖さが想像できるでしょう。
追試2
前回は、思わずウブを試してしまったけど、Debianではどうよ? 注目ポイントは、無線LANが11ac相当の働きをするかどうか?
どうせやるなら、KDEを選んでみよう。ライブ版を試す。
案の定、firmwareが入っていないんでダメだよとdmesgに出て来た。 リポジトリを追加だな。面倒なんで、i386なマシンの/etc/apt/sources.listを持ってきちゃえ。それから、おもむろに
sudo apt-get install firmware-iwlwifi
接続editorとかで、wifiを追加すればいいんだな。近傍の無線局のssidが出てこない。
初心者でもできた!無料WiFiの設定。Linux Kubuntu 16.04
予定では、出てくるはずなんですけどね。firmwareを入れたら、一度rebootってのが、お約束 らしいけど、それをやっていないからなあ。wifiなNICが動かないんだろう。
でも、rebootすると、折角入れたfirmwareが消えちゃうし。どうするのが正解?
それはそうと、重いと覚悟してたKDEだけどUbuntuよりも軽いと感じるのは、オイラーだけ?
ああ、こういうページもあるな。みんな考える事は一緒。
sakae@ub:~$ du -sh /lib/firmware/ 270M /lib/firmware/
OpenBSDでは、50Mだったから、どんだけ色々集めているんだよ。ウブはユーザーの利便性を考えて、集められるのを全部集めて最初から入れてるんだな。
ふと、i386なマシンに入れてるDebianのそれを確認したら、45Mぐらいだった。必要なもの だけを入れれば、そんな容量なんだろうね。
FreeBSD 11.2
予定通り、先月の末に新しいのが出た。少し熱気が冷めた頃に入れるのさ。それはそれでいいんだけど、プチ不安になる事が。。。
何時も、/tmpはRAMに追いやっているんだ。何時もは/etc/fstabを古いやつから引っ張ってきてるんだけど、今回は古い方を先に消しちゃったんで、コピペの元ネタが無い。 適当にmanを見て
sakae@fb:~ % cat /etc/fstab # Device Mountpoint FStype Options Dump Pass# /dev/ada0s1a / ufs rw 1 1 /dev/ada0s1b none swap sw 0 0 tmpfs /tmp tmpfs rw,mode=1777 0 0
こんな風にでっちあげた。元は、Optionの所にsize=1gが入っていたんだけどね。 今回はそれを省いた。文句を言われるかと思ったら、何のおとがめも無し。涼しい顔をして
sakae@fb:~ % df -h Filesystem Size Used Avail Capacity Mounted on /dev/ada0s1a 15G 3.2G 10G 24% / devfs 1.0K 1.0K 0B 100% /dev tmpfs 2.6G 4.0K 2.6G 0% /tmp
2.6Gまで使えますってさ。本当は、dmesgを見ると
real memory = 2147418112 (2047 MB) avail memory = 2036293632 (1941 MB)
2Gのシステムなんだけどね。/tmpをどんどん圧迫していったら、FreeBSDは発狂するんだろうか? いつか墓穴を掘ってみたいな。
date
VirtualBoxにFreeBSDを入れたんだけど、dateすると、未来の時刻を表示する。ちゃんとJSTにはなっているんだけどね。はて、どうしたものか? 3秒考えて、前回のntpdateってのを思い出した。強引に、小金井の時計に合わせちゃえ。どこにそいつを突っ込む?
面倒だから、/etc/rcでいいしょ。
sakae@fb:/tmp % tail -5 /etc/rc echo '' ntpdate ntp.nict.jp date exit 0
たまには、こういう無茶ぶり。これで、いつでも正しい時刻を表示するぞと思っていたら、悪行の証拠が残ってた。
sakae@fb:/tmp % last shutdown time Tue Jul 3 16:23 root ttyv0 Tue Jul 3 15:17 - 16:23 (01:06) boot time Wed Jul 4 00:13 :
7月4日の深夜にマシンを立ち上げたにもかかわらず、ログインしたのは3日の午後3時過ぎという矛盾。鋭いデカだと、突っ込んでくるだろうね。だったら、もう少し、時刻合わせする場所の辻褄を合わせておけよ。
オイラーのかすかな記憶では、この矛盾を解決する方法があったはず。えーとね、えーとね、夏時間がどうのこうのってコマンドだったような。。
adjkerntz(8)
FILES /etc/localtime Current zoneinfo file, see tzsetup(8) and zic(8). /etc/wall_cmos_clock Empty file. Its presence indicates that the machine's CMOS clock is set to local time, while its absence indicates a UTC CMOS clock.
BIOS時計がUTCになってるんなら、wall_cmos_clockファイルは必要無し。ローカル時間になってるなら、その事をFreeBSDに教える為に、空ファイルを作っとけ。ローカル時間で使ってるのは、天下のM$。普通人が使うOSだから、UTCなんて言われても意味不。だから、ローカル時間を採用か。
clangの新しい奴
今回のリリースの目玉だと、勝手に思っている。
sakae@fb:/tmp % cc -v hello.c FreeBSD clang version 6.0.0 (tags/RELEASE_600/final 326565) (based on LLVM 6.0.0) Target: x86_64-unknown-freebsd11.2 Thread model: posix InstalledDir: /usr/bin "/usr/bin/cc" -cc1 -triple x86_64-unknown-freebsd11.2 -emit-obj -mrelax-all -disable-free -disable-llvm-verifier -discard-value-names -main-file-name hello.c -mrelocation-model static -mthread-model posix -mdisable-fp-elim -masm-verbose -mconstructor-aliases -munwind-tables -target-cpu x86-64 -dwarf-column-info -debugger-tuning=gdb -v -resource-dir /usr/lib/clang/6.0.0 -fdebug-compilation-dir /tmp -ferror-limit 19 -fmessage-length 80 -fobjc-runtime=gnustep -fdiagnostics-show-option -fcolor-diagnostics -o /tmp/hello-f8163e.o -x c hello.c clang -cc1 version 6.0.0 based upon LLVM 6.0.0 default target x86_64-unknown-freebsd11.2 #include "..." search starts here: #include <...> search starts here: /usr/lib/clang/6.0.0/include /usr/include End of search list. "/usr/bin/ld" --eh-frame-hdr -dynamic-linker /libexec/ld-elf.so.1 --hash-style=both --enable-new-dtags -o a.out /usr/lib/crt1.o /usr/lib/crti.o /usr/lib/crtbegin.o -L/usr/lib /tmp/hello-f8163e.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/crtend.o /usr/lib/crtn.o
ldも独自のものが用意されてるかと思ったら、そうはなっていなかった。
What does 'debugger tuning' mean?
それより、面白いオプションが有るな。質問してる人が居た。FreeBSDでは、gdb信仰があるのか?
デフォで入っているgdbは、emacsと相性が悪いんだよな。
lldb
clang用のデバッガーが使えるそうなので、試してみる。
sakae@fb:/tmp % lldb a.out (lldb) target create "a.out" Current executable set to 'a.out' (x86_64). (lldb) b main Breakpoint 1: where = a.out`main + 18 at hello.c:5, address = 0x00000000004007b2 (lldb) r Process 810 launching Process 810 launched: '/tmp/a.out' (x86_64) Process 810 stopped * thread #1, name = 'a.out', stop reason = breakpoint 1.1 frame #0: 0x00000000004007b2 a.out`main at hello.c:5 2 3 int main( ) 4 { -> 5 printf("hello, world\n"); 6 } 7 (lldb) bt * thread #1, name = 'a.out', stop reason = breakpoint 1.1 * frame #0: 0x00000000004007b2 a.out`main at hello.c:5 frame #1: 0x0000000000400575 a.out`_start + 149
gdbと雰囲気が違うなあ。
(lldb) dis a.out`main: 0x4007a0 <+0>: pushq %rbp 0x4007a1 <+1>: movq %rsp, %rbp 0x4007a4 <+4>: subq $0x10, %rsp 0x4007a8 <+8>: movabsq $0x400816, %rdi ; imm = 0x400816 -> 0x4007b2 <+18>: movb $0x0, %al 0x4007b4 <+20>: callq 0x40049c ; symbol stub for: printf 0x4007b9 <+25>: xorl %ecx, %ecx 0x4007bb <+27>: movl %eax, -0x4(%rbp) 0x4007be <+30>: movl %ecx, %eax 0x4007c0 <+32>: addq $0x10, %rsp 0x4007c4 <+36>: popq %rbp 0x4007c5 <+37>: retq
あっ、眼が腐るものを見ちゃった。さっさと先へ行きましょ。
(lldb) c Process 810 resuming hello, world Process 810 exited with status = 0 (0x00000000)
親切っぽいな。
LLDB(1) FreeBSD General Commands Manual LLDB(1) NAME lldb - The debugger SYNOPSIS lldb [-hvdexw] [-a arch] [-c core-file] [-l script-language] [-s lldb-commands] [-n process-name] [-p pid] [[--] <PROGRAM-ARG1> <PROGRAM-ARG2> ...] DESCRIPTION lldb is the command line interface for the LLDB debugger library. lldb can debug C, C++, Objective-C, and Objective-C++ programs.
冒頭付近。The debuggerとは、大きく出たものだな。a と The の違いは中学校の英語で習った記憶があるぞ。 gdbの方は、The GNU Debugger と、殊更GNUを強調。まあ、個性がありますよってぐらいに、緩く解釈しとけば良いのか。
詳しくはWebでってのが、CMの決まり文句なので、、、
そして、こちらの水は甘--いぞ、と誘っています。プロモーション大事!
乗り換え案内中。
lldb + emacs
オイラーが常用してるemacsと組み合わせられるか?
Run gdb (like this): lldb -i=mi a.out
mini-bufferで、上記のように指定。
Notes: Multiple "-s" and "-o" options can be provided. They will be processed from left to right in order, with the source files and commands interleaved. The same is true of the "-S" and "-O" options. The before file and after file sets can intermixed freely, the command parser will sort them out. The order of the file specifiers ("-c", "-f", etc.) is not significant in this regard. If you don't provide -f then the first argument will be the file to be debugged which means that 'lldb -- <filename> [<ARG1> [<ARG2>]]' also works. But remember to end the options with "--" if any of your arguments have a "-" in them. error: unknown or ambiguous option Debugger finished
文句を言われて、あっけなく終了。
RMSがGNUのライセンスとBSDのライセンスが根本から違うから、lldbサポートするコードは、emacsに取り込まないよと主張してるみたい。
大体、llvmは、アプルがスポンサーになって発展してきたからなあ。水と油なのかな?
macの人の嘆きが聞こえるよ。
GUI
なんかlldbにguiなんてコマンドが有るよ。起動してみるか。
| LLDB (F1) | Target (F2) | Process (F3) | Thread (F4) | View (F5) | Help (F6) | ┌──<Sources>───────────────────────────────────────────────────┐┌──<Threads>───┐ │ a.out`main ││ ◆─process 794│ │ 1 │ #include <stdio.h> ││ │ │ 2 │ ││ │ │ 3 │ int main( ) ││ │ │ 4 │ { ││ │ │ 5 │◆ printf("hello, world\n"); <<< Thread 1: breakpoint 1.1 ││ │ │ 6 │ } ││ │ │ 7 │ ││ │ ┌──<Help>────────────────────────────────────────────────────────────────────┐ │ │ Welcome to the LLDB curses GUI. │ │ │ │ │ │ Press the TAB key to change the selected view. │ │ │ Each view has its own keyboard shortcuts, press 'h' to open a dialog to dis│ │ │ │ │ │ Common key bindings for all views: │ │ │ │ │ │ tab - Select next view │ │ │ h - Show help dialog with view specific key bindings │ │ │ , - Page up │ │ │ . - Page down │ │ │ up - Select previous │ │ │ down - Select next │ │ │ left - Unexpand or select parent │ │ │ right - Expand │ │ │ page-up - Page up │ │ │ page-down - Page down │ │ └───────────────────────────────────────────────────[Press any key to exit]──┘ │ │ ││ │ └──────────────────────────────────────────────────────────────┘└──────────────┘ Process: 797 stopped Thread: 100074 Frame: 0 PC = 0x0
Help画面に隠れちゃってるけど、Variablesのペインも有ったぞ。 使い易いんだか、使い難いんだか、微妙だな。gdbにも、これと似たようなのが有ったな。 確か、坂井さんのハロワ本で、多用してたな。
GUIとは直接関係無いけど、pythonのスクリプトとも仲良く出来るようだ。(生憎FreeBSDのlldbは、サポートコードが入っていない、残念バージョン)それから、リモートでdebugも出来るようだ。
これらがあれば、本当に本物のGUIからlldbを操れるだろう。gdbに追いつき追い越せ。そうじゃないと、スポンサーのアプルを満足させられないだろう。
src of lldb
ソースが付いているのが普通のBSD系なんで、拝んでおく。寄贈ソフトって事なんで、/usr/src/contrib/llvm から、ZoomInしてく。
sakae@fb:/usr/src/contrib/llvm/tools % ls bugpoint llvm-as llvm-dwarfdump llvm-nm llvm-stress clang llvm-bcanalyzer llvm-extract llvm-objcopy llvm-symbolizer llc llvm-cov llvm-link llvm-objdump llvm-xray lld llvm-cxxdump llvm-lto llvm-pdbutil opt lldb llvm-cxxfilt llvm-lto2 llvm-profdata lli llvm-diff llvm-mc llvm-readobj llvm-ar llvm-dis llvm-modextract llvm-rtdyld
tool-chainが俯瞰できるな。更にZoomIn。
sakae@fb:/usr/src/contrib/llvm/tools/lldb/source % ls Plugins/Language CPlusPlus Java ObjC Go OCaml ObjCPlusPlus
manでは、Cフラフラ語とかアプル寄りの言語しかサポートしてないようだったけど、内職でJava語やGo語やOcaml語もサポートするようにコードを書いているんだな。
LinuxとWindowsを狙うマルウエアWellMess(2018-06-28)を見ると、golangを使ってマルウェアが開発されてたようだけど、debugにはlldbを使ったのかな?
そんな事よりソースはどうした? Cフラフラ語だから敬遠です。その代わりに
wall_cmos_clockの現場
を押さえる事にします。C語ですからね。まさかas語は出てこないでしょう。
sakae@fb:/sys % find . | xargs grep -l wall_cmos_clock ./dev/tws/tws_services.h ./mips/include/clock.h ./fs/smbfs/smbfs_subr.c ./kern/subr_clock.c
ふむ、上記に表われているな。
/* * The adjkerntz and wall_cmos_clock sysctls are in the "machdep" sysctl * namespace because they were misplaced there originally. */ static int adjkerntz; static int sysctl_machdep_adjkerntz(SYSCTL_HANDLER_ARGS) { int error; error = sysctl_handle_int(oidp, oidp->oid_arg1, oidp->oid_arg2, req); if (!error && req->newptr) resettodr(); return (error); } SYSCTL_PROC(_machdep, OID_AUTO, adjkerntz, CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, &adjkerntz, 0, sysctl_machdep_adjkerntz, "I", "Local offset from UTC in seconds"); int utc_offset(void) { return (tz_minuteswest * 60 + (wall_cmos_clock ? adjkerntz : 0)); }
ここまで分かれば、これでどうよ?
sakae@fb:~ % sysctl -a | grep wall_cmos_clock machdep.wall_cmos_clock: 1 sakae@fb:~ % sysctl -a | grep adjkerntz machdep.adjkerntz: -32400 sakae@fb:~ % bc 32400 / 3600 9
これにて、一件落着。本当にそれだけで良いんか? /sbin/adjkerntzとかも見ておけ。
JST
上のdateの所で小金井なんてのが出てきた。何それ? 日本標準時の製造現場がある場所さ。 ついでに、明石って所は、東経135度の場所。地球はぐるっと一回りすると360度。それを24(時間)で割れば、15度になる。
15度違えば1時間の時差があるって事。東経(西経)の基準は、かの大英帝国が有った場所。イギリスのグリニッジがその場所となる。世界の時間の基準点、GMT。
地球が丸い事を証明しようと、かのコロンブスが旅立った。なんてのは、表向きの理由。領土の分捕り合戦。北アメリカは、イギリスとフランスだかで領地を分けた。北アメリカはもう分捕る場所が無いってんで、南アメリカに進出したのはスペイン。インカを滅ぼし、我物顔。
今は地球で分捕る場所が無いってんで、ネットの上での分捕り合戦。ブラウザーを無料でばらまき、検索という羅針盤を制覇、メールまで無料で提供。
httpはセキュリティー上好ましく無いと言う、誰も反対する理由が無い事に眼をつけ、強引にhttpsへ誘導。ネット上の帝国をどんどんと築いてますなあ。
そうなると、眠れる獅子は、眼の上に眼をつけざるを得ない。まずは、月に資源を求めようと、やっきになっている。昔、月に人類が降り立ったけど、大した実用性は無かった。早くコロニーを作った者が覇者となる。
月だけでは無い。海の中にもお宝は沢山眠っているはず。ならば、何とかしようと、色々と基地を建設。大変な競争ですなあ。
余り書くと、あれなので、このぐらいにしておくか。結城さんの数学ガールシリーズで、ポアンカレ予想なんて本を読み始めたんだけど、まだら模様にしか理解出来ないぞ。脳が軟化し始めたか、心配。