fbpx
Wikipedia

Fat binary

A fat binary (or multiarchitecture binary) is a computer executable program or library which has been expanded (or "fattened") with code native to multiple instruction sets which can consequently be run on multiple processor types.[1] This results in a file larger than a normal one-architecture binary file, thus the name.

The usual method of implementation is to include a version of the machine code for each instruction set, preceded by a single entry point with code compatible with all operating systems, which executes a jump to the appropriate section. Alternative implementations store different executables in different forks, each with its own entry point that is directly used by the operating system.

The use of fat binaries is not common in operating system software; there are several alternatives to solve the same problem, such as the use of an installer program to choose an architecture-specific binary at install time (such as with Android multiple APKs), selecting an architecture-specific binary at runtime (such as with Plan 9's union directories and GNUstep's fat bundles),[2][3] distributing software in source code form and compiling it in-place, or the use of a virtual machine (such as with Java) and just-in-time compilation.

Apollo edit

Apollo's compound executables edit

In 1988, Apollo Computer's Domain/OS SR10.1 introduced a new file type, "cmpexe" (compound executable), that bundled binaries for Motorola 680x0 and Apollo PRISM executables.[4]

Apple edit

Apple's fat binary edit

A fat-binary scheme smoothed the Apple Macintosh's transition, beginning in 1994, from 68k microprocessors to PowerPC microprocessors. Many applications for the old platform ran transparently on the new platform under an evolving emulation scheme, but emulated code generally runs slower than native code. Applications released as "fat binaries" took up more storage space, but they ran at full speed on either platform. This was achieved by packaging both a 68000-compiled version and a PowerPC-compiled version of the same program into their executable files.[5][6] The older 68K code (CFM-68K or classic 68K) continued to be stored in the resource fork, while the newer PowerPC code was contained in the data fork, in PEF format.[7][8][9]

Fat binaries were larger than programs supporting only the PowerPC or 68k, which led to the creation of a number of utilities that would strip out the unneeded version.[5][6] In the era of small hard drives, when 80 MB hard drives were a common size, these utilities were sometimes useful, as program code was generally a large percentage of overall drive usage, and stripping the unneeded members of a fat binary would free up a significant amount of space on a hard drive.

NeXT's/Apple's multi-architecture binaries edit

NeXTSTEP Multi-Architecture Binaries edit

Fat binaries were a feature of NeXT's NeXTSTEP/OPENSTEP operating system, starting with NeXTSTEP 3.1. In NeXTSTEP, they were called "Multi-Architecture Binaries". Multi-Architecture Binaries were originally intended to allow software to be compiled to run both on NeXT's Motorola 68k-based hardware and on Intel IA-32-based PCs running NeXTSTEP, with a single binary file for both platforms.[10] It was later used to allow OPENSTEP applications to run on PCs and the various RISC platforms OPENSTEP supported. Multi-Architecture Binary files are in a special archive format, in which a single file stores one or more Mach-O subfiles for each architecture supported by the Multi-Architecture Binary. Every Multi-Architecture Binary starts with a structure (struct fat_header) containing two unsigned integers. The first integer ("magic") is used as a magic number to identify this file as a Fat Binary. The second integer (nfat_arch) defines how many Mach-O Files the archive contains (how many instances of the same program for different architectures). After this header, there are nfat_arch number of fat_arch structures (struct fat_arch). This structure defines the offset (from the start of the file) at which to find the file, the alignment, the size and the CPU type and subtype which the Mach-O binary (within the archive) is targeted at.

The version of the GNU Compiler Collection shipped with the Developer Tools was able to cross-compile source code for the different architectures on which NeXTStep was able to run. For example, it was possible to choose the target architectures with multiple '-arch' options (with the architecture as argument). This was a convenient way to distribute a program for NeXTStep running on different architectures.

