[LibOS] Reduce glibc patch

This commit is contained in:
Isaku Yamahata
2019-05-24 03:06:40 +02:00
committed by Michał Kowalczyk
parent 1df0204555
commit fad4301bc0
-161
View File
@@ -240,151 +240,6 @@ index 6dcbabc..c87c773 100644
/* Now life is sane; we can call functions and access global data.
Set up to use the operating system facilities, and find out from
the operating system's program loader where to find the program
@@ -1233,9 +1253,20 @@ of this helper program; chances are you did not intend to run this program.\n\
main_map->l_map_end = allocend;
if ((ph->p_flags & PF_X) && allocend > main_map->l_text_end)
main_map->l_text_end = allocend;
+
+#if 0
+ ElfW(Addr) mapend = (allocend + GLRO(dl_pagesize) - 1)
+ & ~(GLRO(dl_pagesize) - 1);
+ int prot = ((ph->p_flags & PF_R) ? PROT_READ : 0)|
+ ((ph->p_flags & PF_W) ? PROT_WRITE : 0)|
+ ((ph->p_flags & PF_X) ? PROT_EXEC : 0);
+ __mmap ((void *) mapstart, mapend - mapstart,
+ prot,
+ MAP_ANON|MAP_PRIVATE|MAP_FIXED|0x20000000,
+ -1, 0);
+#endif
}
break;
-
case PT_TLS:
if (ph->p_memsz > 0)
{
@@ -1381,13 +1412,31 @@ of this helper program; chances are you did not intend to run this program.\n\
/* PT_GNU_RELRO is usually the last phdr. */
size_t cnt = rtld_ehdr->e_phnum;
while (cnt-- > 0)
+ {
if (rtld_phdr[cnt].p_type == PT_GNU_RELRO)
{
GL(dl_rtld_map).l_relro_addr = rtld_phdr[cnt].p_vaddr;
GL(dl_rtld_map).l_relro_size = rtld_phdr[cnt].p_memsz;
- break;
}
+#if 0
+ if (rtld_phdr[cnt].p_type == PT_LOAD)
+ {
+ ElfW(Addr) mapstart = rtld_phdr[cnt].p_vaddr & ~(GLRO(dl_pagesize) - 1);
+ ElfW(Addr) mapend = (rtld_phdr[cnt].p_vaddr + rtld_phdr[cnt].p_memsz
+ + GLRO(dl_pagesize) - 1)
+ & ~(GLRO(dl_pagesize) - 1);
+ int prot = ((rtld_phdr[cnt].p_flags & PF_R) ? PROT_READ : 0)|
+ ((rtld_phdr[cnt].p_flags & PF_W) ? PROT_WRITE : 0)|
+ ((rtld_phdr[cnt].p_flags & PF_X) ? PROT_EXEC : 0);
+ __mmap ((void *) mapstart, mapend - mapstart,
+ prot,
+ MAP_ANON|MAP_PRIVATE|MAP_FIXED|0x20000000,
+ -1, 0);
+ }
+#endif
+ }
+
/* Add the dynamic linker to the TLS list if it also uses TLS. */
if (GL(dl_rtld_map).l_tls_blocksize != 0)
/* Assign a module ID. Do this before loading any audit modules. */
@@ -1636,89 +1654,6 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n",
}
}
- /* There usually is no ld.so.preload file, it should only be used
- for emergencies and testing. So the open call etc should usually
- fail. Using access() on a non-existing file is faster than using
- open(). So we do this first. If it succeeds we do almost twice
- the work but this does not matter, since it is not for production
- use. */
- static const char preload_file[] = "/etc/ld.so.preload";
- if (__builtin_expect (__access (preload_file, R_OK) == 0, 0))
- {
- /* Read the contents of the file. */
- file = _dl_sysdep_read_whole_file (preload_file, &file_size,
- PROT_READ | PROT_WRITE);
- if (__builtin_expect (file != MAP_FAILED, 0))
- {
- /* Parse the file. It contains names of libraries to be loaded,
- separated by white spaces or `:'. It may also contain
- comments introduced by `#'. */
- char *problem;
- char *runp;
- size_t rest;
-
- /* Eliminate comments. */
- runp = file;
- rest = file_size;
- while (rest > 0)
- {
- char *comment = memchr (runp, '#', rest);
- if (comment == NULL)
- break;
-
- rest -= comment - runp;
- do
- *comment = ' ';
- while (--rest > 0 && *++comment != '\n');
- }
-
- /* We have one problematic case: if we have a name at the end of
- the file without a trailing terminating characters, we cannot
- place the \0. Handle the case separately. */
- if (file[file_size - 1] != ' ' && file[file_size - 1] != '\t'
- && file[file_size - 1] != '\n' && file[file_size - 1] != ':')
- {
- problem = &file[file_size];
- while (problem > file && problem[-1] != ' '
- && problem[-1] != '\t'
- && problem[-1] != '\n' && problem[-1] != ':')
- --problem;
-
- if (problem > file)
- problem[-1] = '\0';
- }
- else
- {
- problem = NULL;
- file[file_size - 1] = '\0';
- }
-
- HP_TIMING_NOW (start);
-
- if (file != problem)
- {
- char *p;
- runp = file;
- while ((p = strsep (&runp, ": \t\n")) != NULL)
- if (p[0] != '\0')
- npreloads += do_preload (p, main_map, preload_file);
- }
-
- if (problem != NULL)
- {
- char *p = strndupa (problem, file_size - (problem - file));
-
- npreloads += do_preload (p, main_map, preload_file);
- }
-
- HP_TIMING_NOW (stop);
- HP_TIMING_DIFF (diff, start, stop);
- HP_TIMING_ACCUM_NT (load_time, diff);
-
- /* We don't need the file anymore. */
- __munmap (file, file_size);
- }
- }
if (__builtin_expect (*first_preload != NULL, 0))
{
diff --git a/malloc/arena.c b/malloc/arena.c
index 5088a25..33a3879 100644
--- a/malloc/arena.c
@@ -480,22 +335,6 @@ index bb11277..354149a 100644
+ syscalldb; glibc_option;
+ }
}
diff --git a/nptl/pthread_create.c b/nptl/pthread_create.c
index 9d7f52f..72d50ae 100644
--- a/nptl/pthread_create.c
+++ b/nptl/pthread_create.c
@@ -405,8 +405,11 @@ start_thread (void *arg)
# error "to do"
#endif
assert (freesize < pd->stackblock_size);
+ /* XXX: may not be necessary */
+#if 0
if (freesize > PTHREAD_STACK_MIN)
__madvise (pd->stackblock, freesize - PTHREAD_STACK_MIN, MADV_DONTNEED);
+#endif
/* If the thread is detached free the TCB. */
if (IS_DETACHED (pd))
diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/cancellation.S b/nptl/sysdeps/unix/sysv/linux/x86_64/cancellation.S
index 89fda5e..f6963f6 100644
--- a/nptl/sysdeps/unix/sysv/linux/x86_64/cancellation.S