DEUTSCHE VERSION |
|
Links | | | Forums | | | Comments | | | Report news |
Chat | | | Polls | | | Newsticker | | | Archive |
amiga-news.de Forum > Programmierung > x86 native Amiga Shared Libraries unter Amithlon | [ - Search - New posts - Register - Login - ] |
1 -2- | [ - Post reply - ] |
2006-04-26, 11:15 h bubblebobble Posts: 707 User |
Ich habe jetzt mal eintwas nachgeforscht. Es treten zwei Dinge auf: run_elf beschwert sich über alle Funktionen, die dazu gelinkt wurden, wie pow() sin() etc. Bei Libraries, die keine externen Funktionen benutzen, läuft die ramlib sofort bei OpenLibrary() Amok, der Stack läuft völlig über. Sieht also so aus, als ob noch zwei Probleme bestehen: 1. Die dazugelinkten Symbole laufen nicht 2. Vermutlich beim übergeben der Parameter an die einzelnen Funtions stimmt was noch nicht, insbes. LibInit(). Ich befürchte, dass hier noch niemand x86 native was gemacht hat. Werde wohl nochmal Martin Blom fragen müssen... -- Thilo Köhler, Author von: HD-Rec, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, TKUnpacker Homepage: http://www.hd-rec.de [ - Answer - Quote - Direct link - ] |
2006-04-26, 13:22 h gni Posts: 1106 User |
Zitat:Dann sind sie definitiv _nicht_ dazugelinkt. Dieses Problem gab es bei PowerUp ebenfalls, da dessen Programme (zwangsweise) Referenzen auf PowerUp-Kernelsymbole enthielt und diese Referenzen erst zu Laufzeit aufgelöst wurden. In Ermangelung einer besseren Alternative wurde mit -r gelinkt. Das hat aber den unangehmenen Nebeneffekt, das der Linker sich nicht mehr über nicht-auflösbare Referenzen beschwert. So hat man meist erst zur Laufzeit festgestellt, das was fehlt. Am besten Du analysierst Deine Libraries mit objdump oder nm. [ - Answer - Quote - Direct link - ] |
2006-04-26, 14:49 h bubblebobble Posts: 707 User |
@gni Aha, da kommen wir der Sache ja schon näher. Gemäß der Readme muss man die Amithlon Binaries mit "-r" linken, steht sogar dabei "... like in the good old powerup days." oder so ähnlich. Und was heisst das jetzt für mich ? Wie bekomme ich dann die mathematischen Funktionen zum laufen, oder evtl. noch andere Dinge die ich benutze ? Was ist z.B. wenn ich OS Libraries benutze (z.B. graphics.library), wo ich per OpenLibrary() rankomme, das betrifft es aber nicht, oder ? Das betrifft nur Dinge, die scheinbar C code sind, aber dann doch noch irgendwas anderes brauchen ? (sorry für diese dämlichen Fragen, ich weiss nicht was wie C intern Arbeitet) Mit Amiblitz ist das alles irgendwie einfacher, selbst nativen Code einbinden. -- Thilo Köhler, Author von: HD-Rec, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, TKUnpacker Homepage: http://www.hd-rec.de [ - Answer - Quote - Direct link - ] |
2006-04-26, 15:09 h gni Posts: 1106 User |
Zitat:Das klang nach Deiner Beschreibung auch ganz nach -r. Zitat:Wenn Du mit -lm linkst müßte es eigentlich funktionieren... Zitat:Wenn Amithlon so ähnlich arbeitet wie PowerUp, dann betrifft es Code, der dessen Interface benutzt, dh. "native" Code. Das eigentliche Problem ist dabei, das die Programme "Objektfiles" sind und sowas kann der GNU-Linker nur mit -r erzeugen. Dann bekommt man aber keine Warnungen, weil das eigentliche Linken aus Sicht des Linkers noch kommt. Am besten Du linkst mal mit -v und -Wl,-t. Dann sollte der Linker dir sagen was er so macht. Danach kannst Du das Programm mit nm/objdump (den Amithlonversionen) untersuchen. Wenn es da Symbole gibt die, als *UND* gekennzeichnet sind, dann fehlt was. Achja, am besten erstmal ohne "-s" linken und auch nicht strip benutzen. [ Dieser Beitrag wurde von gni am 26.04.2006 um 17:23 Uhr geändert. ] [ - Answer - Quote - Direct link - ] |
2006-04-26, 16:54 h Holger Posts: 8116 User |
Am besten einfach mal die komplette Befehlszeile, wie sie momentan zur Anwendung kommt, hier posten... mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Answer - Quote - Direct link - ] |
2006-04-26, 21:12 h bubblebobble Posts: 707 User |
Das Makefile bastelt folgendes zusammen: i686be-amithlon-gcc -noixemul -c -o fxlib_init.o fxlib_init.c i686be-amithlon-gcc -noixemul -c -o mylib.o -O4 mylib.c i686be-amithlon-gcc -noixemul -nostartfiles -r -o mylib.library fxlib_init.o mylib.o -lm utils_debug.o utils_string.o wobei mylib.c den Sourcecode der eigentlichen Library Funktionen enthält, und fxlib_init diveres Zeugs was bei allen meinen Libs gleich ist, wie z.B. LibInit, LibExpunge etc. utils_debug und utils_string enthalten einige kleine nützliche Funktionen. Die werden so gebaut: i686be-amithlon-gcc -noixemul -c -o utils_debug.o -O3 utils_debug.c i686be-amithlon-gcc -noixemul -c -o utils_string.o -O3 utils_string.c Ist da ein gravierender Bug drin ? -- Thilo Köhler, Author von: HD-Rec, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, TKUnpacker Homepage: http://www.hd-rec.de [ - Answer - Quote - Direct link - ] |
2006-04-27, 09:06 h gni Posts: 1106 User |
Zitat:Vorweg: Vergiss alle -O<x> mit x > 2. Zitat:Wenn das Objekt nur .o bekommt brauchst Du -o nicht. Zitat:Bibliotheken kommen immer *nach* allen Objekten. Sollte aber zumindest hier keine Rolle spielen, wenn mylib.o die Mathefunktionen benutzt. Zitat:Gibt es sowas wie i686be-amithlon-nm und i686be-amithlon-objdump? Wie ist die Ausgabe von i686be-amithlon-nm bzw. von i686be-amithlon-objdump --syms? Gibt es da *UND* Symbole? [ - Answer - Quote - Direct link - ] |
2006-04-27, 19:56 h bubblebobble Posts: 707 User |
Ja, die Befehle gibt es. Mit i686be-amithlon-objdump bekomme ich folgenden Text: code:Libs_x86/fx_eq_3band_x86.library: file format elf32-i386be SYMBOL TABLE: 00000000 l d .text 00000000 00000000 l d *ABS* 00000000 00000000 l d .rodata 00000000 00000000 l d *ABS* 00000000 00000000 l d .data 00000000 00000000 l d *ABS* 00000000 00000000 l d .bss 00000000 00000000 l d .comment 00000000 000002b1 l d .note 00000000 00000000 l d *ABS* 00000000 00000000 l d *ABS* 00000000 00000000 l d *ABS* 00000000 00000000 l df *ABS* 00000000 fxlib_init.c 00000000 l .text 00000000 gcc2_compiled. 00000000 l O .rodata 00000018 FxLibName 00000020 l O .rodata 00000029 FxLibIdStr 0000004c l O .rodata 0000001c ROMTag 000000c4 l O .rodata 00000010 FxLib_InitTable 00000000 l F .text 0000010e FxLib_Init 00000110 l F .text 0000016a FxLib_Open 0000027c l F .text 000001c6 FxLib_Remove 00000444 l F .text 0000007a FxLib_Close 000004c0 l F .text 00000062 FxLib_Expunge 00000524 l F .text 00000012 FxLib_Reserved 000000a0 l O .rodata 00000024 FxLib_InitBase 00000010 l O .data 0000003c FxLib_FncTable 00000000 l df *ABS* 00000000 fx_eq_3band.c 00000550 l .text 00000000 gcc2_compiled. 00002274 l F .text 000001a1 freq2str 00000000 l df *ABS* 00000000 cos.c 000047d4 l .text 00000000 gcc2_compiled. 00000000 l df *ABS* 00000000 exp.c 000047fc l .text 00000000 gcc2_compiled. 00000000 l df *ABS* 00000000 log.c 00004834 l .text 00000000 gcc2_compiled. 00000000 l df *ABS* 00000000 pow.c 00004840 l .text 00000000 gcc2_compiled. 000001d8 l O .rodata 00000010 bp 000001e8 l O .rodata 00000010 dp_h 000001f8 l O .rodata 00000010 dp_l 00000208 l O .rodata 00000008 zero 00000210 l O .rodata 00000008 one 00000218 l O .rodata 00000008 two 00000220 l O .rodata 00000008 two53 00000228 l O .rodata 00000008 huge 00000230 l O .rodata 00000008 tiny 00000238 l O .rodata 00000008 L1 00000240 l O .rodata 00000008 L2 00000248 l O .rodata 00000008 L3 00000250 l O .rodata 00000008 L4 00000258 l O .rodata 00000008 L5 00000260 l O .rodata 00000008 L6 00000268 l O .rodata 00000008 P1 00000270 l O .rodata 00000008 P2 00000278 l O .rodata 00000008 P3 00000280 l O .rodata 00000008 P4 00000288 l O .rodata 00000008 P5 00000290 l O .rodata 00000008 lg2 00000298 l O .rodata 00000008 lg2_h 000002a0 l O .rodata 00000008 lg2_l 000002a8 l O .rodata 00000008 ovt 000002b0 l O .rodata 00000008 cp 000002b8 l O .rodata 00000008 cp_h 000002c0 l O .rodata 00000008 cp_l 000002c8 l O .rodata 00000008 ivln2 000002d0 l O .rodata 00000008 ivln2_h 000002d8 l O .rodata 00000008 ivln2_l 00000000 l df *ABS* 00000000 sin.c 000051bc l .text 00000000 gcc2_compiled. 00000000 l df *ABS* 00000000 sinh.c 000051e4 l .text 00000000 gcc2_compiled. 000003d8 l O .rodata 00000008 one 000003e0 l O .rodata 00000008 shuge 00000000 l df *ABS* 00000000 sqrt.c 00005334 l .text 00000000 gcc2_compiled. 00000000 l df *ABS* 00000000 expm1.c 0000533c l .text 00000000 gcc2_compiled. 00000400 l O .rodata 00000008 one 00000408 l O .rodata 00000008 huge 00000410 l O .rodata 00000008 tiny 00000418 l O .rodata 00000008 o_threshold 00000420 l O .rodata 00000008 ln2_hi 00000428 l O .rodata 00000008 ln2_lo 00000430 l O .rodata 00000008 invln2 00000438 l O .rodata 00000008 Q1 00000440 l O .rodata 00000008 Q2 00000448 l O .rodata 00000008 Q3 00000450 l O .rodata 00000008 Q4 00000458 l O .rodata 00000008 Q5 00000000 l df *ABS* 00000000 scalbn.c 000056a4 l .text 00000000 gcc2_compiled. 00000000 l df *ABS* 00000000 utils_debug.c 000056bc l .text 00000000 gcc2_compiled. 00000050 l O .data 00000004 DebugFile 000057f4 l F .text 00000105 debug_TimeStamp 00000000 l df *ABS* 00000000 utils_string.c 00005c98 l .text 00000000 gcc2_compiled. 0000533c g F .text 00000367 expm1 00000004 O *COM* 00000004 idel_mask 00004834 w F .text 00000000 log 00005334 w F .text 00000000 sqrt 00000004 O *COM* 00000004 ydel_size 000051e4 g F .text 00000150 __ieee754_sinh 000044b4 g F .text 000000a4 fx_process_send 00006158 g F .text 00000028 Remove 00000004 O *COM* 00000004 idel_buf 00000004 O *COM* 00000004 ydel_buf 00000004 O *COM* 00000004 fx_gui_sema 00005aa8 g F .text 00000126 debug_WriteDec32 0000624c g F .text 0000003c Write 00000004 O *COM* 00000004 errno 00000004 O *COM* 00000004 gy_l 00006080 g F .text 00000032 Open 00005fd4 g F .text 0000004e Move 00005ed8 g F .text 00000028 DateStamp 00000004 O *COM* 00000004 zdel_writeoffset 00005f28 g F .text 0000004e Draw 000033f4 g F .text 000003e5 fx_visual 00005c98 g F .text 0000007b string_Hex2UInt32 00000008 g O .data 00000004 MathIeeeDoubTransBase 000043a8 g F .text 00000073 fx_update 000061b4 g F .text 0000004b TextLength 000058fc g F .text 00000084 debug_CloseFile 00005d68 g F .text 00000072 string_UInt2hex32 000047fc g F .text 00000000 __ieee754_exp 00000004 O *COM* 00000004 gy_h 00000004 O *COM* 00000004 idel_writeoffset 000042a8 g F .text 00000085 fxlib_init 00000004 O *COM* 00000004 ydel_count 00004558 g F .text 000000a4 fx_process_insert 00005e54 g F .text 00000031 AllocMem 00000004 O *COM* 00000004 zdel_count 00004238 g F .text 0000006d fxlib_free 00000004 g O .data 00000004 DOSBase 00005eb0 g F .text 00000028 Close 000047d4 g F .text 00000000 cos 00000004 O *COM* 00000004 idel_count 00000004 O *COM* 00000004 ydel_mask 00000000 *UND* 00000000 _start 000051bc g F .text 00000000 sin 00000550 g F .text 000008b0 fx_eq_updatecoeffs 00000004 O *COM* 00000004 gy_m 00004840 g F .text 00000979 __ieee754_pow 00004840 w F .text 00000979 pow 000060b4 g F .text 0000007c RectFill 000051e4 w F .text 00000150 sinh 00001cc4 g F .text 00000197 fx_reset 000059b4 g F .text 000000f1 debug_WriteHex32 00005ddc g F .text 00000078 string_UInt2dec32 00000004 O *COM* 00000004 grab_x 00005bd0 g F .text 000000c5 debug_WriteStr 00000004 O *COM* 00000004 xdel_writeoffset 00000004 O *COM* 00000004 gx_m 00000004 O *COM* 00000004 zdel_size 00006024 g F .text 00000028 ObtainSemaphore 00002800 g F .text 00000bf1 eqdraw 0000004c g O .data 00000004 GfxBase 00000004 O *COM* 00000004 zdel_buf 000047fc w F .text 00000000 exp 00005fac g F .text 00000028 InitSemaphore 00000004 O *COM* 00000004 idel_size 00000004 O *COM* 00000004 gx_h 00000004 O *COM* 00000004 ydel_writeoffset 00000004 O *COM* 00000004 zdel_mask 000037dc g F .text 00000a59 fx_notify 00000004 O *COM* 00000004 fx_sema 00005d48 g F .text 00000020 string_Length 0000604c g F .text 00000031 OpenLibrary 00000004 O *COM* 00000004 xdel_mask 00005f00 g F .text 00000028 DateToStr 00005980 g F .text 00000034 getFilePointer 000056a4 g F .text 00000000 scalbn 00004834 g F .text 00000000 __ieee754_log 000045fc g F .text 000001d7 drawhandle 00006130 g F .text 00000028 ReleaseSemaphore 0000000c g O .data 00000004 __MathIeeeDoubTransBase 00001e5c g F .text 00000418 eqgetgain 00005334 g F .text 00000000 __ieee754_sqrt 00000004 O *COM* 00000004 grab_y 00000004 O *COM* 00000004 grab 0000441c g F .text 00000097 fx_create 00006180 g F .text 00000032 SetAPen 00002418 g F .text 000003e7 drawFreqGain 00000538 g F .text 00000016 FxLib_Dummy 00000000 *UND* 00000000 _CallLib68k 00005f78 g F .text 00000031 FreeMem 00005d14 g F .text 00000032 string_Copy 00000000 g O .data 00000004 SysBase 00000004 O *COM* 00000004 xdel_buf 00000004 O *COM* 00000004 gx_l 000056bc g F .text 00000138 debug_OpenFile 00000004 O *COM* 00000004 idel_buf_f 00000e00 g F .text 00000ec2 fx_eq 00000004 O *COM* 00000004 xdel_size 00004330 g F .text 00000078 fx_remove 00006200 g F .text 0000004a Text 00005e88 g F .text 00000028 CloseLibrary 00000004 O *COM* 00000004 xdel_count Ich habe hier zwei *UND* Symbole, einmal bei _CallLib68k und bei _start (fett markiert). Ich weiss zwar nicht was das heisst (ausser das UND vermutlich undefined bedeutet), aber ich hasse es wenn das passiert... Sorry, für das lange Posting. Evtl. finden die C Experten ja noch weitere Problemzonen. Die Library oben bentutzt mathematische Funktionen und die graphics.library. -- Thilo Köhler, Author von: HD-Rec, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, TKUnpacker Homepage: http://www.hd-rec.de [ - Answer - Quote - Direct link - ] |
2006-05-04, 15:48 h bubblebobble Posts: 707 User |
Nun, hat jemand eine Idee dazu ? -- Thilo Köhler, Author von: HD-Rec, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, TKUnpacker Homepage: http://www.hd-rec.de [ - Answer - Quote - Direct link - ] |
1 -2- | [ - Post reply - ] |
amiga-news.de Forum > Programmierung > x86 native Amiga Shared Libraries unter Amithlon | [ - Search - New posts - Register - Login - ] |
Masthead |
Privacy policy |
Netiquette |
Advertising |
Contact
Copyright © 1998-2024 by amiga-news.de - all rights reserved. |