http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50644
Markus Trippelsdorf <markus at trippelsdorf dot de> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |markus at trippelsdorf dot | |de --- Comment #15 from Markus Trippelsdorf <markus at trippelsdorf dot de> 2011-10-29 12:58:43 UTC --- Further reduced: markus@x4 testcase % cat smpboot.i struct _ddebug { const char *modname; const char *function; const char *filename; const char *format; char enabled; } cpumask_t; extern void check_tsc_sync_source(int cpu); int native_cpu_up(unsigned int cpu) { int err; static struct _ddebug descriptor = { "", __func__, "", "", 866, 0}; if (__builtin_expect(!!(descriptor.enabled), 0)) __dynamic_pr_debug(&descriptor, "", err); check_tsc_sync_source(cpu); } markus@x4 testcase % cat smp.i struct smp_ops { void (*smp_prepare_boot_cpu)(void); void (*smp_prepare_cpus)(unsigned max_cpus); void (*smp_cpus_done)(unsigned max_cpus); void (*stop_other_cpus)(int wait); void (*smp_send_reschedule)(int cpu); int (*cpu_up)(unsigned cpu); int (*cpu_disable)(void); void (*cpu_die)(unsigned int cpu); void (*play_dead)(void); void (*send_call_func_ipi)(const struct cpumask *mask); void (*send_call_func_single_ipi)(int cpu); }; int native_cpu_up(unsigned int cpunum); void native_cpu_die(unsigned int cpu); struct kernel_symbol { unsigned long value; }; struct smp_ops smp_ops = { .cpu_up = native_cpu_up, .cpu_die = native_cpu_die, }; static const char __kstrtab_smp_ops[] = "" "smp_ops"; static const struct kernel_symbol __ksymtab_smp_ops __attribute__((__used__)) = { (unsigned long)&smp_ops }; markus@x4 testcase % cat tsc_sync.i typedef struct {} atomic_t; struct _ddebug { const char *modname; const char *function; const char *filename; const char *format; char enabled; }; extern __typeof__(int) cpu_number; static atomic_t start_count; void check_tsc_sync_source(int cpu) { if (unsynchronized_tsc()) return; else { do { static struct _ddebug descriptor = { "", __func__, "", 151, 0 }; if (__builtin_expect(!!(descriptor.enabled), 0)) __dynamic_pr_debug(&descriptor, "", (({ typeof(cpu_number) pfo_ret__; switch (sizeof(cpu_number)) { case 4: asm("mov" "l ""%%""gs"":" "%P" "1"",%0" : "=r" (pfo_ret__) : "m" (cpu_number)); } pfo_ret__; })), cpu); } while (0); } atomic_set(&start_count, 0); } markus@x4 testcase % gcc smpboot.i smp.i tsc_sync.i -w -Os -flto In file included from :0:0: smpboot.i: In function ‘native_cpu_up’: smpboot.i:10:5: internal compiler error: Segmentation fault Please submit a full bug report