Bean <[EMAIL PROTECTED]> writes:
> I figure it out, the problem is caused by nested function:
>
> int call_hook (grub_uint64_t ino, char *filename)
>
> it would take 3 registry to pass the parameter ! (2 for ino), so %ecx
> will be overwritten agian.
>
> NESTED_FUNC_ATTR doesn't help, because there is only 2 parameters
> here, so you need to use __attribute__ ((regparm (1))) explicitly.
>
> diff --git a/fs/xfs.c b/fs/xfs.c
> index b3154c7..0e5f323 100644
> --- a/fs/xfs.c
> +++ b/fs/xfs.c
> @@ -306,9 +306,9 @@ grub_xfs_iterate_dir (grub_fshelp_node_t dir,
> grub_fshelp_node_t node))
> {
> struct grub_fshelp_node *diro = (struct grub_fshelp_node *) dir;
> - auto int call_hook (grub_uint64_t ino, char *filename);
> + auto int __attribute__ ((regparm(1))) call_hook (grub_uint64_t ino,
> char *filename);
>
> - int call_hook (grub_uint64_t ino, char *filename)
> + int __attribute__ ((regparm(1))) call_hook (grub_uint64_t ino, char
> *filename)
> {
> struct grub_fshelp_node *fdiro;
Do you have a more generic solution to this? Something that can be
compared with NESTED_FUNC_ATTR? This is an i386 only bug...
Besides that, XFS is still not finished as BTrees are not yet
supported. So big files/directories cannot be accessed yet :-/
--
Marco
_______________________________________________
Grub-devel mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/grub-devel