mirror of
https://github.com/clearlinux/graphene.git
synced 2026-09-07 06:14:02 +00:00
[LibOS] Reduce glibc patch
This commit is contained in:
committed by
Michał Kowalczyk
parent
1df0204555
commit
fad4301bc0
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user