summaryrefslogtreecommitdiffhomepage
path: root/project
diff options
context:
space:
mode:
Diffstat (limited to 'project')
-rw-r--r--project/common.mk3
-rw-r--r--project/config/cfgdefs.in4
-rw-r--r--project/config/cfgdefs.sh31
3 files changed, 36 insertions, 2 deletions
diff --git a/project/common.mk b/project/common.mk
index f7f6929..af5155e 100644
--- a/project/common.mk
+++ b/project/common.mk
@@ -82,7 +82,8 @@ SHARED_OBJS += $(libc_core_files_S:%.S=%.lo)
$(STATIC_OBJS): headers.tag host.tag tree.tag
$(SHARED_OBJS): headers.tag host.tag tree.tag
-$(SHARED_OBJS): CFLAGS_SHARED += -DSHARED=
+$(SHARED_OBJS): CFLAGS_SHARED += $(LIBC_CFLAGS_SHARED) -DSHARED=
+$(STATIC_OBJS): CFLAGS_STATIC += $(LIBC_CFLAGS_STATIC)
src/%.o:$(PORT_DIR)/src/%.c $(HEADER_DEPS)
$(CC) -c -o $@ $< $(CFLAGS_STATIC)
diff --git a/project/config/cfgdefs.in b/project/config/cfgdefs.in
index bbad445..e03094a 100644
--- a/project/config/cfgdefs.in
+++ b/project/config/cfgdefs.in
@@ -4,6 +4,10 @@ LIBC_MAJOR = @libc_major@
LIBC_MINOR = @libc_minor@
LIBC_MICRO = @libc_micro@
+# libc version-specific defs
+LIBC_CFLAGS_SHARED += @libc_td_tid_addr@
+LIBC_CFLAGS_STATIC += @libc_td_tid_addr@
+
# build mode
LIBC_EXCL_FILES = @libc_excl_files@
diff --git a/project/config/cfgdefs.sh b/project/config/cfgdefs.sh
index 168e961..994ef54 100644
--- a/project/config/cfgdefs.sh
+++ b/project/config/cfgdefs.sh
@@ -101,6 +101,31 @@ cfgdefs_set_libc_options()
}
+cfgdefs_set_libc_cflags()
+{
+ libc_td_tid_addr=
+ mb_init_tls_src_file=$mb_source_dir/src/env/__init_tls.c
+
+ [ -z $libc_td_tid_addr ] \
+ && grep '__syscall(SYS_set_tid_address, &td->tid)' $mb_init_tls_src_file > /dev/null \
+ && libc_td_tid_addr='-D__LIBC_TD_TID_ADDR_TID'
+
+ [ -z $libc_td_tid_addr ] \
+ && grep '__syscall(SYS_set_tid_address, &td->join_futex)' $mb_init_tls_src_file > /dev/null \
+ && libc_td_tid_addr='-D__LIBC_TD_TID_ADDR_JOIN_FUTEX'
+
+ [ -z $libc_td_tid_addr ] \
+ && grep '__syscall(SYS_set_tid_address, &td->detach_state)' $mb_init_tls_src_file > /dev/null \
+ && libc_td_tid_addr='-D__LIBC_TD_TID_ADDR_DETACH_STATE'
+
+ [ -z $libc_td_tid_addr ] \
+ && grep '__syscall(SYS_set_tid_address, &__thread_list_lock)' $mb_init_tls_src_file > /dev/null \
+ && libc_td_tid_addr='-D__LIBC_TD_TID_ADDR_THREAD_LIST_LOCK'
+
+ return 0
+}
+
+
cfgdefs_output_custom_defs()
{
sed \
@@ -113,7 +138,8 @@ cfgdefs_output_custom_defs()
-e 's^@libc_excl_files@^'"$libc_excl_files"'^g' \
-e 's/@libc_source_tree@/'"$libc_source_tree"'/g' \
-e 's/@libc_syscall_arch@/'"$libc_syscall_arch"'/g' \
- -e 's!@alltypes_sed@!'"$alltypes_sed"'!g' \
+ -e 's/@libc_td_tid_addr@/'"$libc_td_tid_addr"'/g' \
+ -e 's!@alltypes_sed@!'"$alltypes_sed"'!g' \
"$mb_project_dir/project/config/cfgdefs.in" \
| sed -e 's/[ \t]*$//g' \
>> "$mb_pwd/cfgdefs.mk"
@@ -129,6 +155,9 @@ cfgdefs_detect_libc_version
# libc (variant-specific) options
cfgdefs_set_libc_options
+# libc (variant-specific) cflags
+cfgdefs_set_libc_cflags
+
# cfgdefs.in --> cfgdefs.mk
cfgdefs_output_custom_defs