Что такое ограничение размера файла ELF на 64-битной платформе? - PullRequest
2 голосов
/ 21 октября 2010

Предположим, x86 64 и платформа Linux.

Если вы посмотрите в заголовок ELF, все смещения будут 64-битными.

Так что легко создать объектный файл размером более 4G с помощью перемещения R_X86_64_64. Это означает, что статический файл .o и исполняемый файл могут быть размером до 64 бит.

Однако для разделяемой библиотеки, такой как gcc, у нас есть только перемещение R_X86_64_PLT32. Это означает, что невозможно создать общую библиотеку размером более 4 ГБ, верно?

Итак, если я хочу создать огромную программу, один из файлов .o достаточно велик (> 4 ГБ), единственный выбор - статическое связывание?

Любой комментарий приветствуется.

Спасибо, ограни

1 Ответ

2 голосов
/ 22 октября 2010

ABI x86-64, используемый в Linux , определяет «большую модель» специально, чтобы избежать таких ограничений по размеру, включая 64-разрядные типы перемещения для GOT и PLT.(См. Таблицу в разделе 4.4.2 и последовательности команд в 3.5.5, в которых показано, как они используются.)

...