added mold
This commit is contained in:
parent
59883fed2c
commit
4819200984
2 changed files with 122 additions and 0 deletions
27
pkgs/mold/build.sh
Normal file
27
pkgs/mold/build.sh
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
pkgname=mold
|
||||||
|
pkgver=main
|
||||||
|
deps="musl:libexecinfo"
|
||||||
|
|
||||||
|
fetch() {
|
||||||
|
curl -L "https://github.com/rui314/mold/archive/refs/heads/main.tar.gz" -o $pkgname-$pkgver.tar.gz
|
||||||
|
tar -xf $pkgname-$pkgver.tar.gz
|
||||||
|
cd $pkgname-$pkgver
|
||||||
|
patch -p1 < ../../musl.patch
|
||||||
|
}
|
||||||
|
|
||||||
|
build() {
|
||||||
|
cd $pkgname-$pkgver
|
||||||
|
gmake
|
||||||
|
}
|
||||||
|
|
||||||
|
package() {
|
||||||
|
cd $pkgname-$pkgver
|
||||||
|
gmake install DESTDIR=$pkgdir
|
||||||
|
ln -sr $pkgdir/usr/bin/mold $pkgdir/usr/bin/ld.mold
|
||||||
|
}
|
||||||
|
|
||||||
|
license() {
|
||||||
|
cd $pkgname-$pkgver
|
||||||
|
cat LICENSE
|
||||||
|
# cat COPYING
|
||||||
|
}
|
95
pkgs/mold/musl.patch
Normal file
95
pkgs/mold/musl.patch
Normal file
|
@ -0,0 +1,95 @@
|
||||||
|
diff --git a/Makefile b/Makefile
|
||||||
|
index 1b36943..c6e0407 100644
|
||||||
|
--- a/Makefile
|
||||||
|
+++ b/Makefile
|
||||||
|
@@ -8,7 +8,7 @@ CPPFLAGS = -g -Imimalloc/include -pthread -std=c++20 \
|
||||||
|
-DGIT_HASH=\"$(GIT_HASH)\" \
|
||||||
|
$(EXTRA_CPPFLAGS)
|
||||||
|
LDFLAGS += $(EXTRA_LDFLAGS) -rdynamic
|
||||||
|
-LIBS = -Wl,-as-needed -lcrypto -pthread -lz -lxxhash -ldl -lm
|
||||||
|
+LIBS = -Wl,-as-needed -lcrypto -pthread -lz -lxxhash -lexecinfo -ldl -lm
|
||||||
|
OBJS = main.o object_file.o input_sections.o output_chunks.o \
|
||||||
|
mapfile.o perf.o linker_script.o archive_file.o output_file.o \
|
||||||
|
subprocess.o gc_sections.o icf.o symbols.o cmdline.o filepath.o \
|
||||||
|
diff --git a/mold.h b/mold.h
|
||||||
|
index 550545c..8bab9b9 100644
|
||||||
|
--- a/mold.h
|
||||||
|
+++ b/mold.h
|
||||||
|
@@ -27,6 +27,7 @@
|
||||||
|
#include <tbb/task_group.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <unordered_set>
|
||||||
|
+#include <unordered_map>
|
||||||
|
#include <vector>
|
||||||
|
#include <xxh3.h>
|
||||||
|
|
||||||
|
@@ -41,6 +42,9 @@ typedef int32_t i32;
|
||||||
|
typedef int64_t i64;
|
||||||
|
|
||||||
|
static constexpr i32 SECTOR_SIZE = 512;
|
||||||
|
+#ifdef PAGE_SIZE
|
||||||
|
+#undef PAGE_SIZE
|
||||||
|
+#endif
|
||||||
|
static constexpr i32 PAGE_SIZE = 4096;
|
||||||
|
static constexpr i32 SHA256_SIZE = 32;
|
||||||
|
|
||||||
|
@@ -2198,7 +2202,7 @@ InputFile<E>::get_string(Context<E> &ctx, const ElfShdr<E> &shdr) {
|
||||||
|
u8 *end = begin + shdr.sh_size;
|
||||||
|
if (mb->data(ctx) + mb->size() < end)
|
||||||
|
Fatal(ctx) << *this << ": shdr corrupted";
|
||||||
|
- return {(char *)begin, (char *)end};
|
||||||
|
+ return {(char *)begin, (size_t)(end-begin)};
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename E>
|
||||||
|
diff --git a/oneTBB/include/oneapi/tbb/detail/_config.h b/oneTBB/include/oneapi/tbb/detail/_config.h
|
||||||
|
index 27a3dd7..bb422b0 100644
|
||||||
|
--- a/oneTBB/include/oneapi/tbb/detail/_config.h
|
||||||
|
+++ b/oneTBB/include/oneapi/tbb/detail/_config.h
|
||||||
|
@@ -257,7 +257,7 @@
|
||||||
|
#define __TBB_CPP20_COMPARISONS_PRESENT __TBB_CPP20_PRESENT
|
||||||
|
#endif
|
||||||
|
|
||||||
|
-#define __TBB_RESUMABLE_TASKS (!__TBB_WIN8UI_SUPPORT && !__ANDROID__)
|
||||||
|
+#define __TBB_RESUMABLE_TASKS (!__TBB_WIN8UI_SUPPORT && __GLIBC__)
|
||||||
|
|
||||||
|
/* This macro marks incomplete code or comments describing ideas which are considered for the future.
|
||||||
|
* See also for plain comment with TODO and FIXME marks for small improvement opportunities.
|
||||||
|
diff --git a/oneTBB/src/tbbmalloc_proxy/proxy.cpp b/oneTBB/src/tbbmalloc_proxy/proxy.cpp
|
||||||
|
index b286e51..8057708 100644
|
||||||
|
--- a/oneTBB/src/tbbmalloc_proxy/proxy.cpp
|
||||||
|
+++ b/oneTBB/src/tbbmalloc_proxy/proxy.cpp
|
||||||
|
@@ -24,7 +24,8 @@
|
||||||
|
// of aligned_alloc as required by new C++ standard, this makes it hard to
|
||||||
|
// redefine aligned_alloc here. However, running on systems with new libc
|
||||||
|
// version, it still needs it to be redefined, thus tricking system headers
|
||||||
|
-#if defined(__GLIBC_PREREQ) && !__GLIBC_PREREQ(2, 16) && _GLIBCXX_HAVE_ALIGNED_ALLOC
|
||||||
|
+#if defined(__GLIBC_PREREQ)
|
||||||
|
+#if !__GLIBC_PREREQ(2, 16) && _GLIBCXX_HAVE_ALIGNED_ALLOC
|
||||||
|
// tell <cstdlib> that there is no aligned_alloc
|
||||||
|
#undef _GLIBCXX_HAVE_ALIGNED_ALLOC
|
||||||
|
// trick <stdlib.h> to define another symbol instead
|
||||||
|
@@ -33,6 +34,7 @@
|
||||||
|
#include <cstdlib>
|
||||||
|
#undef aligned_alloc
|
||||||
|
#endif // defined(__GLIBC_PREREQ)&&!__GLIBC_PREREQ(2, 16)&&_GLIBCXX_HAVE_ALIGNED_ALLOC
|
||||||
|
+#endif // defined(__GLIBC_PREREQ)
|
||||||
|
#endif // __linux__ && !__ANDROID__
|
||||||
|
|
||||||
|
#include "proxy.h"
|
||||||
|
@@ -256,6 +258,7 @@ int mallopt(int /*param*/, int /*value*/) __THROW
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
+#ifdef __GLIBC__
|
||||||
|
struct mallinfo mallinfo() __THROW
|
||||||
|
{
|
||||||
|
struct mallinfo m;
|
||||||
|
@@ -263,6 +266,7 @@ struct mallinfo mallinfo() __THROW
|
||||||
|
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
#if __ANDROID__
|
||||||
|
// Android doesn't have malloc_usable_size, provide it to be compatible
|
Loading…
Reference in a new issue