Mike Frysinger schrieb:
On 22 Jan 2018 09:23, Yunlian Jiang wrote:
On Fri, Jan 19, 2018 at 3:32 PM, Mike Frysinger wrote:
is it that busybox is crashing ?  is clang/lld placing this pointer in
const
memory (even though we have section(".data")) ?  or is it generating an
abort
when it reaches what it thinks is an undefined situation (like trying to
write
to a const memory location in INIT_G_var()) ?

The busybox is crashing. On arm boards, the command line
'busybox ash' gave me a segmentation fault.

In the ash_ptr_hack.c, it sets the attribute  __attribute__ (section
(".data")) when
'GCC_COMBINE' is defined.  But clang does not have this MACRO defined.
i don't think GCC_COMBINE is relevant, so just forget about it.  ash_ptr_hack.c
does:
   struct globals_misc *ash_ptr_to_globals_misc;
that means that pointer should end up the .data/writable memory by default.

the fact that another compilation unit declares it as const isn't terribly
relevant ... the actual storage should still be writable.  you should check
that is happening (or if it's ending up somewhere else).  we've seen llvm
incorrectly propagate attributes to storage before based on decls seen in
other modules.
GCC_COMBINE is relevant because it changes the definitions aof the pointers. without GCC_COMBINE, they are defined as normal variables, and every compiler should be able to compile them. With GCC_COMBINE they are defined as const but with section ".data", and a compiler that doesn't understand that will fail. in busybox GCC_COMBINE is only set in scripts/Makefile.IMA, together with -combine and -fwhole-program. The first line of this script says "This is completely unsupported." A compiler that doesn't support -combine and -fwhole-program doesn't need to define GCC_COMBINE and won't have a problem with the code. If the compiler supports the concept of -fwhole-program, the trick to use a different definition and declaration in different files no longer works. But maybe then the compiler is smart enough to realize that there are no other assignments to the pointers so it can omit the reload. If not, something like the ".data" section is necessary, and if the compiler has -fwhole-program but no ".data", then this can't be used.


_______________________________________________
busybox mailing list
busybox@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to