sonsy0929 / TIL

0 stars 0 forks source link

Error: L6236E: No section matches selector - no section to be FIRST/LAST. #16

Open sonsy0929 opened 2 years ago

sonsy0929 commented 2 years ago
// source.c
#define AREA __attribute__((section("AREA")))

AREA      const UINT32 day = 929;

// scatter.scat
LOAD_FOO
{
    ABCD_FOO
    {
        Common.o (AREA, +FIRST)
        A.o (+RO)
        B.o (+RO)
        C.o (+RO)
        D.o (+RO)
        Common.o (AREA_END, +LAST)
    }
}
sonsy0929 commented 2 years ago

clear하게 고치진 못했지만 고치는데 시간 소요가 엄청 된 error이다. 에러가 뜬 이유로는 input section인 AREA를 찾을 수 없는 것이었다. 왜 그런가 확인을 해봤더니,, AREA 내의 변수가 사용된 곳이 없어 컴파일러가 최적화를 해주어 Section AREA가 제거된 것이었다. 이를 Makefile에서 Linking을 할 때 --keep 옵션을 통해서 input section을 명시해주면 컴파일러가 최적화를 해도 제거가 되지 않게 방지할 수 있다.

const를 제거했을 때만 다음 error로 넘어가는데 왜 그런지는 잘 모르겠다.. const 변수니까 section rodata에 넣으면 될 것 같아서 시도를 해봤는데 그래도 에러가 발생하였다.