project(xv6)
-#set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-pic -static -fno-builtin -fno-strict-aliasing -Wall -MD -gstabs+ -Werror -fno-omit-frame-pointer -fno-stack-protector")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-strict-aliasing -Wall -fno-builtin -gstabs -Werror -fno-omit-frame-pointer -fno-stack-protector")
+# Lab1 only
+set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-optimize-sibling-calls -fno-lto")
set(CMAKE_C_FLAGS_RELEASE "-O2 -DNDEBUG")
set(CMAKE_C_FLAGS_DEBUG "-O0 -gstabs")
return eflags;
}
-// This needs to be always inlined, otherwise the ebp is modified
-static __inline uint
-read_ebp(void)
-{
- uint ebp;
- // Force the prologue before ebp
- __asm __volatile("" : : :"memory");
- __asm __volatile("movl %%ebp,%0" : "=r" (ebp));
-
- return ebp;
-}
+// This is a define, so its always inlined
+#define read_ebp(dest) do { \
+ __asm __volatile("" : : : "memory"); \
+ __asm __volatile("movl %%ebp,%0" : "=r" (dest)); \
+ __asm __volatile("" : : : "memory"); \
+ } while (0)
static inline void
loadgs(ushort v)