Page 1 of 1

GRUB Error 28

Posted: Tue Apr 03, 2007 10:16 pm
by pcmattman
What is the limit on the size of the kernel. Mine has just gone over 64K and now GRUB keeps telling me that it's too big to fit into memory... Do I need to build my kernel then distribute the not-as-necessary parts into external programs?

Wait... even less than 64K gives me trouble :(...

Posted: Wed Apr 04, 2007 1:58 am
by AJ
What binary format are you using?

Posted: Wed Apr 04, 2007 2:58 am
by pcmattman
ELF, multiboot header hasn't changed at all since the last time it worked :(

Re: GRUB Error 28

Posted: Wed Apr 04, 2007 3:31 am
by urxae
pcmattman wrote:What is the limit on the size of the kernel. Mine has just gone over 64K and now GRUB keeps telling me that it's too big to fit into memory... Do I need to build my kernel then distribute the not-as-necessary parts into external programs?

Wait... even less than 64K gives me trouble :(...
GRUB can handle kernels > 64K just fine. Mine is currently 342 K (including debug symbols) and GRUB loads it just fine. (Despite the fact that it seems to insist on crashing after a while on real machines -- I'm sure that's just my own stupid fault ;))

What GRUB can't handle however is a load address that doesn't fit into physical memory. (and IIRC the error message is similar to what you reworded above. Next time, please post the exact error message).
If you have a higher-half kernel, you need to tell GRUB to load it at a different address than it was linked for.

Could you post your linker script and the output of "objdump --headers <yourkernel>"?

Posted: Wed Apr 04, 2007 3:50 am
by pcmattman
Hmmm... the old kernel (ie. the one that works) is 63K. I just did a massive refactor and that may have messed up the symbols a bit. ATM I'm doing a massive render in 3DS Max and can't use my main development PC.

Once I get control back :D I'll post my linker script and the linker map.

Edit: It crashed :( . Anyway, here's the linker map and script... one note I have to make is that I think the problem originates from my memory manager, which has an array (not a linked list) of 20 million entries (20MB). I think if I change that to a linked list it should work.

Linker script:

Code: Select all

ENTRY (_loader)

SECTIONS
{
	. = 0x00100000;

	.text :
	{
		*(.text)
	}

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

	.data ALIGN (0x1000) :
	{
		start_ctors = .;
		*(.ctor*)
		end_ctors = .;
		start_dtors = .;
		*(.dtor*)
		end_dtors = .;
		*(.data)
	}

	.bss :
	{
		_sbss = .;
		*(COMMON)
		*(.bss)
		_ebss = .;
	}
}
Linker map:

Code: Select all

Archive member included       because of file (symbol)

libmattise.a(kernel_lib.o)    file_io_main.o (_find)
libmattise.a(gdt_lib.o)       libmattise.a(kernel_lib.o) (_gdt_install)
libmattise.a(idt_lib.o)       UserMain_main.o (_idt_install)
libmattise.a(isr_lib.o)       libmattise.a(kernel_lib.o) (_isrs_install)
libmattise.a(irq_lib.o)       libmattise.a(kernel_lib.o) (_irq_install)
libmattise.a(acc_lib.o)       UserMain_main.o (_strcpy)
libmattise.a(scrn_lib.o)      UserMain_main.o (_kpOffX)
libmattise.a(conio_lib.o)     UserMain_main.o (_printf)
libmattise.a(timer_lib.o)     libmattise.a(kernel_lib.o) (_timer_install)
libmattise.a(mt_lib.o)        libmattise.a(timer_lib.o) (_CheckList)
libmattise.a(kb_lib.o)        libmattise.a(kernel_lib.o) (_keyboard_install)
libmattise.a(floppy_lib.o)    UserMain_main.o (_DetectFloppyDrives)
libmattise.a(num_lib.o)       libmattise.a(isr_lib.o) (_itoa_10)
libmattise.a(simplemem_lib.o)
                              UserMain_main.o (_simpleMalloc)
libmattise.a(fdc_lib.o)       libmattise.a(timer_lib.o) (_motor)
libmattise.a(vfs_lib.o)       libmattise.a(kernel_lib.o) (_InitFileMan)
libmattise.a(dma_lib.o)       libmattise.a(fdc_lib.o) (_dma_xfer)

Allocating common symbols
Common symbol       size              file

_kpOffY             0x10              libmattise.a(scrn_lib.o)
_idt                0x800             libmattise.a(idt_lib.o)
_fatDrives          0x4c0             file_io_main.o
_gdt                0x80              libmattise.a(gdt_lib.o)
_gp                 0x10              libmattise.a(gdt_lib.o)
_guiMouseX          0x10              gui_main.o
_myFloppy           0x40              fio_main.o
_VirtualDrive       0x203a0           libmattise.a(vfs_lib.o)
_lockedfiles        0x8000            fio_main.o
_vgaBuff2_Info      0x20              gui_main.o
_PrevEnts           0x6400            UserMain_main.o
_vgaBuff2           0x10              gui_main.o
_ProcessList        0x59e0            libmattise.a(mt_lib.o)
_winHandles         0xd50             gui_main.o
_numWindows         0x10              gui_main.o
_kpOffX             0x10              libmattise.a(scrn_lib.o)
_guiMouseY          0x10              gui_main.o
_stdout             0x20              UserMain_main.o
_nextfree           0x10              libmattise.a(vfs_lib.o)
_heap               0x19000000        libmattise.a(acc_lib.o)
_myDrives           0x340             hdd_main.o
_idtp               0x10              libmattise.a(idt_lib.o)

Memory Configuration

Name             Origin             Length             Attributes
*default*        0x00000000         0xffffffff

Linker script and memory map

                0x00100000                .=0x100000

.text           0x00100000     0xb1e8
 *(.text)
 .text          0x00100000      0x305 loader.o
                0x00100131                _isr20
                0x001001ea                _irq2
                0x00100163                _isr25
                0x001002b4                _rem
                0x0010004d                _pause
                0x001000ff                _isr15
                0x001000d7                _isr10
                0x001002d6                _WriteCR0
                0x0010000c                _loader
                0x0010011d                _isr18
                0x0010014f                _isr23
                0x001002f0                _KeyContWaitReady
                0x001000b1                _isr6
                0x0010021c                _irq7
                0x00100075                _isr0
                0x001001d6                _irq0
                0x00100208                _irq5
                0x0010013b                _isr21
                0x00100262                _irq14
                0x00100226                _irq8
                0x001000cd                _isr9
                0x00100181                _isr28
                0x001002e5                _WriteCR3
                0x001000a7                _isr5
                0x0010016d                _isr26
                0x0010018b                _isr29
                0x0010019f                _isr31
                0x0010007f                _isr1
                0x001000df                _isr11
                0x00100109                _isr16
                0x001002a2                _GetEAX
                0x00100089                _isr2
                0x001000ef                _isr13
                0x00100159                _isr24
                0x001002b1                _GetEDX
                0x0010009d                _isr4
                0x00100212                _irq6
                0x00100244                _irq11
                0x001002ac                _GetECX
                0x001002a7                _GetEBX
                0x001001fe                _irq4
                0x00100258                _irq13
                0x00100093                _isr3
                0x001000bb                _isr7
                0x001002e1                _ReadCR3
                0x00100177                _isr27
                0x001002f7                _EnableMouseIRQ
                0x00100195                _isr30
                0x00100127                _isr19
                0x001000f7                _isr14
                0x0010006d                _idt_load
                0x00100230                _irq9
                0x00100113                _isr17
                0x0010023a                _irq10
                0x001002d2                _ReadCR0
                0x0010026c                _irq15
                0x001000e7                _isr12
                0x001000c5                _isr8
                0x001001e0                _irq1
                0x00100145                _isr22
                0x0010024e                _irq12
                0x001001f4                _irq3
                0x00100050                _gdt_flush
 *fill*         0x00100305        0x3
 .text          0x00100308     0x1880 UserMain_main.o
                0x001007ad                _PrintAddr
                0x00100308                _GetRegisters
                0x001007c9                _FillStr
                0x00100582                _gets
                0x00100d21                _UserMain
                0x00100391                _Int21ISR
                0x001004b2                _getp
 .text          0x00101b88      0x100 devio_main.o
                0x00101be6                _putchar
                0x00101bb3                _putc
                0x00101b88                _getc
                0x00101c06                _puts
                0x00101c55                _seek
 .text          0x00101c88     0x1790 file_io_main.o
                0x001020d0                _InitHardDrive
                0x00101d60                _hConvertFilename
                0x00102df3                _FindInDir
                0x00101fa2                _GetClusterEntry
                0x00102b67                _FindInRoot
                0x00102fbc                _hopen
                0x00103392                _hwrite
                0x001027e5                _ReadCluster
                0x00101c88                _GetBPB
                0x00101ceb                _FirstSectorOfCluster
                0x00101ed4                _WhereInFat
                0x0010330e                _hread
                0x0010290f                _EnumFolderEnts
                0x0010270c                _hdd_ParseDirStr
                0x00102057                _NumClusters
 .text          0x00103418     0x1a40 fio_main.o
                0x00103d79                _unlockfile
                0x00103779                _toupper
                0x00103b5c                _ParseDirStr
                0x00104421                _open
                0x001039eb                _ConvertFilename
                0x001037c7                _FindDir
                0x001037a0                _tolower
                0x00103e12                _FindFreeCluster
                0x00104b51                _RootDir
                0x001036ec                _numsectors
                0x0010469f                _write
                0x00103e57                _CreateNewFile
                0x00103441                _SetClusterData
                0x001044e2                _read
                0x001035d9                _GetClusterData
                0x00103dc4                _islocked
                0x00104164                _InitDrive
                0x00104b97                _ListEnts
                0x00103d21                _lockfile
 .text          0x00104e58      0x920 gui_main.o
                0x001051dc                _DesktopPainter
                0x00104ec1                _DefPaint
                0x001056a6                _InitGUI
                0x00105000                _BorderBmp
                0x00104fa8                _SetPixel
                0x0010569c                _CursorPainter
                0x0010556b                _BlitFont
                0x00104eec                _InitWinList
                0x0010538b                _DrawBitmapFile
                0x0010564e                _SetMousePos
                0x00105508                _DrawCursor
                0x00104e58                _GetWindow
                0x001056a1                _hellopainter
                0x00105207                _CreateWindow
                0x00104f53                _UpdateScreen
                0x001052c1                _CreateWindow_Index
                0x00105618                _MoveWindow
                0x00104fd4                _DSetPixel
                0x001056fd                _RunGUI
                0x001050c1                _CreateRect
                0x00104e89                _FillBmp
                0x00104f7b                _BmpSetPixel
                0x0010500e                _BlitBmp
                0x00104f34                _InitSecondBuffer
                0x001050ff                _PaintWindows
                0x00105099                _FillRect
 .text          0x00105778     0x13f0 hdd_main.o
                0x001057a0                _getcnull
                0x00105778                _GetLastError
                0x0010578d                _WriteSectorNull
                0x00105d46                _EnumDrives
                0x00106b03                _lba28seek
                0x001057af                _DriveInfo
                0x001067dc                _ReadSectorLBA28
                0x00105801                _IdentifyDevice
                0x001068d0                _lba28PutC
                0x00105782                _ReadSectorNull
                0x001065c6                _startreadLBA28
                0x00106422                _prologCHS
                0x00106155                _conSeek
                0x00106652                _lba28GetC
                0x00106a42                _WriteSectorLBA28
                0x001062bc                _prologLBA28
                0x00106137                _conPutC
                0x00105792                _putcnull
                0x00106127                _conGetC
                0x001057aa                _seeknull
                0x0010615a                _InitDiskAccess
                0x0010660c                _startwriteLBA28
 .text          0x00106b68      0x150 libmattise.a(kernel_lib.o)
                0x00106b68                _find
                0x00106bdf                _NullProc
                0x00106c22                _main
 .text          0x00106cb8      0x100 libmattise.a(gdt_lib.o)
                0x00106d4c                _gdt_install
                0x00106cb8                _gdt_set_gate
 .text          0x00106db8       0xb0 libmattise.a(idt_lib.o)
                0x00106e31                _idt_install
                0x00106db8                _idt_set_gate
 .text          0x00106e68      0x660 libmattise.a(isr_lib.o)
                0x00107387                _fault_handler
                0x00106e68                _isrs_install
                0x001072a1                _RemISR
                0x0010728c                _SetISR
 .text          0x001074c8      0x2b0 libmattise.a(irq_lib.o)
                0x001074ed                _irq_remap
                0x00107717                _irq_handler
                0x001074da                _irq_uninstall_handler
                0x0010759a                _irq_install
                0x001074c8                _irq_install_handler
 .text          0x00107778      0x650 libmattise.a(acc_lib.o)
                0x00107b6c                _free
                0x0010791a                _strcmp
                0x00107cc4                _memset_c
                0x00107b53                _salloc
                0x00107bfd                _freend
                0x00107c52                _memcpy
                0x00107c8e                _memset
                0x00107a29                _malloc_count
                0x00107d6c                _inportw
                0x0010779c                _substr
                0x00107d8d                _outportb
                0x00107cfb                _memsetw
                0x00107877                _init_memman
                0x00107da9                _outportw
                0x0010796b                _malloc
                0x0010777c                _strcpy
                0x00107778                _HeapCount
                0x00107d2b                _strlen
                0x00107d4e                _inportb
 .text          0x00107dc8      0x3b0 libmattise.a(scrn_lib.o)
                0x00107e93                _kputc_at
                0x0010810d                _cls
                0x00107e0e                _MoveCursor
                0x00107f9e                _kputc
                0x0010806e                _kputs
                0x00107f4c                _kputc_loc
                0x00107e84                _ResAttrib
                0x00107dc8                _ScrollScreen
                0x00107e77                _SetAttrib
 .text          0x00108178      0x5b0 libmattise.a(conio_lib.o)
                0x00108694                _sprintf
                0x0010863d                _vsprintf_help
                0x00108667                _vsprintf
                0x001086e1                _vprintf
                0x001086c0                _vprintf_help
                0x00108178                _do_printf
                0x001086fe                _printf
 .text          0x00108728      0x1a0 libmattise.a(timer_lib.o)
                0x00108875                _sleep
                0x0010884e                _timer_install
                0x00108892                _Clock
                0x0010889c                _ResetTimeslice
                0x0010877e                _timer_handler
                0x00108728                _SetClockRate
                0x001088ab                _delay
 .text          0x001088c8      0x7b0 libmattise.a(mt_lib.o)
                0x001089e0                _InitMT
                0x001088c8                _CheckList
                0x00108c5f                _disablemt
                0x00108c7d                _mtenabled
                0x00108a82                _CreateProcess
                0x00108f78                _currpid
                0x00108cbe                _resched
                0x00108c6e                _enablemt
                0x0010891d                _Yield
                0x00108f82                _GetProcessCount
                0x00108937                _ListProcesses
                0x00108fcc                _kill
 .text          0x00109078      0x150 libmattise.a(kb_lib.o)
                0x00109132                _wait_kbhit
                0x00109078                _keyboard_handler
                0x00109141                _kbhit
                0x00109166                _getch
                0x00109118                _keyboard_install
 .text          0x001091c8      0x140 libmattise.a(floppy_lib.o)
                0x00109254                _DetectFloppyDrives
 .text          0x00109308      0x800 libmattise.a(num_lib.o)
                0x0010963e                _fabs
                0x0010930d                _rand
                0x00109371                _ftoa
                0x0010961b                _abs
                0x00109a20                _itoa_16
                0x00109364                _srand
                0x001095c0                _ConvRadians
                0x001096ee                _atoi
                0x001095e7                _sine
                0x001097aa                _itoa_10
                0x0010985f                _ltoa_10
                0x0010999a                _ltoa_18
                0x00109571                _factorial
                0x00109a8f                _ltoa_16
                0x001096b6                _sqrt
                0x00109687                _pow
                0x00109308                _imath
                0x0010991b                _itoa_8
 .text          0x00109b08      0x1a0 libmattise.a(simplemem_lib.o)
                0x00109b08                _simpleMalloc
                0x00109bb7                _simpleFree
 .text          0x00109ca8      0xdb0 libmattise.a(fdc_lib.o)
                0x00109f55                _block2hts
                0x0010a128                _motoron
                0x0010a187                _recalibrate
                0x0010a75f                _format_track
                0x0010a1b6                _flseek
                0x00109cfc                _init_floppy
                0x00109e4e                _waitfdc
                0x0010a330                _read_block
                0x0010a3f7                _write_block
                0x0010a16f                _motoroff
                0x0010a05b                _reset
                0x0010a261                _log_disk
                0x00109d6b                _sendbyte
                0x0010a11e                _diskchange
                0x0010a48d                _fdc_rw
                0x00109f34                _FloppyIRQ
                0x00109dd7                _getbyte
                0x00109fe5                _ResetFloppy
 .text          0x0010aa58      0x570 libmattise.a(vfs_lib.o)
                0x0010af47                _ListFiles
                0x0010af22                _FileExists
                0x0010ad27                _GetIndex
                0x0010ac36                _CreateFile
                0x0010ae9f                _ReadBytes
                0x0010aa6f                _InitFileMan
                0x0010ab6d                _DeleteFile
                0x0010adf4                _WriteBytes
 .text          0x0010afc8      0x220 libmattise.a(dma_lib.o)
                0x0010b044                __dma_xfer
                0x0010afc8                _dma_xfer

.rodata
 *(.rodata)

.data           0x0010c000     0x1170
                0x0010c000                start_ctors=.
 *(.ctor*)
                0x0010c000                end_ctors=.
                0x0010c000                start_dtors=.
 *(.dtor*)
                0x0010c000                end_dtors=.
 *(.data)
 .data          0x0010c000      0xd20 UserMain_main.o
                0x0010c000                _ManualPages
                0x0010cd00                _manCount
 .data          0x0010cd20       0x20 file_io_main.o
                0x0010cd20                _NullFile
 .data          0x0010cd40      0x1a0 gui_main.o
                0x0010ce20                _Font_D
                0x0010cd60                _Font_A
                0x0010cda0                _Font_B
                0x0010cea0                _Cursor_Normal
                0x0010cd40                _vgaBuff
                0x0010ce60                _Font_E
                0x0010cde0                _Font_C
 .data          0x0010cee0       0x40 hdd_main.o
                0x0010cee0                _NullDrive
 .data          0x0010cf20       0x80 libmattise.a(isr_lib.o)
                0x0010cf20                _exception_messages
 .data          0x0010cfa0       0x10 libmattise.a(irq_lib.o)
                0x0010cfa0                _myvga
 .data          0x0010cfb0       0x10 libmattise.a(acc_lib.o)
                0x0010cfb4                _heap_top
                0x0010cfb0                _heap_loc
 .data          0x0010cfc0       0x10 libmattise.a(scrn_lib.o)
                0x0010cfc0                _attrib
 .data          0x0010cfd0       0x10 libmattise.a(timer_lib.o)
                0x0010cfd0                _timeslice
 .data          0x0010cfe0      0x120 libmattise.a(kb_lib.o)
                0x0010cfe0                _keyBuff
                0x0010d000                _kbdus
                0x0010d080                _kbdus_shift
 .data          0x0010d100       0x20 libmattise.a(floppy_lib.o)
                0x0010d100                _drive_types
 .data          0x0010d120       0x10 libmattise.a(num_lib.o)
                0x0010d120                _randseed
 .data          0x0010d130       0x10 libmattise.a(fdc_lib.o)
                0x0010d134                _tbaddr
 .data          0x0010d140       0x30 libmattise.a(dma_lib.o)
                0x0010d148                _ModeReg
                0x0010d150                _ClearReg
                0x0010d168                _CountPort
                0x0010d158                _PagePort
                0x0010d140                _MaskReg
                0x0010d160                _AddrPort

.bss            0x0010d170 0x1903a1c0
                0x0010d170                _sbss=.
 *(COMMON)
 COMMON         0x0010d170     0x6420 UserMain_main.o
                0x0010d170                _PrevEnts
                0x00113570                _stdout
 COMMON         0x00113590      0x4c0 file_io_main.o
                0x00113590                _fatDrives
 COMMON         0x00113a50     0x8040 fio_main.o
                0x00113a50                _myFloppy
                0x00113a90                _lockedfiles
 COMMON         0x0011ba90      0xdb0 gui_main.o
                0x0011ba90                _guiMouseX
                0x0011baa0                _vgaBuff2_Info
                0x0011bac0                _vgaBuff2
                0x0011bad0                _winHandles
                0x0011c820                _numWindows
                0x0011c830                _guiMouseY
 COMMON         0x0011c840      0x340 hdd_main.o
                0x0011c840                _myDrives
 COMMON         0x0011cb80       0x90 libmattise.a(gdt_lib.o)
                0x0011cb80                _gdt
                0x0011cc00                _gp
 COMMON         0x0011cc10      0x810 libmattise.a(idt_lib.o)
                0x0011cc10                _idt
                0x0011d410                _idtp
 COMMON         0x0011d420 0x19000000 libmattise.a(acc_lib.o)
                0x0011d420                _heap
 COMMON         0x1911d420       0x20 libmattise.a(scrn_lib.o)
                0x1911d420                _kpOffY
                0x1911d430                _kpOffX
 COMMON         0x1911d440     0x59e0 libmattise.a(mt_lib.o)
                0x1911d440                _ProcessList
 COMMON         0x19122e20    0x203b0 libmattise.a(vfs_lib.o)
                0x19122e20                _VirtualDrive
                0x191431c0                _nextfree
 *(.bss)
 .bss           0x191431d0     0x4000 loader.o
 .bss           0x191471d0       0x18 UserMain_main.o
                0x191471d0                _entNum
 .bss           0x191471e8        0x4 fio_main.o
                0x191471e8                _lastfree
 .bss           0x191471ec       0x40 gui_main.o
                0x191471ec                _Font_None
 .bss           0x1914722c        0x4 hdd_main.o
                0x1914722c                _lasterr
 .bss           0x19147230       0x40 libmattise.a(isr_lib.o)
                0x19147230                _ISRHandlers
 .bss           0x19147270       0x40 libmattise.a(irq_lib.o)
                0x19147270                _irq_routines
 .bss           0x191472b0        0x4 libmattise.a(scrn_lib.o)
                0x191472b0                _noInc
 .bss           0x191472b4        0x8 libmattise.a(timer_lib.o)
                0x191472b4                _timer_ticks
                0x191472b8                _sc
 .bss           0x191472bc       0x10 libmattise.a(mt_lib.o)
                0x191472c8                _isEnabled
                0x191472bc                _ProcessCount
                0x191472c0                _pid
                0x191472c4                _hasinit
 .bss           0x191472cc        0x4 libmattise.a(kb_lib.o)
                0x191472cc                _keyShift
 .bss           0x191472d0       0x60 libmattise.a(fdc_lib.o)
                0x191472d4                _mtick
                0x191472d8                _tmout
                0x191472d0                _motor
                0x19147330                _ebss=.
LOAD loader.o
LOAD UserMain_main.o
LOAD devio_main.o
LOAD file_io_main.o
LOAD fio_main.o
LOAD gui_main.o
LOAD hdd_main.o
LOAD libmattise.a
OUTPUT(kernel.bin elf32-i386)

.comment        0x19147330      0x1ec
 .comment       0x19147330       0x1f loader.o
 *fill*         0x1914734f        0x1
 .comment       0x19147350       0x14 UserMain_main.o
 .comment       0x19147364       0x14 devio_main.o
 .comment       0x19147378       0x14 file_io_main.o
 .comment       0x1914738c       0x14 fio_main.o
 .comment       0x191473a0       0x14 gui_main.o
 .comment       0x191473b4       0x14 hdd_main.o
 .comment       0x191473c8       0x14 libmattise.a(kernel_lib.o)
 .comment       0x191473dc       0x14 libmattise.a(gdt_lib.o)
 .comment       0x191473f0       0x14 libmattise.a(idt_lib.o)
 .comment       0x19147404       0x14 libmattise.a(isr_lib.o)
 .comment       0x19147418       0x14 libmattise.a(irq_lib.o)
 .comment       0x1914742c       0x14 libmattise.a(acc_lib.o)
 .comment       0x19147440       0x14 libmattise.a(scrn_lib.o)
 .comment       0x19147454       0x14 libmattise.a(conio_lib.o)
 .comment       0x19147468       0x14 libmattise.a(timer_lib.o)
 .comment       0x1914747c       0x14 libmattise.a(mt_lib.o)
 .comment       0x19147490       0x14 libmattise.a(kb_lib.o)
 .comment       0x191474a4       0x14 libmattise.a(floppy_lib.o)
 .comment       0x191474b8       0x14 libmattise.a(num_lib.o)
 .comment       0x191474cc       0x14 libmattise.a(simplemem_lib.o)
 .comment       0x191474e0       0x14 libmattise.a(fdc_lib.o)
 .comment       0x191474f4       0x14 libmattise.a(vfs_lib.o)
 .comment       0x19147508       0x14 libmattise.a(dma_lib.o)
0x19147508 = 420,771,080 bytes... 420 MB??? Maybe I should look into moving into a linked list system instead of a predefined array?