Autor Thema: ld: warning: section `.bss' type changed to PROGBITS  (Gelesen 8282 mal)

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
« am: 01. October 2008, 21:22 »
So, jetzt hab ich mal wieder Zeit zum proggen gefunden. Mein ld macht die section .bss automatisch zu PROGBITS. Wie kann ich NOBITS erzwingen? Im linkerscript? Oder über die Kommandozeile? Und wie? Google spuckt nichts aus (zumindest finde ich nichts). Also mein ld sagt immer:

ld: warning: section `.bss' type changed to PROGBITS

Ich möchte aber NOBITS, damit die Datei auf der Platte kleiner ist. Dafür ist .bss doch u.a. auch da, oder nicht?

vielen dank
In the Future everyone will need OS-64!!!

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #1 am: 01. October 2008, 22:14 »
Es wäre geschickt wenn du uns einen Testcase geben könntest, also ein minimales Set an Instruktionen um dein Problem nachvollziehen zu können. Ein kleines Beispiel:

Ich assembliere
das
durch ausführen von
nasm dem
und linke mittels
ld diesem hier
und (falls du eins benutzt) mit diesem
linkerscript

Damit kommst du bestimmt der Beantwortung deiner Frage näher. Ansonsten WORKSFORME. :-P
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

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
« Antwort #2 am: 02. October 2008, 07:58 »
Asoooooooo, jo denn. Also es geht um meinen Kernel. Der ist ja eine ELF32 (mit 32 Bit und 64 Bit Code). Den 64 Bit Code bringe ich mit USE64 in fasm zum laufen. Die Page Tables und den Kernel-Stack habe ich in die Section .bss verfrachtet. So sieht das dann aus:

section '.bss'
kstack: times 4000h db 0
PML4: times 512*8 db 0
;usw.
KernelEnd: ;das Ende des Kernels (oben steht KernelStart, die beiden brauche ich um die Speichergröße zu berechnen, damit ich nacher in der Speicherverwaltung den Speicher als belegt markieren kann).

Die linker.ld sieht so aus:

ENTRY (_start)

SECTIONS{
    . = 0x00100000;

    .text :{
        *(.text)
    }

.text64 ALIGN (0x1000) : {
*(.test64)
}

    .rodata ALIGN (0x1000) : {
        *(.rodata)
    }

    .data ALIGN (0x1000) : {
        *(.data)
    }

    .bss ALIGN (0x1000) : {
_sbss = .;
        *(COMMON)
        *(.bss)
        _ebss = .;
    }
}


Wenn ich ehrlich bin habe ich den Script nur zusammenkopiert, da es mit schwer fehlt die Syntax zu verstehen. Evtl. ist da ja was falsch.

Jo linken tu ich dann mit: ld -m elf_i386 -T linker.ld -o kernel loader.o kernel.o

-m ist nötig, damit er auch eine ELF32 macht und keine ELF64. Dann sagt ld halt immer:

warning: section `.bss' type changed to PROGBITS

Tja und ich habe keine Ahnung wieso. Hoffentlich könnt ihr mir helfen. Habe schon versucht hinter dem Section '.bss' ein readable und writeable zu schreiben, hat aber auch nichts gebracht.

vielen dank!!!
In the Future everyone will need OS-64!!!

MNemo

  • Beiträge: 547
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 02. October 2008, 10:53 »
Ich könnte mir vorstellen, dass das problem daran liegt, dass du in der section .bss die daten initialisierts(wenn auch nur mit nullen) unter nasm gibt es dafür "resb  n", "resw n" und "resq n" um n bytes/words/quadwords zu reservieren ohne sie zu initialisieren(speziell für die .bss-Section).
„Wichtig ist nicht, besser zu sein als alle anderen. Wichtig ist, besser zu sein als du gestern warst!“

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #4 am: 02. October 2008, 15:55 »
Das geht laut FASM Manual (siehe manual 1.2.2 Data definitions, Tabelle 1.3) auch mit FASM. Ich denke auch, dass das das Problem löst.
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

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
« Antwort #5 am: 02. October 2008, 22:38 »
Ah cool, es funktioniert. Vielen dank auch.  :-D
In the Future everyone will need OS-64!!!

 

Einloggen