libgcc Funktion ersetzen

Gast #2954837
Lesenswert?

Hallo,

ich habe bisher mit GCC 3.4 gearbeitet (Nios II). In meinem System habe 
ich einen Koprozessor, der Double +-*/ rechnet.

Um diesen einzubinden, habe ich einen Treiber geschrieben, der die 
selben Funktionsnamen wie in der libgcc verwendet (z.b. double __adddf3 
(double, double);). Das hat dann dazu geführt, dass der Linker die 
lokale (von mir geschriebene) Funktion benutzt hat anstatt der 
libgcc-Softwarefloat-Routine.

Jetzt bin ich gezwungen, meine Toolchain auf GCC 4.1 umzustellen. Leider 
scheint der Linker dort die lokale Funktion nicht mehr einzubinden und 
verwendet ausschliesslich die in der libgcc hinterlegte. Selbst ein 
direkter Aufruf von __adddf3() ruft die falsche Funktion auf.
Nur wenn ich die Funktion umbenenne kann ich sie überhaupt aufrufen, 
jedoch wird dann a = b + c; leider nicht mehr automatisch ersetzt wie 
bislang.

Nachdem ich jetzt nach einem Tag suchen und probieren nicht weiterkomme, 
hoffe ich dass mir von euch jemand ein paar Hinweise dazu geben kann!
#2955401
Lesenswert?

Eventuell hilft die Option -nostdlib. Dann musst du zwar die libgcc.a 
manuell mit -lgcc dazulinken, aber das sollte dann wirklich wie eine 
normale Library funktionieren. Ich glaube, der aktuelle gcc umgeht für 
interne und Standard-C Bibliotheksfunktionen die normalen Wege und 
verarbeitet die Aufrufe direkt, um besser zu optimieren.
Gast #2955791
Lesenswert?

Die Option mit -nostdlib habe ich ausprobiert, hat aber nicht geholfen. 
Gestern habe ich im Laufe des Tages die source-Datei mit dem Treiber von 
.c nach .cpp umbenannt. Nachdem ich sie heute wieder zurück in .c 
benannt habe, funktioniert das ganze jetzt wie gewünscht.
Warum das jetzt allerdings ein Problem war, kann ich nicht 
nachvollziehen. Im Makefile war die Datei immer korrekt mit drin und die 
Optionen waren sonst unverändert.

Vielen Dank trotzdem für eure Hilfe!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren