[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