Nuke data.S, since we do have a custom linker script.
This commit is contained in:
parent
ce6dd9de27
commit
dd4438b4fe
8
Makefile
8
Makefile
|
@ -109,8 +109,8 @@ initcode: initcode.S
|
||||||
$(OBJCOPY) -S -O binary initcode.out initcode
|
$(OBJCOPY) -S -O binary initcode.out initcode
|
||||||
$(OBJDUMP) -S initcode.o > initcode.asm
|
$(OBJDUMP) -S initcode.o > initcode.asm
|
||||||
|
|
||||||
kernel: $(OBJS) entry.o data.o entryother initcode
|
kernel: $(OBJS) entry.o entryother initcode
|
||||||
$(LD) $(LDFLAGS) -T kernel.ld -e entry -o kernel entry.o data.o $(OBJS) -b binary initcode entryother
|
$(LD) $(LDFLAGS) -T kernel.ld -e entry -o kernel entry.o $(OBJS) -b binary initcode entryother
|
||||||
$(OBJDUMP) -S kernel > kernel.asm
|
$(OBJDUMP) -S kernel > kernel.asm
|
||||||
$(OBJDUMP) -t kernel | sed '1,/SYMBOL TABLE/d; s/ .* / /; /^$$/d' > kernel.sym
|
$(OBJDUMP) -t kernel | sed '1,/SYMBOL TABLE/d; s/ .* / /; /^$$/d' > kernel.sym
|
||||||
|
|
||||||
|
@ -121,8 +121,8 @@ kernel: $(OBJS) entry.o data.o entryother initcode
|
||||||
# great for testing the kernel on real hardware without
|
# great for testing the kernel on real hardware without
|
||||||
# needing a scratch disk.
|
# needing a scratch disk.
|
||||||
MEMFSOBJS = $(filter-out ide.o,$(OBJS)) memide.o
|
MEMFSOBJS = $(filter-out ide.o,$(OBJS)) memide.o
|
||||||
kernelmemfs: $(MEMFSOBJS) entry.o data.o entryother initcode fs.img
|
kernelmemfs: $(MEMFSOBJS) entry.o entryother initcode fs.img
|
||||||
$(LD) $(LDFLAGS) -Ttext 0x100000 -e main -o kernelmemfs entry.o data.o $(MEMFSOBJS) -b binary initcode entryother fs.img
|
$(LD) $(LDFLAGS) -Ttext 0x100000 -e main -o kernelmemfs entry.o $(MEMFSOBJS) -b binary initcode entryother fs.img
|
||||||
$(OBJDUMP) -S kernelmemfs > kernelmemfs.asm
|
$(OBJDUMP) -S kernelmemfs > kernelmemfs.asm
|
||||||
$(OBJDUMP) -t kernelmemfs | sed '1,/SYMBOL TABLE/d; s/ .* / /; /^$$/d' > kernelmemfs.sym
|
$(OBJDUMP) -t kernelmemfs | sed '1,/SYMBOL TABLE/d; s/ .* / /; /^$$/d' > kernelmemfs.sym
|
||||||
|
|
||||||
|
|
26
data.S
26
data.S
|
@ -1,26 +0,0 @@
|
||||||
// The kernel layout is:
|
|
||||||
//
|
|
||||||
// text
|
|
||||||
// rodata
|
|
||||||
// data
|
|
||||||
// bss
|
|
||||||
//
|
|
||||||
// Conventionally, Unix linkers provide pseudo-symbols
|
|
||||||
// etext, edata, and end, at the end of the text, data, and bss.
|
|
||||||
// For the kernel mapping, we need the address at the beginning
|
|
||||||
// of the data section, but that's not one of the conventional
|
|
||||||
// symbols, because the convention started before there was a
|
|
||||||
// read-only rodata section between text and data.
|
|
||||||
//
|
|
||||||
// To get the address of the data section, we define a symbol
|
|
||||||
// named data and make sure this is the first object passed to
|
|
||||||
// the linker, so that it will be the first symbol in the data section.
|
|
||||||
//
|
|
||||||
// Alternative approaches would be to parse our own ELF header
|
|
||||||
// or to write a linker script, but this is simplest.
|
|
||||||
|
|
||||||
.data
|
|
||||||
.align 4096
|
|
||||||
.globl data
|
|
||||||
data:
|
|
||||||
.word 1
|
|
|
@ -41,6 +41,14 @@ SECTIONS
|
||||||
/* Adjust the address for the data segment to the next page */
|
/* Adjust the address for the data segment to the next page */
|
||||||
. = ALIGN(0x1000);
|
. = ALIGN(0x1000);
|
||||||
|
|
||||||
|
/* Conventionally, Unix linkers provide pseudo-symbols
|
||||||
|
* etext, edata, and end, at the end of the text, data, and bss.
|
||||||
|
* For the kernel mapping, we need the address at the beginning
|
||||||
|
* of the data section, but that's not one of the conventional
|
||||||
|
* symbols, because the convention started before there was a
|
||||||
|
* read-only rodata section between text and data. */
|
||||||
|
PROVIDE(data = .);
|
||||||
|
|
||||||
/* The data segment */
|
/* The data segment */
|
||||||
.data : {
|
.data : {
|
||||||
*(.data)
|
*(.data)
|
||||||
|
|
2
vm.c
2
vm.c
|
@ -7,7 +7,7 @@
|
||||||
#include "proc.h"
|
#include "proc.h"
|
||||||
#include "elf.h"
|
#include "elf.h"
|
||||||
|
|
||||||
extern char data[]; // defined in data.S
|
extern char data[]; // defined by kernel.ld
|
||||||
pde_t *kpgdir; // for use in scheduler()
|
pde_t *kpgdir; // for use in scheduler()
|
||||||
struct segdesc gdt[NSEGS];
|
struct segdesc gdt[NSEGS];
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue