Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 309141
b: refs/heads/master
c: b3266bd
h: refs/heads/master
i:
  309139: 7c8e18a
v: v3
  • Loading branch information
Jarkko Sakkinen authored and H. Peter Anvin committed May 8, 2012
1 parent d9d74a4 commit ee9bcbf
Show file tree
Hide file tree
Showing 8 changed files with 190 additions and 2 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 433de739bbc22a5b2c87602116566ce27e3b4cab
refs/heads/master: b3266bd6ff52efb9e57c7fbfff4c8f7363dfaab3
2 changes: 1 addition & 1 deletion trunk/arch/x86/Kbuild
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@

obj-$(CONFIG_KVM) += kvm/

# Xen paravirtualization support
Expand All @@ -7,6 +6,7 @@ obj-$(CONFIG_XEN) += xen/
# lguest paravirtualization support
obj-$(CONFIG_LGUEST_GUEST) += lguest/

obj-y += realmode/
obj-y += kernel/
obj-y += mm/

Expand Down
20 changes: 20 additions & 0 deletions trunk/arch/x86/realmode/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#
# arch/x86/realmode/Makefile
#
# This file is subject to the terms and conditions of the GNU General Public
# License. See the file "COPYING" in the main directory of this archive
# for more details.
#
#

subdir- := rm

obj-y += rmpiggy.o

$(obj)/rmpiggy.o: $(obj)/rm/realmode.relocs $(obj)/rm/realmode.bin

$(obj)/rm/realmode.bin: FORCE
$(Q)$(MAKE) $(build)=$(obj)/rm $@

$(obj)/rm/realmode.relocs: FORCE
$(Q)$(MAKE) $(build)=$(obj)/rm $@
3 changes: 3 additions & 0 deletions trunk/arch/x86/realmode/rm/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
pasyms.h
realmode.lds
realmode.relocs
63 changes: 63 additions & 0 deletions trunk/arch/x86/realmode/rm/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
#
# arch/x86/realmode/Makefile
#
# This file is subject to the terms and conditions of the GNU General Public
# License. See the file "COPYING" in the main directory of this archive
# for more details.
#
#

subdir- := wakeup

always := realmode.bin

realmode-y += header.o

targets += $(realmode-y)

REALMODE_OBJS = $(addprefix $(obj)/,$(realmode-y))

sed-pasyms := -n -r -e 's/^([0-9a-fA-F]+) [ABCDGRSTVW] (.+)$$/pa_\2 = \2;/p'

quiet_cmd_pasyms = PASYMS $@
cmd_pasyms = $(NM) $(filter-out FORCE,$^) | \
sed $(sed-pasyms) | sort | uniq > $@

$(obj)/pasyms.h: $(REALMODE_OBJS) FORCE
$(call if_changed,pasyms)

$(obj)/realmode.lds: $(obj)/pasyms.h

LDFLAGS_realmode.elf := --emit-relocs -T
CPPFLAGS_realmode.lds += -P -C -I$(obj)

$(obj)/realmode.elf: $(obj)/realmode.lds $(REALMODE_OBJS) FORCE
$(call if_changed,ld)

OBJCOPYFLAGS_realmode.bin := -O binary

$(obj)/realmode.bin: $(obj)/realmode.elf
$(call if_changed,objcopy)

quiet_cmd_relocs = RELOCS $@
cmd_relocs = scripts/x86-relocs --realmode $< > $@
$(obj)/realmode.relocs: $(obj)/realmode.elf FORCE
$(call if_changed,relocs)

# ---------------------------------------------------------------------------

# How to compile the 16-bit code. Note we always compile for -march=i386,
# that way we can complain to the user if the CPU is insufficient.
KBUILD_CFLAGS := $(LINUXINCLUDE) -m32 -g -Os -D_SETUP -D__KERNEL__ \
-DDISABLE_BRANCH_PROFILING \
-Wall -Wstrict-prototypes \
-march=i386 -mregparm=3 \
-include $(srctree)/$(src)/../../boot/code16gcc.h \
-fno-strict-aliasing -fomit-frame-pointer \
$(call cc-option, -ffreestanding) \
$(call cc-option, -fno-toplevel-reorder,\
$(call cc-option, -fno-unit-at-a-time)) \
$(call cc-option, -fno-stack-protector) \
$(call cc-option, -mpreferred-stack-boundary=2)
KBUILD_AFLAGS := $(KBUILD_CFLAGS) -D__ASSEMBLY__
GCOV_PROFILE := n
16 changes: 16 additions & 0 deletions trunk/arch/x86/realmode/rm/header.S
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
/*
* Real-mode blob header; this should match realmode.h and be
* readonly; for mutable data instead add pointers into the .data
* or .bss sections as appropriate.
*/

#include <linux/linkage.h>
#include <asm/page_types.h>

.section ".header", "a"

ENTRY(real_mode_header)
.long pa_text_start
.long pa_ro_end
.long pa_end
END(real_mode_header)
68 changes: 68 additions & 0 deletions trunk/arch/x86/realmode/rm/realmode.lds.S
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
/*
* realmode.lds.S
*
* Linker script for the real-mode code
*/

#include <asm/page_types.h>

#undef i386

OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
OUTPUT_ARCH(i386)

SECTIONS
{
real_mode_seg = 0;

. = 0;
.header : {
pa_real_mode_base = .;
*(.header)
}

. = ALIGN(4);
.rodata : {
*(.rodata)
*(.rodata.*)
}

. = ALIGN(PAGE_SIZE);
.text : {
pa_text_start = .;
*(.text)
*(.text.*)
}

.text32 : {
*(.text32)
*(.text32.*)
pa_ro_end = .;
}

. = ALIGN(PAGE_SIZE);
.data : {
*(.data)
*(.data.*)
}

. = ALIGN(128);
.bss : {
*(.bss*)
}

/* End signature for integrity checking */
. = ALIGN(4);
.signature : {
*(.signature)
pa_end = .;
}

/DISCARD/ : {
*(.note*)
*(.debug*)
*(.eh_frame*)
}

#include "pasyms.h"
}
18 changes: 18 additions & 0 deletions trunk/arch/x86/realmode/rmpiggy.S
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
/*
* Wrapper script for the realmode binary as a transport object
* before copying to low memory.
*/
#include <linux/linkage.h>
#include <asm/page_types.h>

.section ".init.data","aw"

.balign PAGE_SIZE

ENTRY(real_mode_blob)
.incbin "arch/x86/realmode/rm/realmode.bin"
END(real_mode_blob)

ENTRY(real_mode_relocs)
.incbin "arch/x86/realmode/rm/realmode.relocs"
END(real_mode_relocs)

0 comments on commit ee9bcbf

Please sign in to comment.