mirror of
https://github.com/clearlinux/graphene.git
synced 2026-09-08 06:41:58 +00:00
Fix robust list behavior
Reorganize platform-independent code in PAL
This commit is contained in:
@@ -645,6 +645,7 @@ MIGRATE_FUNC_BODY(thread)
|
||||
new_thread->handle_map = NULL;
|
||||
new_thread->root = NULL;
|
||||
new_thread->cwd = NULL;
|
||||
new_thread->robust_list = NULL;
|
||||
|
||||
if (!recursive)
|
||||
new_thread->tcb = NULL;
|
||||
|
||||
@@ -136,6 +136,8 @@ int shim_do_execve_rtld (struct shim_handle * hdl, const char ** argv,
|
||||
|
||||
SAVE_PROFILE_INTERVAL(load_new_executable_for_exec);
|
||||
|
||||
cur_thread->robust_list = NULL;
|
||||
|
||||
debug("execve: start execution\n");
|
||||
execute_elf_object(cur_thread->exec, new_argc, new_argp,
|
||||
REQUIRED_ELF_AUXV, new_auxp);
|
||||
|
||||
@@ -4,7 +4,7 @@ loader.preload = file:$(SHIMPATH)
|
||||
loader.exec = file:/usr/bin/python
|
||||
loader.execname = python
|
||||
loader.env.LD_LIBRARY_PATH = /lib:/lib/x86_64-linux-gnu:/usr/lib:/usr/lib/x86_64-linux-gnu
|
||||
loader.env.PATH = /usr/bin
|
||||
loader.env.PATH = /usr/bin:/bin
|
||||
loader.env.USERNAME =
|
||||
loader.env.HOME =
|
||||
loader.env.PWD =
|
||||
@@ -21,6 +21,10 @@ fs.mount.other.lib2.type = chroot
|
||||
fs.mount.other.lib2.path = /lib/x86_64-linux-gnu
|
||||
fs.mount.other.lib2.uri = file:/lib/x86_64-linux-gnu
|
||||
|
||||
fs.mount.other.bin.type = chroot
|
||||
fs.mount.other.bin.path = /bin
|
||||
fs.mount.other.bin.uri = file:/bin
|
||||
|
||||
fs.mount.other.usr.type = chroot
|
||||
fs.mount.other.usr.path = /usr
|
||||
fs.mount.other.usr.uri = file:/usr
|
||||
|
||||
+2
-2
@@ -5,12 +5,12 @@ AR = ar rcs
|
||||
|
||||
CFLAGS = -Wall -fPIC -O2 -std=gnu99 -fgnu89-inline -U_FORTIFY_SOURCE \
|
||||
-fno-omit-frame-pointer \
|
||||
-fno-stack-protector -fno-builtin \
|
||||
-I. -I../include
|
||||
-fno-stack-protector -fno-builtin
|
||||
ARFLAGS =
|
||||
|
||||
include ../src/host/$(OS)/Makefile.am
|
||||
|
||||
CFLAGS += -I. -I../include
|
||||
subdirs = string stdlib network graphene
|
||||
objs = $(foreach dir,$(subdirs),$(patsubst %.c,%.o,$(wildcard $(dir)/*.c)))
|
||||
headers = asm-errlist.h api.h
|
||||
|
||||
+16
-13
@@ -8,17 +8,20 @@ LD = ld
|
||||
|
||||
CFLAGS = -Wall -fPIC -O2 -std=gnu99 -fgnu89-inline -U_FORTIFY_SOURCE \
|
||||
-fno-omit-frame-pointer \
|
||||
-fno-stack-protector -fno-builtin \
|
||||
-I. -I../include -Ihost/$(OS) -I../lib
|
||||
-fno-stack-protector -fno-builtin
|
||||
LDFLAGS = -shared -nostdlib --version-script pal.map -z combreloc -z defs \
|
||||
-T pal.lds
|
||||
ARFLAGS =
|
||||
|
||||
pal_target = libpal.a libpal.so
|
||||
pal_loader = libpal.so
|
||||
pal_lib = libpal.a
|
||||
|
||||
include host/$(OS)/Makefile.am
|
||||
|
||||
defs = -DIN_PAL
|
||||
CFLAGS += -I. -I../include -Ihost/$(OS) -I../lib
|
||||
|
||||
pal_target = $(pal_loader) $(pal_lib)
|
||||
defs = -DIN_PAL -DSRCDIR="$(PWD)/"
|
||||
objs = $(addprefix db_,streams memory threading semaphore events process \
|
||||
object main misc ipc exception rtld) slab printf
|
||||
graphene_lib = ../lib/graphene-lib.a
|
||||
@@ -43,14 +46,14 @@ $(host_lib):
|
||||
security:
|
||||
@[ ! -d security/$(OS) ] || make -C security/$(OS) $(debug)
|
||||
|
||||
libpal.so: $(addsuffix .o,$(objs)) $(filter %.map %.lds,$(LDFLAGS)) \
|
||||
$(host_lib) $(graphene_lib)
|
||||
@echo [ $@ ]
|
||||
@$(LD) $(LDFLAGS) -o $@ $(filter-out %.map %.lds,$^) -soname=$@
|
||||
$(pal_loader): $(addsuffix .o,$(objs)) $(filter %.map %.lds,$(LDFLAGS)) \
|
||||
$(host_lib) $(graphene_lib)
|
||||
@echo [ libpal.exe ]
|
||||
$(LD) $(LDFLAGS) -o $@ $(filter-out %.map %.lds,$^) $(LDFLAGS-suffix)
|
||||
|
||||
libpal.a: $(addsuffix .o,$(objs)) $(host_lib) $(graphene_lib)
|
||||
$(pal_lib): $(addsuffix .o,$(objs)) $(host_lib) $(graphene_lib)
|
||||
@echo [ $@ ]
|
||||
@$(AR) $(ARFLAGS) $@ $^
|
||||
$(AR) $(ARFLAGS) $@ $^ $(ARFLAGS-suffix)
|
||||
|
||||
%.asm: %.c $(headers)
|
||||
$(CC) $(CFLAGS) $(defs) -c $< -o $<.o
|
||||
@@ -59,13 +62,13 @@ libpal.a: $(addsuffix .o,$(objs)) $(host_lib) $(graphene_lib)
|
||||
|
||||
%.o: %.c $(headers)
|
||||
@echo [ $@ ]
|
||||
@$(CC) $(CFLAGS) $(defs) -c $< -o $@
|
||||
@$(CC) $(CFLAGS) $(defs) -c $< -o $@ $(CFLAGS-suffix)
|
||||
|
||||
%.e: %.c $(headers)
|
||||
@echo [ $@ ]
|
||||
@$(CC) $(CFLAGS) $(defs) -E $< -o $@
|
||||
@$(CC) $(CFLAGS) $(defs) -E $< -o $@ $(CFLAGS-suffix)
|
||||
|
||||
clean:
|
||||
rm -f $(addsuffix .o,$(objs)) $(pal_target)
|
||||
rm -rf $(addsuffix .o,$(objs)) $(pal_target)
|
||||
@[ ! -d host/$(OS) ] || make -C host/$(OS) clean
|
||||
@[ ! -d security/$(OS) ] || make -C security/$(OS) clean
|
||||
|
||||
+2
-2
@@ -98,9 +98,9 @@ static ElfW(Addr) resolve_map (const char **strtab, ElfW(Sym) ** ref)
|
||||
return 0;
|
||||
}
|
||||
|
||||
extern ElfW(Addr) resolve_map_in_rtld (ElfW(Sym) * ref);
|
||||
extern ElfW(Addr) resolve_rtld (const char * sym_name);
|
||||
|
||||
#define RESOLVE_MAP_IN_RTLD(ref) resolve_map_in_rtld(ref)
|
||||
#define RESOLVE_RTLD(sym_name) resolve_rtld(sym_name)
|
||||
#define RESOLVE_MAP(strtab, ref) resolve_map(strtab, ref)
|
||||
|
||||
#include "dynamic_link.h"
|
||||
|
||||
@@ -98,9 +98,9 @@ elf_machine_rela (Elf64_Dyn **l_info, Elf64_Addr l_addr,
|
||||
#else
|
||||
Elf64_Sym *refsym = sym;
|
||||
Elf64_Addr value;
|
||||
Elf64_Addr sym_map;
|
||||
Elf64_Addr sym_map = 0;
|
||||
|
||||
value = RESOLVE_MAP_IN_RTLD(sym);
|
||||
value = RESOLVE_RTLD(strtab + sym->st_name);
|
||||
|
||||
if (value) {
|
||||
/* We can't handle a IRELEATIVE symbol if it's found in RTLD,
|
||||
|
||||
@@ -185,7 +185,7 @@ void setup_vdso_map (ElfW(Addr) addr)
|
||||
}
|
||||
#endif
|
||||
|
||||
ElfW(Addr) resolve_map_in_rtld (ElfW(Sym) * ref)
|
||||
ElfW(Addr) resolve_rtld (const char * sym_name)
|
||||
{
|
||||
/* We are not using this, because in Linux we can rely on
|
||||
rtld_map to directly lookup symbols */
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
#include <elf/elf.h>
|
||||
#include <bits/dlfcn.h>
|
||||
|
||||
ElfW(Addr) resolve_map_in_rtld (ElfW(Sym) * ref)
|
||||
ElfW(Addr) resolve_rtld (const char * sym_name)
|
||||
{
|
||||
/* Not yet implemented */
|
||||
return 0;
|
||||
|
||||
Reference in New Issue
Block a user