PicoLibc 1.8.9 ํ‘œ์ค€ C ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฆด๋ฆฌ์Šค

์ €์žฅ ์žฅ์น˜์™€ RAM์ด ์ œํ•œ๋œ ์ž„๋ฒ ๋””๋“œ ์žฅ์น˜์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด Keith Packard(X.Org ํ”„๋กœ์ ํŠธ ๋ฆฌ๋”)๊ฐ€ ๊ฐœ๋ฐœํ•œ ํ‘œ์ค€ C ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ PicoLibc 1.8.9๊ฐ€ ์ถœ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ๊ณผ์ •์—์„œ ์ฝ”๋“œ ์ผ๋ถ€๋Š” Cygwin ํ”„๋กœ์ ํŠธ์˜ newlib ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ Atmel AVR ๋งˆ์ดํฌ๋กœ์ปจํŠธ๋กค๋Ÿฌ์šฉ์œผ๋กœ ๊ฐœ๋ฐœ๋œ AVR Libc์—์„œ ๋นŒ๋ ค์™”์Šต๋‹ˆ๋‹ค. PicoLibc ์ฝ”๋“œ๋Š” BSD ๋ผ์ด์„ ์Šค์— ๋”ฐ๋ผ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์–ด์…ˆ๋ธ”๋ฆฌ๋Š” ARM(32๋น„ํŠธ), Aarch64, i386, RISC-V, x86_64, m68k, PowerPC, LatticMico32, LoongArch ๋ฐ OpenRisc ์•„ํ‚คํ…์ฒ˜์—์„œ ์ง€์›๋ฉ๋‹ˆ๋‹ค.

์ฒ˜์Œ์— ์ด ํ”„๋กœ์ ํŠธ๋Š” โ€œnewlib-nanoโ€๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ๊ฐœ๋ฐœ๋˜์—ˆ์œผ๋ฉฐ RAM์ด ์ ์€ ์ž„๋ฒ ๋””๋“œ ์žฅ์น˜์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์–ด๋ ค์› ๋˜ Newlib์˜ ๋ฆฌ์†Œ์Šค ์ง‘์•ฝ์  ๊ธฐ๋Šฅ ์ค‘ ์ผ๋ถ€๋ฅผ ์žฌ์ž‘์—…ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด PicoLibc์—์„œ stdio ํ•จ์ˆ˜๋Š” avrlibc ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ปดํŒฉํŠธ ๋ฒ„์ „์œผ๋กœ ๋Œ€์ฒด๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ BSD ๋ผ์ด์„ผ์Šค์— ๋”ฐ๋ผ ์ œ๊ณต๋˜์ง€ ์•Š๋Š” ๋‚ด์žฅํ˜• ์žฅ์น˜ ์–ด์…ˆ๋ธ”๋ฆฌ์— ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ตฌ์„ฑ ์š”์†Œ์— ๋Œ€ํ•œ ์ฝ”๋“œ๋„ ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ดˆ๊ธฐํ™” ์ฝ”๋“œ(crt0)์˜ ๋‹จ์ˆœํ™”๋œ ๋ฒ„์ „์ด ์ถ”๊ฐ€๋˜์—ˆ์œผ๋ฉฐ ํ˜ธ์ถœ ๊ตฌํ˜„์ด 'struct _reent'์—์„œ TLS(์Šค๋ ˆ๋“œ-๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€) ๋ฉ”์ปค๋‹ˆ์ฆ˜์œผ๋กœ ์ „์†ก๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Meson ํˆดํ‚ท์€ ์กฐ๋ฆฝ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์ƒˆ ๋ฆด๋ฆฌ์Šค์—์„œ:

  • LoongArch, OpenRISC ๋ฐ LatticMico32 ์•„ํ‚คํ…์ฒ˜์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • C11 ํ‘œ์ค€์— ๋„์ž…๋œ uchar.h ํ—ค๋” ํŒŒ์ผ์˜ ๊ตฌํ˜„์ด ์ œ์•ˆ๋ฉ๋‹ˆ๋‹ค.
  • free() ๋˜๋Š” realloc() ์ดํ›„์— ํ•ด์ œ๋œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ง€์šฐ๊ธฐ ์œ„ํ•ด nano-malloc-clear-freed ์„ค์ •์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ARM64 ์‹œ์Šคํ…œ์—์„œ clang multilib๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์—ฐ์† ํ†ตํ•ฉ ์‹œ์Šคํ…œ์—์„œ ์ž๋™ ์–ด์…ˆ๋ธ”๋ฆฌ๋ฅผ ์œ„ํ•œ ์ƒˆ๋กœ์šด picolibc-ci-tools ํˆดํ‚ท์œผ๋กœ์˜ ์ „ํ™˜์ด ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • MIPS ์•„ํ‚คํ…์ฒ˜๋Š” ๋””๋ฒ„๊ฑฐ๋‚˜ ์—๋ฎฌ๋ ˆ์ดํ„ฐ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ๊ฐ€ ํ˜ธ์ŠคํŠธ ์‹œ์Šคํ…œ์˜ I/O ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” "์„ธ๋ฏธํ˜ธ์ŠคํŒ…" ๊ธฐ์ˆ ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • Xtensa ํ”„๋กœ์„ธ์„œ์— ๋Œ€ํ•œ picocrt ๋ฐ semihost ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • CoreBoot์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์„ค์ •์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • C23 ํ‘œ์ค€์— ๋„์ž…๋œ memset_explicit() ํ•จ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๋Œ€์†Œ๋ฌธ์ž ๋ณ€ํ™˜ ํ‘œ๊ฐ€ ์œ ๋‹ˆ์ฝ”๋“œ ์‚ฌ์–‘ 15.1.0์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • asnprintf() ๋ฐ vasnprintf() ํ•จ์ˆ˜๊ฐ€ newlib ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ด๋™๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ARM์—์„œ ๊ฐœ๋ฐœํ•œ FVP(๊ณ ์ • ๊ฐ€์ƒ ํ”Œ๋žซํผ) ์—๋ฎฌ๋ ˆ์ดํ„ฐ์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ด์ „ ๋ฒ„์ „์˜ GCC ์ปดํŒŒ์ผ๋Ÿฌ(4.4 ์ด์ „)์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • iconv ๋ฐ locale ๊ตฌํ˜„์€ ์ธ์ฝ”๋”ฉ ์ž‘์—…์— ๊ณตํ†ต ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ณด๋‹ค ์ปดํŒฉํŠธํ•œ ๋ฒ„์ „์œผ๋กœ ๋Œ€์ฒด๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€