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