ソースを参照

Code quality upkeep. Fixed a broken thread finding assembly instruction in gb.h

Zachary Pierson 8 年 前
コミット
3445a28c4a
2 ファイル変更18 行追加12 行削除
  1. 13 10
      src/build.c
  2. 5 2
      src/gb/gb.h

+ 13 - 10
src/build.c

@@ -317,8 +317,8 @@ void init_build_context(BuildContext *bc) {
 	// here, so I just #defined the linker flags to keep things concise.
 	#if defined(GB_SYSTEM_WINDOWS)
 
-	#define linker_flag_x64 "/machine:x64"
-	#define linker_flag_x86 "/machine:x86"
+	#define LINK_FLAG_X64 "/machine:x64"
+	#define LINK_FLAG_X86 "/machine:x86"
 
 	#elif defined(GB_SYSTEM_OSX)
 
@@ -326,30 +326,33 @@ void init_build_context(BuildContext *bc) {
 	// an architecture option. All compilation done on MacOS must be x64.
 	GB_ASSERT(str_eq(bc->ODIN_ARCH, str_lit("amd64")));
 
-	#define linker_flag_x64 ""
-	#define linker_flag_x86 ""
+	#define LINK_FLAG_X64 ""
+	#define LINK_FLAG_X86 ""
 	#else
 	// Linux, but also BSDs and the like.
 	// NOTE(zangent): When clang is swapped out with ld as the linker,
 	//   the commented flags here should be used. Until then, we'll have
 	//   to use alternative build flags made for clang.
 	/*
-		#define linker_flag_x64 "-m elf_x86_64"
-		#define linker_flag_x86 "-m elf_i386"
+		#define LINK_FLAG_X64 "-m elf_x86_64"
+		#define LINK_FLAG_X86 "-m elf_i386"
 	*/
-	#define linker_flag_x64 "-arch x86-64"
-	#define linker_flag_x86 "-arch x86"
+	#define LINK_FLAG_X64 "-arch x86-64"
+	#define LINK_FLAG_X86 "-arch x86"
 	#endif
 
 	if (str_eq(bc->ODIN_ARCH, str_lit("amd64"))) {
 		bc->word_size = 8;
 		bc->max_align = 16;
 		bc->llc_flags = str_lit("-march=x86-64 ");
-		bc->link_flags = str_lit(linker_flag_x64 " ");
+		bc->link_flags = str_lit(LINK_FLAG_X64 " ");
 	} else if (str_eq(bc->ODIN_ARCH, str_lit("x86"))) {
 		bc->word_size = 4;
 		bc->max_align = 8;
 		bc->llc_flags = str_lit("-march=x86 ");
-		bc->link_flags = str_lit(linker_flag_x86 " ");
+		bc->link_flags = str_lit(LINK_FLAG_X86 " ");
 	}
+
+	#undef LINK_FLAG_X64
+	#undef LINK_FLAG_X86
 }

+ 5 - 2
src/gb/gb.h

@@ -3630,7 +3630,10 @@ gb_inline void *gb_memcopy(void *dest, void const *source, isize n) {
 	__movsb(cast(u8 *)dest, cast(u8 *)source, n);
 #elif defined(GB_SYSTEM_OSX) || defined(GB_SYSTEM_UNIX)
 	// NOTE(zangent): I assume there's a reason this isn't being used elsewhere,
-	//  but I don't see it and I can't seem to get this working any other way.
+	//   but casting pointers as arguments to an __asm__ call is considered an
+	//   error on MacOS and (I think) Linux
+	// TODO(zangent): Figure out how to refactor the asm code so it works on MacOS,
+	//   since this is probably not the way the author intended this to work.
 	memcpy(dest, source, n);
 #elif defined(GB_CPU_X86)
 
@@ -4684,7 +4687,7 @@ gb_inline u32 gb_thread_current_id(void) {
 #elif defined(GB_ARCH_32_BIT) && defined(GB_CPU_X86)
 	__asm__("mov %%gs:0x08,%0" : "=r"(thread_id));
 #elif defined(GB_ARCH_64_BIT) && defined(GB_CPU_X86)
-	__asm__("mov %%gs:0x10,%0" : "=r"(thread_id));
+	__asm__("mov %%fs:0x10,%0" : "=r"(thread_id));
 #else
 	#error Unsupported architecture for gb_thread_current_id()
 #endif