2003/09/10 03:14:19
[org.ibex.core.git] / upstream / darwin-linker / patches / cctools.patch
index 49913ce..59236ee 100644 (file)
@@ -1,15 +1,3 @@
-diff -rub ./include/architecture/i386/fpu.h ./include/architecture/i386/fpu.h
---- ./include/architecture/i386/fpu.h  Thu May  6 19:24:30 1999
-+++ ./include/architecture/i386/fpu.h  Mon Aug 25 12:56:22 2003
-@@ -121,7 +121,7 @@
-                                       :3;
- } fp_control_t;
--#import <architecture/i386/sel.h>
-+#include <architecture/i386/sel.h>
- /*
-  * Floating point 'environment'
 diff -rub ./include/architecture/i386/frame.h ./include/architecture/i386/frame.h
 --- ./include/architecture/i386/frame.h        Thu May  6 19:24:33 1999
 +++ ./include/architecture/i386/frame.h        Mon Aug 25 12:56:22 2003
@@ -937,170 +925,6 @@ diff -rub ./misc/Makefile ./misc/Makefile
  
  shlib_clean:
        -rm -f \
---- ld/fake-mach.c     Sat Sep  6 21:32:56 2003
-+++ ld/fake-mach.c     Tue Aug 26 11:40:24 2003
-@@ -0,0 +1,160 @@
-+/** fake-mach.c - A half baked implementation of mach kernel functions using the POSIX UNIX API.
-+*
-+* This was used to port Apple's Darwin linker (ld) to Linux. This allows Mac OS X applications to
-+* be cross complied on Linux. */
-+
-+#include <stdlib.h>
-+#include <assert.h>
-+#include <sys/types.h>
-+#include <sys/uio.h>
-+#include <unistd.h>
-+
-+#include <errno.h>
-+
-+#include <sys/mman.h>
-+
-+// Mach include files for typedefs, return values, etc
-+//~ #include <mach/mach.h>
-+#include <mach/kern_return.h>
-+#include <mach/vm_types.h>
-+#include <mach/mach_types.h>
-+#include <mach/message.h>
-+#include <servers/bootstrap_defs.h>
-+
-+/** The port for the current task. Ignored in this implementation. */
-+mach_port_t mach_task_self_ = 0;
-+
-+/** The bootstrap port. Ignored in this implementation. */
-+mach_port_t bootstrap_port = 0;
-+
-+#include <mach/ppc/ndr_def.h>
-+
-+/** Maps the file descriptor into memory. Free the memory using  vm_deallocate. Ignores findspace and offset. */
-+kern_return_t map_fd( int fd, vm_offset_t offset, vm_offset_t *va, boolean_t findspace, vm_size_t size)
-+{
-+      void* space = NULL;
-+
-+      assert( fd > 0 );
-+      assert( offset == 0 );
-+      //~ assert( *va == 0 );
-+      assert( findspace == TRUE );
-+      
-+      //~ // Allocate memory
-+      //~ space = malloc( size );
-+      //~ assert( space != NULL );
-+      
-+      //~ // Read file into space
-+      //~ bytes = read( fd, space, size );
-+      //~ assert( bytes == size );
-+      
-+      space = mmap( (void*) offset, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0 );
-+      // No permission: try to make it read only
-+      if ( space == (void*) -1 && errno == EACCES )
-+      {
-+              space = mmap( (void*) offset, size, PROT_READ, MAP_SHARED, fd, 0 );
-+      }
-+      assert( space != NULL && space != (void*) -1 );
-+      
-+      // Copy back the pointer
-+      *va = (vm_offset_t) space;
-+      
-+      // Return success
-+      return KERN_SUCCESS;
-+}
-+
-+/** Returns a string appropriate to the error argument given. */
-+char* mach_error_string( int error_value )
-+{
-+      char errorString[] = "Some fake mach error string.";
-+      
-+      return errorString;
-+}
-+
-+/** Returns the mach port for the current host. We fake it by returning zero. */
-+mach_port_t mach_host_self( void )
-+{
-+      return 0;
-+}
-+
-+/** Returns the mach port for the current task. We fake it by returning zero. */
-+//~ mach_port_t mach_task_self( void )
-+//~ {
-+      //~ return 0;
-+//~ }
-+
-+/**The function vm_allocate allocates a region of virtual memory, placing it in the specified task's address space. Anywhere must be true, as the memory will be allocated anywhere. */
-+extern kern_return_t vm_allocate( mach_port_t target_task, vm_address_t *address, vm_size_t size, boolean_t anywhere )
-+{
-+      assert( anywhere == TRUE );
-+      
-+      // Anonymous memory map
-+      *address = (vm_address_t) mmap( NULL, size, PROT_READ | PROT_WRITE, MAP_PRIVATE|MAP_ANON, 0, 0 );
-+      //~ *address = (vm_address_t) malloc( size );
-+      assert( address != (vm_address_t) NULL );
-+      
-+      return KERN_SUCCESS;
-+}
-+
-+/**vm_deallocate relinquishes access to a region of a task's address space, causing further access to that memory to fail. This memory must have been allocated with vm_allocate. size is ignored. */
-+kern_return_t vm_deallocate( mach_port_t target_task, vm_address_t address, vm_size_t size ) 
-+{
-+      int ret = 0;
-+      
-+      assert( address != (vm_address_t) NULL );
-+      
-+      // Free the memory
-+      ret = munmap( (void*) address, size );
-+      assert( ret == 0 );
-+      
-+      //~ free( (void*) address );
-+      
-+      return KERN_SUCCESS;
-+}
-+
-+/** The function mach_port_allocate_name creates a new right in the specified task, with a specified name for the new right. In this implementation it does nothing. */
-+kern_return_t mach_port_allocate_name (mach_port_t task, mach_port_right_t right, mach_port_t name)
-+{
-+      return KERN_SUCCESS;
-+}
-+
-+/** The function mach_port_deallocate releases a user reference for a right in task's IPC name space. In this implementation it does nothing. */
-+kern_return_t mach_port_deallocate (mach_port_t task, mach_port_t name)
-+{
-+      return KERN_SUCCESS;
-+}
-+
-+/** host_info returns information about the host. It is not implemented in this implementation. */
-+kern_return_t host_info( host_t host, host_flavor_t flavor, host_info_t host_info_out, mach_msg_type_number_t *host_info_outCnt )
-+{
-+      assert( 0 );
-+      return KERN_FAILURE;
-+}
-+
-+/** vm_msync unimplemented: It does nothing. */
-+kern_return_t vm_msync ( vm_map_t target_task, vm_address_t address, vm_size_t size, vm_sync_t sync_flags )
-+{
-+      //~ assert( address != (vm_address_t) NULL );
-+      //~ int ret = 0;
-+      //~ ret = msync( (void*) address, size, int flags);
-+      //~ assert( 0 );
-+      return KERN_SUCCESS;
-+}
-+
-+/** bootstrap_look_up unimplemented. */
-+kern_return_t bootstrap_look_up( mach_port_t bootstrap_port, name_t service_name, mach_port_t *service_port )
-+{
-+      assert( 0 );
-+      return KERN_FAILURE;
-+}
-+
-+/** mach_msg unimplemented. Send and/or receive a message.  If the message operation
-+ *            is interrupted, and the user did not request an indication
-+ *            of that fact, then restart the appropriate parts of the
-+ *            operation silently (trap version does not restart).
-+ */
-+mach_msg_return_t mach_msg( mach_msg_header_t *msg, mach_msg_option_t option, mach_msg_size_t send_size,
-+      mach_msg_size_t rcv_size, mach_port_name_t rcv_name, mach_msg_timeout_t timeout, mach_port_name_t notify)
-+{
-+      //~ assert( 0 );
-+      return KERN_SUCCESS;
-+}
-\ No newline at end of file
 --- ld/makeUser.c      Sat Sep  6 21:52:24 2003
 +++ ld/makeUser.c      Mon Aug 25 22:54:46 2003
 @@ -0,0 +1,305 @@
