Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 507990 | 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
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 96-101 QEMU_CFLAGS+=-I$(SRC_PATH)/linux-user/$(TARGET_ABI_DIR) -I$(SRC_PATH)/linux-user Link Here
96
obj-y += linux-user/
100
obj-y += linux-user/
97
obj-y += gdbstub.o thunk.o user-exec.o
101
obj-y += gdbstub.o thunk.o user-exec.o
98
102
103
obj-binfmt-y += linux-user/binfmt.o
104
99
endif #CONFIG_LINUX_USER
105
endif #CONFIG_LINUX_USER
100
106
101
#########################################################
107
#########################################################
Lines 166-171 $(QEMU_PROG): $(all-obj-y) ../libqemuutil.a ../libqemustub.a Link Here
166
	$(call LINK,$^)
172
	$(call LINK,$^)
167
endif
173
endif
168
174
175
$(QEMU_PROG)-binfmt: $(obj-binfmt-y)
176
	$(call LINK,$^)
177
169
gdbstub-xml.c: $(TARGET_XML_FILES) $(SRC_PATH)/scripts/feature_to_c.sh
178
gdbstub-xml.c: $(TARGET_XML_FILES) $(SRC_PATH)/scripts/feature_to_c.sh
170
	$(call quiet-command,rm -f $@ && $(SHELL) $(SRC_PATH)/scripts/feature_to_c.sh $@ $(TARGET_XML_FILES),"  GEN   $(TARGET_DIR)$@")
179
	$(call quiet-command,rm -f $@ && $(SHELL) $(SRC_PATH)/scripts/feature_to_c.sh $@ $(TARGET_XML_FILES),"  GEN   $(TARGET_DIR)$@")
171
180
(-)a/linux-user/binfmt.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
14
    binfmt = argv[0] + strlen( argv[0] ) - strlen ( "-binfmt" );
15
    if ( strcmp ( binfmt, "-binfmt" ) ) {
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 507990