public inbox for glibc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug build/17324] New: ld -r not generate cantunwind records in .ARM.exidx section
@ 2014-08-28  8:08 m.ilin at samsung dot com
  2014-08-28 17:05 ` [Bug build/17324] " joseph at codesourcery dot com
  0 siblings, 1 reply; 2+ messages in thread
From: m.ilin at samsung dot com @ 2014-08-28  8:08 UTC (permalink / raw)
  To: glibc-bugs

https://sourceware.org/bugzilla/show_bug.cgi?id=17324

            Bug ID: 17324
           Summary: ld -r not generate cantunwind records in .ARM.exidx
                    section
           Product: glibc
           Version: unspecified
            Status: NEW
          Severity: normal
          Priority: P2
         Component: build
          Assignee: unassigned at sourceware dot org
          Reporter: m.ilin at samsung dot com
                CC: carlos at redhat dot com

Created attachment 7764
  --> https://sourceware.org/bugzilla/attachment.cgi?id=7764&action=edit
demo

Hi all

The issue is ARM specific.

We've investigated a segfautl that happend when libgcc unwinder executes
unwinding bytecode. During backtrace the unwinder may looking for the entry
of a function that actually not presented in .ARM.exidx of libc.so. The
function has no even cantunwind stub. And this seems strange.

Unwinider search function (search_EIT_table) returns the nearest valid entry
according to specified address. Then the unwinder executes bytecode that
belongs
to wrong function and continues unwinding. The next steps bring more frames
that
are not already valid in the context. Depends on the stack layout this can lead
to a segfault.

We attach a small demo that demostrates how a binary file can lose cantunwind
table entries (the same happend with GLibc). The demo builds 2 shared objects:
the first one has all entries, the second loses one entry. libc.so is built the
same way as the second file. All binaries are packed into an archive with ar
utility then the archive is relocated (ld -r). Just after THIS stage the binary
file loses cantunwind entries. Finally the relocatable file is converted into a
shared object which certainly won't have these entries either.

The point is that binutils ld adds cantunwind records for binaries without
unwinding sections. But it doesnt when ld called with -r option so cantunwind
records are not created.

The issue is reporoduced with GLibc that was built with the toolchain where
-funwind-tables or -fasynchronous-unwind-tables options are DISABLED by
default.

So it means that compiled binaries won't have additional information for
the unwinder. But this is not fully true for GLibc, actually libc-2.18.so
has NON-EMPTY section .ARM.exidx with info to the unwider. In building
scripts some files have to be built with option -fasynchronous-unwind-tables
that forces generation of unwind tables (GLibc NPTL needs the option being
enabled for thread cancellation). So the unwind table has entry only for these
functions. During linking stage object files that were built without unwind
tables come to the final binary without cantunwind records is .ARM.exidx.


-- Mikhail

-- 
You are receiving this mail because:
You are on the CC list for the bug.


^ permalink raw reply	[flat|nested] 2+ messages in thread

* [Bug build/17324] ld -r not generate cantunwind records in .ARM.exidx section
  2014-08-28  8:08 [Bug build/17324] New: ld -r not generate cantunwind records in .ARM.exidx section m.ilin at samsung dot com
@ 2014-08-28 17:05 ` joseph at codesourcery dot com
  0 siblings, 0 replies; 2+ messages in thread
From: joseph at codesourcery dot com @ 2014-08-28 17:05 UTC (permalink / raw)
  To: glibc-bugs

https://sourceware.org/bugzilla/show_bug.cgi?id=17324

--- Comment #1 from joseph at codesourcery dot com <joseph at codesourcery dot com> ---
This sounds like it should be filed as a bug in the binutils product, not 
glibc.

-- 
You are receiving this mail because:
You are on the CC list for the bug.


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2014-08-28 17:05 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-08-28  8:08 [Bug build/17324] New: ld -r not generate cantunwind records in .ARM.exidx section m.ilin at samsung dot com
2014-08-28 17:05 ` [Bug build/17324] " joseph at codesourcery dot com

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).