Two AArch64-related patches

Andrew Haley aph at redhat.com
Fri Mar 22 03:43:01 PDT 2013


Michal Vyskocil writes:

 > I'm a maintainer of openjdk for SUSE and recently I've got two patches
 > from our AArch64 team for openjdk7. I have no idea if porting of
 > openjdk7 is important for this group, but it is probably better to try
 > it.

You may be aware that there is an AArch64 porting project.

Mailing List
  aarch64-dev at openjdk.java.net
  http://mail.openjdk.java.net/mailman/listinfo/aarch64-dev

The actual source code still isn't there, but hopefully will be as
soon as we get all the legal details sorted out.

Now for the patch itself:

 > --- icedtea-2.3.7/openjdk/hotspot/src/os/linux/vm/os_linux.cpp
 > +++ icedtea-2.3.7/openjdk/hotspot/src/os/linux/vm/os_linux.cpp
 > @@ -1893,7 +1893,8 @@ void * os::dll_load(const char *filename
 >      {EM_MIPS,        EM_MIPS,    ELFCLASS32, ELFDATA2MSB, (char*)"MIPS"},
 >      {EM_PARISC,      EM_PARISC,  ELFCLASS32, ELFDATA2MSB, (char*)"PARISC"},
 >      {EM_68K,         EM_68K,     ELFCLASS32, ELFDATA2MSB, (char*)"M68k"},
 > -    {EM_SH,          EM_SH,      ELFCLASS32, ELFDATA2LSB, (char*)"SH"} /* Support little endian only*/
 > +    {EM_SH,          EM_SH,      ELFCLASS32, ELFDATA2LSB, (char*)"SH"}, /* Support little endian only*/
 > +    {EM_AARCH64,     EM_AARCH64, ELFCLASS64, ELFDATA2LSB, (char*)"AARCH64"} /* Support little endian only*/
 >    };
 >
 >    #if  (defined IA32)
 > @@ -1926,6 +1927,8 @@ void * os::dll_load(const char *filename
 >      static  Elf32_Half running_arch_code=EM_68K;
 >    #elif  (defined SH)
 >      static  Elf32_Half running_arch_code=EM_SH;
 > +  #elif  (defined AARCH64)
 > +    static  Elf32_Half running_arch_code=EM_AARCH64;
 >    #else
 >      #error Method os::dll_load requires that one of following is defined:\
 >           IA32, AMD64, IA64, __sparc, __powerpc__, ARM, S390, ALPHA, MIPS, MIPSEL, PARISC, M68K, SH

This part seems reasonable.

 > --- icedtea-2.3.7/openjdk/hotspot/src/os/linux/vm/os_linux.cpp
 > +++ icedtea-2.3.7/openjdk/hotspot/src/os/linux/vm/os_linux.cpp
 > @@ -5374,14 +5374,6 @@ void Parker::unpark() {
 >
 >  extern char** environ;
 >
 > -#ifndef __NR_fork
 > -#define __NR_fork IA32_ONLY(2) IA64_ONLY(not defined) AMD64_ONLY(57)
 > -#endif
 > -
 > -#ifndef __NR_execve
 > -#define __NR_execve IA32_ONLY(11) IA64_ONLY(1033) AMD64_ONLY(59)
 > -#endif
 > -
 >  // Run the specified command in a separate process. Return its exit value,
 >  // or -1 on failure (e.g. can't fork a new process).
 >  // Unlike system(), this function can be called from signal handler. It
 > @@ -5392,10 +5384,11 @@ int os::fork_and_exec(char* cmd) {
 >    // fork() in LinuxThreads/NPTL is not async-safe. It needs to run
 >    // pthread_atfork handlers and reset pthread library. All we need is a
 >    // separate process to execve. Make a direct syscall to fork process.
 > -  // On IA64 there's no fork syscall, we have to use fork() and hope for
 > -  // the best...
 > -  pid_t pid = NOT_IA64(syscall(__NR_fork);)
 > -              IA64_ONLY(fork();)
 > +#ifdef SYS_fork
 > +  pid_t pid = syscall(SYS_fork);
 > +#else
 > +  pid_t pid = syscall(SYS_clone, SIGCHLD, 0, 0, 0, 0);
 > +#endif
 >
 >    if (pid < 0) {
 >      // fork failed
 > @@ -5409,10 +5402,7 @@ int os::fork_and_exec(char* cmd) {
 >      // not reset by fork() (see notes above), execve() will instead kill
 >      // every thread in the parent process. We know this is the only thread
 >      // in the new process, so make a system call directly.
 > -    // IA64 should use normal execve() from glibc to match the glibc fork()
 > -    // above.
 > -    NOT_IA64(syscall(__NR_execve, "/bin/sh", argv, environ);)
 > -    IA64_ONLY(execve("/bin/sh", (char* const*)argv, environ);)
 > +    syscall(SYS_execve, "/bin/sh", argv, environ);
 >
 >      // execve failed
 >      _exit(-1);

Why have you deleted the IA-64 code?

Andrew.


More information about the porters-dev mailing list