Hello, There's a bunch of ugly and fragile constructs defining assembler symbols in c-sb1.c that depending on the configuration lead at least to an unresolved reference to local_sb1___flush_cache_all upon a final link. Here's a fix that changes them to an equivalent implementation using a documented gcc syntax. OK to apply? Maciej -- + Maciej W. Rozycki, Technical University of Gdansk, Poland + +--------------------------------------------------------------+ + e-mail: macro@ds2.pg.gda.pl, PGP key available + patch-mips-2.4.24-pre2-20040116-c-sb1-0 diff -up --recursive --new-file linux-mips-2.4.24-pre2-20040116.macro/arch/mips64/mm/c-sb1.c linux-mips-2.4.24-pre2-20040116/arch/mips64/mm/c-sb1.c --- linux-mips-2.4.24-pre2-20040116.macro/arch/mips64/mm/c-sb1.c 2004-01-15 03:57:03.000000000 +0000 +++ linux-mips-2.4.24-pre2-20040116/arch/mips64/mm/c-sb1.c 2004-04-01 21:10:41.000000000 +0000 @@ -2,6 +2,7 @@ * Copyright (C) 1996 David S. Miller (dm@engr.sgi.com) * Copyright (C) 1997, 2001 Ralf Baechle (ralf@gnu.org) * Copyright (C) 2000, 2001, 2002, 2003 Broadcom Corporation + * Copyright (C) 2004 Maciej W. Rozycki * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -231,8 +232,8 @@ static void sb1_flush_cache_page(struct local_sb1_flush_cache_page(vma, addr); } #else -void sb1_flush_cache_page(struct vm_area_struct *vma, unsigned long addr); -asm("sb1_flush_cache_page = local_sb1_flush_cache_page"); +void sb1_flush_cache_page(struct vm_area_struct *vma, unsigned long addr) + __attribute__((alias("local_sb1_flush_cache_page"))); #endif /* @@ -280,8 +281,8 @@ static void local_sb1___flush_cache_all( } #ifdef CONFIG_SMP -extern void sb1___flush_cache_all_ipi(void *ignored); -asm("sb1___flush_cache_all_ipi = local_sb1___flush_cache_all"); +void sb1___flush_cache_all_ipi(void *ignored) + __attribute__((alias("local_sb1___flush_cache_all"))); static void sb1___flush_cache_all(void) { @@ -289,8 +290,8 @@ static void sb1___flush_cache_all(void) local_sb1___flush_cache_all(); } #else -extern void sb1___flush_cache_all(void); -asm("sb1___flush_cache_all = local_sb1___flush_cache_all"); +void sb1___flush_cache_all(void) + __attribute__((alias("local_sb1___flush_cache_all"))); #endif /* @@ -340,8 +341,8 @@ void sb1_flush_icache_range(unsigned lon local_sb1_flush_icache_range(start, end); } #else -void sb1_flush_icache_range(unsigned long start, unsigned long end); -asm("sb1_flush_icache_range = local_sb1_flush_icache_range"); +void sb1_flush_icache_range(unsigned long start, unsigned long end) + __attribute__((alias("local_sb1_flush_icache_range"))); #endif /* @@ -398,8 +399,8 @@ static void sb1_flush_icache_page(struct local_sb1_flush_icache_page(vma, page); } #else -void sb1_flush_icache_page(struct vm_area_struct *vma, struct page *page); -asm("sb1_flush_icache_page = local_sb1_flush_icache_page"); +void sb1_flush_icache_page(struct vm_area_struct *vma, struct page *page) + __attribute__((alias("local_sb1_flush_icache_page"))); #endif /* @@ -447,8 +448,8 @@ static void sb1_flush_cache_sigtramp(uns smp_call_function(sb1_flush_cache_sigtramp_ipi, (void *) addr, 1, 1); } #else -void sb1_flush_cache_sigtramp(unsigned long addr); -asm("sb1_flush_cache_sigtramp = local_sb1_flush_cache_sigtramp"); +void sb1_flush_cache_sigtramp(unsigned long addr) + __attribute__((alias("local_sb1_flush_cache_sigtramp"))); #endif