It was also possible to create libraries (e.g. using NeXTStep's libtool) with different targeted object files.

Mach-O and Mac OS X edit

Apple Computer acquired NeXT in 1996 and continued to work with the OPENSTEP code. Mach-O became the native object file format in Apple's free Darwin operating system (2000) and Apple's Mac OS X (2001), and NeXT's Multi-Architecture Binaries continued to be supported by the operating system. Under Mac OS X, Multi-Architecture Binaries can be used to support multiple variants of an architecture, for instance to have different versions of 32-bit code optimized for the PowerPC G3, PowerPC G4, and PowerPC 970 generations of processors. It can also be used to support multiple architectures, such as 32-bit and 64-bit PowerPC, or PowerPC and x86, or x86-64 and ARM64.[11]

Apple's Universal binary edit

 
Apple Universal binary logo

In 2005, Apple announced another transition, from PowerPC processors to Intel x86 processors. Apple promoted the distribution of new applications that support both PowerPC and x86 natively by using executable files in Multi-Architecture Binary format.[12] Apple calls such programs "Universal applications" and calls the file format "Universal binary" as perhaps a way to distinguish this new transition from the previous transition, or other uses of Multi-Architecture Binary format.

Universal binary format was not necessary for forward migration of pre-existing native PowerPC applications; from 2006 to 2011, Apple supplied Rosetta, a PowerPC (PPC)-to-x86 dynamic binary translator, to play this role. However, Rosetta had a fairly steep performance overhead, so developers were encouraged to offer both PPC and Intel binaries, using Universal binaries. The obvious cost of Universal binary is that every installed executable file is larger, but in the years since the release of the PPC, hard-drive space has greatly outstripped executable size; while a Universal binary might be double the size of a single-platform version of the same application, free-space resources generally dwarf the code size, which becomes a minor issue. In fact, often a Universal-binary application will be smaller than two single-architecture applications because program resources can be shared rather than duplicated. If not all of the architectures are required, the lipo and ditto command-line applications can be used to remove versions from the Multi-Architecture Binary image, thereby creating what is sometimes called a thin binary.

In addition, Multi-Architecture Binary executables can contain code for both 32-bit and 64-bit versions of PowerPC and x86, allowing applications to be shipped in a form that supports 32-bit processors but that makes use of the larger address space and wider data paths when run on 64-bit processors.

In versions of the Xcode development environment from 2.1 through 3.2 (running on Mac OS X 10.4 through Mac OS X 10.6), Apple included utilities which allowed applications to be targeted for both Intel and PowerPC architecture; universal binaries could eventually contain up to four versions of the executable code (32-bit PowerPC, 32-bit x86, 64-bit PowerPC, and 64-bit x86). However, PowerPC support was removed from Xcode 4.0 and is therefore not available to developers running Mac OS X 10.7 or greater.

In 2020, Apple announced another transition, this time from Intel x86 processors to Apple silicon (ARM64 architecture). To smooth the transition Apple added support for the Universal 2 binary format; Universal 2 binary files are Multi-Architecture Binary files containing both x86-64 and ARM64 executable code, allowing the binary to run natively on both 64-bit Intel and 64-bit Apple silicon. Additionally, Apple introduced Rosetta 2 dynamic binary translation for x86 to Arm64 instruction set to allow users to run applications that do not have Universal binary variants.

Apple Fat EFI binary edit

In 2006, Apple switched from PowerPC to Intel CPUs, and replaced Open Firmware with EFI. However, by 2008, some of their Macs used 32-bit EFI and some used 64-bit EFI. For this reason, Apple extended the EFI specification with "fat" binaries that contained both 32-bit and 64-bit EFI binaries.[13]

CP/M and DOS edit

Combined COM-style binaries for CP/M-80 and DOS edit

CP/M-80, MP/M-80, Concurrent CP/M, CP/M Plus, Personal CP/M-80, SCP and MSX-DOS executables for the Intel 8080 (and Z80) processor families use the same .COM file extension as DOS-compatible operating systems for Intel 8086 binaries.[nb 1] In both cases programs are loaded at offset +100h and executed by jumping to the first byte in the file.[14][15] As the opcodes of the two processor families are not compatible, attempting to start a program under the wrong operating system leads to incorrect and unpredictable behaviour.

In order to avoid this, some methods have been devised to build fat binaries which contain both a CP/M-80 and a DOS program, preceded by initial code which is interpreted correctly on both platforms.[15] The methods either combine two fully functional programs each built for their corresponding environment, or add stubs which cause the program to exit gracefully if started on the wrong processor. For this to work, the first few instructions (sometimes also called gadget headers[16]) in the .COM file have to be valid code for both 8086 and 8080 processors, which would cause the processors to branch into different locations within the code.[16] For example, the utilities in Simeon Cran's emulator MyZ80 start with the opcode sequence EBh, 52h, EBh.[17][18] An 8086 sees this as a jump and reads its next instruction from offset +154h whereas an 8080 or compatible processor goes straight through and reads its next instruction from +103h. A similar sequence used for this purpose is EBh, 03h, C3h.[19][20] John C. Elliott's FATBIN[21][22][23] is a utility to combine a CP/M-80 and a DOS .COM file into one executable.[17][24] His derivative of the original PMsfx modifies archives created by Yoshihiko Mino's PMarc to be self-extractable under both, CP/M-80 and DOS, starting with EBh, 18h, 2Dh, 70h, 6Dh, 73h, 2Dh to also include the "-pms-" signature for self-extracting PMA archives,[25][17][24][18] thereby also representing a form of executable ASCII code.

Another method to keep a DOS-compatible operating system from erroneously executing .COM programs for CP/M-80 and MSX-DOS machines[15] is to start the 8080 code with C3h, 03h, 01h, which is decoded as a "RET" instruction by x86 processors, thereby gracefully exiting the program,[nb 2] while it will be decoded as "JP 103h" instruction by 8080 processors and simply jump to the next instruction in the program. Similar, the CP/M assembler Z80ASM+ by SLR Systems would display an error message when erroneously run on DOS.[17]

Some CP/M-80 3.0 .COM files may have one or more RSX overlays attached to them by GENCOM.[26] If so, they start with an extra 256-byte header (one page). In order to indicate this, the first byte in the header is set to magic byte C9h, which works both as a signature identifying this type of COM file to the CP/M 3.0 executable loader, as well as a "RET" instruction for 8080-compatible processors which leads to a graceful exit if the file is executed under older versions of CP/M-80.[nb 2]

C9h is never appropriate as the first byte of a program for any x86 processor (it has different meanings for different generations,[nb 3] but is never a meaningful first byte); the executable loader in some versions of DOS rejects COM files that start with C9h, avoiding incorrect operation.

Similar overlapping code sequences have also been devised for combined Z80/6502,[17] 8086/68000[17] or x86/MIPS/ARM binaries.[16]

Combined binaries for CP/M-86 and DOS edit

CP/M-86 and DOS do not share a common file extension for executables.[nb 1] Thus, it is not normally possible to confuse executables. However, early versions of DOS had so much in common with CP/M in terms of its architecture that some early DOS programs were developed to share binaries containing executable code. One program known to do this was WordStar 3.2x, which used identical overlay files in their ports for CP/M-86 and MS-DOS,[27] and used dynamically fixed-up code to adapt to the differing calling conventions of these operating systems at runtime.[27]

Digital Research's GSX for CP/M-86 and DOS also shares binary identical 16-bit drivers.[28]

Combined COM and SYS files edit

DOS device drivers (typically with file extension .SYS) start with a file header whose first four bytes are FFFFFFFFh by convention, although this is not a requirement.[29] This is fixed up dynamically by the operating system when the driver loads (typically in the DOS BIOS when it executes DEVICE statements in CONFIG.SYS). Since DOS does not reject files with a .COM extension to be loaded per DEVICE and does not test for FFFFFFFFh, it is possible to combine a COM program and a device driver into the same file[30][29] by placing a jump instruction to the entry point of the embedded COM program within the first four bytes of the file (three bytes are usually sufficient).[29] If the embedded program and the device driver sections share a common portion of code, or data, it is necessary for the code to deal with being loaded at offset +0100h as a .COM style program, and at +0000h as a device driver.[30] For shared code loaded at the "wrong" offset but not designed to be position-independent, this requires an internal address fix-up[30] similar to what would otherwise already have been carried out by a relocating loader, except for that in this case it has to be done by the loaded program itself; this is similar to the situation with self-relocating drivers but with the program already loaded at the target location by the operating system's loader.

Crash-protected system files edit

Under DOS, some files, by convention, have file extensions which do not reflect their actual file type.[nb 4] For example, COUNTRY.SYS[31] is not a DOS device driver,[nb 5] but a binary NLS database file for use with the CONFIG.SYS COUNTRY directive and the NLSFUNC driver.[31] Likewise, the PC DOS and DR-DOS system files IBMBIO.COM and IBMDOS.COM are special binary images loaded by bootstrap loaders, not COM-style programs.[nb 5] Trying to load COUNTRY.SYS with a DEVICE statement or executing IBMBIO.COM or IBMDOS.COM at the command prompt will cause unpredictable results.[nb 4][nb 6]

It is sometimes possible to avoid this by utilizing techniques similar to those described above. For example, DR-DOS 7.02 and higher incorporate a safety feature developed by Matthias R. Paul:[32] If these files are called inappropriately, tiny embedded stubs will just display some file version information and exit gracefully.[33][32][34][31] Additionally, the message is specifically crafted to follow certain "magic" patterns recognized by the external NetWare & DR-DOS VERSION file identification utility.[31][32][nb 7]

A similar protection feature was the 8080 instruction C7h ("RST 0") at the very start of Jay Sage's and Joe Wright's Z-System type-3 and type-4 "Z3ENV" programs[35][36] as well as "Z3TXT" language overlay files,[37] which would result in a warm boot (instead of a crash) under CP/M-80 if loaded inappropriately.[35][36][37][nb 2]

In a distantly similar fashion, many (binary) file formats by convention include a 1Ah byte (ASCII ^Z) near the beginning of the file. This control character will be interpreted as "soft" end-of-file (EOF) marker when a file is opened in non-binary mode, and thus, under many operating systems (including the PDP-6 monitor[38] and RT-11, VMS, TOPS-10,[39] CP/M,[40][41] DOS,[42] and Windows[43]), it prevents "binary garbage" from being displayed when a file is accidentally printed at the console.

Linux edit

FatELF: Universal binaries for Linux edit

 
FatELF logo

FatELF[44] was a fat binary implementation for Linux and other Unix-like operating systems. Technically, a FatELF binary was a concatenation of ELF binaries with some meta data indicating which binary to use on what architecture.[45] Additionally to the CPU architecture abstraction (byte order, word size, CPU instruction set, etc.), there is the advantage of binaries with support for multiple kernel ABIs and versions.

FatELF has several use-cases, according to developers:[44]

  • Distributions no longer need to have separate downloads for various platforms.
  • Separated /lib, /lib32 and /lib64 trees are not required anymore in OS directory structure.
  • The correct binary and libraries are centrally chosen by the system instead of shell scripts.
  • If the ELF ABI changes someday, legacy users can be still supported.
  • Distribution of web browser plug ins that work out of the box with multiple platforms.
  • Distribution of one application file that works across Linux and BSD OS variants, without a platform compatibility layer on them.
  • One hard drive partition can be booted on different machines with different CPU architectures, for development and experimentation. Same root file system, different kernel and CPU architecture.
  • Applications provided by network share or USB sticks, will work on multiple systems. This is also helpful for creating portable applications and also cloud computing images for heterogeneous systems.[46]

A proof-of-concept Ubuntu 9.04 image is available.[47] As of 2021, FatELF has not been integrated into the mainline Linux kernel.[citation needed][48][49]

Windows edit

Fatpack edit

Although the Portable Executable format used by Windows does not allow assigning code to platforms, it is still possible to make a loader program that dispatches based on architecture. This is because desktop versions of Windows on ARM have support for 32-bit x86 emulation, making it a useful "universal" machine code target. Fatpack is a loader that demonstrates the concept: it includes a 32-bit x86 program that tries to run the executables packed into its resource sections one by one.[50]

Arm64X edit

When developing Windows 11 ARM64, Microsoft introduced a new way to extend the Portable Executable format called Arm64X.[51] An Arm64X binary contains all the content that would be in separate x64/Arm64EC and Arm64 binaries, but merged into one more efficient file on disk. Visual C++ toolset has been upgraded to support producing such binaries. And when building Arm64X binaries are technically difficult, developers can build Arm64X pure forwarder DLLs instead.[52]

Similar concepts edit

The following approaches are similar to fat binaries in that multiple versions of machine code of the same purpose are provided in the same file.

Heterogeneous computing edit

Since 2007, some specialized compilers for heterogeneous platforms produce code files for parallel execution on multiple types of processors, i.e. the CHI (C for Heterogeneous Integration) compiler from the Intel EXOCHI (Exoskeleton Sequencer) development suite extends the OpenMP pragma concept for multithreading to produce fat binaries containing code sections for different instruction set architectures (ISAs) from which the runtime loader can dynamically initiate the parallel execution on multiple available CPU and GPU cores in a heterogeneous system environment.[53][54]

Introduced in February 2007, Nvidia's parallel computing platform CUDA (Compute Unified Device Architecture) is a software to enable general-purpose computing on GPUs (GPGPU). Its LLVM-based compiler NVCC can create ELF-based fat binaries containing so called PTX virtual assembly (as text) which the CUDA runtime driver can later just-in-time compile into some SASS (Streaming Assembler) binary executable code for the actually present target GPU. The executables can also include so called CUDA binaries (aka cubin files) containing dedicated executable code sections for one or more specific GPU architectures from which the CUDA runtime can choose from at load-time.[55][56][57][58][59][60] Fat binaries are also supported by GPGPU-Sim [de], a GPU simulator introduced in 2007 as well.[61][62]

Multi2Sim (M2S), an OpenCL heterogeneous system simulator framework (originally only for either MIPS or x86 CPUs, but later extended to also support ARM CPUs and GPUs like the AMD/ATI Evergreen & Southern Islands as well as Nvidia Fermi & Kepler families)[63] supports ELF-based fat binaries as well.[64][63]

Fat objects edit

GNU Compiler Collection (GCC) and LLVM do not have a fat binary format, but they do have fat object files for link-time optimization (LTO). Since LTO involves delaying the compilation to link-time, the object files must store the intermediate representation (IR), but on the other hand machine code may need to be stored too (for speed or compatibility). An LTO object containing both IR and machine code is known as a fat object.[65]

Function multi-versioning edit

Even in a program or library intended for the same instruction set architecture, a programmer may wish to make use of some newer instruction set extensions while keeping compatibility with an older CPU. This can be achieved with function multi-versioning (FMV): versions of the same function are written into the program, and a piece of code decides which one to use by detecting the CPU's capabilities (such as through CPUID). Intel C++ Compiler, GCC, and LLVM all have the ability to automatically generate multi-versioned functions.[66] This is a form of dynamic dispatch without any semantic effects.

Many math libraries feature hand-written assembly routines that are automatically chosen according to CPU capability. Examples include glibc, Intel MKL, and OpenBLAS. In addition, the library loader in glibc supports loading from alternative paths for specific CPU features.[67]

A similar, but byte-level granular approach originally devised by Matthias R. Paul and Axel C. Frinke is to let a small self-discarding, relaxing and relocating loader embedded into the executable file alongside any number of alternative binary code snippets conditionally build a size- or speed-optimized runtime image of a program or driver necessary to perform (or not perform) a particular function in a particular target environment at load-time through a form of dynamic dead code elimination (DDCE).[68][69][70][71]

See also edit

Notes edit

  1. ^ a b This isn't a problem for CP/M-86 style executables under CP/M-86, CP/M-86 Plus, Personal CP/M-86, S5-DOS, Concurrent CP/M-86, Concurrent DOS, Concurrent DOS 286, FlexOS, Concurrent DOS 386, DOS Plus, Multiuser DOS, System Manager and REAL/32 because they use the file extension .CMD rather than .COM for these files. (The .CMD extension, however, is conflictive with the file extension for batchjobs written for the command line processor CMD.EXE under the OS/2 and Windows NT operating system families.)
  2. ^ a b c This works because a (suitable) return instruction can be used to exit programs under CP/M-80, CP/M-86 and DOS, although the opcodes, exact conditions and underlying mechanisms differ: Under CP/M-80, programs can terminate (that is, warm boot into the BIOS) by jumping to 0 in the zero page, either directly with RST 0 (8080/8085/Z80 opcode C7h), or by calling BDOS function 0 through the CALL 5 interface. Alternatively, as the stack is prepared to hold a 0 return address before passing control to a loaded program, they can, for as long as the stack is aligned, also be exited by issuing a RET (opcode C9h) instruction, thereby falling into the terminating code at offset 0 in the zero page. Although DOS has a dedicated INT 20h interrupt as well as INT 21h API sub-functions to terminate programs (which are preferable for more complicated programs), for machine-translated programs DOS also emulates CP/M's behaviour to some extent: A program can terminate itself by jumping to offset 0 in its PSP (the equivalent to CP/M's zero page), where the system had previously planted an INT 20h instruction. Also, a loaded program's initial stack is prepared to hold a word of 0, so that a program issuing a near return RETN (8088/8086 opcode C3h) will implicitly jump to the start of its code segment as well, thereby eventually reaching the INT 20h as well.[a] In CP/M-86, the zero page is structured differently and there is no CALL 5 interface, but the stack return method and BDOS function 0 (but now through INT E0h) both work as well.
  3. ^ On 8088/8086 processors, the opcode C9h is an undocumented alias for CBh ("RETF", popping CS:IP from the stack), whereas it decodes as "LEAVE" (set SP to BP and pop BP) on 80188/80186 and newer processors.
  4. ^ a b This problem could have been avoided by choosing non-conflicting file extensions, but, once introduced, these particular file names were retained from very early versions of MS-DOS/PC DOS for compatibility reasons with (third-party) tools hard-wired to expect these specific file names.
  5. ^ a b Other DOS files of this type are KEYBOARD.SYS, a binary keyboard layout database file for the keyboard driver KEYB under MS-DOS and PC DOS, IO.SYS containing the DOS BIOS under MS-DOS, and MSDOS.SYS, a text configuration file under Windows 95/MS-DOS 7.0 and higher, but originally a binary system file containing the MS-DOS kernel. However, MS-DOS and PC DOS do not provide crash-protected system files at all, and these file names are neither used nor needed in DR-DOS 7.02 and higher, which otherwise does provide crash-protected system files.
  6. ^ This is the reason why these files have the hidden attribute set, so that they are not listed by default, thereby reducing the risk of being invoked accidentally.
  7. ^ The COUNTRY.SYS file formats supported by the MS-DOS/PC DOS and the DR-DOS families of operating systems contain similar data but are organized differently and incompatible. Since the entry points into the data structures are at different offsets in the file it is possible to create "fat" COUNTRY.SYS databases, which could be used under both DOS families.[b] However, DR-DOS 7.02 and its NLSFUNC 4.00 (and higher) include an improved parser capable of reading both types of formats (and variants), even at the same time, so that Janus-headed files are not necessary.[c][d] The shipped files are nevertheless "fat" for including a tiny executable stub just displaying an embedded message when invoked inappropriately.[d][b]

References edit

  1. ^ Devanbu, Premkumar T.; Fong, Philip W. L.; Stubblebine, Stuart G. (19–25 April 1998). (PDF). Techniques for Trusted Software Engineering. Proceedings of the 20th International Conference on Software Engineering. Proceedings - International Conference on Software Engineering. Kyoto, Japan. p. 131. doi:10.1109/ICSE.1998.671109. ISBN 0-8186-8368-6. ISSN 0270-5257. Archived from the original (PDF) on 2014-01-16. Retrieved 2021-09-29. (10 pages)
  2. ^ Pero, Nicola (2008-12-18). "gnustep/tools-make: README.Packaging". GitHub. from the original on 2022-05-25. Retrieved 2022-05-26.
  3. ^ "PackagingDrafts/GNUstep". Fedora Project Wiki. 2009-02-25. from the original on 2022-05-25. Retrieved 2022-05-26.
  4. ^ "Domain System Software Release Notes, Software Release 10.1" (PDF) (first printing ed.). Chelmsford, Massachusetts, USA: Apollo Computer Inc. December 1988. p. 2-16. Order No. 005809-A03. (PDF) from the original on 2023-05-26. Retrieved 2022-07-24. (256 pages)
  5. ^ a b Engst, Adam C. (1994-08-22). "Should Fat Binaries Diet?". TidBITS. No. 240. TidBITS Publishing Inc. ISSN 1090-7017. from the original on 2021-09-29. Retrieved 2021-09-29.
  6. ^ a b Engst, Adam C. (1994-08-29). "Fat Binary Comments". TidBITS. No. 241. TidBITS Publishing Inc. ISSN 1090-7017. from the original on 2021-09-29. Retrieved 2021-09-29.
  7. ^ "Chapter 1 - Resource Manager / Resource Manager Reference - Resource File Format". Inside Macintosh: Mac OS Runtime Architectures. Apple Computer. 1996-07-06. from the original on 2021-09-29. Retrieved 2021-09-29.
  8. ^ . Inside Macintosh: Mac OS Runtime Architectures. Apple Computer. 1997-03-11. Archived from the original on 2021-09-29. Retrieved 2011-06-20.
  9. ^ "Chapter 8 - PEF Structure". Inside Macintosh: Mac OS Runtime Architectures. Apple Computer. 1997-03-11. from the original on 2021-09-29. Retrieved 2021-09-29.
  10. ^ Tevanian, Avadis; DeMoney, Michael; Enderby, Kevin; Wiebe, Douglas; Snyder, Garth (1995-07-11) [1993-08-20]. "Method and apparatus for architecture independent executable files" (PDF). Redwood City, California, USA: NeXT Computer, Inc. US patent 5432937A. (PDF) from the original on 2020-12-14. Retrieved 2022-05-26. [2] (9 pages); Tevanian, Avadis; DeMoney, Michael; Enderby, Kevin; Wiebe, Douglas; Snyder, Garth (1997-02-18) [1995-02-28]. "Method and apparatus for architecture independent executable files" (PDF). Redwood City, California, USA: NeXT Computer, Inc. US patent 5604905A. (PDF) from the original on 2022-05-26. Retrieved 2022-05-26. (9 pages)
  11. ^ . Mac OS X ABI Mach-O File Format Reference. Apple Inc. 2009-02-04 [2003]. Archived from the original on 2012-04-27.
  12. ^ Singh, Amit (2006-06-19). "2.6.2 Fat Binaries". Mac OS X Internals - A Systems Approach. Pearson Education. p. 66. ISBN 978-0-13270226-3. Retrieved 2021-09-28.
  13. ^ "rEFIt - EFI Fat Binaries". refit.sourceforge.net. Retrieved 2022-10-18.
  14. ^ Paul, Matthias R. (2002-10-07) [2000]. "Re: Run a COM file". Newsgroup: alt.msdos.programmer. Archived from the original on 2017-09-03. Retrieved 2017-09-03. [3] (NB. Has details on DOS COM program calling conventions.)
  15. ^ a b c Wilkinson, William "Bill" Albert (2005-04-02) [2003, 1999-02-16, February 1987, 1986-11-15, 1986-11-10]. Written at Heath Company, USA. "Something COMmon About MS-DOS and CP/M". REMark. Vol. 8, no. 2. St. Joseph, Michigan, USA: Heath/Zenith Users' Group (HUG). pp. 55–57. #85. P/N 885-2085. from the original on 2021-12-13.
  16. ^ a b c Cha, Sang Kil; Pak, Brian; Brumley, David; Lipton, Richard Jay (2010-10-08) [2010-10-04]. Platform-Independent Programs (PDF). Proceedings of the 17th ACM conference on Computer and Communications Security (CCS'10). Chicago, Illinois, USA: Carnegie Mellon University, Pittsburgh, Pennsylvania, USA / Georgia Institute of Technology, Atlanta, Georgia, USA. pp. 547–558. doi:10.1145/1866307.1866369. ISBN 978-1-4503-0244-9. (PDF) from the original on 2022-05-26. Retrieved 2022-05-26. (12 pages) (See also: [6]) (NB. Does not address the scenario specifically for 8080 vs. 8086 instruction set architectures (as for CP/M and DOS), but describes the general "self-identifying program" concept of platform-independent programs (PIPs) through what the authors call a gadget header (that is, chunks of program logic not to be confused with ROP gadgets) for x86, MIPS and ARM: i.e. 0Eh, B2h, 02h, A9h, 0Eh, B2h, 02h, 3Ah, 24h, 77h, 01h, 04h or 90h, EBh, 20h, 2Ah, 90h, EBh, 20h, 3Ah, 24h, 77h, 01h, 04h.)
  17. ^ a b c d e f Wilkinson, William "Bill" Albert; Seligman, Cory; Drushel, Richard F.; Harston, Jonathan Graham; Elliott, John C. (1999-02-17). "MS-DOS & CP/M-Compatible Binaries". Newsgroup: comp.os.cpm. from the original on 2021-12-13. Retrieved 2021-12-13. (NB. Some of the opcodes in Elliott's example code (EBh, 44h, EBh and EBh, 04h, ...) might be mixed up.)
  18. ^ a b Elliott, John C. (2009-10-27). "CP/M info program". Newsgroup: comp.os.cpm. from the original on 2021-12-13. Retrieved 2021-12-13. […] DOS protection feature […] The idea is based on the utilities in Simeon Cran's MYZ80 emulator; the DOS-protection header in those goes one better by not changing any Z80 registers. The magic sequence is EB 52 EB: […] XCHG […] MOV D,D […] XCHG […] but that means the DOS code ends up quite a way away from the start of the program. […] More fun can be had with self-extract PMArc archives. Start one with […] defb 0EBh, 018h, '-pms-' […] and it's treated as a valid archive by the PMA utilities, sends 8086 processors to 011Ah, and Z80 processors to 0130h. […]
  19. ^ ChristW (2012-11-14) [2012-11-13]. Chen, Raymond (ed.). . The New Old Thing. Archived from the original on 2018-07-05. Retrieved 2018-05-19. […] byte sequence […] EB 03 C3 yy xx […] If you create a .COM file with those 5 bytes as the first ones […] you'll see 'JMP SHORT 3', followed by 3 garbage bytes. […] If you look at a Z80 disassembly […] that translates to 'EX DE,HL; INC BC;' […] The 3rd byte is 'JUMP' followed by the 16-bit address specified as yy xx […] you'll have a .COM file that runs on MS-DOS and […] CP/M […] (NB. While the author speaks about the Z80, this sequence also works on the 8080 and compatible processors.)
  20. ^ Brehm, Andrew J. (2016). "CP/M and MS-DOS Fat Binary". DesertPenguin.org. from the original on 2018-05-19. Retrieved 2018-05-19. (NB. While the article speaks about the Z80, the code sequence also works on the 8080 and compatible processors.)
  21. ^ Elliott, John C. (1996-06-13). "Upload to micros.hensa.ac.uk". Newsgroup: comp.os.cpm. from the original on 2021-12-13. Retrieved 2021-12-13. […] FATBIN 1.00 - combine a CP/M .COM file and a DOS .COM file to create one which runs on both platforms. […] It was used to create: […] MSODBALL 2.05 - convert floppy discs between Amstrad 706k format and a DOS 706k format. […] Both the programs run under CP/M-80 and DOS. […]
  22. ^ Elliott, John C. (1998-06-28) [1997-04-01]. . Archived from the original on 1998-06-28. (NB. FATBN101.COM 22k 1997-04-01 FATBIN v1.01. Creates fat binary files which will run under both CP/M and DOS. Distributed in a self-extracting archive for CP/M-80 and DOS.)
  23. ^ Elliott, John C. (2002-03-11). "DSKWRITE v1.00". Fossies - the Fresh Open Source Software Archive. from the original on 2021-12-12. Retrieved 2021-12-12. […] DSKWRITE.Z80 contains source for the CP/M version. […] DSKWRITE.ASM contains source for the DOS version. […] To get the single .COM file, you need to use FBMAKE: […] (NB. Mentions FBMAKE from the FATBNSEA.COM package.)
  24. ^ a b Elliott, John C. (2012-06-20) [2005-01-05]. "Generic CP/M". Seasip.info. from the original on 2021-11-17. Retrieved 2021-12-12. […] Self-extracting archives are .COM files containing a number of smaller files. When you run one, it will create its smaller files […] The self-extract archive programs will run under DOS (2 or later) or CP/M, with identical effects. To extract them under Unix, you can use ZXCC […] FATBNSEA.COM […] FATBIN combines a CP/M-80 .COM file and a DOS .COM file to produce one that will work on both systems. […] M3C4SEA.COM […] M3CONV version 4 - converts Spectrum snapshots in the .Z80 or .SNA format to or from Multiface 3 format (Multiface 3 -> Z80 only on a PC). […] PMSFX21X.COM […] PMSFX is the program that was used to generate these self-unpacking archives. This version (2.11) can generate archives which unpack themselves under CP/M or DOS. You will need PMARC to use PMSFX. New: Under DOS, it supports exact file sizes. […] SP2BMSEA.COM […] Converts a Stop Press Canvas file to a Windows .BMP […]
  25. ^ Elliott, John C. (1997-01-18) [1997-01-11]. "PMSFX 2". Newsgroup: comp.os.cpm. from the original on 2021-12-13. Retrieved 2021-12-13. […] I've written a version of PMSFX that produces .COM files unpackable under DOS and CP/M (the first three bytes are both legal Z80 code, legal 8086 code and legal PMA header) […] as a self-extracting archive. […]
  26. ^ Elliott, John C.; Lopushinsky, Jim (2002) [1998-04-11]. "CP/M 3 COM file header". Seasip.info. from the original on 2016-08-30. Retrieved 2016-08-29.
  27. ^ a b Necasek, Michal (2018-01-30) [2018-01-28, 2018-01-26]. "WordStar Again". OS/2 Museum. from the original on 2019-07-28. Retrieved 2019-07-28. […] The reason to suspect such difference is that version 3.2x also supported CP/M-86 (the overlays are identical between DOS and CP/M-86, only the main executable is different) […] the .OVR files are 100% identical between DOS and CP/M-86, with a flag (clearly shown in the WordStar 3.20 manual) switching between them at runtime […] the OS interface in WordStar is quite narrow and well abstracted […] the WordStar 3.2x overlays are 100% identical between the DOS and CP/M-86 versions. There is a runtime switch which chooses between calling INT 21h (DOS) and INT E0h (CP/M-86). WS.COM is not the same between DOS and CP/M-86, although it's probably not very different either. […]
  28. ^ Lineback, Nathan. "GSX Screen Shots". Toastytech.com. Archived from the original on 2020-01-15. Retrieved 2020-01-15.
  29. ^ a b c Paul, Matthias R. (2002-04-11). "Re: [fd-dev] ANNOUNCE: CuteMouse 2.0 alpha 1". freedos-dev. from the original on 2020-02-21. Retrieved 2020-02-21. […] FreeKEYB is […] a true .COM and .SYS driver (tiny model) in one. You can safely overwrite the first JMP, that's part of what I meant by "tricky header". […] you can replace the FFFFh:FFFFh by a 3-byte jump and a pending DB FFh. It works with MS-DOS, PC DOS, DR-DOS, and most probably any other DOS issue as well. […]
  30. ^ a b c Paul, Matthias R. (2002-04-06). "Re: [fd-dev] ANNOUNCE: CuteMouse 2.0 alpha 1". freedos-dev. from the original on 2020-02-07. Retrieved 2020-02-07. […] Add a SYS device driver header to the driver, so that CTMOUSE could be both in one, a normal TSR and a device driver - similar to our FreeKEYB advanced keyboard driver. […] This is not really needed under DR DOS because INSTALL= is supported since DR DOS 3.41+ and DR DOS preserves the order of [D]CONFIG.SYS directives […] but it would […] improve the […] flexibility on MS-DOS/PC DOS systems, which […] always execute DEVICE= directives prior to any INSTALL= statements, regardless of their order in the file. […] software may require the mouse driver to be present as a device driver, as mouse drivers have always been device drivers back in the old times. These mouse drivers have had specific device driver names depending on which protocol they used ("PC$MOUSE" for Mouse Systems Mode for example), and some software may search for these drivers in order to find out the correct type of mouse to be used. […] Another advantage would be that device drivers usually consume less memory (no environment, no PSP) […] It's basically a tricky file header, a different code to parse the command line, a different entry point and exit line, and some segment magics to overcome the ORG 0 / ORG 100h difference. Self-loadhighing a device driver is a bit more tricky as you have to leave the driver header where it is and only relocate the remainder of the driver […]
  31. ^ a b c d Paul, Matthias R. (2001-06-10) [1995]. "DOS COUNTRY.SYS file format" (COUNTRY.LST file) (1.44 ed.). from the original on 2016-04-20. Retrieved 2016-08-20.
  32. ^ a b c Paul, Matthias R. (1997-07-30) [1994-05-01]. "Chapter II.4. Undokumentierte Eigenschaften externer Kommandos - SYS.COM". NWDOS-TIPs — Tips & Tricks rund um Novell DOS 7, mit Blick auf undokumentierte Details, Bugs und Workarounds. MPDOSTIP (in German) (3 ed.). from the original on 2017-09-10. Retrieved 2014-08-06. Für ein zukünftiges Update für Calderas OpenDOS 7.01 habe ich den Startcode von IBMBIO.COM so modifiziert, daß er - falls fälschlicherweise als normales Programm gestartet - ohne Absturz zur Kommandozeile zurückkehrt. Wann diese Sicherheitsfunktion in die offizielle Version Einzug halten wird, ist jedoch noch nicht abzusehen. (NB. NWDOSTIP.TXT is a comprehensive work on Novell DOS 7 and OpenDOS 7.01, including the description of many undocumented features and internals. It is part of the author's yet larger MPDOSTIP.ZIP collection maintained up to 2001 and distributed on many sites at the time. The provided link points to a HTML-converted older version of the NWDOSTIP.TXT file.)
  33. ^ Paul, Matthias R. (1997-10-02). . Archived from the original on 2003-10-04. Retrieved 2009-03-29.
  34. ^ . Caldera, Inc. 1998-12-24. Archived from the original on 2019-04-08. Retrieved 2019-04-08.
  35. ^ a b Sage, Jay (May–June 1988). Carlson, Art (ed.). "ZCPR 3.4 - Type-4 Programs". The Computer Journal (TCJ) - Programming, User Support, Applications. ZCPR3 Corner (32). Columbia Falls, Montana, USA: 10–17 [16]. ISSN 0748-9331. ark:/13960/t1wd4v943. Retrieved 2021-11-29. [11][12]
  36. ^ a b Sage, Jay (May–June 1992) [March–June 1992]. Carlson, Art; McEwen, Chris (eds.). "Type-3 and Type-4 Programs". The Computer Journal (TCJ) - Programming, User Support, Applications. Z-System Corner - Some New Applications of Type-4 Programs (55). S. Plainfield, New Jersey, USA: Socrates Press: 13–19 [14, 16]. ISSN 0748-9331. ark:/13960/t4dn54d22. Retrieved 2021-11-29. [13][14]
  37. ^ a b Sage, Jay (November–December 1992). Carlson, Art; Kibler, Bill D. (eds.). "Regular Feature, ZCPR Support, Language Independence, part 2". The Computer Journal (TCJ) - Programming, User Support, Applications. The Z-System Corner (58). Lincoln, CA, USA: 7–10. ISSN 0748-9331. ark:/13960/t70v9g87h. Retrieved 2020-02-09. […] there was an opcode of "RST 0", which, if executed, would result in a warm boot. A file containing a Z3TXT module should never be executed, but at a cost of one byte we could protect ourself against that outside chance. The header also contained the string of characters "Z3TXT" followed by a null (0) byte. Many Z-System modules include such identifiers. In this category are resident command packages (RCPs), flow command packages (FCPs), and environment descriptor modules (Z3ENVs). Programs, such as Bridger Mitchell's […] JETLDR.COM, that load these modules from files into memory can use the ID string to validate the file, that is, to make sure that it is the kind of module that the user has stated it to be. User mistakes and damaged files can thus be detected. […] The header, thus, now stands as follows: […] rst […] db 'Z3TXT',0 ; null-terminated ID […] ; 12345678 ; must be 8 characters, […] db 'PROGNAME' ; pad with spaces […] ; 123 ; must be 3 characters […] db 'ENG' ; name of language […] dw LENGTH ; length of module […] [15][16]
  38. ^ "Table of IO Device Characteristics - Console or Teletypewriters". PDP-6 Multiprogramming System Manual (PDF). Maynard, Massachusetts, USA: Digital Equipment Corporation (DEC). 1965. p. 43. DEC-6-0-EX-SYS-UM-IP-PRE00. (PDF) from the original on 2014-07-14. Retrieved 2014-07-10. (1+84+10 pages)
  39. ^ "5.1.1.1. Device Dependent Functions - Data Modes - Full-Duplex Software A(ASCII) and AL(ASCII Line)". PDP-10 Reference Handbook: Communicating with the Monitor - Time-Sharing Monitors (PDF). Vol. 3. Digital Equipment Corporation (DEC). 1969. pp. 5-3–5-6 [5-5 (431)]. (PDF) from the original on 2011-11-15. Retrieved 2014-07-10. (207 pages)
  40. ^ "2. Operating System Call Conventions". CP/M 2.0 Interface Guide (PDF) (1 ed.). Pacific Grove, California, USA: Digital Research. 1979. p. 5. (PDF) from the original on 2020-02-28. Retrieved 2020-02-28. […] The end of an ASCII file is denoted by a control-Z character (1AH) or a real end of file, returned by the CP/M read operation. Control-Z characters embedded within machine code files (e.g., COM files) are ignored, however, and the end of file condition returned by CP/M is used to terminate read operations. […] (56 pages)
  41. ^ Hogan, Thom (1982). "3. CP/M Transient Commands". Osborne CP/M User Guide - For All CP/M Users (2 ed.). Berkeley, California, USA: A. Osborne/McGraw-Hill. p. 74. ISBN 0-931988-82-9. Retrieved 2020-02-28. […] CP/M marks the end of an ASCII file by placing a CONTROL-Z character in the file after the last data character. If the file contains an exact multiple of 128 characters, in which case adding the CONTROL-Z would waste 127 characters, CP/M does not do so. Use of the CONTROL-Z character as the end-of-file marker is possible because CONTROL-Z is seldom used as data in ASCII files. In a non-ASCII file, however, CONTROL-Z is just as likely to occur as any other character. Therefore, it cannot be used as the end-of-file marker. CP/M uses a different method to mark the end of a non-ASCII file. CP/M assumes it has reached the end of the file when it has read the last record (basic unit of disk space) allocated to the file. The disk directory entry for each file contains a list of the disk records allocated to that file. This method relies on the size of the file, rather than its content, to locate the end of the file. […] [17][18]
  42. ^ BC_Programmer (2010-01-31) [2010-01-30]. "Re: Copy command which merges several files tags the word SUB at the end". Computer Hope Forum. from the original on 2020-02-26. Retrieved 2020-02-26.
  43. ^ "What are the differences between Linux and Windows .txt files (Unicode encoding)". Superuser. 2011-08-03 [2011-06-08]. from the original on 2020-02-26. Retrieved 2020-02-26.
  44. ^ a b Gordon, Ryan C. (October 2009). "FatELF: Universal Binaries for Linux". icculus.org. from the original on 2020-08-27. Retrieved 2010-07-13.
  45. ^ Gordon, Ryan C. (November 2009). "FatELF specification, version 1". icculus.org. from the original on 2020-08-27. Retrieved 2010-07-25.
  46. ^ Windisch, Eric (2009-11-03). gmane.org. Archived from the original on 2016-11-15. Retrieved 2010-07-08.
  47. ^ Gordon, Ryan C. (2009). "FatELF: Universal Binaries for Linux. - The proof-of-concept virtual machine download page". icculus.org. from the original on 2022-05-21. Retrieved 2022-05-26. (NB. VM image of Ubuntu 9.04 with Fat Binary support.)
  48. ^ Holwerda, Thom (2009-11-05). "Ryan Gordon Halts FatELF Project". Linux. osnews.com. from the original on 2022-05-26. Retrieved 2010-07-05.
  49. ^ Brockmeier, Joe "Zonker" (2010-06-23). "SELF: Anatomy of an (alleged) failure". LWN.net. Linux Weekly News. from the original on 2022-05-26. Retrieved 2011-02-06.
  50. ^ Mulder, Sijmen J. (2021-03-06) [2018-04-25]. "sjmulder/fatpack - Build multi-architecture 'fat' binaries for Windows". GitHub. from the original on 2022-05-26. Retrieved 2022-05-26.
  51. ^ "Arm64X PE files". learn.microsoft.com. Microsoft. 2022-08-13. from the original on 2023-08-20. Retrieved 2023-03-31.
  52. ^ "Build Arm64X binaries". learn.microsoft.com. Microsoft. 2023-03-10. from the original on 2023-08-20. Retrieved 2023-03-31.
  53. ^ Wang, Perry H.; Collins, Jamison D.; Chinya, Gautham N.; Jiang, Hong; Tian, Xinmin; Girkar, Milind; Yang, Nick Y.; Lueh, Guei-Yuan; Wang, Hong (June 2007). "EXOCHI: architecture and programming environment for a heterogeneous multi-core multithreaded system". ACM SIGPLAN Notices. 42 (6): 156–166. doi:10.1145/1273442.1250753. (11 pages)
  54. ^ Wang, Perry H.; Collins, Jamison D.; Chinya, Gautham N.; Jiang, Hong; Tian, Xinmin; Girkar, Milind; Pearce, Lisa; Lueh, Guei-Yuan; Yakoushkin, Sergey; Wang, Hong (2007-08-22). "Accelerator Exoskeleton" (PDF). Intel Technology Journal. 11: Tera-scale Computing (3). Intel Corporation: 185–196. doi:10.1535/itj.1103. ISSN 1535-864X. (PDF) from the original on 2022-05-26. Retrieved 2022-05-26. (12 of 1+vii+90+1 pages)
  55. ^ "cudaFatFormat.h / ptxomp.c". 1.13. Nvidia Corporation. 2004-11-15. from the original on 2022-05-26. Retrieved 2022-05-26.
  56. ^ Harris, Mark J. (2014-05-08) [2013-06-05]. "Technical Walkthrough: CUDA Pro Tip: Understand Fat Binaries and JIT Caching". Nvidia Developer. Nvidia. from the original on 2022-03-23. Retrieved 2022-05-26.
  57. ^ "CUDA Binary Utilities" (PDF) (Application Note). 6.0. Nvidia. February 2014. DA-06762-001_v6.0. (PDF) from the original on 2022-05-25. Retrieved 2022-05-25.
  58. ^ "fatbinary - help". helpmanual.io. 8.0. 2016. from the original on 2022-05-25. Retrieved 2022-05-25.
  59. ^ "CUDA Compiler Driver NVCC - Reference Guide" (PDF). 11.7. Nvidia. May 2022. TRM-06721-001_v11.7. (PDF) from the original on 2022-05-25. Retrieved 2022-05-25.
  60. ^ Braun, Lorenz; Fröning, Holger (2019-11-18). CUDA Flux: A Lightweight Instruction Profiler for CUDA Applications (PDF). IEEE/ACM Performance Modeling, Benchmarking and Simulation of High Performance Computer Systems (PMBS). Denver, Colorado, USA: IEEE. doi:10.1109/PMBS49563.2019.00014. ISBN 978-1-7281-5977-5. (PDF) from the original on 2022-03-21. Retrieved 2022-05-26.
  61. ^ Fung, Wilson W. L.; Sham, Ivan; Yuan, George; Aamodt, Tor M. (2007). "Dynamic Warp Formation and Scheduling for Efficient GPU Control Flow" (PDF). Vancouver, British Columbia, Canada. (PDF) from the original on 2022-05-26. Retrieved 2022-05-26. (12 pages)
  62. ^ Bakhoda, Ali; Yuan, George L.; Fung, Wilson W. L.; Wong, Henry; Aamodt, Tor M. (2009-04-28) [2009-04-26]. Analyzing CUDA Workloads Using a Detailed GPU Simulator (PDF). Proceedings of the IEEE International Symposium on Performance Analysis of Systems and Software (ISPASS). Boston, Massachusetts, USA. pp. 163–174. doi:10.1109/ISPASS.2009.4919648. (PDF) from the original on 2022-05-26. Retrieved 2022-05-06. [19]
  63. ^ a b "13.4 The AMD Compiler Wrapper: Fat binaries". The Multi2Sim Simulation Framework - A CPU-GPU Model for Heterogeneous Computing (PDF). v4.2. Multi2Sim. 2013. pp. 173–176 [176]. (PDF) from the original on 2022-05-25. Retrieved 2022-05-25. (4 of 210 pages)
  64. ^ Ubal, Rafael; Jang, Byunghyun; Mistry, Perhaad; Schaa, Dana; Kaeli, David R. (2012-09-23) [2012-09-19]. "Multi2Sim: A Simulation Framework for CPU-GPU Computing" (PDF). 21st International Conference on Parallel Architectures and Compilation Techniques (PACT). Minneapolis, Minnesota, USA: IEEE. ISBN 978-1-4503-1182-3. (PDF) from the original on 2022-05-25. Retrieved 2022-05-25. (10 pages)
  65. ^ "LTO Overview (GNU Compiler Collection (GCC) Internals)". gcc.gnu.org. from the original on 2021-09-12. Retrieved 2021-09-12.
  66. ^ Wennborg, Hans (2018). "Attributes in Clang". Clang 7 documentation. from the original on 2022-04-07. Retrieved 2022-05-26.
  67. ^ Bahena, Victor Rodriguez (2018-04-03). "Transparent use of library packages optimized for Intel architecture". Power and Performance. Clear Linux Project. Intel Corporation. from the original on 2022-05-26. Retrieved 2022-05-26.
  68. ^ Paul, Matthias R.; Frinke, Axel C. (1997-10-13) [1991], FreeKEYB - Enhanced DOS keyboard and console driver (User Manual) (v6.5 ed.) (NB. FreeKEYB is a Unicode-based dynamically configurable successor of K3PLUS supporting most keyboard layouts, code pages, and country codes. Utilizing an off-the-shelf macro assembler as well as a framework of automatic pre- and post-processing analysis tools to generate dependency and code morphing meta data to be embedded into the executable file alongside the binary code and a self-discarding, relaxing and relocating loader, the driver implements byte-level granular dynamic dead code elimination and relocation techniques at load-time as well as self-modifying code and reconfigurability at run-time to minimize its memory footprint downto close the canonical form depending on the underlying hardware, operating system, and driver configuration as well as the selected feature set and locale (about sixty configuration switches with hundreds of options for an almost unlimited number of possible combinations). This complexity and the dynamics are hidden from users, who deal with a single executable file just like they would do with a conventional driver.)
  69. ^ Paul, Matthias R. (2002-04-06). "[fd-dev] Ctrl+Alt+Del". freedos-dev. Archived from the original on 2019-04-27. Retrieved 2019-04-27. […] FreeKEYB builds the driver's runtime image at initialization time depending on the type of machine it is being loaded on, the type of keyboard, layout, country and code page used, the type of mouse and video adapter(s) installed, the other drivers loaded on that system, the operating system and the load and relocation method(s) used, the individual features included, and the configuration options specified in the command line. Due to the large number of command line switches and options supported […] (around fifty switches […] with multiple possible settings) there is a high number of feature combinations with uncountable dependencies […] resulting in […] endless number of […] different target images. FreeKEYB's Dynamic Dead Code Elimination technique manages to resolve […] these […] dependencies and […] remove dead code and data […] is not restricted to […] include or exclude a somewhat limited number of modules or whole sub-routines and fix up some dispatch tables as in classical TSR programming, but […] works […] at […] byte level […] able to remove […] individual instructions in the middle of larger routines […] distributed all over the code to handle a particular case or support a specific feature […] special tools are used to analyze the code […] and create […] fixup tables […] automated […] using conditional defines […] to declare the various cases […] not only optional at assembly time but at initialization time […] without the […] overhead of having at least some amount of dead code left in the runtime image […] to keep track of all the dependencies between […] these conditionals, dynamically build and relocate the runtime image, fix up all the references between these small, changing, and moving binary parts […] still allowing to use the tiny .COM/.SYS style […] model […] is done at initialization time […]
  70. ^ Paul, Matthias R. (2001-08-21). "[fd-dev] Changing codepages in FreeDOS". freedos-dev. from the original on 2019-04-19. Retrieved 2019-04-20. […] a […] unique feature […] we call dynamic dead code elimination, so you can at installation time […] specify which components of the driver you want and which you don't. This goes to an extent of dynamic loadable modularization and late linkage I have not seen under DOS so far. If you do not like the screen saver, macros, the calculator, or mouse support, or <almost anything else>, you can specify this at the command line, and FreeKEYB, while taking all the dependencies between the routines into account, will completely remove all the code fragments, which deal with that feature and are not necessary to provide the requested functionality, before the driver relocates the image into the target location and makes itself resident. […]
  71. ^ Paul, Matthias R. (2001-04-10). "[ANN] FreeDOS beta 6 released" (in German). Newsgroup: de.comp.os.msdos. Archived from the original on 2017-09-09. Retrieved 2017-07-02. […] brandneue[s] Feature, der dynamischen Dead-Code-Elimination, die die jeweils notwendigen Bestandteile des Treibers erst zum Installationszeitpunkt zusammenbastelt und reloziert, so daß keine ungenutzten Code- oder Datenbereiche mehr resident bleiben (z.B. wenn jemand ein bestimmtes FreeKEYB-Feature nicht benötigt). […]

Further reading edit

  • Tunney, Justine Alexandra Roberts (2021-02-11). "How Fat Does a Fat Binary Need to Be?". cosmopolitan libc - your build-once run-anywhere c library / Cosmopolitan Communiqué. from the original on 2021-09-12. Retrieved 2021-09-12.; Tunney, Justine Alexandra Roberts (2021-02-11). "How Fat Does a Fat Binary Need to Be?". Hacker News. from the original on 2021-06-01. Retrieved 2021-09-12.
  • Tunney, Justine Alexandra Roberts (2020-08-24). "αcτµαlly pδrταblε εxεcµταblε (Ape)". from the original on 2021-09-12. Retrieved 2021-09-12.
  • Gotham, Frederick (2020-10-22). "Making a Fat Binary for Linux and Mac". Narkive. from the original on 2021-09-12. Retrieved 2021-09-12.
  • Gotham, Frederick (2020-10-24). "Fat Binary - MS-Windows and four Linux". Narkive. from the original on 2021-09-12. Retrieved 2021-09-12.
  • Gotham, Frederick (2020-11-02). "Fat Binary - DOS Windows Linux". Narkive. from the original on 2021-09-12. Retrieved 2021-09-12.
  • "We develop to WarpUP the Amiga - StormC for PowerPC and p-OS". Haage & Partner GmbH. September 1996. from the original on 2017-12-06. Retrieved 2021-09-29.
  • Münch, Matthias (2006) [2005]. "AmigaOS 3.9 - Features". AmigaOS: multimedia, multi-threaded, multi-tasking. from the original on 2021-09-29. Retrieved 2021-09-29.

binary, confused, with, portable, executable, portable, application, binary, multiarchitecture, binary, computer, executable, program, library, which, been, expanded, fattened, with, code, native, multiple, instruction, sets, which, consequently, multiple, pro. Not to be confused with Portable executable or Portable application A fat binary or multiarchitecture binary is a computer executable program or library which has been expanded or fattened with code native to multiple instruction sets which can consequently be run on multiple processor types 1 This results in a file larger than a normal one architecture binary file thus the name The usual method of implementation is to include a version of the machine code for each instruction set preceded by a single entry point with code compatible with all operating systems which executes a jump to the appropriate section Alternative implementations store different executables in different forks each with its own entry point that is directly used by the operating system The use of fat binaries is not common in operating system software there are several alternatives to solve the same problem such as the use of an installer program to choose an architecture specific binary at install time such as with Android multiple APKs selecting an architecture specific binary at runtime such as with Plan 9 s union directories and GNUstep s fat bundles 2 3 distributing software in source code form and compiling it in place or the use of a virtual machine such as with Java and just in time compilation Contents 1 Apollo 1 1 Apollo s compound executables 2 Apple 2 1 Apple s fat binary 2 2 NeXT s Apple s multi architecture binaries 2 2 1 NeXTSTEP Multi Architecture Binaries 2 2 2 Mach O and Mac OS X 2 2 3 Apple s Universal binary 2 2 4 Apple Fat EFI binary 3 CP M and DOS 3 1 Combined COM style binaries for CP M 80 and DOS 3 2 Combined binaries for CP M 86 and DOS 3 3 Combined COM and SYS files 3 4 Crash protected system files 4 Linux 4 1 FatELF Universal binaries for Linux 5 Windows 5 1 Fatpack 5 2 Arm64X 6 Similar concepts 6 1 Heterogeneous computing 6 2 Fat objects 6 3 Function multi versioning 7 See also 8 Notes 9 References 10 Further readingApollo editApollo s compound executables edit In 1988 Apollo Computer s Domain OS SR10 1 introduced a new file type cmpexe compound executable that bundled binaries for Motorola 680x0 and Apollo PRISM executables 4 Apple editApple s fat binary edit A fat binary scheme smoothed the Apple Macintosh s transition beginning in 1994 from 68k microprocessors to PowerPC microprocessors Many applications for the old platform ran transparently on the new platform under an evolving emulation scheme but emulated code generally runs slower than native code Applications released as fat binaries took up more storage space but they ran at full speed on either platform This was achieved by packaging both a 68000 compiled version and a PowerPC compiled version of the same program into their executable files 5 6 The older 68K code CFM 68K or classic 68K continued to be stored in the resource fork while the newer PowerPC code was contained in the data fork in PEF format 7 8 9 Fat binaries were larger than programs supporting only the PowerPC or 68k which led to the creation of a number of utilities that would strip out the unneeded version 5 6 In the era of small hard drives when 80 MB hard drives were a common size these utilities were sometimes useful as program code was generally a large percentage of overall drive usage and stripping the unneeded members of a fat binary would free up a significant amount of space on a hard drive NeXT s Apple s multi architecture binaries edit NeXTSTEP Multi Architecture Binaries edit Fat binaries were a feature of NeXT s NeXTSTEP OPENSTEP operating system starting with NeXTSTEP 3 1 In NeXTSTEP they were called Multi Architecture Binaries Multi Architecture Binaries were originally intended to allow software to be compiled to run both on NeXT s Motorola 68k based hardware and on Intel IA 32 based PCs running NeXTSTEP with a single binary file for both platforms 10 It was later used to allow OPENSTEP applications to run on PCs and the various RISC platforms OPENSTEP supported Multi Architecture Binary files are in a special archive format in which a single file stores one or more Mach O subfiles for each architecture supported by the Multi Architecture Binary Every Multi Architecture Binary starts with a structure struct fat header containing two unsigned integers The first integer magic is used as a magic number to identify this file as a Fat Binary The second integer nfat arch defines how many Mach O Files the archive contains how many instances of the same program for different architectures After this header there are nfat arch number of fat arch structures struct fat arch This structure defines the offset from the start of the file at which to find the file the alignment the size and the CPU type and subtype which the Mach O binary within the archive is targeted at The version of the GNU Compiler Collection shipped with the Developer Tools was able to cross compile source code for the different architectures on which NeXTStep was able to run For example it was possible to choose the target architectures with multiple arch options with the architecture as argument This was a convenient way to distribute a program for NeXTStep running on different architectures It was also possible to create libraries e g using NeXTStep s libtool with different targeted object files Mach O and Mac OS X edit Apple Computer acquired NeXT in 1996 and continued to work with the OPENSTEP code Mach O became the native object file format in Apple s free Darwin operating system 2000 and Apple s Mac OS X 2001 and NeXT s Multi Architecture Binaries continued to be supported by the operating system Under Mac OS X Multi Architecture Binaries can be used to support multiple variants of an architecture for instance to have different versions of 32 bit code optimized for the PowerPC G3 PowerPC G4 and PowerPC 970 generations of processors It can also be used to support multiple architectures such as 32 bit and 64 bit PowerPC or PowerPC and x86 or x86 64 and ARM64 11 Apple s Universal binary edit Main article Universal binary nbsp Apple Universal binary logo In 2005 Apple announced another transition from PowerPC processors to Intel x86 processors Apple promoted the distribution of new applications that support both PowerPC and x86 natively by using executable files in Multi Architecture Binary format 12 Apple calls such programs Universal applications and calls the file format Universal binary as perhaps a way to distinguish this new transition from the previous transition or other uses of Multi Architecture Binary format Universal binary format was not necessary for forward migration of pre existing native PowerPC applications from 2006 to 2011 Apple supplied Rosetta a PowerPC PPC to x86 dynamic binary translator to play this role However Rosetta had a fairly steep performance overhead so developers were encouraged to offer both PPC and Intel binaries using Universal binaries The obvious cost of Universal binary is that every installed executable file is larger but in the years since the release of the PPC hard drive space has greatly outstripped executable size while a Universal binary might be double the size of a single platform version of the same application free space resources generally dwarf the code size which becomes a minor issue In fact often a Universal binary application will be smaller than two single architecture applications because program resources can be shared rather than duplicated If not all of the architectures are required the lipo and ditto command line applications can be used to remove versions from the Multi Architecture Binary image thereby creating what is sometimes called a thin binary In addition Multi Architecture Binary executables can contain code for both 32 bit and 64 bit versions of PowerPC and x86 allowing applications to be shipped in a form that supports 32 bit processors but that makes use of the larger address space and wider data paths when run on 64 bit processors In versions of the Xcode development environment from 2 1 through 3 2 running on Mac OS X 10 4 through Mac OS X 10 6 Apple included utilities which allowed applications to be targeted for both Intel and PowerPC architecture universal binaries could eventually contain up to four versions of the executable code 32 bit PowerPC 32 bit x86 64 bit PowerPC and 64 bit x86 However PowerPC support was removed from Xcode 4 0 and is therefore not available to developers running Mac OS X 10 7 or greater In 2020 Apple announced another transition this time from Intel x86 processors to Apple silicon ARM64 architecture To smooth the transition Apple added support for the Universal 2 binary format Universal 2 binary files are Multi Architecture Binary files containing both x86 64 and ARM64 executable code allowing the binary to run natively on both 64 bit Intel and 64 bit Apple silicon Additionally Apple introduced Rosetta 2 dynamic binary translation for x86 to Arm64 instruction set to allow users to run applications that do not have Universal binary variants Apple Fat EFI binary edit In 2006 Apple switched from PowerPC to Intel CPUs and replaced Open Firmware with EFI However by 2008 some of their Macs used 32 bit EFI and some used 64 bit EFI For this reason Apple extended the EFI specification with fat binaries that contained both 32 bit and 64 bit EFI binaries 13 CP M and DOS editCombined COM style binaries for CP M 80 and DOS edit CP M 80 MP M 80 Concurrent CP M CP M Plus Personal CP M 80 SCP and MSX DOS executables for the Intel 8080 and Z80 processor families use the same COM file extension as DOS compatible operating systems for Intel 8086 binaries nb 1 In both cases programs are loaded at offset 100h and executed by jumping to the first byte in the file 14 15 As the opcodes of the two processor families are not compatible attempting to start a program under the wrong operating system leads to incorrect and unpredictable behaviour In order to avoid this some methods have been devised to build fat binaries which contain both a CP M 80 and a DOS program preceded by initial code which is interpreted correctly on both platforms 15 The methods either combine two fully functional programs each built for their corresponding environment or add stubs which cause the program to exit gracefully if started on the wrong processor For this to work the first few instructions sometimes also called gadget headers 16 in the COM file have to be valid code for both 8086 and 8080 processors which would cause the processors to branch into different locations within the code 16 For example the utilities in Simeon Cran s emulator MyZ80 start with the opcode sequence EBh 52h EBh 17 18 An 8086 sees this as a jump and reads its next instruction from offset 154h whereas an 8080 or compatible processor goes straight through and reads its next instruction from 103h A similar sequence used for this purpose is EBh 03h C3h 19 20 John C Elliott s FATBIN 21 22 23 is a utility to combine a CP M 80 and a DOS COM file into one executable 17 24 His derivative of the original PMsfx modifies archives created by Yoshihiko Mino s PMarc to be self extractable under both CP M 80 and DOS starting with EBh 18h 2Dh 70h 6Dh 73h 2Dh to also include the pms signature for self extracting PMA archives 25 17 24 18 thereby also representing a form of executable ASCII code Another method to keep a DOS compatible operating system from erroneously executing COM programs for CP M 80 and MSX DOS machines 15 is to start the 8080 code with C3h 03h 01h which is decoded as a RET instruction by x86 processors thereby gracefully exiting the program nb 2 while it will be decoded as JP 103h instruction by 8080 processors and simply jump to the next instruction in the program Similar the CP M assembler Z80ASM by SLR Systems would display an error message when erroneously run on DOS 17 Some CP M 80 3 0 COM files may have one or more RSX overlays attached to them by GENCOM 26 If so they start with an extra 256 byte header one page In order to indicate this the first byte in the header is set to magic byte C9h which works both as a signature identifying this type of COM file to the CP M 3 0 executable loader as well as a RET instruction for 8080 compatible processors which leads to a graceful exit if the file is executed under older versions of CP M 80 nb 2 C9h is never appropriate as the first byte of a program for any x86 processor it has different meanings for different generations nb 3 but is never a meaningful first byte the executable loader in some versions of DOS rejects COM files that start with C9h avoiding incorrect operation Similar overlapping code sequences have also been devised for combined Z80 6502 17 8086 68000 17 or x86 MIPS ARM binaries 16 Combined binaries for CP M 86 and DOS edit CP M 86 and DOS do not share a common file extension for executables nb 1 Thus it is not normally possible to confuse executables However early versions of DOS had so much in common with CP M in terms of its architecture that some early DOS programs were developed to share binaries containing executable code One program known to do this was WordStar 3 2x which used identical overlay files in their ports for CP M 86 and MS DOS 27 and used dynamically fixed up code to adapt to the differing calling conventions of these operating systems at runtime 27 Digital Research s GSX for CP M 86 and DOS also shares binary identical 16 bit drivers 28 Combined COM and SYS files edit DOS device drivers typically with file extension SYS start with a file header whose first four bytes are FFFFFFFFh by convention although this is not a requirement 29 This is fixed up dynamically by the operating system when the driver loads typically in the DOS BIOS when it executes DEVICE statements in CONFIG SYS Since DOS does not reject files with a COM extension to be loaded per DEVICE and does not test for FFFFFFFFh it is possible to combine a COM program and a device driver into the same file 30 29 by placing a jump instruction to the entry point of the embedded COM program within the first four bytes of the file three bytes are usually sufficient 29 If the embedded program and the device driver sections share a common portion of code or data it is necessary for the code to deal with being loaded at offset 0100h as a COM style program and at 0000h as a device driver 30 For shared code loaded at the wrong offset but not designed to be position independent this requires an internal address fix up 30 similar to what would otherwise already have been carried out by a relocating loader except for that in this case it has to be done by the loaded program itself this is similar to the situation with self relocating drivers but with the program already loaded at the target location by the operating system s loader Crash protected system files edit Under DOS some files by convention have file extensions which do not reflect their actual file type nb 4 For example COUNTRY SYS 31 is not a DOS device driver nb 5 but a binary NLS database file for use with the CONFIG SYS COUNTRY directive and the NLSFUNC driver 31 Likewise the PC DOS and DR DOS system files IBMBIO COM and IBMDOS COM are special binary images loaded by bootstrap loaders not COM style programs nb 5 Trying to load COUNTRY SYS with a DEVICE statement or executing IBMBIO COM or IBMDOS COM at the command prompt will cause unpredictable results nb 4 nb 6 It is sometimes possible to avoid this by utilizing techniques similar to those described above For example DR DOS 7 02 and higher incorporate a safety feature developed by Matthias R Paul 32 If these files are called inappropriately tiny embedded stubs will just display some file version information and exit gracefully 33 32 34 31 Additionally the message is specifically crafted to follow certain magic patterns recognized by the external NetWare amp DR DOS VERSION file identification utility 31 32 nb 7 A similar protection feature was the 8080 instruction C7h RST 0 at the very start of Jay Sage s and Joe Wright s Z System type 3 and type 4 Z3ENV programs 35 36 as well as Z3TXT language overlay files 37 which would result in a warm boot instead of a crash under CP M 80 if loaded inappropriately 35 36 37 nb 2 In a distantly similar fashion many binary file formats by convention include a 1Ah byte ASCII Z near the beginning of the file This control character will be interpreted as soft end of file EOF marker when a file is opened in non binary mode and thus under many operating systems including the PDP 6 monitor 38 and RT 11 VMS TOPS 10 39 CP M 40 41 DOS 42 and Windows 43 it prevents binary garbage from being displayed when a file is accidentally printed at the console Linux editFatELF Universal binaries for Linux edit nbsp FatELF logo FatELF 44 was a fat binary implementation for Linux and other Unix like operating systems Technically a FatELF binary was a concatenation of ELF binaries with some meta data indicating which binary to use on what architecture 45 Additionally to the CPU architecture abstraction byte order word size CPU instruction set etc there is the advantage of binaries with support for multiple kernel ABIs and versions FatELF has several use cases according to developers 44 Distributions no longer need to have separate downloads for various platforms Separated lib lib32 and lib64 trees are not required anymore in OS directory structure The correct binary and libraries are centrally chosen by the system instead of shell scripts If the ELF ABI changes someday legacy users can be still supported Distribution of web browser plug ins that work out of the box with multiple platforms Distribution of one application file that works across Linux and BSD OS variants without a platform compatibility layer on them One hard drive partition can be booted on different machines with different CPU architectures for development and experimentation Same root file system different kernel and CPU architecture Applications provided by network share or USB sticks will work on multiple systems This is also helpful for creating portable applications and also cloud computing images for heterogeneous systems 46 A proof of concept Ubuntu 9 04 image is available 47 As of 2021 update FatELF has not been integrated into the mainline Linux kernel citation needed 48 49 Windows editFatpack edit Although the Portable Executable format used by Windows does not allow assigning code to platforms it is still possible to make a loader program that dispatches based on architecture This is because desktop versions of Windows on ARM have support for 32 bit x86 emulation making it a useful universal machine code target Fatpack is a loader that demonstrates the concept it includes a 32 bit x86 program that tries to run the executables packed into its resource sections one by one 50 Arm64X edit When developing Windows 11 ARM64 Microsoft introduced a new way to extend the Portable Executable format called Arm64X 51 An Arm64X binary contains all the content that would be in separate x64 Arm64EC and Arm64 binaries but merged into one more efficient file on disk Visual C toolset has been upgraded to support producing such binaries And when building Arm64X binaries are technically difficult developers can build Arm64X pure forwarder DLLs instead 52 Similar concepts editThe following approaches are similar to fat binaries in that multiple versions of machine code of the same purpose are provided in the same file Heterogeneous computing edit Since 2007 some specialized compilers for heterogeneous platforms produce code files for parallel execution on multiple types of processors i e the CHI C for Heterogeneous Integration compiler from the Intel EXOCHI Exoskeleton Sequencer development suite extends the OpenMP pragma concept for multithreading to produce fat binaries containing code sections for different instruction set architectures ISAs from which the runtime loader can dynamically initiate the parallel execution on multiple available CPU and GPU cores in a heterogeneous system environment 53 54 Introduced in February 2007 Nvidia s parallel computing platform CUDA Compute Unified Device Architecture is a software to enable general purpose computing on GPUs GPGPU Its LLVM based compiler NVCC can create ELF based fat binaries containing so called PTX virtual assembly as text which the CUDA runtime driver can later just in time compile into some SASS Streaming Assembler binary executable code for the actually present target GPU The executables can also include so called CUDA binaries aka cubin files containing dedicated executable code sections for one or more specific GPU architectures from which the CUDA runtime can choose from at load time 55 56 57 58 59 60 Fat binaries are also supported by GPGPU Sim de a GPU simulator introduced in 2007 as well 61 62 Multi2Sim M2S an OpenCL heterogeneous system simulator framework originally only for either MIPS or x86 CPUs but later extended to also support ARM CPUs and GPUs like the AMD ATI Evergreen amp Southern Islands as well as Nvidia Fermi amp Kepler families 63 supports ELF based fat binaries as well 64 63 Fat objects edit GNU Compiler Collection GCC and LLVM do not have a fat binary format but they do have fat object files for link time optimization LTO Since LTO involves delaying the compilation to link time the object files must store the intermediate representation IR but on the other hand machine code may need to be stored too for speed or compatibility An LTO object containing both IR and machine code is known as a fat object 65 Function multi versioning edit Even in a program or library intended for the same instruction set architecture a programmer may wish to make use of some newer instruction set extensions while keeping compatibility with an older CPU This can be achieved with function multi versioning FMV versions of the same function are written into the program and a piece of code decides which one to use by detecting the CPU s capabilities such as through CPUID Intel C Compiler GCC and LLVM all have the ability to automatically generate multi versioned functions 66 This is a form of dynamic dispatch without any semantic effects Many math libraries feature hand written assembly routines that are automatically chosen according to CPU capability Examples include glibc Intel MKL and OpenBLAS In addition the library loader in glibc supports loading from alternative paths for specific CPU features 67 A similar but byte level granular approach originally devised by Matthias R Paul and Axel C Frinke is to let a small self discarding relaxing and relocating loader embedded into the executable file alongside any number of alternative binary code snippets conditionally build a size or speed optimized runtime image of a program or driver necessary to perform or not perform a particular function in a particular target environment at load time through a form of dynamic dead code elimination DDCE 68 69 70 71 See also editCross platform software DOS stub Fat pointer Linear Executable LX New Executable NE Portable Executable PE Position independent code PIC Side effect Universal hex format a fat hex file format targeting multiple platforms Alphanumeric executable executable code camouflaged as sometimes even readable text Multi architecture shellcode shellcode targeting multiple platforms and sometimes even camouflaged as alphanumeric text Notes edit a b This isn t a problem for CP M 86 style executables under CP M 86 CP M 86 Plus Personal CP M 86 S5 DOS Concurrent CP M 86 Concurrent DOS Concurrent DOS 286 FlexOS Concurrent DOS 386 DOS Plus Multiuser DOS System Manager and REAL 32 because they use the file extension CMD rather than COM for these files The CMD extension however is conflictive with the file extension for batchjobs written for the command line processor CMD EXE under the OS 2 and Windows NT operating system families a b c This works because a suitable return instruction can be used to exit programs under CP M 80 CP M 86 and DOS although the opcodes exact conditions and underlying mechanisms differ Under CP M 80 programs can terminate that is warm boot into the BIOS by jumping to 0 in the zero page either directly with RST 0 8080 8085 Z80 opcode C7h or by calling BDOS function 0 through the CALL 5 interface Alternatively as the stack is prepared to hold a 0 return address before passing control to a loaded program they can for as long as the stack is aligned also be exited by issuing a RET opcode C9h instruction thereby falling into the terminating code at offset 0 in the zero page Although DOS has a dedicated INT 20h interrupt as well as INT 21h API sub functions to terminate programs which are preferable for more complicated programs for machine translated programs DOS also emulates CP M s behaviour to some extent A program can terminate itself by jumping to offset 0 in its PSP the equivalent to CP M s zero page where the system had previously planted an INT 20h instruction Also a loaded program s initial stack is prepared to hold a word of 0 so that a program issuing a near return RETN 8088 8086 opcode C3h will implicitly jump to the start of its code segment as well thereby eventually reaching the INT 20h as well a In CP M 86 the zero page is structured differently and there is no CALL 5 interface but the stack return method and BDOS function 0 but now through INT E0h both work as well On 8088 8086 processors the opcode C9h is an undocumented alias for CBh RETF popping CS IP from the stack whereas it decodes as LEAVE set SP to BP and pop BP on 80188 80186 and newer processors a b This problem could have been avoided by choosing non conflicting file extensions but once introduced these particular file names were retained from very early versions of MS DOS PC DOS for compatibility reasons with third party tools hard wired to expect these specific file names a b Other DOS files of this type are KEYBOARD SYS a binary keyboard layout database file for the keyboard driver KEYB under MS DOS and PC DOS IO SYS containing the DOS BIOS under MS DOS and MSDOS SYS a text configuration file under Windows 95 MS DOS 7 0 and higher but originally a binary system file containing the MS DOS kernel However MS DOS and PC DOS do not provide crash protected system files at all and these file names are neither used nor needed in DR DOS 7 02 and higher which otherwise does provide crash protected system files This is the reason why these files have the hidden attribute set so that they are not listed by default thereby reducing the risk of being invoked accidentally The COUNTRY SYS file formats supported by the MS DOS PC DOS and the DR DOS families of operating systems contain similar data but are organized differently and incompatible Since the entry points into the data structures are at different offsets in the file it is possible to create fat COUNTRY SYS databases which could be used under both DOS families b However DR DOS 7 02 and its NLSFUNC 4 00 and higher include an improved parser capable of reading both types of formats and variants even at the same time so that Janus headed files are not necessary c d The shipped files are nevertheless fat for including a tiny executable stub just displaying an embedded message when invoked inappropriately d b References edit Devanbu Premkumar T Fong Philip W L Stubblebine Stuart G 19 25 April 1998 3 3 Java and TH PDF Techniques for Trusted Software Engineering Proceedings of the 20th International Conference on Software Engineering Proceedings International Conference on Software Engineering Kyoto Japan p 131 doi 10 1109 ICSE 1998 671109 ISBN 0 8186 8368 6 ISSN 0270 5257 Archived from the original PDF on 2014 01 16 Retrieved 2021 09 29 10 pages Pero Nicola 2008 12 18 gnustep tools make README Packaging GitHub Archived from the original on 2022 05 25 Retrieved 2022 05 26 PackagingDrafts GNUstep Fedora Project Wiki 2009 02 25 Archived from the original on 2022 05 25 Retrieved 2022 05 26 Domain System Software Release Notes Software Release 10 1 PDF first printing ed Chelmsford Massachusetts USA Apollo Computer Inc December 1988 p 2 16 Order No 005809 A03 Archived PDF from the original on 2023 05 26 Retrieved 2022 07 24 256 pages a b Engst Adam C 1994 08 22 Should Fat Binaries Diet TidBITS No 240 TidBITS Publishing Inc ISSN 1090 7017 Archived from the original on 2021 09 29 Retrieved 2021 09 29 a b Engst Adam C 1994 08 29 Fat Binary Comments TidBITS No 241 TidBITS Publishing Inc ISSN 1090 7017 Archived from the original on 2021 09 29 Retrieved 2021 09 29 Chapter 1 Resource Manager Resource Manager Reference Resource File Format Inside Macintosh Mac OS Runtime Architectures Apple Computer 1996 07 06 Archived from the original on 2021 09 29 Retrieved 2021 09 29 Chapter 7 Fat Binary Programs Creating Fat Binary Programs Inside Macintosh Mac OS Runtime Architectures Apple Computer 1997 03 11 Archived from the original on 2021 09 29 Retrieved 2011 06 20 1 Chapter 8 PEF Structure Inside Macintosh Mac OS Runtime Architectures Apple Computer 1997 03 11 Archived from the original on 2021 09 29 Retrieved 2021 09 29 Tevanian Avadis DeMoney Michael Enderby Kevin Wiebe Douglas Snyder Garth 1995 07 11 1993 08 20 Method and apparatus for architecture independent executable files PDF Redwood City California USA NeXT Computer Inc US patent 5432937A Archived PDF from the original on 2020 12 14 Retrieved 2022 05 26 2 9 pages Tevanian Avadis DeMoney Michael Enderby Kevin Wiebe Douglas Snyder Garth 1997 02 18 1995 02 28 Method and apparatus for architecture independent executable files PDF Redwood City California USA NeXT Computer Inc US patent 5604905A Archived PDF from the original on 2022 05 26 Retrieved 2022 05 26 9 pages Universal Binaries and 32 bit 64 bit PowerPC Binaries Mac OS X ABI Mach O File Format Reference Apple Inc 2009 02 04 2003 Archived from the original on 2012 04 27 Singh Amit 2006 06 19 2 6 2 Fat Binaries Mac OS X Internals A Systems Approach Pearson Education p 66 ISBN 978 0 13270226 3 Retrieved 2021 09 28 rEFIt EFI Fat Binaries refit sourceforge net Retrieved 2022 10 18 Paul Matthias R 2002 10 07 2000 Re Run a COM file Newsgroup alt msdos programmer Archived from the original on 2017 09 03 Retrieved 2017 09 03 3 NB Has details on DOS COM program calling conventions a b c Wilkinson William Bill Albert 2005 04 02 2003 1999 02 16 February 1987 1986 11 15 1986 11 10 Written at Heath Company USA Something COMmon About MS DOS and CP M REMark Vol 8 no 2 St Joseph Michigan USA Heath Zenith Users Group HUG pp 55 57 85 P N 885 2085 Archived from the original on 2021 12 13 4 a b c Cha Sang Kil Pak Brian Brumley David Lipton Richard Jay 2010 10 08 2010 10 04 Platform Independent Programs PDF Proceedings of the 17th ACM conference on Computer and Communications Security CCS 10 Chicago Illinois USA Carnegie Mellon University Pittsburgh Pennsylvania USA Georgia Institute of Technology Atlanta Georgia USA pp 547 558 doi 10 1145 1866307 1866369 ISBN 978 1 4503 0244 9 Archived PDF from the original on 2022 05 26 Retrieved 2022 05 26 5 12 pages See also 6 NB Does not address the scenario specifically for 8080 vs 8086 instruction set architectures as for CP M and DOS but describes the general self identifying program concept of platform independent programs PIPs through what the authors call a gadget header that is chunks of program logic not to be confused with ROP gadgets for x86 MIPS and ARM i e 0Eh B2h 02h A9h 0Eh B2h 02h 3Ah 24h 77h 01h 04h or 90h EBh 20h 2Ah 90h EBh 20h 3Ah 24h 77h 01h 04h a b c d e f Wilkinson William Bill Albert Seligman Cory Drushel Richard F Harston Jonathan Graham Elliott John C 1999 02 17 MS DOS amp CP M Compatible Binaries Newsgroup comp os cpm Archived from the original on 2021 12 13 Retrieved 2021 12 13 NB Some of the opcodes in Elliott s example code EBh 44h EBh and EBh 04h might be mixed up a b Elliott John C 2009 10 27 CP M info program Newsgroup comp os cpm Archived from the original on 2021 12 13 Retrieved 2021 12 13 DOS protection feature The idea is based on the utilities in Simeon Cran s MYZ80 emulator the DOS protection header in those goes one better by not changing any Z80 registers The magic sequence is EB 52 EB XCHG MOV D D XCHG but that means the DOS code ends up quite a way away from the start of the program More fun can be had with self extract PMArc archives Start one with defb 0EBh 018h pms and it s treated as a valid archive by the PMA utilities sends 8086 processors to 011Ah and Z80 processors to 0130h ChristW 2012 11 14 2012 11 13 Chen Raymond ed Microsoft Money crashes during import of account transactions or when changing a payee of a downloaded transaction The New Old Thing Archived from the original on 2018 07 05 Retrieved 2018 05 19 byte sequence EB 03 C3 yy xx If you create a COM file with those 5 bytes as the first ones you ll see JMP SHORT 3 followed by 3 garbage bytes If you look at a Z80 disassembly that translates to EX DE HL INC BC The 3rd byte is JUMP followed by the 16 bit address specified as yy xx you ll have a COM file that runs on MS DOS and CP M NB While the author speaks about the Z80 this sequence also works on the 8080 and compatible processors Brehm Andrew J 2016 CP M and MS DOS Fat Binary DesertPenguin org Archived from the original on 2018 05 19 Retrieved 2018 05 19 NB While the article speaks about the Z80 the code sequence also works on the 8080 and compatible processors Elliott John C 1996 06 13 Upload to micros hensa ac uk Newsgroup comp os cpm Archived from the original on 2021 12 13 Retrieved 2021 12 13 FATBIN 1 00 combine a CP M COM file and a DOS COM file to create one which runs on both platforms It was used to create MSODBALL 2 05 convert floppy discs between Amstrad 706k format and a DOS 706k format Both the programs run under CP M 80 and DOS Elliott John C 1998 06 28 1997 04 01 FATBIN v1 01 Archived from the original on 1998 06 28 NB FATBN101 COM 22k 1997 04 01 FATBIN v1 01 Creates fat binary files which will run under both CP M and DOS Distributed in a self extracting archive for CP M 80 and DOS Elliott John C 2002 03 11 DSKWRITE v1 00 Fossies the Fresh Open Source Software Archive Archived from the original on 2021 12 12 Retrieved 2021 12 12 DSKWRITE Z80 contains source for the CP M version DSKWRITE ASM contains source for the DOS version To get the single COM file you need to use FBMAKE 7 NB Mentions FBMAKE from the FATBNSEA COM package a b Elliott John C 2012 06 20 2005 01 05 Generic CP M Seasip info Archived from the original on 2021 11 17 Retrieved 2021 12 12 Self extracting archives are COM files containing a number of smaller files When you run one it will create its smaller files The self extract archive programs will run under DOS 2 or later or CP M with identical effects To extract them under Unix you can use ZXCC FATBNSEA COM FATBIN combines a CP M 80 COM file and a DOS COM file to produce one that will work on both systems M3C4SEA COM M3CONV version 4 converts Spectrum snapshots in the Z80 or SNA format to or from Multiface 3 format Multiface 3 gt Z80 only on a PC PMSFX21X COM PMSFX is the program that was used to generate these self unpacking archives This version 2 11 can generate archives which unpack themselves under CP M or DOS You will need PMARC to use PMSFX New Under DOS it supports exact file sizes SP2BMSEA COM Converts a Stop Press Canvas file to a Windows BMP 8 Elliott John C 1997 01 18 1997 01 11 PMSFX 2 Newsgroup comp os cpm Archived from the original on 2021 12 13 Retrieved 2021 12 13 I ve written a version of PMSFX that produces COM files unpackable under DOS and CP M the first three bytes are both legal Z80 code legal 8086 code and legal PMA header as a self extracting archive Elliott John C Lopushinsky Jim 2002 1998 04 11 CP M 3 COM file header Seasip info Archived from the original on 2016 08 30 Retrieved 2016 08 29 a b Necasek Michal 2018 01 30 2018 01 28 2018 01 26 WordStar Again OS 2 Museum Archived from the original on 2019 07 28 Retrieved 2019 07 28 The reason to suspect such difference is that version 3 2x also supported CP M 86 the overlays are identical between DOS and CP M 86 only the main executable is different the OVR files are 100 identical between DOS and CP M 86 with a flag clearly shown in the WordStar 3 20 manual switching between them at runtime the OS interface in WordStar is quite narrow and well abstracted the WordStar 3 2x overlays are 100 identical between the DOS and CP M 86 versions There is a runtime switch which chooses between calling INT 21h DOS and INT E0h CP M 86 WS COM is not the same between DOS and CP M 86 although it s probably not very different either Lineback Nathan GSX Screen Shots Toastytech com Archived from the original on 2020 01 15 Retrieved 2020 01 15 a b c Paul Matthias R 2002 04 11 Re fd dev ANNOUNCE CuteMouse 2 0 alpha 1 freedos dev Archived from the original on 2020 02 21 Retrieved 2020 02 21 FreeKEYB is a true COM and SYS driver tiny model in one You can safely overwrite the first JMP that s part of what I meant by tricky header you can replace the FFFFh FFFFh by a 3 byte jump and a pending DB FFh It works with MS DOS PC DOS DR DOS and most probably any other DOS issue as well a b c Paul Matthias R 2002 04 06 Re fd dev ANNOUNCE CuteMouse 2 0 alpha 1 freedos dev Archived from the original on 2020 02 07 Retrieved 2020 02 07 Add a SYS device driver header to the driver so that CTMOUSE could be both in one a normal TSR and a device driver similar to our FreeKEYB advanced keyboard driver This is not really needed under DR DOS because INSTALL is supported since DR DOS 3 41 and DR DOS preserves the order of D CONFIG SYS directives but it would improve the flexibility on MS DOS PC DOS systems which always execute DEVICE directives prior to any INSTALL statements regardless of their order in the file software may require the mouse driver to be present as a device driver as mouse drivers have always been device drivers back in the old times These mouse drivers have had specific device driver names depending on which protocol they used PC MOUSE for Mouse Systems Mode for example and some software may search for these drivers in order to find out the correct type of mouse to be used Another advantage would be that device drivers usually consume less memory no environment no PSP It s basically a tricky file header a different code to parse the command line a different entry point and exit line and some segment magics to overcome the ORG 0 ORG 100h difference Self loadhighing a device driver is a bit more tricky as you have to leave the driver header where it is and only relocate the remainder of the driver a b c d Paul Matthias R 2001 06 10 1995 DOS COUNTRY SYS file format COUNTRY LST file 1 44 ed Archived from the original on 2016 04 20 Retrieved 2016 08 20 a b c Paul Matthias R 1997 07 30 1994 05 01 Chapter II 4 Undokumentierte Eigenschaften externer Kommandos SYS COM NWDOS TIPs Tips amp Tricks rund um Novell DOS 7 mit Blick auf undokumentierte Details Bugs und Workarounds MPDOSTIP in German 3 ed Archived from the original on 2017 09 10 Retrieved 2014 08 06 Fur ein zukunftiges Update fur Calderas OpenDOS 7 01 habe ich den Startcode von IBMBIO COM so modifiziert dass er falls falschlicherweise als normales Programm gestartet ohne Absturz zur Kommandozeile zuruckkehrt Wann diese Sicherheitsfunktion in die offizielle Version Einzug halten wird ist jedoch noch nicht abzusehen NB NWDOSTIP TXT is a comprehensive work on Novell DOS 7 and OpenDOS 7 01 including the description of many undocumented features and internals It is part of the author s yet larger MPDOSTIP ZIP collection maintained up to 2001 and distributed on many sites at the time The provided link points to a HTML converted older version of the NWDOSTIP TXT file 9 Paul Matthias R 1997 10 02 Caldera OpenDOS 7 01 7 02 Update Alpha 3 IBMBIO COM README TXT Archived from the original on 2003 10 04 Retrieved 2009 03 29 10 DR DOS 7 03 WHATSNEW TXT Changes from DR DOS 7 02 to DR DOS 7 03 Caldera Inc 1998 12 24 Archived from the original on 2019 04 08 Retrieved 2019 04 08 a b Sage Jay May June 1988 Carlson Art ed ZCPR 3 4 Type 4 Programs The Computer Journal TCJ Programming User Support Applications ZCPR3 Corner 32 Columbia Falls Montana USA 10 17 16 ISSN 0748 9331 ark 13960 t1wd4v943 Retrieved 2021 11 29 11 12 a b Sage Jay May June 1992 March June 1992 Carlson Art McEwen Chris eds Type 3 and Type 4 Programs The Computer Journal TCJ Programming User Support Applications Z System Corner Some New Applications of Type 4 Programs 55 S Plainfield New Jersey USA Socrates Press 13 19 14 16 ISSN 0748 9331 ark 13960 t4dn54d22 Retrieved 2021 11 29 13 14 a b Sage Jay November December 1992 Carlson Art Kibler Bill D eds Regular Feature ZCPR Support Language Independence part 2 The Computer Journal TCJ Programming User Support Applications The Z System Corner 58 Lincoln CA USA 7 10 ISSN 0748 9331 ark 13960 t70v9g87h Retrieved 2020 02 09 there was an opcode of RST 0 which if executed would result in a warm boot A file containing a Z3TXT module should never be executed but at a cost of one byte we could protect ourself against that outside chance The header also contained the string of characters Z3TXT followed by a null 0 byte Many Z System modules include such identifiers In this category are resident command packages RCPs flow command packages FCPs and environment descriptor modules Z3ENVs Programs such as Bridger Mitchell s JETLDR COM that load these modules from files into memory can use the ID string to validate the file that is to make sure that it is the kind of module that the user has stated it to be User mistakes and damaged files can thus be detected The header thus now stands as follows rst db Z3TXT 0 null terminated ID 12345678 must be 8 characters db PROGNAME pad with spaces 123 must be 3 characters db ENG name of language dw LENGTH length of module 15 16 Table of IO Device Characteristics Console or Teletypewriters PDP 6 Multiprogramming System Manual PDF Maynard Massachusetts USA Digital Equipment Corporation DEC 1965 p 43 DEC 6 0 EX SYS UM IP PRE00 Archived PDF from the original on 2014 07 14 Retrieved 2014 07 10 1 84 10 pages 5 1 1 1 Device Dependent Functions Data Modes Full Duplex Software A ASCII and AL ASCII Line PDP 10 Reference Handbook Communicating with the Monitor Time Sharing Monitors PDF Vol 3 Digital Equipment Corporation DEC 1969 pp 5 3 5 6 5 5 431 Archived PDF from the original on 2011 11 15 Retrieved 2014 07 10 207 pages 2 Operating System Call Conventions CP M 2 0 Interface Guide PDF 1 ed Pacific Grove California USA Digital Research 1979 p 5 Archived PDF from the original on 2020 02 28 Retrieved 2020 02 28 The end of an ASCII file is denoted by a control Z character 1AH or a real end of file returned by the CP M read operation Control Z characters embedded within machine code files e g COM files are ignored however and the end of file condition returned by CP M is used to terminate read operations 56 pages Hogan Thom 1982 3 CP M Transient Commands Osborne CP M User Guide For All CP M Users 2 ed Berkeley California USA A Osborne McGraw Hill p 74 ISBN 0 931988 82 9 Retrieved 2020 02 28 CP M marks the end of an ASCII file by placing a CONTROL Z character in the file after the last data character If the file contains an exact multiple of 128 characters in which case adding the CONTROL Z would waste 127 characters CP M does not do so Use of the CONTROL Z character as the end of file marker is possible because CONTROL Z is seldom used as data in ASCII files In a non ASCII file however CONTROL Z is just as likely to occur as any other character Therefore it cannot be used as the end of file marker CP M uses a different method to mark the end of a non ASCII file CP M assumes it has reached the end of the file when it has read the last record basic unit of disk space allocated to the file The disk directory entry for each file contains a list of the disk records allocated to that file This method relies on the size of the file rather than its content to locate the end of the file 17 18 BC Programmer 2010 01 31 2010 01 30 Re Copy command which merges several files tags the word SUB at the end Computer Hope Forum Archived from the original on 2020 02 26 Retrieved 2020 02 26 What are the differences between Linux and Windows txt files Unicode encoding Superuser 2011 08 03 2011 06 08 Archived from the original on 2020 02 26 Retrieved 2020 02 26 a b Gordon Ryan C October 2009 FatELF Universal Binaries for Linux icculus org Archived from the original on 2020 08 27 Retrieved 2010 07 13 Gordon Ryan C November 2009 FatELF specification version 1 icculus org Archived from the original on 2020 08 27 Retrieved 2010 07 25 Windisch Eric 2009 11 03 Subject Newsgroups gmane linux kernel Re FatELF patches gmane org Archived from the original on 2016 11 15 Retrieved 2010 07 08 Gordon Ryan C 2009 FatELF Universal Binaries for Linux The proof of concept virtual machine download page icculus org Archived from the original on 2022 05 21 Retrieved 2022 05 26 NB VM image of Ubuntu 9 04 with Fat Binary support Holwerda Thom 2009 11 05 Ryan Gordon Halts FatELF Project Linux osnews com Archived from the original on 2022 05 26 Retrieved 2010 07 05 Brockmeier Joe Zonker 2010 06 23 SELF Anatomy of an alleged failure LWN net Linux Weekly News Archived from the original on 2022 05 26 Retrieved 2011 02 06 Mulder Sijmen J 2021 03 06 2018 04 25 sjmulder fatpack Build multi architecture fat binaries for Windows GitHub Archived from the original on 2022 05 26 Retrieved 2022 05 26 Arm64X PE files learn microsoft com Microsoft 2022 08 13 Archived from the original on 2023 08 20 Retrieved 2023 03 31 Build Arm64X binaries learn microsoft com Microsoft 2023 03 10 Archived from the original on 2023 08 20 Retrieved 2023 03 31 Wang Perry H Collins Jamison D Chinya Gautham N Jiang Hong Tian Xinmin Girkar Milind Yang Nick Y Lueh Guei Yuan Wang Hong June 2007 EXOCHI architecture and programming environment for a heterogeneous multi core multithreaded system ACM SIGPLAN Notices 42 6 156 166 doi 10 1145 1273442 1250753 11 pages Wang Perry H Collins Jamison D Chinya Gautham N Jiang Hong Tian Xinmin Girkar Milind Pearce Lisa Lueh Guei Yuan Yakoushkin Sergey Wang Hong 2007 08 22 Accelerator Exoskeleton PDF Intel Technology Journal 11 Tera scale Computing 3 Intel Corporation 185 196 doi 10 1535 itj 1103 ISSN 1535 864X Archived PDF from the original on 2022 05 26 Retrieved 2022 05 26 12 of 1 vii 90 1 pages cudaFatFormat h ptxomp c 1 13 Nvidia Corporation 2004 11 15 Archived from the original on 2022 05 26 Retrieved 2022 05 26 Harris Mark J 2014 05 08 2013 06 05 Technical Walkthrough CUDA Pro Tip Understand Fat Binaries and JIT Caching Nvidia Developer Nvidia Archived from the original on 2022 03 23 Retrieved 2022 05 26 CUDA Binary Utilities PDF Application Note 6 0 Nvidia February 2014 DA 06762 001 v6 0 Archived PDF from the original on 2022 05 25 Retrieved 2022 05 25 fatbinary help helpmanual io 8 0 2016 Archived from the original on 2022 05 25 Retrieved 2022 05 25 CUDA Compiler Driver NVCC Reference Guide PDF 11 7 Nvidia May 2022 TRM 06721 001 v11 7 Archived PDF from the original on 2022 05 25 Retrieved 2022 05 25 Braun Lorenz Froning Holger 2019 11 18 CUDA Flux A Lightweight Instruction Profiler for CUDA Applications PDF IEEE ACM Performance Modeling Benchmarking and Simulation of High Performance Computer Systems PMBS Denver Colorado USA IEEE doi 10 1109 PMBS49563 2019 00014 ISBN 978 1 7281 5977 5 Archived PDF from the original on 2022 03 21 Retrieved 2022 05 26 Fung Wilson W L Sham Ivan Yuan George Aamodt Tor M 2007 Dynamic Warp Formation and Scheduling for Efficient GPU Control Flow PDF Vancouver British Columbia Canada Archived PDF from the original on 2022 05 26 Retrieved 2022 05 26 12 pages Bakhoda Ali Yuan George L Fung Wilson W L Wong Henry Aamodt Tor M 2009 04 28 2009 04 26 Analyzing CUDA Workloads Using a Detailed GPU Simulator PDF Proceedings of the IEEE International Symposium on Performance Analysis of Systems and Software ISPASS Boston Massachusetts USA pp 163 174 doi 10 1109 ISPASS 2009 4919648 Archived PDF from the original on 2022 05 26 Retrieved 2022 05 06 19 a b 13 4 The AMD Compiler Wrapper Fat binaries The Multi2Sim Simulation Framework A CPU GPU Model for Heterogeneous Computing PDF v4 2 Multi2Sim 2013 pp 173 176 176 Archived PDF from the original on 2022 05 25 Retrieved 2022 05 25 4 of 210 pages Ubal Rafael Jang Byunghyun Mistry Perhaad Schaa Dana Kaeli David R 2012 09 23 2012 09 19 Multi2Sim A Simulation Framework for CPU GPU Computing PDF 21st International Conference on Parallel Architectures and Compilation Techniques PACT Minneapolis Minnesota USA IEEE ISBN 978 1 4503 1182 3 Archived PDF from the original on 2022 05 25 Retrieved 2022 05 25 10 pages LTO Overview GNU Compiler Collection GCC Internals gcc gnu org Archived from the original on 2021 09 12 Retrieved 2021 09 12 Wennborg Hans 2018 Attributes in Clang Clang 7 documentation Archived from the original on 2022 04 07 Retrieved 2022 05 26 Bahena Victor Rodriguez 2018 04 03 Transparent use of library packages optimized for Intel architecture Power and Performance Clear Linux Project Intel Corporation Archived from the original on 2022 05 26 Retrieved 2022 05 26 Paul Matthias R Frinke Axel C 1997 10 13 1991 FreeKEYB Enhanced DOS keyboard and console driver User Manual v6 5 ed 20 NB FreeKEYB is a Unicode based dynamically configurable successor of K3PLUS supporting most keyboard layouts code pages and country codes Utilizing an off the shelf macro assembler as well as a framework of automatic pre and post processing analysis tools to generate dependency and code morphing meta data to be embedded into the executable file alongside the binary code and a self discarding relaxing and relocating loader the driver implements byte level granular dynamic dead code elimination and relocation techniques at load time as well as self modifying code and reconfigurability at run time to minimize its memory footprint downto close the canonical form depending on the underlying hardware operating system and driver configuration as well as the selected feature set and locale about sixty configuration switches with hundreds of options for an almost unlimited number of possible combinations This complexity and the dynamics are hidden from users who deal with a single executable file just like they would do with a conventional driver Paul Matthias R 2002 04 06 fd dev Ctrl Alt Del freedos dev Archived from the original on 2019 04 27 Retrieved 2019 04 27 FreeKEYB builds the driver s runtime image at initialization time depending on the type of machine it is being loaded on the type of keyboard layout country and code page used the type of mouse and video adapter s installed the other drivers loaded on that system the operating system and the load and relocation method s used the individual features included and the configuration options specified in the command line Due to the large number of command line switches and options supported around fifty switches with multiple possible settings there is a high number of feature combinations with uncountable dependencies resulting in endless number of different target images FreeKEYB s Dynamic Dead Code Elimination technique manages to resolve these dependencies and remove dead code and data is not restricted to include or exclude a somewhat limited number of modules or whole sub routines and fix up some dispatch tables as in classical TSR programming but works at byte level able to remove individual instructions in the middle of larger routines distributed all over the code to handle a particular case or support a specific feature special tools are used to analyze the code and create fixup tables automated using conditional defines to declare the various cases not only optional at assembly time but at initialization time without the overhead of having at least some amount of dead code left in the runtime image to keep track of all the dependencies between these conditionals dynamically build and relocate the runtime image fix up all the references between these small changing and moving binary parts still allowing to use the tiny COM SYS style model is done at initialization time Paul Matthias R 2001 08 21 fd dev Changing codepages in FreeDOS freedos dev Archived from the original on 2019 04 19 Retrieved 2019 04 20 a unique feature we call dynamic dead code elimination so you can at installation time specify which components of the driver you want and which you don t This goes to an extent of dynamic loadable modularization and late linkage I have not seen under DOS so far If you do not like the screen saver macros the calculator or mouse support or lt almost anything else gt you can specify this at the command line and FreeKEYB while taking all the dependencies between the routines into account will completely remove all the code fragments which deal with that feature and are not necessary to provide the requested functionality before the driver relocates the image into the target location and makes itself resident Paul Matthias R 2001 04 10 ANN FreeDOS beta 6 released in German Newsgroup de comp os msdos Archived from the original on 2017 09 09 Retrieved 2017 07 02 brandneue s Feature der dynamischen Dead Code Elimination die die jeweils notwendigen Bestandteile des Treibers erst zum Installationszeitpunkt zusammenbastelt und reloziert so dass keine ungenutzten Code oder Datenbereiche mehr resident bleiben z B wenn jemand ein bestimmtes FreeKEYB Feature nicht benotigt Further reading editTunney Justine Alexandra Roberts 2021 02 11 How Fat Does a Fat Binary Need to Be cosmopolitan libc your build once run anywhere c library Cosmopolitan Communique Archived from the original on 2021 09 12 Retrieved 2021 09 12 Tunney Justine Alexandra Roberts 2021 02 11 How Fat Does a Fat Binary Need to Be Hacker News Archived from the original on 2021 06 01 Retrieved 2021 09 12 Tunney Justine Alexandra Roberts 2020 08 24 actµally pdrtable execµtable Ape Archived from the original on 2021 09 12 Retrieved 2021 09 12 Gotham Frederick 2020 10 22 Making a Fat Binary for Linux and Mac Narkive Archived from the original on 2021 09 12 Retrieved 2021 09 12 Gotham Frederick 2020 10 24 Fat Binary MS Windows and four Linux Narkive Archived from the original on 2021 09 12 Retrieved 2021 09 12 Gotham Frederick 2020 11 02 Fat Binary DOS Windows Linux Narkive Archived from the original on 2021 09 12 Retrieved 2021 09 12 We develop to WarpUP the Amiga StormC for PowerPC and p OS Haage amp Partner GmbH September 1996 Archived from the original on 2017 12 06 Retrieved 2021 09 29 Munch Matthias 2006 2005 AmigaOS 3 9 Features AmigaOS multimedia multi threaded multi tasking Archived from the original on 2021 09 29 Retrieved 2021 09 29 Retrieved from https en wikipedia org w index php title Fat binary amp oldid 1214240362 GPGPU Sim, wikipedia, wiki, book, books, library,

article

, read, download, free, free download, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, picture, music, song, movie, book, game, games.