2016-10-10 16 views
7

GCC에서 MEMORY 명령은 대상에있는 메모리 블록의 위치와 크기를 설명합니다. 명령은이 way을 사용해야합니다.링커 파일의 메모리 특성 'p'는 무엇입니까?

MEMORY 
    { 
    name [(attr)] : ORIGIN = origin, LENGTH = len 
    ... 
    } 

지금, 나는 링커 램 메모리 섹션이 방법을 정의 (은 TriCore 마이크로 컨트롤러는 TriCore-LD를위한 GCC 기반 링커)에 의해 사용되는 링커 파일이 :

MEMORY 
    { 
    ram  (w!xp): org = 0x70000000, len = 32k 
    ... 
    } 

당신은 설명 할 수있는 것을 'p'는 (w! x p)을 의미합니까? 일반적으로 'p'는 무엇을 의미합니까?

+1

그 링커는 무엇입니까? – Droppy

+0

링커는 tricore 마이크로 컨트롤러 (tricore-ld) 용 GCC 기반 링커입니다. – djondal

+1

나는 그것이 중요하다고 생각한다; 태그를 수정하십시오. – Droppy

답변

1

표준 링커 스크립트가 아니며, 물론 맞춤형 마이크로 컨트롤러 대상으로는 이상하지 않습니다. 아마 오래전에 갈기 갈기 렸을 것입니다. 그러나 쉽게 리버스 엔지니어링 할 수 있으며 GCC는 항상 오브젝트 파일에 ELF 형식을 사용합니다. Google "elf section attributes", 팝업 아웃 this hit, 여기 꽤 도움이됩니다.

그래서 alloc, exec, write, progbits가 있습니다. 아하, p == progbits. 그래서 (w! xp) 반드시 "섹션은 쓰기 가능하고 실행 가능하지 않으며 초기 데이터는 실행 가능 이미지에 저장됩니다"로 해석되어야합니다.

매우 특별한 것은 C 프로그램의 전통적인 .data 섹션입니다. p가 아닌 .bss와 비교하십시오. OP 추가


정보 : UNIX ELF 형식에이 presentation에서

:

  • PROGBITS :이 코드, 데이터 및 디버거 정보를 포함하여 프로그램 내용을 보유하고 있습니다.

  • NOBITS : PROGBITS와 유사합니다. 그러나 공간을 차지하지 않습니다.

  • SYMTAB 및 DYNSYM : 기호 테이블을 보유합니다.

  • STRTAB : 이것은 a.out에 사용 된 것과 같은 문자열 테이블입니다.

  • REL 및 RELA : 재배치 정보를 보유합니다.

  • 다이나믹 및 해시 : 동적 연결과 관련된 정보를 포함합니다.

+0

progbits가 무엇인지 설명해 주시겠습니까? – djondal

+0

실행 가능 이미지에서 초기화 된 메모리. 코드 및 초기화 된 데이터와 같습니다. 'int x = 42;'는 progbits 섹션에 들어가고,'int x;'는 progbits 섹션에 들어갑니다. http://stackoverflow.com/questions/9535250/why-is-the-bss-segment-required –

+0

올바르게 이해하면 디버깅 관련 정보가 포함 된 섹션과 실행 코드가 포함 된 섹션의 글로벌 데이터를 구별 할 수 있습니까? – djondal