From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Paul Eggert Newsgroups: gmane.emacs.bugs Subject: bug#9772: , USE_LSB_TAG, and MSVC Date: Sun, 16 Oct 2011 20:24:31 -0700 Organization: UCLA Computer Science Department Message-ID: <4E9B9FEF.7020207@cs.ucla.edu> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Trace: dough.gmane.org 1318821927 20055 80.91.229.12 (17 Oct 2011 03:25:27 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Mon, 17 Oct 2011 03:25:27 +0000 (UTC) To: 9772@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Mon Oct 17 05:25:22 2011 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([140.186.70.17]) by lo.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1RFdpK-0005wB-9D for geb-bug-gnu-emacs@m.gmane.org; Mon, 17 Oct 2011 05:25:22 +0200 Original-Received: from localhost ([::1]:56266 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RFdpI-0008Cm-Ic for geb-bug-gnu-emacs@m.gmane.org; Sun, 16 Oct 2011 23:25:20 -0400 Original-Received: from eggs.gnu.org ([140.186.70.92]:50694) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RFdpD-0008Ca-Rs for bug-gnu-emacs@gnu.org; Sun, 16 Oct 2011 23:25:18 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RFdpB-0000SI-B2 for bug-gnu-emacs@gnu.org; Sun, 16 Oct 2011 23:25:15 -0400 Original-Received: from debbugs.gnu.org ([140.186.70.43]:34703) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RFdpB-0000SC-46 for bug-gnu-emacs@gnu.org; Sun, 16 Oct 2011 23:25:13 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.69) (envelope-from ) id 1RFdpx-0007bf-TI for bug-gnu-emacs@gnu.org; Sun, 16 Oct 2011 23:26:01 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Paul Eggert Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 17 Oct 2011 03:26:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 9772 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch X-Debbugs-Original-To: bug-gnu-emacs@gnu.org Original-Received: via spool by submit@debbugs.gnu.org id=B.131882195429219 (code B ref -1); Mon, 17 Oct 2011 03:26:01 +0000 Original-Received: (at submit) by debbugs.gnu.org; 17 Oct 2011 03:25:54 +0000 Original-Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1RFdpd-0007az-RU for submit@debbugs.gnu.org; Sun, 16 Oct 2011 23:25:54 -0400 Original-Received: from eggs.gnu.org ([140.186.70.92]) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1RFdpa-0007ad-Nc for submit@debbugs.gnu.org; Sun, 16 Oct 2011 23:25:40 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RFdog-0000Kv-Af for submit@debbugs.gnu.org; Sun, 16 Oct 2011 23:24:44 -0400 Original-Received: from lists.gnu.org ([140.186.70.17]:42129) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RFdog-0000Km-8o for submit@debbugs.gnu.org; Sun, 16 Oct 2011 23:24:42 -0400 Original-Received: from eggs.gnu.org ([140.186.70.92]:50518) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RFdod-00087D-RG for bug-gnu-emacs@gnu.org; Sun, 16 Oct 2011 23:24:42 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RFdoa-0000Jy-RI for bug-gnu-emacs@gnu.org; Sun, 16 Oct 2011 23:24:39 -0400 Original-Received: from smtp.cs.ucla.edu ([131.179.128.62]:56125) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RFdoa-0000Jk-5A; Sun, 16 Oct 2011 23:24:36 -0400 Original-Received: from localhost (localhost.localdomain [127.0.0.1]) by smtp.cs.ucla.edu (Postfix) with ESMTP id D2E16A60001; Sun, 16 Oct 2011 20:24:34 -0700 (PDT) X-Virus-Scanned: amavisd-new at smtp.cs.ucla.edu Original-Received: from smtp.cs.ucla.edu ([127.0.0.1]) by localhost (smtp.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id PFoQdbfKvuOE; Sun, 16 Oct 2011 20:24:32 -0700 (PDT) Original-Received: from [192.168.1.10] (pool-71-189-109-235.lsanca.fios.verizon.net [71.189.109.235]) by smtp.cs.ucla.edu (Postfix) with ESMTPSA id 77B8639E8006; Sun, 16 Oct 2011 20:24:32 -0700 (PDT) User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.23) Gecko/20110922 Thunderbird/3.1.15 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 3) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 3) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.11 Precedence: list Resent-Date: Sun, 16 Oct 2011 23:26:01 -0400 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) X-Received-From: 140.186.70.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:52700 Archived-At: Package: Emacs Version: 24.0.90 Tags: patch Here's a patch to the Emacs trunk (bzr 106094) to cause it to use if available, falling back on a Gnulib replacement otherwise. This simplifies Emacs proper, and should future-proof it for C1X compilers. Although this patch is mostly just a cleanup patch for GNU and POSIX platforms, it may improve performance on some Microsoft hosts, as it contains code for supporting under MSVC. As far as I can see, USE_LSB_TAG currently doesn't work with MSVC, so if this patch works it should increase the maximum Emacs buffer size in that environment. I haven't tested it under Windows, though, and quite possibly further work will be needed in that area. Since this is Microsoft-build relevant, I'll CC: this bug report to Eli. === modified file '.bzrignore' --- .bzrignore 2011-09-29 14:19:11 +0000 +++ .bzrignore 2011-10-17 01:22:19 +0000 @@ -53,6 +53,7 @@ lib/c++defs.h lib/getopt.h lib/inttypes.h +lib/stdalign.h lib/stdbool.h lib/stdio.h lib/stdint.h === modified file 'ChangeLog' --- ChangeLog 2011-10-13 02:16:59 +0000 +++ ChangeLog 2011-10-17 01:22:19 +0000 @@ -1,3 +1,18 @@ +2011-10-17 Paul Eggert + + Use Gnulib stdalign module. + This should improve portability of macros like alignof and DECL_ALIGN. + * lib/stdalign.in.h, m4/stdalign.m4: New files, from gnulib. + * .bzrignore: Add lib/stdalign.h. + * Makefile.in (GNULIB_MODULES): Add stdalign. + * config.bat: Set HAVE_ATTRIBUTE_ALIGNED in lib/stdalign.h, + instead of NO_DECL_ALIGN in config.h. Copy lib/stdalign.in.h to + lib/stdalign.in-h as needed. + * configure.in (HAVE_ATTRIBUTE_ALIGNED): Remove the code that + fiddles with this, as gnulib now does this for us. + * lib/gnulib.mk, lib/md5.c, lib/sha1.c, lib/sha256.c, lib/sha512.c: + * m4/gl-comp.m4, m4/pthread_sigmask.m4: Merge from gnulib. + 2011-10-13 Glenn Morris * configure.in: Also look for tputs in libcurses. (Bug#9736) === modified file 'Makefile.in' --- Makefile.in 2011-09-26 21:30:18 +0000 +++ Makefile.in 2011-10-17 01:22:19 +0000 @@ -337,7 +337,7 @@ dup2 \ filemode getloadavg getopt-gnu ignore-value intprops lstat \ mktime pthread_sigmask readlink \ - socklen stdarg stdio strftime strtoimax strtoumax symlink sys_stat + socklen stdalign stdarg stdio strftime strtoimax strtoumax symlink sys_stat GNULIB_TOOL_FLAGS = \ --avoid=msvc-inval --avoid=msvc-nothrow --avoid=pathmax \ --avoid=raise --avoid=threadlib \ === modified file 'config.bat' --- config.bat 2011-09-29 12:08:36 +0000 +++ config.bat 2011-10-17 01:22:19 +0000 @@ -161,7 +161,8 @@ sed -f ../msdos/sed2x.inp < ..\autogen\config.in > config.tmp :src4 sed -f ../msdos/sed2v2.inp config.h2 -Rem See if DECL_ALIGN can be supported with this GCC +Rem See if alignas can be supported with this GCC +set HAVE_ATTRIBUTE_ALIGNED=1 rm -f junk.c junk.o junk junk.exe echo struct { int i; char *p; } __attribute__((__aligned__(8))) foo; >junk.c rem Two percent signs because it is a special character for COMMAND.COM/CMD @@ -173,9 +174,9 @@ If Not ErrorLevel 1 Goto alignOk Echo WARNING: Your GCC does not support 8-byte aligned variables. Echo WARNING: Therefore Emacs cannot support buffers larger than 128MB. -rem The following line disables DECL_ALIGN which in turn disables USE_LSB_TAG +rem The following line disables alignas which in turn disables USE_LSB_TAG rem For details see lisp.h where it defines USE_LSB_TAG -echo #define NO_DECL_ALIGN >>config.h2 +set HAVE_ATTRIBUTE_ALIGNED=0 :alignOk Rem See if they have libxml2 later than v2.2.0 installed Echo Checking whether libxml2 v2.2.1 or later is installed ... @@ -281,6 +282,7 @@ If Exist build-aux\snippet\c++defs.h update build-aux/snippet/c++defs.h build-aux/snippet/cxxdefs.h If Exist alloca.in.h update alloca.in.h alloca.in-h If Exist getopt.in.h update getopt.in.h getopt.in-h +If Exist stdalign.in.h update stdalign.in.h stdalign.in-h If Exist stdbool.in.h update stdbool.in.h stdbool.in-h If Exist signal.in.h update signal.in.h signal.in-h If Exist stddef.in.h update stddef.in.h stddef.in-h @@ -290,7 +292,7 @@ If Exist sys_stat.in.h update sys_stat.in.h sys_stat.in-h If Exist time.in.h update time.in.h time.in-h If Exist unistd.in.h update unistd.in.h unistd.in-h -sed -f ../msdos/sedlibcf.inp < ..\autogen\Makefile.in > makefile.tmp +sed -e "s/@HAVE_ATTRIBUTE_ALIGNED@/%HAVE_ATTRIBUTE_ALIGNED%/g" -f ../msdos/sedlibcf.inp < ..\autogen\Makefile.in > makefile.tmp sed -f ../msdos/sedlibmk.inp < makefile.tmp > Makefile rm -f makefile.tmp Rem Create .Po files for new files in lib/ @@ -343,4 +345,3 @@ set djgpp_ver= set sys_malloc= set libxml= - === modified file 'configure.in' --- configure.in 2011-10-13 02:16:59 +0000 +++ configure.in 2011-10-17 01:22:19 +0000 @@ -1357,19 +1357,6 @@ dnl Check for endianess AC_C_BIGENDIAN -AC_CACHE_CHECK([for __attribute__ ((__aligned__ (expr)))], - [emacs_cv_attribute_aligned], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[char __attribute__ ((__aligned__ (1 << 3))) c;]], - [[]])], - [emacs_cv_attribute_aligned=yes], - [emacs_cv_attribute_aligned=no])]) -if test $emacs_cv_attribute_aligned = yes; then - AC_DEFINE([HAVE_ATTRIBUTE_ALIGNED], 1, - [Define to 1 if GCC-style __attribute__ ((__aligned__ (expr))) works.]) -fi - dnl check for Make feature AC_PROG_MAKE_SET === modified file 'lib/gnulib.mk' --- lib/gnulib.mk 2011-09-26 21:30:18 +0000 +++ lib/gnulib.mk 2011-10-17 01:22:19 +0000 @@ -21,7 +21,7 @@ # the same distribution terms as the rest of that program. # # Generated by gnulib-tool. -# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --avoid=msvc-inval --avoid=msvc-nothrow --avoid=pathmax --avoid=raise --avoid=threadlib --makefile-name=gnulib.mk --conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files alloca-opt careadlinkat crypto/md5 crypto/sha1 crypto/sha256 crypto/sha512 dtoastr dup2 filemode getloadavg getopt-gnu ignore-value intprops lstat mktime pthread_sigmask readlink socklen stdarg stdio strftime strtoimax strtoumax symlink sys_stat +# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --avoid=msvc-inval --avoid=msvc-nothrow --avoid=pathmax --avoid=raise --avoid=threadlib --makefile-name=gnulib.mk --conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files alloca-opt careadlinkat crypto/md5 crypto/sha1 crypto/sha256 crypto/sha512 dtoastr dup2 filemode getloadavg getopt-gnu ignore-value intprops lstat mktime pthread_sigmask readlink socklen stdalign stdarg stdio strftime strtoimax strtoumax symlink sys_stat MOSTLYCLEANFILES += core *.stackdump @@ -421,6 +421,29 @@ ## end gnulib module stat +## begin gnulib module stdalign + +BUILT_SOURCES += $(STDALIGN_H) + +# We need the following in order to create when the system +# doesn't have one that works. +if GL_GENERATE_STDALIGN_H +stdalign.h: stdalign.in.h $(top_builddir)/config.status + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's/@''HAVE_ATTRIBUTE_ALIGNED''@/$(HAVE_ATTRIBUTE_ALIGNED)/g' < $(srcdir)/stdalign.in.h; \ + } > $@-t && \ + mv $@-t $@ +else +stdalign.h: $(top_builddir)/config.status + rm -f $@ +endif +MOSTLYCLEANFILES += stdalign.h stdalign.h-t + +EXTRA_DIST += stdalign.in.h + +## end gnulib module stdalign + ## begin gnulib module stdarg BUILT_SOURCES += $(STDARG_H) === modified file 'lib/md5.c' --- lib/md5.c 2011-02-19 07:28:29 +0000 +++ lib/md5.c 2011-10-17 01:22:19 +0000 @@ -24,7 +24,8 @@ #include "md5.h" -#include +#include +#include #include #include #include @@ -254,8 +255,7 @@ if (len >= 64) { #if !_STRING_ARCH_unaligned -# define alignof(type) offsetof (struct { char c; type x; }, x) -# define UNALIGNED_P(p) (((size_t) p) % alignof (uint32_t) != 0) +# define UNALIGNED_P(p) ((uintptr_t) (p) % alignof (uint32_t) != 0) if (UNALIGNED_P (buffer)) while (len > 64) { === modified file 'lib/sha1.c' --- lib/sha1.c 2011-05-24 08:12:52 +0000 +++ lib/sha1.c 2011-10-17 01:22:19 +0000 @@ -26,7 +26,8 @@ #include "sha1.h" -#include +#include +#include #include #include @@ -241,8 +242,7 @@ if (len >= 64) { #if !_STRING_ARCH_unaligned -# define alignof(type) offsetof (struct { char c; type x; }, x) -# define UNALIGNED_P(p) (((size_t) p) % alignof (uint32_t) != 0) +# define UNALIGNED_P(p) ((uintptr_t) (p) % alignof (uint32_t) != 0) if (UNALIGNED_P (buffer)) while (len > 64) { === modified file 'lib/sha256.c' --- lib/sha256.c 2011-06-21 08:45:39 +0000 +++ lib/sha256.c 2011-10-17 01:22:19 +0000 @@ -24,7 +24,8 @@ #include "sha256.h" -#include +#include +#include #include #include @@ -373,8 +374,7 @@ if (len >= 64) { #if !_STRING_ARCH_unaligned -# define alignof(type) offsetof (struct { char c; type x; }, x) -# define UNALIGNED_P(p) (((size_t) p) % alignof (uint32_t) != 0) +# define UNALIGNED_P(p) ((uintptr_t) (p) % alignof (uint32_t) != 0) if (UNALIGNED_P (buffer)) while (len > 64) { === modified file 'lib/sha512.c' --- lib/sha512.c 2011-06-21 08:45:39 +0000 +++ lib/sha512.c 2011-10-17 01:22:19 +0000 @@ -24,7 +24,8 @@ #include "sha512.h" -#include +#include +#include #include #include @@ -381,8 +382,7 @@ if (len >= 128) { #if !_STRING_ARCH_unaligned -# define alignof(type) offsetof (struct { char c; type x; }, x) -# define UNALIGNED_P(p) (((size_t) p) % alignof (u64) != 0) +# define UNALIGNED_P(p) ((uintptr_t) (p) % alignof (u64) != 0) if (UNALIGNED_P (buffer)) while (len > 128) { === added file 'lib/stdalign.in.h' --- lib/stdalign.in.h 1970-01-01 00:00:00 +0000 +++ lib/stdalign.in.h 2011-10-17 01:22:19 +0000 @@ -0,0 +1,61 @@ +/* A substitute for ISO C 1x . + + Copyright 2011 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +/* Written by Paul Eggert and Bruno Haible. */ + +#ifndef _GL_STDALIGN_H +#define _GL_STDALIGN_H + +/* ISO C1X for platforms that lack it. + + References: + ISO C1X + sections 6.5.3.4, 6.7.5, 7.15. + C++0X + section 18.10. */ + +/* Return the alignment of a structure slot (field) of TYPE, + as an integer constant expression. The result cannot be used as a + value for an 'enum' constant, if you want to be portable to HP-UX + 10.20 cc and AIX 3.2.5 xlc. + + This is not the same as GCC's __alignof__ operator; for example, on + x86 with GCC, _Alignof (long long) is typically 4 whereas + __alignof__ (long long) is 8. */ +#include +#if defined __cplusplus + template struct __alignof_helper { char __a; __t __b; }; +# define _Alignof(type) offsetof (__alignof_helper, __b) +#else +# define _Alignof(type) offsetof (struct { char __a; type __b; }, __b) +#endif +#define alignof _Alignof +#define __alignof_is_defined 1 + +/* Align a type or variable to the alignment A. */ +#if @HAVE_ATTRIBUTE_ALIGNED@ && !defined __cplusplus +# define _Alignas(a) __attribute__ ((__aligned__ (a))) +#elif 1300 <= _MSC_VER +# define _Alignas(a) __declspec ((align (a))) +#endif +#ifdef _Alignas +# define alignas _Alignas +# define __alignas_is_defined 1 +#endif + +#endif /* _GL_STDALIGN_H */ === modified file 'm4/gl-comp.m4' --- m4/gl-comp.m4 2011-10-07 21:15:00 +0000 +++ m4/gl-comp.m4 2011-10-17 01:22:19 +0000 @@ -76,6 +76,7 @@ # Code from module socklen: # Code from module ssize_t: # Code from module stat: + # Code from module stdalign: # Code from module stdarg: dnl Some compilers (e.g., AIX 5.3 cc) need to be in c99 mode dnl for the builtin va_copy to work. With Autoconf 2.60 or later, @@ -180,6 +181,7 @@ gl_SIGNAL_H gl_TYPE_SOCKLEN_T gt_TYPE_SSIZE_T +gl_STDALIGN_H gl_STDARG_H AM_STDBOOL_H gl_STDDEF_H @@ -311,18 +313,18 @@ if test $HAVE_READLINK = 0 || test $REPLACE_READLINK = 1; then func_gl_gnulib_m4code_stat fi - if test $ac_cv_func_strtoimax = no; then - func_gl_gnulib_m4code_verify - fi if test $ac_cv_func_strtoimax = no && test $ac_cv_type_long_long_int = yes; then func_gl_gnulib_m4code_strtoll fi - if test $ac_cv_func_strtoumax = no; then + if test $ac_cv_func_strtoimax = no; then func_gl_gnulib_m4code_verify fi if test $ac_cv_func_strtoumax = no && test $ac_cv_type_unsigned_long_long_int = yes; then func_gl_gnulib_m4code_strtoull fi + if test $ac_cv_func_strtoumax = no; then + func_gl_gnulib_m4code_verify + fi m4_pattern_allow([^gl_GNULIB_ENABLED_]) AM_CONDITIONAL([gl_GNULIB_ENABLED_dosname], [$gl_gnulib_enabled_dosname]) AM_CONDITIONAL([gl_GNULIB_ENABLED_be453cec5eecf5731a274f2de7f2db36], [$gl_gnulib_enabled_be453cec5eecf5731a274f2de7f2db36]) @@ -513,6 +515,7 @@ lib/signal.in.h lib/sigprocmask.c lib/stat.c + lib/stdalign.in.h lib/stdarg.in.h lib/stdbool.in.h lib/stddef.in.h @@ -563,6 +566,7 @@ m4/ssize_t.m4 m4/st_dm_mode.m4 m4/stat.m4 + m4/stdalign.m4 m4/stdarg.m4 m4/stdbool.m4 m4/stddef_h.m4 === modified file 'm4/pthread_sigmask.m4' --- m4/pthread_sigmask.m4 2011-09-03 23:08:32 +0000 +++ m4/pthread_sigmask.m4 2011-10-17 01:22:19 +0000 @@ -1,4 +1,4 @@ -# pthread_sigmask.m4 serial 12 +# pthread_sigmask.m4 serial 13 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -6,6 +6,8 @@ AC_DEFUN([gl_FUNC_PTHREAD_SIGMASK], [ + AC_REQUIRE([gl_SIGNAL_H_DEFAULTS]) + AC_CHECK_FUNCS_ONCE([pthread_sigmask]) LIB_PTHREAD_SIGMASK= === added file 'm4/stdalign.m4' --- m4/stdalign.m4 1970-01-01 00:00:00 +0000 +++ m4/stdalign.m4 2011-10-17 01:22:19 +0000 @@ -0,0 +1,37 @@ +# Check for stdalign.h that conforms to C1x. + +dnl Copyright 2011 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +# Prepare for substituting if it is not supported. + +AC_DEFUN([gl_STDALIGN_H], +[ + AC_CHECK_HEADERS_ONCE([stdalign.h]) + HAVE_ATTRIBUTE_ALIGNED='?' + + if test "$ac_cv_header_stdalign_h" = yes; then + STDALIGN_H='' + else + STDALIGN_H='stdalign.h' + AC_CACHE_CHECK([for __attribute__ ((__aligned__ (expr)))], + [gl_cv_attribute_aligned], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[char __attribute__ ((__aligned__ (1 << 3))) c;]], + [[]])], + [gl_cv_attribute_aligned=yes], + [gl_cv_attribute_aligned=no])]) + if test $gl_cv_attribute_aligned = yes; then + HAVE_ATTRIBUTE_ALIGNED=1 + else + HAVE_ATTRIBUTE_ALIGNED=0 + fi + fi + + AC_SUBST([HAVE_ATTRIBUTE_ALIGNED]) + AC_SUBST([STDALIGN_H]) + AM_CONDITIONAL([GL_GENERATE_STDALIGN_H], [test -n "$STDALIGN_H"]) +]) === modified file 'msdos/ChangeLog' --- msdos/ChangeLog 2011-09-29 12:00:18 +0000 +++ msdos/ChangeLog 2011-10-17 01:22:19 +0000 @@ -1,3 +1,10 @@ +2011-10-17 Paul Eggert + + Use Gnulib stdalign module. + * sed2v2.inp (HAVE_ATTRIBUTE_ALIGNED): Remove edit. + * sedlibmk.inp (STDALIGN_H, @GL_GENERATE_STDALIGN_H_TRUE@) + (GL_GENERATE_STDALIGN_H_FALSE): New edits. + 2011-09-29 Eli Zaretskii * mainmake.v2 (boot): Condition the value on the existence of === modified file 'msdos/sed2v2.inp' --- msdos/sed2v2.inp 2011-09-29 12:00:18 +0000 +++ msdos/sed2v2.inp 2011-10-17 01:22:19 +0000 @@ -35,7 +35,6 @@ /^#undef HAVE_FREXP *$/s/^.*$/#define HAVE_FREXP 1/ /^#undef HAVE_FMOD *$/s/^.*$/#define HAVE_FMOD 1/ /^#undef HAVE_RINT *$/s/^.*$/#define HAVE_RINT 1/ -/^#undef HAVE_ATTRIBUTE_ALIGNED *$/s/^.*$/#define HAVE_ATTRIBUTE_ALIGNED 1/ /^#undef HAVE_C99_STRTOLD *$/s/^.*$/#define HAVE_C99_STRTOLD 1/ /^#undef HAVE_CBRT *$/s/^.*$/#define HAVE_CBRT 1/ /^#undef HAVE_DIFFTIME *$/s/^.*$/#define HAVE_DIFFTIME 1/ @@ -119,4 +118,3 @@ # might be defined in sys/config.h we include at the top of config.h. /^#undef BSTRING/s|#undef|# undef| /^#undef .*$/s|^.*$|/* & */| - === modified file 'msdos/sedlibmk.inp' --- msdos/sedlibmk.inp 2011-09-29 12:00:18 +0000 +++ msdos/sedlibmk.inp 2011-10-17 01:22:19 +0000 @@ -27,7 +27,7 @@ # otherwise edit them to zero: # # /^REPLACE_CALLOC *=/s/@REPLACE_CALLOC@/0/ -# +# # . If the module is a header or adds headers, edit the corresponding # variable to either an empty value or to the name of the header. # Examples: @@ -547,6 +547,7 @@ /^SIZE_T_SUFFIX *=/s/@SIZE_T_SUFFIX@/u/ /^ALLOCA_H *=/s/@[^@\n]*@/alloca.h/ /^STDBOOL_H *=/s/@[^@\n]*@// +/^STDALIGN_H *=/s/@[^@\n]*@/stdalign.h/ /^STDARG_H *=/s/@[^@\n]*@// /^STDDEF_H *=/s/@[^@\n]*@// /^STDINT_H *=/s/@[^@\n]*@/stdint.h/ @@ -600,6 +601,8 @@ s/^@GL_GENERATE_ALLOCA_H_FALSE@/\#/ s/^@GL_GENERATE_STDBOOL_H_TRUE@/\#/ s/^@GL_GENERATE_STDBOOL_H_FALSE@// +s/^@GL_GENERATE_STDALIGN_H_TRUE@// +s/^@GL_GENERATE_STDALIGN_H_FALSE@/\#/ s/^@GL_GENERATE_STDARG_H_TRUE@/\#/ s/^@GL_GENERATE_STDARG_H_FALSE@/\#/ s/^@GL_GENERATE_STDDEF_H_TRUE@/\#/ === modified file 'nt/ChangeLog' --- nt/ChangeLog 2011-09-04 21:52:59 +0000 +++ nt/ChangeLog 2011-10-17 01:22:19 +0000 @@ -1,3 +1,8 @@ +2011-10-17 Paul Eggert + + Use Gnulib stdalign module. + * config.nt (HAVE_ATTRIBUTE_ALIGNED): Remove. + 2011-09-04 Paul Eggert * config.nt (HAVE_SNPRINTF): New macro. === modified file 'nt/config.nt' --- nt/config.nt 2011-09-26 03:20:03 +0000 +++ nt/config.nt 2011-10-17 01:22:19 +0000 @@ -271,13 +271,6 @@ /* Preprocessor macros needed for gnulib imports. */ -/* Define to 1 if GCC-style __attribute__ ((__aligned__ (expr))) works. */ -#ifdef __GNUC__ -#define HAVE_ATTRIBUTE_ALIGNED 1 -#else -#undef HAVE_ATTRIBUTE_ALIGNED -#endif - /* Define to 1 if strtold conforms to C99. */ #ifdef __GNUC__ #define HAVE_C99_STRTOLD 1 === modified file 'src/ChangeLog' --- src/ChangeLog 2011-10-15 10:12:00 +0000 +++ src/ChangeLog 2011-10-17 01:22:19 +0000 @@ -1,3 +1,12 @@ +2011-10-17 Paul Eggert + + Use Gnulib stdalign module. + * alloc.c (XMALLOC_BASE_ALIGNMENT, GC_LISP_OBJECT_ALIGNMENT) + (GC_POINTER_ALIGNMENT, pure_alloc): Simplify by using alignof. + (pure_alloc) [! USE_LSB_TAG]: Don't over-align EMACS_INT values. + * lisp.h: Include . + (DECL_ALIGN): Simplify by using alignas. + 2011-10-15 Martin Rudalics * window.c (coordinates_in_window): Rewrite and delabelize === modified file 'src/alloc.c' --- src/alloc.c 2011-10-12 06:09:40 +0000 +++ src/alloc.c 2011-10-17 01:22:19 +0000 @@ -507,12 +507,7 @@ hold a size_t value and (2) the header size is a multiple of the alignment that Emacs needs for C types and for USE_LSB_TAG. */ #define XMALLOC_BASE_ALIGNMENT \ - offsetof ( \ - struct { \ - union { long double d; intmax_t i; void *p; } u; \ - char c; \ - }, \ - c) + alignof (union { long double d; intmax_t i; void *p; }) #ifdef USE_LSB_TAG /* A common multiple of the positive integers A and B. Ideally this would be the least common multiple, but there's no way to do that @@ -4235,15 +4230,15 @@ } -/* Alignment of Lisp_Object and pointer values. Use offsetof, as it +/* Alignment of Lisp_Object and pointer values. Use alignof, as it sometimes returns a smaller alignment than GCC's __alignof__ and mark_memory might miss objects if __alignof__ were used. For example, on x86 with WIDE_EMACS_INT, __alignof__ (Lisp_Object) is 8 but GC_LISP_OBJECT_ALIGNMENT should be 4. */ #ifndef GC_LISP_OBJECT_ALIGNMENT -# define GC_LISP_OBJECT_ALIGNMENT offsetof (struct {char a; Lisp_Object b;}, b) +# define GC_LISP_OBJECT_ALIGNMENT alignof (Lisp_Object) #endif -#define GC_POINTER_ALIGNMENT offsetof (struct {char a; void *b;}, b) +#define GC_POINTER_ALIGNMENT alignof (void *) /* Mark Lisp objects referenced from the address range START+OFFSET..END or END+OFFSET..START. */ @@ -4662,17 +4657,11 @@ #ifdef USE_LSB_TAG size_t alignment = (1 << GCTYPEBITS); #else - size_t alignment = sizeof (EMACS_INT); + size_t alignment = alignof (EMACS_INT); /* Give Lisp_Floats an extra alignment. */ if (type == Lisp_Float) - { -#if defined __GNUC__ && __GNUC__ >= 2 - alignment = __alignof (struct Lisp_Float); -#else - alignment = sizeof (struct Lisp_Float); -#endif - } + alignment = alignof (struct Lisp_Float); #endif again: === modified file 'src/lisp.h' --- src/lisp.h 2011-10-11 17:35:16 +0000 +++ src/lisp.h 2011-10-17 01:22:19 +0000 @@ -20,6 +20,7 @@ #ifndef EMACS_LISP_H #define EMACS_LISP_H +#include #include #include #include @@ -163,15 +164,8 @@ /* First, try and define DECL_ALIGN(type,var) which declares a static variable VAR of type TYPE with the added requirement that it be TYPEBITS-aligned. */ -#ifndef NO_DECL_ALIGN -# ifndef DECL_ALIGN -# if HAVE_ATTRIBUTE_ALIGNED -# define DECL_ALIGN(type, var) \ - type __attribute__ ((__aligned__ (1 << GCTYPEBITS))) var -# else - /* What directives do other compilers use? */ -# endif -# endif +#ifdef alignas +# define DECL_ALIGN(type, var) type alignas (1 << GCTYPEBITS) var #endif /* Let's USE_LSB_TAG on systems where we know malloc returns mult-of-8. */