[linux-l] Frage an Compilerspezialisten
Jan-Benedict Glaw
jbglaw at lug-owl.de
So Dez 5 15:32:29 CET 2004
On Sun, 2004-12-05 15:01:12 +0100, Juergen Rienaecker <j.rienaecker at arcor.de>
wrote in message <41B314A8.86D9F91A at arcor.de>:
> Bei rpmbuild -bb SPECS/gstreamer.spec
>
> "gstcpu.c: In function `gst_cpuid_i386':
> gstcpu.c:72: error: PIC register `ebx' clobbered in `asm'
> make[4]: *** [libgstreamer_0.8_la-gstcpu.lo] Error 1 "
Also, der GCC weiß nicht, was da in den asm-Zeilen gemacht wird, er
reicht das einfach an den Assembler durch.
Da innerhalb der asm-Zeilen aber einige Register überschrieben (sprich:
gebraucht) werden, muß dem GCC gesagt, werden, daß nach dem asm() einige
Register nicht mehr ihren alten Inhalt haben, also geclobbert sind.
> "=o" (regs[1]),
> "=o" (regs[2]), "=o" (regs[3])
Vor dem ersten Doppelpunkt stehen alle Register/Variablen, die in der
Assembler-Anweisung als Output benutzt werden--hier werden also drei
Ausgaben erwartet.
> : "a" (x)
Nach dem ersten Doppelpunkt stehen alle Werte, die als Input verwurstet
werden sollen, hier also nur ein Wert.
> : "ebx", "ecx", "edx");
...und dem 2ten Doppelpunkt folgen alle Register, die innerhalb des
asm()-Statements verändert worden sein könnten, sodaß der GCC nun weiß,
welche Variablen, Konstanten etc. er nun ggf. nochmals aus anderen
Quellen nachladen muß.
> (ich habe die lange Codezeile umbrechen müssen)
Beim Zitieren bitten die überlangen Zeilen exakt genauso beibehalten,
wie sie sind...
> Was bedeutet das ?
Der GCC meckert an, daß EBX verändert wird, er aber anscheinend das
EBX-Register für andere Aufgaben (PIC, Position-Independant Code)
braucht. Wenn PIC-Code gebaut wird, wird EBX als ein Basis-Register
benutzt, daß somit dem User-Code nicht zur Verfügung steht.
Alternativ könnte man ein weiteres Register clobbern, EBX darin
zwischenspeichern und am Ende des asm()-Statements wieder restaurieren,
falls EBX hier wirklich benutzt werden muß. ...ansonsten halt einfach
ein anderes Register nehmen :)
MfG, JBG
--
Jan-Benedict Glaw jbglaw at lug-owl.de . +49-172-7608481 _ O _
"Eine Freie Meinung in einem Freien Kopf | Gegen Zensur | Gegen Krieg _ _ O
fuer einen Freien Staat voll Freier Bürger" | im Internet! | im Irak! O O O
ret = do_actions((curr | FREE_SPEECH) & ~(NEW_COPYRIGHT_LAW | DRM | TCPA));
-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname : signature.asc
Dateityp : application/pgp-signature
Dateigröße : 189 bytes
Beschreibung: Digital signature
URL : <https://mlists.in-berlin.de/pipermail/linux-l-mlists.in-berlin.de/attachments/20041205/d3f7ad02/attachment.sig>
Mehr Informationen über die Mailingliste linux-l