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

Get -DPERL_MEM_LOG working again #15259

Closed
p5pRT opened this issue Apr 1, 2016 · 10 comments
Closed

Get -DPERL_MEM_LOG working again #15259

p5pRT opened this issue Apr 1, 2016 · 10 comments

Comments

@p5pRT
Copy link

p5pRT commented Apr 1, 2016

Migrated from rt.perl.org#127819 (status was 'resolved')

Searchable as RT127819$

@p5pRT
Copy link
Author

p5pRT commented Apr 1, 2016

From @wolfsage

Created by wolfsage@gmail.com

Compiling with -Accflags=-DPERL_MEM_LOG isn't currently functioning.

Attached is a patch to make that work again (and make test passes!)

(See also http​://www.nntp.perl.org/group/perl.perl5.porters/2016/04/msg235541.html)

Perl Info

Flags:
    category=core
    severity=low

Site configuration information for perl 5.20.2:

Configured by Debian Project at Wed Jan 20 16:39:24 UTC 2016.

Summary of my perl5 (revision 5 version 20 subversion 2) configuration:

  Platform:
    osname=linux, osvers=3.13.0-76-generic,
archname=x86_64-linux-gnu-thread-multi
    uname='linux lcy01-10 3.13.0-76-generic #120-ubuntu smp mon jan 18
15:59:10 utc 2016 x86_64 x86_64 x86_64 gnulinux '
    config_args='-Dusethreads -Duselargefiles -Dccflags=-DDEBIAN
-D_FORTIFY_SOURCE=2 -g -O2 -fstack-protector-strong -Wformat
-Werror=format-security -Dldflags= -Wl,-Bsymbolic-functions
-Wl,-z,relro -Dlddlflags=-shared -Wl,-Bsymbolic-functions -Wl,-z,relro
-Dcccdlflags=-fPIC -Darchname=x86_64-linux-gnu -Dprefix=/usr
-Dprivlib=/usr/share/perl/5.20
-Darchlib=/usr/lib/x86_64-linux-gnu/perl/5.20 -Dvendorprefix=/usr
-Dvendorlib=/usr/share/perl5
-Dvendorarch=/usr/lib/x86_64-linux-gnu/perl5/5.20
-Dsiteprefix=/usr/local -Dsitelib=/usr/local/share/perl/5.20.2
-Dsitearch=/usr/local/lib/x86_64-linux-gnu/perl/5.20.2
-Dman1dir=/usr/share/man/man1 -Dman3dir=/usr/share/man/man3
-Dsiteman1dir=/usr/local/man/man1 -Dsiteman3dir=/usr/local/man/man3
-Duse64bitint -Dman1ext=1 -Dman3ext=3perl
-Dpager=/usr/bin/sensible-pager -Uafs -Ud_csh -Ud_ualarm -Uusesfio
-Uusenm -Ui_libutil -Uversiononly -DDEBUGGING=-g -Doptimize=-O2
-Duseshrplib -Dlibperl=libperl.so.5.20.2 -des'
    hint=recommended, useposix=true, d_sigaction=define
    useithreads=define, usemultiplicity=define
    use64bitint=define, use64bitall=define, uselongdouble=undef
    usemymalloc=n, bincompat5005=undef
  Compiler:
    cc='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fwrapv
-fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE
-D_FILE_OFFSET_BITS=64',
    optimize='-O2 -g',
    cppflags='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fwrapv
-fno-strict-aliasing -pipe -I/usr/local/include'
    ccversion='', gccversion='4.9.2', gccosandvers=''
    intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
    ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t',
lseeksize=8
    alignbytes=8, prototype=define
  Linker and Libraries:
    ld='cc', ldflags =' -fstack-protector -L/usr/local/lib'
    libpth=/usr/local/lib
/usr/lib/gcc/x86_64-linux-gnu/4.9/include-fixed
/usr/include/x86_64-linux-gnu /usr/lib /lib/x86_64-linux-gnu
/lib/../lib /usr/lib/x86_64-linux-gnu /usr/lib/../lib /lib
    libs=-lgdbm -lgdbm_compat -ldb -ldl -lm -lpthread -lc -lcrypt
    perllibs=-ldl -lm -lpthread -lc -lcrypt
    libc=libc-2.21.so, so=so, useshrplib=true, libperl=libperl.so.5.20
    gnulibc_version='2.21'
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
    cccdlflags='-fPIC', lddlflags='-shared -L/usr/local/lib -fstack-protector'

Locally applied patches:
    DEBPKG:debian/cpan_definstalldirs - Provide a sensible INSTALLDIRS
default for modules installed from CPAN.
    DEBPKG:debian/db_file_ver - http://bugs.debian.org/340047 Remove
overly restrictive DB_File version check.
    DEBPKG:debian/doc_info - Replace generic man(1) instructions with
Debian-specific information.
    DEBPKG:debian/enc2xs_inc - http://bugs.debian.org/290336 Tweak
enc2xs to follow symlinks and ignore missing @INC directories.
    DEBPKG:debian/errno_ver - http://bugs.debian.org/343351 Remove
Errno version check due to upgrade problems with long-running
processes.
    DEBPKG:debian/libperl_embed_doc - http://bugs.debian.org/186778
Note that libperl-dev package is required for embedded linking
    DEBPKG:fixes/respect_umask - Respect umask during installation
    DEBPKG:debian/writable_site_dirs - Set umask approproately for
site install directories
    DEBPKG:debian/extutils_set_libperl_path - EU:MM: set location of
libperl.a under /usr/lib
    DEBPKG:debian/no_packlist_perllocal - Don't install .packlist or
perllocal.pod for perl or vendor
    DEBPKG:debian/prefix_changes - Fiddle with *PREFIX and variables
written to the makefile
    DEBPKG:debian/fakeroot - Postpone LD_LIBRARY_PATH evaluation to
the binary targets.
    DEBPKG:debian/instmodsh_doc - Debian policy doesn't install
.packlist files for core or vendor.
    DEBPKG:debian/ld_run_path - Remove standard libs from LD_RUN_PATH
as per Debian policy.
    DEBPKG:debian/libnet_config_path - Set location of libnet.cfg to
/etc/perl/Net as /usr may not be writable.
    DEBPKG:debian/mod_paths - Tweak @INC ordering for Debian
    DEBPKG:debian/module_build_man_extensions -
http://bugs.debian.org/479460 Adjust Module::Build manual page
extensions for the Debian Perl policy
    DEBPKG:debian/prune_libs - http://bugs.debian.org/128355 Prune the
list of libraries wanted to what we actually need.
    DEBPKG:fixes/net_smtp_docs - [rt.cpan.org #36038]
http://bugs.debian.org/100195 Document the Net::SMTP 'Port' option
    DEBPKG:debian/perlivp - http://bugs.debian.org/510895 Make perlivp
skip include directories in /usr/local
    DEBPKG:debian/deprecate-with-apt - http://bugs.debian.org/747628
Point users to Debian packages of deprecated core modules
    DEBPKG:debian/squelch-locale-warnings -
http://bugs.debian.org/508764 Squelch locale warnings in Debian
package maintainer scripts
    DEBPKG:debian/skip-upstream-git-tests - Skip tests specific to the
upstream Git repository
    DEBPKG:debian/patchlevel - http://bugs.debian.org/567489 List
packaged patches for 5.20.2-2ubuntu0.1 in patchlevel.h
    DEBPKG:debian/skip-kfreebsd-crash - http://bugs.debian.org/628493
[perl #96272] Skip a crashing test case in t/op/threads.t on
GNU/kFreeBSD
    DEBPKG:fixes/document_makemaker_ccflags -
http://bugs.debian.org/628522 [rt.cpan.org #68613] Document that
CCFLAGS should include $Config{ccflags}
    DEBPKG:debian/find_html2text - http://bugs.debian.org/640479
Configure CPAN::Distribution with correct name of html2text
    DEBPKG:debian/perl5db-x-terminal-emulator.patch -
http://bugs.debian.org/668490 Invoke x-terminal-emulator rather than
xterm in perl5db.pl
    DEBPKG:debian/cpan-missing-site-dirs -
http://bugs.debian.org/688842 Fix CPAN::FirstTime defaults with
nonexisting site dirs if a parent is writable
    DEBPKG:fixes/memoize_storable_nstore - [rt.cpan.org #77790]
http://bugs.debian.org/587650 Memoize::Storable: respect 'nstore'
option not respected
    DEBPKG:debian/regen-skip - Skip a regeneration check in unrelated
git repositories
    DEBPKG:fixes/regcomp-mips-optim - [perl #122817]
http://bugs.debian.org/754054 Downgrade the optimization of regcomp.c
on mips and mipsel due to a gcc-4.9 bug
    DEBPKG:debian/makemaker-pasthru - http://bugs.debian.org/758471
Pass LD settings through to subdirectories
    DEBPKG:fixes/perldoc-less-R - [rt.cpan.org #98636]
http://bugs.debian.org/758689 Tell the 'less' pager to allow terminal
escape sequences
    DEBPKG:fixes/pod_man_reproducible_date -
http://bugs.debian.org/759405 Support POD_MAN_DATE in Pod::Man for the
left-hand footer
    DEBPKG:fixes/io_uncompress_gunzip_inmemory -
http://bugs.debian.org/747363 [rt.cpan.org #95494] Fix gunzip to
in-memory file handle
    DEBPKG:fixes/socket_test_recv_fix - http://bugs.debian.org/758718
[perl #122657] Compare recv return value to peername in socket test
    DEBPKG:fixes/hurd_socket_recv_todo - http://bugs.debian.org/758718
[perl #122657] TODO checking the result of recv() on hurd
    DEBPKG:fixes/regexp-performance - [0fa70a0]
http://bugs.debian.org/777556 [perl #123743] simpify and speed up
/.*.../ handling
    DEBPKG:fixes/CVE-2015-8607_file_spec_taint_fix - ensure
File::Spec::canonpath() preserves taint


@INC for perl 5.20.2:
    /etc/perl
    /usr/local/lib/x86_64-linux-gnu/perl/5.20.2
    /usr/local/share/perl/5.20.2
    /usr/lib/x86_64-linux-gnu/perl5/5.20
    /usr/share/perl5
    /usr/lib/x86_64-linux-gnu/perl/5.20
    /usr/share/perl/5.20
    /usr/local/lib/site_perl
    /usr/local/lib/x86_64-linux-gnu/perl/5.20.1
    /usr/local/share/perl/5.20.1
    .


Environment for perl 5.20.2:
    HOME=/home/mhorsfall
    LANG=en_US.UTF-8
    LANGUAGE=en_US
    LD_LIBRARY_PATH (unset)
    LOGDIR (unset)
    PATH=/home/mhorsfall/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
    PERL_BADLANG (unset)
    SHELL=/bin/bash

@p5pRT
Copy link
Author

p5pRT commented Apr 1, 2016

From @wolfsage

0001-Get-Accflags-DPERL_MEM_LOG-compiling-again-it-had-ro.patch
From 4f3d984bf29b90e4e942aeacfd8e847839a99303 Mon Sep 17 00:00:00 2001
From: Matthew Horsfall <wolfsage@gmail.com>
Date: Fri, 1 Apr 2016 12:44:49 -0400
Subject: [PATCH] Get -Accflags=-DPERL_MEM_LOG compiling again; it had rotted a
 bit.

...well, more than one probably.
---
 embed.fnc            |  6 ++++++
 embed.h              |  5 +++++
 handy.h              |  6 ------
 pod/perlhacktips.pod | 11 ++++++-----
 proto.h              | 11 +++++++++++
 util.c               |  6 ++++++
 6 files changed, 34 insertions(+), 11 deletions(-)

diff --git a/embed.fnc b/embed.fnc
index ec5921a..7f60ae1 100644
--- a/embed.fnc
+++ b/embed.fnc
@@ -2563,6 +2563,12 @@ sn	|void	|mem_log_common	|enum mem_log_type mlt|const UV n|const UV typesize \
 #endif
 #endif
 
+#if defined(PERL_MEM_LOG)
+pn	|Malloc_t	|mem_log_alloc	|const UV nconst|UV typesize|NN const char *type_name|Malloc_t newalloc|NN const char *filename|const int linenumber|NN const char *funcname
+pn	|Malloc_t	|mem_log_realloc	|const UV n|const UV typesize|NN const char *type_name|Malloc_t oldalloc|Malloc_t newalloc|NN const char *filename|const int linenumber|NN const char *funcname
+pn	|Malloc_t	|mem_log_free	|Malloc_t oldalloc|NN const char *filename|const int linenumber|NN const char *funcname
+#endif
+
 #if defined(PERL_IN_NUMERIC_C)
 #ifndef USE_QUADMATH
 sn	|NV|mulexp10	|NV value|I32 exponent
diff --git a/embed.h b/embed.h
index ab76937..c24eb31 100644
--- a/embed.h
+++ b/embed.h
@@ -1814,6 +1814,11 @@
 #define mem_log_common		S_mem_log_common
 #    endif
 #  endif
+#  if defined(PERL_MEM_LOG)
+#define mem_log_alloc		Perl_mem_log_alloc
+#define mem_log_free		Perl_mem_log_free
+#define mem_log_realloc		Perl_mem_log_realloc
+#  endif
 #  if defined(PERL_USES_PL_PIDSTATUS) && defined(PERL_IN_UTIL_C)
 #define pidgone(a,b)		S_pidgone(aTHX_ a,b)
 #  endif
diff --git a/handy.h b/handy.h
index a0a7cde..932a874 100644
--- a/handy.h
+++ b/handy.h
@@ -2049,12 +2049,6 @@ PoisonWith(0xEF) for catching access to freed memory.
  * - lots of ENV reads
  */
 
-PERL_CALLCONV Malloc_t Perl_mem_log_alloc(const UV n, const UV typesize, const char *type_name, Malloc_t newalloc, const char *filename, const int linenumber, const char *funcname);
-
-PERL_CALLCONV Malloc_t Perl_mem_log_realloc(const UV n, const UV typesize, const char *type_name, Malloc_t oldalloc, Malloc_t newalloc, const char *filename, const int linenumber, const char *funcname);
-
-PERL_CALLCONV Malloc_t Perl_mem_log_free(Malloc_t oldalloc, const char *filename, const int linenumber, const char *funcname);
-
 # ifdef PERL_CORE
 #  ifndef PERL_MEM_LOG_NOIMPL
 enum mem_log_type {
diff --git a/pod/perlhacktips.pod b/pod/perlhacktips.pod
index 42b63d9..1dd715a 100644
--- a/pod/perlhacktips.pod
+++ b/pod/perlhacktips.pod
@@ -1451,12 +1451,13 @@ C<-DPERL_MEM_LOG> instead.
 
 =head2 PERL_MEM_LOG
 
-If compiled with C<-DPERL_MEM_LOG>, both memory and SV allocations go
-through logging functions, which is handy for breakpoint setting.
+If compiled with C<-DPERL_MEM_LOG> (C<-Accflags=-DPERL_MEM_LOG>), both
+memory and SV allocations go through logging functions, which is
+handy for breakpoint setting.
 
-Unless C<-DPERL_MEM_LOG_NOIMPL> is also compiled, the logging functions
-read $ENV{PERL_MEM_LOG} to determine whether to log the event, and if
-so how:
+Unless C<-DPERL_MEM_LOG_NOIMPL> (C<-Accflags=-DPERL_MEM_LOG_NOIMPL>) is
+also compiled, the logging functions read $ENV{PERL_MEM_LOG} to
+determine whether to log the event, and if so how:
 
     $ENV{PERL_MEM_LOG} =~ /m/           Log all memory ops
     $ENV{PERL_MEM_LOG} =~ /s/           Log all SV ops
diff --git a/proto.h b/proto.h
index c43c4fc..4beb21b 100644
--- a/proto.h
+++ b/proto.h
@@ -5473,6 +5473,17 @@ STATIC void	S_mem_log_common(enum mem_log_type mlt, const UV n, const UV typesiz
 	assert(type_name); assert(filename); assert(funcname)
 #  endif
 #endif
+#if defined(PERL_MEM_LOG)
+PERL_CALLCONV Malloc_t	Perl_mem_log_alloc(const UV nconst, UV typesize, const char *type_name, Malloc_t newalloc, const char *filename, const int linenumber, const char *funcname);
+#define PERL_ARGS_ASSERT_MEM_LOG_ALLOC	\
+	assert(type_name); assert(filename); assert(funcname)
+PERL_CALLCONV Malloc_t	Perl_mem_log_free(Malloc_t oldalloc, const char *filename, const int linenumber, const char *funcname);
+#define PERL_ARGS_ASSERT_MEM_LOG_FREE	\
+	assert(filename); assert(funcname)
+PERL_CALLCONV Malloc_t	Perl_mem_log_realloc(const UV n, const UV typesize, const char *type_name, Malloc_t oldalloc, Malloc_t newalloc, const char *filename, const int linenumber, const char *funcname);
+#define PERL_ARGS_ASSERT_MEM_LOG_REALLOC	\
+	assert(type_name); assert(filename); assert(funcname)
+#endif
 #if defined(PERL_OP_PARENT)
 PERL_CALLCONV OP*	Perl_op_parent(OP *o);
 #define PERL_ARGS_ASSERT_OP_PARENT	\
diff --git a/util.c b/util.c
index 9ad40c1..89c44e7 100644
--- a/util.c
+++ b/util.c
@@ -5018,6 +5018,8 @@ Perl_mem_log_alloc(const UV n, const UV typesize, const char *type_name,
 		   const char *filename, const int linenumber,
 		   const char *funcname)
 {
+    PERL_ARGS_ASSERT_MEM_LOG_ALLOC;
+
     mem_log_common_if(MLT_ALLOC, n, typesize, type_name,
 		      NULL, NULL, newalloc,
 		      filename, linenumber, funcname);
@@ -5030,6 +5032,8 @@ Perl_mem_log_realloc(const UV n, const UV typesize, const char *type_name,
 		     const char *filename, const int linenumber, 
 		     const char *funcname)
 {
+    PERL_ARGS_ASSERT_MEM_LOG_REALLOC;
+
     mem_log_common_if(MLT_REALLOC, n, typesize, type_name,
 		      NULL, oldalloc, newalloc, 
 		      filename, linenumber, funcname);
@@ -5041,6 +5045,8 @@ Perl_mem_log_free(Malloc_t oldalloc,
 		  const char *filename, const int linenumber, 
 		  const char *funcname)
 {
+    PERL_ARGS_ASSERT_MEM_LOG_FREE;
+
     mem_log_common_if(MLT_FREE, 0, 0, "", NULL, oldalloc, NULL, 
 		      filename, linenumber, funcname);
     return oldalloc;
-- 
2.1.4

@p5pRT
Copy link
Author

p5pRT commented Apr 1, 2016

From @jkeenan

On Fri Apr 01 09​:58​:56 2016, alh wrote​:

This is a bug report for perl from wolfsage@​gmail.com,
generated with the help of perlbug 1.40 running under perl 5.20.2.

-----------------------------------------------------------------
[Please describe your issue here]

Compiling with -Accflags=-DPERL_MEM_LOG isn't currently functioning.

Attached is a patch to make that work again (and make test passes!)

Tried patch on Linux x86_64 on blead. 'make test' does PASS when configured with -Accflags=-DPERL_MEM_LOG and without.

(See also
http​://www.nntp.perl.org/group/perl.perl5.porters/2016/04/msg235541.html)

That link does not (yet) work for me. :-(

--
James E Keenan (jkeenan@​cpan.org)

@p5pRT
Copy link
Author

p5pRT commented Apr 1, 2016

The RT System itself - Status changed from 'new' to 'open'

@p5pRT
Copy link
Author

p5pRT commented Apr 1, 2016

From @tonycoz

On Fri, Apr 01, 2016 at 04​:13​:27PM -0700, James E Keenan via RT wrote​:

On Fri Apr 01 09​:58​:56 2016, alh wrote​:

Compiling with -Accflags=-DPERL_MEM_LOG isn't currently functioning.

Attached is a patch to make that work again (and make test passes!)

Tried patch on Linux x86_64 on blead. 'make test' does PASS when configured with -Accflags=-DPERL_MEM_LOG and without.

(See also
http​://www.nntp.perl.org/group/perl.perl5.porters/2016/04/msg235541.html)

That link does not (yet) work for me. :-(

The RT linkifier includes the closing ) in the link, try removing it.

Tony

@p5pRT
Copy link
Author

p5pRT commented Apr 5, 2016

From @iabyn

On Fri, Apr 01, 2016 at 09​:58​:57AM -0700, Matthew Horsfall wrote​:

Compiling with -Accflags=-DPERL_MEM_LOG isn't currently functioning.

Attached is a patch to make that work again (and make test passes!)

(See also http​://www.nntp.perl.org/group/perl.perl5.porters/2016/04/msg235541.html)

Thanks, applied as v5.23.9-48-g6fb8754.

Although we're in code freeze, your patch only affects code built under
PERL_MEM_LOG, which didn't build anyway, so it seems fairly safe.

I took the liberty of touching up the commit message a bit​: making the
subject line shorter, and describing what the problem was hand how it was
fixed.

--
That he said that that that that is is is debatable, is debatable.

@p5pRT
Copy link
Author

p5pRT commented Apr 5, 2016

@iabyn - Status changed from 'open' to 'pending release'

@p5pRT
Copy link
Author

p5pRT commented Apr 5, 2016

From @wolfsage

On Tue, Apr 5, 2016 at 7​:19 AM, Dave Mitchell <davem@​iabyn.com> wrote​:

Thanks, applied as v5.23.9-48-g6fb8754.

Although we're in code freeze, your patch only affects code built under
PERL_MEM_LOG, which didn't build anyway, so it seems fairly safe.

I took the liberty of touching up the commit message a bit​: making the
subject line shorter, and describing what the problem was hand how it was
fixed.

Awesome, thanks!

-- Matthew Horsfall (alh)

@p5pRT
Copy link
Author

p5pRT commented May 13, 2016

From @khwilliamson

Thank you for submitting this report. You have helped make Perl better.
 
With the release of Perl 5.24.0 on May 9, 2016, this and 149 other issues have been resolved.

Perl 5.24.0 may be downloaded via https://metacpan.org/release/RJBS/perl-5.24.0

@p5pRT
Copy link
Author

p5pRT commented May 13, 2016

@khwilliamson - Status changed from 'pending release' to 'resolved'

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

1 participant