amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > x86 native Amiga Shared Libraries unter Amithlon [ - Suche - Neue Beiträge - Registrieren - Login - ]

1 -2- [ - Beitrag schreiben - ]

26.04.2006, 11:15 Uhr

bubblebobble
Posts: 707
Nutzer
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


[ - Antworten - Zitieren - Direktlink - ]

26.04.2006, 13:22 Uhr

gni
Posts: 1106
Nutzer
Zitat:
bubblebobble:
run_elf beschwert sich über alle Funktionen, die dazu gelinkt wurden,
wie pow() sin() etc.

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.

[ - Antworten - Zitieren - Direktlink - ]

26.04.2006, 14:49 Uhr

bubblebobble
Posts: 707
Nutzer
@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


[ - Antworten - Zitieren - Direktlink - ]

26.04.2006, 15:09 Uhr

gni
Posts: 1106
Nutzer
Zitat:
bubblebobble:
Gemäß der Readme muss man die Amithlon Binaries mit "-r" linken, steht sogar dabei "... like in the good old powerup days." oder so ähnlich.

Das klang nach Deiner Beschreibung auch ganz nach -r.
Zitat:
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 ?
Wenn Du mit -lm linkst müßte es eigentlich funktionieren...
Zitat:
Was ist z.B. wenn ich OS Libraries benutze (z.B. graphics.library), wo ich per OpenLibrary() rankomme, das betrifft es aber nicht, oder ?
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. ]

[ - Antworten - Zitieren - Direktlink - ]

26.04.2006, 16:54 Uhr

Holger
Posts: 8116
Nutzer
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.

[ - Antworten - Zitieren - Direktlink - ]

26.04.2006, 21:12 Uhr

bubblebobble
Posts: 707
Nutzer
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


[ - Antworten - Zitieren - Direktlink - ]

27.04.2006, 09:06 Uhr

gni
Posts: 1106
Nutzer
Zitat:
bubblebobble:
Vorweg: Vergiss alle -O<x> mit x > 2.
Zitat:
i686be-amithlon-gcc -noixemul -c -o fxlib_init.o fxlib_init.c
Wenn das Objekt nur .o bekommt brauchst Du -o nicht.
Zitat:
i686be-amithlon-gcc -noixemul -nostartfiles -r -o mylib.library fxlib_init.o mylib.o -lm utils_debug.o utils_string.o
Bibliotheken kommen immer *nach* allen Objekten. Sollte aber zumindest hier keine Rolle spielen, wenn mylib.o die Mathefunktionen benutzt.
Zitat:
i686be-amithlon-gcc
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?

[ - Antworten - Zitieren - Direktlink - ]

27.04.2006, 19:56 Uhr

bubblebobble
Posts: 707
Nutzer
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


[ - Antworten - Zitieren - Direktlink - ]

04.05.2006, 15:48 Uhr

bubblebobble
Posts: 707
Nutzer
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


[ - Antworten - Zitieren - Direktlink - ]


1 -2- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > x86 native Amiga Shared Libraries unter Amithlon [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.