Page 1 of 1

Linking Error

Posted: Wed Aug 06, 2008 8:38 am
by System123
When I link my OS kernel together I get the following error. I don't know why as it compiles properly and other people have used similar code in theirs. It has something to do with the way of assigning things.

My linking command is:

G:\Kernel>LD2 -T linker.ld -o ../Release/kernel.bin obj/krnload.o obj/kernel.o obj/gdt.o obj/idt.o obj/console.o obj/ports.o obj/isr.o obj/irq.o ../rtl/units/i386-fpos/system.o

Code: Select all

obj/isr.o(.text+0xf): In function `ISR_INITISR':
: undefined reference to `isr0'
obj/isr.o(.text+0x26): In function `ISR_INITISR':
: undefined reference to `isr1'
obj/isr.o(.text+0x3d): In function `ISR_INITISR':
: undefined reference to `isr2'
obj/isr.o(.text+0x54): In function `ISR_INITISR':
: undefined reference to `isr3'
obj/isr.o(.text+0x6b): In function `ISR_INITISR':
: undefined reference to `isr4'
obj/isr.o(.text+0x82): In function `ISR_INITISR':
: undefined reference to `isr5'
obj/isr.o(.text+0x99): In function `ISR_INITISR':
: undefined reference to `isr6'
obj/isr.o(.text+0xb0): In function `ISR_INITISR':
: undefined reference to `isr7'
obj/isr.o(.text+0xc7): In function `ISR_INITISR':
: undefined reference to `isr8'
obj/isr.o(.text+0xde): In function `ISR_INITISR':
: undefined reference to `isr9'
obj/isr.o(.text+0xf5): In function `ISR_INITISR':
: undefined reference to `isr10'
obj/isr.o(.text+0x10c): In function `ISR_INITISR':
: undefined reference to `isr11'
obj/isr.o(.text+0x123): In function `ISR_INITISR':
: undefined reference to `isr12'
obj/isr.o(.text+0x13a): In function `ISR_INITISR':
: undefined reference to `isr13'
obj/isr.o(.text+0x151): In function `ISR_INITISR':
: undefined reference to `isr14'
obj/isr.o(.text+0x168): In function `ISR_INITISR':
: undefined reference to `isr15'
obj/isr.o(.text+0x17f): In function `ISR_INITISR':
: undefined reference to `isr16'
obj/isr.o(.text+0x196): In function `ISR_INITISR':
: undefined reference to `isr17'
obj/isr.o(.text+0x1ad): In function `ISR_INITISR':
: undefined reference to `isr18'
obj/isr.o(.text+0x1c4): In function `ISR_INITISR':
: undefined reference to `isr19'
obj/isr.o(.text+0x1db): In function `ISR_INITISR':
: undefined reference to `isr20'
obj/isr.o(.text+0x1f2): In function `ISR_INITISR':
: undefined reference to `isr21'
obj/isr.o(.text+0x209): In function `ISR_INITISR':
The part that is causing the error is the following code:

Code: Select all

procedure isr0; external name 'isr0';
procedure isr1; external name 'isr1';
procedure isr2; external name 'isr2';
procedure isr3; external name 'isr3';
procedure isr4; external name 'isr4';
procedure isr5; external name 'isr5';
procedure isr6; external name 'isr6';
procedure isr7; external name 'isr7';
procedure isr8; external name 'isr8';
procedure isr9; external name 'isr9';
procedure isr10; external name 'isr10';
procedure isr11; external name 'isr11';
procedure isr12; external name 'isr12';
procedure isr13; external name 'isr13';
procedure isr14; external name 'isr14';
procedure isr15; external name 'isr15';
procedure isr16; external name 'isr16';
procedure isr17; external name 'isr17';
procedure isr18; external name 'isr18';
procedure isr19; external name 'isr19';
procedure isr20; external name 'isr20';
procedure isr21; external name 'isr21';
procedure isr22; external name 'isr22';
procedure isr23; external name 'isr23';
procedure isr24; external name 'isr24';
procedure isr25; external name 'isr25';
procedure isr26; external name 'isr26';
procedure isr27; external name 'isr27';
procedure isr28; external name 'isr28';
procedure isr29; external name 'isr29';
procedure isr30; external name 'isr30';
procedure isr31; external name 'isr31';

Re: Linking Error

Posted: Thu Aug 07, 2008 1:01 am
by leledumbo
Where did you define the body of isrN? External modifier is used to declare procedures/functions defined in external object files. If you define them in assembly, make sure you've global-ed them. Example:

Code: Select all

; file: isr_asm.asm
global isr0
isr0:
 ... ; isr0 body
 iret 
You can use this in your Pascal source if you've declared:

Code: Select all

// file: isr.pas
procedure isr0; external name 'isr0';
Don't forget to tell the linker in which object files the body resides (.i.e ld <other options and object files> obj/isr_asm.o obj/isr.o).