mirror of
https://github.com/netwide-assembler/nasm.git
synced 2025-03-25 18:10:23 +08:00
test: nasm-t -- Add obj test
Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com>
This commit is contained in:
parent
0cbb3df7f4
commit
1bdcff2f70
87
travis/test/obj.asm
Normal file
87
travis/test/obj.asm
Normal file
@ -0,0 +1,87 @@
|
||||
;Testname=unoptimized; Arguments=-O0 -fobj -oobj.o; Files=stdout stderr obj.o
|
||||
;Testname=optimized; Arguments=-Ox -fobj -oobj.o; Files=stdout stderr obj.o
|
||||
|
||||
; test source file for assembling to Microsoft 16-bit .OBJ
|
||||
; build with (16-bit Microsoft C):
|
||||
; nasm -f obj objtest.asm
|
||||
; cl /AL objtest.obj objlink.c
|
||||
; other compilers should work too, provided they handle large
|
||||
; model in the same way as MS C
|
||||
|
||||
; This file should test the following:
|
||||
; [1] Define and export a global symbol
|
||||
; [2] Define a non-global symbol
|
||||
; [3] Define a common symbol
|
||||
; [4] Define a NASM local label
|
||||
; [5] Reference a NASM local label
|
||||
; [6] Import an external symbol
|
||||
; [7] Make a PC-relative relocated reference
|
||||
; [8] Reference a symbol in the same section as itself
|
||||
; [9] Reference a symbol in a different segment from itself
|
||||
; [10] Define a segment group
|
||||
; [11] Take the offset of a symbol in a grouped segment w.r.t. its segment
|
||||
; [12] Reserve uninitialised data space in a segment
|
||||
; [13] Directly take the segment address of a segment
|
||||
; [14] Directly take the segment address of a group
|
||||
; [15] Use SEG on a non-external
|
||||
; [16] Use SEG on an external
|
||||
|
||||
bits 16
|
||||
|
||||
global _bsssym ; [1]
|
||||
global _function ; [1]
|
||||
global _selfptr ; [1]
|
||||
global _selfptr2 ; [1]
|
||||
common _commvar 2 ; [3]
|
||||
extern _printf ; [6]
|
||||
|
||||
group mygroup mybss mydata
|
||||
group mygroup2 mycode mycode2
|
||||
|
||||
segment mycode private
|
||||
|
||||
_function push bp
|
||||
mov bp,sp
|
||||
push ds
|
||||
mov ax,mygroup ; [14]
|
||||
mov ds,ax
|
||||
inc word [_bsssym] ; [9]
|
||||
mov ax,seg _commvar
|
||||
mov ds,ax
|
||||
dec word [_commvar]
|
||||
pop ds
|
||||
mov ax,[bp+6]
|
||||
mov dx,[bp+8]
|
||||
push dx
|
||||
push ax
|
||||
push dx
|
||||
push ax
|
||||
call far [cs:.printf] ; [5] [8]
|
||||
pop ax
|
||||
pop ax
|
||||
call trampoline ; [7]
|
||||
pop ax
|
||||
pop ax
|
||||
mov sp,bp
|
||||
pop bp
|
||||
retf
|
||||
|
||||
.printf dw _printf, seg _printf ; [2] [4] [16]
|
||||
.printfd dd _printf, seg _printf ; [2] [4] [16]
|
||||
.printfq dq _printf, seg _printf ; [2] [4] [16]
|
||||
|
||||
segment mycode2 private
|
||||
|
||||
trampoline: pop ax
|
||||
push cs
|
||||
push ax
|
||||
jmp far _printf
|
||||
|
||||
segment mybss private
|
||||
|
||||
_bsssym resw 64 ; [12]
|
||||
|
||||
segment mydata private
|
||||
|
||||
_selfptr dw _selfptr, seg _selfptr ; [8] [15]
|
||||
_selfptr2 dw _selfptr2 wrt mydata, mydata ; [11] [13]
|
18
travis/test/obj.json
Normal file
18
travis/test/obj.json
Normal file
@ -0,0 +1,18 @@
|
||||
[
|
||||
{
|
||||
"description": "Test 16 bit obj format (-Ox)",
|
||||
"id": "obj",
|
||||
"format": "obj",
|
||||
"source": "obj.asm",
|
||||
"option": "-Ox",
|
||||
"target": [
|
||||
{ "output": "obj.o" },
|
||||
{ "stderr": "obj.stderr" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"description": "Test obj format (-O0)",
|
||||
"ref": "obj",
|
||||
"option": "-O0"
|
||||
}
|
||||
]
|
BIN
travis/test/obj.o.t
Normal file
BIN
travis/test/obj.o.t
Normal file
Binary file not shown.
3
travis/test/obj.stderr
Normal file
3
travis/test/obj.stderr
Normal file
@ -0,0 +1,3 @@
|
||||
./travis/test/obj.asm:70: warning: 32-bit segment relocation zero-extended from 16 bits [-w+zext-reloc]
|
||||
./travis/test/obj.asm:71: warning: 64-bit unsigned relocation zero-extended from 32 bits [-w+zext-reloc]
|
||||
./travis/test/obj.asm:71: warning: 64-bit segment relocation zero-extended from 16 bits [-w+zext-reloc]
|
Loading…
x
Reference in New Issue
Block a user