問題タブ [uclibc]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
arm - uclinux と uclibc を使用した Cortex-M3 で未処理の MPU 障害が発生する
これは難しい質問ですが、誰かが助けてくれることを願っています;)
これは、pthread_create() を呼び出すだけの最も単純なアプリから発生したクラッシュです。
アプリを分析してobjdumpから得たものは次のとおりです。
したがって、値 0x5000 をアドレス 0xa001cff4 に保存しようとすると、例外が発生します。
したがって、有効な物理 RAM 領域のようで、アドレス 0xa001cff4 も有効なようです。これは、カーネル例外で 0x00000000 とこの例外が何を意味するのかについて、私にとって非常に奇妙です。
また、シングル スレッド アプリは正常に動作し、新しいスレッドのスタック割り当て中にこれらの MPU の問題があると言いたいです。しかし、私が今理解したいのは、なぜMPUの障害であり、有効なアドレスでどのように失敗するのかです。
c - ディレクトリを開くことができませんでした。定義されたデータ型に対して値が大きすぎます
同様の質問に対して、スタック オーバーフローの既存のソリューションをすべて試し_FILE_OFFSET_BITS
ました64
。しかし、これはうまくいきませんでした。
サンプルコード:
strerror(errno)
以下は、ディレクトリ ( ) を開こうとしたときに表示されるエラー ( /data/system/dropbox
) です。私は使っているuClibc
linux - プロセスシグナルハンドラー (armv7-uclibc) で適切なバックトレースを取得するには?
シグナル ハンドラーで backtrace() の適切な解決策を見つけるために既に何度もグーグルを実行し、ほとんどすべてを試しましたが、シグナル ハンドラーでバックトレースを正常に取得できませんでした。これは SIGUSR1 ハンドラーではありません。
- uclibc config で UCLIBC_HAS_BACKTRACE=y を有効にしてコンパイルする
- libubacktrace.so が作成されていることを確認
- 次のオプションでアプリケーションバイナリをコンパイルしました -g -rdynamic -fexception または -funwind-tables
- バイナリ自体が「削除」されているようです
ただし、シグナル ハンドラから完全なバックトレースを取得できませんでした。シグナルハンドラで呼び出した関数アドレスのみが出力されました。
target-gdb バイナリを使用し、gdb --pid コマンドを使用してプロセスをアタッチすると、完全なバックトレースを適切に取得できました。
また、pstack を試してみましたが (pstack-1.2 - arm-patch を試しましたが、ひどい... 何も出力されませんでした) あまり役に立ちませんでした。
何かアドバイス?
1) Makefile のコンパイラ オプション
CFLAGS += -g -fexceptions -funwind-tables -Werror $(WARN) ...
2) コード
コードは非常にシンプルです。
c - uclibc および gcc が uclibc に対してコンパイルされたマシン上の非標準パスのカスタム glibc
uClibc を搭載したマシンがあり、作成した単純なラッパーを使用して glibc を動作させることができました。
hello world のような単純なプログラムや、その他のほとんどすべての C プログラムをコンパイルできます。
しかし、limits.h を含む場合、以下のエラーのため、ほとんどの gnu およびその他のプログラムはコンパイルされません。
この問題を解決するにはどうすればよいですか?
bash - dst は特別な環境変数です
OpenWRT でコードをビルドしようとしています。[ネットワーク共有で export dst=/projects//... として定義されている] 環境変数がある場合、uClibc のコンパイルが中断する [linux/errno.h が見つからないと言ってビルドに失敗する] ことがわかりました。
その環境変数の名前を[pkdstに]変更すると、そのエラーは表示されず、OpenWRTビルドは成功します。
$dst は、BASH でのある種の「特別な」シェル変数ですか?
c - C - uclibc、Linux、mipsで動的および静的ポインタが指す割り当てられたサイズを見つける方法は?
状況 - サードパーティのスタックを使用しています。私はサードパーティのソースコードを持っています。このコードはかなりぎこちなく、バッファ オーバーランに関連する多くの問題があります。
私の解決策 - この問題を追跡するために、sprintf や memcpy などの既存の関数をオーバーライドして、バッファ オーバーランがあるかどうかを確認しています。
malloc と sprintf をオーバーライドするためにこれまでに行ったことを次に示します。
次に、sprintf を使用しました -
私の問題 - バッファ - 宛先の容量が少なく、次に何を書き込んでいるのか、オーバーライドされた関数に出力させたい。
char buff[5]; のようなスタックに割り当てられたメモリで機能するソリューションが必要です。および char *buff = (char *) malloc(5);
たとえば、文字列サイズが 6 バイトの buff で memcpy を実行すると、オーバーライドされた memcpy がエラーをスローするはずです。同様に、sprintf を実行すると、オーバーライドされた sprintf がエラーをスローするはずです。主な問題は sprintf です。sprintf ではなく snprintf を使用したい。すべてのコードを調べて snprintf に変更するのは困難です。したがって、ここでやりたいことは、自分のバージョンで sprintf をオーバーライドし、内部的に snprintf を呼び出して、引数のサイズに基づいて 'n' を計算することです。また、nがバッファサイズよりも小さいかどうかを比較します。ボトルネックは、渡されたポインターに基づいてバッファーのサイズを見つける方法です。
c - uclibc を使用しているときに fenv.h の関数への未定義の参照を解決するにはどうすればよいですか?
の関数のいくつかをテストしようとしていfenv.h
ますが、以下の関数 ld をコンパイルすると、 と で失敗しundefined reference to 'feclearexcept'
ますundefined reference to 'fetestexcept'
。私は uclibc に対してコンパイルされた強化された gentoo を実行していますが、これは少なくともある程度関連していると思われます
fenv.h
です/usr/include
。には静的ライブラリと動的ライブラリ ( libm.a
、libm.so
) があり/usr/lib
ます。私はコンパイルしていgcc -o test test.c -lm
ます; リンカが関連する関数を見つけられない理由は誰にもありません。fenv.h
対応するライブラリがないようです。
更新: この 10 年前のブログ投稿は、fenv が uclibc でサポートされていないことを示唆しているようです。今もそうであるかどうかは判断できませんが、もしそうなら、何かすべきことがあります。 http://uclibc.10924.n7.nabble.com/missing-fenv-h-for-qemu-td2703.html
c++ - cmake プロジェクトで代替 libc を使用する
CMake を使用してビルドされた C/C++ プロジェクトがあります。静的バイナリをコンパイルしようとしているGLIBC
ときに、コンピューターとターゲット マシンのバージョンが異なるという問題に遭遇しました。musl
SO に関する別の質問では、同様の問題に対する受け入れられた答えは、またはのような libc の代替実装を使用することuClibc
です。(こちらをご覧ください)
cmake
そのような代替 libc の使用方法を示す方法に関する情報が見つかりません。FindMusl.cmake
ファイルは出荷されておらず、インターネット上で見つけることもできません。使うだけCC=/usr/bin/musl-gcc
ではダメ。
cmake プロジェクトをそのような代替 libc 実装に対して静的にリンクして、GLIBC から独立させるにはどうすればよいですか?