ENGLISH VERSION |
|
Links | | | Forum | | | Kommentare | | | News melden |
Chat | | | Umfragen | | | Newsticker | | | Archiv |
amiga-news.de Forum > Programmierung > ObtainSocket crasht - Wie GR-Infos nutzen? | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
-1- | [ - Beitrag schreiben - ] |
24.04.2013, 23:15 Uhr Reth Posts: 1858 Nutzer |
Hallo allerseits, ich versuche gerade eine ältere Version der AMarquee-Library für AOS4 zu compilieren. Mit der Serverkomponente komme ich damit auch schon durch (wobei der Linker nur mit -r zum Fertigstellen zu bewegen ist, über diese Option konnte ich aber noch nix Aufschlußreiches finden). Leider crahst die Serverkomponente, sobald ObtainSocket gerufen wird. Die Stelle im Source ist mir bekannt (durch GR und Compilat mit Debugginginfos). Allerdings weiss ich nicht, wieso es crahst! Kann auch mit den Infos des GrimReapers leider nix anfangen (wie kann man die denn für die Fehlersuche/-analyse nutzen, abgesehen vom Auffinden der entsprechenden Stelle im Source?). Die Infos für ObtainSocket werden aus der DaemonMessage gewonnen, die mittels FindTask() und ExitData() beschafft wird. Die ID für den Socket ist dabei immer deutlich über 65535. Family ist AF_INET und Type ist STREAM. Leider crahst das Ganze mit nem DSI. Keine Ahnung, was da schief läuft. Könnt ihr mir da ein paar Tips geben, wie ich dem Ganzen auf die Schliche komme? Dank euch schon mal! Ciao [ - Antworten - Zitieren - Direktlink - ] |
25.04.2013, 08:06 Uhr thomas Posts: 7718 Nutzer |
Ist ISocket korrekt initialisiert? Wenn du mit mehreren Tasks arbeitest, muss jede Task die bsdsocket.library für sich öffnen und dann mit ihrer lokalen Kopie von SocketBase und ISocket arbeiten. Globale Variablen für SocketBase und ISocket solltest du deaktivieren mit #define __NOLIBBASE__ #define __NOGLOBALIFACE__ vor dem #include <proto/socket.h> -- Email: thomas-rapp@web.de Home: thomas-rapp.homepage.t-online.de/ [ - Antworten - Zitieren - Direktlink - ] |
25.04.2013, 20:10 Uhr Reth Posts: 1858 Nutzer |
Zitat:Das wird nicht verwendet. Ist ein 68k-Source, den ich einfach durch den Compiler jage (vorher so lange angepasst, bis gcc und ld durchlaufen, wobei der ld ohne -r Fehler wirft, die er sonst nur als Warnungen ausgibt!). Zitat:Wie gesagt, ISocket wird nicht verwendet und die Lib wird in der Main-Funktione des Servermoduls geöffnet und dort einer Zeigervariablen zugewiesen, die innerhalb der main-Funktion deklariert ist. Diese wird überall durchgereicht. Die Werte aus DaemonMessage stimmen ja auch (wobei die ID-Nummern schon immer extrem große Zahlen sind). Dennoch crahst der Obtain-Socket-Aufruf, z.B. wie folgt (keine Ahnung, wie ich diese Infos nutzbringend verwenden kann, bis auf die Angaben für den Source): Crash log for task "ANWAOS4:Prog/Source/AMarquee_AOS4/AMarqueed" Generated by GrimReaper 53.15 Crash occured in module AMarqueed at address 0x7F202500 Type of crash: DSI (Data Storage Interrupt) exception Register dump: GPR (General Purpose Registers): 0: 7F2024F4 55276A00 00000000 00000000 62003AEA 020A2BEC 00000001 00000000 8: 5B367708 00000000 01A79198 021B69A6 48842022 00000000 00000000 62003340 16: 7F1FFD98 00000000 566AE760 5B367490 02270000 02270000 00000000 00000001 24: 6FF96000 00000001 00000001 566C0000 5F8158F0 5CD92054 55276B18 5B367490 FPR (Floating Point Registers, NaN = Not a Number): 0: nan 4 878 4 4: 847 312.8 966.8 4 8: 847 11 312.8 255 12: nan 65536 0 0 16: 0 0 0 0 20: 0 0 0 0 24: 0 0 0 0 28: 0 0 0 0 FPSCR (Floating Point Status and Control Register): 0x82004000 SPRs (Special Purpose Registers): Machine State (msr) : 0x0000F030 Condition (cr) : 0x28842028 Instruction Pointer (ip) : 0x7F202500 Xtended Exception (xer) : 0x20000000 Count (ctr) : 0x0181EBD0 Link (lr) : 0x7F2024F4 DSI Status (dsisr) : 0x40000000 Data Address (dar) : 0x00000000 680x0 emulated registers: DATA: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 ADDR: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 FPU0: 0 0 0 0 FPU4: 0 0 0 0 Symbol info: Instruction pointer 0x7F202500 belongs to module "AMarqueed" (PowerPC) Symbol: ObtainInetdSocket + 0x68 in section 1 offset 0x000074DC Stack trace: [source/qcommon.c:104] ObtainInetdSocket()+0x68 (section 1 @ 0x74DC) [source/qcommon.c:102] ObtainInetdSocket()+0x5c (section 1 @ 0x74D0) native kernel module newlib.library.kmod+0x000020a4 native kernel module newlib.library.kmod+0x00002d0c native kernel module newlib.library.kmod+0x00002ee8 _start()+0x170 (section 1 @ 0x16C) native kernel module dos.library.kmod+0x00023098 native kernel module kernel+0x00043330 native kernel module kernel+0x000433b0 PPC disassembly: 7f2024f8: 88dd0025 lbz r6,37(r29) 7f2024fc: 38e00000 li r7,0 *7f202500: 81690000 lwz r11,0(r9) 7f202504: 809d001c lwz r4,28(r29) 7f202508: 7d635b78 mr r3,r11 Für weitere Ideen und Vorschläge bin ich sehr dankbar! Ciao [ - Antworten - Zitieren - Direktlink - ] |
25.04.2013, 23:31 Uhr thomas Posts: 7718 Nutzer |
... denn sie wissen nicht, was sie tun. Lass bitte -D__USE_INLINES__ weg und schreib den Source-Code so um, dass er für OS4 passt. Dann merkst du sehr schnell, wo du ISocket benutzt. Jedes OpenLibrary in einem 68k-Source muss für OS4 mit einem GetInterface ergänzt werden und jedes CloseLibrary mit einem DropInterface. -- Email: thomas-rapp@web.de Home: thomas-rapp.homepage.t-online.de/ [ - Antworten - Zitieren - Direktlink - ] |
26.04.2013, 16:32 Uhr Reth Posts: 1858 Nutzer |
@thomas: Kann ich probieren. Zumindest weiss ich soviel, dass -D__USE_INLINES__ dafür sorgen sollte, dass ich 68k-Source ohne zusätzliches Interface-Handling usw. verwenden kann! Wenn das bei bsdsocket.libaray nicht funktionieren sollte, dann ist das natürlich schlecht! Mir ist schon klar, dass ich mit -D__USE_INLINES__ implizit die Interfaces nutze, überall dort, wo im 68k-Source Libraryaufrufe erfolgen (im konkreten Fall über die geöffnete bsdsocket.library)! Oder hast Du hier an etwas anderes gedacht, worauf sich Dein Vorschlag des Weglassens bezieht? Sprich konkreter: Wo genau versprichst Du Dir Hilfe beim aktuellen Problem, wenn ich den Source von 68k auf AOS4-only umstelle? Erwartest Du ein anderes Verhalten? [ Dieser Beitrag wurde von Reth am 26.04.2013 um 19:25 Uhr geändert. ] [ - Antworten - Zitieren - Direktlink - ] |
26.04.2013, 20:28 Uhr thomas Posts: 7718 Nutzer |
Zitat: Das stimmt nicht. Das einzige, das __USE_INLINES__ macht, ist diese unsäglichen IDOS->, IExec->, IGraphics->, ISocket-> usw. automatisch einzufügen. Zitat: Natürlich funktioniert das bei bsdsocket genauso wie bei allen anderen Libraries. Zitat: Ganz genau. Library-Aufrufe. Interfaces werden implizit benutzt aber nicht initialisiert. Durch die auto.lib (bzw. libauto.a) werden die meisten System-Libraries implizit automatisch geöffnet und das dazugehörige Interface initialisiert. Wenn du eine Library aber explizit öffnest, dann musst du auch das dazugehörige Interface explizit initialisieren. Zitat: Dadurch, dass du überall ISocket-> einfügen musst, wo es benötigt wird, erkennst du, wo es benutzt wird. Und dass es benutzt wird. Und wie schon gesagt, wenn du die bsdsocket.library in mehreren Prozessen benutzt, dann muss jeder Prozess die Library für sich öffnen und das Interface initialisieren und dann nur noch mit seiner Version der Library-Base und des Interface-Pointers arbeiten. Das ist eine Besonderheit der bsdsocket.library, die man einhalten muss. -- Email: thomas-rapp@web.de Home: thomas-rapp.homepage.t-online.de/ [ - Antworten - Zitieren - Direktlink - ] |
28.04.2013, 21:07 Uhr Reth Posts: 1858 Nutzer |
@thomas: Ok, verstanden. Aber durch Nutzung von #define __NOLIBBASE__ #define __NOGLOBALIFACE__ muss ich natürlich auch alle anderen verwendeten Libs selbst öffnen, und deren Interfaces gleich mit (natürlich auch schließen) - bis auf DOS und Exec. Dabei noch eine Frage: Wie bestimmt man denn eine Libraryversion unter AOS4? [ - Antworten - Zitieren - Direktlink - ] |
28.04.2013, 21:44 Uhr ZeroG Posts: 1487 Nutzer |
Zitat: Wenn einem die Versionsangabe die man bei OpenLibrary() macht nicht reicht, funktioniert das genau wie unter OS3 mit den lib_Version und lib_Revision UWORDs aus struct Library. [ - Antworten - Zitieren - Direktlink - ] |
28.04.2013, 22:18 Uhr Reth Posts: 1858 Nutzer |
@ZeroG: Ah, sorry. Hast recht! Hatte ganz vergessen, dass die LibBase ja auch im Interface verzeigert ist! Danke - auch an Thomas für seine Tips! [ - Antworten - Zitieren - Direktlink - ] |
29.04.2013, 08:46 Uhr thomas Posts: 7718 Nutzer |
Zitat: Wie wär's damit: code:/* auto-open libs */ #include <proto/exec.h> #include <proto/dos.h> #include <proto/graphics.h> #include <proto/intuition.h> #include <proto/utility.h> /* manually opened libs */ #define __NOLIBBASE__ #define __NOGLOBALIFACE__ #include <proto/socket.h> #include <proto/cybergraphics.h> #include <proto/mpega.h> -- Email: thomas-rapp@web.de Home: thomas-rapp.homepage.t-online.de/ [ - Antworten - Zitieren - Direktlink - ] |
-1- | [ - Beitrag schreiben - ] |
amiga-news.de Forum > Programmierung > ObtainSocket crasht - Wie GR-Infos nutzen? | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
Impressum |
Datenschutzerklärung |
Netiquette |
Werbung |
Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten. |