Autor Thema: Extern deklarierte Funktionen streiken  (Gelesen 3496 mal)

woigl

  • Beiträge: 93
    • Profil anzeigen
    • http://www.nogos.org
Gespeichert
« am: 16. August 2005, 22:15 »
Der Kernel von TeeJay in C funktioniert mal einwandfrei.

Man kann auch Funktionen deklarieren und aus der Main() aufrufen.

Jedoch wenn ich Funktionen in einem separatem Object File deklariere und mittel Header File als EXTERN kennzeichne dann funktioniert es bei BOCHS auber nicht wenn ich es richtig boote. Das resultat ist das er rebootet beim zugriff auf dazugelinke Object Files.

Kann das am linker Skript liegen? Momentan verwende ich dieses von TeeJay's Tutorial.

Bitte um Hilfe da ich bei diesem Problem echt hänge.

JensFZ

  • Beiträge: 96
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 17. August 2005, 08:13 »
Moin

Hast du den Funktionsnamen im C Code ohne führenden _ geschrieben?
besitzt der Funktionaname im ASM Code diesen _ ?
 

woigl

  • Beiträge: 93
    • Profil anzeigen
    • http://www.nogos.org
Gespeichert
« Antwort #2 am: 17. August 2005, 08:33 »
Zitat von: JensFZ
Moin

Hast du den Funktionsnamen im C Code ohne führenden _ geschrieben?
besitzt der Funktionaname im ASM Code diesen _ ?


nun die main hat diesen Funktionsnamen _main(), aber die Funktion die ich aus der Main aufrufe hat diesen Unterstrich nicht.

Zur Info moechte ich noch sagen das sich die Funktion die ich aus der Main aufrufe sich in einem anderen Object File befindet welches ich mit C und nicht mit ASM geschrieben habe.

Legend

  • Beiträge: 635
    • Profil anzeigen
    • http://os.joachimnock.de
Gespeichert
« Antwort #3 am: 17. August 2005, 12:14 »
Also so langsam frage ich mich, ob du nicht eine andere Version von gcc/binutils ausprobieren solltest ...
*post*

woigl

  • Beiträge: 93
    • Profil anzeigen
    • http://www.nogos.org
Gespeichert
« Antwort #4 am: 17. August 2005, 13:29 »
Zitat von: Legend
Also so langsam frage ich mich, ob du nicht eine andere Version von gcc/binutils ausprobieren solltest ...


ich verwende CENTOS 3 - sollte schon passen! kann aber später mal versuchen es auf RedHat 9 zu kompilieren...

woigl

  • Beiträge: 93
    • Profil anzeigen
    • http://www.nogos.org
Gespeichert
« Antwort #5 am: 19. August 2005, 12:54 »
Nun es geht auch nicht mit anderen Linux Kernel...

Also mal mein MemoryMap des Linkers:

ld -s -x -M -T link_kernel.txt -o ./bin/kernel32.bin ./bin/kernel32asm.o ./bin/kernel.o ./bin/crt.o
 
Memory Configuration
 
Name             Origin             Length             Attributes
*default*        0x00000000         0xffffffff
 
Linker script and memory map
 
                0x00010200                phys = 0x10200
 
.text           0x00010200      0xe00 load address 0x00010200
                0x00010200                code = .
 *(.text)
 .text          0x00010200        0x8 ./bin/kernel32asm.o
                0x00010200                start
 .text          0x00010208       0x2f ./bin/kernel.o
                0x00010208                _main
 *fill*         0x00010237        0x1 00
 .text          0x00010238        0x1 ./bin/crt.o
                0x00010238                _init_video
                0x00011000                . = ALIGN (0x1000)
 *fill*         0x00010239      0xdc7 00
 
.data           0x00011000        0x0 load address 0x00011000
                0x00011000                data = .
 *(.data)
                0x00011000                . = ALIGN (0x1000)
 
.bss            0x00011000        0x0 load address 0x00011000
                0x00011000                bss = .
 *(.bss)
                0x00011000                . = ALIGN (0x1000)
                0x00011000                end = .
LOAD ./bin/kernel32asm.o
LOAD ./bin/kernel.o
LOAD ./bin/crt.o
OUTPUT(./bin/kernel32.bin binary)
 
.rodata.str1.32
                0x00011000       0x2c
 .rodata.str1.32
                0x00011000       0x2c ./bin/kernel.o
 
.note.GNU-stack
                0x00000000        0x0
 
.comment        0x00000000       0x68
 .comment       0x00000000       0x34 ./bin/kernel.o
 .comment       0x00000034       0x34 ./bin/crt.o


kann jemand dmait was anfangen?? bzw. laeuft da was falsch?

 

Einloggen