Hi list, While debugging why we get broken unwind tables on ARM builds my endless odyssey brought me to gas eventually. It turns out that while generating the unwind tables, it uses uninitialized memory, so some times it would generate invalid entries:
==2009== Syscall param write(buf) points to uninitialised byte(s) ==2009== at 0x48EE56C: write (in /lib/libc-2.14.1.so) ==2009== by 0x48B51BB: _IO_file_write@@GLIBC_2.4 (fileops.c:1281) ==2009== by 0x48B510F: new_do_write (fileops.c:535) ==2009== by 0x48B5E1D: _IO_do_write@@GLIBC_2.4 (fileops.c:508) ==2009== by 0x48B6907: _IO_switch_to_get_mode (genops.c:189) ==2009== by 0x48B52D3: _IO_file_seekoff@@GLIBC_2.4 (fileops.c:991) ==2009== by 0x48AF0AB: _IO_seekoff_unlocked (ioseekoff.c:71) ==2009== by 0x48B4031: fseeko64 (fseeko64.c:42) ==2009== by 0x73A79: bfd_seek (bfdio.c:315) ==2009== by 0x5CB6F: _bfd_elf_write_object_contents (elf.c:5217) ==2009== by 0x4099F: bfd_close (opncls.c:701) ==2009== by 0x16E51: output_file_close (output-file.c:65) ==2009== Address 0x4d500d7 is not stack'd, malloc'd or (recently) free'd ==2009== Uninitialised value was created by a heap allocation ==2009== at 0x482F694: malloc (vg_replace_malloc.c:263) ==2009== by 0x7F353: xmalloc (xmalloc.c:147) ==2009== by 0x48BE1D7: _obstack_begin (obstack.c:186) ==2009== by 0x1C3E9: subseg_set_rest (subsegs.c:110) ==2009== by 0x1C50D: subseg_force_new (subsegs.c:195) ==2009== by 0x3B257: obj_elf_change_section (obj-elf.c:583) ==2009== by 0x25A47: start_unwind_section (tc-arm.c:19828) ==2009== by 0x3240D: create_unwind_entry (tc-arm.c:19857) ==2009== by 0x1B59D: read_a_source_file (read.c:919) ==2009== by 0xAEC1: main (as.c:1089) It would be awesome if someone who's more into the binutils code could take a look at this and fix it properly. For now I'll just always make xmalloc memset(0) everything :). Alex _______________________________________________ bug-binutils mailing list bug-binutils@gnu.org https://lists.gnu.org/mailman/listinfo/bug-binutils