|
From: <sv...@va...> - 2005-08-26 23:09:06
|
Author: tom
Date: 2005-08-27 00:09:00 +0100 (Sat, 27 Aug 2005)
New Revision: 4530
Log:
Fill in a few blanks to get static linking working on amd64.
Modified:
branches/ASPACEM/coregrind/m_libcproc.c
branches/ASPACEM/coregrind/m_main.c
branches/ASPACEM/include/vki-linux.h
branches/ASPACEM/include/vki-x86-linux.h
Modified: branches/ASPACEM/coregrind/m_libcproc.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- branches/ASPACEM/coregrind/m_libcproc.c 2005-08-26 21:02:47 UTC (rev =
4529)
+++ branches/ASPACEM/coregrind/m_libcproc.c 2005-08-26 23:09:00 UTC (rev =
4530)
@@ -421,6 +421,13 @@
list[i] =3D (UInt)list16[i];
return size;
=20
+# elif defined(VGP_amd64_linux)
+ SysRes sres;
+ sres =3D VG_(do_syscall2)(__NR_getgroups, size, (Addr)list);
+ if (sres.isError)
+ return -1;
+ return sres.val;
+
# else
# error "VG_(getgroups): needs implementation on this platform"
# endif
Modified: branches/ASPACEM/coregrind/m_main.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- branches/ASPACEM/coregrind/m_main.c 2005-08-26 21:02:47 UTC (rev 4529=
)
+++ branches/ASPACEM/coregrind/m_main.c 2005-08-26 23:09:00 UTC (rev 4530=
)
@@ -238,6 +238,7 @@
=20
extern char _start[];
=20
+#if defined(VGP_x86_linux)
asm("\n"
"\t.globl _start\n"
"\t.type _start,@function\n"
@@ -247,10 +248,22 @@
"\tcall _start_in_C\n"
"\thlt\n"
);
+#elif defined(VGP_amd64_linux)
+asm("\n"
+ "\t.globl _start\n"
+ "\t.type _start,@function\n"
+ "_start:\n"
+ "\tmovq %rsp,%rdi\n"
+ "\tcall _start_in_C\n"
+ "\thlt\n"
+);
+#else
+#error "_start: needs implementation on this platform"
+#endif
=20
extern Int main (Int argc, HChar **argv, HChar **envp);
=20
-static void _start_in_C ( Int* pArgc )
+static void _start_in_C ( ULong* pArgc )
{
Int argc =3D pArgc[0];
HChar** argv =3D (HChar**)&pArgc[1];
Modified: branches/ASPACEM/include/vki-linux.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- branches/ASPACEM/include/vki-linux.h 2005-08-26 21:02:47 UTC (rev 452=
9)
+++ branches/ASPACEM/include/vki-linux.h 2005-08-26 23:09:00 UTC (rev 453=
0)
@@ -1074,9 +1074,41 @@
// From linux-2.6.8.1/include/linux/stat.h
//----------------------------------------------------------------------
=20
+#define VKI_S_IFMT 00170000
+#define VKI_S_IFSOCK 0140000
+#define VKI_S_IFLNK 0120000
+#define VKI_S_IFREG 0100000
+#define VKI_S_IFBLK 0060000
+#define VKI_S_IFDIR 0040000
+#define VKI_S_IFCHR 0020000
+#define VKI_S_IFIFO 0010000
+#define VKI_S_ISUID 0004000
+#define VKI_S_ISGID 0002000
+#define VKI_S_ISVTX 0001000
+
+#define VKI_S_ISLNK(m) (((m) & VKI_S_IFMT) =3D=3D VKI_S_IFLNK)
+#define VKI_S_ISREG(m) (((m) & VKI_S_IFMT) =3D=3D VKI_S_IFREG)
+#define VKI_S_ISDIR(m) (((m) & VKI_S_IFMT) =3D=3D VKI_S_IFDIR)
+#define VKI_S_ISCHR(m) (((m) & VKI_S_IFMT) =3D=3D VKI_S_IFCHR)
+#define VKI_S_ISBLK(m) (((m) & VKI_S_IFMT) =3D=3D VKI_S_IFBLK)
+#define VKI_S_ISFIFO(m) (((m) & VKI_S_IFMT) =3D=3D VKI_S_IFIFO)
+#define VKI_S_ISSOCK(m) (((m) & VKI_S_IFMT) =3D=3D VKI_S_IFSOCK)
+
+#define VKI_S_IRWXU 00700
#define VKI_S_IRUSR 00400
#define VKI_S_IWUSR 00200
+#define VKI_S_IXUSR 00100
=20
+#define VKI_S_IRWXG 00070
+#define VKI_S_IRGRP 00040
+#define VKI_S_IWGRP 00020
+#define VKI_S_IXGRP 00010
+
+#define VKI_S_IRWXO 00007
+#define VKI_S_IROTH 00004
+#define VKI_S_IWOTH 00002
+#define VKI_S_IXOTH 00001
+
//----------------------------------------------------------------------
// From linux-2.6.8.1/include/linux/dirent.h
//----------------------------------------------------------------------
Modified: branches/ASPACEM/include/vki-x86-linux.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- branches/ASPACEM/include/vki-x86-linux.h 2005-08-26 21:02:47 UTC (rev=
4529)
+++ branches/ASPACEM/include/vki-x86-linux.h 2005-08-26 23:09:00 UTC (rev=
4530)
@@ -315,44 +315,9 @@
#define VKI_SIOCGSTAMP 0x8906 /* Get stamp */
=20
//----------------------------------------------------------------------
-// From linux-2.6.8.1/include/linux/stat.h
+// From linux-2.6.8.1/include/asm-i386/stat.h
//----------------------------------------------------------------------
=20
-#define VKI_S_IFMT 00170000
-#define VKI_S_IFSOCK 0140000
-#define VKI_S_IFLNK 0120000
-#define VKI_S_IFREG 0100000
-#define VKI_S_IFBLK 0060000
-#define VKI_S_IFDIR 0040000
-#define VKI_S_IFCHR 0020000
-#define VKI_S_IFIFO 0010000
-#define VKI_S_ISUID 0004000
-#define VKI_S_ISGID 0002000
-#define VKI_S_ISVTX 0001000
-
-#define VKI_S_ISLNK(m) (((m) & VKI_S_IFMT) =3D=3D VKI_S_IFLNK)
-#define VKI_S_ISREG(m) (((m) & VKI_S_IFMT) =3D=3D VKI_S_IFREG)
-#define VKI_S_ISDIR(m) (((m) & VKI_S_IFMT) =3D=3D VKI_S_IFDIR)
-#define VKI_S_ISCHR(m) (((m) & VKI_S_IFMT) =3D=3D VKI_S_IFCHR)
-#define VKI_S_ISBLK(m) (((m) & VKI_S_IFMT) =3D=3D VKI_S_IFBLK)
-#define VKI_S_ISFIFO(m) (((m) & VKI_S_IFMT) =3D=3D VKI_S_IFIFO)
-#define VKI_S_ISSOCK(m) (((m) & VKI_S_IFMT) =3D=3D VKI_S_IFSOCK)
-
-#define VKI_S_IRWXU 00700
-#define VKI_S_IRUSR 00400
-#define VKI_S_IWUSR 00200
-#define VKI_S_IXUSR 00100
-
-#define VKI_S_IRWXG 00070
-#define VKI_S_IRGRP 00040
-#define VKI_S_IWGRP 00020
-#define VKI_S_IXGRP 00010
-
-#define VKI_S_IRWXO 00007
-#define VKI_S_IROTH 00004
-#define VKI_S_IWOTH 00002
-#define VKI_S_IXOTH 00001
-
struct vki_stat {
unsigned long st_dev;
unsigned long st_ino;
|