llvm: update __data/bss_start/end__ patch
This commit is contained in:
parent
2e8787649d
commit
e1a9cc68ba
@ -1,13 +1,18 @@
|
||||
From 03dd9259f5d37b861387607af8e77610a8d94499 Mon Sep 17 00:00:00 2001
|
||||
From 6a552fa2d904773ac0b9aa1f11ccf642b96f8dd2 Mon Sep 17 00:00:00 2001
|
||||
From: Jeremy Drake <github@jdrake.com>
|
||||
Date: Sun, 13 Apr 2025 22:41:05 -0700
|
||||
Subject: [PATCH 12/15] [LLD][COFF] add __{data,bss}_{start,end}__ symbols for
|
||||
Subject: [PATCH 11/15] [LLD][COFF] add __{data,bss}_{start,end}__ symbols for
|
||||
Cygwin support
|
||||
|
||||
Cygwin requires these symbols for its fork emulation to know what data
|
||||
to copy into the child. GNU ld defines these symbols for MinGW targets
|
||||
also, so do the same here.
|
||||
|
||||
Signed-off-by: Jeremy Drake <github@jdrake.com>
|
||||
---
|
||||
lld/COFF/Driver.cpp | 5 +++++
|
||||
lld/COFF/Writer.cpp | 36 ++++++++++++++++++++++++++++++++++--
|
||||
2 files changed, 39 insertions(+), 2 deletions(-)
|
||||
lld/COFF/Writer.cpp | 33 +++++++++++++++++++++++++++++++--
|
||||
2 files changed, 36 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/lld/COFF/Driver.cpp b/lld/COFF/Driver.cpp
|
||||
index ac3ac57bd..fa882f883 100644
|
||||
@ -33,7 +38,7 @@ index ac3ac57bd..fa882f883 100644
|
||||
if (config->debug || config->buildIDHash != BuildIDHash::None)
|
||||
if (symtab.findUnderscore("__buildid"))
|
||||
diff --git a/lld/COFF/Writer.cpp b/lld/COFF/Writer.cpp
|
||||
index 2bdaeb58a..3b3c490f5 100644
|
||||
index 2bdaeb58a..41973a245 100644
|
||||
--- a/lld/COFF/Writer.cpp
|
||||
+++ b/lld/COFF/Writer.cpp
|
||||
@@ -239,6 +239,7 @@ private:
|
||||
@ -73,7 +78,7 @@ index 2bdaeb58a..3b3c490f5 100644
|
||||
}
|
||||
|
||||
// Create .idata section for the DLL-imported symbol table.
|
||||
@@ -2334,6 +2338,34 @@ void Writer::insertCtorDtorSymbols() {
|
||||
@@ -2334,6 +2338,31 @@ void Writer::insertCtorDtorSymbols() {
|
||||
dtorListHead);
|
||||
}
|
||||
|
||||
@ -81,28 +86,25 @@ index 2bdaeb58a..3b3c490f5 100644
|
||||
+// The Cygwin startup code uses __data_start__ __data_end__ __bss_start__
|
||||
+// and __bss_end__ to know what to copy during fork emulation.
|
||||
+void Writer::insertBssDataStartEndSymbols() {
|
||||
+ EmptyChunk *startOfData = make<EmptyChunk>();
|
||||
+ EmptyChunk *endOfData = make<EmptyChunk>();
|
||||
+ EmptyChunk *startOfBss = make<EmptyChunk>();
|
||||
+ EmptyChunk *endOfBss = make<EmptyChunk>();
|
||||
+ dataSec->insertChunkAtStart(startOfData);
|
||||
+ dataSec->addChunk(endOfData);
|
||||
+ bssSec->insertChunkAtStart(startOfBss);
|
||||
+ bssSec->addChunk(endOfBss);
|
||||
+
|
||||
+ Symbol *dataStartSym = ctx.symtab.find("__data_start__");
|
||||
+ Symbol *dataEndSym = ctx.symtab.find("__data_end__");
|
||||
+ Symbol *bssStartSym = ctx.symtab.find("__bss_start__");
|
||||
+ Symbol *bssEndSym = ctx.symtab.find("__bss_end__");
|
||||
+ replaceSymbol<DefinedSynthetic>(dataStartSym, dataStartSym->getName(),
|
||||
+ startOfData);
|
||||
+ replaceSymbol<DefinedSynthetic>(dataEndSym, dataEndSym->getName(),
|
||||
+ endOfData);
|
||||
+ replaceSymbol<DefinedSynthetic>(bssStartSym, bssStartSym->getName(),
|
||||
+ startOfBss);
|
||||
+ replaceSymbol<DefinedSynthetic>(bssEndSym, bssEndSym->getName(),
|
||||
+ endOfBss);
|
||||
+ if (!dataSec->chunks.empty()) {
|
||||
+ Symbol *dataStartSym = ctx.symtab.find("__data_start__");
|
||||
+ Symbol *dataEndSym = ctx.symtab.find("__data_end__");
|
||||
+ Chunk *endChunk = dataSec->chunks.back();
|
||||
+ replaceSymbol<DefinedSynthetic>(dataStartSym, dataStartSym->getName(),
|
||||
+ dataSec->chunks.front());
|
||||
+ replaceSymbol<DefinedSynthetic>(dataEndSym, dataEndSym->getName(), endChunk,
|
||||
+ endChunk->getSize());
|
||||
+ }
|
||||
+
|
||||
+ if (!bssSec->chunks.empty()) {
|
||||
+ Symbol *bssStartSym = ctx.symtab.find("__bss_start__");
|
||||
+ Symbol *bssEndSym = ctx.symtab.find("__bss_end__");
|
||||
+ Chunk *endChunk = bssSec->chunks.back();
|
||||
+ replaceSymbol<DefinedSynthetic>(bssStartSym, bssStartSym->getName(),
|
||||
+ bssSec->chunks.front());
|
||||
+ replaceSymbol<DefinedSynthetic>(bssEndSym, bssEndSym->getName(), endChunk,
|
||||
+ endChunk->getSize());
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
// Handles /section options to allow users to overwrite
|
||||
@ -50,7 +50,7 @@ source=("${_url}/llvm-${pkgver}.src.tar.xz"{,.sig}
|
||||
"0111-Clang-Driver-use-__cxa_atexit-by-default-on-Cygwin.patch"
|
||||
"0112-hack-cygwin-define-_GLIBCXX_USE_CXX11_ABI-to-1-if-no.patch"
|
||||
"0201-LLD-MinGW-Implement-dll-search-prefix-option.patch"
|
||||
"0203-hack-add-data-bss-start-end.patch"
|
||||
"0203-LLD-COFF-add-__-data-bss-_-start-end-__-symbols-for-.patch"
|
||||
"0204-LLD-MinGW-Fall-back-to-using-default-target-if-no-m-.patch"
|
||||
)
|
||||
sha256sums=('e5dc9b9d842c5f79080f67860a084077e163430de1e2cd3a74e8bee86e186751'
|
||||
@ -80,7 +80,7 @@ sha256sums=('e5dc9b9d842c5f79080f67860a084077e163430de1e2cd3a74e8bee86e186751'
|
||||
'5a383313e4a2432471b0cd2946786eb3bafd9f6dfc5f2ff005c594b77a82470d'
|
||||
'4587f6bd019e69df04fab9b7ba6c9245cd1a26167ce2557530eb185d495f3717'
|
||||
'92edbcd4cb2c9d6706a31bd64c25865931025e3c430d23c16900ac39a408785f'
|
||||
'ef47bc11766948f5bd5bd1f1054d975399bbb5f12a1bf893fc22a0c0d8abd2b2'
|
||||
'e94efca8f2336bbd76265847dc449dcc537b8c6a4f740473884bc70249ca8b02'
|
||||
'9df6ecfdd5a18a875442f529fbe08a86eae07986557b0633c3c01404cf6ba3ea')
|
||||
validpgpkeys=('B6C8F98282B944E3B0D5C2530FC3042E345AD05D' # Hans Wennborg, Google.
|
||||
'474E22316ABF4785A88C6E8EA2C794A986419D8A' # Tom Stellard
|
||||
@ -143,7 +143,7 @@ prepare() {
|
||||
# Patch lld
|
||||
cd "${srcdir}"/lld
|
||||
apply_git_patch_with_msg 0201-LLD-MinGW-Implement-dll-search-prefix-option.patch
|
||||
apply_git_patch_with_msg 0203-hack-add-data-bss-start-end.patch
|
||||
apply_git_patch_with_msg 0203-LLD-COFF-add-__-data-bss-_-start-end-__-symbols-for-.patch
|
||||
apply_git_patch_with_msg 0204-LLD-MinGW-Fall-back-to-using-default-target-if-no-m-.patch
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user