ENGLISH VERSION |
|
Links | | | Forum | | | Kommentare | | | News melden |
Chat | | | Umfragen | | | Newsticker | | | Archiv |
amiga-news.de Forum > Suche | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
|
||||||
gni
Nutzer
05.05.2004, 15:18 Uhr [ - Direktlink - ] |
Thema: GCC 3.3
Brett: Programmierung Zitat:Macht GCC3 ja auch. Das funktioniert aber nur wenn putchar auch als Linker-Funktion existiert. Da die Man-Page es aber als Makro definiert, muss es nicht als "echte" Funktion existieren. Entweder GCC hat ungültige Annahmen oder Funktions-Makros müssen auch als echte Funktionen da sein. Zitat:Ja, da hatte ich mich vertan. |
|||||
gni
Nutzer
05.05.2004, 14:22 Uhr [ - Direktlink - ] |
Thema: GCC 3.3
Brett: Programmierung Zitat:Solar, Du hast bei Deinem Zitat etwas unterschlagen... putchar() ist genau wie putc() ein _Makro_! Das bedeutet doch wohl, das sowohl putchar() als auch putc() (und getc()) nicht als Funktion in einer Linker-Library sein müssen. |
|||||
gni
Nutzer
30.04.2004, 12:54 Uhr [ - Direktlink - ] |
Thema: Library erzeugen
Brett: Programmierung Zitat:Das ReAction-Define hat wohl nichts mit der GCC3+LP Makro Problematik zu tun. Zitat:Ja. Manchmal ist es natürlich von Vorteil, wenn man Zeiger in Adressregistern übergibt. Da spart man sich u.U. ein "move". BTW, Ergebnisse werden unter AmigaOS/68k immer über _D0_ geliefert. Auch Zeiger ;-) Zitat:Ich weiss nicht wie Du es gemacht hast, aber ich würde wohl Wrapper für die Original-Funktionen schreiben, da man dann die Originalquellen nicht ändern muß. Das macht die Bibliothek leider etwas langsamer, ist aber viel besser wartbar. |
|||||
gni
Nutzer
30.04.2004, 08:58 Uhr [ - Direktlink - ] |
Thema: NcodeR mit Cyberstorm PPC
Brett: Amiga, AmigaOS 4 Zitat:Dessen Schutz des AREXX-Skriptes? Manipulierte Exe die an AREXX rumpatcht um das Skript auszuführen. Wer so was mag, kann es ja benutzen ... |
|||||
gni
Nutzer
29.04.2004, 13:09 Uhr [ - Direktlink - ] |
Thema: Library erzeugen
Brett: Programmierung Zitat:Also C. In diesem Fall mußt Du Dir um Scratch-Register _keinen_ Kopf machen. Der Compiler kümmert sich um die Details. BTW, Du weisst, das GCC 3.3 unter Umständen bei Verwendung von LP-Inlines nicht-funktionierenden Code erzeugt? Das kann mit einem Update von inline/macros.h behoben werden, das aber noch nicht verfügbar ist :-( Zitat:Was ist für Dich eine Register-Variable? Eine lokale Variable mit "register" Zusatz? Oder redest Du von Parameterübergabe in Registern? Zitat:Alle Libraries müssen AmigaOS-ABI konform sein, soll heissen alle non-scratch Register _müssen_ nach dem Funktionsaufruf den selben Wert wie _vor_ dem Funktionsaufruf haben. Scratch-Register _können_andere Werte haben, aber sie _müssen_ nicht. Wenn eine Funktion vom allgemeinen Schema abweicht, ist das meist dokumentiert (zb. Forbid/Permit, etc.) aber das ist nur für Assembler wirklich interessant. Für den Compiler ist der OS-Funktionsaufruf wie jeder andere, dh. er erwartet das "Standardverhalten". Zitat:a4/a5[/a6/a7 ;-)] vermeiden. a4 und a5 werden vom Compiler verwendet. a0 und a1 sind vollkommen korrekt. Zitat:und das Maktro heisst LP3_A5_. A5 kann nicht ohne weiteres als Argumentregister verwendet werden. Deshalb wird das Argument erst nach d7 (hoffentlich ist das frei ;-) gepackt und danach nach A5. Das wird vom speziellen LP Makro erledigt. Zitat:inline/macros.h enthält nur die Makros., die von OS-Funktionen verwendet werden. Wenn eine 3rd-Party Library eine Kombination verwendet, die eine System-Libraries nicht hat, dann fehlt das Makro. Du solltest Dir für Deine Library ein Inline erzeugen, die die LP Makros "direkt" verwendet (ohne Einbindung von inlines/macros.h). Zitat:Die Frage verstehe ich nicht. [ Dieser Beitrag wurde von gni am 29.04.2004 editiert. ] |
|||||
gni
Nutzer
29.04.2004, 12:51 Uhr [ - Direktlink - ] |
Thema: BattClock
Brett: Programmierung Zitat:IMHO fehlen da 60min: 2922 is the number of days between 1.1.1970 and 1.1.1978 (2 leap years and 6 normal) |
|||||
gni
Nutzer
28.04.2004, 09:04 Uhr [ - Direktlink - ] |
Thema: Library erzeugen
Brett: Programmierung Zitat:Dennoch wird auch hier die Libraryfunktion relativ zur Basis aufgerufen und genau darauf kommt es an. Es ist völlig unerheblich, an welcher Stelle der relative Aufruf erfolgt. Hauptsache es wird so gemacht :-) |
|||||
gni
Nutzer
28.04.2004, 09:02 Uhr [ - Direktlink - ] |
Thema: Library erzeugen
Brett: Programmierung Zitat:Normalerweise über die SP-Einträge in der Task-Struktur bzw. Einträge in der Process-Struktur wenn das Programm aus der Shell gestartet wird. Wurde der Stack bereits ausgetauscht ohne StackSwap(), dann bekommet man ein "falsches" Ergebnis". Bei getauschtem Stack eines Shell-programms würde man auch "falsche" Werte bekommen egal wie der Stack getauscht wurde. Solange das Ergebnis lautet "zu klein" geht alles glatt ;-) War der Stack groß genug, wird ja wohl niemand auf die Idee gekommen sein ihn zu tauschen. Was man eigentlich wissen will ist, ob noch genügend Platz ist. Zitat:Ja.Zitat:Wenn ich also eine Funktion habe, die sich z.B. rekursiv durch einen Baum arbeitet, mache ich das am besten wie? so? Zitat:Ich bezog mich auf die öffentliche Funktion, die muß immer relativ zur Basis aufgerufen werden. Was dann weiter intern passiert, ist Sache der Bibliothek. |
|||||
gni
Nutzer
28.04.2004, 08:54 Uhr [ - Direktlink - ] |
Thema: Library erzeugen
Brett: Programmierung Zitat:Machst Du Assembler oder C? In C mußt Du Dich um so was nicht kümmern. Das erledigt der Compiler für Dich, weil er sich an ein ABI hält. Soll heißen, Parameter kannst Du in SCratch-registern übergeben, da der Compiler die Argumente bei Bedarf an einen "sicheren" Ort bringt. [ Dieser Beitrag wurde von gni am 29.04.2004 editiert. ] |
|||||
gni
Nutzer
28.04.2004, 08:49 Uhr [ - Direktlink - ] |
Thema: BattClock
Brett: Programmierung Zitat:Und das alles kann man sich schön im Quellcode von UnixClock anschauen ;-) Was auch immer es da nicht zu verstehen gibt. [ Dieser Beitrag wurde von gni am 28.04.2004 editiert. ] |
|||||
gni
Nutzer
27.04.2004, 13:40 Uhr [ - Direktlink - ] |
Thema: BattClock
Brett: Programmierung Zitat:Eventuell ist UnixClock (AMiNet) Dir eine Hilfe. Das ist der Quellcode dabei. Zitat:Du kannst nicht einfach OS-Funktionen mit Funktionen der C-Standardbiliothek mischen! Es gibt auch eine ReadBattClock Funktion. Zitat:Nur die Variable definieren reicht auch nicht. Schau Dir die Quelle von UnixClock an. Zitat:Ja. void main() ist falsch. [ Dieser Beitrag wurde von gni am 27.04.2004 editiert. ] |
|||||
gni
Nutzer
27.04.2004, 08:46 Uhr [ - Direktlink - ] |
Thema: Library erzeugen
Brett: Programmierung Zitat:Das habe ich auch so verstanden. Und genau das verursacht auch den Stackoverflow. Library-Funktionen laufen immer im Context des Programmes, das die Library benutzt. Wenn das Programm "wenig" Stack hat, Du aber viel benötigst, gibts einen Crash. Entweder Du verlangst genügend Stack oder Du wechselst den Stack, wenn zuwenig da ist. Zitat:Library-Funktionen werden _immer_ relativ zur Librarybasis aufgerufen. Direkte Aufrufe sind nicht möglich. Der Prototyp in clib/ ist nicht der Name der "echten" Funktion im Quell-code sondern der des Einsprungs relativ zur Basis.Zitat:Bei den eigenen Funktionen kenne ich den Prototyp. Aber in den Protos der Systemlibraries taucht doch der Basepointer gar nicht auf? |
|||||
gni
Nutzer
27.04.2004, 08:37 Uhr [ - Direktlink - ] |
Thema: Timer
Brett: Programmierung Zitat:Der Linker schaut nur auf die Namen. Zitat:Dann kann Dein Compiler den hier geposteten Code nicht akzeptiert haben. Ausserdem solltest Du auch casten. Z.B. der IO-Request des Timers hat die passende Struktur für die Exec-Funktionen (tr_node). |
|||||
gni
Nutzer
26.04.2004, 09:58 Uhr [ - Direktlink - ] |
Thema: Timer
Brett: Programmierung Zitat:Wenn Du mit DATA=FAR[ONLY] kompilierst, dann bewirkt __saveds nichts. Das es ohne __saveds geht, klingt supsekt. Warum Du im übrigen time.h einbindest, ist mit schleierhaft. Dafür lässt Du alle OS Includes weg. |
|||||
gni
Nutzer
23.04.2004, 16:41 Uhr [ - Direktlink - ] |
Thema: Library erzeugen
Brett: Programmierung Zitat:Das klingt nacht Stack-overflow. Zitat:Non-Scratch Register werden bei Funktionseintritt gesichert. Noch ein Hinweis: Library-funktionen (auch eigene!) sollten immer relativ zur Librarybasis aufgerufen werden. |
|||||
gni
Nutzer
19.04.2004, 16:54 Uhr [ - Direktlink - ] |
Thema: Alle Laufwerke finden...
Brett: Programmierung Zitat:So sahen GCC Proto/ Dateien ganz früher aus. Mittlerweile wird das inline immer eingebunden (hängt aber u.U. auch davon ab wer die protos Erzeugt) Zitat:Die Warnungen kommen nur wenn man die Inlines auch verwendest, was Du aber nicht getan hast... Dafür hättest Du optimieren müssen. Zitat:Das hat nix mit einer speziellen GCC Version zu tun, sondern ausschliesslich mit der Art des Inlinens von VARARGS Funktionen. |
|||||
gni
Nutzer
19.04.2004, 11:09 Uhr [ - Direktlink - ] |
Thema: Library erzeugen
Brett: Programmierung Zitat:Wenn Du die Funktionsadresse benutzt, dann verwendest Du den Stub aus libamiga.a. Alle dortigen Wrapper verwenden globale Librarybases (wie solls auch anders gehen?). Das Exec Symbol ist SysBase. |
|||||
gni
Nutzer
19.04.2004, 11:05 Uhr [ - Direktlink - ] |
Thema: Library erzeugen
Brett: Programmierung Zitat:Vieleicht als static. Der Linker kann aber kein globales SysBase finden. |
|||||
gni
Nutzer
16.04.2004, 17:33 Uhr [ - Direktlink - ] |
Thema: Alle Laufwerke finden...
Brett: Programmierung Zitat:Und welche Includes verwendet diese Installation? Die üblichen Inlines verwenden LP Makros und genau diese Includes sind dann auch die Ursache für die Warnungen der VARARGS Funktionen. Zitat:Wo wird NO_INLINE_LIBCALLS definiert? Zitat:Vermutlich weisst Du es nicht besser.Zitat:Aus Spaß an der Freud?Zitat:Wozu der Smiley? Zitat:Ich kenne auch __USE_INLINE__ nicht. Was soll das sein? [ Dieser Beitrag wurde von gni am 16.04.2004 editiert. ] |
|||||
gni
Nutzer
10.04.2004, 12:13 Uhr [ - Direktlink - ] |
Thema: Alle Laufwerke finden...
Brett: Programmierung Zitat:K.A. was ihr mit euren GCC Installationen veranstaltet. Wenn Ihr keine Hilfe benötigt, ist ja gut. Zitat:Nie gehört. Aber gut, ich kenne den GCC auch nicht so gut wie Du... Zitat:Wozu der Smiley? |
|||||
gni
Nutzer
07.04.2004, 17:04 Uhr [ - Direktlink - ] |
Thema: gcc und floating point funktionen
Brett: Programmierung Zitat:Dokumentation lesen soll helfen. Zitat:Erster Fehler: Laut Suffix ist es eine C++ Datei, laut Inhalt aber C. Das Frontend "gcc" wählt anhand des Suffixes den zu verwendenden Compiler. In dem Fall also the C++ Compiler. C Quellen verwenden ausschliesslich .c Zitat:Das C++ Frontend (g++/c++) linkt automatisch gegen -lm -stdc++ (kann man gut mit -v sehen). Zitat:Hier wird der C Compiler benutzt und nicht mehr automatisch mit -lm gelinkt. libnix hat Mathe-Sachen in dieser Bibliothek. (ohne -noixemul sollte es ohne -lm gehen, da ixemul alles in der "normalen" libc.a hat. [ Dieser Beitrag wurde von gni am 07.04.2004 editiert. ] |
|||||
gni
Nutzer
07.04.2004, 16:47 Uhr [ - Direktlink - ] |
Thema: gcc und floating point funktionen
Brett: Programmierung Zitat:Die Amiga-Spezifischen Optionen stehen da aber nicht. Die sind in gcc-amigaos.guide erklärt. |
|||||
gni
Nutzer
07.04.2004, 09:56 Uhr [ - Direktlink - ] |
Thema: gcc und floating point funktionen
Brett: Programmierung Zitat:Das Problem ist das Frontend. Zum Linken immer das C++ Frontend verwenden, entweder c++ oder g++. |
|||||
gni
Nutzer
05.04.2004, 17:34 Uhr [ - Direktlink - ] |
Thema: C-Anfängerkurs
Brett: Programmierung Zitat:Das widerspricht nicht meiner Aussage. Wieviel weisst Du über die AmigaOS Programmierung und wieviel von C? Der Typ der Variable "IntuitionBase" kann unter bestimmten Bedingungen varieren. Hauptsache es ist ein Zeiger und "passt" zu "struct Libary *". APTR ist so ein Typ. Der _Name_ der Basevariable ist in C _nicht_ egal. Der muß zwingend richtig sein oder es passiert was anderes als Du denkst. Das sich ein Programm trotz falscher Librarybasisname richtig verhält, liegt am automatischen Öffnen von verwendeten Bibliotheken (geht meist nur für die Standardbibliotheken). |
|||||
gni
Nutzer
05.04.2004, 17:25 Uhr [ - Direktlink - ] |
Thema: C-Anfängerkurs
Brett: Programmierung Zitat:Stimmt, Lattice/SAS habe diese Header erfunden. AFAIK, um die Benutzung von clib+pragmas zu vereinfachen. Eventuell haben sie auch daran gedacht, Unterschiede zwischen Compilern zu verstecken. Fakt bleibt, mit den proto/ Header ist es vollkommen irrelevant wie die spezielen Header eines Compilers heissen. Alle Arbeit wird im proto/ Header gemacht. |
|||||
gni
Nutzer
05.04.2004, 13:02 Uhr [ - Direktlink - ] |
Thema: C-Anfängerkurs
Brett: Programmierung Zitat:"IntBase" ist dem Compiler völlig egal. |
|||||
gni
Nutzer
05.04.2004, 12:24 Uhr [ - Direktlink - ] |
Thema: C-Anfängerkurs
Brett: Programmierung Zitat:Ganz ohne Casts gehts nicht, wenn man die "richtgen" Typen verwenden will und auf globale Librarybasen steht. Bei lokalen Librarbasen als Funktionsargument oder in Strukturen, ist der Typ belanglos. Es sollte natürlich ein zu "struct Library *" kompatibler Type sein, zb. APTR. Wenn man C++ nutzt muß man dann aber auch casten bei OpenLibrary. Zitat:Der muß sein. Zitat:Der _muß_ nicht sein. Hier sollte man folgendes benutzen: code:Dann stimmt plötzlich der Type ohne Cast... Ups.&IntuitionBase->LibNode Zitat:Überhaupt nicht. Falls es Dir noch nicht aufgefallen ist, das ganze ist objektorientiert. Intuition hat eine "erweiterte" Librarybasis. Zitat:Da könnte auch APTR bzw. "struct Library *" stehen. Aber in dem Fall kommst Du nicht mehr _ohne_ Cast an die speziellen Felder von IntuitionBase wenn das mal benötigt werden sollte. Zitat:Das hat damit _nichts_ zu tun. Mir scheint eher, das zuwenig über den Sinn und Zweck von Casts nachgedacht wird. Viel zu oft werden Casts ohne Nachzudenken benutzt, um Warnungen loszuwerden. Zitat:Dann verwende keine proto/ Header und gut. |
|||||
gni
Nutzer
05.04.2004, 11:54 Uhr [ - Direktlink - ] |
Thema: C-Anfängerkurs
Brett: Programmierung Zitat:Es steht nirgends, das das NDK ohne Fehler ist Die Type-Probleme entstehen erst, wenn man die proto/ Header verwendet. Ursprünglich waren die NDK Beispiele nur für SAS/C und verwendeten clib+pragmas ohne "extern base" (wurde da nicht benötigt). |
|||||
gni
Nutzer
05.04.2004, 11:48 Uhr [ - Direktlink - ] |
Thema: C-Anfängerkurs
Brett: Programmierung Zitat:Na sowas, Helios != Solar. |
|||||
gni
Nutzer
02.04.2004, 17:01 Uhr [ - Direktlink - ] |
Thema: C-Anfängerkurs
Brett: Programmierung Zitat:Die proto/ Header sind IMHO besser, aber clib/ geht natürlich auch. Das vermeidet das Problem der inkompatiblen Librarytypen... Zitat:Wie hier. "Richtig" ist "struct IntuionBase *" bzw "struct GfxBase *".code:struct Library *IntuitionBase; // Zeiger auf IntuitionBase-Struktur struct Library *GfxBase; // Zeiger auf Library-Struktur "struct Library *" geht halt nicht, wenn man die proto/ Header die "richtigen" Typen verwenden. Zitat:GCC schluckt auch IntBase. Dann passiert aber was anderes als Du denkst. Wenn Du nicht selber das richtige Symbol belegst dann macht der Compiler das für dich... Zitat:Storm Fehler. Frag mal Solar bezüglich seinen Erfahrungen mit Storm und seinen SFStools. Zitat:GCC wird schon seinen Grund haben, zu meckern. |
|||||
|
Impressum |
Datenschutzerklärung |
Netiquette |
Werbung |
Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten. |