mirror of https://github.com/yasm/yasm.git
Contributed by: Henryk Richter <henryk.richter@comlab.uni-rostock.de> This adds 3 object format keywords: macho, macho32, macho64. These work in the same way as elf, elf32, and elf64. The object format is still a work in progress; amongst other things it does not yet support full cross-section references (othersym1-othersym2), dynamic linking, or GAS input syntax. We will continue to improve and work on these features in the near future. svn path=/trunk/yasm/; revision=17320.6.0
parent
cb57404518
commit
7f68927283
18 changed files with 4533 additions and 0 deletions
@ -0,0 +1,9 @@ |
|||||||
|
# $Id$ |
||||||
|
|
||||||
|
libyasm_a_SOURCES += modules/objfmts/macho/macho-objfmt.c |
||||||
|
|
||||||
|
YASM_MODULES += objfmt_macho objfmt_macho32 objfmt_macho64 |
||||||
|
|
||||||
|
EXTRA_DIST += modules/objfmts/macho/tests/Makefile.inc |
||||||
|
|
||||||
|
include modules/objfmts/macho/tests/Makefile.inc |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,7 @@ |
|||||||
|
# $Id$ |
||||||
|
|
||||||
|
EXTRA_DIST += modules/objfmts/macho/tests/nasm32/Makefile.inc |
||||||
|
EXTRA_DIST += modules/objfmts/macho/tests/nasm64/Makefile.inc |
||||||
|
|
||||||
|
include modules/objfmts/macho/tests/nasm32/Makefile.inc |
||||||
|
include modules/objfmts/macho/tests/nasm64/Makefile.inc |
@ -0,0 +1,9 @@ |
|||||||
|
# $Id$ |
||||||
|
|
||||||
|
TESTS += modules/objfmts/macho/tests/nasm32/macho32_test.sh |
||||||
|
|
||||||
|
EXTRA_DIST += modules/objfmts/macho/tests/nasm32/machotest.c |
||||||
|
EXTRA_DIST += modules/objfmts/macho/tests/nasm32/machotest.asm |
||||||
|
EXTRA_DIST += modules/objfmts/macho/tests/nasm32/machotest.hex |
||||||
|
EXTRA_DIST += modules/objfmts/macho/tests/nasm32/reloc.asm |
||||||
|
EXTRA_DIST += modules/objfmts/macho/tests/nasm32/reloc.hex |
@ -0,0 +1,4 @@ |
|||||||
|
#! /bin/sh |
||||||
|
# $Id$ |
||||||
|
${srcdir}/out_test.sh macho_test modules/objfmts/macho/tests/nasm32 "32-bit macho objfmt" "-f macho32" ".o" |
||||||
|
exit $? |
@ -0,0 +1,83 @@ |
|||||||
|
; test source file for assembling to MACH-O |
||||||
|
; build with : |
||||||
|
; yasm -f macho machotest.asm |
||||||
|
; gcc -o machotest machotest.c machotest.o |
||||||
|
|
||||||
|
; This file should test the following: |
||||||
|
; [1] Define and export a global text-section symbol |
||||||
|
; [2] Define and export a global data-section symbol |
||||||
|
; [3] Define and export a global BSS-section symbol |
||||||
|
; [4] Define a non-global text-section symbol |
||||||
|
; [5] Define a non-global data-section symbol |
||||||
|
; [6] Define a non-global BSS-section symbol |
||||||
|
; [7] Define a COMMON symbol |
||||||
|
; [8] Define a NASM local label |
||||||
|
; [9] Reference a NASM local label |
||||||
|
; [10] Import an external symbol (note: printf replaced by another call) |
||||||
|
; [11] Make a PC-relative call to an external symbol |
||||||
|
; [12] Reference a text-section symbol in the text section |
||||||
|
; [13] Reference a data-section symbol in the text section |
||||||
|
; [14] Reference a BSS-section symbol in the text section |
||||||
|
; [15] Reference a text-section symbol in the data section |
||||||
|
; [16] Reference a data-section symbol in the data section |
||||||
|
; [17] Reference a BSS-section symbol in the data section |
||||||
|
|
||||||
|
[BITS 32] |
||||||
|
[GLOBAL _lrotate] ; [1] |
||||||
|
[GLOBAL _greet] ; [1] |
||||||
|
[GLOBAL _asmstr] ; [2] |
||||||
|
[GLOBAL _textptr] ; [2] |
||||||
|
[GLOBAL _selfptr] ; [2] |
||||||
|
[GLOBAL _integer] ; [3] |
||||||
|
[EXTERN _druck] ; [10] |
||||||
|
[COMMON _commvar 4] ; [7] |
||||||
|
|
||||||
|
[SECTION .text] |
||||||
|
|
||||||
|
; prototype: long lrotate(long x, int num); |
||||||
|
_lrotate: ; [1] |
||||||
|
push ebp |
||||||
|
mov ebp,esp |
||||||
|
mov eax,[ebp+8] |
||||||
|
mov ecx,[ebp+12] |
||||||
|
.label rol eax,1 ; [4] [8] |
||||||
|
loop .label ; [9] [12] |
||||||
|
mov esp,ebp |
||||||
|
pop ebp |
||||||
|
ret |
||||||
|
|
||||||
|
; prototype: void greet(void); |
||||||
|
_greet |
||||||
|
mov eax,[_integer] ; [14] |
||||||
|
inc eax |
||||||
|
mov [localint],eax ; [14] |
||||||
|
push dword [_commvar] |
||||||
|
mov eax,[localptr] ; [13] |
||||||
|
push dword [eax] |
||||||
|
push dword [_integer] ; [1] [14] |
||||||
|
push dword _printfstr ; [13] |
||||||
|
call _druck ; [11] |
||||||
|
add esp,16 |
||||||
|
ret |
||||||
|
|
||||||
|
[SECTION .data] |
||||||
|
|
||||||
|
; a string |
||||||
|
_asmstr db 'hello, world', 0 ; [2] |
||||||
|
|
||||||
|
; a string for Printf |
||||||
|
_printfstr db "integer==%d, localint==%d, commvar=%d" |
||||||
|
db 10, 0 |
||||||
|
|
||||||
|
; some pointers |
||||||
|
localptr dd localint ; [5] [17] |
||||||
|
_textptr dd _greet ; [15] |
||||||
|
_selfptr dd _selfptr ; [16] |
||||||
|
|
||||||
|
[SECTION .bss] |
||||||
|
|
||||||
|
; an integer |
||||||
|
_integer resd 1 ; [3] |
||||||
|
|
||||||
|
; a local integer |
||||||
|
localint resd 1 ; [6] |
@ -0,0 +1,45 @@ |
|||||||
|
/*
|
||||||
|
* test source file for assembling to ELF |
||||||
|
* copied from cofftest.c; s/coff/elf/g |
||||||
|
* build with (under Linux, for example): |
||||||
|
* yasm -f elf elftest.asm |
||||||
|
* gcc -o elftest elftest.c elftest.o |
||||||
|
*/ |
||||||
|
|
||||||
|
#include <stdio.h> |
||||||
|
|
||||||
|
extern int lrotate(long, int); |
||||||
|
extern void greet(void); |
||||||
|
extern char asmstr[]; |
||||||
|
extern void *selfptr; |
||||||
|
extern void *textptr; |
||||||
|
extern int integer, commvar; |
||||||
|
|
||||||
|
int main(void) { |
||||||
|
|
||||||
|
printf("Testing lrotate: should get 0x00400000, 0x00000001\n"); |
||||||
|
printf("lrotate(0x00040000, 4) = 0x%08lx\n", lrotate(0x40000,4)); |
||||||
|
printf("lrotate(0x00040000, 14) = 0x%08lx\n", lrotate(0x40000,14)); |
||||||
|
|
||||||
|
printf("This string should read `hello, world': `%s'\n", asmstr); |
||||||
|
|
||||||
|
printf("The integers here should be 1234, 1235 and 4321:\n"); |
||||||
|
integer = 1234; |
||||||
|
commvar = 4321; |
||||||
|
greet(); |
||||||
|
|
||||||
|
printf("These pointers should be equal: %p and %p\n", |
||||||
|
&greet, textptr); |
||||||
|
|
||||||
|
printf("So should these: %p and %p\n", selfptr, &selfptr); |
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
there is no support for dynamically linkable objects in current |
||||||
|
mach-o module. Therefore put "printf" statement here and redirect
|
||||||
|
the asm call to druck() |
||||||
|
*/ |
||||||
|
void druck( char *string, int a, int b, int c ) |
||||||
|
{ |
||||||
|
printf(string,a,b,c); |
||||||
|
} |
@ -0,0 +1,776 @@ |
|||||||
|
ce |
||||||
|
fa |
||||||
|
ed |
||||||
|
fe |
||||||
|
07 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
03 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
01 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
02 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
1c |
||||||
|
01 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
01 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
04 |
||||||
|
01 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
85 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
38 |
||||||
|
01 |
||||||
|
00 |
||||||
|
00 |
||||||
|
7d |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
07 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
07 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
03 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
5f |
||||||
|
5f |
||||||
|
74 |
||||||
|
65 |
||||||
|
78 |
||||||
|
74 |
||||||
|
00 |
||||||
|
2e |
||||||
|
63 |
||||||
|
6f |
||||||
|
6e |
||||||
|
73 |
||||||
|
74 |
||||||
|
00 |
||||||
|
5f |
||||||
|
5f |
||||||
|
5f |
||||||
|
5f |
||||||
|
54 |
||||||
|
45 |
||||||
|
58 |
||||||
|
54 |
||||||
|
00 |
||||||
|
5f |
||||||
|
5f |
||||||
|
74 |
||||||
|
65 |
||||||
|
78 |
||||||
|
74 |
||||||
|
00 |
||||||
|
2e |
||||||
|
63 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
3d |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
38 |
||||||
|
01 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
b8 |
||||||
|
01 |
||||||
|
00 |
||||||
|
00 |
||||||
|
07 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
03 |
||||||
|
00 |
||||||
|
80 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
5f |
||||||
|
5f |
||||||
|
64 |
||||||
|
61 |
||||||
|
74 |
||||||
|
61 |
||||||
|
00 |
||||||
|
2e |
||||||
|
73 |
||||||
|
74 |
||||||
|
61 |
||||||
|
74 |
||||||
|
69 |
||||||
|
63 |
||||||
|
5f |
||||||
|
64 |
||||||
|
5f |
||||||
|
5f |
||||||
|
44 |
||||||
|
41 |
||||||
|
54 |
||||||
|
41 |
||||||
|
00 |
||||||
|
5f |
||||||
|
5f |
||||||
|
6d |
||||||
|
6f |
||||||
|
64 |
||||||
|
5f |
||||||
|
69 |
||||||
|
6e |
||||||
|
69 |
||||||
|
3d |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
40 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
75 |
||||||
|
01 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
f0 |
||||||
|
01 |
||||||
|
00 |
||||||
|
00 |
||||||
|
03 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
01 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
5f |
||||||
|
5f |
||||||
|
62 |
||||||
|
73 |
||||||
|
73 |
||||||
|
00 |
||||||
|
2e |
||||||
|
6f |
||||||
|
62 |
||||||
|
6a |
||||||
|
63 |
||||||
|
5f |
||||||
|
63 |
||||||
|
6c |
||||||
|
61 |
||||||
|
73 |
||||||
|
5f |
||||||
|
5f |
||||||
|
44 |
||||||
|
41 |
||||||
|
54 |
||||||
|
41 |
||||||
|
00 |
||||||
|
5f |
||||||
|
5f |
||||||
|
6d |
||||||
|
6f |
||||||
|
64 |
||||||
|
5f |
||||||
|
69 |
||||||
|
6e |
||||||
|
69 |
||||||
|
7d |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
08 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
01 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
02 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
18 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
08 |
||||||
|
02 |
||||||
|
00 |
||||||
|
00 |
||||||
|
0c |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
98 |
||||||
|
02 |
||||||
|
00 |
||||||
|
00 |
||||||
|
70 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
55 |
||||||
|
89 |
||||||
|
e5 |
||||||
|
8b |
||||||
|
45 |
||||||
|
08 |
||||||
|
8b |
||||||
|
4d |
||||||
|
0c |
||||||
|
d1 |
||||||
|
c0 |
||||||
|
e2 |
||||||
|
fc |
||||||
|
89 |
||||||
|
ec |
||||||
|
5d |
||||||
|
c3 |
||||||
|
a1 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
40 |
||||||
|
a3 |
||||||
|
04 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
ff |
||||||
|
35 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
a1 |
||||||
|
71 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
ff |
||||||
|
30 |
||||||
|
ff |
||||||
|
35 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
68 |
||||||
|
4a |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
e8 |
||||||
|
c7 |
||||||
|
ff |
||||||
|
ff |
||||||
|
ff |
||||||
|
83 |
||||||
|
c4 |
||||||
|
10 |
||||||
|
c3 |
||||||
|
68 |
||||||
|
65 |
||||||
|
6c |
||||||
|
6c |
||||||
|
6f |
||||||
|
2c |
||||||
|
20 |
||||||
|
77 |
||||||
|
6f |
||||||
|
72 |
||||||
|
6c |
||||||
|
64 |
||||||
|
00 |
||||||
|
69 |
||||||
|
6e |
||||||
|
74 |
||||||
|
65 |
||||||
|
67 |
||||||
|
65 |
||||||
|
72 |
||||||
|
3d |
||||||
|
3d |
||||||
|
25 |
||||||
|
64 |
||||||
|
2c |
||||||
|
20 |
||||||
|
6c |
||||||
|
6f |
||||||
|
63 |
||||||
|
61 |
||||||
|
6c |
||||||
|
69 |
||||||
|
6e |
||||||
|
74 |
||||||
|
3d |
||||||
|
3d |
||||||
|
25 |
||||||
|
64 |
||||||
|
2c |
||||||
|
20 |
||||||
|
63 |
||||||
|
6f |
||||||
|
6d |
||||||
|
6d |
||||||
|
76 |
||||||
|
61 |
||||||
|
72 |
||||||
|
3d |
||||||
|
25 |
||||||
|
64 |
||||||
|
0a |
||||||
|
00 |
||||||
|
04 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
11 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
79 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
12 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
03 |
||||||
|
00 |
||||||
|
00 |
||||||
|
04 |
||||||
|
18 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
03 |
||||||
|
00 |
||||||
|
00 |
||||||
|
04 |
||||||
|
1e |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
07 |
||||||
|
00 |
||||||
|
00 |
||||||
|
0c |
||||||
|
23 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
02 |
||||||
|
00 |
||||||
|
00 |
||||||
|
04 |
||||||
|
2b |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
03 |
||||||
|
00 |
||||||
|
00 |
||||||
|
04 |
||||||
|
30 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
02 |
||||||
|
00 |
||||||
|
00 |
||||||
|
04 |
||||||
|
35 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
06 |
||||||
|
00 |
||||||
|
00 |
||||||
|
0d |
||||||
|
34 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
03 |
||||||
|
00 |
||||||
|
00 |
||||||
|
04 |
||||||
|
38 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
01 |
||||||
|
00 |
||||||
|
00 |
||||||
|
04 |
||||||
|
3c |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
02 |
||||||
|
00 |
||||||
|
00 |
||||||
|
04 |
||||||
|
01 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
0f |
||||||
|
01 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
0a |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
0f |
||||||
|
01 |
||||||
|
00 |
||||||
|
00 |
||||||
|
11 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
11 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
0f |
||||||
|
02 |
||||||
|
00 |
||||||
|
00 |
||||||
|
3d |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
19 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
0f |
||||||
|
02 |
||||||
|
00 |
||||||
|
00 |
||||||
|
75 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
22 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
0f |
||||||
|
02 |
||||||
|
00 |
||||||
|
00 |
||||||
|
79 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
2b |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
0f |
||||||
|
03 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
34 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
01 |
||||||
|
00 |
||||||
|
01 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
3b |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
01 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
04 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
44 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
0e |
||||||
|
01 |
||||||
|
00 |
||||||
|
00 |
||||||
|
09 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
53 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
0e |
||||||
|
03 |
||||||
|
00 |
||||||
|
00 |
||||||
|
04 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
5c |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
0e |
||||||
|
02 |
||||||
|
00 |
||||||
|
00 |
||||||
|
71 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
65 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
0e |
||||||
|
02 |
||||||
|
00 |
||||||
|
00 |
||||||
|
4a |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
5f |
||||||
|
6c |
||||||
|
72 |
||||||
|
6f |
||||||
|
74 |
||||||
|
61 |
||||||
|
74 |
||||||
|
65 |
||||||
|
00 |
||||||
|
5f |
||||||
|
67 |
||||||
|
72 |
||||||
|
65 |
||||||
|
65 |
||||||
|
74 |
||||||
|
00 |
||||||
|
5f |
||||||
|
61 |
||||||
|
73 |
||||||
|
6d |
||||||
|
73 |
||||||
|
74 |
||||||
|
72 |
||||||
|
00 |
||||||
|
5f |
||||||
|
74 |
||||||
|
65 |
||||||
|
78 |
||||||
|
74 |
||||||
|
70 |
||||||
|
74 |
||||||
|
72 |
||||||
|
00 |
||||||
|
5f |
||||||
|
73 |
||||||
|
65 |
||||||
|
6c |
||||||
|
66 |
||||||
|
70 |
||||||
|
74 |
||||||
|
72 |
||||||
|
00 |
||||||
|
5f |
||||||
|
69 |
||||||
|
6e |
||||||
|
74 |
||||||
|
65 |
||||||
|
67 |
||||||
|
65 |
||||||
|
72 |
||||||
|
00 |
||||||
|
5f |
||||||
|
64 |
||||||
|
72 |
||||||
|
75 |
||||||
|
63 |
||||||
|
6b |
||||||
|
00 |
||||||
|
5f |
||||||
|
63 |
||||||
|
6f |
||||||
|
6d |
||||||
|
6d |
||||||
|
76 |
||||||
|
61 |
||||||
|
72 |
||||||
|
00 |
||||||
|
5f |
||||||
|
6c |
||||||
|
72 |
||||||
|
6f |
||||||
|
74 |
||||||
|
61 |
||||||
|
74 |
||||||
|
65 |
||||||
|
2e |
||||||
|
6c |
||||||
|
61 |
||||||
|
62 |
||||||
|
65 |
||||||
|
6c |
||||||
|
00 |
||||||
|
6c |
||||||
|
6f |
||||||
|
63 |
||||||
|
61 |
||||||
|
6c |
||||||
|
69 |
||||||
|
6e |
||||||
|
74 |
||||||
|
00 |
||||||
|
6c |
||||||
|
6f |
||||||
|
63 |
||||||
|
61 |
||||||
|
6c |
||||||
|
70 |
||||||
|
74 |
||||||
|
72 |
||||||
|
00 |
||||||
|
5f |
||||||
|
70 |
||||||
|
72 |
||||||
|
69 |
||||||
|
6e |
||||||
|
74 |
||||||
|
66 |
||||||
|
73 |
||||||
|
74 |
||||||
|
72 |
||||||
|
00 |
@ -0,0 +1,24 @@ |
|||||||
|
[SECTION .data] |
||||||
|
|
||||||
|
uhoh db 5 |
||||||
|
|
||||||
|
[GLOBAL blah] |
||||||
|
|
||||||
|
blah dw 5 |
||||||
|
[SECTION .text] |
||||||
|
|
||||||
|
[EXTERN hi] |
||||||
|
[EXTERN hi] |
||||||
|
[EXTERN bye] |
||||||
|
mov eax, hi+2 |
||||||
|
mov eax, bye |
||||||
|
mov eax, [hi] |
||||||
|
mov eax, [bye+2] |
||||||
|
mov eax, $$ |
||||||
|
mov eax, $ |
||||||
|
mov eax, $+4 |
||||||
|
mov eax, $-$$ |
||||||
|
;mov eax, uhoh wrt $$ |
||||||
|
;mov eax, hi+bye |
||||||
|
;mov eax, bye+$ |
||||||
|
;mov eax, hi-$ |
@ -0,0 +1,410 @@ |
|||||||
|
ce |
||||||
|
fa |
||||||
|
ed |
||||||
|
fe |
||||||
|
07 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
03 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
01 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
02 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
d8 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
01 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
c0 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
2b |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
f4 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
2b |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
07 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
07 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
02 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
5f |
||||||
|
5f |
||||||
|
74 |
||||||
|
65 |
||||||
|
78 |
||||||
|
74 |
||||||
|
00 |
||||||
|
2e |
||||||
|
63 |
||||||
|
6f |
||||||
|
6e |
||||||
|
73 |
||||||
|
74 |
||||||
|
00 |
||||||
|
5f |
||||||
|
5f |
||||||
|
5f |
||||||
|
5f |
||||||
|
54 |
||||||
|
45 |
||||||
|
58 |
||||||
|
54 |
||||||
|
00 |
||||||
|
5f |
||||||
|
5f |
||||||
|
74 |
||||||
|
65 |
||||||
|
78 |
||||||
|
74 |
||||||
|
00 |
||||||
|
2e |
||||||
|
63 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
28 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
f4 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
20 |
||||||
|
01 |
||||||
|
00 |
||||||
|
00 |
||||||
|
07 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
03 |
||||||
|
00 |
||||||
|
80 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
5f |
||||||
|
5f |
||||||
|
64 |
||||||
|
61 |
||||||
|
74 |
||||||
|
61 |
||||||
|
00 |
||||||
|
2e |
||||||
|
73 |
||||||
|
74 |
||||||
|
61 |
||||||
|
74 |
||||||
|
69 |
||||||
|
63 |
||||||
|
5f |
||||||
|
64 |
||||||
|
5f |
||||||
|
5f |
||||||
|
44 |
||||||
|
41 |
||||||
|
54 |
||||||
|
41 |
||||||
|
00 |
||||||
|
5f |
||||||
|
5f |
||||||
|
6d |
||||||
|
6f |
||||||
|
64 |
||||||
|
5f |
||||||
|
69 |
||||||
|
6e |
||||||
|
69 |
||||||
|
28 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
03 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
1c |
||||||
|
01 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
02 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
18 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
58 |
||||||
|
01 |
||||||
|
00 |
||||||
|
00 |
||||||
|
04 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
88 |
||||||
|
01 |
||||||
|
00 |
||||||
|
00 |
||||||
|
12 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
b8 |
||||||
|
02 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
b8 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
a1 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
a1 |
||||||
|
02 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
b8 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
b8 |
||||||
|
19 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
b8 |
||||||
|
22 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
b8 |
||||||
|
23 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
05 |
||||||
|
05 |
||||||
|
00 |
||||||
|
00 |
||||||
|
01 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
02 |
||||||
|
00 |
||||||
|
00 |
||||||
|
0c |
||||||
|
06 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
03 |
||||||
|
00 |
||||||
|
00 |
||||||
|
0c |
||||||
|
0b |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
02 |
||||||
|
00 |
||||||
|
00 |
||||||
|
0c |
||||||
|
10 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
03 |
||||||
|
00 |
||||||
|
00 |
||||||
|
0c |
||||||
|
15 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
01 |
||||||
|
00 |
||||||
|
00 |
||||||
|
04 |
||||||
|
1a |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
01 |
||||||
|
00 |
||||||
|
00 |
||||||
|
04 |
||||||
|
1f |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
01 |
||||||
|
00 |
||||||
|
00 |
||||||
|
04 |
||||||
|
01 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
0e |
||||||
|
02 |
||||||
|
00 |
||||||
|
00 |
||||||
|
28 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
06 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
0f |
||||||
|
02 |
||||||
|
00 |
||||||
|
00 |
||||||
|
29 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
0b |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
01 |
||||||
|
00 |
||||||
|
01 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
0e |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
01 |
||||||
|
00 |
||||||
|
01 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
00 |
||||||
|
75 |
||||||
|
68 |
||||||
|
6f |
||||||
|
68 |
||||||
|
00 |
||||||
|
62 |
||||||
|
6c |
||||||
|
61 |
||||||
|
68 |
||||||
|
00 |
||||||
|
68 |
||||||
|
69 |
||||||
|
00 |
||||||
|
62 |
||||||
|
79 |
||||||
|
65 |
||||||
|
00 |
@ -0,0 +1,9 @@ |
|||||||
|
# $Id$ |
||||||
|
|
||||||
|
TESTS += modules/objfmts/macho/tests/nasm64/macho64_test.sh |
||||||
|
|
||||||
|
EXTRA_DIST += modules/objfmts/macho/tests/nasm64/machotest64.c |
||||||
|
EXTRA_DIST += modules/objfmts/macho/tests/nasm64/machotest64.asm |
||||||
|
EXTRA_DIST += modules/objfmts/macho/tests/nasm64/machotest64.hex |
||||||
|
EXTRA_DIST += modules/objfmts/macho/tests/nasm64/reloc64-err.asm |
||||||
|
EXTRA_DIST += modules/objfmts/macho/tests/nasm64/reloc64-err.errwarn |
@ -0,0 +1,4 @@ |
|||||||
|
#! /bin/sh |
||||||
|
# $Id$ |
||||||
|
${srcdir}/out_test.sh macho_test modules/objfmts/macho/tests/nasm64 "64-bit macho objfmt" "-f macho64" ".o" |
||||||
|
exit $? |
@ -0,0 +1,107 @@ |
|||||||
|
; test source file for assembling to MACH-O |
||||||
|
; build with : |
||||||
|
; yasm -f macho -m amd64 machotest64.asm |
||||||
|
; gcc -m64 -o machotest64 machotest64.c machotest64.o |
||||||
|
|
||||||
|
; This file should test the following: |
||||||
|
; [1] Define and export a global text-section symbol |
||||||
|
; [2] Define and export a global data-section symbol |
||||||
|
; [3] Define and export a global BSS-section symbol |
||||||
|
; [4] Define a non-global text-section symbol |
||||||
|
; [5] Define a non-global data-section symbol |
||||||
|
; [6] Define a non-global BSS-section symbol |
||||||
|
; [7] Define a COMMON symbol |
||||||
|
; [8] Define a NASM local label |
||||||
|
; [9] Reference a NASM local label |
||||||
|
; [10] Import an external symbol (note: printf replaced by another call) |
||||||
|
; [11] Make a PC-relative call to an external symbol |
||||||
|
; [12] Reference a text-section symbol in the text section |
||||||
|
; [13] Reference a data-section symbol in the text section |
||||||
|
; [14] Reference a BSS-section symbol in the text section |
||||||
|
; [15] Reference a text-section symbol in the data section |
||||||
|
; [16] Reference a data-section symbol in the data section |
||||||
|
; [17] Reference a BSS-section symbol in the data section |
||||||
|
; [18] Perform a 64 Bit relocation in the text section |
||||||
|
|
||||||
|
[BITS 64] |
||||||
|
[GLOBAL _lrotate] ; [1] |
||||||
|
[GLOBAL _greet] ; [1] |
||||||
|
[GLOBAL _asmstr] ; [2] |
||||||
|
[GLOBAL _textptr] ; [2] |
||||||
|
[GLOBAL _selfptr] ; [2] |
||||||
|
[GLOBAL _integer] ; [3] |
||||||
|
[EXTERN _druck] ; [10] |
||||||
|
[COMMON _commvar 4] ; [7] |
||||||
|
[GLOBAL _getstr] ; |
||||||
|
[GLOBAL _readgreet] ; |
||||||
|
|
||||||
|
[SECTION .text] |
||||||
|
|
||||||
|
; prototype: long lrotate(long x, int num); |
||||||
|
_lrotate: ; [1] |
||||||
|
push rcx |
||||||
|
mov rax,rdi |
||||||
|
mov rcx,rsi |
||||||
|
.label rol rax,1 ; [4] [8] |
||||||
|
loop .label ; [9] [12] |
||||||
|
pop rcx |
||||||
|
ret |
||||||
|
|
||||||
|
_getstr: |
||||||
|
mov rax,qword _asmstr |
||||||
|
ret |
||||||
|
|
||||||
|
_readgreet: |
||||||
|
mov rax,[qword localint] ; [18] |
||||||
|
ret |
||||||
|
|
||||||
|
_retrievelabel: |
||||||
|
mov rax,[qword localptr] |
||||||
|
ret |
||||||
|
|
||||||
|
; prototype: void greet(void); |
||||||
|
; calls "void druck(a,b,c,d); |
||||||
|
_greet mov rax,[_integer wrt rip] ; [14] |
||||||
|
inc rax |
||||||
|
mov [localint wrt rip],rax ; [14] |
||||||
|
push rdi |
||||||
|
push rsi |
||||||
|
push rdx |
||||||
|
push rcx |
||||||
|
mov rdi,qword _printfstr |
||||||
|
mov rsi,[_integer wrt rip] |
||||||
|
mov rdx,[localptr wrt rip] |
||||||
|
mov rdx,[rdx] |
||||||
|
mov rcx,[_commvar wrt rip] |
||||||
|
call _druck |
||||||
|
pop rcx |
||||||
|
pop rdx |
||||||
|
pop rsi |
||||||
|
pop rdi |
||||||
|
ret |
||||||
|
|
||||||
|
[SECTION .data] |
||||||
|
|
||||||
|
; a string for Printf |
||||||
|
_printfstr db "integer==%d, localint==%d, commvar=%d" |
||||||
|
db 10, 0 |
||||||
|
|
||||||
|
; some pointers |
||||||
|
localptr dq localint ; [5] [17] |
||||||
|
_textptr dq _greet ; [15] |
||||||
|
_selfptr dq _selfptr ; [16] |
||||||
|
|
||||||
|
;[section .data2 align=16] |
||||||
|
|
||||||
|
; a string |
||||||
|
_asmstr db 'hello, world', 0 ; [2] |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[SECTION .bss] |
||||||
|
|
||||||
|
; an integer |
||||||
|
_integer resq 1 ; [3] |
||||||
|
|
||||||
|
; a local integer |
||||||
|
localint resq 1 ; [6] |
@ -0,0 +1,56 @@ |
|||||||
|
/*
|
||||||
|
* test source file for assembling to Mach-O
|
||||||
|
* copied from cofftest.c, adapted to current limitations
|
||||||
|
* in Mach-O module |
||||||
|
* build with (under OSX Tiger/Leopard, for example): |
||||||
|
* yasm -f macho -m amd64 machotest64.asm |
||||||
|
* gcc -m64 -o machotest64 machotest64.c machotest64.o |
||||||
|
*/ |
||||||
|
|
||||||
|
#include <stdio.h> |
||||||
|
|
||||||
|
extern long lrotate(long, long); |
||||||
|
extern void greet(void); |
||||||
|
extern long readgreet(void); |
||||||
|
extern char asmstr[]; |
||||||
|
extern void *selfptr; |
||||||
|
extern void *textptr; |
||||||
|
extern int integer, commvar; |
||||||
|
extern char *getstr(void); |
||||||
|
|
||||||
|
int main(void) { |
||||||
|
|
||||||
|
printf("Testing lrotate: should get 0x0000000000400000, 0x0000000000000001\n"); |
||||||
|
printf("lrotate(0x00040000, 4 ) = 0x%016lx\n", lrotate(0x40000,4)); |
||||||
|
printf("lrotate(0x00040000, 46) = 0x%016lx\n", lrotate(0x40000,46)); |
||||||
|
|
||||||
|
printf("This string should read `hello, world': `%s'\n", asmstr); |
||||||
|
{ |
||||||
|
long a,b; |
||||||
|
a = (long)asmstr; |
||||||
|
b = (long)getstr(); |
||||||
|
printf("The pointers %lx and %lx should be equal\n",a,b); |
||||||
|
} |
||||||
|
printf("This string should read `hello, world': `%s'\n", getstr()); |
||||||
|
|
||||||
|
printf("The integers here should be 1234, 1235 and 4321:\n"); |
||||||
|
integer = 1234; |
||||||
|
commvar = 4321; |
||||||
|
greet(); |
||||||
|
printf("The absolute addressing to the asm-local integer should yield in 1235:\n%ld\n",readgreet()); |
||||||
|
|
||||||
|
printf("These pointers should be equal: %p and %p\n", |
||||||
|
&greet, textptr); |
||||||
|
|
||||||
|
printf("So should these: %p and %p\n", selfptr, &selfptr); |
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
there is no support for dynamically linkable objects in current |
||||||
|
mach-o module. Therefore put "printf" statement here and redirect
|
||||||
|
the asm call to druck() |
||||||
|
*/ |
||||||
|
void druck( char *string, int a, int b, int c ) |
||||||
|
{ |
||||||
|
printf(string,a,b,c); |
||||||
|
} |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,33 @@ |
|||||||
|
[BITS 64] |
||||||
|
[SECTION .data] |
||||||
|
|
||||||
|
uhoh db 5 |
||||||
|
|
||||||
|
[GLOBAL blah] |
||||||
|
|
||||||
|
blah dw 5 |
||||||
|
[GLOBAL aha] |
||||||
|
aha dq blah |
||||||
|
aha2 dq blah+4 |
||||||
|
aha3 dq blah-uhoh |
||||||
|
|
||||||
|
[SECTION .text] |
||||||
|
|
||||||
|
[EXTERN hi] |
||||||
|
[EXTERN hi] |
||||||
|
[EXTERN bye] |
||||||
|
[BITS 64] |
||||||
|
mov rax, hi+2 |
||||||
|
mov rax, bye |
||||||
|
mov rax, [qword hi] |
||||||
|
mov rdi, [rip+ hi] |
||||||
|
mov rax, [bye+2] |
||||||
|
mov rax, $$ |
||||||
|
mov rax, $ |
||||||
|
mov rax, $+4 |
||||||
|
; the line below crashes yasm... |
||||||
|
; mov rax, $-$$ |
||||||
|
;mov eax, uhoh wrt $$ |
||||||
|
;mov eax, hi+bye |
||||||
|
;mov eax, bye+$ |
||||||
|
;mov eax, hi-$ |
@ -0,0 +1,2 @@ |
|||||||
|
-:20: macho: sorry, cannot apply 32 bit absolute relocations in 64 bit mode. |
||||||
|
|
Loading…
Reference in new issue