Hi, Patrick Baggett: > Could you explain the context around this code? Perhaps the source is > not really "alignment safe" and could use some patching upstream? I'd > be happy to provide advice or code samples.
The context was misposted to bug report 731806 as message #87: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=731806#87 (but not with Cc to debian-sparc list). Upstream is myself. :)) The code in question is by my unreachable libburn predecessors, though. It belongs to the preparation of a thread start for one of five occasions in libburn. SIGBUS happens at http://libburnia-project.org/browser/libburn/trunk/libburn/async.c#L149 The caller has a local struct (i.e. on stack) like (#L592, #L692): struct write_opts write; ... add_worker(Burnworker_type_writE, d, (WorkerFunc) write_disc_worker_func, &o); The called function gets its address as parameter "data" (#L135): static void add_worker(int w_type, struct burn_drive *d, WorkerFunc f, void *data) has a struct on heap (#L102, #L138, #L146): struct w_list{ ... union w_list_data { ... struct write_opts write; ... } u; } ... struct w_list *a; ... a = calloc(1, sizeof(struct w_list)); The gesture which causes the SIGBUS is (#L149) a->u = *(union w_list_data *)data; which is not what i personally would use, but should be fully legal nevertheless. The SIGBUS vanishes if i compile without gcc -O2, or if i replace the "a->u =" gesture by memcpy(&(a->u), data, sizeof(union w_list_data)); which i deem equivalent (and more my personal style). Have a nice day :) Thomas -- To UNSUBSCRIBE, email to debian-boot-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: https://lists.debian.org/20365670802973806...@scdbackup.webframe.org