]> rtime.felk.cvut.cz Git - jailhouse-test.git/blob - bootstrap-relink/link_objects.sh
fiasco: bootstrap: some other tries to link it all together.
[jailhouse-test.git] / bootstrap-relink / link_objects.sh
1 #!/bin/bash
2 BUILD_DIR=$PWD/build
3 #LD_SCRIPT64=$PWD/bootstrap.ld
4 LD_SCRIPT32=$PWD/all-linked-try.ld
5 SNAP_DIR=$1
6
7 set -e;
8
9 echo "[bootstrap] remake..."
10 START_DIR=$PWD
11 cd $SNAP_DIR/obj/l4/amd64/pkg/bootstrap
12 make
13 cd $START_DIR
14
15 BOOTST_OBJ_DIR=$SNAP_DIR/obj/l4/amd64/pkg/bootstrap/server/src/OBJ-amd64_K8
16
17 # echo "[bootstrap] linking..."
18 # cd $BOOTST_OBJ_DIR
19 # LD_PRELOAD=libgendep.so \
20 # LD_LIBRARY_PATH=$SNAP_DIR/obj/l4/amd64/tool/gendep/64:$SNAP_DIR/obj/l4/amd64/tool/gendep/32 \
21 # GENDEP_TARGET=$BUILD_DIR/bootstrap.elf \
22 # GENDEP_BINARY=ld  \
23 # GENDEP_BINARY_ALT1=ld \
24 #       ld -m elf_x86_64 -o $BUILD_DIR/bootstrap.elf  \
25 #             --whole-archive  \
26 #               ARCH-amd64/crt0.o \
27 #               exec.o \
28 #               module.o \
29 #               base_critical.o \
30 #               region.o \
31 #               startup.o \
32 #               init_kip_f.o \
33 #               libc_support+.o \
34 #               patch.o \
35 #               koptions.o \
36 #               platform_common.o \
37 #               memory.o \
38 #               boot_modules.o \
39 #               platform/x86_pc.o \
40 #               ARCH-x86/reboot.o \
41 #       --no-whole-archive -nostdlib -static -Bstatic --eh-frame-hdr -m elf_x86_64 -z max-page-size=0x1000 -z common-page-size=0x1000 \
42 #             --defsym=__executable_start=0x2d0000 -m elf_x86_64 -z max-page-size=0x1000 -z common-page-size=0x1000  \
43 #             --defsym __L4_KIP_ADDR__=0x6ffff000 --defsym __L4_STACK_ADDR__=0x70000000 -L$SNAP_DIR/obj/l4/amd64/lib/amd64_K8 \
44 #             -L$SNAP_DIR/obj/l4/amd64/lib \
45 #             -T$LD_SCRIPT64\
46 #             --start-group   \
47 #               -ldrivers_uart  -lcxx_base -lcxx_io -luc_c_minimal $SNAP_DIR/obj/l4/amd64/lib/amd64_K8/libgcc.a   \
48 #               --end-group \
49 #               --warn-common \
50 #               --defsym=__executable_start=0x2d0000 \
51 #                       /usr/lib/gcc/x86_64-linux-gnu/4.9/crtend.o  \
52 #                       $SNAP_DIR/obj/l4/amd64/lib/amd64_K8/crtn.o
53 # cd $START_DIR
54 # echo "[bootstrap64] Preparing binary to include.."
55 # objcopy -S $BUILD_DIR/bootstrap.elf $BUILD_DIR/bootstrap64.bin
56 # objdump -D $BUILD_DIR/bootstrap.elf > disasms/bootstrap64.elf.s
57 # chmod -x $BUILD_DIR/bootstrap64.bin
58 # objcopy -B i386 -I binary -O elf32-i386 $BUILD_DIR/bootstrap64.bin $BUILD_DIR/bootstrap32.bin
59 cd ../
60 JAIL_DIR=$PWD/jailhouse/inmates
61 cd $START_DIR
62 echo "[inmate-header] Compiling..."
63   gcc-4.8 -Wp,-MD,$BUILD_DIR/.header-32.o.d  -nostdinc \
64   -isystem /usr/lib/gcc/x86_64-linux-gnu/4.8/include   \
65   -D__KERNEL__ -D__ASSEMBLY__ -m64 -DCONFIG_X86_X32_ABI \
66   -DCONFIG_AS_CFI=1 -DCONFIG_AS_CFI_SIGNAL_FRAME=1 \
67   -DCONFIG_AS_CFI_SECTIONS=1 -DCONFIG_AS_FXSAVEQ=1 \
68   -DCONFIG_AS_CRC32=1 -DCONFIG_AS_AVX=1 -DCONFIG_AS_AVX2=1 \
69   -Wa,-gdwarf-2 -mfentry -DCC_USING_FENTRY   \
70   -I$JAIL_DIR/lib/x86   \
71   -I$JAIL_DIR/../hypervisor/arch/x86/include   \
72   -I$JAIL_DIR../hypervisor/include -m32   \
73   -c -o $BUILD_DIR/header-32-inmate.o \
74   ./header-32-inmate.S
75
76 echo "[boot.S] Compiling the header of image.."
77 gcc -m32 -o $BUILD_DIR/boot.o32 -c  \
78     -DMODADDR=0x02000000  \
79     -DRAM_BASE=0 \
80     -DL4_MINIMAL_LIBC=1 \
81     -DCMDLINE="\"\"" \
82     -DPLATFORM_TYPE=\"pc\" \
83     -DPLATFORM_TYPE_pc \
84     -DPLATFORM_UART_NR=        \
85     -DSYSTEM_amd64_K8 \
86     -DARCH_amd64 \
87     -DCPUTYPE_K8 \
88     -DL4API_  \
89     -D_GNU_SOURCE \
90     -DL4_MINIMAL_LIBC \
91         -I$SNAP_DIR/src/l4/pkg/bootstrap/server/src \
92         -I$SNAP_DIR/src/l4/pkg/bootstrap/server/src/ARCH-amd64   \
93         -I$SNAP_DIR/obj/l4/amd64/include/amd64 \
94         -I$SNAP_DIR/obj/l4/amd64/include \
95         -isystem $SNAP_DIR/obj/l4/amd64/include/sys/amd64 \
96         -isystem $SNAP_DIR/obj/l4/amd64/include/sys  -nostdinc \
97         -I$SNAP_DIR/obj/l4/amd64/include/uclibc \
98         -I$SNAP_DIR/obj/l4/amd64/include/contrib/libstdc++-v3  \
99         -isystem /usr/lib/gcc/x86_64-linux-gnu/4.9/include \
100         -isystem /usr/lib/gcc/x86_64-linux-gnu/4.9/include-fixed \
101         -fno-omit-frame-pointer -mno-sse -g -Os -mno-red-zone -march=k8 -Wextra -Wall \
102         -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -fno-common -std=gnu99 \
103         -mno-red-zone -march=k8 -fno-stack-protector -mno-sse -m32 -fno-stack-protector \
104         ./boot.S
105
106 echo "[bootstrap32] Linking final image.."
107
108 gcc -m32 -o $BUILD_DIR/bootstrap32.elf -nostdlib -static \
109         -Wl,-T,$LD_SCRIPT32,--gc-sections \
110                 $BUILD_DIR/boot.o32 \
111                 $BOOTST_OBJ_DIR/boot_idt.o32 \
112                 $BOOTST_OBJ_DIR/boot_cpu.o32 \
113                 $BOOTST_OBJ_DIR/boot_kernel.o32 \
114                 $BOOTST_OBJ_DIR/load_elf.o32 \
115                 $BOOTST_OBJ_DIR/minilibc_support.o32 \
116                 $BOOTST_OBJ_DIR/bootstrap32.bin \
117     $BUILD_DIR/header-32-inmate.o\
118                 $LD_SCRIPT32 \
119                 $SNAP_DIR/obj/l4/amd64/pkg/bootstrap/server/src/ARCH-amd64/libc32/OBJ-amd64_K8/libc32.a \
120         -lgcc
121
122 chmod 755 $BUILD_DIR/bootstrap32.elf
123
124 #objdump -D $BUILD_DIR/bootstrap32.elf > disasms/bootstrap32.elf.s
125 objcopy -O binary $BUILD_DIR/bootstrap32.elf $BUILD_DIR/bootstrap32-jh.bin
126 cp $BUILD_DIR/bootstrap32-jh.bin ../buildroot-overlay/jailhouse/bootstrap32-jh.bin
127 echo done!