summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdriaan de Groot <adridg@FreeBSD.org>2020-06-01 23:20:08 +0000
committerAdriaan de Groot <adridg@FreeBSD.org>2020-06-01 23:20:08 +0000
commit367e6bacf4910738d17ceb2172c92d16ac3f3523 (patch)
tree010f55ec846aa22c2021a0c7d902a8d16c327525
parentConnect the new lang/gcc10 port which branched off lang/gcc10-devel. (diff)
devel/heaptrack Try to fix 32-bit build
I don't see that this can ever have built on 32-bit FreeBSD (i386 in particular) because the code uses Sxword, which our elf32.h doesn't define. The Linux elf.h (which hanbles both sizes) does define a 64-bit Sxword. The patch throws in a using (typedef, but C++-style) that mimics the 64-bit integers used in the Linux headers; this 64-bit value doesn't match the size of Elf32_Dyn fields in either OS, but I'll take a warning over non-stop build failures any day.
-rw-r--r--devel/heaptrack/Makefile1
-rw-r--r--devel/heaptrack/files/patch-src_track_heaptrack__inject.cpp21
2 files changed, 22 insertions, 0 deletions
diff --git a/devel/heaptrack/Makefile b/devel/heaptrack/Makefile
index 0b80dde382cc..8a9363cb16c7 100644
--- a/devel/heaptrack/Makefile
+++ b/devel/heaptrack/Makefile
@@ -4,6 +4,7 @@ PORTNAME= heaptrack
DISTVERSIONPREFIX= v
DISTVERSION= 1.1.0-179
DISTVERSIONSUFFIX= -gb0f8f2d
+PORTREVISION= 1
CATEGORIES= devel kde
MAINTAINER= kde@FreeBSD.org
diff --git a/devel/heaptrack/files/patch-src_track_heaptrack__inject.cpp b/devel/heaptrack/files/patch-src_track_heaptrack__inject.cpp
new file mode 100644
index 000000000000..8178f21beffb
--- /dev/null
+++ b/devel/heaptrack/files/patch-src_track_heaptrack__inject.cpp
@@ -0,0 +1,21 @@
+--- src/track/heaptrack_inject.cpp.orig 2020-06-01 22:47:27 UTC
++++ src/track/heaptrack_inject.cpp
+@@ -66,8 +66,18 @@ using Dyn = ElfW(Dyn);
+ using Rel = ElfW(Rel);
+ using Rela = ElfW(Rela);
+ using Sym = ElfW(Sym);
++#if __WORDSIZE == 64
+ using Sxword = ElfW(Sxword);
+ using Xword = ElfW(Xword);
++#else
++// FreeBSD elf32.h doesn't define Elf32_Sxword or _Xword. This is used in struct
++// elftable, where it's used as a tag value. Our Elf32_Dyn uses Elf32_Sword there,
++// as does the Linux definition (and the standard); the El64_Dyn uses Sxword.
++//
++// Linux elf.h defines Elf32_Sxword as a 64-bit quantity, so let's do that
++using Sxword = int64_t;
++using Xword = uint64_t;
++#endif
+ }
+
+ void overwrite_symbols() noexcept;