Go to the first, previous, next, last section, table of contents.



플래폼별 기능

ld has additional features on some platforms; the following sections describe them. Machines where ld has no additional functionality are not listed.

ld는 다음에 설명하는 몇몇 플래폼에 추가 기능이 있다. 추가 기능이 없는 플래폼은 열거하지 않는다.

ld과 the H8/300

For the H8/300, ld can perform these global optimizations when you specify the `--relax' command-line option.

H8/300에서 `--relax' 옵션은 전역 최적화를 한다.

relaxing address modes
ld finds all jsr and jmp instructions whose targets are within eight bits, and turns them into eight-bit program-counter relative bsr and bra instructions, respectively.
대상이 8 비트 내인 모든 jsrjmp 명령을 각각 8 비트의 프로그램 카운터 상대적인 bsrbra 명령으로 변환한다.
synthesizing instructions
ld finds all mov.b instructions which use the sixteen-bit absolute address form, but refer to the top page of memory, and changes them to use the eight-bit address form. (That is: the linker turns `mov.b @aa:16' into `mov.b @aa:8' whenever the address aa is in the top page of memory).
16 비트 절대 주소를 사용하고 메모리의 최고 페이지를 지칭하는 모든 mov.b 명령을 8 비트 주소 형식으로 변환한다. (즉, 주소 aa가 메모리의 최고 페이지에 있으면 `mov.b @aa:16'`mov.b @aa:8'으로 변환한다)

ld과 Intel 960 계열

You can use the `-Aarchitecture' command line option to specify one of the two-letter names identifying members of the 960 family; the option specifies the desired output target, and warns of any incompatible instructions in the input files. It also modifies the linker's search strategy for archive libraries, to support the use of libraries specific to each particular architecture, by including in the search loop names suffixed with the string identifying the architecture.

For example, if your ld command line included `-ACA' as well as `-ltry', the linker would look (in its built-in search paths, and in any paths you specify with `-L') for a library with the names
960 계열의 멤버를 나타내는 두 문자를 `-Aarchitecture' 옵션에 사용할 수 있다. 이 옵션은 원하는 출력을 지정하고 입력파일에 호환되지 않은 명령이 있다면 경고한다. 또 각 아키텍쳐 특유의 라이브러리를 지원하기 위해서 아키텍쳐를 나나태는 문자를 접미사로 사용하여 아카이브 라이브러리 검색 방법을 변경한다.

try
libtry.a
tryca
libtryca.a

The first two possibilities would be considered in any event; the last two are due to the use of `-ACA'.

You can meaningfully use `-A' more than once on a command line, since the 960 architecture family allows combination of target architectures; each use will add another pair of name variants to search for when `-l' specifies a library.

ld supports the `--relax' option for the i960 family. If you specify `--relax', ld finds all balx and calx instructions whose targets are within 24 bits, and turns them into 24-bit program-counter relative bal and cal instructions, respectively. ld also turns cal instructions into bal instructions when it determines that the target subroutine is a leaf routine (that is, the target subroutine does not itself call any subroutines).

처음 두개는 어떤 경우에도 사용되지만, 마지막 두개는 `-ACA' 때문에 사용된다.

960 계열은 대상 아키텍쳐를 혼합이 가능하므로 `-A'을 여러번 사용해도 된다. 각 옵션은 `-l'이 라이브러리를 지시할 때 변형된 이름들을 검색하게 한다.

i960 계열은 `--relax' 옵션을 지원한다. `--relax'를 사용하면 대상이 24 비트 내에 있는 모든 balxcalx 명령을 각각 24 비트 프로그램 카운터 상대적인 balcal 명령으로 변환한다. 또한 대상이 (다른 함수를 호출하지 않으면 함수인) 리프 함수(leaf routine)라면 cal 명령을 bal 명령으로 변환한다.

ARM과 Thumb 코드의 결합 지원

For the ARM, ld will generate code stubs to allow functions calls betweem ARM and Thumb code. These stubs only work with code that has been compiled and assembled with the `-mthumb-interwork' command line option. If it is necessary to link with old ARM object files or libraries, which have not been compiled with the -mthumb-interwork option then the `--support-old-code' command line switch should be given to the linker. This will make it generate larger stub functions which will work with non-interworking aware ARM code. Note, however, the linker does not support generating stubs for function calls to non-interworking aware Thumb code.

The `--thumb-entry' switch is a duplicate of the generic `--entry' switch, in that it sets the program's starting address. But it also sets the bottom bit of the address, so that it can be branched to using a BX instruction, and the program will start executing in Thumb mode straight away.

ARM에서 ld는 ARM과 Thumb 코드 간에 함수를 호출하는 스텁 코드(stub)를 생성한다. 이 코드는 `-mthumb-interwork' 옵션을 사용하여 컴파일하고 어셈블한 코드와만 동작한다. -mthumb-interwork 옵션을 사용하지 않은 오래된 ARM 오브젝트 파일이나 라이브러리와 링크하려면 링커에 `--support-old-code' 옵션을 사용해야 한다. 그러면 과거 ARM 코드와 동작하는 더 큰 스텁 함수를 생성한다. 주의! 그러나 링커는 과거 Thumb 코드로 함수 호출를 하는 스텁을 생성할 수 없다.

`--thumb-entry' 옵션은 프로그램의 시작 주소를 설정하는 일반 옵션 `--entry'와 같다. 그러나 이것은 주소의 하위 비트도 설정하여 BX 명령을 사용하여 분기할 수 있고, 프로그램이 처음부터 Thumb 모드로 실행할 수 있다.

ld와 HPPA 32 비트 ELF

When generating a shared library, ld will by default generate import stubs suitable for use with a single sub-space application. The `--multi-subspace' switch causes ld to generate export stubs, and different (larger) import stubs suitable for use with multiple sub-spaces.

공유 라이브러리를 생성할 때 기본적으로 한 sub-space 프로그램에서 사용하기 적합한 임포트 스텁을 생성한다. `--multi-subspace' 옵션은 익스포트 스텁과 여러 sub-space와 적합한 (보다 큰) 임포트 스텁을 생성한다.

Long branch stubs and import/export stubs are placed by ld in stub sections located between groups of input sections. `--stub-group-size' specifies the maximum size of a group of input sections handled by one stub section. Since branch offsets are signed, a stub section may serve two groups of input sections, one group before the stub section, and one group after it. However, when using conditional branches that require stubs, it may be better (for branch prediction) that stub sections only serve one group of input sections. A negative value for `N' chooses this scheme, ensuring that branches to stubs always use a negative offset. Two special values of `N' are recognized, `1' and `-1'. These both instruct ld to automatically size input section groups for the branch types detected, with the same behaviour regarding stub placement as other positive or negative values of `N' respectively.

긴 분기 스텁과 임포트/익스포트 스텁은 입력 섹션 군 사이의 스텁 섹션에 위치한다. `--stub-group-size' 옵션은 한 스텁 섹션이 다루는 입력 섹션 군의 최대 크기를 정한다. 분기 옵셋은 부호가 있기 때문에 스텝 섹션은 스텝 섹션 전과 뒤, 두 군의 입력 섹션을 다룬다. 그러나 스텁이 필요한 조건 분기를 사용할 때 오직 한 입력 섹션 군만 다루는 것이 (분기예측을 위해) 좋다. 음수값 `N'은 스텝으로 분기가 항상 음수 옵셋을 사용한다고 확신하여 이 방법을 사용한다. `N'으로 사용할 수 있는 특별한 두 값은 `1'`-1'이다. 둘은 발견된 분기형에 대해 입력 섹션 군의 크기를 자동으로 알아내고 스텁 위치를 각각 `N'의 양/음값으로 취급한다.

Note that `--stub-group-size' does not split input sections. A single input section larger than the group size specified will of course create a larger group (of one section). If input sections are too large, it may not be possible for a branch to reach its stub.

`--stub-group-size'는 입력 섹션을 나누지 않는다. 지정한 크기보다 한 입력 섹션이 크다면 이 입력 섹션을 포함하는 큰 군을 만든다. 그러나 입력 섹션이 너무 크다면 분기가 스텁에 도달하지 못할 수 있다.

ld과 여러 TI COFF 버전

The `--format' switch allows selection of one of the various TI COFF versions. The latest of this writing is 2; versions 0 and 1 are also supported. The TI COFF versions also vary in header byte-order format; ld will read any version or byte order, but the output header format depends on the default specified by the specific target.

`--format' 옵션으로 여러 TI COFF 버전 중 하나를 선택할 수 있다. 이 글을 쓰는 시점에서 최근 버전은 2이다. 버전 0과 1도 지원된다. TI COFF 버전은 헤더의 바이트 순서에서 차이가 난다. ld는 어떤 버전과 바이트 순서도 읽을 수 있다. 그러나 출력 헤더 형식은 지정된 대상의 기본 버전에 의존한다.


Go to the first, previous, next, last section, table of contents.