svn commit: r384314 - in head/devel/nasm: . files
Adam Weinberger
adamw at FreeBSD.org
Sun Apr 19 19:06:56 UTC 2015
Author: adamw
Date: Sun Apr 19 19:06:55 2015
New Revision: 384314
URL: https://svnweb.freebsd.org/changeset/ports/384314
Log:
Add a patch, taken from the nasm repo, written by emaste, that fixes
alignment on 64-bit archs.
From emaste:
Essentially what happens is that nasm creates object files that have
section contents aligned to 16 bytes, but it only specifies that the
section requires 4 byte alignment. It seems that the GNU tools (strip
at least) silently correct this to 8, which is what it should be.
This fix only affects FreeBSD -CURRENT in combination with another
(not yet committed) fix to libtool. On stable/10 and earlier GNU ld
masks the nasm bug, and without the libtool fix we don't yet try to
strip debug info from object files in -CURRENT.
PORTREVISION bump for this.
Also, while here, rename two other patches to have proper separators
(_ instead of +).
And, donate this port back to ports at . It is used by many other ports
so it deserves to be maintained by the collective.
Added:
head/devel/nasm/files/patch-elf64-alignment (contents, props changed)
head/devel/nasm/files/patch-output_outelf32.c
- copied unchanged from r383931, head/devel/nasm/files/patch-output+outelf32.c
head/devel/nasm/files/patch-output_outelf64.c
- copied unchanged from r383931, head/devel/nasm/files/patch-output+outelf64.c
Deleted:
head/devel/nasm/files/patch-output+outelf32.c
head/devel/nasm/files/patch-output+outelf64.c
Modified:
head/devel/nasm/Makefile
Modified: head/devel/nasm/Makefile
==============================================================================
--- head/devel/nasm/Makefile Sun Apr 19 18:46:53 2015 (r384313)
+++ head/devel/nasm/Makefile Sun Apr 19 19:06:55 2015 (r384314)
@@ -3,11 +3,12 @@
PORTNAME= nasm
PORTVERSION= 2.11.08
+PORTREVISION= 1
PORTEPOCH= 1
CATEGORIES= devel lang
MASTER_SITES= http://www.nasm.us/pub/nasm/releasebuilds/${PORTVERSION}/
-MAINTAINER= adamw at FreeBSD.org
+MAINTAINER= ports at FreeBSD.org
COMMENT= General-purpose multi-platform x86 and amd64 assembler
LICENSE= BSD2CLAUSE
Added: head/devel/nasm/files/patch-elf64-alignment
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/devel/nasm/files/patch-elf64-alignment Sun Apr 19 19:06:55 2015 (r384314)
@@ -0,0 +1,54 @@
+From 1f0cb0f2c1ba632c0fab02424928cfb756a9160c Mon Sep 17 00:00:00 2001
+From: Ed Maste <emaste at freebsd.org>
+Date: Thu, 16 Apr 2015 00:59:52 +0300
+Subject: [PATCH] output: elf64 -- increase .symtab and .rel* alignment to 8
+
+Discovered while working on ELF Tool Chain elfcopy (strip),
+which originally crashed on an assert while processing
+a nasm-generated ELF object.
+
+The .symtab and .rela.text sections report 4 byte alignment,
+but require 8.
+
+As an aside, see https://sourceforge.net/p/elftoolchain/tickets/485/ for a
+discussion of the ELF Tool Chain issue that this bug exposed.
+
+With my WIP elfcopy change and nasm-assembled jccolss2-64.o from libjpeg-turbo:
+
+% strip -o /dev/null --strip-debug jccolss2-64.o
+strip: section .symtab alignment 4 increased to 8
+strip: section .rela.text alignment 4 increased to 8
+
+http://bugzilla.nasm.us/show_bug.cgi?id=3392307
+
+Signed-off-by: Ed Maste <emaste at freebsd.org>
+Signed-off-by: Cyrill Gorcunov <gorcunov at gmail.com>
+---
+ output/outelf64.c | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git output/outelf64.c output/outelf64.c
+index 241e345..19bd845 100644
+--- output/outelf64.c
++++ output/outelf64.c
+@@ -1084,7 +1084,7 @@ static void elf_write(void)
+
+ /* .symtab */
+ elf_section_header(p - shstrtab, SHT_SYMTAB, 0, symtab, true,
+- symtablen, sec_strtab, symtablocal, 4, 24);
++ symtablen, sec_strtab, symtablocal, 8, 24);
+ p += strlen(p) + 1;
+
+ /* .strtab */
+@@ -1096,7 +1096,7 @@ static void elf_write(void)
+ for (i = 0; i < nsects; i++)
+ if (sects[i]->head) {
+ elf_section_header(p - shstrtab, SHT_RELA, 0, sects[i]->rel, true,
+- sects[i]->rellen, sec_symtab, i + 1, 4, 24);
++ sects[i]->rellen, sec_symtab, i + 1, 8, 24);
+ p += strlen(p) + 1;
+ }
+
+--
+1.7.6.6.GIT
+
Copied: head/devel/nasm/files/patch-output_outelf32.c (from r383931, head/devel/nasm/files/patch-output+outelf32.c)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/devel/nasm/files/patch-output_outelf32.c Sun Apr 19 19:06:55 2015 (r384314, copy of r383931, head/devel/nasm/files/patch-output+outelf32.c)
@@ -0,0 +1,11 @@
+--- output/outelf32.c.orig
++++ output/outelf32.c
+@@ -1702,7 +1702,7 @@
+ * the source-file, the n_desc field should be set to the number
+ * of remaining stabs
+ */
+- WRITE_STAB(sptr, fileidx[0], 0, 0, 0, strlen(allfiles[0] + 12));
++ WRITE_STAB(sptr, fileidx[0], 0, 0, 0, stabstrlen);
+
+ /* this is the stab for the main source file */
+ WRITE_STAB(sptr, fileidx[mainfileindex], N_SO, 0, 0, 0);
Copied: head/devel/nasm/files/patch-output_outelf64.c (from r383931, head/devel/nasm/files/patch-output+outelf64.c)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/devel/nasm/files/patch-output_outelf64.c Sun Apr 19 19:06:55 2015 (r384314, copy of r383931, head/devel/nasm/files/patch-output+outelf64.c)
@@ -0,0 +1,11 @@
+--- output/outelf64.c.orig
++++ output/outelf64.c
+@@ -1772,7 +1772,7 @@
+ * the source-file, the n_desc field should be set to the number
+ * of remaining stabs
+ */
+- WRITE_STAB(sptr, fileidx[0], 0, 0, 0, strlen(allfiles[0] + 12));
++ WRITE_STAB(sptr, fileidx[0], 0, 0, 0, stabstrlen);
+
+ /* this is the stab for the main source file */
+ WRITE_STAB(sptr, fileidx[mainfileindex], N_SO, 0, 0, 0);
More information about the svn-ports-all
mailing list