LINUX.ORG.RU

Как объяснить gcc, что мне нужен ELF типа EXEC, а не DYN?

 , ,


1

2

Собираю бинарник в режиме freestanding. (Исполняемые файлы для моего pet project — мелкой самописной ОС). В заголовок файла записывается тип DYN, а должен быть — EXEC.

Команда для сборки такая:

gcc -m32 -O2 -march=pentium -pipe -fno-omit-frame-pointer -fno-strict-aliasing -ffreestanding -fno-stack-protector -Wall -W -Wshadow -Wcast-align -Wsign-compare -Waggregate-return -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wmissing-noreturn -Wmissing-format-attribute -Wredundant-decls -nostdinc -nostdlib -Wl,--warn-common,-X,--oformat,elf32-i386 [дальше куча файлов .o и .a] -o login

Несколько версий GCC назад всё работало как надо. Не пойму, что ему не нравится. Единственная разница в конфигурации (кроме версии ПО) в том, что раньше собирал нативным 32-битным компилятором, а сейчас кросскомпилирую с x86_64.

Было:

Заголовок ELF:
  Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 
  Класс:                             ELF32
  Данные:                            дополнение до 2, от младшего к старшему
  Версия:                            1 (current)
  OS/ABI:                            UNIX - System V
  Версия ABI:                        0
  Тип:                               EXEC (Исполняемый файл)
  Машина:                            Intel 80386
  Версия:                            0x1
  Адрес точки входа:                 0x8048cd0
  Начало заголовков программы:       52 (байт в файле)
  Начало заголовков раздела:         6940 (байт в файле)
  Флаги:                             0x0
  Размер этого заголовка:            52 (байт)
  Размер заголовков программы:       32 (байт)
  Число заголовков программы:        7
  Размер заголовков раздела:         40 (байт)
  Число заголовков раздела:          18
  Индекс табл. строк загол. раздела: 17

Стало:

Заголовок ELF:
  Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 
  Класс:                             ELF32
  Данные:                            дополнение до 2, от младшего к старшему
  Версия:                            1 (current)
  OS/ABI:                            UNIX - System V
  Версия ABI:                        0
  Тип:                               DYN (Совм. исп. объектный файл)
  Машина:                            Intel 80386
  Версия:                            0x1
  Адрес точки входа:                 0x1080
  Начало заголовков программы:       52 (байт в файле)
  Начало заголовков раздела:         8532 (байт в файле)
  Флаги:                             0x0
  Размер этого заголовка:            52 (байт)
  Размер заголовков программы:       32 (байт)
  Число заголовков программы:        9
  Размер заголовков раздела:         40 (байт)
  Число заголовков раздела:          18
  Индекс табл. строк загол. раздела: 17

Версия gcc — 7.2.0, версия LD — 2.29. Какае версии были раньше уже не вспомню (2012-й год это был).

Deleted

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.