protected mode works, return to real-mode triple faults
[com32] / com32.ld
index 4771389..b83e861 100644 (file)
--- a/com32.ld
+++ b/com32.ld
@@ -8,24 +8,27 @@ SECTIONS {
 
        . = ALIGN(4);
        _ldr_main_start = .;
+       _ldr_main_end = _ldr_main_start + _main_size;
 
        /* main program will be moved to 2MB by the loader */
        . = 2M;
-       _main_start = .;
-       .startup : { * (.startup); }
-       .text : { * (.text*); }
-       .rodata : { * (.rodata*); }
-       .data : { * (.data*); }
+       main ALIGN(4): AT (_ldr_main_start) {
+               _main_start = .;
+               * (.startup);
+               * (.text*);
+               * (.rodata*);
+               * (.data*);
 
-       .bss ALIGN(4): {
+               . = ALIGN(4);
                _bss_start = .;
                * (.bss*);
                * (COMMON);
                . = ALIGN(4);
                _bss_end = .;
+               _bss_size = _bss_end - _bss_start;
        }
-       _bss_size = SIZEOF(.bss);
 
+       . = ALIGN(4);
        _main_size = . - _main_start;
        _mem_start = .;
 }