• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
calling select, via syscall, on 64 bit Leopard.
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

calling select, via syscall, on 64 bit Leopard.


  • Subject: calling select, via syscall, on 64 bit Leopard.
  • From: Luke Daley <email@hidden>
  • Date: Wed, 3 Sep 2008 19:48:43 +1000

Hi,

This was the select and svn discussion, but we have narrowed the problem down to syscall() on 64 bit Leopard so I am starting a new thread.

`man syscall` tells us that you need to use __syscall() on 64 bit architectures. The problem with that though is that __syscall() is in libSystem, but is not exported. Jean-Daniel Dupas then contributed this code to get to __syscall()…

#include <libc.h>
#include <mach-o/nlist.h>

typedef int (*__syscall_t)(quad_t number, ...);

int main(int argc, const char * argv[]) {
struct nlist nl[1];
bzero(&nl, sizeof(struct nlist) * 2);
nl[0].n_un.n_name = (char *)"___syscall";
if (nlist("/usr/lib/libSystem.dylib", nl) < 0 || nl[0].n_type == N_UNDF) {
fprintf(stderr, "nlist(%s, %s) failed\n",
"/usr/lib/libSystem.dylib",
nl[0].n_un.n_name);
return -1;
}
__syscall_t fcn = (__syscall_t)nl[0].n_value;


  return 0;
}

Except that gives "error: ‘union <anonymous>’ has no member named ‘n_name’".

Looking at mach-o/nlist.h…

struct nlist {
	union {
#ifndef __LP64__
		char *n_name;	/* for use when in-core */
#endif
		int32_t n_strx;	/* index into the string table */
	} n_un;
	uint8_t n_type;		/* type flag, see below */
	uint8_t n_sect;		/* section number or NO_SECT */
	int16_t n_desc;		/* see <mach-o/stab.h> */
	uint32_t n_value;	/* value of this symbol (or stab offset) */
};

That looks to me line n_name isn't there on 64 bit architectures.

Can I get at this any other way?

--

LD.

_______________________________________________
Do not post admin requests to the list. They will be ignored.
Darwin-dev mailing list      (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden


  • Follow-Ups:
    • Re: calling select, via syscall, on 64 bit Leopard.
      • From: Jean-Daniel Dupas <email@hidden>
  • Prev by Date: Re: Safe Boot with Local-Root driver on Leopard?
  • Next by Date: Re: calling select, via syscall, on 64 bit Leopard.
  • Previous by thread: Re: Safe Boot with Local-Root driver on Leopard?
  • Next by thread: Re: calling select, via syscall, on 64 bit Leopard.
  • Index(es):
    • Date
    • Thread