Re: select$DARWIN_EXTSN$NOCANCEL vs select$DARWIN_EXTSN
Re: select$DARWIN_EXTSN$NOCANCEL vs select$DARWIN_EXTSN
- Subject: Re: select$DARWIN_EXTSN$NOCANCEL vs select$DARWIN_EXTSN
- From: Jean-Daniel Dupas <email@hidden>
- Date: Tue, 04 Oct 2011 18:14:11 +0200
Le 4 oct. 2011 à 15:07, Mike Richmond a écrit :
>
> On 4 Oct 2011, at 11:35, Jean-Daniel Dupas wrote:
>
>>
>> Le 4 oct. 2011 à 12:15, Mike Richmond a écrit :
>>
>>>
>>> On 3 Oct 2011, at 20:06, Jonas Maebe wrote:
>>>
>>>> On 03 Oct 2011, at 17:43, Mike Richmond wrote:
>>>>
>>>>> What I can't get to work though is building on 10.6 with the 10.4u SDK. In that case I note that select$DARWIN_EXTSN$NOCANCEL() is being called, whereas I think I want select$DARWIN_EXTSN() to be called (as I see when using the 10.5 and 10.6 SDKs).
>>>>
>>>> The Mac OS X 10.4 version of libSystem contained only one version of select. It did not have a NOCANCEL version (nor even a DARWIN_EXTSN version, so I'm not sure why you think that version is being called).
>>>
>>> There's only one version of select() when building on 10.4 with tools and SDKs from Xcode 2.4.1, but its behaviour varies dependent on whether I define _POSIX_C_SOURCE or not.
>>>
>>> However when I build and run on 10.6 against the 10.4u SDK using GCC 4.0 from Xcode 3.2.x I see:
>>>
>>> #0 0x9191a58a in select$DARWIN_EXTSN$NOCANCEL ()
>>> #1 0x919b2c4b in select ()
>>> #2 0x00001dce in timer_fn ()
>>>
>>> and none of the defines mentioned in <http://developer.apple.com/library/mac/#releasenotes/
>>> Darwin/SymbolVariantsRelNotes/index.html> affect it. I was expecting defining _POSIX_C_SOURCE to make a difference, as it does when building on 10.4, but it doesn't.
>>>
>>> cf building with GCC 4.2 against the 10.6 SDK:
>>>
>>> #0 0x918fdac6 in select$DARWIN_EXTSN ()
>>> #1 0x00001d06 in timer_fn ()
>>> #2 0x9190c259 in _pthread_start ()
>>>
>>> ISTM that there should be something I can define so that I get select$DARWIN_EXTSN when using the 10.4u SDK on 10.6, so that I can get the same behaviour as when I build on 10.4.
>>
>>
>> As already mentioned, there is only one version of select in 10.4 libSystem.
>> If you managed to generate a call to something else than select, when trying to run on 10.4, you will get a crash due to missing symbol.
>
> Yes, I realise that there is only select() when running on 10.4. There I see:
>
> #0 0x90019d0c in select ()
> #1 0x00001dce in timer_fn ()
>
> whether _POSIX_C_SOURCE is defined or not, but the definition of _POSIX_C_SOURCE affects the behaviour.
>
> On 10.6 I was expecting to see a backtrace like:
>
> #0 0x00007fff82efa932 in select$DARWIN_EXTSN ()
> #1 0x00007fff82f76922 in select ()
> #2 0x0000000100000c03 in timer_fn ()
>
AFAIK, that's not how variants works. You will see either select or select$DARWIN_EXTSN, but not both in the same trace. The macro defined which function is called, it does not change the function behavior.
That said, I would be curious to know how a preprocessor macro can change the runtime behavior of a dynamically linked function.
> when _POSIX_C_SOURCE is defined - this being from a 64-bit build, which behaves as I expect it to.
>
> I've now found that whether I define _POSIX_C_SOURCE or not when building on 10.6 does make a difference when I take that app and run it on 10.4. What I can't do successfully is build and run a 32-bit app on 10.6 using the 10.4u SDK. The same app which runs correctly on 10.4 fails on 10.6.
-- Jean-Daniel
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Xcode-users mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden