Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 516454 | Differences between
and this patch

Collapse All | Expand All

(-)a/Makefile.target (+9 lines)
Lines 31-36 PROGS+=$(QEMU_PROGW) Link Here
31
endif
31
endif
32
STPFILES=
32
STPFILES=
33
33
34
ifdef CONFIG_LINUX_USER
35
PROGS+=$(QEMU_PROG)-binfmt-wrapper
36
endif
37
34
config-target.h: config-target.h-timestamp
38
config-target.h: config-target.h-timestamp
35
config-target.h-timestamp: config-target.mak
39
config-target.h-timestamp: config-target.mak
36
40
Lines 92-97 QEMU_CFLAGS+=-I$(SRC_PATH)/linux-user/$(TARGET_ABI_DIR) -I$(SRC_PATH)/linux-user Link Here
92
obj-y += linux-user/
96
obj-y += linux-user/
93
obj-y += gdbstub.o thunk.o user-exec.o
97
obj-y += gdbstub.o thunk.o user-exec.o
94
98
99
obj-binfmt-wrapper-y += linux-user/binfmt-wrapper.o
100
95
endif #CONFIG_LINUX_USER
101
endif #CONFIG_LINUX_USER
96
102
97
#########################################################
103
#########################################################
Lines 173-178 $(QEMU_PROG): $(all-obj-y) ../libqemuutil.a ../libqemustub.a Link Here
173
	$(call LINK,$^)
179
	$(call LINK,$^)
174
endif
180
endif
175
181
182
$(QEMU_PROG)-binfmt-wrapper: $(obj-binfmt-wrapper-y)
183
	$(call LINK,$^)
184
176
gdbstub-xml.c: $(TARGET_XML_FILES) $(SRC_PATH)/scripts/feature_to_c.sh
185
gdbstub-xml.c: $(TARGET_XML_FILES) $(SRC_PATH)/scripts/feature_to_c.sh
177
	$(call quiet-command,rm -f $@ && $(SHELL) $(SRC_PATH)/scripts/feature_to_c.sh $@ $(TARGET_XML_FILES),"  GEN   $(TARGET_DIR)$@")
186
	$(call quiet-command,rm -f $@ && $(SHELL) $(SRC_PATH)/scripts/feature_to_c.sh $@ $(TARGET_XML_FILES),"  GEN   $(TARGET_DIR)$@")
178
187
(-)a/linux-user/binfmt-wrapper.c (+38 lines)
Line 0 Link Here
1
#include <stdio.h>
2
#include <stdarg.h>
3
#include <unistd.h>
4
#include <libgen.h>
5
#include <string.h>
6
#include <stdlib.h>
7
8
int main ( int argc, char ** argv, char ** envp )
9
{
10
    char * binfmt;
11
    char ** new_argv;
12
13
    // Check if our file name ends with -binfmt-wrapper
14
    binfmt = argv[0] + strlen( argv[0] ) - strlen ( "-binfmt-wrapper" );
15
    if ( strcmp ( binfmt, "-binfmt-wrapper" ) ) {
16
        fprintf ( stderr, "%s: Invalid executable name\n", argv[0] );
17
        return 1;
18
    }
19
    if ( argc < 3 ) {
20
        fprintf ( stderr, "%s: Please use me through binfmt with P flag\n", argv[0] );
21
        return 2;
22
    }
23
24
    binfmt[0] = '\0';
25
    // Now argv[0] is the real qemu binary name
26
27
    new_argv = ( char ** ) malloc ( ( argc + 2 ) * sizeof ( * new_argv ) );
28
    if ( argc > 3 ) {
29
        memcpy ( &new_argv[4], &argv[3], ( argc - 3 ) * sizeof ( * new_argv ) );
30
    }
31
    new_argv[0]        = argv[0];
32
    new_argv[1]        = ( char * ) "-0";
33
    new_argv[2]        = argv[2];
34
    new_argv[3]        = argv[1];
35
    new_argv[argc + 1] = NULL;
36
37
    return execve ( new_argv[0], new_argv, envp );
38
}

Return to bug 516454