@@ -2095,15 +1919,178 @@ diff -bur ./symbols.h /home/megacz/xwt/upstream/darwin-linker/src/cctools/as/sym
 +              return msg_result;
 +    }
 +}
---- ar/Makefile        Sun Sep  7 01:35:22 2003
-+++ ar/Makefile        Sun Sep  7 01:32:55 2003
+--- ar/contents.c      30 Apr 2002 07:37:17 -0000      1.1.1.1
++++ ar/contents.c      7 Sep 2003 08:55:11 -0000
+@@ -76,7 +76,6 @@
+ #include <fcntl.h>
+ #include <stdio.h>
+ #include <string.h>
+-#include <tzfile.h>
+ #include <unistd.h>
+ #include "archive.h"
+@@ -103,12 +102,14 @@
+               else if (!(file = files(argv)))
+                       goto next;
+               if (options & AR_V) {
++/*
+                       (void)strmode(chdr.mode, buf);
+                       (void)printf("%s %6d/%-6d %8qd ",
+                           buf + 1, chdr.uid, chdr.gid, chdr.size);
+                       tp = localtime(&chdr.date);
+                       (void)strftime(buf, sizeof(buf), "%b %e %H:%M %Y", tp);
+                       (void)printf("%s %s\n", buf, file);
++*/
+               } else
+                       (void)printf("%s\n", file);
+               if (!all && !*argv)
+--- ar/misc.c  30 Apr 2002 07:37:17 -0000      1.1.1.1
++++ ar/misc.c  7 Sep 2003 08:55:11 -0000
+@@ -68,6 +68,7 @@
+ #endif /* not lint */
+ #include <sys/param.h>
++#define EFTYPE          79              /* Inappropriate file type or format */
+ #include <dirent.h>
+ #include <err.h>
+--- ar/vers_string     Sun Sep  7 01:55:10 2003
++++ ar/vers_string     Sun Sep  7 01:53:23 2003
+@@ -0,0 +1,125 @@
++#!/bin/sh
++##
++# Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
++#
++# @APPLE_LICENSE_HEADER_START@
++# 
++# "Portions Copyright (c) 1999 Apple Computer, Inc.  All Rights
++# Reserved.  This file contains Original Code and/or Modifications of
++# Original Code as defined in and that are subject to the Apple Public
++# Source License Version 1.0 (the 'License').  You may not use this file
++# except in compliance with the License.  Please obtain a copy of the
++# License at http://www.apple.com/publicsource and read it before using
++# this file.
++# 
++# The Original Code and all software distributed under the License are
++# distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
++# EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
++# INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
++# FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
++# License for the specific language governing rights and limitations
++# under the License."
++# 
++# @APPLE_LICENSE_HEADER_END@
++##
++#
++# vers_string PROGRAM [STAMPED_NAME]
++#
++# Output a string suitable for use as a version identifier
++#
++
++##
++# Usage
++##
++
++program=$(basename $0);
++
++usage ()
++{
++    echo "Usage: ${program} [<options>] <program> [<stamped_name>]";
++    echo "    <program>: ???";
++    echo "    <stamped_name>: ???";
++    echo "Options: ???";
++}
++
++##
++# Handle command line
++##
++
++  Date=$(date);
++Format=''\''PROGRAM:'\''"${Program}"'\''  PROJECT:'\''"${Version}"'\''  DEVELOPER:'\''"${USER}"'\''  BUILT:'\''"${Date}"'\'''\''';
++
++if ! args=$(getopt cflBn $*); then usage; fi;
++set -- ${args};
++for option; do
++    case "${option}" in
++      -c)
++        Format=''\''#include <sys/cdefs.h>
++#ifndef __IDSTRING
++#define __IDSTRING(name,string) \
++     static const char name[] __attribute__((__unused__)) = string
++#endif
++__IDSTRING(SGS_VERS,"@(#)PROGRAM:'\''"${Program}"'\''  PROJECT:'\''"${Version}"'\''  DEVELOPER:'\''"${USER}"'\''  BUILT:'\''"${Date}"'\''\n");
++__IDSTRING(VERS_NUM,"'\''${Revision}'\''");'\''';
++      shift;
++      ;;
++      -f)
++        Format='"${Program}"'\''-'\''"${Revision}"';
++      shift;
++      ;;
++      -l)
++        Format=''\''#include <sys/cdefs.h>
++#ifndef __IDSTRING
++#define __IDSTRING(name,string) \
++      const char name[] __attribute__((__unused__)) = string
++#endif
++__IDSTRING(SGS_VERS,"@(#)LIBRARY:'\''"${Program}"'\''  PROJECT:'\''"${Version}"'\''  DEVELOPER:'\''"${USER}"'\''  BUILT:'\''"${Date}"'\''\n");'\''';
++      shift;
++      ;;
++      -B)
++        date="NO DATE SET (-B used)";
++      shift;
++      ;;
++      -n)
++        Format='"${Revision}"';
++      shift;
++      ;;
++      --)
++      shift;
++      break;
++      ;;
++    esac;
++done;
++
++Program=$1; if [ $# != 0 ]; then shift; fi;
++Version=$1; if [ $# != 0 ]; then shift; fi;
++
++if [ $# != 0 ]; then usage; fi;
++
++if [ -z "${Program}" ]; then Program="Unknown"; fi;
++
++if [ -n "${Version}" ]; then
++    if ! Revision=$(expr "${Version}" : '.*-\(.*\)'); then
++      echo "${program}: No hyphen in project root ${Version}" >&2
++      exit 1;
++    fi;
++else
++    CurrentDir=$(/bin/pwd);
++       Version=$(basename "${CurrentDir}");
++    while [ "${Version}" != "${CurrentDir}" ]; do
++      if Revision=$(expr "${Version}" : '.*-\(.*\)'); then break; fi;
++      CurrentDir=$(dirname  "${CurrentDir}");
++         Version=$(basename "${CurrentDir}");
++    done;
++    if [ "${Version}" = "${CurrentDir}" ]; then
++      CurrentDir=$(/bin/pwd);
++      echo "${program}: No hyphen in project root ${CurrentDir}" >&2
++      echo "${program}: Could not determine version" >&2
++       Version="Unknown";
++      Revision="";
++    fi;
++fi;
++
++if [ -z "${USER}" ]; then USER=$(whoami); fi;
++
++echo "$(eval echo "${Format}")";
+--- ar/Makefile        7 Sep 2002 01:27:09 -0000       1.1.1.2
++++ ar/Makefile        7 Sep 2003 09:03:52 -0000
 @@ -2,12 +2,16 @@
  ifeq "mwccppc" "$(notdir $(CC))"
    CFLAGS = -g $(OFLAG) -I$(SRCROOT)/../include
  else
 -  CFLAGS = -g $(OFLAG) -Wall -Wno-precomp -I$(SRCROOT)/../include
 +  ifeq "Linux" "$(shell uname)"
-+    CFLAGS = -Wall $(X_CFLAGS) -D__LITTLE_ENDIAN__ -U__BIG_ENDIAN__  -D__ppc__ -I/usr/include -I../../../macosx-include -I../include
++    CFLAGS = -Wall $(X_CFLAGS) -D__LITTLE_ENDIAN__ -U__BIG_ENDIAN__  -D__ppc__ -I/usr/include -I../../macosx-include -I../include
 +  else
 +    CFLAGS = -g $(OFLAG) -Wall -Wno-precomp -I$(SRCROOT)/../include
 +  endif
@@ -2116,3 +2103,267 @@ diff -bur ./symbols.h /home/megacz/xwt/upstream/darwin-linker/src/cctools/as/sym
             echo YES ; else echo NO ; \
             fi; )
  
+@@ -43,7 +47,8 @@
+       $(CC) $(CFLAGS) $(RC_CFLAGS) -o $(SYMROOT)/$@ $(OBJS) $(LIBSTUFF)
+ vers.c:
+-      vers_string -c $(VERS_STRING_FLAGS) $(PRODUCT) > $(OFILE_DIR)/$@
++      chmod +x vers_string
++      ./vers_string -c $(VERS_STRING_FLAGS) $(PRODUCT) > $(OFILE_DIR)/$@
+ ifeq "NO" "$(USE_DEPENDENCY_FILE)"
+ .c.o:
+--- ld/fake-mach.c     Sun Sep  7 14:13:57 2003
++++ ld/fake-mach.c     Sun Sep  7 14:13:50 2003
+@@ -0,0 +1,163 @@
++/** fake-mach.c - A half baked implementation of mach kernel functions using the POSIX UNIX API.
++*
++* This was used to port Apple's Darwin linker (ld) to Linux. This allows Mac OS X applications to
++* be cross complied on Linux. */
++
++#include <stdlib.h>
++#include <assert.h>
++#include <sys/types.h>
++#include <sys/uio.h>
++#include <unistd.h>
++
++#include <errno.h>
++
++#include <sys/mman.h>
++
++// Mach include files for typedefs, return values, etc
++//~ #include <mach/mach.h>
++#include <mach/kern_return.h>
++#include <mach/vm_types.h>
++#include <mach/mach_types.h>
++#include <mach/message.h>
++#include <servers/bootstrap_defs.h>
++
++/** The port for the current task. Ignored in this implementation. */
++mach_port_t mach_task_self_ = 0;
++
++/** The bootstrap port. Ignored in this implementation. */
++mach_port_t bootstrap_port = 0;
++
++#include <mach/ppc/ndr_def.h>
++
++/** Maps the file descriptor into memory. Free the memory using  vm_deallocate. Ignores findspace and offset. */
++kern_return_t map_fd( int fd, vm_offset_t offset, vm_offset_t *va, boolean_t findspace, vm_size_t size)
++{
++      void* space = NULL;
++      int bytes = 0;
++
++      assert( fd > 0 );
++      assert( offset == 0 );
++      //~ assert( *va == 0 );
++      assert( findspace == TRUE );
++      
++      // Allocate memory
++      space = malloc( size );
++      assert( space != NULL );
++      
++      // Read file into space
++      while(bytes < size) bytes += read( fd, ((char*)space) + bytes, size - bytes);
++      assert( bytes == size );
++
++      /*
++      space = mmap( (void*) offset, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0 );
++      // No permission: try to make it read only
++      if ( space == (void*) -1 && errno == EACCES )
++      {
++              space = mmap( (void*) offset, size, PROT_READ, MAP_SHARED, fd, 0 );
++      }
++      assert( space != NULL && space != (void*) -1 );
++      */
++
++      // Copy back the pointer
++      *va = (vm_offset_t) space;
++      
++      // Return success
++      return KERN_SUCCESS;
++}
++
++/** Returns a string appropriate to the error argument given. */
++char* mach_error_string( int error_value )
++{
++      char *errorString = "Some fake mach error string.";
++      
++      return errorString;
++}
++
++/** Returns the mach port for the current host. We fake it by returning zero. */
++mach_port_t mach_host_self( void )
++{
++      return 0;
++}
++
++/** Returns the mach port for the current task. We fake it by returning zero. */
++//~ mach_port_t mach_task_self( void )
++//~ {
++      //~ return 0;
++//~ }
++
++/**The function vm_allocate allocates a region of virtual memory, placing it in the specified task's address space. Anywhere must be true, as the memory will be allocated anywhere. */
++extern kern_return_t vm_allocate( mach_port_t target_task, vm_address_t *address, vm_size_t size, boolean_t anywhere )
++{
++      assert( anywhere == TRUE );
++      
++      // Anonymous memory map
++      *address = (vm_address_t) mmap( NULL, size, PROT_READ | PROT_WRITE, MAP_PRIVATE|MAP_ANON, 0, 0 );
++      //~ *address = (vm_address_t) malloc( size );
++      assert( address != (vm_address_t) NULL );
++      
++      return KERN_SUCCESS;
++}
++
++/**vm_deallocate relinquishes access to a region of a task's address space, causing further access to that memory to fail. This memory must have been allocated with vm_allocate. size is ignored. */
++kern_return_t vm_deallocate( mach_port_t target_task, vm_address_t address, vm_size_t size ) 
++{
++      int ret = 0;
++      
++      assert( address != (vm_address_t) NULL );
++      
++      // Free the memory
++      ret = munmap( (void*) address, size );
++      assert( ret == 0 );
++      
++      //~ free( (void*) address );
++      
++      return KERN_SUCCESS;
++}
++
++/** The function mach_port_allocate_name creates a new right in the specified task, with a specified name for the new right. In this implementation it does nothing. */
++kern_return_t mach_port_allocate_name (mach_port_t task, mach_port_right_t right, mach_port_t name)
++{
++      return KERN_SUCCESS;
++}
++
++/** The function mach_port_deallocate releases a user reference for a right in task's IPC name space. In this implementation it does nothing. */
++kern_return_t mach_port_deallocate (mach_port_t task, mach_port_t name)
++{
++      return KERN_SUCCESS;
++}
++
++/** host_info returns information about the host. It is not implemented in this implementation. */
++kern_return_t host_info( host_t host, host_flavor_t flavor, host_info_t host_info_out, mach_msg_type_number_t *host_info_outCnt )
++{
++      assert( 0 );
++      return KERN_FAILURE;
++}
++
++/** vm_msync unimplemented: It does nothing. */
++kern_return_t vm_msync ( vm_map_t target_task, vm_address_t address, vm_size_t size, vm_sync_t sync_flags )
++{
++      //~ assert( address != (vm_address_t) NULL );
++      //~ int ret = 0;
++      //~ ret = msync( (void*) address, size, int flags);
++      //~ assert( 0 );
++      return KERN_SUCCESS;
++}
++
++/** bootstrap_look_up unimplemented. */
++kern_return_t bootstrap_look_up( mach_port_t bootstrap_port, name_t service_name, mach_port_t *service_port )
++{
++      assert( 0 );
++      return KERN_FAILURE;
++}
++
++/** mach_msg unimplemented. Send and/or receive a message.  If the message operation
++ *            is interrupted, and the user did not request an indication
++ *            of that fact, then restart the appropriate parts of the
++ *            operation silently (trap version does not restart).
++ */
++mach_msg_return_t mach_msg( mach_msg_header_t *msg, mach_msg_option_t option, mach_msg_size_t send_size,
++      mach_msg_size_t rcv_size, mach_port_name_t rcv_name, mach_msg_timeout_t timeout, mach_port_name_t notify)
++{
++      //~ assert( 0 );
++      return KERN_SUCCESS;
++}
+--- ar/archive.c       30 Apr 2002 07:37:17 -0000      1.1.1.1
++++ ar/archive.c       8 Sep 2003 01:51:24 -0000
+@@ -69,6 +69,7 @@
+ #include <sys/param.h>
+ #include <sys/stat.h>
++#include <stuff/ofile.h>
+ #include <ar.h>
+ #include <dirent.h>
+@@ -86,7 +87,7 @@
+ #include "extern.h"
+ typedef struct ar_hdr HDR;
+-static char hb[sizeof(HDR) + 1];      /* real header */
++static char hb[61];   /* real header */
+ int
+ open_archive(mode)
+@@ -262,30 +263,40 @@
+                */
+               lname = strlen(name);
+               if (options & AR_TR) {
++                char buf[16];
++                int i;
++                for(i=0; i<15; i++) buf[i] = ' ';
++                buf[15] = '\0';
+                       if (lname > OLDARMAXNAME) {
+                               (void)fflush(stdout);
+                               warnx("warning: %s truncated to %.*s",
+                                   name, OLDARMAXNAME, name);
+                               (void)fflush(stderr);
+                       }
+-                      (void)sprintf(hb, HDR3, name, (long int)sb->st_mtimespec.tv_sec,
++                      strncpy(buf, name, 15);
++                      (void)sprintf(hb, HDR3, buf, (long int)sb->st_mtime,
+                           (unsigned int)(u_short)sb->st_uid,
+                           (unsigned int)(u_short)sb->st_gid,
+-                          sb->st_mode, sb->st_size, ARFMAG);
++                          sb->st_mode, (long long)sb->st_size, ARFMAG);
+                       lname = 0;
+-              } else if (lname > sizeof(hdr->ar_name) || strchr(name, ' '))
++              } else if (lname > sizeof(hdr->ar_name) || strchr(name, ' ')) {
+                       (void)sprintf(hb, HDR1, AR_EFMT1, (lname + 3) & ~3,
+-                          (long int)sb->st_mtimespec.tv_sec,
++                          (long int)sb->st_mtime,
+                           (unsigned int)(u_short)sb->st_uid,
+                           (unsigned int)(u_short)sb->st_gid,
+-                          sb->st_mode, sb->st_size + ((lname + 3) & ~3),
++                          sb->st_mode, (long long)(sb->st_size + ((lname + 3) & ~3)),
+                           ARFMAG);
+-              else {
++}             else {
++                char buf[17];
++                int i;
++                for(i=0; i<16; i++) buf[i] = ' ';
++                buf[16] = '\0';
++                strncpy(buf, name, 16);
+                       lname = 0;
+-                      (void)sprintf(hb, HDR2, name, (long int)sb->st_mtimespec.tv_sec,
++                      (void)sprintf(hb, HDR2, buf, (long int)sb->st_mtime,
+                           (unsigned int)(u_short)sb->st_uid,
+                           (unsigned int)(u_short)sb->st_gid,
+-                          sb->st_mode, sb->st_size, ARFMAG);
++                          sb->st_mode, (long long)sb->st_size, ARFMAG);
+               }
+               size = sb->st_size;
+       } else {
+--- misc/libtool.c     Wed Apr 23 15:44:51 2003
++++ misc/libtool.c     Sun Sep  7 18:58:16 2003
+@@ -2177,14 +2177,15 @@
+     
+       strcpy(message_buf, message);
+       strcat(message_buf, arch_name);
+-
++      /*
+       make_alert(ProjectBuilder_port,
+           -1,
+-          NULL, 0, /* functionName, not used by ProjectBuilder */
++          NULL, 0,
+           fileName, strlen(fileName)+1 > 1024 ? 1024 : strlen(fileName)+1,
+           NULL, 0,
+           0,
+           message_buf, strlen(message_buf) + 1);
++*/
+ }
+ /*