[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[tyndur-devel] [PATCH v2] Mehrfachvergabe von Symbolnamen für TMS



* Wenn das Symbol bereits vergeben wurde, ignoriert TMS den Eintrag, im
  Endeffekt wird also der bereits vorhande String genutzt. Die Strings
  werden anhand ihrer Namen (z.B. .LC0) verglichen, sind sie nicht
  identisch, so wird eine Fehlermeldung ausgegeben.

Signed-off-by: Patrick Pokatilo <shyxormz@xxxxxxxxxx>
---
 src/modules/include/tms.h |   11 +++++++----
 1 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/src/modules/include/tms.h b/src/modules/include/tms.h
index 4de11ed..fb6eaac 100644
--- a/src/modules/include/tms.h
+++ b/src/modules/include/tms.h
@@ -76,14 +76,17 @@ struct tms_lang {
 #define TMS(sym, string) \
     ({ \
         asm volatile( \
-            ".ifndef " TMS_SNAME(sym) "\n\t" \
-            ".section tmsstring,\"aw\",@progbits\n\t" \
+            ".ifndef "TMS_SNAME(sym)"\n\t" \
+            ".pushsection tmsstring,\"aw\",@progbits\n\t" \
+            ".set "TMS_SNAME(sym)"_string, %P0\n\t" \
             ".global " TMS_SNAME(sym) "\n\t" \
             TMS_SNAME(sym)":\n\t"\
             ".int %P0\n\t" \
-            ".section .text\n\t" \
+            ".popsection\n\t" \
             ".else\n\t" \
-            ".print \"ignoring symbol '" TMS_SNAME(sym) "' due to duplication\\n\"\n\t" \
+            ".if "TMS_SNAME(sym)"_string != %P0\n\t" \
+            ".error \"TMS: Mehrfachdefinition des Symbols '"TMS_SNAME(sym)"' mit verschiedenen Strings\\n\"\n\t" \
+            ".endif\n\t" \
             ".endif\n" : : "i" (string)); \
         extern const char* TMS_NAME(sym); \
         TMS_NAME(sym); \
-- 
1.7.0.4