Re: [PATCH 1/1] Fix detection of pwritev support for OSX. - Mailing list pgsql-hackers

From Sergey Shinderuk
Subject Re: [PATCH 1/1] Fix detection of pwritev support for OSX.
Date
Msg-id 9ae3cf4f-895d-685f-333e-2c14a0e62b0a@postgrespro.ru
Whole thread Raw
In response to Re: [PATCH 1/1] Fix detection of pwritev support for OSX.  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-hackers
On 21.01.2021 02:07, Tom Lane wrote:
> I now believe what is actually happening with the short command is
> that it's iterating through the available SDKs (according to some not
> very clear search path) and picking the first one it finds that
> matches the host system version.  That matches the ktrace evidence
> that shows it reading the SDKSettings.plist file in each SDK
> directory.

Yes, you are right. After some more digging...

It searches the DEVELOPER_DIR first and then 
/Library/Developer/CommandLineTools, which is hardcoded.

My DEVELOPER_DIR is
% xcode-select -p
/Applications/Xcode.app/Contents/Developer

(For more detail try "otool -tV /usr/lib/libxcselect.dylib -p 
_xcselect_get_developer_dir_path".)

It reads ProductVersion from 
/System/Library/CoreServices/SystemVersion.plist

% plutil -p /System/Library/CoreServices/SystemVersion.plist | grep 
ProductVersion
   "ProductVersion" => "10.15.7"

Strips anything after the second dot, and prepends "macosx" to it, which 
gives "macosx10.15".

Then it scans through SDK dirs looking up CanonicalName from 
SDKSettings.plist until it finds a match with "macosx10.15".


The overall callstack:

% sudo dtrace -n 'syscall::getdirentries64:entry { ustack() }' -c 'xcrun 
--show-sdk-path'
dtrace: description 'syscall::getdirentries64:entry ' matched 1 probe
/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk
dtrace: pid 20183 has exited
CPU     ID                    FUNCTION:NAME
   0    846            getdirentries64:entry
               libsystem_kernel.dylib`__getdirentries64+0xa
               libsystem_c.dylib`readdir$INODE64+0x23
               libsystem_c.dylib`scandir$INODE64+0x6c
               libxcrun.dylib`cltools_lookup_sdk_by_key+0x5f
               libxcrun.dylib`cltools_lookup_boot_system_sdk+0xda
               libxcrun.dylib`xcinfocache_resolve_sdkroot+0xc0
               libxcrun.dylib`xcrun_main2+0x57a
               libxcrun.dylib`xcrun_main+0x9
               libxcselect.dylib`xcselect_invoke_xcrun_via_library+0xc8
               libxcselect.dylib`xcselect_invoke_xcrun+0x25a
               xcrun`DYLD-STUB$$getprogname
               libdyld.dylib`start+0x1
               xcrun`0x2

   0    846            getdirentries64:entry
               libsystem_kernel.dylib`__getdirentries64+0xa
               libsystem_c.dylib`readdir$INODE64+0x23
               libsystem_c.dylib`scandir$INODE64+0x6c
               libxcrun.dylib`cltools_lookup_sdk_by_key+0x5f
               libxcrun.dylib`cltools_lookup_boot_system_sdk+0xf3
               libxcrun.dylib`xcinfocache_resolve_sdkroot+0xc0
               libxcrun.dylib`xcrun_main2+0x57a
               libxcrun.dylib`xcrun_main+0x9
               libxcselect.dylib`xcselect_invoke_xcrun_via_library+0xc8
               libxcselect.dylib`xcselect_invoke_xcrun+0x25a
               xcrun`DYLD-STUB$$getprogname
               libdyld.dylib`start+0x1
               xcrun`0x2


The SDK search path:

% sudo dtrace -n 'pid$target:::entry 
/probefunc=="cltools_lookup_sdk_by_key"/ { trace(copyinstr(arg0)); 
trace(copyinstr(arg1)) }' -c 'xcrun --show-sdk-path'
dtrace: description 'pid$target:::entry ' matched 17293 probes
/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk
dtrace: pid 20191 has exited
CPU     ID                    FUNCTION:NAME
   8 398290  cltools_lookup_sdk_by_key:entry 
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer 
  macosx10.15
   9 398290  cltools_lookup_sdk_by_key:entry 
/Library/Developer/CommandLineTools  macosx10.15


The properties read from SDKSettings.plist:

% sudo dtrace -n 'pid$target:::entry 
/probefunc=="_cltools_lookup_property_in_path"/ { 
trace(copyinstr(arg0)); trace(copyinstr(arg1)); trace(copyinstr(arg2)) 
}' -c 'xcrun --show-sdk-path'
dtrace: description 'pid$target:::entry ' matched 17293 probes
/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk
dtrace: pid 20195 has exited
CPU     ID                    FUNCTION:NAME
   8 398288 _cltools_lookup_property_in_path:entry   / 
                 System/Library/CoreServices/SystemVersion.plist 
ProductVersion
   8 398288 _cltools_lookup_property_in_path:entry 
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/DriverKit20.2.sdk 
  SDKSettings.plist                  IsBaseSDK
   8 398288 _cltools_lookup_property_in_path:entry 
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/DriverKit20.2.sdk 
  SDKSettings.plist                  CanonicalName
   4 398288 _cltools_lookup_property_in_path:entry 
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/DriverKit20.2.sdk 
  SDKSettings.plist                  CanonicalNameForBuildSettings
   4 398288 _cltools_lookup_property_in_path:entry 
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk 
  SDKSettings.plist                  IsBaseSDK
   4 398288 _cltools_lookup_property_in_path:entry 
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk 
  SDKSettings.plist                  CanonicalName
   4 398288 _cltools_lookup_property_in_path:entry 
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk 
  SDKSettings.plist                  CanonicalNameForBuildSettings
   4 398288 _cltools_lookup_property_in_path:entry 
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk 
  SDKSettings.plist                  PLATFORM_NAME
   4 398288 _cltools_lookup_property_in_path:entry 
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.1.sdk 
  SDKSettings.plist                  IsBaseSDK
   2 398288 _cltools_lookup_property_in_path:entry 
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.1.sdk 
  SDKSettings.plist                  CanonicalName
   2 398288 _cltools_lookup_property_in_path:entry 
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.1.sdk 
  SDKSettings.plist                  CanonicalNameForBuildSettings
   2 398288 _cltools_lookup_property_in_path:entry 
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.1.sdk 
  SDKSettings.plist                  PLATFORM_NAME
   2 398288 _cltools_lookup_property_in_path:entry 
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk  SDKSettings.plist 
                 IsBaseSDK
   2 398288 _cltools_lookup_property_in_path:entry 
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk  SDKSettings.plist 
                 CanonicalName
   2 398288 _cltools_lookup_property_in_path:entry 
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk  SDKSettings.plist 
                 CanonicalNameForBuildSettings
   0 398288 _cltools_lookup_property_in_path:entry 
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk  SDKSettings.plist 
                 PLATFORM_NAME
   0 398288 _cltools_lookup_property_in_path:entry 
/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk 
SDKSettings.plist                  IsBaseSDK
   0 398288 _cltools_lookup_property_in_path:entry 
/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk 
SDKSettings.plist                  CanonicalName


BTW, on my machine /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk 
is skipped because it points to 11.0:

% ls -l /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
lrwxr-xr-x  1 root  wheel  14 Nov 17 02:21 
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -> MacOSX11.0.sdk

For more detail try
% otool -tV 
/Applications/Xcode.app/Contents/Developer/usr/lib/libxcrun.dylib -p 
_cltools_lookup_boot_system_sdk



pgsql-hackers by date:

Previous
From: Amit Kapila
Date:
Subject: Re: Parallel INSERT (INTO ... SELECT ...)
Next
From: "Hou, Zhijie"
Date:
Subject: RE: Parallel INSERT (INTO ... SELECT ...)