問題タブ [newlib]

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.

0 投票する
2 に答える
832 参照

c - オーダーメイドのプラットフォーム用に newlib をビルドするときに libgloss マシンを示す

私は OS を持たない特注の PowerPC プラットフォーム用に newlib をコンパイルしています。<newplatform>ネットで情報を読んでいると、libglossのサブディレクトリにスタブ関数を実装する必要があることに気付きました。

私が混乱しているのは、newlib をコンパイルするときにこれがどのように検出されるかということです。--targetたとえば、構成する引数の最後の部分powerpc-ibm-<newplatform>ですか?

--targetこの場合、 binutils と gcc をコンパイルするときに同じものを使用する必要があると思いますか?

ありがとうございました

0 投票する
1 に答える
1762 参照

c - スケジューラーの開始前 (または停止後) の IO の FreeRTOS キュー

オペレーティング システムのスケジューラがまだ開始されていない、実行されている、一時停止されている、または停止している可能性がある環境で、スレッド セーフな IO (デバッグ シリアル ポートに接続する printf など) を最適に実装する方法についてのアドバイスを探しています。墜落した。Newlib と FreeRTOS を使用しています。

現時点では、_write システム コール (Newlib) キュー文字を FreeRTOSキューに入れる (一見標準的な) FreeRTOS アプローチを行っています。FreeRTOS キューは、割り込みサービス ルーチンから空にされます (シリアル ポート ハードウェア FIFO をいっぱいにしてから、 FIFO エンプティ割り込み)。

これには、(少なくとも FreeRTOS では) スケジューラが実行されているときにのみキューを安全に使用でき、割り込みが無効になっているとデバッグ出力を出力できないという欠点があります (スケジューラが起動するまでのブート中、または致命的なエラーの後)。エラー状態 (正確に debug printf 出力が最も役立つ場所:-)。

_write システム コールでスケジューラおよび/または割り込みステータスをクエリし、スケジューラが実行されている場合はキューを使用し、割り込みが無効になっている場合はシリアル IO のブロッキング/ポーリングを使用するのが最善でしょうか? 私がまだ考えていないよりエレガントなアイデアはありますか?

ありがとう

0 投票する
3 に答える
2502 参照

c - NewLibの移植:crt0

チュートリアルに従って、自分のOS用にNewLibを移植しています。

crt0を終了したら、「最初のオブジェクトとしてリンクする」必要があると書かれています。どうやってやるの?

0 投票する
6 に答える
17145 参照

c++ - コールスタックのバックトレースを取得するには? (深く埋め込まれており、ライブラリはサポートされていません)

基本的に glibc の backtrace() ライブラリ関数と同じように、例外ハンドラとデバッグ関数でコール スタック バックトレースを出力できるようにしたいと考えています。残念ながら、私の C ライブラリ (Newlib) はそのような呼び出しを提供していません。

私はこのようなものを持っています:

これは基本的に機能しますが、結果として得られるトレースは必ずしも完全ではありません。たとえば、

バックトレースには func3() と main() のみが表示されます。(これは明らかなおもちゃの例ですが、逆アセンブルを確認し、これらの関数がすべて完全にここにあり、最適化またはインライン化されていないことを確認しました。)

更新:古い ARM7 システムでこのバックトレース コードを試しましたが、同じ (または少なくとも、可能な限り同等の) コンパイラ オプションとリンカー スクリプトを使用して、正しい完全なバックトレースを出力しました (つまり、func1 と func2 が欠落していません)。実際、メインを過ぎてブート初期化コードにまで遡ることさえできます。したがって、おそらく問題はリンカー スクリプトやコンパイラ オプションにあるわけではありません。(また、このARM7テストでもフレームポインタが使用されていないことを逆アセンブルから確認しました)。

コードは -fomit-frame-pointer でコンパイルされていますが、私のプラットフォーム (ベア メタル ARM Cortex M3) はフレーム ポインターを使用しない ABI を定義しています。(このシステムの以前のバージョンでは、ARM7 で古い APCS ABI を使用し、スタック フレームとフレーム ポインターを強制し、こちらのようなバックトレースを使用していましたが、完全に機能していました)。

システム全体が -fexception でコンパイルされ、_Unwind が使用する必要なメタデータが ELF ファイルに含まれるようになります。(_Unwind は例外処理用に設計されていると思います)。

