section .bss1 write nobits align=16
; Symbols from linker script
- extern Stack
- extern section..bcopy32.start
- extern section..config.start
- extern section..config.vstart
- extern section..config.end.start
+%macro SECINFO 1
+ extern __%1_start, __%1_lma, __%1_end
+ extern __%1_len, __%1_dwords
+%endmacro
+ SECINFO bcopy32
+ SECINFO config
global _start
mov ds,ax
mov es,ax
-%ifndef DEPEND
-%if TEXT_START != 0x7c00
- ; This is uglier than it should be, but works around
- ; some NASM 0.98.38 bugs.
- mov di,section..bcopy32.start
- add di,__bcopy_size-4
- lea si,[di-(TEXT_START-7C00h)]
- lea cx,[di-(TEXT_START-4)]
- shr cx,2
- std ; Overlapping areas, copy backwards
- rep movsd
-%endif
-%endif
jmp 0:_start1 ; Canonicalize address
_start1:
mov bp,sp
.earlybss : {
__earlybss_start = .;
*(.earlybss)
- __earlybss_len = . - __earlybss_start;
+ __earlybss_end = .;
}
+ __earlybss_len = __earlybss_end - __earlybss_start;
+ __earlybss_dwords = (__earlybss_len + 3) >> 2;
.bcopy32 : AT (__bcopy32_lma) {
FILL(0x90909090)
__bcopy32_start = .;
*(.bcopy32)
- __bcopy32_len = . - __bcopy32_start;
+ __bcopy32_end = .;
}
+ __bcopy32_len = __bcopy32_end - __bcopy32_start;
+ __bcopy32_dwords = (__bcopy32_len + 3) >> 2;
.config : AT (__config_lma) {
__config_start = .;
*(.config)
- __config_len = . - __config_start;
+ __config_end = .;
}
+ __config_len = __config_end - __config_start;
+ __config_dwords = (__config_len + 3) >> 2;
.bss : AT(__bss_start) {
__bss_start = .;
*(.bss)
*(.bss2)
- __bss_len = . - __bss_start;
+ __bss_end = .;
}
+ __bss_len = __bss_end - __bss_start;
+ __bss_dwords = (__bss_len + 3) >> 2;
/* Stack */
.stack : {
__stack_start = .;
. += STACK_LEN;
- __stack_len = . - __stack_start;
+ __stack_end = .;
}
+ __stack_len = __stack_end - __stack_start;
+ __stack_dwords = (__stack_len + 3) >> 2;
/* Initialized sections */
FILL(0x90909090)
__text_start = .;
*(.text)
- __text_len = . - __text_start;
+ __text_end = .;
}
+ __text_len = __text_end - __text_start;
+ __text_dwords = (__text_len + 3) >> 2;
. = ALIGN(4);
__bcopy32_lma = .;
.data : {
__data_start = .;
*(.data)
- __data_len = . - __data_start;
+ __data_end = .;
}
+ __data_len = __data_end - __data_start;
+ __data_dwords = (__data_len + 3) >> 2;
. = ALIGN(4);
__config_lma = .;
.adv : {
__adv_start = .;
*(.adv)
- __adv_len = . - __adv_start;
+ __adv_end = .;
}
+ __adv_len = __adv_end - __adv_start;
+ __adv_dwords = (__adv_len + 3) >> 2;
/* Late uninitialized sections */
.uibss : {
__uibss_start = .;
*(.uibss)
- __uibss_len = . - __uibss_start;
+ __uibss_end = .;
}
+ __uibss_len = __uibss_end - __uibss_start;
+ __uibss_dwords = (__uibss_len + 3) >> 2;
.bss1 : {
__bss1_start = .;
*(.bss1)
- __bss1_len = . - __bss1_start;
+ __bss1_end = .;
}
-
- Stack = __stack_start;
- section..bcopy32.start = __bcopy32_lma;
- section..config.start = __config_lma;
- section..config.vstart = __config_start;
- section..config.end.start = __config_start + SIZEOF(.config);
+ __bss1_len = __bss1_end - __bss1_start;
+ __bss1_dwords = (__bss1_len + 3) >> 2;
}