Autor Thema: Globale Varablen funktionieren nicht  (Gelesen 11974 mal)

dldave

  • Beiträge: 14
    • Profil anzeigen
Gespeichert
« Antwort #20 am: 13. February 2010, 09:46 »
hmm, und wie kann ich so einen Fehler finden ???
Für das Linken habe ich das Linkerscript vom wiki genommen.
INPUT(bin/kernel_32.o  bin/ckernel.o bin/video.o bin/memory.o bin/utils.o )
OUTPUT_FORMAT("binary")
ENTRY(start)
SECTIONS
{
  .text  0x10000 : {
    *(.text)
  }
 
  .data ALIGN (4096): {
    *(.data)
  }
 
  .bss  ALIGN (4096):  {                 
    *(.bss)
  }

RedEagle

  • Beiträge: 244
    • Profil anzeigen
    • RedEagle-OperatingSystem - Projekt
Gespeichert
« Antwort #21 am: 13. February 2010, 11:51 »
Methode 1:
printhex(str);
printhex(str2);

Methode 2:
if(str == str2) prints("error");

dldave

  • Beiträge: 14
    • Profil anzeigen
Gespeichert
« Antwort #22 am: 13. February 2010, 12:16 »
Also die beiden Zeiger zeigen zur Laufzeit auf die selber Adresse.
Aber wo liegt der Fehler??? Was mach ich falsch???  :|
« Letzte Änderung: 13. February 2010, 12:19 von dldave »

RedEagle

  • Beiträge: 244
    • Profil anzeigen
    • RedEagle-OperatingSystem - Projekt
Gespeichert
« Antwort #23 am: 13. February 2010, 12:52 »
mit
objdump -h ckernel.okannst du dir anzeigen lassen, wie dein Kompiler ckernel.c zerlegt

Alle dort genannten sections (außer .comment und .note.GNU-stack) sollten auch in deinem linkerscript auftauchen - falls nicht ist das der Punk an dem dir die Daten verloren gehen :)

dldave

  • Beiträge: 14
    • Profil anzeigen
Gespeichert
« Antwort #24 am: 13. February 2010, 13:04 »
Also die Ausgabe von objdump schaut eigentlich ganz gut aus oder ???
Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         00000067  00000000  00000000  00000034  2**2
                  CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
  1 .data         00000004  00000000  00000000  0000009c  2**2
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          00000004  00000000  00000000  000000a0  2**2
                  ALLOC
  3 .rodata       00000006  00000000  00000000  000000a0  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  4 .comment      00000012  00000000  00000000  000000a6  2**0
                  CONTENTS, READONLY
  5 .note.GNU-stack 00000000  00000000  00000000  000000b8  2**0
                  CONTENTS, READONLY

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #25 am: 13. February 2010, 13:11 »
rodata dürfte das wesentliche sein, das fehlte, wäre meine Einschätzung, siehe auch das Linkerscript aus der Wikitutorialserie.
« Letzte Änderung: 13. February 2010, 13:13 von bluecode »
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

dldave

  • Beiträge: 14
    • Profil anzeigen
Gespeichert
« Antwort #26 am: 13. February 2010, 13:37 »
Mach es einen Unterschied in welcher Reihenfolge die Sectionen angelegt werden?

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #27 am: 13. February 2010, 15:11 »
Nein, eigentlich nicht. Es wurde glaube ich schon gesagt, aber ich sags einfach nochmal: Benutz einen gescheiten Bootloader, dann sind 90% solcher Fehler Geschichte.
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

 

Einloggen