์ ์ฅ ์ฅ์น์ 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