だから、私の質問は次のとおり です。GCCを使用して組み込みシステムで信頼できるバックトレースを取得する「標準」の受け入れられた方法はありますか?

必要に応じてリンカー スクリプトと crt0 コードをいじる必要はありませんが、ツールチェーン自体にチャンスを与える必要はありません。

ありがとう!

0 投票する
1 に答える
1094 参照

c - 自分の OS に NewLib を移植する: いくつかの質問

私は自分の OS に NewLib を移植しようとしています (私はこのチュートリアルに従っています: http://wiki.osdev.org/Porting_Newlib )、いくつか質問があります。

  • LibGloss が完了してコンパイルされたら、作成された libnosys.a を正確にいつ使用する必要がありますか? main.c をコンパイルするのはいつですか?

    /li>
  • 私の crt0.c が完了しました。そして、「最初のオブジェクトとしてリンク」する必要があります。どうやってやるの?このようなものですか?

    /li>

回答ありがとうございます。

0 投票する
1 に答える
1791 参照

c - math.h 関数の純粋な c バージョンを探しています (コプロセッサのサポートなし)

Cソースで静的に動作する(半)自動検証ソフトウェア(CBMC (リンク) )を使用する必要があります。浮動小数点はサポートされていますが、すべての数学関数の定義はありません。それを使って数値計算ソフトウェアをチェックできるかどうかをチェックしようとしています。

だから私はこれらの機能が必要です。コプロセッサを使用しない定義を探していmath.hます(例: sqrtpow、剰余、tan; int/ float/ double)。

いくつかの Linux ディストリビューション (おそらく今は eglibc) に同梱されている libc でそれを探したとき、たとえばハードウェアの sqrt 関数を意味するプロセッサ組み込み関数がいくつかあるポイントに常に到達しました。

パート 1: ソフトウェア実装の検索

私が必要としているのは、次の特性を持つ数学関数をサポートするライブラリです。

  • IEEE 浮動小数点がサポートされていますが、純粋に整数で動作するライブラリも素晴らしいでしょう。
  • 正確さは重要な要素です。(一部の情報源に隠されている特殊なケースの既知のバグはそれほどクールではありません)。結果は、IEEE-754 に関しても正しいはずです (例: sqrt のルール)。
  • コプロセッサ呼び出しを使用しません。純粋なソフトウェア。C が推奨されますが、asm でもかまいません。

これまで、さまざまな libc 実装、特に組み込みシステムに関するものを少し探してきました。これらのライブラリのほとんどは、コンパイルされたプログラムの移植性とサイズをターゲットにしていると思いますが、プロセッサ固有の命令を使用しているかどうかを判断するのは困難です。

  • ** fdlibmは、一見、純粋なソフトウェア定義をいくつか持っているように見えます。これをさらに検査します。ただし、ソースにはいくつかのバグが記載されています (コードは標準ではありません)。
  • ** newlibは同じ定義を持っているようです (Sun Microsystems のコードに基づく)。しかし、これらのソフトウェア バージョンが常に使用されているかどうかは、現時点でははっきりとは言えません。そのため、現時点では見られないコプロセッサ コールがいくつかある可能性があります (パート 2 を参照)。
  • ** uClibcは newlibと特徴を共有しているようです。

パート 2: これらの実装の構造を理解する

  • これらの数学ライブラリの構造を簡単に紹介してくれませんか。さまざまなバージョン (特定のコプロセッサなど) はどのようにディスパッチされますか?

  • そして、ファイル名のこれらの異なる接頭辞の意味は何ですか. e_sqrt.ck_sins_sin?

私にとって有用なライブラリについて教えていただければ幸いです。私はライブラリをそのまま使用することを好みますが、必要な場合は、いくつかの単一関数の実装を探して、小さなライブラリを構築することもできます。math.h で定義されているすべての関数を使用するわけではありません。

thisおよびthis SO-posts は、Java Math 実装がfdlibmに基づいている/だったと言っています。これは、このライブラリが進むべき道であるように聞こえます。私が知っておくべきこのライブラリについてもっと情報を持っている人はいますか?

次の2つを含む多くの可能性があるようです:

  1. glibc を使用し、ソフトウェア モードでコンパイルします。問題は、(configure で) 自動システム チェック ツールを使用できないことです。すべての情報を手動で提供する必要があります。fp コプロセッサーの使用を禁止し、simd 操作を禁止するフラグはありますか? fp-without から始める必要があり、コンパイルするとソフトフロートも使用されます。コンパイルプロセスは、多かれ少なかれホストの特定の決定に依存していると思います(アームなど)。
  2. fdlibm を使用します(現時点では推奨)。問題: プログラムをリンクするにはどうすればよいですか? assert のような非 libm 関数が必要ですが、インストールされている system-libm ではなく、私の fdlibm に対してリンクしたい (したがって、-nodefaultlibs は assert の使用を禁止します)。
0 投票する
2 に答える
3001 参照

embedded - カスタム ARM セットアップへの newlib の移植

これは私の最初の投稿であり、約 1 年間取り組んだりやめたりしようとしてきたことをカバーしています。

基本的には、次のように要約されます: LPC2388 (NXP の ARM7TDMI) で動作させようとしている newlib のコピーがあります。これは、arm-elf-gcc を使用する Linux ボックス上にあります。

私が持っている質問は、newlib の移植について話している多くのチュートリアルを見てきたということです。それらはすべてスタブ (exit、open、read/write、sbrk など) について話しているので、かなり良い考えを持っています。これらすべての機能を実装する方法。しかし、どこに置くべきですか?

私は、sources.redhat.com/pub/newlib/newlib-1.18.0.tar.gz から newlib ディストリビューションを入手しました。 arm) には、更新する必要があるすべてのスタブが含まれていますが、それらはすべてかなり完成した外観のコードで埋められています (これは、crt0.S なしでは機能しないようで、それ自体は私のチップでは機能しません)。

