浏览代码

Merge arm support into the mainstream. This change is pretty
minor, just carefully memset 0 strings before using them, and
also referencs strings via the GOT for ARM as well.
-Erik

Eric Andersen 24 年之前
父节点
当前提交
f95be941de
共有 2 个文件被更改,包括 26 次插入16 次删除
  1. 13 8
      ldso/ldso/hash.h
  2. 13 8
      ldso/ldso/ld_hash.h

+ 13 - 8
ldso/ldso/hash.h

@@ -71,8 +71,8 @@ extern char * _dl_find_hash(char * name, struct dyn_elf * rpnt1,
 	int copyrel);
 extern int _dl_linux_dynamic_link(void);
 
-#ifdef __mc68000__
-/* On m68k constant strings are referenced through the GOT. */
+#if defined mc68000 || defined __arm__
+/* On some arches constant strings are referenced through the GOT. */
 /* XXX Requires load_addr to be defined. */
 #define SEND_STDERR(X)				\
   { const char *__s = (X);			\
@@ -84,22 +84,27 @@ extern int _dl_linux_dynamic_link(void);
 #endif
 
 #define SEND_ADDRESS_STDERR(X, add_a_newline) { \
-    char tmp[13]; \
-    _dl_write(2, _dl_simple_ltoahex_inline( tmp, (unsigned long)(X)), 12); \
+    char tmp[13], *tmp1; \
+    _dl_memset_inline(tmp, 0, sizeof(tmp)); \
+    tmp1=_dl_simple_ltoahex( tmp, (unsigned long)(X)); \
+    _dl_write(2, tmp1, _dl_strlen_inline(tmp1)); \
     if (add_a_newline) { \
 	tmp[0]='\n'; \
 	_dl_write(2, tmp, 1); \
     } \
-};    
+};
 
 #define SEND_NUMBER_STDERR(X, add_a_newline) { \
-    char tmp[13]; \
-    _dl_write(2, (void *)_dl_simple_ltoahex_inline( tmp, (unsigned long)(X)), 12); \
+    char tmp[13], *tmp1; \
+    _dl_memset_inline(tmp, 0, sizeof(tmp)); \
+    tmp1=_dl_simple_ltoahex( tmp, (unsigned long)(X)); \
+    _dl_write(2, tmp1, _dl_strlen_inline(tmp1)); \
     if (add_a_newline) { \
 	tmp[0]='\n'; \
 	_dl_write(2, tmp, 1); \
     } \
-};    
+};
+
 extern int _dl_fdprintf(int, const char *, ...);
 extern char * _dl_library_path;
 extern char * _dl_not_lazy;

+ 13 - 8
ldso/ldso/ld_hash.h

@@ -71,8 +71,8 @@ extern char * _dl_find_hash(char * name, struct dyn_elf * rpnt1,
 	int copyrel);
 extern int _dl_linux_dynamic_link(void);
 
-#ifdef __mc68000__
-/* On m68k constant strings are referenced through the GOT. */
+#if defined mc68000 || defined __arm__
+/* On some arches constant strings are referenced through the GOT. */
 /* XXX Requires load_addr to be defined. */
 #define SEND_STDERR(X)				\
   { const char *__s = (X);			\
@@ -84,22 +84,27 @@ extern int _dl_linux_dynamic_link(void);
 #endif
 
 #define SEND_ADDRESS_STDERR(X, add_a_newline) { \
-    char tmp[13]; \
-    _dl_write(2, _dl_simple_ltoahex_inline( tmp, (unsigned long)(X)), 12); \
+    char tmp[13], *tmp1; \
+    _dl_memset_inline(tmp, 0, sizeof(tmp)); \
+    tmp1=_dl_simple_ltoahex( tmp, (unsigned long)(X)); \
+    _dl_write(2, tmp1, _dl_strlen_inline(tmp1)); \
     if (add_a_newline) { \
 	tmp[0]='\n'; \
 	_dl_write(2, tmp, 1); \
     } \
-};    
+};
 
 #define SEND_NUMBER_STDERR(X, add_a_newline) { \
-    char tmp[13]; \
-    _dl_write(2, (void *)_dl_simple_ltoahex_inline( tmp, (unsigned long)(X)), 12); \
+    char tmp[13], *tmp1; \
+    _dl_memset_inline(tmp, 0, sizeof(tmp)); \
+    tmp1=_dl_simple_ltoahex( tmp, (unsigned long)(X)); \
+    _dl_write(2, tmp1, _dl_strlen_inline(tmp1)); \
     if (add_a_newline) { \
 	tmp[0]='\n'; \
 	_dl_write(2, tmp, 1); \
     } \
-};    
+};
+
 extern int _dl_fdprintf(int, const char *, ...);
 extern char * _dl_library_path;
 extern char * _dl_not_lazy;