Sie sind nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: GentooForum.de. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

1

10.06.2011, 18:44

Warnings beim Kernel kompilieren

Guten Abend,
ich habe seit einiger Zeit Warnings beim Kernel. Der Kernel kompiliert bis zum Schluss durch, lässt sich booten
nur manchmal bleibt der Rechner komplett hängen (ich hab keine Ahnung warum, vielleicht liegts am Kernel/Kernel Warnings)

Die Warnings chronologisch:
1.

Quellcode

1
2
3
4
5
6
7
8
9
  CC  	kernel/futex.o
kernel/futex.c: In Funktion »handle_futex_death«:
kernel/futex.c:2454: Warnung: »nval« may be used uninitialized in this function
kernel/futex.c: In Funktion »fixup_pi_state_owner«:
kernel/futex.c:1549: Warnung: »curval« may be used uninitialized in this function
kernel/futex.c: In Funktion »futex_lock_pi_atomic«:
kernel/futex.c:678: Warnung: »curval« may be used uninitialized in this function
Auf höchster Ebene:
cc1: Warnung: nicht erkannte Kommandozeilenoption »-Wno-unused-but-set-variable«


2.

Quellcode

1
2
3
4
  CC  	drivers/gpu/drm/i915/intel_ringbuffer.o
drivers/gpu/drm/i915/intel_ringbuffer.c:603: Warnung: »ring_get_irq« definiert, aber nicht verwendet
drivers/gpu/drm/i915/intel_ringbuffer.c:620: Warnung: »ring_put_irq« definiert, aber nicht verwendet
cc1: Warnung: nicht erkannte Kommandozeilenoption »-Wno-unused-but-set-variable«


3.

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
  CC  	net/packet/af_packet.o
In file included from /usr/src/linux-2.6.39-gentoo-r1/arch/x86/include/asm/uaccess.h:571,
             	from include/net/checksum.h:25,
             	from include/linux/skbuff.h:28,
             	from include/linux/if_ether.h:126,
             	from include/linux/netdevice.h:29,
             	from net/packet/af_packet.c:58:
In Funktion »copy_from_user«,
	eingefügt von »packet_getsockopt« bei net/packet/af_packet.c:2160:
/usr/src/linux-2.6.39-gentoo-r1/arch/x86/include/asm/uaccess_32.h:212: Warnung: Aufruf von »copy_from_user_overflow« mit Attributwarnung deklariert: copy_from_user() buffer size is not provably correct
Auf höchster Ebene:
cc1: Warnung: nicht erkannte Kommandozeilenoption »-Wno-unused-but-set-variable«


4.

Quellcode

1
2
3
4
  HOSTCC  arch/x86/boot/compressed/relocs
arch/x86/boot/compressed/relocs.c: In Funktion »emit_relocs«:
arch/x86/boot/compressed/relocs.c:605: Warnung: Der Rückgabewert von »fwrite«, der mit dem Attribut warn_unused_result deklariert wurde, wird ignoriert
arch/x86/boot/compressed/relocs.c:612: Warnung: Der Rückgabewert von »fwrite«, der mit dem Attribut warn_unused_result deklariert wurde, wird ignoriert


Das sind die Warnings die ich beim Kernel 2.6.39-r1 bekomme.

Bei anderen Kernels war der 3. Warning der Einzige den ich bekommen habe.

Ich bedanke mich schon einmal für die großartige Hilfe, da ihr mir bis jetzt immer super geholfen habt (:

mit freundlichen Grüßen
Nesc.

2

14.06.2011, 19:54

Hi,

zur Warning No1:

Zitat

kernel/futex.c: In Funktion »handle_futex_death«:
kernel/futex.c:2454: Warnung: »nval« may be used uninitialized in this function


Erklärung / Beispiel (Pseudo-Code) :

Quellcode

1
2
3
4
5
6
7
8
9
10
11
ClassX *getInstance(String str)
{
  ClassX * obj;
  
  if (str == "A") 
    obj = new ClassX("A");
  else if (str == "B")
    obj = new ClassX("B");

  return obj;
}


Die Funktion getInstance soll eine Instanz der Klasse ClassX zurückgeben. Diese Instanz soll obj sein, werden (Zeile 3). In Zeile 5 / 7 wird überprüft, ob der übergebene String gleich "A" oder "B" ist ( Es soll nur ein Beispiel sein ;) was Besseres fällt mir grad net ein ). Wenn er "A" oder "B" ist, wird eine neue Instanz (Zeile 6 / 8) mit new erzeugt. Obj besitzt dann die Speicheradresse der Instanz (Zeiger). Man könnte sagen, hinter obj steckt die Instanz. Dies wird in Zeile 10 an den Aufrufer der Funktion zurückgegeben. Jetzt das Problem: Wenn der übergebene String str weder "A" noch "B" ist, wird in dem Fall keine Instanz erzeugt. Ich sage mal so, obj zeigt irgendwohin. Es ist nicht definiert. Sogesehen kann das im schlimmsten Fall "knallen".

Unter Java gilt das noch nicht mal als Warning, sondern als Error. Ist von Sprache zu Sprache unterschiedlich.

Ich hoffe, der Sinn der 1. Warning ist etwas klarer geworden.
DE4 rocks! http://kde.org

3

14.06.2011, 22:49

Da der Kernel funktioniert, keine Einbußen hat in der Performance gegenüber dem davor (sogar stabiler läuft), können die Warnings nicht so wichtig sein.

Kann es sein, das in den Funktionen noch eine Sicherung drin ist, sodass mit irgendwelchen default Werten gearbeitet wird sobald ein solcher Warning kommt?

Kann ich als "nur" Anwender eigentlich etwas machen? Genaue Fehleranalyse? Kernel in Einzelschritten (wie beim Programmieren) debuggen um genaue Fehler zu finden oder so?

Wie mein Programmierlehrer immer sagt: Ein Programm mit Warnings kann zwar sehr wohl sehr gut Funktionieren, jedoch ist es immer noch nicht optimal (sonst hätte es ja keine Warnings ;)). Wie kann ich also am Besten solchen Fehlern auf den Spuren kommen?

mfg
Nesc.

EDIT1:
Ich kann die VMs nicht mehr im Bridged-Mode betreiben, hat einen kerne panic als Folge. Im NAT-Mode funktioniert alles. Kann es an den Warnings oben liegen oder allgemein am Kernel?

EDIT2:
Was mit dem kernel panic ist jetzt nachdem ich mehrere Kernels kompiliert habe (hab warscheinlich nur ein oder zwei sachen übersehen rein zu kompilieren) funktioniert es jetzt doch mit den VMs.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »nesco58« (18.06.2011, 00:36)