[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
compiling with 2.95
From: |
Vincent Guffens |
Subject: |
compiling with 2.95 |
Date: |
Wed, 02 Mar 2005 16:03:42 +0100 |
User-agent: |
Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.3) Gecko/20040913 |
Hi,
I have downloaded grub 2 from cvs and tried to compile it on my system
which is a debian woody with gcc version 2.95.4
It is written in the INSTALL file that the required version is * GCC
2.95 or later.
It didn't work for 3 reasons:
1) unnamed union
2) declaration not at the beginning of a block
3) undefined symbol (memset)
Although I don't know if you are interrested in that or not, I'm sending
some modifications about these three items that allows grub 2 to be
compiled with 2.95.4 (at least on my system).
I'm not used to send patches so I might be doing something wrong, please
tell me if it is the case.
diff -ru grub2/fs/ext2.c grub2-mod/fs/ext2.c
--- grub2/fs/ext2.c Mon Dec 13 18:26:17 2004
+++ grub2-mod/fs/ext2.c Wed Mar 2 14:17:36 2005
@@ -136,7 +136,9 @@
grub_uint32_t tripple_indir_block;
} blocks;
char symlink[60];
- };
+ } osd1_union;
+#define ext2_blocks osd1_union.blocks
+#define ext2_symlink osd1_union.symlink
grub_uint32_t version;
grub_uint32_t acl;
grub_uint32_t dir_acl;
@@ -199,14 +201,14 @@
/* Direct blocks. */
if (fileblock < INDIRECT_BLOCKS)
- blknr = grub_le_to_cpu32 (inode->blocks.dir_blocks[fileblock]);
+ blknr = grub_le_to_cpu32 (inode->ext2_blocks.dir_blocks[fileblock]);
/* Indirect. */
else if (fileblock < INDIRECT_BLOCKS + blksz / 4)
{
grub_uint32_t indir[blksz / 4];
if (grub_disk_read (data->disk,
- grub_le_to_cpu32 (inode->blocks.indir_block)
+ grub_le_to_cpu32 (inode->ext2_blocks.indir_block)
<< log2_blksz,
0, blksz, (char *) indir))
return grub_errno;
@@ -222,7 +224,7 @@
grub_uint32_t indir[blksz / 4];
if (grub_disk_read (data->disk,
- grub_le_to_cpu32 (inode->blocks.double_indir_block)
+ grub_le_to_cpu32
(inode->ext2_blocks.double_indir_block)
<< log2_blksz,
0, blksz, (char *) indir))
return grub_errno;
@@ -361,7 +363,7 @@
otherwise it is stored in the inode. */
if (grub_le_to_cpu32 (diro->inode.size) <= 60)
grub_strncpy (symlink,
- diro->inode.symlink,
+ diro->inode.ext2_symlink,
grub_le_to_cpu32 (diro->inode.size));
else
{
@@ -548,7 +550,7 @@
grub_ext2_dir (grub_device_t device, const char *path,
int (*hook) (const char *filename, int dir))
{
- struct grub_ext2_data *data = 0;;
+ struct grub_ext2_data *data = 0;
struct grub_fshelp_node *fdiro = 0;
auto int NESTED_FUNC_ATTR iterate (const char *filename,
diff -ru grub2/fs/hfs.c grub2-mod/fs/hfs.c
--- grub2/fs/hfs.c Mon Nov 1 17:14:16 2004
+++ grub2-mod/fs/hfs.c Tue Mar 1 16:46:02 2005
@@ -480,6 +480,7 @@
/* Iterate over all records in this node. */
for (i = 0; i < grub_be_to_cpu16 (node.node.reccnt); i++)
{
+ struct grub_hfs_record rec;
int pos = (nodesize >> 1) - 1 - i;
struct pointer
{
@@ -489,14 +490,10 @@
pnt = (struct pointer *) (grub_be_to_cpu16 (node.offsets[pos])
+ node.rawnode);
- struct grub_hfs_record rec =
- {
- &pnt->key,
- pnt->keylen,
- &pnt->key + pnt->keylen +(pnt->keylen + 1) % 2,
- nodesize - grub_be_to_cpu16 (node.offsets[pos])
- - pnt->keylen - 1
- };
+ rec.key = &pnt->key;
+ rec.keylen = pnt->keylen;
+ rec.data = &pnt->key + pnt->keylen +(pnt->keylen + 1) % 2;
+ rec.datalen = nodesize - grub_be_to_cpu16 (node.offsets[pos]) -
pnt->keylen - 1;
if (node_hook (&node.node, &rec))
return 0;
@@ -590,8 +587,8 @@
struct grub_hfs_catalog_key key = {0, grub_cpu_to_be32 (dir), 0, ""};
auto int node_found (struct grub_hfs_node *, struct grub_hfs_record *);
- auto int it_dir (struct grub_hfs_node * __attribute ((unused)),
- struct grub_hfs_record *);
+ //auto int it_dir (struct grub_hfs_node * __attribute ((unused)),
+ auto int it_dir (struct grub_hfs_node * ,struct grub_hfs_record *);
int node_found (struct grub_hfs_node *hnd, struct grub_hfs_record *rec)
@@ -658,6 +655,7 @@
char *origpath;
struct grub_hfs_filerec frec;
struct grub_hfs_dirrec *dir = (struct grub_hfs_dirrec *) &frec;
+ struct grub_hfs_catalog_key key;
frec.type = GRUB_HFS_FILETYPE_DIR;
if (path[0] != '/')
@@ -689,7 +687,6 @@
next++;
}
- struct grub_hfs_catalog_key key;
key.parent_dir = grub_cpu_to_be32 (inode);
key.strlen = grub_strlen (path);
diff -ru grub2/fs/iso9660.c grub2-mod/fs/iso9660.c
--- grub2/fs/iso9660.c Mon Nov 1 17:14:16 2004
+++ grub2-mod/fs/iso9660.c Tue Mar 1 16:48:19 2005
@@ -509,7 +509,7 @@
int nameoffset = offset + sizeof (dirent);
struct grub_fshelp_node *node;
int sua_off = (sizeof (dirent) + dirent.namelen + 1
- - (dirent.namelen % 2));;
+ - (dirent.namelen % 2));
int sua_size = dirent.len - sua_off;
sua_off += offset + dir->data->susp_skip;
diff -ru grub2/fs/jfs.c grub2-mod/fs/jfs.c
--- grub2/fs/jfs.c Mon Nov 1 17:14:16 2004
+++ grub2-mod/fs/jfs.c Wed Mar 2 14:26:50 2005
@@ -194,7 +194,10 @@
grub_uint8_t unused[32];
grub_uint8_t path[128];
} symlink;
- } __attribute__ ((packed));
+ } jfs_union __attribute__ ((packed));
+#define jfs_file jfs_union.file
+#define jfs_dir jfs_union.dir
+#define jfs_symlink jfs_union.symlink
} __attribute__ ((packed));
struct grub_jfs_data
@@ -289,7 +292,7 @@
return -1;
}
- return getblk (&inode->file.tree, &inode->file.extents[0]);
+ return getblk (&inode->jfs_file.tree, &inode->jfs_file.extents[0]);
}
@@ -376,7 +379,7 @@
struct grub_jfs_diropen *diro;
int blk;
- de = (struct grub_jfs_internal_dirent *) inode->dir.dirents;
+ de = (struct grub_jfs_internal_dirent *) inode->jfs_dir.dirents;
if (!((grub_le_to_cpu32 (inode->mode)
& GRUB_JFS_FILETYPE_MASK) == GRUB_JFS_FILETYPE_DIR))
@@ -394,12 +397,12 @@
diro->inode = inode;
/* Check if the entire tree is contained within the inode. */
- if (inode->file.tree.flags & GRUB_JFS_TREE_LEAF)
+ if (inode->jfs_file.tree.flags & GRUB_JFS_TREE_LEAF)
{
- diro->leaf = inode->dir.dirents;
+ diro->leaf = inode->jfs_dir.dirents;
diro->next_leaf = (struct grub_jfs_leaf_next_dirent *) de;
- diro->sorted = inode->dir.header.sorted;
- diro->count = inode->dir.header.count;
+ diro->sorted = inode->jfs_dir.header.sorted;
+ diro->count = inode->jfs_dir.header.count;
diro->dirpage = 0;
return diro;
@@ -412,7 +415,7 @@
return 0;
}
- blk = grub_le_to_cpu32 (de[inode->dir.header.sorted[0]].ex.blk2);
+ blk = grub_le_to_cpu32 (de[inode->jfs_dir.header.sorted[0]].ex.blk2);
blk <<= (grub_le_to_cpu16 (data->sblock.log2_blksz) -
GRUB_DISK_SECTOR_BITS);
/* Read in the nodes until we are on the leaf node level. */
@@ -481,7 +484,7 @@
/* If the inode contains the entrie tree or if this was the last
node, there is nothing to read. */
- if ((diro->inode->file.tree.flags & GRUB_JFS_TREE_LEAF)
+ if ((diro->inode->jfs_file.tree.flags & GRUB_JFS_TREE_LEAF)
|| !grub_le_to_cpu64 (diro->dirpage->header.nextb))
return GRUB_ERR_OUT_OF_RANGE;
@@ -703,7 +706,7 @@
return grub_error (GRUB_ERR_SYMLINK_LOOP, "too deep nesting of
symlinks");
if (size <= 128)
- grub_strncpy (symlink, data->currinode.symlink.path, 128);
+ grub_strncpy (symlink, data->currinode.jfs_symlink.path, 128);
else if (grub_jfs_read_file (data, 0, 0, size, symlink) < 0)
return grub_errno;
diff -ru grub2/fs/minix.c grub2-mod/fs/minix.c
--- grub2/fs/minix.c Fri Jan 21 23:34:18 2005
+++ grub2-mod/fs/minix.c Tue Mar 1 16:35:38 2005
@@ -252,7 +252,7 @@
struct grub_minix_sblock *sblock = &data->sblock;
/* Block in which the inode is stored. */
- int block;
+ int block,offs;
data->ino = ino;
/* The first inode in minix is inode 1. */
@@ -265,7 +265,7 @@
if (data->version == 1)
{
block += ino / (GRUB_DISK_SECTOR_SIZE / sizeof (struct
grub_minix_inode));
- int offs = (ino % (GRUB_DISK_SECTOR_SIZE
+ offs = (ino % (GRUB_DISK_SECTOR_SIZE
/ sizeof (struct grub_minix_inode))
* sizeof (struct grub_minix_inode));
@@ -276,7 +276,7 @@
{
block += ino / (GRUB_DISK_SECTOR_SIZE
/ sizeof (struct grub_minix2_inode));
- int offs = (ino
+ offs = (ino
% (GRUB_DISK_SECTOR_SIZE / sizeof (struct grub_minix2_inode))
* sizeof (struct grub_minix2_inode));
diff -ru grub2/fs/ufs.c grub2-mod/fs/ufs.c
--- grub2/fs/ufs.c Mon Nov 1 17:14:16 2004
+++ grub2-mod/fs/ufs.c Wed Mar 2 15:05:50 2005
@@ -45,17 +45,17 @@
#define UFS_BLKSZ(sblock) (grub_le_to_cpu32 (sblock->bsize))
#define INODE(data,field) (data->ufs_type == UFS1 ? \
- data->inode. field : data->inode2. field)
+ data->ufs_inode.ufs_inode_union. field :
data->ufs_inode2.ufs_inode_union. field)
#define INODE_ENDIAN(data,field,bits1,bits2) (data->ufs_type == UFS1 ? \
- grub_le_to_cpu##bits1 (data->inode.field) : \
- grub_le_to_cpu##bits2 (data->inode2.field))
+ grub_le_to_cpu##bits1
(data->ufs_inode.field) : \
+ grub_le_to_cpu##bits2 (data->ufs_inode2.field))
#define INODE_SIZE(data) INODE_ENDIAN (data,size,32,64)
#define INODE_MODE(data) INODE_ENDIAN (data,mode,16,16)
#define INODE_BLKSZ(data) (data->ufs_type == UFS1 ? 32 : 64)
#define INODE_DIRBLOCKS(data,blk) INODE_ENDIAN \
- (data,blocks.dir_blocks[blk],32,64)
+
(data,ufs_inode_union.blocks.dir_blocks[blk],32,64)
#define INODE_INDIRBLOCKS(data,blk) INODE_ENDIAN \
- (data,blocks.indir_blocks[blk],32,64)
+
(data,ufs_inode_union.blocks.indir_blocks[blk],32,64)
/* The blocks on which the superblock can be found. */
static int sblocklist[] = { 128, 16, 0, 512, -1 };
@@ -112,7 +112,7 @@
grub_uint32_t indir_blocks[GRUB_UFS_INDIRBLKS];
} blocks;
grub_uint8_t symlink[(GRUB_UFS_DIRBLKS + GRUB_UFS_INDIRBLKS) * 4];
- };
+ } ufs_inode_union;
grub_uint32_t flags;
grub_uint32_t nblocks;
grub_uint32_t gen;
@@ -151,7 +151,7 @@
grub_uint64_t indir_blocks[GRUB_UFS_INDIRBLKS];
} blocks;
grub_uint8_t symlink[(GRUB_UFS_DIRBLKS + GRUB_UFS_INDIRBLKS) * 8];
- };
+ } ufs_inode_union;
grub_uint8_t unused[24];
};
@@ -174,7 +174,9 @@
{
struct grub_ufs_inode inode;
struct grub_ufs2_inode inode2;
- };
+ } ufs_data_union ;
+#define ufs_inode ufs_data_union.inode
+#define ufs_inode2 ufs_data_union.inode2
enum
{
UFS1,
@@ -323,7 +325,7 @@
if (data->ufs_type == UFS1)
{
- struct grub_ufs_inode *inode = &data->inode;
+ struct grub_ufs_inode *inode = &data->ufs_inode;
grub_disk_read (data->disk,
(((grub_le_to_cpu32 (sblock->inoblk_offs) + grpblk)
@@ -335,7 +337,7 @@
}
else
{
- struct grub_ufs2_inode *inode = &data->inode2;
+ struct grub_ufs2_inode *inode = &data->ufs_inode2;
grub_disk_read (data->disk,
(((grub_le_to_cpu32 (sblock->inoblk_offs) + grpblk)
diff -ru grub2/include/grub/misc.h grub2-mod/include/grub/misc.h
--- grub2/include/grub/misc.h Sat Jan 29 23:01:53 2005
+++ grub2-mod/include/grub/misc.h Wed Mar 2 11:38:21 2005
@@ -35,6 +35,7 @@
char *EXPORT_FUNC(grub_stpcpy) (char *dest, const char *src);
char *EXPORT_FUNC(grub_strcat) (char *dest, const char *src);
char *EXPORT_FUNC(grub_strncat) (char *dest, const char *src, int c);
+void *EXPORT_FUNC(memset) (void *s, int c, grub_size_t n);
/* Prototypes for aliases. */
void *EXPORT_FUNC(memmove) (void *dest, const void *src, grub_size_t n);
--
Vincent Guffens
PhD Student UCL/CESAME
tel: +32 10 47 80 30
Value your freedom, or you will lose it, teaches history.
"Don't bother us with politics," respond those who don't want to learn.
-- Richard M. Stallman
- compiling with 2.95,
Vincent Guffens <=