Re: pg_preadv() and pg_pwritev()
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Sergey Shinderuk <s.shinderuk@postgrespro.ru>
Cc: Thomas Munro <thomas.munro@gmail.com>,
pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2021-01-14T18:05:14Z
Lists: pgsql-hackers
Sergey Shinderuk <s.shinderuk@postgrespro.ru> writes: > On 14.01.2021 18:42, Tom Lane wrote: >>> I noticed that "cc" invoked from command line uses: >>> -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk >> Hm, how did you determine that exactly? > % cc -v tmp.c > ... > -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk Okay, interesting. On my Catalina machine, I see -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk which is also a 10.15 SDK, since I haven't upgraded Xcode past 12.0. I wonder if that would change if I did upgrade (but I don't plan to risk it, since this is my only remaining Catalina install). After considerable playing around, I'm guessing that the reason -no_weak_imports doesn't help is that it rejects calls that are marked as weak references on the *calling* side. Since AC_CHECK_FUNCS doesn't bother to #include the relevant header file, the compiler doesn't know that preadv() ought to be marked as a weak reference. Then, when the test program gets linked against the stub libc that's provided by the SDK, there is a version of preadv() there so no link failure occurs. (There are way more moving parts in this weak-reference thing than I'd realized.) It seems like the more productive approach would be to try to identify the right sysroot to use. I wonder if there is some less messy way to find out the compiler's default sysroot than to scrape it out of -v output. Another thing I've been realizing while poking at this is that we might not need to set -isysroot explicitly at all, which would then lead to the compiler using its default sysroot automatically. In some experimentation, it seems like what we need PG_SYSROOT for is just for configure to be able to find tclConfig.sh and the Perl header files. So at this point I'm tempted to try ripping that out altogether. If you remove the lines in src/template/darwin that inject PG_SYSROOT into CPPFLAGS and LDFLAGS, do things work for you? regards, tom lane
Commits
-
Improve our heuristic for selecting PG_SYSROOT on macOS.
- 3934543c2bb0 9.5.25 landed
- fc6d08b27a33 9.6.21 landed
- 5fa060c8f593 10.16 landed
- 046c8facecee 11.11 landed
- f5d044eaeff0 12.6 landed
- f44ae4db5fec 13.2 landed
- 4823621db312 14.0 landed
-
Move our p{read,write}v replacements into their own files.
- 0d56acfbaa79 14.0 landed
-
Don't use elog() in src/port/pwrite.c.
- df10ac625c16 14.0 landed
-
Use vectored I/O to fill new WAL segments.
- ce6a71fa5300 14.0 landed
-
Provide pg_preadv() and pg_pwritev().
- 13a021f3e8c9 14.0 landed