Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

util.c: Perl_xs_handshake print API ver mismatch before interp mismatch #22719

Open
wants to merge 1 commit into
base: blead
Choose a base branch
from

Conversation

bulk88
Copy link
Contributor

@bulk88 bulk88 commented Nov 1, 2024

see commit text

#19112

#16654

#15861

are most related to this patch, consideration and study should be done, if this patch, is "enough" to close those 3 tickets, and bury the handshake message drama forever, or Dynaloader::/strace/perldocs need improvement on how to un-brick your perl install when "Cwd.so" became corrupt.

I don't have an opinion on closing those tickets.

This patch shows API version conflict error FIRST, if the API version is actually conflicted and would have executed/fataled much later if it werent stoped by the ABI checks fatal erroring themselves.

This patch swaps the struct size message and 2 libperl.so es in 1 proc message, with the API version string NEQ message, if the API version is NEQ.

pod/perldiag.pod Outdated Show resolved Hide resolved
util.c Outdated Show resolved Hide resolved
util.c Outdated Show resolved Hide resolved
util.c Show resolved Hide resolved
@bulk88 bulk88 force-pushed the xs_handshake_new_error_text branch from e3ff370 to 8706962 Compare November 1, 2024 18:42
@bulk88
Copy link
Contributor Author

bulk88 commented Nov 1, 2024

repushed new rev

@bulk88 bulk88 force-pushed the xs_handshake_new_error_text branch from 8706962 to 7222838 Compare November 6, 2024 10:25
@bulk88
Copy link
Contributor Author

bulk88 commented Nov 6, 2024

rev # 3 pushed, I made "Perl API 5.X,0 vs 5.Y.0" POD description max details, for max fool proof, considering perl has 1st time/very rare time perl users. Like a C++ dev or Java dev who edits 3 lines of P5 code every 2-5 years for personal private code reasons, armed only knowledge, sometimes YEARS of knowledge, day job career knowledge of Java or C++ or Javascript,

But this smart developer has no background info on Perl 5 and will get lost trying to change 2 or 5 lines pf Perl 5 code somewhere.

I personally have zero idea how to turn a .class into a ,jar, even tho I have 6 cloned .git repo of Java right now because those libraries are very useful to me for grep research for Perl, or C, or MS C++ Win32 API code I am writing. I've reversing that viewpoint situation in the pod text to account for other 1st time Perl users.

I AM NOT JOKING. There are stack overflow threads, Linux User Group forums, BSD forums, and OSX forums, where developers are ripping their hair out looking for ASCII perl code that is doing

use 5.38.0;

as the trigger for

loadable library and perl binaries are mismatched (got %s handshake key %p, needed %p)

and

Perl API version %s of %s does not match %s.

Yes, they think its use 5.38.0; that triggers Perl API version %s of %s does not match %s. Fix that forever, so 1st users quietly self-fix it or know where to start in the thought process for troubleshooting.

-this fatal error is much more common by general users than
 I (orig author) anticipated when I added this check in 5.21.6/2014.
 I assumed Unix land never had ABI/SEGVing or upgrade problems previous.
 I wrote the code for my dev style, and my personal setup as test cases,
 and test cases with Win32-isms.
 If other OSes get bad-ABI caught, its a plus, but I thought they wouldn't.

-the hexadecimal handshake keys were intended to be a debug tool for core
 devs hacking on something and for XS authors with very complicated
 Makefile.PL s. To catch -D CCFLAGS arg dropouts on the way to the final
 cmd line invocation of the CC.

-I say the handshake keys are a terrible UI for general "power users" and
 non-coder sys admins

-the Perl API version strings ARE available, even with mismatched
 interp struct sizes, and those are much more user friendly to print
 as a error. It should be obvious that from now on, non-power users
 can figure out on their own (no community help) that a way to "fix"
 XS boot handshake is to force "reinstall" the "left side perl"
 or "right side perl" through the OS Pkg Manager.

-after this commit, much more often! but not always, users will see a
 "Perl API 5.X.Y against 5.X+1.Y is incompatible" fatal message instead
 of the those Core-dev only undocumented hex handshake keys. Sadly the
 technical P5P debug info is now gone/lost/hidden if
 "Perl API 5.X.Y against 5.X+1.Y is incompatible" fatal message executes.

-core devs, obv will have v5.X.Y matching v5.X.Y in blead perl, so they
 will still get the handshake keys hex numbers. Since API strings are
 same.

-Package name will get downgraded to "Foo.c" if interp size is wrong, or
 2 libperls in 1 proc happens. But the major improvement is showing left
 and right side Perl API version info.

-The POD text is very wordy and detailed, since it has been observed over
 time, some Perl users, do not know Perl's backend implementation is
 written in the ISO C language. Or other Perl users on various internet
 forums or social media, do not know what the term XS code is.

 While they can sucessful write and debug private personal Perl 5 code,
 they only read the POD of CPAN modules and only use public documented
 APIs of CPAN modules, and rarely or never look at
 "private source" of CPAN modules. Therefore this group of users truly
 do not know MANY MANY p5p core modules and CPAN modules, make call outs
 to another language (C), and are unable to troubleshoot a .so file on
 their filing system is responsible for the error. Since they do not know
 about XS code concept, their troubleshooting goes very wrong as they
 keeping looking and keep incorrect diagnosing the problem to ASCII text
 somewhere in the Perl ecosystem. Either Perl source code, they wrote, or
 CPAN Perl source code, or a CSV, YAML or JSON file related to Perl.

 Make it clear, that some "Perl 5 modules" written in ASCII text in Perl 5
 lang, depend on "foreign" C code and "foreign" .so/.dll files at runtime.
 First time Perl coders, can mistakenly assume the Perl 5 interpreter
 has JIT and self bootstraps to OS binaries from only Perl 5 source like
 Google Chrome V8 and Raku. So they guess, as first time users,
 Perl 5 also does it and has no dependency on legacy technologies like
 C or C++.

This commit was specifically written for

Perl#16654

but there are dozens or 100s of them

Perl#19112
@bulk88 bulk88 force-pushed the xs_handshake_new_error_text branch from 7222838 to 73172a6 Compare December 19, 2024 09:12
@bulk88
Copy link
Contributor Author

bulk88 commented Dec 19, 2024

rebased repushed, I'd like to see this committed. It also adds CI code that proves the fatal errors will execute.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants