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

[PATCH] fix dl_find_symbol_anywhere() #16577

Open
p5pRT opened this issue Jun 3, 2018 · 2 comments
Open

[PATCH] fix dl_find_symbol_anywhere() #16577

p5pRT opened this issue Jun 3, 2018 · 2 comments

Comments

@p5pRT
Copy link

p5pRT commented Jun 3, 2018

Migrated from rt.perl.org#133242 (status was 'new')

Searchable as RT133242$

@p5pRT
Copy link
Author

p5pRT commented Jun 3, 2018

From @bulk88

Created by @bulk88

See attached patch.

Perl Info
---
Flags:
                    category=core
                    severity=low
---
Site configuration information for perl 5.27.9:

Configured by Administrator at Tue Jan 30 20:34:30 2018.

Summary of my perl5 (revision 5 version 27 subversion 9) configuration:

                  Platform:
                    osname=MSWin32
                    osvers=5.2.3790
                    archname=MSWin32-x86-multi-thread
                    uname=''
                    config_args='undef'
                    hint=recommended
                    useposix=true
                    d_sigaction=undef
                    useithreads=define
                    usemultiplicity=define
                    use64bitint=undef
                    use64bitall=undef
                    uselongdouble=undef
                    usemymalloc=n
                    default_inc_excludes_dot=define
                    bincompat5005=undef
                  Compiler:
                    cc='cl'
                    ccflags ='-nologo -GF -W3 -O1 -MD -Zi -DNDEBUG -GL
-DWIN32
-D_CONSOLE -DNO_STRICT -D_CRT_SECURE_NO_DEPRECATE
-D_CRT_NONSTDC_NO_DEPRECATE  -DPERL_TEXTMODE_SCRIPTS
-DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DWIN32_NO_REGISTRY'
                    optimize='-O1 -MD -Zi -DNDEBUG -GL'
                    cppflags='-DWIN32'
                    ccversion='15.00.30729.01'
                    gccversion=''
                    gccosandvers=''
                    intsize=4
                    longsize=4
                    ptrsize=4
                    doublesize=8
                    byteorder=1234
                    doublekind=3
                    d_longlong=undef
                    longlongsize=8
                    d_longdbl=define
                    longdblsize=8
                    longdblkind=0
                    ivtype='long'
                    ivsize=4
                    nvtype='double'
                    nvsize=8
                    Off_t='__int64'
                    lseeksize=8
                    alignbytes=8
                    prototype=define
                  Linker and Libraries:
                    ld='link'
                    ldflags ='-nologo -nodefaultlib -debug -opt:ref,icf 
-ltcg
-libpath:"c:\perl\lib\CORE"        -machine:x86'
                    libpth="C:\Program Files (x86)\Microsoft Visual Studio
9.0\VC\lib"
                    libs=oldnames.lib kernel32.lib user32.lib gdi32.lib
winspool.lib
comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib
netapi32.lib uuid.lib ws2_32.lib mpr.lib winmm.lib version.lib
odbc32.lib odbccp32.lib comctl32.lib msvcrt.lib
                    perllibs=oldnames.lib kernel32.lib user32.lib gdi32.lib
winspool.lib
comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib
netapi32.lib uuid.lib ws2_32.lib mpr.lib winmm.lib version.lib
odbc32.lib odbccp32.lib comctl32.lib msvcrt.lib
                    libc=msvcrt.lib
                    so=dll
                    useshrplib=true
                    libperl=perl527.lib
                    gnulibc_version=''
                  Dynamic Linking:
                    dlsrc=dl_win32.xs
                    dlext=dll
                    d_dlsymun=undef
                    ccdlflags=' '
                    cccdlflags=' '
                    lddlflags='-dll -nologo -nodefaultlib -debug 
-opt:ref,icf
-ltcg
                    -libpath:"c:\perl\lib\CORE"        -machine:x86'


---
@INC for perl 5.27.9:
                    lib
                    C:/p527/srcnew/lib

