Режим ARM Thumb: размер кода не уменьшается - PullRequest
5 голосов
/ 05 ноября 2010

Ребята, у меня есть проект, который я скомпилировал для процессора ARM Cortex-A8.Я использую GCC, чтобы сделать это.В настоящее время размер моего исполняемого файла составляет 220,1 КБ.Теперь я изменяю свой make-файл и добавляю флаг -mthumb, строка make-файла выглядит примерно так -

gcc -mcpu=cortex-a8 -mthumb -marm -mfloat-abi=softfp -mfpu=neon

Я делаю эти изменения во всех моих make-файлах и строю свой проект, но исполняемый файл, который я получаюнаконец, он по-прежнему имеет размер 220,1 КБ.

Я внес еще одно изменение в свою командную строку, добавил параметр -mthumb-interwork

gcc -mcpu=cortex-a8 -mthumb -mthumb-interwork -marm -mfloat-abi=softfp -mfpu=neon

Еще раз получаю исполняемый файл того же размера220,1 КБ.Я что-то упускаю при этом?

Я написал небольшую программу, чтобы найти наименьшее из двух чисел, и скомпилировал ее, используя следующую командную строку

gcc main.c -o main

Я получил 8,5 КБисполняемый файл

Затем я выполняю

gcc -mthumb main.c -o main

Я все еще получаю исполняемый файл объемом 8,5 КБ.

Что здесь не так?

Я сделал cat /proc/cpuinfo чтобы увидеть, действительно ли thumb поддерживается моим процессором, и я вижу, что он действительно поддерживается.Я получаю -

Processor: ARMv7 Processor rev 5 (v7l)
Features: swp half thumb fastmult vfp edsp neon vfpv3
....
....

Ответы [ 3 ]

6 голосов
/ 06 ноября 2010

Я думаю, что -marm означает, что у вас есть рука без большого пальца, попробуйте удалить -marm.

2 голосов
/ 05 ноября 2010

Трудно сказать без реального кода, но у меня есть пара предложений.

  1. Включить оптимизацию.(например, -O3 -ffunction-section -fdata-section)
  2. Обрезать исполняемый файл, чтобы убедиться, что отладочная информация не учитывается.
  3. Проверьте фактический размер кода (.text), а неразмер файла.Может быть, происходит какое-то дополнение.Для этого вы можете использовать objdump.
  4. Дамп кода сборки (-S переключатель) и проверить, что он действительно выдает инструкции ARM в одном случае и Thumb в другом.
0 голосов
/ 05 ноября 2010

В некоторых компиляторах при компиляции для ARMv7 по умолчанию используется thumb. Вы уверены, что ваш оригинальный исполняемый файл не был создан для большого пальца?

Попробуйте построить с -mno-thumb и посмотрите, увеличивается ли размер кода.

...