Re: backtrace_symbols_fd() can trigger a call to malloc()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello Stefan

Long after the fact... sorry!

On 12/05/2014 06:04 PM, Stefan Puiu wrote:
Hi Walter,

On Fri, Dec 5, 2014 at 5:18 PM, walter harms <wharms@xxxxxx> wrote:

+So you need to call
+.BR backtrace ()
+or some other libgcc function early in your program to trigger loading
+of libgcc in order to make sure that later calls don't trigger the
+indirect memory allocation (for instance when called from a signal
+handler).

I would drop that part. there are several way to load libgcc (e.g.LD_PRELOAD).

what about "make sure that libgcc is already loaded at the begining" ?
something like that.



Yep, makes sense, thanks. New version below:

Thanks; patch applied, with Reviewed-by: tag added for Walter's input.

Cheers,

Michael


diff --git a/man3/backtrace.3 b/man3/backtrace.3
index 1b21794..0b2c6ba 100644
--- a/man3/backtrace.3
+++ b/man3/backtrace.3
@@ -114,7 +114,8 @@ it writes the strings, one per line, to the file descriptor
  .BR backtrace_symbols_fd ()
  does not call
  .BR malloc (3),
-and so can be employed in situations where the latter function might fail.
+and so can be employed in situations where the latter function might
+fail, but see NOTES.
  .SH RETURN VALUE
  .BR backtrace ()
  returns the number of addresses returned in
@@ -156,6 +157,18 @@ violated.
  Inlined functions do not have stack frames.
  .IP *
  Tail-call optimization causes one stack frame to replace another.
+.IP *
+.BR backtrace ()
+and
+.BR backtrace_symbols_fd ()
+don't call
+.BR malloc ()
+explicitly, but they are part of libgcc, which gets loaded dynamically
+when first used. Dynamic loading usually triggers a call to
+.BR malloc ().
+If you need certain calls to the 2 functions to not allocate memory
+(in signal handlers, for example), you need to make sure libgcc is
+loaded beforehand.
  .PP
  The symbol names may be unavailable without the use of special linker
  options.
--
To unsubscribe from this list: send the line "unsubscribe linux-man" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

--
To unsubscribe from this list: send the line "unsubscribe linux-man" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Kernel Documentation]     [Netdev]     [Linux Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux