calling select, via syscall, on 64 bit Leopard.
site_archiver@lists.apple.com Delivered-To: darwin-dev@lists.apple.com Hi, #include <libc.h> #include <mach-o/nlist.h> typedef int (*__syscall_t)(quad_t number, ...); return 0; } 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 (Darwin-dev@lists.apple.com) Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/darwin-dev/site_archiver%40lists.appl... 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()… 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; Except that gives "error: ‘union <anonymous>’ has no member named ‘n_name’". This email sent to site_archiver@lists.apple.com
participants (1)
-
Luke Daley