Tool Comparison: Difference between revisions
Jump to navigation
Jump to search
[unchecked revision] | [unchecked revision] |
Content deleted Content added
No edit summary |
m use cite extension |
||
(27 intermediate revisions by 13 users not shown) | |||
Line 6: | Line 6: | ||
! |
! |
||
! colspan="2" | Syntax |
! colspan="2" | Syntax |
||
! colspan=" |
! colspan="4" | Output Format |
||
! colspan="3" | Instruction Set |
! colspan="3" | Instruction Set |
||
|- |
|- |
||
Line 14: | Line 14: | ||
! [[ELF]] |
! [[ELF]] |
||
! [[a.out]] |
! [[a.out]] |
||
! [[COFF]] |
|||
! flat |
! flat |
||
! 16 bit |
! 16 bit |
||
Line 21: | Line 22: | ||
! [[GAS]] |
! [[GAS]] |
||
| {{Yes}} |
| {{Yes}} |
||
| {{Yes}} |
| {{Yes}}<ref name="note1" group="Note" /> |
||
| {{Yes}} |
| {{Yes}} |
||
| {{Yes}} |
| {{Yes}} |
||
| {{Yes}} |
| {{Yes}} |
||
| {{Yes}}{{ref|2}} |
|||
| {{Yes}} |
| {{Yes}} |
||
| {{Yes}} |
| {{Yes}}<ref name="note2" group="Note" /> |
||
| {{Yes}} |
|||
| {{Yes}}<ref name="note3" group="Note" /> |
|||
|- |
|- |
||
! [[NASM]] |
! [[NASM]] |
||
Line 37: | Line 39: | ||
| {{Yes}} |
| {{Yes}} |
||
| {{Yes}} |
| {{Yes}} |
||
| {{Yes |
| {{Yes}} |
||
| {{Yes}}<ref name="note4" group="Note" /> |
|||
|- |
|- |
||
! [[YASM]] |
! [[YASM]] |
||
Line 44: | Line 47: | ||
| {{Yes}} |
| {{Yes}} |
||
| {{No}} |
| {{No}} |
||
| {{Yes}} |
|||
| {{Yes}} |
| {{Yes}} |
||
| {{Yes}} |
| {{Yes}} |
||
Line 54: | Line 58: | ||
| {{Yes}} |
| {{Yes}} |
||
| {{No}} |
| {{No}} |
||
| {{Yes}} |
|||
| {{Yes}} |
| {{Yes}} |
||
| {{Yes}} |
| {{Yes}} |
||
Line 67: | Line 72: | ||
| {{Yes}} |
| {{Yes}} |
||
| {{Yes}} |
| {{Yes}} |
||
| {{Yes}} |
|||
| {{Yes}} |
|||
|- |
|||
! [[MASM]]<ref name="note5" group="Note" /> |
|||
| {{No}} |
| {{No}} |
||
| {{Yes}} |
|||
| {{No}} |
|||
| {{No}} |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
| {{Yes}}<ref name="note6" group="Note" /> |
|||
|- |
|- |
||
! [[Sol_asm]] |
! [[Sol_asm]] |
||
| {{No}} |
| {{No}} |
||
| {{Yes |
| {{Yes}} |
||
| {{Yes}} |
| {{Yes}} |
||
| {{No}} |
| {{No}} |
||
| n/a |
|||
| {{Yes}} |
| {{Yes}} |
||
| {{Yes}} |
| {{Yes}} |
||
| {{Yes}} |
|||
| {{Yes}} |
|||
|- |
|||
! [[AS86]] |
|||
| {{No}} |
|||
| {{Yes}} |
|||
| {{No}} |
|||
| {{No}} |
|||
| {{No}} |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
| {{No}} |
|||
|- |
|||
! [[LLVM|llvm-mc]] |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
| {{No}} |
|||
| {{No}} |
|||
| {{Yes}} |
| {{Yes}} |
||
| {{Yes}} |
| {{Yes}} |
||
|} |
|} |
||
<references group="Note"> |
|||
* {{note|1}} using the <code>.intel_syntax</code> directive. Several opcodes will still use the AT&T name. |
|||
<ref name="note1">Using the <code>.intel_syntax</code> directive. Several opcodes will still use the AT&T name.</ref> |
|||
* {{note|2}} While GAS normally writes only "pure" 32-bit i386 code, it has [http://sourceware.org/binutils/docs/as/i386_002d16bit.html#i386_002d16bit limited support] for writing code to run in real mode or in 16-bit protected mode code segments. |
|||
<ref name="note2">While GAS normally writes only "pure" 32-bit i386 code, it has [http://sourceware.org/binutils/docs/as/i386_002d16bit.html limited support] for writing code to run in real mode or in 16-bit protected mode code segments.</ref> |
|||
* {{note|3}} You have to choose the instruction set at compile time. GAS can not assemble for more than one operating mode at a time. |
|||
<ref name="note3">You have to choose the instruction set at compile time (of the assembler). GAS can not assemble for more than one operating mode at a time, i.e. you would need one GAS for 32bit and one GAS for 64bit if you'd want to mix those two.</ref> |
|||
* {{note|4}} 64-bit support is only available in NASM 2.x. |
|||
<ref name="note4">64-bit support is only available in NASM 2.x.</ref> |
|||
* {{note|5}} Sol_Asm uses its own syntax, which looks like the Intel syntax. |
|||
<ref name="note5">64-bit support is only available in a separate executable, named ml64.</ref> |
|||
<ref name="note6">Sol_Asm uses its own syntax, which looks like the Intel syntax.</ref> |
|||
</references> |
|||
==Compilers== |
==Compilers== |
||
Line 91: | Line 134: | ||
! |
! |
||
! Extensions |
! Extensions |
||
! colspan= |
! colspan=8 | Output format |
||
|- |
|- |
||
! |
! |
||
Line 99: | Line 142: | ||
! flat |
! flat |
||
! [[PE]] |
! [[PE]] |
||
! COFF |
|||
! 16-bit code segments |
|||
! 32-bit code segments |
|||
! 64-bit code segments |
|||
|- |
|- |
||
! |
! [[GCC]] |
||
| {{Yes}} |
| {{Yes}} |
||
| {{Yes}} |
| {{Yes}} |
||
| {{Yes}} |
| {{Yes}} |
||
| {{Yes}} |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
| ? |
|||
| {{Yes}} |
| {{Yes}} |
||
| {{Yes}} |
| {{Yes}} |
||
|- |
|- |
||
! [[LLVM|Clang]] |
|||
! Visual Studio |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
| {{Yes}} |
| {{Yes}} |
||
| {{No}} |
| {{No}} |
||
| {{Yes}} |
|||
| {{Yes}} |
|||
| {{No}} |
| {{No}} |
||
| {{No}}{{Ref|4}} |
|||
| {{Yes}} |
| {{Yes}} |
||
| {{Yes}} |
|||
|- |
|||
! msvc |
|||
| {{Yes}} |
|||
| {{No}} |
|||
| {{No}} |
|||
| {{No}}<ref name="note7" group="Note" /> |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
| Version 4.X |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
|- |
|||
! icl |
|||
| {{Yes}} |
|||
| {{No}} |
|||
| {{No}} |
|||
| {{No}} |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
| {{No}} |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
|- |
|||
! [[Watcom]] |
|||
| {{Yes}} |
|||
| {{No}} |
|||
| {{No}} |
|||
| {{No}} |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
|- |
|||
! [[Smaller C]] |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
| {{No}} |
|||
| {{Yes}} (incl. huge & unreal mode(l)s)<ref name="note8" group="Note" /> |
|||
| {{Yes}} |
|||
| {{No}} |
|||
|} |
|} |
||
<references group="Note"> |
|||
* {{Note|4}} Visual Studio can emit <code>.COM</code> files. |
|||
<ref name="note7">Visual Studio can emit <code>.COM</code> files.</ref> |
|||
<ref name="note8">Smaller C [https://github.com/alexfru/SmallerC/pull/25#issuecomment-516694067| wasn't really designed to properly support 16-bit and 64-bit CPUs].</ref> |
|||
</references> |
|||
==Linkers== |
==Linkers== |
||
{| {{wikitable}} |
{| {{wikitable}} |
||
|- |
|- |
||
! Name |
! rowspan=2 | Name |
||
! colspan=5 | Input |
|||
! OMF/OBJ |
|||
! colspan=5 | Output |
|||
! Input |
|||
! rowspan=2 | Flat Binary Images |
|||
! Output |
|||
! rowspan=2 | Set Code Address |
|||
! Flat Binary Images |
|||
! rowspan=2 | Library Support |
|||
! Set Code Address |
|||
! rowspan=2 | Supports Debug Info |
|||
! Library Support |
|||
! rowspan=2 | 32bit Code |
|||
! Supports Debug Info |
|||
|- |
|||
! 32bit Code |
|||
! OMF/ OBJ |
|||
! Win32/ COFF |
|||
! ELF |
|||
! A.OUT |
|||
! Others |
|||
! Win32/ PE |
|||
! Win32/ DLL |
|||
! ELF |
|||
! A.OUT |
|||
! Others |
|||
|- |
|- |
||
! [[JLoc]] |
! [[JLoc]] |
||
| {{Yes}} |
| {{Yes}} |
||
| |
| |
||
| |
|||
| |
|||
| |
|||
| {{No}} |
|||
| {{No}} |
|||
| {{No}} |
|||
| {{No}} |
|||
| DOS/COM |
| DOS/COM |
||
| {{Yes}} |
| {{Yes}} |
||
Line 142: | Line 261: | ||
! [[ALink]] |
! [[ALink]] |
||
| {{Yes}} |
| {{Yes}} |
||
| {{Yes}} |
|||
| Win32/COFF DJGPP/COFF |
|||
| {{No}} |
|||
| DOS/COM DOS/EXE Win32/PE Win32/DLL |
|||
| {{No}} |
|||
| DJGPP/COFF |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
| {{No}} |
|||
| {{No}} |
|||
| DOS/COM DOS/EXE |
|||
| {{No}} |
| {{No}} |
||
| {{Yes}} |
| {{Yes}} |
||
Line 152: | Line 278: | ||
! [[LD]] |
! [[LD]] |
||
| {{Yes}} |
| {{Yes}} |
||
| {{Yes}} |
|||
| OMF/COFF DJGPP/COFF Win32/COFF A.OUT ELF |
|||
| {{Yes}} |
|||
| ELF A.OUT Win32/PE Win32/DLL +more |
|||
| {{Yes}} |
|||
| DJGPP/COFF OMF/COFF |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
| various |
|||
| {{Yes}} |
| {{Yes}} |
||
| {{Yes}} |
| {{Yes}} |
||
Line 162: | Line 295: | ||
! [[TLink]] |
! [[TLink]] |
||
| {{Yes}} |
| {{Yes}} |
||
| {{Yes}} |
|||
| Win32/COFF |
|||
| {{No}} |
|||
| DOS/EXE DOS/COM Win32/DLL Win32/PE |
|||
| {{No}} |
|||
| |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
| {{No}} |
|||
| {{No}} |
|||
| DOS/EXE DOS/COM |
|||
| {{No}} |
| {{No}} |
||
| {{Yes}} |
| {{Yes}} |
||
Line 172: | Line 312: | ||
! [[Link]] |
! [[Link]] |
||
| {{Yes}} |
| {{Yes}} |
||
| {{Yes}} |
|||
| Win32/COFF |
|||
| {{No}} |
|||
| DOS/EXE DOS/COM Win32/PE Win32/DLL LE |
|||
| {{No}} |
|||
| |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
| {{No}} |
|||
| {{No}} |
|||
| DOS/EXE DOS/COM LE |
|||
| {{No}} |
| {{No}} |
||
| {{Yes}} |
| {{Yes}} |
||
Line 183: | Line 330: | ||
| {{Yes}} |
| {{Yes}} |
||
| |
| |
||
| |
|||
| |
|||
| |
|||
| {{No}} |
|||
| {{No}} |
|||
| {{No}} |
|||
| {{No}} |
|||
| DOS/EXE |
| DOS/EXE |
||
| {{No}} |
| {{No}} |
||
Line 192: | Line 346: | ||
! [[WLink]] |
! [[WLink]] |
||
| {{Yes}} |
| {{Yes}} |
||
| {{Yes}} |
|||
| Win32/COFF ELF |
|||
| {{Yes}} |
|||
| DOS/EXE DOS/COM LE ELF Win32/PE Win32/DLL Pharlap Novell_NLM Causeway QNX |
|||
| {{No}} |
|||
| |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
| {{No}} |
|||
| DOS/EXE DOS/COM LE Pharlap Novell_NLM Causeway QNX |
|||
| {{Yes}} |
| {{Yes}} |
||
| {{Yes}} |
| {{Yes}} |
||
| {{Yes}} |
| {{Yes}} |
||
| WATCOM CODEVIEW DWARF |
| WATCOM CODEVIEW DWARF |
||
| {{Yes}} |
|||
|- |
|||
! [[smlrl]] |
|||
| {{No}} |
|||
| {{No}} |
|||
| {{Yes}} |
|||
| {{No}} |
|||
| |
|||
| {{Yes}} |
|||
| {{No}} |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
| DOS/COM DOS/EXE MACH-O |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
| {{No}} |
|||
| {{Yes}} |
|||
|- |
|||
! [[LLVM|LLD]] |
|||
| |
|||
| {{Yes}} |
|||
| {{Yes}} |
|||
| |
|||
| |
|||
| |
|||
| |
|||
| |
|||
| |
|||
| |
|||
| |
|||
| |
|||
| {{Yes}} |
|||
| |
|||
| {{Yes}} |
| {{Yes}} |
||
|} |
|} |
Latest revision as of 11:53, 17 June 2024
This is a comparison of various operating system development tools.
x86 Assemblers
Syntax | Output Format | Instruction Set | |||||||
---|---|---|---|---|---|---|---|---|---|
AT&T | Intel | ELF | a.out | COFF | flat | 16 bit | 32 bit | 64 bit | |
GAS | Yes | Yes[Note 1] | Yes | Yes | Yes | Yes | Yes[Note 2] | Yes | Yes[Note 3] |
NASM | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes[Note 4] |
YASM | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes |
FASM | No | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes |
JWASM | No | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes |
MASM[Note 5] | No | Yes | No | No | Yes | Yes | Yes | Yes | Yes[Note 6] |
Sol_asm | No | Yes | Yes | No | n/a | Yes | Yes | Yes | Yes |
AS86 | No | Yes | No | No | No | Yes | Yes | Yes | No |
llvm-mc | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes |
- ↑ Using the
.intel_syntax
directive. Several opcodes will still use the AT&T name. - ↑ While GAS normally writes only "pure" 32-bit i386 code, it has limited support for writing code to run in real mode or in 16-bit protected mode code segments.
- ↑ You have to choose the instruction set at compile time (of the assembler). GAS can not assemble for more than one operating mode at a time, i.e. you would need one GAS for 32bit and one GAS for 64bit if you'd want to mix those two.
- ↑ 64-bit support is only available in NASM 2.x.
- ↑ 64-bit support is only available in a separate executable, named ml64.
- ↑ Sol_Asm uses its own syntax, which looks like the Intel syntax.
Compilers
Extensions | Output format | ||||||||
---|---|---|---|---|---|---|---|---|---|
Inline Assembly | ELF | a.out | flat | PE | COFF | 16-bit code segments | 32-bit code segments | 64-bit code segments | |
GCC | Yes | Yes | Yes | Yes | Yes | Yes | ? | Yes | Yes |
Clang | Yes | Yes | Yes | No | Yes | Yes | No | Yes | Yes |
msvc | Yes | No | No | No[Note 1] | Yes | Yes | Version 4.X | Yes | Yes |
icl | Yes | No | No | No | Yes | Yes | No | Yes | Yes |
Watcom | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes |
Smaller C | Yes | Yes | Yes | Yes | Yes | No | Yes (incl. huge & unreal mode(l)s)[Note 2] | Yes | No |
- ↑ Visual Studio can emit
.COM
files. - ↑ Smaller C wasn't really designed to properly support 16-bit and 64-bit CPUs.
Linkers
Name | Input | Output | Flat Binary Images | Set Code Address | Library Support | Supports Debug Info | 32bit Code | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
OMF/ OBJ | Win32/ COFF | ELF | A.OUT | Others | Win32/ PE | Win32/ DLL | ELF | A.OUT | Others | ||||||
JLoc | Yes | No | No | No | No | DOS/COM | Yes | Yes | No | OMF/OBJ | Yes | ||||
ALink | Yes | Yes | No | No | DJGPP/COFF | Yes | Yes | No | No | DOS/COM DOS/EXE | No | Yes | Yes | No | Yes |
LD | Yes | Yes | Yes | Yes | DJGPP/COFF OMF/COFF | Yes | Yes | Yes | Yes | various | Yes | Yes | Yes | ECOFF DWARF STABS | Yes |
TLink | Yes | Yes | No | No | Yes | Yes | No | No | DOS/EXE DOS/COM | No | Yes | Yes | OMF/OBJ | Yes | |
Link | Yes | Yes | No | No | Yes | Yes | No | No | DOS/EXE DOS/COM LE | No | Yes | Yes | CODEVIEW DWARF | Yes | |
VAL | Yes | No | No | No | No | DOS/EXE | No | No | No | Yes | No | ||||
WLink | Yes | Yes | Yes | No | Yes | Yes | Yes | No | DOS/EXE DOS/COM LE Pharlap Novell_NLM Causeway QNX | Yes | Yes | Yes | WATCOM CODEVIEW DWARF | Yes | |
smlrl | No | No | Yes | No | Yes | No | Yes | Yes | DOS/COM DOS/EXE MACH-O | Yes | Yes | Yes | No | Yes | |
LLD | Yes | Yes | Yes | Yes |