On Fri, Jan 6, 2023, 5:57 PM mariappan balraj <mariappan.bal...@gmail.com>
wrote:

> Hi Ian,
> Thanks for your active help. When I run the program by using gdb, I am
> getting the complete stack. No issue. The issue is there when we debug core
> dump. Could you kindly please check whether you are seeing the same
> behavior with core dump?
>


Oh, right, sorry, I forgot about the core dump part.  I don't know if there
is a way to make that better, given the three different stacks involved.
I'm surprised that it works as well as it does.  A pure C program that
doesn't use sigaltstack only has a single stack, so it's a much simpler
case.

Ian



On Sat, 7 Jan, 2023, 7:03 am Ian Lance Taylor, <i...@golang.org> wrote:
>
>> On Fri, Jan 6, 2023 at 5:28 PM mariappan balraj
>> <mariappan.bal...@gmail.com> wrote:
>> >
>> > I am not expecting GO stack. I am interested only in getting C stack.
>> If I want go stack, I can use delve debugger to get it. From GO, using CGO,
>> test3() is called which is calling test2() which is calling test1(). I am
>> expecting only C stack which contains test3(),  test2(), test1(). In this
>> particular case assigning value by using pointer variable which contains
>> NULL(segmentation fault). I am seeing only test1(). After that it is not
>> stack and saying stack corruption. I strongly believe that you can help on
>> this. Please help.
>>
>> I put your program in foo.go.  Then I did:
>>
>> > CGO_CFLAGS=-g go build foo.go
>> > gdb ./foo
>> GNU gdb (Debian 12.1-3) 12.1
>> Copyright (C) 2022 Free Software Foundation, Inc.
>> License GPLv3+: GNU GPL version 3 or later <
>> http://gnu.org/licenses/gpl.html>
>> This is free software: you are free to change and redistribute it.
>> There is NO WARRANTY, to the extent permitted by law.
>> Type "show copying" and "show warranty" for details.
>> This GDB was configured as "x86_64-linux-gnu".
>> Type "show configuration" for configuration details.
>> For bug reporting instructions, please see:
>> <https://www.gnu.org/software/gdb/bugs/>.
>> Find the GDB manual and other documentation resources online at:
>>     <http://www.gnu.org/software/gdb/documentation/>.
>>
>> For help, type "help".
>> Type "apropos word" to search for commands related to "word"...
>> Reading symbols from ./foo...
>> warning: File "/home/iant/go/src/runtime/runtime-gdb.py" auto-loading
>> has been declined by your `auto-load safe-path' set to
>> "$debugdir:$datadir/auto-load".
>> To enable execution of this file add
>> add-auto-load-safe-path /home/iant/go/src/runtime/runtime-gdb.py
>> line to your configuration file "/home/iant/.config/gdb/gdbinit".
>> To completely disable this security protection add
>> set auto-load safe-path /
>> line to your configuration file "/home/iant/.config/gdb/gdbinit".
>> For more information about this security protection see the
>> --Type <RET> for more, q to quit, c to continue without paging--
>> "Auto-loading safe path" section in the GDB manual.  E.g., run from the
>> shell:
>> info "(gdb)Auto-loading safe path"
>> (gdb) r
>> Starting program: /tmp/x/foo
>> [Thread debugging using libthread_db enabled]
>> Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
>> [New Thread 0x7fffd09ea640 (LWP 650585)]
>> [New Thread 0x7fffcbfff640 (LWP 650586)]
>> [New Thread 0x7fffcb7fe640 (LWP 650587)]
>> [New Thread 0x7fffcaffd640 (LWP 650588)]
>> [New Thread 0x7fffca7fc640 (LWP 650589)]
>>
>> Thread 1 "foo" received signal SIGSEGV, Segmentation fault.
>> 0x000000000045b01a in test1 () at /home/iant/foo.go:6
>> 6    *p = 30;
>> (gdb) where
>> #0  0x000000000045b01a in test1 () at /home/iant/foo.go:6
>> #1  0x000000000045b02c in test2 () at /home/iant/foo.go:10
>> #2  0x000000000045b038 in test3 () at /home/iant/foo.go:14
>> #3  0x000000000045b054 in _cgo_3060c004c901_Cfunc_test3 (v=0xc000064f70)
>>     at /tmp/go-build/cgo-gcc-prolog:49
>> #4  0x0000000000456c64 in runtime.asmcgocall ()
>>     at /home/iant/go/src/runtime/asm_amd64.s:848
>> #5  0x00000000004e3460 in ?? ()
>> #6  0x0000000000000001 in ?? ()
>> #7  0x000000c000080500 in ?? ()
>> #8  0x00007fffffffe458 in ?? ()
>> #9  0x0000000000439225 in runtime.malg.func1 ()
>>     at /home/iant/go/src/runtime/proc.go:4227
>> #10 0x0000000000456aa9 in runtime.systemstack ()
>>     at /home/iant/go/src/runtime/asm_amd64.s:496
>> #11 0x00000000004596a5 in runtime.newproc (fn=0x1) at <autogenerated>:1
>> #12 0x00000000004cc720 in runtime[scavenger] ()
>> #13 0x0000000000000001 in ?? ()
>> #14 0x00000000004569a5 in runtime.mstart ()
>>     at /home/iant/go/src/runtime/asm_amd64.s:394
>> #15 0x000000000045692f in runtime.rt0_go ()
>>     at /home/iant/go/src/runtime/asm_amd64.s:358
>> #16 0x0000000000000001 in ?? ()
>> --Type <RET> for more, q to quit, c to continue without paging--q
>> Quit
>>
>>
>>
>> So when I try it, I do see the full C stack at the point where the
>> signal occurs.
>>
>> In your backtrace earlier you are trying to see the stack after the
>> signal is already being handled by the Go signal handler.  I don't
>> know why that would work.
>>
>> Ian
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/CAOyqgcUetEYyacJvcDVkNd9L%2BbJ%2BaRSaO5HqcOAaDyLGdqS65A%40mail.gmail.com.

Reply via email to