[lld] [LLD][COFF] Add support for custom DOS stub (PR #122561)
Hans Wennborg via llvm-commits
llvm-commits at lists.llvm.org
Tue Jan 14 03:23:42 PST 2025
================
@@ -246,6 +246,21 @@ void LinkerDriver::parseAligncomm(StringRef s) {
std::max(ctx.config.alignComm[std::string(name)], 1 << v);
}
+void LinkerDriver::parseStub(StringRef path) {
+ std::unique_ptr<MemoryBuffer> stub =
+ CHECK(MemoryBuffer::getFile(path), "could not open " + path);
+ size_t bufferSize = stub->getBufferSize();
+ const char *bufferStart = stub->getBufferStart();
+ // MS link.exe compatibility:
+ // 1. stub must be greater or equal than 64 bytes
+ // 2. stub must be 8-byte aligned
+ // 3. stub must be start with a valid dos signature 'MZ'
+ if (bufferSize < 0x40 || bufferSize % 8 != 0 ||
+ (bufferStart[0] != 'M' || bufferStart[1] != 'Z'))
+ Err(ctx) << "/stub: invalid format for MS-DOS stub file: " << path;
----------------
zmodem wrote:
It would be helpful if the error message could mention which requirement (size, signature, ..) failed.
(Useless trivia: 'zm' is also a valid dos .exe signature, but the windows loader doesn't like it: https://www.hanshq.net/making-executables.html#zm)
https://github.com/llvm/llvm-project/pull/122561
More information about the llvm-commits
mailing list