x86: objdump 64 bit kernel properly
authorBarret Rhoden <brho@cs.berkeley.edu>
Thu, 13 Jun 2013 05:31:29 +0000 (22:31 -0700)
committerBarret Rhoden <brho@cs.berkeley.edu>
Thu, 13 Jun 2013 05:31:29 +0000 (22:31 -0700)
The kernel image's format is a 32 bit elf to trick grub into loading it.
This also tricks objdump into interpreting the asm as if it was 32 bit.
The -M tells objdump what the real format is.

Incidentally, now that I can see the asm, I can see the compiler does
generate xmm code in some places, and we do in fact need the extra
cflags.

Makefile
kern/arch/x86/Makefile

index 72d4975..b4f07b8 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -448,7 +448,7 @@ quiet_cmd_link-akaros = LINK    $@
                               $(gcc-lib) \
                               $(kern_cpio_obj) \
                               $(ext2_bdev_obj) ; \
                               $(gcc-lib) \
                               $(kern_cpio_obj) \
                               $(ext2_bdev_obj) ; \
-                              $(OBJDUMP) -S $@ > $@.asm
+                              $(OBJDUMP) $(OBJDUMP_FLAGS) -S $@ > $@.asm
 
 # For some reason, the if_changed doesn't work with FORCE (like it does in
 # Linux).  It looks like it can't find the .cmd file or something (also
 
 # For some reason, the if_changed doesn't work with FORCE (like it does in
 # Linux).  It looks like it can't find the .cmd file or something (also
index 86068b9..b37bce6 100644 (file)
@@ -5,7 +5,9 @@ BITS := 64
 KERNEL_LD := kernel64.ld
 CFLAGS_KERNEL += -mcmodel=kernel
 CFLAGS_KERNEL += -mno-red-zone -ffreestanding
 KERNEL_LD := kernel64.ld
 CFLAGS_KERNEL += -mcmodel=kernel
 CFLAGS_KERNEL += -mno-red-zone -ffreestanding
+CFLAGS_KERNEL += -mno-mmx -mno-sse -mno-sse2 -mno-sse3 -mno-3dnow
 LDFLAGS_KERNEL += -z max-page-size=0x1000
 LDFLAGS_KERNEL += -z max-page-size=0x1000
+OBJDUMP_FLAGS += -M x86-64
 else
 CROSS_COMPILE := i686-ros-
 BITS := 32
 else
 CROSS_COMPILE := i686-ros-
 BITS := 32