Связывание gcc с ld86 - PullRequest
       69

Связывание gcc с ld86

0 голосов
/ 04 февраля 2019

Я пытаюсь использовать gcc для компиляции и связи с ld86, чтобы я мог в конечном итоге запустить код на bochs.

В настоящее время он работает с bcc, но я хотел бы использовать gcc по понятным причинам..

Я пытался пути достижения этого.Сначала я попытался скомпилировать его с помощью gcc.Затем соберите его с as86, чтобы создать объектный файл.Наконец, связывание с ld86.Это дало мне много ошибок в процессе сборки.Это выглядело так:

00001                       00000000>                   .file   "kernel.c"
***** illegal label.............................................^
00004                       00000000>                   .type   main, @function
***** opcode expected...........................................^

***** illegal label.............................................^
00007                       00000000>                   .cfi_startproc
***** illegal label...................................................^

(очень длинная ошибка)

Далее я попытался использовать gcc для создания объектных файлов.Однако при запуске ld86 я получаю

ld86: kernel.o has bad magic number

В настоящее время я использую сценарий оболочки для компиляции с bcc.Это выглядит так:

#!/bin/sh

# create empty disk image
dd if=/dev/zero of=floppya.img bs=512 count=2880

# assemble bootloader
nasm bootload.asm

# add bootloader to disk at sector 0
dd if=bootload of=floppya.img bs=512 count=1 conv=notrunc

# compile kernel
bcc -ansi -c -o kernel.o kernel.c

# assemble kernel
as86 kernel.asm -o kasm.o

# link kernel
ld86 -o kernel -d kernel.o kasm.o

# add kernel to disk at sector 259
dd if=kernel of=floppya.img bs=512 conv=notrunc seek=259

Моя цель - не использовать bcc, но иметь возможность работать на Bochs .

Пока самая многообещающая команда:

gcc -Os -std=gnu99 -nodefaultlibs -nostdlib -ffreestanding -m16 -march=i386 -c -o kernel.o kernel.c
...