---
Environment for perl 5.27.9:
                    CYGWIN=tty
                    HOME (unset)
                    LANG (unset)
                    LANGUAGE (unset)
                    LD_LIBRARY_PATH=/usr/lib/x86:/usr/X11R6/lib
                    LOGDIR (unset)
                    PATH=C:\WINDOWS\system32;C:\Program Files 
(x86)\Microsoft
Visual
Studio 9.0\VC\BIN;C:\Program Files\Microsoft
SDKs\Windows\v6.0A\bin;C:\Perl\bin;C:\WINDOWS;C:\Program Files
(x86)\Microsoft Visual Studio 9.0\Common7\IDE;C:\Program Files
(x86)\Git\bin;C:\sp3220\c\bin;
                    PERL_BADLANG (unset)
                    SHELL (unset)









@p5pRT
Copy link
Author

p5pRT commented Jun 3, 2018

From @bulk88

0001-fix-dl_find_symbol_anywhere.patch
From 8f4a947dd37d238e652bf4e11bdba595283b542f Mon Sep 17 00:00:00 2001
From: Reini Urban <rurban@cpanel.net>
Date: Sat, 2 Jun 2018 21:08:26 -0400
Subject: [PATCH] fix dl_find_symbol_anywhere()

return the address not the name.
Closes #352, thanks to @voegelas

bulk88: test extracted from cperl
commit bef2a1d84a31b54863909d8222c6d723a3c1d9b7 the bug fix is for a XS
implementation of sub dl_find_symbol_anywhere() in cperl that is not in
perl, but sub dl_find_symbol_anywhere() had no tests in perl or cperl prior
to that cperl bug report so bring the cperl test into perl so
sub dl_find_symbol_anywhere() has tests.

Signed-off-by: Daniel Dragan <bulk88@hotmail.com>
---
 ext/DynaLoader/t/DynaLoader.t | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/ext/DynaLoader/t/DynaLoader.t b/ext/DynaLoader/t/DynaLoader.t
index 7fe30b3..bb44826 100644
--- a/ext/DynaLoader/t/DynaLoader.t
+++ b/ext/DynaLoader/t/DynaLoader.t
@@ -32,7 +32,7 @@ BEGIN {
     'Time::HiRes' => q| ::is( ref Time::HiRes->can('usleep'),'CODE' ) |,  # 5.7.3
 );
 
-plan (26 + keys(%modules) * 3);
+plan (27 + keys(%modules) * 3);
 
 # Try to load the module
 use_ok( 'DynaLoader' );
@@ -146,15 +146,25 @@ for my $module (sort keys %modules) {
 is( scalar @DynaLoader::dl_librefs, scalar keys %modules, "checking number of items in \@dl_librefs" );
 is( scalar @DynaLoader::dl_modules, scalar keys %modules, "checking number of items in \@dl_modules" );
 
+my ($symbol, $symref);
+if ($modules{'List::Util'}) {
+    $symbol = 'boot_List__Util';
+    $symref = DynaLoader::dl_find_symbol_anywhere($symbol);
+}
+
 my @loaded_modules = @DynaLoader::dl_modules;
 for my $libref (reverse @DynaLoader::dl_librefs) {
+
+    my $module = pop @loaded_modules;
+    if ($module eq 'List::Util' and $modules{'List::Util'}) {
+        is($symref, DynaLoader::dl_find_symbol($libref, $symbol), 'dl_find_symbol');
+    }
  TODO: {
         todo_skip( "Can't safely unload with -DPERL_GLOBAL_STRUCT_PRIVATE (RT #119409)", 2 )
             if $Config{ccflags} =~ /(?:^|\s)-DPERL_GLOBAL_STRUCT_PRIVATE\b/;
     SKIP: {
             skip( "unloading unsupported on $^O", 2 )
                 if ($old_darwin || $^O eq 'VMS');
-            my $module = pop @loaded_modules;
             skip( "File::Glob sets PL_opfreehook", 2 ) if $module eq 'File::Glob';
             my $r = eval { DynaLoader::dl_unload_file($libref) };
             is( $@, '', "calling dl_unload_file() for $module" );
-- 
2.5.0.windows.1

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

No branches or pull requests

2 participants