crt 에서 bss clear 를 하는 것은, 특정 환경을 전제로 하고 제공되는, 개조된 전용 툴체인 입니다.
bare metal 환경을 가정하고 개발되는 부트로더나 커널은 범용 툴체인으로 개발을 하죠.
이런 경우엔 crt 를 아예 안 씁니다. 그래서 main 같은 놈도 따로 정해놓고 쓰진 않고요.
crt 역할을 하는 놈이 아예 없지는 않습니다. 예를 들면 lk(little kernel) 같은 놈은 .init 이나 .ctors 같은 constructor 까지도 자체 처리를 합니다.
https://kldp.org/comment
https://kldp.org/comment/521310#comment-521310
bss를 clear해주는 코드를 추가해줘야 해요.
bss를 clear해주는 코드를 추가해줘야 해요.
보통은 C startup code에서 이걸 해주는데, firmware 환경이면, 그 부분이 없겠네요.
0으로 강제 할당해도, compiler가 bss에 넣을겁니다.
C startup code 에서 bss clear
C startup code 에서 bss clear 하는 부분의 코드가 어디인지 좀 알려주실 수 있나요 ?
음 ..
linker script 에서 정의하고, crt0 에서 section 초기화 할 때 참조하는 것 같네요.
https://sourceware.org/binutils/docs/ld/Output-Section-LMA.html#Output-Section-LMA
https://github.com/Xilinx/embeddedsw/blob/0951d83c9e6f32f91a0733a196b72b7027f17916/lib/bsp/standalone/src/arm/cortexa9/gcc/xil-crt0.S#L84
https://github.com/32bitmicro/newlib-nano-1.0/blob/c010b5911834ed9a412bd0a865abdf3eed00a4ee/newlib/libc/sys/arm/crt0.S#L84
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
둘 모두 OS 나 다른 로더가 없는 firmware
둘 모두 OS 나 다른 로더가 없는 firmware 환경이라 생각됩니다.
일반적으론, ELF 로더에서 bss clear 를 해 줍니다. 예를 들면, 리눅스 커널의 binfmt_elf.
drinkme 님이 말씀하시는 "C startup 코드" 라는 게 뭔지 애매해서 여쭤본건데, ymir 님이 생각하시기에도 crt 인 것 같나보네요...
음 ..
로더가 있고 없고에 따라 역할이 조금 달라지는군요.
어쩐지 뭔가 아실 것 같은데 물어 보시길래 조금 의아하게 생각했습니다.
예전에 stm32 계열 보드 갖고 뭐 좀 하다가, 힙이 좀 많이 필요해서..
linker script 포함해서 여기 저기 좀 건드리면서 본 기억이 있었는데..
그래서 그냥 단순히 crt 인가 보다 하고 생각했네요..;;
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
crt
linux같은것에는 loader가 0으로 만들어주고요
bare metal 환경에서는 crt가 main() 호출 전에 해줘요.
표준 crt 안썼으면,
그냥 main() 초기나 그 전에서 bss를 0으로 써주면 되요.
crt 에서 bss clear 를 하는 것은, 특정
crt 에서 bss clear 를 하는 것은, 특정 환경을 전제로 하고 제공되는, 개조된 전용 툴체인 입니다.
bare metal 환경을 가정하고 개발되는 부트로더나 커널은 범용 툴체인으로 개발을 하죠.
이런 경우엔 crt 를 아예 안 씁니다. 그래서 main 같은 놈도 따로 정해놓고 쓰진 않고요.
crt 역할을 하는 놈이 아예 없지는 않습니다. 예를 들면 lk(little kernel) 같은 놈은 .init 이나 .ctors 같은 constructor 까지도 자체 처리를 합니다.
댓글 달기