assert (!(flags & MAP_SHARED));
__ptr_t weak_function__mmap (__ptr_t addr, size_t len, int prot, int flags, int fd, off_t offset){  error_t err;  vm_prot_t vmprot;  vm_address_t mapaddr;  mach_port_t memobj_rd, memobj_wr;  vmprot = VM_PROT_NONE;  if (prot & PROT_READ)    vmprot |= VM_PROT_READ;  if (prot & PROT_WRITE)    vmprot |= VM_PROT_WRITE;  if (prot & PROT_EXEC)    vmprot |= VM_PROT_EXECUTE;  if (flags & MAP_ANON)    memobj_rd = MACH_PORT_NULL;  else    {      err = __io_map ((mach_port_t) fd, &memobj_rd, &memobj_wr);      if (err)	return (__ptr_t) __hurd_fail (err);      __mach_port_deallocate (__mach_task_self (), memobj_wr);    }  mapaddr = (vm_address_t) addr;  err = __vm_map (__mach_task_self (),		  &mapaddr, (vm_size_t) len, 0 /*ELF_MACHINE_USER_ADDRESS_MASK*/,		  !(flags & MAP_FIXED),		  memobj_rd,		  (vm_offset_t) offset,		  flags & (MAP_COPY|MAP_PRIVATE),		  vmprot, VM_PROT_ALL,		  (flags & MAP_SHARED) ? VM_INHERIT_SHARE : VM_INHERIT_COPY);  if (err == KERN_NO_SPACE && (flags & MAP_FIXED))    {      /* XXX this is not atomic as it is in unix! */      /* The region is already allocated; deallocate it first.  */      err = __vm_deallocate (__mach_task_self (), mapaddr, len);      if (! err)	err = __vm_map (__mach_task_self (),			&mapaddr, (vm_size_t) len, 0 /*ELF_MACHINE_USER_ADDRESS_MASK*/,			!(flags & MAP_FIXED),			memobj_rd, (vm_offset_t) offset,			flags & (MAP_COPY|MAP_PRIVATE),			vmprot, VM_PROT_ALL,			(flags & MAP_SHARED)			? VM_INHERIT_SHARE : VM_INHERIT_COPY);    }  if ((flags & MAP_ANON) == 0)    __mach_port_deallocate (__mach_task_self (), memobj_rd);  return err ? (__ptr_t) __hurd_fail (err) : (__ptr_t) mapaddr;}void weak_function_exit (int status){  __proc_mark_exit (_dl_hurd_data->portarray[INIT_PORT_PROC],		    W_EXITCODE (status, 0), 0);  while (__task_terminate (__mach_task_self ()))    __mach_task_self_ = (__mach_task_self) ();}/* Read the whole contents of FILE into new mmap'd space with given   protections.  The size of the file is returned in SIZE.  */void *weak_function_dl_sysdep_read_whole_file (const char *file, size_t *size, int prot){  struct stat stat;  mach_port_t memobj_rd;  void *contents;  error_t err = open_file (file, O_RDONLY, &memobj_rd, &stat);  if (! err)    {      /* Map a copy of the file contents.  */      contents = __mmap (0, stat.st_size, prot, MAP_COPY, memobj_rd, 0);      if (contents == (void *)-1)	contents = 0;      else	*size = stat.st_size;      __mach_port_deallocate (__mach_task_self (), memobj_rd);    }  else    {      __hurd_fail (err);      contents = 0;    }  return contents;}/* This function is called by interruptible RPC stubs.  For initial   dynamic linking, just use the normal mach_msg.  Since this defn is   weak, the real defn in libc.so will override it if we are linked into   the user program (-ldl).  */error_t weak_function_hurd_intr_rpc_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_t rcv_name,			 mach_msg_timeout_t timeout,			 mach_port_t notify){  return __mach_msg (msg, option, send_size, rcv_size, rcv_name,		     timeout, notify);}voidinternal_function_dl_show_auxv (void){  /* There is nothing to print.  Hurd has no auxiliary vector.  */}/* Return an array of useful/necessary hardware capability names.  */const struct r_strlenpair *internal_function_dl_important_hwcaps (const char *platform, size_t platform_len, size_t *sz,		      size_t *max_capstrlen){  struct r_strlenpair *result;  /* Return an empty array.  Hurd has no hardware capabilities.  */  result = (struct r_strlenpair *) malloc (sizeof (*result));  if (result == NULL)    _dl_signal_error (ENOMEM, NULL, "cannot create capability list");  result[0].str = (char *) result;	/* Does not really matter.  */  result[0].len = 0;  *sz = 1;  return result;}void weak_function_dl_sysdep_fatal (const char *msg, ...)