mirror of
https://github.com/sheumann/hush.git
synced 2024-11-05 06:07:00 +00:00
There's some strange bug in glibc that triggers if you combine the
--gc-sections linker flag with static linking. If this happens, then the "stdout" variable (used by printf() and such) will only work if stdout is _not_ redirected. I.E "./busybox" prints stuff, but "./busybox | cat" does not produce any output. (But even when redirected, "write(1,"blah",4);" continues to work just fine.) This is clearly a glibc bug, but to avoid triggering it I've moved the --gc-sections flag so it only gets added when we're not statically linking. If somebody would like to go poke Ulrich Drepper, you can trivially reproduce this with a "hello world" program, ala: gcc -static -Wl,--gc-sections hello.c && (./a.out | cat)
This commit is contained in:
parent
31e2c00ec3
commit
1fdd83f897
@ -267,8 +267,6 @@ ifeq ($(strip $(CONFIG_DEBUG)),y)
|
|||||||
CFLAGS +=-g
|
CFLAGS +=-g
|
||||||
else
|
else
|
||||||
CFLAGS +=-DNDEBUG
|
CFLAGS +=-DNDEBUG
|
||||||
CHECKED_LDFLAGS += $(call check_ld,$(LD),--sort-common,)
|
|
||||||
CHECKED_LDFLAGS += $(call check_ld,$(LD),--gc-sections,)
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifneq ($(strip $(CONFIG_DEBUG_PESSIMIZE)),y)
|
ifneq ($(strip $(CONFIG_DEBUG_PESSIMIZE)),y)
|
||||||
@ -288,6 +286,11 @@ endif
|
|||||||
STRIPCMD:=$(call check_strip,$(STRIP),-s --remove-section=.note --remove-section=.comment,$(STRIP))
|
STRIPCMD:=$(call check_strip,$(STRIP),-s --remove-section=.note --remove-section=.comment,$(STRIP))
|
||||||
ifeq ($(strip $(CONFIG_STATIC)),y)
|
ifeq ($(strip $(CONFIG_STATIC)),y)
|
||||||
PROG_CFLAGS += $(call check_cc,$(CC),-static,)
|
PROG_CFLAGS += $(call check_cc,$(CC),-static,)
|
||||||
|
else
|
||||||
|
ifneq ($(strip $(CONFIG_DEBUG)),y)
|
||||||
|
CHECKED_LDFLAGS += $(call check_ld,$(LD),--sort-common,)
|
||||||
|
CHECKED_LDFLAGS += $(call check_ld,$(LD),--gc-sections,)
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
CFLAGS_SHARED := $(call check_cc,$(CC),-shared,)
|
CFLAGS_SHARED := $(call check_cc,$(CC),-shared,)
|
||||||
LIB_CFLAGS+=$(CFLAGS_SHARED)
|
LIB_CFLAGS+=$(CFLAGS_SHARED)
|
||||||
|
Loading…
Reference in New Issue
Block a user