ARM, binutils kompilacja i różnice w wielkości kodów

0

Trochę mnie irytuje brak możliwości zrozumienia co robię innego niż robi skrypt.

  1. Ściągam binutils 2.35 jako rpm dla fedory.
  2. Drugi rpm pobieram ze źródłami do mojego rpm.
  3. Rozpakowuje rpm(1) i mam tam np. arm-none-eabi-objdump. W paczce zajmuje 1,2MB.
  4. Rozpakowuje źródła, kompiluje przy pomocy rpmbuild i mam wynik podobny dla tego pliku tj. około 1,2MB
  5. Przechodzę do źródeł i kompiluję ręcznie. configure daję z identycznym wywołaniem jak w rpmbuild (skrypt) jest wpisane i wychodzi mi ~10MB.
  6. Żeby tego było mało, to kompilowałem (4) zmieniając plik skrypty rpmbuild i usunąłem tam -o2 i parę innych rzeczy licząc, że wyskoczy mi 10MB a tam dalej mniej niż 2MB.

Dlaczego rpmbuild daje mniejszy kod?

0

A to nie jest tak, że pierwsza wersja jest bez symboli debugowych, "zestripowana"?

0

@nalik:
Ok, ale to tłumaczy punkt (3).
A jak daję rpmbuld (4) dla tych samych źródeł, które potem kompiluję ręcznie tymi samymi poleceniami co w skrypcie z rpmbuild to mam 9MB różnicy. Właśnie tego nie kumam.

Nawet teraz usunąłem ze skryptu rpmbuild wszystkie opcję z gcc przekazane przez configure i w utworzonych w ten sposób RPMach mam małe pliki. Nawet w rpmie, który się utworzył z nazwą "arm-none-eabi-binutils-cs-debuginfo-2.35-1.fc33.x86_64" pliki są po 5MB a nie 10MB.

Jak w gcc ustawić usunięcie wszystkich symboli debugowania?

3

Usunąć -g z flag albo na binarce użyć strip. No i pytanie jeszcze o flagi -ffunction-sections i -fdata-sections i dalej -gc-sections przekazane do linkera.

EDIT2 obczaj to, testowane przez wiele osób, działa: https://github.com/FreddieChopin/bleeding-edge-toolchain

1 użytkowników online, w tym zalogowanych: 0, gości: 1