Using LineToPC on mac

80 views
Skip to first unread message

Yarden Laifenfeld

unread,
Mar 22, 2022, 6:32:14 AM3/22/22
to golang-nuts
Hey!
I'm trying to use the LineToPC function (in gosym) on a mach-o file but it always fails, even though the __gopclntab section of my mach-o file does seem populated. It works perfectly well on ELF files, and I also saw the tests for the function in the golang repo are specifically for ELFs. Is this on purpose? Do I have to parse the .debug_line section in order to get the pc for a given filename, lineno?

Ian Lance Taylor

unread,
Mar 22, 2022, 10:30:28 AM3/22/22
to Yarden Laifenfeld, golang-nuts
On Tue, Mar 22, 2022 at 3:32 AM Yarden Laifenfeld <ylaif...@gmail.com> wrote:
>
> I'm trying to use the LineToPC function (in gosym) on a mach-o file but it always fails, even though the __gopclntab section of my mach-o file does seem populated. It works perfectly well on ELF files, and I also saw the tests for the function in the golang repo are specifically for ELFs. Is this on purpose? Do I have to parse the .debug_line section in order to get the pc for a given filename, lineno?

How are you building the gosym.Table data structure? In case you
haven't seen it, there is example code that may help in the
cmd/internal/objfile package.

Ian

Yarden Laifenfeld

unread,
Mar 22, 2022, 10:46:35 AM3/22/22
to golang-nuts
https://goplay.space/#6BZX0IDRm76
This is my code, on elf files it works but macho it doesn't. I don't see any difference between what I did and the implementation in cmd/internal/objfile.

Ian Lance Taylor

unread,
Mar 22, 2022, 11:13:50 AM3/22/22
to Yarden Laifenfeld, golang-nuts
On Tue, Mar 22, 2022 at 7:46 AM Yarden Laifenfeld <ylaif...@gmail.com> wrote:
>
> https://goplay.space/#6BZX0IDRm76
> This is my code, on elf files it works but macho it doesn't. I don't see any difference between what I did and the implementation in cmd/internal/objfile.

Yes, that looks OK to me. I don't have a mac, though.

Can you print out the table.Files map?

Ian

> On Tuesday, March 22, 2022 at 4:30:28 PM UTC+2 Ian Lance Taylor wrote:
>>
>> On Tue, Mar 22, 2022 at 3:32 AM Yarden Laifenfeld <ylaif...@gmail.com> wrote:
>> >
>> > I'm trying to use the LineToPC function (in gosym) on a mach-o file but it always fails, even though the __gopclntab section of my mach-o file does seem populated. It works perfectly well on ELF files, and I also saw the tests for the function in the golang repo are specifically for ELFs. Is this on purpose? Do I have to parse the .debug_line section in order to get the pc for a given filename, lineno?
>>
>> How are you building the gosym.Table data structure? In case you
>> haven't seen it, there is example code that may help in the
>> cmd/internal/objfile package.
>>
>> 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...@googlegroups.com.
> To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/002dee87-d474-45b3-a0d8-3498062d4fe6n%40googlegroups.com.
Message has been deleted
Message has been deleted

Yarden Laifenfeld

