diff --git a/build-scripts/elfutils.build b/build-scripts/elfutils.build new file mode 100644 index 0000000..99cf0f8 --- /dev/null +++ b/build-scripts/elfutils.build @@ -0,0 +1,81 @@ +#! /bin/bash + +# elfutils +# Source: https://sourceware.org/elfutils/ftp/0.186/elfutils-0.186.tar.bz2 +# +# $BUILD = Directory to temporarily install +# $PKGS = Directory to store built packages +# +# DEPS +# Required: NONE +# Recommended: NONE +# Optional: NONE + +patch -Np1 -i ../patches/elfutils-alpine/fix-aarch64_fregs.patch +patch -Np1 -i ../patches/elfutils-alpine/fix-uninitialized.patch +patch -Np1 -i ../patches/elfutils-alpine/musl-asm-ptrace-h.patch +patch -Np1 -i ../patches/elfutils-alpine/musl-macros.patch +patch -Np1 -i ../patches/elfutils-alpine/musl-strndupa.patch +cp -v ../files/elfutils-alpine/error.h src/ +cp -v ../files/elfutils-alpine/error.h lib/ +cat > lib/libintl.h <<-EOF + #ifndef LIBINTL_H + #define LIBINTL_H + #define _(x) (x) + #endif +EOF + +CFLAGS="$CFLAGS -Wno-error -Wno-null-dereference" \ +./configure --prefix=/usr \ + --sysconfdir=/etc \ + --mandir=/usr/share/man \ + --localstatedir=/var \ + --disable-werror \ + --program-prefix=eu- \ + --enable-deterministic-archives \ + --disable-nls \ + --disable-libdebuginfod \ + --disable-debuginfo \ + --disable-debuginfod + +read -p "Compile?" && make -j2 && + +sudo -S make DESTDIR=$BUILD install && +sudo -S mkdir -pv /BMAN/install /BMAN/usr && \ +sudo -S mv $BUILD/usr/share /BMAN/usr/ && \ + +cd $BUILD && sudo -S mkdir -v ${BUILD}/install && +cat > /tmp/slack-desc << "EOF" +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. Line +# up the first '|' above the ':' following the base package name, and the '|' +# on the right side marks the last column you can put a character in. You must +# make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +elfutils: Elfutils +elfutils: +elfutils: A collection of utilities, including stack (to show backtraces), nm +elfutils: (for listing symbols from object files), size (for listing the section +elfutils: sizes of an object or archive file), strip (for discarding symbols), +elfutils: readelf (to see the raw ELF file structures), and elflint (to check +elfutils: for well-formed ELF files). +elfutils: +elfutils: ftp://sourceware.org/pub/elfutils/ +elfutils: +EOF +sudo -S mv -v /tmp/slack-desc install/ && +sudo -S makepkg -l y -c n $PKGS/elfutils-0.186-$(uname -m)-mlfs.txz && \ +cd /BMAN && \ +cat > /tmp/slack-desc << "EOF" +elfutils-doc: Manuals for Elfutils +elfutils-doc: +elfutils-doc: A collection of utilities for checking and testing ELF files +elfutils-doc: +elfutils-doc: ftp://sourceware.org/pub/elfutils/ +elfutils-doc: +EOF +sudo -S mv -v /tmp/slack-desc install/ && +sudo -S makepkg -l y -c n $PKGS/elfutils-doc-0.186-noarch-mlfs.txz && \ +sudo -S rm -rf ${BUILD}/* /BMAN/* diff --git a/files/elfutils-alpine/error.h b/files/elfutils-alpine/error.h new file mode 100644 index 0000000..ef06827 --- /dev/null +++ b/files/elfutils-alpine/error.h @@ -0,0 +1,27 @@ +#ifndef _ERROR_H_ +#define _ERROR_H_ + +#include +#include +#include +#include +#include + +static unsigned int error_message_count = 0; + +static inline void error(int status, int errnum, const char* format, ...) +{ + va_list ap; + fprintf(stderr, "%s: ", program_invocation_name); + va_start(ap, format); + vfprintf(stderr, format, ap); + va_end(ap); + if (errnum) + fprintf(stderr, ": %s", strerror(errnum)); + fprintf(stderr, "\n"); + error_message_count++; + if (status) + exit(status); +} + +#endif /* _ERROR_H_ */ diff --git a/patches/elfutils-alpine/fix-aarch64_fregs.patch b/patches/elfutils-alpine/fix-aarch64_fregs.patch new file mode 100644 index 0000000..4007416 --- /dev/null +++ b/patches/elfutils-alpine/fix-aarch64_fregs.patch @@ -0,0 +1,14 @@ +It looks like fregs.vregs[] is an array of double? +Casting to Dwarf_Word instead of & 0xFFFFFFF should do. + +--- a/backends/aarch64_initreg.c 2015-11-27 14:36:29.000000000 +0100 ++++ b/backends/aarch64_initreg.c 2016-08-09 03:47:25.428560159 +0200 +@@ -82,7 +82,7 @@ + + Dwarf_Word dwarf_fregs[32]; + for (int r = 0; r < 32; r++) +- dwarf_fregs[r] = fregs.vregs[r] & 0xFFFFFFFF; ++ dwarf_fregs[r] = (Dwarf_Word)fregs.vregs[r]; + + if (! setfunc (64, 32, dwarf_fregs, arg)) + return false; diff --git a/patches/elfutils-alpine/fix-uninitialized.patch b/patches/elfutils-alpine/fix-uninitialized.patch new file mode 100644 index 0000000..31ecd9e --- /dev/null +++ b/patches/elfutils-alpine/fix-uninitialized.patch @@ -0,0 +1,17 @@ + +--- a/libcpu/i386_disasm.c 2015-08-21 14:22:37.000000000 +0200 ++++ b/libcpu/i386_disasm.c 2015-11-20 06:30:59.250629957 +0100 +@@ -1,4 +1,4 @@ +-/* Disassembler for x86. ++/* Disassembler for x86. + Copyright (C) 2007, 2008, 2009, 2011 Red Hat, Inc. + This file is part of elfutils. + Written by Ulrich Drepper , 2007. +@@ -710,6 +710,7 @@ + + case 'm': + /* Mnemonic. */ ++ str = mnebuf; + + if (unlikely (instrtab[cnt].mnemonic == MNE_INVALID)) + { diff --git a/patches/elfutils-alpine/musl-asm-ptrace-h.patch b/patches/elfutils-alpine/musl-asm-ptrace-h.patch new file mode 100644 index 0000000..fc14686 --- /dev/null +++ b/patches/elfutils-alpine/musl-asm-ptrace-h.patch @@ -0,0 +1,10 @@ +--- a/backends/ppc_initreg.c 2019-11-26 23:48:42.000000000 +0100 ++++ b/backends/ppc_initreg.c 2019-12-08 16:57:58.334872602 +0100 +@@ -32,6 +32,7 @@ + + #include + #if defined(__powerpc__) && defined(__linux__) ++# include + # include + # include + #endif diff --git a/patches/elfutils-alpine/musl-macros.patch b/patches/elfutils-alpine/musl-macros.patch new file mode 100644 index 0000000..0d7ec41 --- /dev/null +++ b/patches/elfutils-alpine/musl-macros.patch @@ -0,0 +1,87 @@ +--- a/src/arlib.h 2015-08-21 14:22:37.000000000 +0200 ++++ b/src/arlib.h 2015-11-20 08:02:55.153199611 +0100 +@@ -29,6 +29,16 @@ + #include + #include + ++#if !defined(ACCESSPERMS) ++# define ACCESSPERMS (S_IRWXU|S_IRWXG|S_IRWXO) /* 0777 */ ++#endif ++#if !defined(ALLPERMS) ++# define ALLPERMS (S_ISUID|S_ISGID|S_ISVTX|S_IRWXU|S_IRWXG|S_IRWXO) /* 07777 */ ++#endif ++#if !defined(DEFFILEMODE) ++# define DEFFILEMODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)/* 0666*/ ++#endif ++ + + /* State of -D/-U flags. */ + extern bool arlib_deterministic_output; +--- a/src/elfcompress.c.orig 2016-04-02 12:51:26.903848894 +0200 ++++ b/src/elfcompress.c 2016-04-02 12:55:15.076996338 +0200 +@@ -35,6 +35,14 @@ + #include + #include "system.h" + ++#if !defined(FNM_EXTMATCH) ++# define FNM_EXTMATCH 0 ++#endif ++ ++#if !defined(ALLPERMS) ++# define ALLPERMS (S_ISUID|S_ISGID|S_ISVTX|S_IRWXU|S_IRWXG|S_IRWXO) /* 07777 */ ++#endif ++ + /* Name and version of program. */ + static void print_version (FILE *stream, struct argp_state *state); + ARGP_PROGRAM_VERSION_HOOK_DEF = print_version; +diff --git a/lib/libeu.h b/lib/libeu.h +index 69fe3d7..e5c99b8 100644 +--- a/lib/libeu.h ++++ b/lib/libeu.h +@@ -31,6 +31,27 @@ + + #include + #include ++#include ++#include ++#include ++ ++#ifndef TEMP_FAILURE_RETRY ++#define TEMP_FAILURE_RETRY(expression) \ ++ (__extension__ \ ++ ({ long int __result; \ ++ do __result = (long int) (expression); \ ++ while (__result == -1L && errno == EINTR); \ ++ __result; })) ++#endif ++ ++#ifndef strndupa ++#define strndupa(s, n) \ ++ (__extension__ ({const char *__in = (s); \ ++ size_t __len = strnlen (__in, (n)) + 1; \ ++ char *__out = (char *) alloca (__len); \ ++ __out[__len-1] = '\0'; \ ++ (char *) memcpy (__out, __in, __len-1);})) ++#endif + + extern void *xmalloc (size_t) __attribute__ ((__malloc__)); + extern void *xcalloc (size_t, size_t) __attribute__ ((__malloc__)); +diff --git a/src/strip.c b/src/strip.c +index 48792a7..d2f0c60 100644 +--- a/src/strip.c ++++ b/src/strip.c +@@ -46,6 +46,14 @@ + #include + #include + ++#if !defined(FNM_EXTMATCH) ++# define FNM_EXTMATCH 0 ++#endif ++ ++#if !defined(ACCESSPERMS) ++#define ACCESSPERMS (S_IRWXU|S_IRWXG|S_IRWXO) ++#endif ++ + typedef uint8_t GElf_Byte; + + /* Name and version of program. */ diff --git a/patches/elfutils-alpine/musl-strndupa.patch b/patches/elfutils-alpine/musl-strndupa.patch new file mode 100644 index 0000000..a520688 --- /dev/null +++ b/patches/elfutils-alpine/musl-strndupa.patch @@ -0,0 +1,18 @@ +--- a/src/unstrip.c.orig 2017-04-27 14:26:26.000000000 +0000 ++++ b/src/unstrip.c 2017-05-05 15:51:33.515154220 +0000 +@@ -56,6 +56,15 @@ + # define _(str) gettext (str) + #endif + ++#ifndef strndupa ++#define strndupa(s, n) \ ++ (__extension__ ({const char *__in = (s); \ ++ size_t __len = strnlen (__in, (n)) + 1; \ ++ char *__out = (char *) alloca (__len); \ ++ __out[__len-1] = '\0'; \ ++ (char *) memcpy (__out, __in, __len-1);})) ++#endif ++ + /* Name and version of program. */ + ARGP_PROGRAM_VERSION_HOOK_DEF = print_version; +