Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 15 Jul 2004 15:35:23 -0700
From:      Arun Sharma <arun.sharma@intel.com>
To:        dietmar.hahn@fujitsu-siemens.com
Cc:        freebsd-ia64@freebsd.org
Subject:   Re: SMP on 5.2-20040531-SNAP-ia64
Message-ID:  <40F706AB.5070701@intel.com>
In-Reply-To: <40E5EAD5.6060405@intel.com>
References:  <200406181402.32212.dietmar.hahn@fujitsu-siemens.com> <40E5EAD5.6060405@intel.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On 7/2/2004 4:08 PM, Arun Sharma wrote:

> On 6/18/2004 5:02 AM, Dietmar Hahn wrote:
> 
>> result = ia64_sal_entry(SAL_SET_VECTORS,
>>                             SAL_OS_BOOT_RENDEZ,
>>                             ia64_tpa(FDESC_FUNC(os_boot_rendez)),
>>                             ia64_tpa(FDESC_GP(os_boot_rendez)),
>>                             0, 0, 0, 0);
> 
> 
[...]
> Sorry, I need to leave for a vacation now, but this looks like a 
> linker/relocation issue to me.
> 

Turned out to be a compiler bug.

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=16559

The attached work around works for me and takes it all the way to /sbin/init.

	-Arun

Index: sal.c
===================================================================
RCS file: /ncvs/src/sys/ia64/ia64/sal.c,v
retrieving revision 1.12
diff -u -r1.12 sal.c
--- sal.c       1 Feb 2003 22:50:09 -0000       1.12
+++ sal.c       15 Jul 2004 22:11:31 -0000
@@ -152,12 +152,16 @@
                        ipi_vector[IPI_AP_WAKEUP] = dp->sale_vector;
                        setup_ipi_vectors(dp->sale_vector & 0xf0);

-#ifdef SMP
-                       result = ia64_sal_entry(SAL_SET_VECTORS,
-                           SAL_OS_BOOT_RENDEZ,
-                           ia64_tpa(FDESC_FUNC(os_boot_rendez)),
-                           ia64_tpa(FDESC_GP(os_boot_rendez)),
-                           0, 0, 0, 0);
+#ifdef SMP
+                       {
+                               struct ia64_fdesc *f =
+                                       (struct ia64_fdesc *) os_boot_rendez;
+                               result = ia64_sal_entry(SAL_SET_VECTORS,
+                                       SAL_OS_BOOT_RENDEZ,
+                                       ia64_tpa(f->func),
+                                       ia64_tpa(f->gp),
+                                       0, 0, 0, 0);
+                       }
 #endif

                        break;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?40F706AB.5070701>