これらの関数を自分で一掃して、書き直すべきですか?それとも別の場所に書くべきですか?「アーキテクチャ」の名前で newlib/libc/sys にまったく新しいフォルダーを作成し、ターゲットを一致するように変更する必要がありますか?

このようなものをオープンソースプロジェクトとしてリリースした後、配布する際の適切なエチケットがあるかどうかも興味があります。現在、binutils、arm-elf-gcc、newlib、および gdb をダウンロードしてコンパイルするスクリプトがあります。newlib ディレクトリにあるファイルを変更する場合、スクリプトが自動適用するパッチを渡す必要がありますか? または、変更した newlib をリポジトリに追加する必要がありますか?

わざわざ読んでくれてありがとう!これに続いて、私がやっていることのより詳細な内訳があります。


私のセットアップに関する詳細情報が必要な人のために:

Uzebox プロジェクト ( http://belogic.com/uzebox/ )に大まかに基づいて、ARM ビデオゲーム コンソールを構築しています。

私はそれを理解しようとして、多くの異なるリソースから引き出してあらゆる種類のことをしてきました. ここで私の冒険の始まりについて読むことができます (sparkfun フォーラム、私が自分でそれを理解するので、誰も応答しません): forum.sparkfun.com/viewtopic.php?f=11&t=22072

私は、これらすべてに続いて、newlib の移植に関する Stackoverflow の質問を読み、さまざまなチュートリアル ( wiki.osdev.org/Porting_Newlib など) をいくつか見ましたが、どこに、誰が、何を、いつ、どのように!

0 投票する
1 に答える
2193 参照

scanf - newlib sscanf() が stm32 でハードフォールト例外をスローする

gcc を使用してプロジェクトをコンパイルし、main で関数 sscanf() を使用します。スタック サイズは 4k です。gdb でプログラムをデバッグし、VPUSH 命令が例外をスローすることを示します。

関数 sprintf() をテストしましたが、うまくいきました。関数 sscanf() が stm32 の newlib で機能しないのはなぜですか?

0 投票する
2 に答える
1198 参照

malloc - malloc が cortex-m3 をフラッシュした直後にしか機能しないのはなぜですか?

cortex-m3 (ベアメタル) で実行されている newlib の malloc を使用してメモリを動的に割り当てようとしていますが、複雑な問題に遭遇しました。デバイスをフラッシュした直後は、malloc と free の両方が期待どおりに機能します。ただし、デバイスをリセットすると、malloc は NULL のみを返します。malloc 以外はすべて機能します。この種の動作を引き起こす原因についてのヒントはありますか?

これが私のリンカースクリプトです:

そして、これは私のメモリマップからのものです:

malloc が成功すると、0x10000d48 から割り当てを開始します。