From 620efcc6a0bcf699340c69e6f107bcb0b3259304 Mon Sep 17 00:00:00 2001 From: megacz Date: Fri, 30 Jan 2004 07:05:34 +0000 Subject: [PATCH] 2003/09/07 22:14:58 darcs-hash:20040130070534-2ba56-ac9807ed6cc1ebb39d9b5b1d44b6aff6ad789b30.gz --- upstream/darwin-linker/patches/cctools.patch | 330 +++++++++++++------------- 1 file changed, 166 insertions(+), 164 deletions(-) diff --git a/upstream/darwin-linker/patches/cctools.patch b/upstream/darwin-linker/patches/cctools.patch index 0a3e651..22af03f 100644 --- a/upstream/darwin-linker/patches/cctools.patch +++ b/upstream/darwin-linker/patches/cctools.patch @@ -937,170 +937,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 @@ @@ -2333,3 +2169,169 @@ diff -bur ./symbols.h /home/megacz/xwt/upstream/darwin-linker/src/cctools/as/sym size = sb->st_size; } else { lname = chdr.lname; +--- 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; ++} -- 1.7.10.4