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#13650: Emacs pretest 24.2.93 - compilation error on AIX 5.3 using gcc 4.7-2 Date: Thu, 07 Feb 2013 13:17:36 -0800 Message-ID: <511419F0.7040704@cs.ucla.edu> References: NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Trace: ger.gmane.org 1360271903 6684 80.91.229.3 (7 Feb 2013 21:18:23 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Thu, 7 Feb 2013 21:18:23 +0000 (UTC) Cc: Gilles Pion , 13650@debbugs.gnu.org To: Glenn Morris Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Thu Feb 07 22:18:43 2013 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1U3Yri-0007Ly-Nw for geb-bug-gnu-emacs@m.gmane.org; Thu, 07 Feb 2013 22:18:42 +0100 Original-Received: from localhost ([::1]:48511 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1U3YrP-0003Ix-LY for geb-bug-gnu-emacs@m.gmane.org; Thu, 07 Feb 2013 16:18:23 -0500 Original-Received: from eggs.gnu.org ([208.118.235.92]:35893) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1U3YrG-0003Gj-S3 for bug-gnu-emacs@gnu.org; Thu, 07 Feb 2013 16:18:20 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1U3Yr7-00047r-UF for bug-gnu-emacs@gnu.org; Thu, 07 Feb 2013 16:18:11 -0500 Original-Received: from debbugs.gnu.org ([140.186.70.43]:37041) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1U3Yr7-00047V-RY for bug-gnu-emacs@gnu.org; Thu, 07 Feb 2013 16:18:05 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.72) (envelope-from ) id 1U3Yr3-0007Pe-JM for bug-gnu-emacs@gnu.org; Thu, 07 Feb 2013 16:18:01 -0500 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: Thu, 07 Feb 2013 21:18:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 13650 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Original-Received: via spool by 13650-submit@debbugs.gnu.org id=B13650.136027186128465 (code B ref 13650); Thu, 07 Feb 2013 21:18:01 +0000 Original-Received: (at 13650) by debbugs.gnu.org; 7 Feb 2013 21:17:41 +0000 Original-Received: from localhost ([127.0.0.1]:42505 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1U3Yqj-0007P4-8K for submit@debbugs.gnu.org; Thu, 07 Feb 2013 16:17:41 -0500 Original-Received: from smtp.cs.ucla.edu ([131.179.128.62]:37473) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1U3Yqf-0007Ou-Sk for 13650@debbugs.gnu.org; Thu, 07 Feb 2013 16:17:39 -0500 Original-Received: from localhost (localhost.localdomain [127.0.0.1]) by smtp.cs.ucla.edu (Postfix) with ESMTP id DCFDB39E8008; Thu, 7 Feb 2013 13:17:37 -0800 (PST) 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 meiZaIUKhmMq; Thu, 7 Feb 2013 13:17:36 -0800 (PST) Original-Received: from penguin.cs.ucla.edu (Penguin.CS.UCLA.EDU [131.179.64.200]) by smtp.cs.ucla.edu (Postfix) with ESMTPSA id E541A39E8108; Thu, 7 Feb 2013 13:17:36 -0800 (PST) User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130110 Thunderbird/17.0.2 In-Reply-To: X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.13 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x 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:70844 Archived-At: On 02/07/13 09:47, Glenn Morris wrote: > At first glance, it looks like DATA_START, DATA_SEG_BITS, and > NLIST_STRUCT also went missing in that 2012/05 change. Paul? That part should be OK. DATA_START and DATA_SEG_BITS are needed only for the non-USE_LSB_TAG case, which no longer applies to AIX. NLIST_STRUCT is handled automatically by Gnulib now. Since ADDR_CORRECT should be a noop now, it should probably be removed and replaced by a cast. Casting to 'int' can't be right, though, since AIX can be 64-bit. I expect the build in question here is 64-bit, too, as Gilles's symptom is the same one that Harald Maier reported in 2009 . Given the date of that report, I expect the problem is that unexaix has some long-existing problems for 64-bit platforms. I briefly looked for problems and came up with the following patch, which should fix both the ADDR_CORRECT problem and the "Invalid format operation %u" problem. Most likely this will merely uncover another problem but I hope we can fix that too. So, Gilles, can you please try this patch? Thanks. === modified file 'src/unexaix.c' --- src/unexaix.c 2013-01-01 09:11:05 +0000 +++ src/unexaix.c 2013-02-07 21:11:30 +0000 @@ -51,6 +51,8 @@ what you give them. Help stamp out sof #include "getpagesize.h" #include +#include +#include #include #include #include @@ -92,23 +94,30 @@ static int pagemask; #include "lisp.h" -static void +static _Noreturn void report_error (const char *file, int fd) { if (fd) - close (fd); + { + int failed_errno = errno; + close (fd); + errno = failed_errno; + } report_file_error ("Cannot unexec", Fcons (build_string (file), Qnil)); } -#define ERROR0(msg) report_error_1 (new, msg, 0, 0); return -1 -#define ERROR1(msg,x) report_error_1 (new, msg, x, 0); return -1 -#define ERROR2(msg,x,y) report_error_1 (new, msg, x, y); return -1 +#define ERROR0(msg) report_error_1 (new, msg) +#define ERROR1(msg,x) report_error_1 (new, msg, x) +#define ERROR2(msg,x,y) report_error_1 (new, msg, x, y) -static void -report_error_1 (int fd, const char *msg, int a1, int a2) +static _Noreturn void ATTRIBUTE_FORMAT_PRINTF (2, 3) +report_error_1 (int fd, const char *msg, ...) { + va_list ap; close (fd); - error (msg, a1, a2); + va_start (ap, msg); + verror (msg, ap); + va_end (ap); } static int make_hdr (int, int, const char *, const char *); @@ -163,8 +172,8 @@ make_hdr (int new, int a_out, const char *a_name, const char *new_name) { int scns; - unsigned int bss_start; - unsigned int data_start; + uintptr_t bss_start; + uintptr_t data_start; struct scnhdr section[MAX_SECTIONS]; struct scnhdr * f_thdr; /* Text section header */ @@ -179,17 +188,17 @@ make_hdr (int new, int a_out, pagemask = getpagesize () - 1; /* Adjust text/data boundary. */ - data_start = (long) start_of_data (); - data_start = ADDR_CORRECT (data_start); + data_start = (uintptr_t) start_of_data (); data_start = data_start & ~pagemask; /* (Down) to page boundary. */ - bss_start = ADDR_CORRECT (sbrk (0)) + pagemask; + bss_start = (uintptr_t) sbrk (0) + pagemask; bss_start &= ~ pagemask; if (data_start > bss_start) /* Can't have negative data size. */ { - ERROR2 ("unexec: data_start (%u) can't be greater than bss_start (%u)", + ERROR2 (("unexec: data_start (0x%"PRIxPTR + ") can't be greater than bss_start (0x%"PRIxPTR")"), data_start, bss_start); } @@ -393,7 +402,6 @@ static void write_segment (int new, char *ptr, char *end) { int i, nwrite, ret; - char buf[80]; char zeros[UnexBlockSz]; for (i = 0; ptr < end;) @@ -414,9 +422,13 @@ write_segment (int new, char *ptr, char } else if (nwrite != ret) { + int write_errno = errno; + char buf[1000]; + void *addr = ptr; sprintf (buf, - "unexec write failure: addr 0x%lx, fileno %d, size 0x%x, wrote 0x%x, errno %d", - (unsigned long)ptr, new, nwrite, ret, errno); + "unexec write failure: addr %p, fileno %d, size 0x%x, wrote 0x%x, errno %d", + addr, new, nwrite, ret, errno); + errno = write_errno; PERROR (buf); } i += nwrite;