[linux-l] Frage an Compilerspezialisten

Juergen Rienaecker j.rienaecker at arcor.de
So Dez 5 15:01:12 CET 2004


Was bedeutet error: PIC register `ebx' clobbered in `asm'

Ich habe mich für den gcc-3.4.3 begeistert und habe damit auf meiner
Suse-9.1 schon etliches übersetzt (mozilla-1.6-72, gimp usw.)
Es lohnt sich. Es läuft deutlich weniger behäbig.
Ich habe es gelernt rpm-Pakete, zu bauen und hatte nun den Ehrgeiz,
mit den Quellpacketen Gnome-2.6.1 (linuxuser 07/2004)
meine Suse-9.1 auf gnome-2.6.1 aufzurüsten.
Mit den üblichen Problemen, die der gcc-3.4.3 mit schlampig
geschriebenen Quellen hat, komme ich klar.
Aber was bedeutet Folgendes:

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 "

in gstreamer-0.8.1/gst/gstcpu.c steht

#ifdef HAVE_CPU_I386
static void
gst_cpuid_i386 (int x, unsigned long *eax, unsigned long *ebx,
    unsigned long *ecx, unsigned long *edx)
{
  unsigned long regs[4];

  asm (
      /* GCC-3.2 (and possibly others) don't clobber ebx properly,
       * so we save/restore it directly. */
"  pushl %%ebx\n" "  cpuid\n" "  movl %%eax, %0\n" "  movl %%ebx, %1\n"
"  movl %%ecx, %2\n" "  movl %%edx, %3\n" "  popl %%ebx\n":"=o"
(regs[0]),
      "=o" (regs[1]),
      "=o" (regs[2]), "=o" (regs[3])
:    "a" (x)
:    "ebx", "ecx", "edx");

  *eax = regs[0];
  *ebx = regs[1];
  *ecx = regs[2];
  *edx = regs[3];
}
(ich habe die lange Codezeile umbrechen müssen)

Damit kommt der Compiler so nicht klar.
Was bedeutet das ?
Zu C habe ich immer meinen Kernighan/Ritchie konsultiert
zu C++ habe ich auch ein "schlaues" Buch,
aber bei Assembler muß ich passen.
Was heißt don't clobber ebx properly
Warum wird das Register ebx "verprügelt" ?

Kann mir da jemand weiterhelfen ?
Meine CPU ist ein Athlon (1 GHz).

Ich wär das sehr dankbar.
Denn ohne gstreamer geht es nicht weiter und muß man
die Suse-9.2 nur wegen gnome-2.6 kaufen, wenn man die
Quellen dazu von der Heft-CD des linux-users hat und die
Suse-9.2 auch noch nichts von dem gcc-3.4 wissen will. 

Es grüßt Jürgen Rienäcker
---
Ein Rentner, der als Hobby Linux hat aber sich nicht mit
KDE anfreunden kann, den fvwm2 benutzt und zusehends
an Gnome gefallen findet.



Mehr Informationen über die Mailingliste linux-l