[libc-test] tls_local_exec.c: add a dynamic relocation test case

Submitted by Fangrui Song on Aug. 14, 2019, 3:20 a.m.

Details

Message ID 20190814032004.y7tdnx5pwftuzsos@gmail.com
State New
Series "tls_local_exec.c: add a dynamic relocation test case"
Headers show

Commit Message

Fangrui Song Aug. 14, 2019, 3:20 a.m.
commit 9d35fec9e1f391d56faee20b868ef4114bcc4d8a fixed a TLS bug introduced
in commit ffab43602b5900c86b7040abdda8ccf6cdec95f5.

% make B=/tmp/libc-test-x86_64 /tmp/libc-test-x86_64/functional/tls_local_exec.err
...
% cat /tmp/libc-test-x86_64/functional/tls_local_exec.err
FAIL /tmp/libc-test-x86_64/functional/tls_local_exec.exe [signal Segmentation fault]

static __thread const char *s1 = "s1";

produces a dynamic relocation against .tdata in a -pie build, which can
have caught the regression.

Patch hide | download patch | download mbox

From 010b8ab803157adcbe5f9fa9a0df5d4017281b9e Mon Sep 17 00:00:00 2001
From: Fangrui Song <i@maskray.me>
Date: Wed, 14 Aug 2019 03:12:00 +0000
Subject: [PATCH] tls_local_exec.c: add a dynamic relocation test case

This can catch the bug fixed by musl commit
9d35fec9e1f391d56faee20b868ef4114bcc4d8a in a -fpie -pie build.
---
 src/functional/tls_local_exec.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/src/functional/tls_local_exec.c b/src/functional/tls_local_exec.c
index c6ec558..af54c52 100644
--- a/src/functional/tls_local_exec.c
+++ b/src/functional/tls_local_exec.c
@@ -1,4 +1,5 @@ 
 #include <stdint.h>
+#include <string.h>
 #include <pthread.h>
 #include "test.h"
 
@@ -8,6 +9,7 @@  static __thread char d4096 __attribute__ ((aligned(4096))) = 33;
 static __thread char z1 = 0;
 static __thread char z64 __attribute__ ((aligned(64))) = 0;
 static __thread char z4096 __attribute__ ((aligned(4096))) = 0;
+static __thread const char *s1 = "s1";
 
 static int tnum;
 
@@ -39,6 +41,8 @@  static void *check(void *arg)
 
 	CHECK(ptrmod(&z64, 64) == 0, " address is %p, want 64 byte alignment", &z64);
 	CHECK(ptrmod(&z4096, 4096) == 0, " address is %p, want 4096 byte alignment", &z4096);
+
+	CHECK(!strcmp(s1, "s1"), " want s1 got %s", s1);
 	return 0;
 }
 
-- 
2.22.0


Comments

Szabolcs Nagy Aug. 22, 2019, 7:36 p.m.
* Fangrui Song <i@maskray.me> [2019-08-14 03:20:04 +0000]:
> commit 9d35fec9e1f391d56faee20b868ef4114bcc4d8a fixed a TLS bug introduced
> in commit ffab43602b5900c86b7040abdda8ccf6cdec95f5.
> 
> % make B=/tmp/libc-test-x86_64 /tmp/libc-test-x86_64/functional/tls_local_exec.err
> ...
> % cat /tmp/libc-test-x86_64/functional/tls_local_exec.err
> FAIL /tmp/libc-test-x86_64/functional/tls_local_exec.exe [signal Segmentation fault]
> 
> static __thread const char *s1 = "s1";
> 
> produces a dynamic relocation against .tdata in a -pie build, which can
> have caught the regression.

thanks committed