X-Git-Url: http://git.megacz.com/?p=org.ibex.core.git;a=blobdiff_plain;f=upstream%2Fdarwin-linker%2Fpatches%2Fcctools.patch;h=59236eec822cf88499c26a34201497180a7f629d;hp=0a3e651e25286ce9444c2929fced2f50abe568cb;hb=9fe5ab0b773fee33a8af3406b3e7b3fcd2303d76;hpb=481c6edd90e1252ba482d2c93ff6726e968c85a1 diff --git a/upstream/darwin-linker/patches/cctools.patch b/upstream/darwin-linker/patches/cctools.patch index 0a3e651..59236ee 100644 --- a/upstream/darwin-linker/patches/cctools.patch +++ b/upstream/darwin-linker/patches/cctools.patch @@ -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 -+#include - - /* - * 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 -+#include -+#include -+#include -+#include -+ -+#include -+ -+#include -+ -+// Mach include files for typedefs, return values, etc -+//~ #include -+#include -+#include -+#include -+#include -+#include -+ -+/** 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 -+ -+/** 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 @@ @@ -2289,8 +2113,174 @@ diff -bur ./symbols.h /home/megacz/xwt/upstream/darwin-linker/src/cctools/as/sym 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 ++#include ++#include ++#include ++#include ++ ++#include ++ ++#include ++ ++// Mach include files for typedefs, return values, etc ++//~ #include ++#include ++#include ++#include ++#include ++#include ++ ++/** 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 ++ ++/** 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 7 Sep 2003 10:15:36 -0000 ++++ ar/archive.c 8 Sep 2003 01:51:24 -0000 @@ -69,6 +69,7 @@ #include @@ -2299,11 +2289,23 @@ diff -bur ./symbols.h /home/megacz/xwt/upstream/darwin-linker/src/cctools/as/sym #include #include -@@ -261,32 +262,17 @@ - * a space, use extended format 1. +@@ -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) { + 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", @@ -2311,25 +2313,57 @@ diff -bur ./symbols.h /home/megacz/xwt/upstream/darwin-linker/src/cctools/as/sym (void)fflush(stderr); } - (void)sprintf(hb, HDR3, name, (long int)sb->st_mtimespec.tv_sec, -+ (void)sprintf(hb, HDR3, name, (long int)0, ++ 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, sb->st_size, ARFMAG); ++ sb->st_mode, (long long)sb->st_size, ARFMAG); lname = 0; - } else if (lname > sizeof(hdr->ar_name) || strchr(name, ' ')) -- (void)sprintf(hb, HDR1, AR_EFMT1, (lname + 3) & ~3, ++ } 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, -- (unsigned int)(u_short)sb->st_uid, -- (unsigned int)(u_short)sb->st_gid, ++ (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), -- ARFMAG); ++ sb->st_mode, (long long)(sb->st_size + ((lname + 3) & ~3)), + ARFMAG); - else { -- lname = 0; ++} 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, -- (unsigned int)(u_short)sb->st_uid, -- (unsigned int)(u_short)sb->st_gid, ++ (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 { - lname = chdr.lname; +--- 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); ++*/ + } + + /*