| ;; program to test RDOFF production and linkage |
| |
| ;; items to test include: |
| ;; [1] relocation within the same segment in each module |
| ;; [2] relocation to different segments in same module |
| ;; [3] relocation to same segment in different module |
| ;; [4] relocation to different segment in different module |
| ;; [5] relative relocation to same module |
| ;; [6] relative relocation to different module |
| ;; [7] correct generation of BSS addresses |
| |
| [SECTION .text] |
| [BITS 32] |
| |
| _main: |
| mov ax,localdata ; [2] (16 bit) => 66 b8 0000 |
| mov eax,localdata2 ; [2] (32 bit) => b8 0000000a |
| |
| [EXTERN _fardata] |
| |
| mov eax,[_fardata] ; [4] => a1 00000000 (+20) |
| mov cx,next ; [1] => 66 b9 0012 |
| next: |
| call localproc ; [5] => e8 00000019 |
| |
| [EXTERN _farproc] |
| mov eax,_farproc ; [3] => b8 00000000 (+40+0) |
| call _farproc ; [6] => e8 -$ (-0+40+0) (=1f) |
| |
| mov eax,localbss ; [7] => b8 00000000 |
| |
| [GLOBAL _term] |
| _term: xor ax,ax ; => 66 31 c0 |
| int 21h ; => cd 21 |
| jmp _term ; => e9 -0a (=fffffff6) |
| |
| localproc: |
| ret ; => c3 |
| |
| [GLOBAL _test1proc] |
| _test1proc: |
| call localproc ; [5] => e8 -$ (-0+0+?) (=-6=fffffffa) |
| ret ; => c3 |
| |
| [SECTION .data] |
| [GLOBAL localdata2] |
| localdata: db 'localdata',0 |
| localdata2: db 'localdata2',0 |
| farref: dd _fardata ; [3] => 0 (+20) |
| localref: dd _main ; [2] => 0 (+0) |
| |
| [SECTION .bss] |
| localbss: resw 4 ; reserve 8 bytes BSS |
| |