2013-07-31 2 views
1

일부 섹션에 대해 정렬을 지정하고 싶습니다. ld 2.20.0를 들어 다음과 같은 접근 방식은 작동합니다골드 링커 : 섹션 정렬 지정

  • 다음 정렬되어야만을 섹션을 포함하는 링커 스크립트, 예컨대 :

    SECTIONS 
    { 
        .data ALIGN(0x40): { *(.data) } 
    
        .text ALIGN(0x40): { *(.text) } 
    
        .plt ALIGN(0x10): { *(.plt) } 
    } 
    
  • 을 만들와 연결 :

    -rpath-link=/path/to/LinkerScript.ld /path/to/LinkerScript.ld 
    

    예를 rpath-link에 스크립트를 포함시키고 오브젝트 파일 중 하나로 전달하십시오. gold 2.23.1를 사용하여 동일한 방법으로 링크 할 때

이제

이 스크립트는이 오류와 함께 거부 :

LinkerScript.ld: SECTIONS seen after other input files; try -T/--script 

그래서 금하지만, 완전한 링커 스크립트를 지정하는 저를 원한다 나는 단지 두 가지 속성 만 바꾸고 싶다. 이것이 가능한가?

은 내가 이미 시도 :

  • -T 옵션과 함께 스크립트를 전달. 이로 인해 시작할 수없는 깨진 실행 파일이 생성됩니다. 위의 내용은 기존 스크립트의 "주석"에 불과하지만 -T은 완전한 링커 스크립트 만 허용하기 때문에이 사실을 이해합니다.
  • -T 옵션을 사용하여 스크립트를 ld 2.20.0으로 전달할 때 일부 섹션이 지정되지 않았기 때문에 링크가 실패합니다. 필자의 사용 사례를위한 "완전한"링커 스크립트는 아닙니다.
  • 그래서 완전한 링커 스크립트를 얻으려고했습니다. ld --verbose은 기본 링커 스크립트를 인쇄합니다. gold에 의해 이해되지 않는 두 개의 기호를 제거해야하고 이후에 -T/path/to/LinkerScript.ld 옵션으로 생성 된 실행 파일은 더 이상 작동하지 않습니다.
  • 불행히도 gold에는 기본 링커 스크립트를 표시하는 옵션이 없습니다 (어떤 것도 사용하지 않습니다).
  • 맨 페이지는 매개 변수로 위의 경우의 정렬을 변경하는 방법을 지정하지 않습니다.

도움이 될 것입니다.

답변

0

나는 내 문제를 해결하는 해결책을 찾았습니다.

  • 더미 정렬을 사용하여 어셈블러 파일을 포함하면 데이터 섹션과 텍스트 섹션을 정렬 할 수 있습니다. 섹션의 정렬은 어디에서나 지정할 수있는 최대 정렬이므로 최소한이 정렬을 갖습니다.

    예제 파일 정렬.들 (어셈블러로 컴파일하고 링크에서 오브젝트 파일을 포함) :

 
    .section .text 
    .balign 0x40 

    .section .data 
    .balign 0x40 

    .end 
  • 금 링커는 PLT를 정렬하고 그 크기 (각각 16, 8 바이트)로 항목을 얻었다. 이것은 나의 유스 케이스에 충분하다.