unread,
Mar 22, 2022, 11:28:54 AM3/22/22
to golang-nuts
Here is the output (I only printed the file names because the objs are huge):
File: /Users/yarden/go/go1.18/src/os/env.go
File: /Users/yarden/go/go1.18/src/io/fs/walk.go
File: /Users/yarden/go/go1.18/src/runtime/write_err.go
File: /Users/yarden/go/go1.18/src/runtime/lfstack.go
File: /Users/yarden/go/go1.18/src/os/tempfile.go
File: /Users/yarden/go/go1.18/src/internal/poll/fd_unix.go
File: /Users/yarden/go/go1.18/src/runtime/runtime.go
File: /Users/yarden/go/go1.18/src/runtime/hash64.go
File: /Users/yarden/go/go1.18/src/runtime/mpagecache.go
File: /Users/yarden/go/go1.18/src/runtime/mpallocbits.go
File: /Users/yarden/go/go1.18/src/sync/once.go
File: /Users/yarden/go/go1.18/src/runtime/cpuprof.go
File: /Users/yarden/go/go1.18/src/runtime/preempt_nonwindows.go
File: /Users/yarden/go/go1.18/src/internal/bytealg/compare_amd64.s
File: /Users/yarden/go/go1.18/src/runtime/slice.go
File: /Users/yarden/go/go1.18/src/runtime/runtime2.go
File: /Users/yarden/go/go1.18/src/syscall/exec_unix.go
File: /Users/yarden/go/go1.18/src/runtime/debug.go
File: /Users/yarden/go/go1.18/src/internal/testlog/log.go
File: /Users/yarden/go/go1.18/src/runtime/signal_amd64.go
File: /Users/yarden/go/go1.18/src/os/proc.go
File: /Users/yarden/go/go1.18/src/runtime/sys_darwin_amd64.s
File: /Users/yarden/go/go1.18/src/time/time.go
File: /Users/yarden/go/go1.18/src/runtime/timestub.go
File: /Users/yarden/go/go1.18/src/runtime/memclr_amd64.s
File: /Users/yarden/go/go1.18/src/syscall/syscall.go
File: /Users/yarden/go/go1.18/src/runtime/lockrank_off.go
File: /Users/yarden/go/go1.18/src/runtime/map.go
File: /Users/yarden/go/go1.18/src/runtime/malloc.go
File: /Users/yarden/go/go1.18/src/os/error.go
File: /Users/yarden/go/go1.18/src/runtime/mbitmap.go
File: /Users/yarden/go/go1.18/src/internal/oserror/errors.go
File: /Users/yarden/go/go1.18/src/internal/cpu/cpu_x86.go
File: /Users/yarden/go/go1.18/src/runtime/panic.go
File: /Users/yarden/go/go1.18/src/fmt/print.go
File: /Users/yarden/go/go1.18/src/runtime/debuglog.go
File: /Users/yarden/go/go1.18/src/reflect/makefunc.go
File: /Users/yarden/go/go1.18/src/runtime/os_darwin.go
File: /Users/yarden/go/go1.18/src/os/types.go
File: /Users/yarden/go/go1.18/src/runtime/mcentral.go
File: /Users/yarden/go/go1.18/src/runtime/defs_darwin_amd64.go
File: /Users/yarden/go/go1.18/src/runtime/mgcpacer.go
File: /Users/yarden/go/go1.18/src/runtime/cgocall.go
File: /Users/yarden/go/go1.18/src/runtime/env_posix.go
File: /Users/yarden/go/go1.18/src/os/dir_darwin.go
File: /Users/yarden/go/go1.18/src/reflect/value.go
File: /Users/yarden/go/go1.18/src/runtime/map_fast32.go
File: /Users/yarden/go/go1.18/src/strconv/ftoa.go
File: /Users/yarden/go/go1.18/src/runtime/mprof.go
File: /Users/yarden/go/go1.18/src/math/unsafe.go
File: /Users/yarden/go/go1.18/src/runtime/duff_amd64.s
File: /Users/yarden/go/go1.18/src/runtime/cpuflags_amd64.go
File: /Users/yarden/go/go1.18/src/os/getwd.go
File: /Users/yarden/go/go1.18/src/runtime/netpoll_kqueue.go
File: /Users/yarden/go/go1.18/src/runtime/sys_x86.go
File: /Users/yarden/go/go1.18/src/runtime/mstats.go
File: /Users/yarden/go/go1.18/src/runtime/mwbbuf.go
File: /Users/yarden/go/go1.18/src/sync/map.go
File: /Users/yarden/go/go1.18/src/syscall/syscall_unix.go
File: /Users/yarden/go/go1.18/src/runtime/lockrank.go
File: /Users/yarden/go/go1.18/src/runtime/sema.go
File: /Users/yarden/go/go1.18/src/runtime/internal/sys/intrinsics_common.go
File: /Users/yarden/go/go1.18/src/runtime/mgc.go
File: /Users/yarden/go/go1.18/src/runtime/extern.go
File: /Users/yarden/go/go1.18/src/runtime/msize.go
File: /Users/yarden/go/go1.18/src/runtime/mfinal.go
File: /Users/yarden/go/go1.18/src/syscall/zsyscall_darwin_amd64.go
File: /Users/yarden/go/go1.18/src/sort/sort.go
File: /Users/yarden/go/go1.18/src/syscall/syscall_darwin.go
File: /Users/yarden/go/go1.18/src/runtime/print.go
File: /Users/yarden/go/go1.18/src/runtime/typekind.go
File: /Users/yarden/GolandProjects/playground/hello_world/main.go
File: /Users/yarden/go/go1.18/src/runtime/mspanset.go
File: /Users/yarden/go/go1.18/src/strconv/ftoaryu.go
File: /Users/yarden/go/go1.18/src/runtime/preempt.go
File: /Users/yarden/go/go1.18/src/runtime/memmove_amd64.s
File: /Users/yarden/go/go1.18/src/runtime/type.go
File: /Users/yarden/go/go1.18/src/runtime/stubs.go
File: /Users/yarden/go/go1.18/src/runtime/symtab.go
File: /Users/yarden/go/go1.18/src/runtime/mgcwork.go
File: /Users/yarden/go/go1.18/src/internal/cpu/cpu_x86.s
File: /Users/yarden/go/go1.18/src/runtime/mpagealloc_64bit.go
File: /Users/yarden/go/go1.18/src/runtime/mgcsweep.go
File: /Users/yarden/go/go1.18/src/runtime/time_nofake.go
File: /Users/yarden/go/go1.18/src/os/executable_darwin.go
File: /Users/yarden/go/go1.18/src/syscall/syscall_bsd.go
File: /Users/yarden/go/go1.18/src/runtime/tls_stub.go
File: /Users/yarden/go/go1.18/src/runtime/asm_amd64.s
File: /Users/yarden/go/go1.18/src/runtime/error.go
File: /Users/yarden/go/go1.18/src/unicode/tables.go
File: /Users/yarden/go/go1.18/src/internal/poll/errno_unix.go
File: /Users/yarden/go/go1.18/src/runtime/fastlog2.go
File: /Users/yarden/go/go1.18/src/os/types_unix.go
File: /Users/yarden/go/go1.18/src/unicode/utf8/utf8.go
File: /Users/yarden/go/go1.18/src/time/sys_unix.go
File: /Users/yarden/go/go1.18/src/reflect/asm_amd64.s
File: /Users/yarden/go/go1.18/src/strconv/quote.go
File: /Users/yarden/go/go1.18/src/strconv/decimal.go
File: /Users/yarden/go/go1.18/src/runtime/internal/atomic/types.go
File: /Users/yarden/go/go1.18/src/runtime/preempt_amd64.s
File: /Users/yarden/go/go1.18/src/reflect/type.go
File: /Users/yarden/go/go1.18/src/strconv/itoa.go
File: /Users/yarden/go/go1.18/src/runtime/mgcstack.go
File: /Users/yarden/go/go1.18/src/sync/mutex.go
File: /Users/yarden/go/go1.18/src/errors/errors.go
File: /Users/yarden/go/go1.18/src/syscall/zsyscall_darwin_amd64.s
File: /Users/yarden/go/go1.18/src/internal/bytealg/indexbyte_amd64.s
File: /Users/yarden/go/go1.18/src/runtime/alg.go
File: /Users/yarden/go/go1.18/src/runtime/relax_stub.go
File: /Users/yarden/go/go1.18/src/time/format.go
File: /Users/yarden/go/go1.18/src/reflect/abi.go
File: /Users/yarden/go/go1.18/src/runtime/sys_darwin.go
File: /Users/yarden/go/go1.18/src/runtime/rwmutex.go
File: /Users/yarden/go/go1.18/src/io/io.go
File: /Users/yarden/go/go1.18/src/reflect/float32reg_generic.go
File: /Users/yarden/go/go1.18/src/fmt/scan.go
File: /Users/yarden/go/go1.18/src/runtime/rt0_darwin_amd64.s
File: /Users/yarden/go/go1.18/src/os/stat_unix.go
File: <autogenerated>
File: /Users/yarden/go/go1.18/src/time/zoneinfo_read.go
File: /Users/yarden/go/go1.18/src/internal/reflectlite/type.go
File: /Users/yarden/go/go1.18/src/runtime/string.go
File: /Users/yarden/go/go1.18/src/runtime/debugcall.go
File: /Users/yarden/go/go1.18/src/os/stat_darwin.go
File: /Users/yarden/go/go1.18/src/internal/poll/fd_mutex.go
File: /Users/yarden/go/go1.18/src/internal/syscall/unix/nonblocking_libc.go
File: /Users/yarden/go/go1.18/src/time/zoneinfo_unix.go
File: /Users/yarden/go/go1.18/src/internal/fmtsort/sort.go
File: /Users/yarden/go/go1.18/src/runtime/map_fast64.go
File: /Users/yarden/go/go1.18/src/runtime/map_faststr.go
File: /Users/yarden/go/go1.18/src/syscall/env_unix.go
File: /Users/yarden/go/go1.18/src/path/match.go
File: /Users/yarden/go/go1.18/src/internal/poll/fd_poll_runtime.go
File: /Users/yarden/go/go1.18/src/sync/poolqueue.go
File: /Users/yarden/go/go1.18/src/math/bits/bits.go
File: /Users/yarden/go/go1.18/src/internal/itoa/itoa.go
File: /Users/yarden/go/go1.18/src/runtime/select.go
File: /Users/yarden/go/go1.18/src/io/fs/fs.go
File: /Users/yarden/go/go1.18/src/runtime/mheap.go
File: /Users/yarden/go/go1.18/src/sync/atomic/value.go
File: /Users/yarden/go/go1.18/src/runtime/mgcscavenge.go
File: /Users/yarden/go/go1.18/src/runtime/trace.go
File: /Users/yarden/go/go1.18/src/os/exec.go
File: /Users/yarden/go/go1.18/src/sync/runtime.go
File: /Users/yarden/go/go1.18/src/runtime/nbpipe_pipe.go
File: /Users/yarden/go/go1.18/src/internal/race/norace.go
File: /Users/yarden/go/go1.18/src/strconv/atof.go
File: /Users/yarden/go/go1.18/src/runtime/mcache.go
File: /Users/yarden/go/go1.18/src/runtime/stack.go
File: /Users/yarden/go/go1.18/src/runtime/signal_unix.go
File: /Users/yarden/go/go1.18/src/runtime/netpoll.go
File: /Users/yarden/go/go1.18/src/io/pipe.go
File: /Users/yarden/go/go1.18/src/runtime/mpagealloc.go
File: /Users/yarden/go/go1.18/src/sync/rwmutex.go
File: /Users/yarden/go/go1.18/src/runtime/iface.go
File: /Users/yarden/go/go1.18/src/runtime/mgcmark.go
File: /Users/yarden/go/go1.18/src/runtime/signal_darwin_amd64.go
File: /Users/yarden/go/go1.18/src/runtime/mbarrier.go
File: /Users/yarden/go/go1.18/src/runtime/atomic_pointer.go
File: /Users/yarden/go/go1.18/src/os/file.go
File: /Users/yarden/go/go1.18/src/internal/bytealg/index_amd64.go
File: /Users/yarden/go/go1.18/src/internal/poll/fd.go
File: /Users/yarden/go/go1.18/src/strconv/atoi.go
File: /Users/yarden/go/go1.18/src/runtime/utf8.go
File: /Users/yarden/go/go1.18/src/math/exp_amd64.go
File: /Users/yarden/go/go1.18/src/internal/cpu/cpu.go
File: /Users/yarden/go/go1.18/src/os/file_posix.go
File: /Users/yarden/go/go1.18/src/errors/wrap.go
File: /Users/yarden/go/go1.18/src/sync/pool.go
File: /Users/yarden/go/go1.18/src/os/dir.go
File: /Users/yarden/go/go1.18/src/os/path_unix.go
File: /Users/yarden/go/go1.18/src/runtime/mcheckmark.go
File: /Users/yarden/go/go1.18/src/runtime/vdso_in_none.go
File: /Users/yarden/go/go1.18/src/runtime/proc.go
File: /Users/yarden/go/go1.18/src/runtime/histogram.go
File: /Users/yarden/go/go1.18/src/runtime/chan.go
File: /Users/yarden/go/go1.18/src/runtime/profbuf.go
File: /Users/yarden/go/go1.18/src/time/zoneinfo.go
File: /Users/yarden/go/go1.18/src/runtime/float.go
File: /Users/yarden/go/go1.18/src/fmt/format.go
File: /Users/yarden/go/go1.18/src/runtime/time.go
File: /Users/yarden/go/go1.18/src/syscall/route_bsd.go
File: /Users/yarden/go/go1.18/src/unicode/casetables.go
File: /Users/yarden/go/go1.18/src/runtime/mem_darwin.go
File: /Users/yarden/go/go1.18/src/runtime/traceback.go
File: /Users/yarden/go/go1.18/src/runtime/lfstack_64bit.go
File: /Users/yarden/go/go1.18/src/internal/bytealg/equal_amd64.s
File: /Users/yarden/go/go1.18/src/runtime/cgocheck.go
File: /Users/yarden/go/go1.18/src/runtime/mfixalloc.go
File: /Users/yarden/go/go1.18/src/os/file_unix.go
File: /Users/yarden/go/go1.18/src/runtime/os_nonopenbsd.go
File: /Users/yarden/go/go1.18/src/runtime/runtime1.go
File: /Users/yarden/go/go1.18/src/runtime/sys_libc.go
File: /Users/yarden/go/go1.18/src/internal/abi/abi.go
File: /Users/yarden/go/go1.18/src/runtime/sigqueue.go
File: /Users/yarden/go/go1.18/src/runtime/mranges.go
File: /Users/yarden/go/go1.18/src/runtime/lock_sema.go


I uploaded a simple hello world macho file so you can run this on your machine: https://drive.google.com/file/d/1324cgimPk23OlSukYDlSJIooGo752VZb/view?usp=sharing
The code I ran is: https://goplay.space/#SS0iejXs4N2

Ian Lance Taylor

unread,
Mar 22, 2022, 11:39:35 AM3/22/22
to Yarden Laifenfeld, golang-nuts
On Tue, Mar 22, 2022 at 8:29 AM Yarden Laifenfeld <ylaif...@gmail.com> wrote:
>
> Here is the output (I only printed the file names because the objs are huge):

It does look like the main.go file is there.

I don't have any other thoughts, sorry.

Ian
Reply all
Reply to author
Forward
0 new messages