Fix robust list behavior

Reorganize platform-independent code in PAL
This commit is contained in:
Chia-Che Tsai
2014-12-05 09:53:14 -05:00
parent fcd5cb358f
commit ff7a89cdec
9 changed files with 32 additions and 22 deletions
+1
View File
@@ -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;
+2
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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"
+2 -2
View File
@@ -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,
+1 -1
View File
@@ -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 */
+1 -1
View File
@@ -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;