ARM library kerdes

Andras Tantos andras_tantos at yahoo.com
Tue Oct 5 18:28:54 CEST 2004


Hali!

>> Kerdezd meg miert, talan tudok segiteni. Sajat tapasztalat szerint a GCC
>> (es
>> LD) jobb ELF-ben, mint PE-ben, vagy AOUT-ban. Hacsak nem WinCE ala kell,
>> akkor muszaly PE (COFF) formatumot hasznalni.
>
> Megkerdeztem. Kiderult hogy megis jo :) Nekunk binaris kell, amit a
> nagy nehezen osszehozott soros letolto tud fogadni. OS meg nincs, most
> keszul... (Pontosabban megvan AVR-re, csak at kell irni, allitolag nem
> problema) A binarist pedig az object-bol szedtuk ki objcopy-val.
> Ez ment nalam is, tudok forditani. Nem tudom hogy az elf miert problema,
> nem ertek a gcc melysegeihez, de kozben kiderult hogy megoldhato.
>

Na, akkor toltsd le tolem a GCC-t. Kiprobaltam:

main.c:

int main() {
 float A;
 float B;
 float C;
 A = 1.0;
 B = 3.0;
 C = A*A+B*B;
 return 1;
}

arm-elf-gcc -S main.c:

 .file "test.c"
 .global __mulsf3
 .global __addsf3
 .text
 .align 2
 .global main
 .type main, %function
main:
 @ args = 0, pretend = 0, frame = 12
 @ frame_needed = 1, uses_anonymous_args = 0
 mov ip, sp
 stmfd sp!, {r4, fp, ip, lr, pc}
 sub fp, ip, #4
 sub sp, sp, #12
 ldr r3, .L2 @ float
 str r3, [fp, #-20] @ float
 ldr r3, .L2+4 @ float
 str r3, [fp, #-24] @ float
 ldr r0, [fp, #-20] @ float
 ldr r1, [fp, #-20] @ float
 bl __mulsf3
 mov r4, r0
 ldr r0, [fp, #-24] @ float
 ldr r1, [fp, #-24] @ float
 bl __mulsf3
 mov r3, r0
 mov r0, r4
 mov r1, r3
 bl __addsf3
 mov r3, r0
 str r3, [fp, #-28] @ float
 mov r3, #1
 mov r0, r3
 ldmea fp, {r4, fp, sp, pc}
.L3:
 .align 2
.L2:
 .word 1065353216
 .word 1077936128
 .size main, .-main
 .ident "GCC: (GNU) 3.3.1 (mingw special 20030804-1)"

Amint latod nem FPU-t hasznal. Meg csak -msoft-float se kellett. Megneztem a
hivott fuggvenyek implementaciojat (__mulsf3, __addsf3) es azok se
hasznalnak emulaciot.

(arm-elf-gcc test.c -o test.elf& arm-elf-objdump -d test.elf > test.dmp)

A problema amugy a PE, vagy COFF formatummal az, hogy nem tud a fordito 
minden
fuggvenyt (es valtozot) kulon szekcioba rakni, igy a linker nem tudja
kiszedni a nem hivatkozott fuggvenyeket -> foloslegesen nagy lesz a kod.
ELF-ben ez megoldhato (-ffunction-sections, -fdata-sections a
forditonak, -gc-sections a linkernek). Osszefoglalva, ha a kodmeret szamit,
hasznalj ELF-es GCC-t.

>> Amugy (ugyan nem lehetetlen) de en meg egyszer megneznem, hogy tenyleg
>> nem
>> lehet-e a ti verziotokat rabeszelni az FP emulaciora: nagyon keves ARM
>> prociban van FP, nem ertem, miert ertelme lenne kihagyni az emulaciot...
>
> Az a baj, hogy az FPU emulacio mexakitasokat hasznal, a mi hardverunkon
> (meg) egyaltalan nem mukodik, valamint allitolag 3x..4x lassabb.
> Ezert most az a koncepcio, hogy FPU-t nem hasznalo gcc-vel fogjuk
> forditani. Ez, mivel nem kell mexakitani, gyorsabb lesz.

Erdekes egy darab ez a GCC, amit hasznaltok. Honnan szedtetek?

> De valamiert most kell egy PC-s gcc, es ujra kell forditani az ARM gcc-t.
> Ezzel kuzd jelenleg a kollegam.
> Mi errol a velemenyed, van valami otleted?

Hat, nem trivialis. Persze, ha csak a C fordito kell, akkor nem olyan
bonyolult. Win ala ket GCC port van, a CygWin fele es a MinGW. En a MinGW-t
szeretem, mert nem kell neki mindenfele support-DLL, es gyorsabb is, de
sokkal kevesbe UNIX-szeru, mint a CygWin. Igy aztan egy GCC cross-compiler
forditasa MinGW alatt eleg nagy kaland. En megcsinaltam, de sok szivas.
Mindenkeppen erdemes a CygWin-nel probalkozni eloszor, es ha az mar megy,
akkor atterni MinGW-re, ha egyaltalan.

CygWin alatt olyan nagyon sok gond nincs, *gondosan* el kell olvasni a
corss-compiler keszites utasitasait, es betartani.

Szinten fontos, hogy legyen a GCC mellett egy Binutils csomagotok is, azzal
kell kezdeni a forditast (as, ld, ilyenek vannak benne).

Szerezzetek egy C runtime lib-et is (en a Newlib-et hasznalom), megkonnyiti
a fordito generalast meg akkor is, ha nem akarjatok a vegen hasznalni.

Osszessegeben az a velemenyem, hogy kar ezzel szivni. Tobb napos kaland, es
ha onmagaban a tema nem erdekel, vagy nincsenek specialis igenyeitek, akkor
a sajat fordito haszna elenyeszo. En ket dolog miatt vagtam bele:
- Akartam egy MinGW-s forditot magamnak
- Minden GCC altal tamogatot nyelvet meg akartam csinalni (Fortan, ObjC,
Java, Pascal, ADA, C, C++). Ilyet nem lattam sehol.

Udv,
Tantos Andras




More information about the Elektro mailing list