Re: How to manually register a symbol address in dyld?
site_archiver@lists.apple.com Delivered-To: darwin-dev@lists.apple.com Le 14 oct. 2009 à 15:56, Stéphane Corthésy a écrit : Hello, On Oct 13, 2009, at 4:30 PM, Peter O'Gorman wrote: Hello, I don't know what it is. I saw no mention on 'alias' in dyld code. Wouldn't work, like with weak symbols. // In header file. extern void (*my_renamed_function)(void *arrgs); // somewhere at initialization if (10.5) my_renamed_function = my_original_function; else my_renamed_function = another_function; ------------- And where you need to use it: my_renamed_function(args); -- Jean-Daniel _______________________________________________ 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... On 10/13/2009 02:55 AM, Stéphane Corthésy wrote: For some reason (that I'll explain later), I need to load a bundle which contains symbols undefined in application libraries. BUT, though these symbols are undefined, the actual implementations are present in current runtime, but under a different symbol. Thus, before loading that bundle I need to manually tell dyld that symbol 'my_renamed_function' should be bound to 'my_original_function' already present in system libraries. Or I need a hook that would allow me to do that while loading the bundle. I'm working on 10.6. I tried to look at dyld source code, but got lost :-) I tried to use NSInstallLinkEditErrorHandlers, but my handler wasn't invoked. So, is there a way to do that, and how? Why do you need to do this? There are very likely alternative ways of doing what you need e.g. weak undefined external symbols, That cannot work. As I wrote, the bundle (already weakly linked) has symbols that are not available on 10.6 (they were on 10.5), BUT though the symbols are not exported, the actual functions are available in 10.6, thus I'd like to create a bundle which would augment dyld symbol table and then load the other bundle with (previously unknown) symbols, and it would link well. symbol aliases, using dlsym() to check at runtime what symbols are available etc etc. Please provide more details about the problem you're trying to solve. I will, once I know how to do it ;-) Instead of dealing with dylib issue, isn't it possible to create a function pointer that you invoke where you need, and set the function value at initialization ? This email sent to site_archiver@lists.apple.com
participants (1)
-
Jean-Daniel Dupas